diff --git a/app/data/EMPTY b/app/data/EMPTY index d19d0890128a02a32fca18cb170238af5a185758..71bd5d9ee6415754429502d8a656f9b5f5b336fd 100644 --- a/app/data/EMPTY +++ b/app/data/EMPTY @@ -1 +1 @@ -1.15.0 \ No newline at end of file +1.16.0 \ No newline at end of file diff --git a/app/data/VERSION b/app/data/VERSION index d19d0890128a02a32fca18cb170238af5a185758..71bd5d9ee6415754429502d8a656f9b5f5b336fd 100644 --- a/app/data/VERSION +++ b/app/data/VERSION @@ -1 +1 @@ -1.15.0 \ No newline at end of file +1.16.0 \ No newline at end of file diff --git a/app/index.php b/app/index.php index 381fc090568117dc1d4c63c4ced29800837df6e2..289ea3ace5d29722c5690e9eba4cd79bd8a6061e 100644 --- a/app/index.php +++ b/app/index.php @@ -12,7 +12,7 @@ if (!@function_exists('__get_custom_data_full_path')) if (!defined('APP_VERSION')) { - define('APP_VERSION', '1.15.0'); + define('APP_VERSION', '1.16.0'); define('APP_VERSION_TYPE', 'community'); define('APP_INDEX_ROOT_FILE', __FILE__); define('APP_INDEX_ROOT_PATH', str_replace('\\', '/', rtrim(dirname(__FILE__), '\\/').'/')); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/af.js b/app/rainloop/v/1.15.0/app/localization/moment/af.js deleted file mode 100644 index 0b2bb26e55882564f40d18b1e01a071f8870c251..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/af.js +++ /dev/null @@ -1,72 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var af = moment.defineLocale('af', { - months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'), - monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), - weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'), - weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'), - weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'), - meridiemParse: /vm|nm/i, - isPM : function (input) { - return /^nm$/i.test(input); - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 12) { - return isLower ? 'vm' : 'VM'; - } else { - return isLower ? 'nm' : 'NM'; - } - }, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Vandag om] LT', - nextDay : '[Môre om] LT', - nextWeek : 'dddd [om] LT', - lastDay : '[Gister om] LT', - lastWeek : '[Laas] dddd [om] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'oor %s', - past : '%s gelede', - s : '\'n paar sekondes', - ss : '%d sekondes', - m : '\'n minuut', - mm : '%d minute', - h : '\'n uur', - hh : '%d ure', - d : '\'n dag', - dd : '%d dae', - M : '\'n maand', - MM : '%d maande', - y : '\'n jaar', - yy : '%d jaar' - }, - dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter - }, - week : { - dow : 1, // Maandag is die eerste dag van die week. - doy : 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar. - } - }); - - return af; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ar-dz.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-dz.js deleted file mode 100644 index e6efd0a26d2ccbd713f99c223998a638480b7933..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ar-dz.js +++ /dev/null @@ -1,58 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var arDz = moment.defineLocale('ar-dz', { - months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'في %s', - past : 'منذ %s', - s : 'ثوان', - ss : '%d ثانية', - m : 'دقيقة', - mm : '%d دقائق', - h : 'ساعة', - hh : '%d ساعات', - d : 'يوم', - dd : '%d أيام', - M : 'شهر', - MM : '%d أشهر', - y : 'سنة', - yy : '%d سنوات' - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return arDz; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ar-kw.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-kw.js deleted file mode 100644 index 6a72e9bacdc7ece784cfb0dc618bcb1f696c0124..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ar-kw.js +++ /dev/null @@ -1,58 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var arKw = moment.defineLocale('ar-kw', { - months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), - monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), - weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'في %s', - past : 'منذ %s', - s : 'ثوان', - ss : '%d ثانية', - m : 'دقيقة', - mm : '%d دقائق', - h : 'ساعة', - hh : '%d ساعات', - d : 'يوم', - dd : '%d أيام', - M : 'شهر', - MM : '%d أشهر', - y : 'سنة', - yy : '%d سنوات' - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return arKw; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ar-ly.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-ly.js deleted file mode 100644 index 0df68c8b41e2891261a237fb519f2ef55a176db0..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ar-ly.js +++ /dev/null @@ -1,121 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '1', - '2': '2', - '3': '3', - '4': '4', - '5': '5', - '6': '6', - '7': '7', - '8': '8', - '9': '9', - '0': '0' - }, pluralForm = function (n) { - return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; - }, plurals = { - s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], - m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], - h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], - d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], - M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], - y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] - }, pluralize = function (u) { - return function (number, withoutSuffix, string, isFuture) { - var f = pluralForm(number), - str = plurals[u][pluralForm(number)]; - if (f === 2) { - str = str[withoutSuffix ? 0 : 1]; - } - return str.replace(/%d/i, number); - }; - }, months = [ - 'يناير', - 'فبراير', - 'مارس', - 'أبريل', - 'مايو', - 'يونيو', - 'يوليو', - 'أغسطس', - 'سبتمبر', - 'أكتوبر', - 'نوفمبر', - 'ديسمبر' - ]; - - var arLy = moment.defineLocale('ar-ly', { - months : months, - monthsShort : months, - weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'D/\u200FM/\u200FYYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ص|م/, - isPM : function (input) { - return 'م' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ص'; - } else { - return 'م'; - } - }, - calendar : { - sameDay: '[اليوم عند الساعة] LT', - nextDay: '[غدًا عند الساعة] LT', - nextWeek: 'dddd [عند الساعة] LT', - lastDay: '[أمس عند الساعة] LT', - lastWeek: 'dddd [عند الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'بعد %s', - past : 'منذ %s', - s : pluralize('s'), - ss : pluralize('s'), - m : pluralize('m'), - mm : pluralize('m'), - h : pluralize('h'), - hh : pluralize('h'), - d : pluralize('d'), - dd : pluralize('d'), - M : pluralize('M'), - MM : pluralize('M'), - y : pluralize('y'), - yy : pluralize('y') - }, - preparse: function (string) { - return string.replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }).replace(/,/g, '،'); - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return arLy; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ar-ma.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-ma.js deleted file mode 100644 index 42db49a7e1448d0060ff1b3f5b3af8bf03ace05b..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ar-ma.js +++ /dev/null @@ -1,58 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var arMa = moment.defineLocale('ar-ma', { - months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), - monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'), - weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'في %s', - past : 'منذ %s', - s : 'ثوان', - ss : '%d ثانية', - m : 'دقيقة', - mm : '%d دقائق', - h : 'ساعة', - hh : '%d ساعات', - d : 'يوم', - dd : '%d أيام', - M : 'شهر', - MM : '%d أشهر', - y : 'سنة', - yy : '%d سنوات' - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return arMa; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ar-sa.js b/app/rainloop/v/1.15.0/app/localization/moment/ar-sa.js deleted file mode 100644 index 1c6d46d5197118ae61e8496716bf7ac31c6157bd..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ar-sa.js +++ /dev/null @@ -1,103 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠' - }, numberMap = { - '١': '1', - '٢': '2', - '٣': '3', - '٤': '4', - '٥': '5', - '٦': '6', - '٧': '7', - '٨': '8', - '٩': '9', - '٠': '0' - }; - - var arSa = moment.defineLocale('ar-sa', { - months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), - weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ص|م/, - isPM : function (input) { - return 'م' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ص'; - } else { - return 'م'; - } - }, - calendar : { - sameDay: '[اليوم على الساعة] LT', - nextDay: '[غدا على الساعة] LT', - nextWeek: 'dddd [على الساعة] LT', - lastDay: '[أمس على الساعة] LT', - lastWeek: 'dddd [على الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'في %s', - past : 'منذ %s', - s : 'ثوان', - ss : '%d ثانية', - m : 'دقيقة', - mm : '%d دقائق', - h : 'ساعة', - hh : '%d ساعات', - d : 'يوم', - dd : '%d أيام', - M : 'شهر', - MM : '%d أشهر', - y : 'سنة', - yy : '%d سنوات' - }, - preparse: function (string) { - return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { - return numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }).replace(/,/g, '،'); - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return arSa; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ar.js b/app/rainloop/v/1.15.0/app/localization/moment/ar.js deleted file mode 100644 index 1549cc1512880bb6f0bbc014818a730582a161fd..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ar.js +++ /dev/null @@ -1,134 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠' - }, numberMap = { - '١': '1', - '٢': '2', - '٣': '3', - '٤': '4', - '٥': '5', - '٦': '6', - '٧': '7', - '٨': '8', - '٩': '9', - '٠': '0' - }, pluralForm = function (n) { - return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5; - }, plurals = { - s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'], - m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'], - h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'], - d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'], - M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'], - y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام'] - }, pluralize = function (u) { - return function (number, withoutSuffix, string, isFuture) { - var f = pluralForm(number), - str = plurals[u][pluralForm(number)]; - if (f === 2) { - str = str[withoutSuffix ? 0 : 1]; - } - return str.replace(/%d/i, number); - }; - }, months = [ - 'يناير', - 'فبراير', - 'مارس', - 'أبريل', - 'مايو', - 'يونيو', - 'يوليو', - 'أغسطس', - 'سبتمبر', - 'أكتوبر', - 'نوفمبر', - 'ديسمبر' - ]; - - var ar = moment.defineLocale('ar', { - months : months, - monthsShort : months, - weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), - weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'), - weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'D/\u200FM/\u200FYYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ص|م/, - isPM : function (input) { - return 'م' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ص'; - } else { - return 'م'; - } - }, - calendar : { - sameDay: '[اليوم عند الساعة] LT', - nextDay: '[غدًا عند الساعة] LT', - nextWeek: 'dddd [عند الساعة] LT', - lastDay: '[أمس عند الساعة] LT', - lastWeek: 'dddd [عند الساعة] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'بعد %s', - past : 'منذ %s', - s : pluralize('s'), - ss : pluralize('s'), - m : pluralize('m'), - mm : pluralize('m'), - h : pluralize('h'), - hh : pluralize('h'), - d : pluralize('d'), - dd : pluralize('d'), - M : pluralize('M'), - MM : pluralize('M'), - y : pluralize('y'), - yy : pluralize('y') - }, - preparse: function (string) { - return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { - return numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }).replace(/,/g, '،'); - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return ar; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/az.js b/app/rainloop/v/1.15.0/app/localization/moment/az.js deleted file mode 100644 index 348ddffeaa1c6b8c8da7cca08cd83f6d99264bb4..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/az.js +++ /dev/null @@ -1,104 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var suffixes = { - 1: '-inci', - 5: '-inci', - 8: '-inci', - 70: '-inci', - 80: '-inci', - 2: '-nci', - 7: '-nci', - 20: '-nci', - 50: '-nci', - 3: '-üncü', - 4: '-üncü', - 100: '-üncü', - 6: '-ncı', - 9: '-uncu', - 10: '-uncu', - 30: '-uncu', - 60: '-ıncı', - 90: '-ıncı' - }; - - var az = moment.defineLocale('az', { - months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'), - monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'), - weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), - weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'), - weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[bugün saat] LT', - nextDay : '[sabah saat] LT', - nextWeek : '[gələn həftə] dddd [saat] LT', - lastDay : '[dünən] LT', - lastWeek : '[keçən həftə] dddd [saat] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s sonra', - past : '%s əvvəl', - s : 'birneçə saniyə', - ss : '%d saniyə', - m : 'bir dəqiqə', - mm : '%d dəqiqə', - h : 'bir saat', - hh : '%d saat', - d : 'bir gün', - dd : '%d gün', - M : 'bir ay', - MM : '%d ay', - y : 'bir il', - yy : '%d il' - }, - meridiemParse: /gecə|səhər|gündüz|axşam/, - isPM : function (input) { - return /^(gündüz|axşam)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'gecə'; - } else if (hour < 12) { - return 'səhər'; - } else if (hour < 17) { - return 'gündüz'; - } else { - return 'axşam'; - } - }, - dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/, - ordinal : function (number) { - if (number === 0) { // special case for zero - return number + '-ıncı'; - } - var a = number % 10, - b = number % 100 - a, - c = number >= 100 ? 100 : null; - return number + (suffixes[a] || suffixes[b] || suffixes[c]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return az; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/bg.js b/app/rainloop/v/1.15.0/app/localization/moment/bg.js deleted file mode 100644 index c70ba304b33f77def980d6d158e1495276347c50..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/bg.js +++ /dev/null @@ -1,89 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var bg = moment.defineLocale('bg', { - months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'), - monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'), - weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'), - weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'), - weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'D.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd, D MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[Днес в] LT', - nextDay : '[Утре в] LT', - nextWeek : 'dddd [в] LT', - lastDay : '[Вчера в] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - case 6: - return '[В изминалата] dddd [в] LT'; - case 1: - case 2: - case 4: - case 5: - return '[В изминалия] dddd [в] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'след %s', - past : 'преди %s', - s : 'няколко секунди', - ss : '%d секунди', - m : 'минута', - mm : '%d минути', - h : 'час', - hh : '%d часа', - d : 'ден', - dd : '%d дни', - M : 'месец', - MM : '%d месеца', - y : 'година', - yy : '%d години' - }, - dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, - ordinal : function (number) { - var lastDigit = number % 10, - last2Digits = number % 100; - if (number === 0) { - return number + '-ев'; - } else if (last2Digits === 0) { - return number + '-ен'; - } else if (last2Digits > 10 && last2Digits < 20) { - return number + '-ти'; - } else if (lastDigit === 1) { - return number + '-ви'; - } else if (lastDigit === 2) { - return number + '-ри'; - } else if (lastDigit === 7 || lastDigit === 8) { - return number + '-ми'; - } else { - return number + '-ти'; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return bg; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/bm.js b/app/rainloop/v/1.15.0/app/localization/moment/bm.js deleted file mode 100644 index 2bb50f5197583f82743c4efc6dde45f3c7030933..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/bm.js +++ /dev/null @@ -1,57 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var bm = moment.defineLocale('bm', { - months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'), - monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'), - weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'), - weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'), - weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'MMMM [tile] D [san] YYYY', - LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm', - LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm' - }, - calendar : { - sameDay : '[Bi lɛrɛ] LT', - nextDay : '[Sini lɛrɛ] LT', - nextWeek : 'dddd [don lɛrɛ] LT', - lastDay : '[Kunu lɛrɛ] LT', - lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s kɔnɔ', - past : 'a bɛ %s bɔ', - s : 'sanga dama dama', - ss : 'sekondi %d', - m : 'miniti kelen', - mm : 'miniti %d', - h : 'lɛrɛ kelen', - hh : 'lɛrɛ %d', - d : 'tile kelen', - dd : 'tile %d', - M : 'kalo kelen', - MM : 'kalo %d', - y : 'san kelen', - yy : 'san %d' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return bm; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/bn.js b/app/rainloop/v/1.15.0/app/localization/moment/bn.js deleted file mode 100644 index 8fe715862e71ababad038c2b91dfdd7d17fdf06b..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/bn.js +++ /dev/null @@ -1,118 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '১', - '2': '২', - '3': '৩', - '4': '৪', - '5': '৫', - '6': '৬', - '7': '৭', - '8': '৮', - '9': '৯', - '0': '০' - }, - numberMap = { - '১': '1', - '২': '2', - '৩': '3', - '৪': '4', - '৫': '5', - '৬': '6', - '৭': '7', - '৮': '8', - '৯': '9', - '০': '0' - }; - - var bn = moment.defineLocale('bn', { - months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'), - monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'), - weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'), - weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'), - weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'), - longDateFormat : { - LT : 'A h:mm সময়', - LTS : 'A h:mm:ss সময়', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm সময়', - LLLL : 'dddd, D MMMM YYYY, A h:mm সময়' - }, - calendar : { - sameDay : '[আজ] LT', - nextDay : '[আগামীকাল] LT', - nextWeek : 'dddd, LT', - lastDay : '[গতকাল] LT', - lastWeek : '[গত] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s পরে', - past : '%s আগে', - s : 'কয়েক সেকেন্ড', - ss : '%d সেকেন্ড', - m : 'এক মিনিট', - mm : '%d মিনিট', - h : 'এক ঘন্টা', - hh : '%d ঘন্টা', - d : 'এক দিন', - dd : '%d দিন', - M : 'এক মাস', - MM : '%d মাস', - y : 'এক বছর', - yy : '%d বছর' - }, - preparse: function (string) { - return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if ((meridiem === 'রাত' && hour >= 4) || - (meridiem === 'দুপুর' && hour < 5) || - meridiem === 'বিকাল') { - return hour + 12; - } else { - return hour; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'রাত'; - } else if (hour < 10) { - return 'সকাল'; - } else if (hour < 17) { - return 'দুপুর'; - } else if (hour < 20) { - return 'বিকাল'; - } else { - return 'রাত'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return bn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/bo.js b/app/rainloop/v/1.15.0/app/localization/moment/bo.js deleted file mode 100644 index 6a98016395d93966c6979dac95c749142e830b29..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/bo.js +++ /dev/null @@ -1,118 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '༡', - '2': '༢', - '3': '༣', - '4': '༤', - '5': '༥', - '6': '༦', - '7': '༧', - '8': '༨', - '9': '༩', - '0': '༠' - }, - numberMap = { - '༡': '1', - '༢': '2', - '༣': '3', - '༤': '4', - '༥': '5', - '༦': '6', - '༧': '7', - '༨': '8', - '༩': '9', - '༠': '0' - }; - - var bo = moment.defineLocale('bo', { - months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), - monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'), - weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'), - weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), - weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'), - longDateFormat : { - LT : 'A h:mm', - LTS : 'A h:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm', - LLLL : 'dddd, D MMMM YYYY, A h:mm' - }, - calendar : { - sameDay : '[དི་རིང] LT', - nextDay : '[སང་ཉིན] LT', - nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT', - lastDay : '[ཁ་སང] LT', - lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ལ་', - past : '%s སྔན་ལ', - s : 'ལམ་སང', - ss : '%d སྐར་ཆ།', - m : 'སྐར་མ་གཅིག', - mm : '%d སྐར་མ', - h : 'ཆུ་ཚོད་གཅིག', - hh : '%d ཆུ་ཚོད', - d : 'ཉིན་གཅིག', - dd : '%d ཉིན་', - M : 'ཟླ་བ་གཅིག', - MM : '%d ཟླ་བ', - y : 'ལོ་གཅིག', - yy : '%d ལོ' - }, - preparse: function (string) { - return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if ((meridiem === 'མཚན་མོ' && hour >= 4) || - (meridiem === 'ཉིན་གུང' && hour < 5) || - meridiem === 'དགོང་དག') { - return hour + 12; - } else { - return hour; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'མཚན་མོ'; - } else if (hour < 10) { - return 'ཞོགས་ཀས'; - } else if (hour < 17) { - return 'ཉིན་གུང'; - } else if (hour < 20) { - return 'དགོང་དག'; - } else { - return 'མཚན་མོ'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return bo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/br.js b/app/rainloop/v/1.15.0/app/localization/moment/br.js deleted file mode 100644 index 42994ca65b90f2679567e2411e26d24cf694a962..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/br.js +++ /dev/null @@ -1,107 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function relativeTimeWithMutation(number, withoutSuffix, key) { - var format = { - 'mm': 'munutenn', - 'MM': 'miz', - 'dd': 'devezh' - }; - return number + ' ' + mutation(format[key], number); - } - function specialMutationForYears(number) { - switch (lastNumber(number)) { - case 1: - case 3: - case 4: - case 5: - case 9: - return number + ' bloaz'; - default: - return number + ' vloaz'; - } - } - function lastNumber(number) { - if (number > 9) { - return lastNumber(number % 10); - } - return number; - } - function mutation(text, number) { - if (number === 2) { - return softMutation(text); - } - return text; - } - function softMutation(text) { - var mutationTable = { - 'm': 'v', - 'b': 'v', - 'd': 'z' - }; - if (mutationTable[text.charAt(0)] === undefined) { - return text; - } - return mutationTable[text.charAt(0)] + text.substring(1); - } - - var br = moment.defineLocale('br', { - months : 'Genver_C\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'), - monthsShort : 'Gen_C\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'), - weekdays : 'Sul_Lun_Meurzh_Merc\'her_Yaou_Gwener_Sadorn'.split('_'), - weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'), - weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h[e]mm A', - LTS : 'h[e]mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D [a viz] MMMM YYYY', - LLL : 'D [a viz] MMMM YYYY h[e]mm A', - LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A' - }, - calendar : { - sameDay : '[Hiziv da] LT', - nextDay : '[Warc\'hoazh da] LT', - nextWeek : 'dddd [da] LT', - lastDay : '[Dec\'h da] LT', - lastWeek : 'dddd [paset da] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'a-benn %s', - past : '%s \'zo', - s : 'un nebeud segondennoù', - ss : '%d eilenn', - m : 'ur vunutenn', - mm : relativeTimeWithMutation, - h : 'un eur', - hh : '%d eur', - d : 'un devezh', - dd : relativeTimeWithMutation, - M : 'ur miz', - MM : relativeTimeWithMutation, - y : 'ur bloaz', - yy : specialMutationForYears - }, - dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/, - ordinal : function (number) { - var output = (number === 1) ? 'añ' : 'vet'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return br; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ca.js b/app/rainloop/v/1.15.0/app/localization/moment/ca.js deleted file mode 100644 index 9a823b9377841a29f81a29b3b006e423bacc4fae..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ca.js +++ /dev/null @@ -1,87 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ca = moment.defineLocale('ca', { - months : { - standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'), - format: 'de gener_de febrer_de març_d\'abril_de maig_de juny_de juliol_d\'agost_de setembre_d\'octubre_de novembre_de desembre'.split('_'), - isFormat: /D[oD]?(\s)+MMMM/ - }, - monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'), - monthsParseExact : true, - weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'), - weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'), - weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM [de] YYYY', - ll : 'D MMM YYYY', - LLL : 'D MMMM [de] YYYY [a les] H:mm', - lll : 'D MMM YYYY, H:mm', - LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm', - llll : 'ddd D MMM YYYY, H:mm' - }, - calendar : { - sameDay : function () { - return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - nextDay : function () { - return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - nextWeek : function () { - return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - lastDay : function () { - return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - lastWeek : function () { - return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'd\'aquí %s', - past : 'fa %s', - s : 'uns segons', - ss : '%d segons', - m : 'un minut', - mm : '%d minuts', - h : 'una hora', - hh : '%d hores', - d : 'un dia', - dd : '%d dies', - M : 'un mes', - MM : '%d mesos', - y : 'un any', - yy : '%d anys' - }, - dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/, - ordinal : function (number, period) { - var output = (number === 1) ? 'r' : - (number === 2) ? 'n' : - (number === 3) ? 'r' : - (number === 4) ? 't' : 'è'; - if (period === 'w' || period === 'W') { - output = 'a'; - } - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return ca; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/cv.js b/app/rainloop/v/1.15.0/app/localization/moment/cv.js deleted file mode 100644 index 1db1488c7109704fcc970523ec58fd06b8f2c382..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/cv.js +++ /dev/null @@ -1,62 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var cv = moment.defineLocale('cv', { - months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'), - monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'), - weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'), - weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'), - weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]', - LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm', - LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm' - }, - calendar : { - sameDay: '[Паян] LT [сехетре]', - nextDay: '[Ыран] LT [сехетре]', - lastDay: '[Ӗнер] LT [сехетре]', - nextWeek: '[Ҫитес] dddd LT [сехетре]', - lastWeek: '[Иртнӗ] dddd LT [сехетре]', - sameElse: 'L' - }, - relativeTime : { - future : function (output) { - var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран'; - return output + affix; - }, - past : '%s каялла', - s : 'пӗр-ик ҫеккунт', - ss : '%d ҫеккунт', - m : 'пӗр минут', - mm : '%d минут', - h : 'пӗр сехет', - hh : '%d сехет', - d : 'пӗр кун', - dd : '%d кун', - M : 'пӗр уйӑх', - MM : '%d уйӑх', - y : 'пӗр ҫул', - yy : '%d ҫул' - }, - dayOfMonthOrdinalParse: /\d{1,2}-мӗш/, - ordinal : '%d-мӗш', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return cv; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/da.js b/app/rainloop/v/1.15.0/app/localization/moment/da.js deleted file mode 100644 index 22a1a5b999341bb699cba4f1d1eae0bffde716ae..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/da.js +++ /dev/null @@ -1,59 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var da = moment.defineLocale('da', { - months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), - weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), - weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'), - weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm' - }, - calendar : { - sameDay : '[i dag kl.] LT', - nextDay : '[i morgen kl.] LT', - nextWeek : 'på dddd [kl.] LT', - lastDay : '[i går kl.] LT', - lastWeek : '[i] dddd[s kl.] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'om %s', - past : '%s siden', - s : 'få sekunder', - ss : '%d sekunder', - m : 'et minut', - mm : '%d minutter', - h : 'en time', - hh : '%d timer', - d : 'en dag', - dd : '%d dage', - M : 'en måned', - MM : '%d måneder', - y : 'et år', - yy : '%d år' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return da; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/de-at.js b/app/rainloop/v/1.15.0/app/localization/moment/de-at.js deleted file mode 100644 index e3ac47b424f4ec58c563f68be570e8bd097a9e88..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/de-at.js +++ /dev/null @@ -1,75 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 'm': ['eine Minute', 'einer Minute'], - 'h': ['eine Stunde', 'einer Stunde'], - 'd': ['ein Tag', 'einem Tag'], - 'dd': [number + ' Tage', number + ' Tagen'], - 'M': ['ein Monat', 'einem Monat'], - 'MM': [number + ' Monate', number + ' Monaten'], - 'y': ['ein Jahr', 'einem Jahr'], - 'yy': [number + ' Jahre', number + ' Jahren'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - var deAt = moment.defineLocale('de-at', { - months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), - weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), - weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd, D. MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[heute um] LT [Uhr]', - sameElse: 'L', - nextDay: '[morgen um] LT [Uhr]', - nextWeek: 'dddd [um] LT [Uhr]', - lastDay: '[gestern um] LT [Uhr]', - lastWeek: '[letzten] dddd [um] LT [Uhr]' - }, - relativeTime : { - future : 'in %s', - past : 'vor %s', - s : 'ein paar Sekunden', - ss : '%d Sekunden', - m : processRelativeTime, - mm : '%d Minuten', - h : processRelativeTime, - hh : '%d Stunden', - d : processRelativeTime, - dd : processRelativeTime, - M : processRelativeTime, - MM : processRelativeTime, - y : processRelativeTime, - yy : processRelativeTime - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return deAt; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/de-ch.js b/app/rainloop/v/1.15.0/app/localization/moment/de-ch.js deleted file mode 100644 index 2676afbc793f5cd1442955513964553f5895a362..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/de-ch.js +++ /dev/null @@ -1,75 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 'm': ['eine Minute', 'einer Minute'], - 'h': ['eine Stunde', 'einer Stunde'], - 'd': ['ein Tag', 'einem Tag'], - 'dd': [number + ' Tage', number + ' Tagen'], - 'M': ['ein Monat', 'einem Monat'], - 'MM': [number + ' Monate', number + ' Monaten'], - 'y': ['ein Jahr', 'einem Jahr'], - 'yy': [number + ' Jahre', number + ' Jahren'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - var deCh = moment.defineLocale('de-ch', { - months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), - weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), - weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd, D. MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[heute um] LT [Uhr]', - sameElse: 'L', - nextDay: '[morgen um] LT [Uhr]', - nextWeek: 'dddd [um] LT [Uhr]', - lastDay: '[gestern um] LT [Uhr]', - lastWeek: '[letzten] dddd [um] LT [Uhr]' - }, - relativeTime : { - future : 'in %s', - past : 'vor %s', - s : 'ein paar Sekunden', - ss : '%d Sekunden', - m : processRelativeTime, - mm : '%d Minuten', - h : processRelativeTime, - hh : '%d Stunden', - d : processRelativeTime, - dd : processRelativeTime, - M : processRelativeTime, - MM : processRelativeTime, - y : processRelativeTime, - yy : processRelativeTime - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return deCh; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/de.js b/app/rainloop/v/1.15.0/app/localization/moment/de.js deleted file mode 100644 index d5c084a2c8c27946320fc4943b4706ff8fc63982..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/de.js +++ /dev/null @@ -1,75 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 'm': ['eine Minute', 'einer Minute'], - 'h': ['eine Stunde', 'einer Stunde'], - 'd': ['ein Tag', 'einem Tag'], - 'dd': [number + ' Tage', number + ' Tagen'], - 'M': ['ein Monat', 'einem Monat'], - 'MM': [number + ' Monate', number + ' Monaten'], - 'y': ['ein Jahr', 'einem Jahr'], - 'yy': [number + ' Jahre', number + ' Jahren'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - var de = moment.defineLocale('de', { - months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), - monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), - weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'), - weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT: 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY HH:mm', - LLLL : 'dddd, D. MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[heute um] LT [Uhr]', - sameElse: 'L', - nextDay: '[morgen um] LT [Uhr]', - nextWeek: 'dddd [um] LT [Uhr]', - lastDay: '[gestern um] LT [Uhr]', - lastWeek: '[letzten] dddd [um] LT [Uhr]' - }, - relativeTime : { - future : 'in %s', - past : 'vor %s', - s : 'ein paar Sekunden', - ss : '%d Sekunden', - m : processRelativeTime, - mm : '%d Minuten', - h : processRelativeTime, - hh : '%d Stunden', - d : processRelativeTime, - dd : processRelativeTime, - M : processRelativeTime, - MM : processRelativeTime, - y : processRelativeTime, - yy : processRelativeTime - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return de; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/dv.js b/app/rainloop/v/1.15.0/app/localization/moment/dv.js deleted file mode 100644 index 8729b02c0c601c216ff5719ea94f479a918683c3..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/dv.js +++ /dev/null @@ -1,98 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var months = [ - 'ޖެނުއަރީ', - 'ފެބްރުއަރީ', - 'މާރިޗު', - 'އޭޕްރީލު', - 'މޭ', - 'ޖޫން', - 'ޖުލައި', - 'އޯގަސްޓު', - 'ސެޕްޓެމްބަރު', - 'އޮކްޓޯބަރު', - 'ނޮވެމްބަރު', - 'ޑިސެމްބަރު' - ], weekdays = [ - 'އާދިއްތަ', - 'ހޯމަ', - 'އަންގާރަ', - 'ބުދަ', - 'ބުރާސްފަތި', - 'ހުކުރު', - 'ހޮނިހިރު' - ]; - - var dv = moment.defineLocale('dv', { - months : months, - monthsShort : months, - weekdays : weekdays, - weekdaysShort : weekdays, - weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'), - longDateFormat : { - - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'D/M/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - meridiemParse: /މކ|މފ/, - isPM : function (input) { - return 'މފ' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'މކ'; - } else { - return 'މފ'; - } - }, - calendar : { - sameDay : '[މިއަދު] LT', - nextDay : '[މާދަމާ] LT', - nextWeek : 'dddd LT', - lastDay : '[އިއްޔެ] LT', - lastWeek : '[ފާއިތުވި] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ތެރޭގައި %s', - past : 'ކުރިން %s', - s : 'ސިކުންތުކޮޅެއް', - ss : 'd% ސިކުންތު', - m : 'މިނިޓެއް', - mm : 'މިނިޓު %d', - h : 'ގަޑިއިރެއް', - hh : 'ގަޑިއިރު %d', - d : 'ދުވަހެއް', - dd : 'ދުވަސް %d', - M : 'މަހެއް', - MM : 'މަސް %d', - y : 'އަހަރެއް', - yy : 'އަހަރު %d' - }, - preparse: function (string) { - return string.replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/,/g, '،'); - }, - week : { - dow : 7, // Sunday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return dv; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/el.js b/app/rainloop/v/1.15.0/app/localization/moment/el.js deleted file mode 100644 index f01fa772a614fedfe5f950c6a88f038a8882e54a..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/el.js +++ /dev/null @@ -1,99 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - - var el = moment.defineLocale('el', { - monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), - monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'), - months : function (momentToFormat, format) { - if (!momentToFormat) { - return this._monthsNominativeEl; - } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM' - return this._monthsGenitiveEl[momentToFormat.month()]; - } else { - return this._monthsNominativeEl[momentToFormat.month()]; - } - }, - monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), - weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), - weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), - weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'), - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'μμ' : 'ΜΜ'; - } else { - return isLower ? 'πμ' : 'ΠΜ'; - } - }, - isPM : function (input) { - return ((input + '').toLowerCase()[0] === 'μ'); - }, - meridiemParse : /[ΠΜ]\.?Μ?\.?/i, - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendarEl : { - sameDay : '[Σήμερα {}] LT', - nextDay : '[Αύριο {}] LT', - nextWeek : 'dddd [{}] LT', - lastDay : '[Χθες {}] LT', - lastWeek : function () { - switch (this.day()) { - case 6: - return '[το προηγούμενο] dddd [{}] LT'; - default: - return '[την προηγούμενη] dddd [{}] LT'; - } - }, - sameElse : 'L' - }, - calendar : function (key, mom) { - var output = this._calendarEl[key], - hours = mom && mom.hours(); - if (isFunction(output)) { - output = output.apply(mom); - } - return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις')); - }, - relativeTime : { - future : 'σε %s', - past : '%s πριν', - s : 'λίγα δευτερόλεπτα', - ss : '%d δευτερόλεπτα', - m : 'ένα λεπτό', - mm : '%d λεπτά', - h : 'μία ώρα', - hh : '%d ώρες', - d : 'μία μέρα', - dd : '%d μέρες', - M : 'ένας μήνας', - MM : '%d μήνες', - y : 'ένας χρόνος', - yy : '%d χρόνια' - }, - dayOfMonthOrdinalParse: /\d{1,2}η/, - ordinal: '%dη', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4st is the first week of the year. - } - }); - - return el; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-SG.js b/app/rainloop/v/1.15.0/app/localization/moment/en-SG.js deleted file mode 100644 index 4c69f117d587c57584e07cca069279e664928417..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-SG.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enSG = moment.defineLocale('en-SG', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - ss : '%d seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return enSG; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-au.js b/app/rainloop/v/1.15.0/app/localization/moment/en-au.js deleted file mode 100644 index 372023786b7842fdcd126da36c0032714ae3f1e0..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-au.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enAu = moment.defineLocale('en-au', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - ss : '%d seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return enAu; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-ca.js b/app/rainloop/v/1.15.0/app/localization/moment/en-ca.js deleted file mode 100644 index 5d0dab08b5c11768423419def726bc49817c3af1..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-ca.js +++ /dev/null @@ -1,62 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enCa = moment.defineLocale('en-ca', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'YYYY-MM-DD', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - ss : '%d seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - return enCa; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-gb.js b/app/rainloop/v/1.15.0/app/localization/moment/en-gb.js deleted file mode 100644 index 85302e5d02fe207f83104d3dfbe423b2512855d8..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-gb.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enGb = moment.defineLocale('en-gb', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - ss : '%d seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return enGb; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-ie.js b/app/rainloop/v/1.15.0/app/localization/moment/en-ie.js deleted file mode 100644 index de0984cff192714aa81a6fac3caef75917efc93d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-ie.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enIe = moment.defineLocale('en-ie', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - ss : '%d seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return enIe; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-il.js b/app/rainloop/v/1.15.0/app/localization/moment/en-il.js deleted file mode 100644 index b18eab86ad28e5a6c7b0f05c93af60aa8beee4db..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-il.js +++ /dev/null @@ -1,61 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enIl = moment.defineLocale('en-il', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - return enIl; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/en-nz.js b/app/rainloop/v/1.15.0/app/localization/moment/en-nz.js deleted file mode 100644 index f4325d4c93d81d32d57c3011028d46bc17d0d091..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/en-nz.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var enNz = moment.defineLocale('en-nz', { - months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), - weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), - weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), - weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - ss : '%d seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return enNz; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/eo.js b/app/rainloop/v/1.15.0/app/localization/moment/eo.js deleted file mode 100644 index 283ebed893bfacc486276e570433ba844c601d80..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/eo.js +++ /dev/null @@ -1,70 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var eo = moment.defineLocale('eo', { - months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'), - weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'), - weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'), - weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'D[-a de] MMMM, YYYY', - LLL : 'D[-a de] MMMM, YYYY HH:mm', - LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm' - }, - meridiemParse: /[ap]\.t\.m/i, - isPM: function (input) { - return input.charAt(0).toLowerCase() === 'p'; - }, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'p.t.m.' : 'P.T.M.'; - } else { - return isLower ? 'a.t.m.' : 'A.T.M.'; - } - }, - calendar : { - sameDay : '[Hodiaŭ je] LT', - nextDay : '[Morgaŭ je] LT', - nextWeek : 'dddd [je] LT', - lastDay : '[Hieraŭ je] LT', - lastWeek : '[pasinta] dddd [je] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'post %s', - past : 'antaŭ %s', - s : 'sekundoj', - ss : '%d sekundoj', - m : 'minuto', - mm : '%d minutoj', - h : 'horo', - hh : '%d horoj', - d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo - dd : '%d tagoj', - M : 'monato', - MM : '%d monatoj', - y : 'jaro', - yy : '%d jaroj' - }, - dayOfMonthOrdinalParse: /\d{1,2}a/, - ordinal : '%da', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return eo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/es-do.js b/app/rainloop/v/1.15.0/app/localization/moment/es-do.js deleted file mode 100644 index 829c2de8716d0420b8010157cd1d766623c1680d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/es-do.js +++ /dev/null @@ -1,91 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), - monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); - - var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; - var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; - - var esDo = moment.defineLocale('es-do', { - months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), - monthsShort : function (m, format) { - if (!m) { - return monthsShortDot; - } else if (/-MMM-/.test(format)) { - return monthsShort[m.month()]; - } else { - return monthsShortDot[m.month()]; - } - }, - monthsRegex: monthsRegex, - monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, - monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, - monthsParse: monthsParse, - longMonthsParse: monthsParse, - shortMonthsParse: monthsParse, - weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), - weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), - weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY h:mm A', - LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' - }, - calendar : { - sameDay : function () { - return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextDay : function () { - return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextWeek : function () { - return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastDay : function () { - return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastWeek : function () { - return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'en %s', - past : 'hace %s', - s : 'unos segundos', - ss : '%d segundos', - m : 'un minuto', - mm : '%d minutos', - h : 'una hora', - hh : '%d horas', - d : 'un día', - dd : '%d días', - M : 'un mes', - MM : '%d meses', - y : 'un año', - yy : '%d años' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return esDo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/es-us.js b/app/rainloop/v/1.15.0/app/localization/moment/es-us.js deleted file mode 100644 index 8e07d077dd53934d8bdfad70795cbaa759be3b12..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/es-us.js +++ /dev/null @@ -1,91 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), - monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); - - var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; - var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; - - var esUs = moment.defineLocale('es-us', { - months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), - monthsShort : function (m, format) { - if (!m) { - return monthsShortDot; - } else if (/-MMM-/.test(format)) { - return monthsShort[m.month()]; - } else { - return monthsShortDot[m.month()]; - } - }, - monthsRegex: monthsRegex, - monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, - monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, - monthsParse: monthsParse, - longMonthsParse: monthsParse, - shortMonthsParse: monthsParse, - weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), - weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), - weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'MM/DD/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY h:mm A', - LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A' - }, - calendar : { - sameDay : function () { - return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextDay : function () { - return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextWeek : function () { - return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastDay : function () { - return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastWeek : function () { - return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'en %s', - past : 'hace %s', - s : 'unos segundos', - ss : '%d segundos', - m : 'un minuto', - mm : '%d minutos', - h : 'una hora', - hh : '%d horas', - d : 'un día', - dd : '%d días', - M : 'un mes', - MM : '%d meses', - y : 'un año', - yy : '%d años' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return esUs; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/es.js b/app/rainloop/v/1.15.0/app/localization/moment/es.js deleted file mode 100644 index aed68026037e26d65dadf09709162dcb4b58b254..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/es.js +++ /dev/null @@ -1,91 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'), - monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'); - - var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i]; - var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i; - - var es = moment.defineLocale('es', { - months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'), - monthsShort : function (m, format) { - if (!m) { - return monthsShortDot; - } else if (/-MMM-/.test(format)) { - return monthsShort[m.month()]; - } else { - return monthsShortDot[m.month()]; - } - }, - monthsRegex : monthsRegex, - monthsShortRegex : monthsRegex, - monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i, - monthsShortStrictRegex : /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i, - monthsParse : monthsParse, - longMonthsParse : monthsParse, - shortMonthsParse : monthsParse, - weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'), - weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'), - weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY H:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' - }, - calendar : { - sameDay : function () { - return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextDay : function () { - return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - nextWeek : function () { - return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastDay : function () { - return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - lastWeek : function () { - return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : 'en %s', - past : 'hace %s', - s : 'unos segundos', - ss : '%d segundos', - m : 'un minuto', - mm : '%d minutos', - h : 'una hora', - hh : '%d horas', - d : 'un día', - dd : '%d días', - M : 'un mes', - MM : '%d meses', - y : 'un año', - yy : '%d años' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return es; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/et.js b/app/rainloop/v/1.15.0/app/localization/moment/et.js deleted file mode 100644 index 8a81b0408335e5ba0039d0e8cf1ea77bf7211cb9..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/et.js +++ /dev/null @@ -1,79 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'], - 'ss': [number + 'sekundi', number + 'sekundit'], - 'm' : ['ühe minuti', 'üks minut'], - 'mm': [number + ' minuti', number + ' minutit'], - 'h' : ['ühe tunni', 'tund aega', 'üks tund'], - 'hh': [number + ' tunni', number + ' tundi'], - 'd' : ['ühe päeva', 'üks päev'], - 'M' : ['kuu aja', 'kuu aega', 'üks kuu'], - 'MM': [number + ' kuu', number + ' kuud'], - 'y' : ['ühe aasta', 'aasta', 'üks aasta'], - 'yy': [number + ' aasta', number + ' aastat'] - }; - if (withoutSuffix) { - return format[key][2] ? format[key][2] : format[key][1]; - } - return isFuture ? format[key][0] : format[key][1]; - } - - var et = moment.defineLocale('et', { - months : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), - monthsShort : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), - weekdays : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), - weekdaysShort : 'P_E_T_K_N_R_L'.split('_'), - weekdaysMin : 'P_E_T_K_N_R_L'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY H:mm', - LLLL : 'dddd, D. MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[Täna,] LT', - nextDay : '[Homme,] LT', - nextWeek : '[Järgmine] dddd LT', - lastDay : '[Eile,] LT', - lastWeek : '[Eelmine] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s pärast', - past : '%s tagasi', - s : processRelativeTime, - ss : processRelativeTime, - m : processRelativeTime, - mm : processRelativeTime, - h : processRelativeTime, - hh : processRelativeTime, - d : processRelativeTime, - dd : '%d päeva', - M : processRelativeTime, - MM : processRelativeTime, - y : processRelativeTime, - yy : processRelativeTime - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return et; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/eu.js b/app/rainloop/v/1.15.0/app/localization/moment/eu.js deleted file mode 100644 index 2c7781b940f8477b7a3814ee2a63260d8910524d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/eu.js +++ /dev/null @@ -1,65 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var eu = moment.defineLocale('eu', { - months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'), - monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'), - monthsParseExact : true, - weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'), - weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'), - weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'YYYY[ko] MMMM[ren] D[a]', - LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm', - LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm', - l : 'YYYY-M-D', - ll : 'YYYY[ko] MMM D[a]', - lll : 'YYYY[ko] MMM D[a] HH:mm', - llll : 'ddd, YYYY[ko] MMM D[a] HH:mm' - }, - calendar : { - sameDay : '[gaur] LT[etan]', - nextDay : '[bihar] LT[etan]', - nextWeek : 'dddd LT[etan]', - lastDay : '[atzo] LT[etan]', - lastWeek : '[aurreko] dddd LT[etan]', - sameElse : 'L' - }, - relativeTime : { - future : '%s barru', - past : 'duela %s', - s : 'segundo batzuk', - ss : '%d segundo', - m : 'minutu bat', - mm : '%d minutu', - h : 'ordu bat', - hh : '%d ordu', - d : 'egun bat', - dd : '%d egun', - M : 'hilabete bat', - MM : '%d hilabete', - y : 'urte bat', - yy : '%d urte' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return eu; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fa.js b/app/rainloop/v/1.15.0/app/localization/moment/fa.js deleted file mode 100644 index e84f7ca1d3bcf51e8f6a13e3ad471da1eedf8b59..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fa.js +++ /dev/null @@ -1,105 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '۱', - '2': '۲', - '3': '۳', - '4': '۴', - '5': '۵', - '6': '۶', - '7': '۷', - '8': '۸', - '9': '۹', - '0': '۰' - }, numberMap = { - '۱': '1', - '۲': '2', - '۳': '3', - '۴': '4', - '۵': '5', - '۶': '6', - '۷': '7', - '۸': '8', - '۹': '9', - '۰': '0' - }; - - var fa = moment.defineLocale('fa', { - months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), - monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'), - weekdays : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), - weekdaysShort : 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split('_'), - weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - meridiemParse: /قبل از ظهر|بعد از ظهر/, - isPM: function (input) { - return /بعد از ظهر/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'قبل از ظهر'; - } else { - return 'بعد از ظهر'; - } - }, - calendar : { - sameDay : '[امروز ساعت] LT', - nextDay : '[فردا ساعت] LT', - nextWeek : 'dddd [ساعت] LT', - lastDay : '[دیروز ساعت] LT', - lastWeek : 'dddd [پیش] [ساعت] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'در %s', - past : '%s پیش', - s : 'چند ثانیه', - ss : 'ثانیه d%', - m : 'یک دقیقه', - mm : '%d دقیقه', - h : 'یک ساعت', - hh : '%d ساعت', - d : 'یک روز', - dd : '%d روز', - M : 'یک ماه', - MM : '%d ماه', - y : 'یک سال', - yy : '%d سال' - }, - preparse: function (string) { - return string.replace(/[۰-۹]/g, function (match) { - return numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }).replace(/,/g, '،'); - }, - dayOfMonthOrdinalParse: /\d{1,2}م/, - ordinal : '%dم', - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return fa; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fi.js b/app/rainloop/v/1.15.0/app/localization/moment/fi.js deleted file mode 100644 index b01159935a39f2424c8b31f0918dba0396c09151..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fi.js +++ /dev/null @@ -1,108 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '), - numbersFuture = [ - 'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', - numbersPast[7], numbersPast[8], numbersPast[9] - ]; - function translate(number, withoutSuffix, key, isFuture) { - var result = ''; - switch (key) { - case 's': - return isFuture ? 'muutaman sekunnin' : 'muutama sekunti'; - case 'ss': - return isFuture ? 'sekunnin' : 'sekuntia'; - case 'm': - return isFuture ? 'minuutin' : 'minuutti'; - case 'mm': - result = isFuture ? 'minuutin' : 'minuuttia'; - break; - case 'h': - return isFuture ? 'tunnin' : 'tunti'; - case 'hh': - result = isFuture ? 'tunnin' : 'tuntia'; - break; - case 'd': - return isFuture ? 'päivän' : 'päivä'; - case 'dd': - result = isFuture ? 'päivän' : 'päivää'; - break; - case 'M': - return isFuture ? 'kuukauden' : 'kuukausi'; - case 'MM': - result = isFuture ? 'kuukauden' : 'kuukautta'; - break; - case 'y': - return isFuture ? 'vuoden' : 'vuosi'; - case 'yy': - result = isFuture ? 'vuoden' : 'vuotta'; - break; - } - result = verbalNumber(number, isFuture) + ' ' + result; - return result; - } - function verbalNumber(number, isFuture) { - return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number; - } - - var fi = moment.defineLocale('fi', { - months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), - monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), - weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), - weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'), - weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD.MM.YYYY', - LL : 'Do MMMM[ta] YYYY', - LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm', - LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm', - l : 'D.M.YYYY', - ll : 'Do MMM YYYY', - lll : 'Do MMM YYYY, [klo] HH.mm', - llll : 'ddd, Do MMM YYYY, [klo] HH.mm' - }, - calendar : { - sameDay : '[tänään] [klo] LT', - nextDay : '[huomenna] [klo] LT', - nextWeek : 'dddd [klo] LT', - lastDay : '[eilen] [klo] LT', - lastWeek : '[viime] dddd[na] [klo] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s päästä', - past : '%s sitten', - s : translate, - ss : translate, - m : translate, - mm : translate, - h : translate, - hh : translate, - d : translate, - dd : translate, - M : translate, - MM : translate, - y : translate, - yy : translate - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return fi; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fo.js b/app/rainloop/v/1.15.0/app/localization/moment/fo.js deleted file mode 100644 index 8e81cfe68190b6ad3a0654bf6594bbd4ab4f9b65..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fo.js +++ /dev/null @@ -1,59 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var fo = moment.defineLocale('fo', { - months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'), - monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), - weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'), - weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'), - weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D. MMMM, YYYY HH:mm' - }, - calendar : { - sameDay : '[Í dag kl.] LT', - nextDay : '[Í morgin kl.] LT', - nextWeek : 'dddd [kl.] LT', - lastDay : '[Í gjár kl.] LT', - lastWeek : '[síðstu] dddd [kl] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'um %s', - past : '%s síðani', - s : 'fá sekund', - ss : '%d sekundir', - m : 'ein minuttur', - mm : '%d minuttir', - h : 'ein tími', - hh : '%d tímar', - d : 'ein dagur', - dd : '%d dagar', - M : 'ein mánaður', - MM : '%d mánaðir', - y : 'eitt ár', - yy : '%d ár' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return fo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fr-ca.js b/app/rainloop/v/1.15.0/app/localization/moment/fr-ca.js deleted file mode 100644 index ad1f77d5e6fbd253e9f84eb900ae3e3d7231d031..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fr-ca.js +++ /dev/null @@ -1,73 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var frCa = moment.defineLocale('fr-ca', { - months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), - monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), - monthsParseExact : true, - weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), - weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), - weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Aujourd’hui à] LT', - nextDay : '[Demain à] LT', - nextWeek : 'dddd [à] LT', - lastDay : '[Hier à] LT', - lastWeek : 'dddd [dernier à] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dans %s', - past : 'il y a %s', - s : 'quelques secondes', - ss : '%d secondes', - m : 'une minute', - mm : '%d minutes', - h : 'une heure', - hh : '%d heures', - d : 'un jour', - dd : '%d jours', - M : 'un mois', - MM : '%d mois', - y : 'un an', - yy : '%d ans' - }, - dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, - ordinal : function (number, period) { - switch (period) { - // Words with masculine grammatical gender: mois, trimestre, jour - default: - case 'M': - case 'Q': - case 'D': - case 'DDD': - case 'd': - return number + (number === 1 ? 'er' : 'e'); - - // Words with feminine grammatical gender: semaine - case 'w': - case 'W': - return number + (number === 1 ? 're' : 'e'); - } - } - }); - - return frCa; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fr-ch.js b/app/rainloop/v/1.15.0/app/localization/moment/fr-ch.js deleted file mode 100644 index 54033d14b8e06d9146dbeadd565d84aff27c9504..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fr-ch.js +++ /dev/null @@ -1,77 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var frCh = moment.defineLocale('fr-ch', { - months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), - monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), - monthsParseExact : true, - weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), - weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), - weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Aujourd’hui à] LT', - nextDay : '[Demain à] LT', - nextWeek : 'dddd [à] LT', - lastDay : '[Hier à] LT', - lastWeek : 'dddd [dernier à] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dans %s', - past : 'il y a %s', - s : 'quelques secondes', - ss : '%d secondes', - m : 'une minute', - mm : '%d minutes', - h : 'une heure', - hh : '%d heures', - d : 'un jour', - dd : '%d jours', - M : 'un mois', - MM : '%d mois', - y : 'un an', - yy : '%d ans' - }, - dayOfMonthOrdinalParse: /\d{1,2}(er|e)/, - ordinal : function (number, period) { - switch (period) { - // Words with masculine grammatical gender: mois, trimestre, jour - default: - case 'M': - case 'Q': - case 'D': - case 'DDD': - case 'd': - return number + (number === 1 ? 'er' : 'e'); - - // Words with feminine grammatical gender: semaine - case 'w': - case 'W': - return number + (number === 1 ? 're' : 'e'); - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return frCh; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fr.js b/app/rainloop/v/1.15.0/app/localization/moment/fr.js deleted file mode 100644 index 928670733971b7ee16d7f2d56b2ae30ac10d8561..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fr.js +++ /dev/null @@ -1,82 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var fr = moment.defineLocale('fr', { - months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'), - monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'), - monthsParseExact : true, - weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'), - weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'), - weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Aujourd’hui à] LT', - nextDay : '[Demain à] LT', - nextWeek : 'dddd [à] LT', - lastDay : '[Hier à] LT', - lastWeek : 'dddd [dernier à] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dans %s', - past : 'il y a %s', - s : 'quelques secondes', - ss : '%d secondes', - m : 'une minute', - mm : '%d minutes', - h : 'une heure', - hh : '%d heures', - d : 'un jour', - dd : '%d jours', - M : 'un mois', - MM : '%d mois', - y : 'un an', - yy : '%d ans' - }, - dayOfMonthOrdinalParse: /\d{1,2}(er|)/, - ordinal : function (number, period) { - switch (period) { - // TODO: Return 'e' when day of month > 1. Move this case inside - // block for masculine words below. - // See https://github.com/moment/moment/issues/3375 - case 'D': - return number + (number === 1 ? 'er' : ''); - - // Words with masculine grammatical gender: mois, trimestre, jour - default: - case 'M': - case 'Q': - case 'DDD': - case 'd': - return number + (number === 1 ? 'er' : 'e'); - - // Words with feminine grammatical gender: semaine - case 'w': - case 'W': - return number + (number === 1 ? 're' : 'e'); - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return fr; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/fy.js b/app/rainloop/v/1.15.0/app/localization/moment/fy.js deleted file mode 100644 index 9a672bf4ffd91b866f87c4ee12769e9760a81220..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/fy.js +++ /dev/null @@ -1,74 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'), - monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'); - - var fy = moment.defineLocale('fy', { - months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'), - monthsShort : function (m, format) { - if (!m) { - return monthsShortWithDots; - } else if (/-MMM-/.test(format)) { - return monthsShortWithoutDots[m.month()]; - } else { - return monthsShortWithDots[m.month()]; - } - }, - monthsParseExact : true, - weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'), - weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'), - weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[hjoed om] LT', - nextDay: '[moarn om] LT', - nextWeek: 'dddd [om] LT', - lastDay: '[juster om] LT', - lastWeek: '[ôfrûne] dddd [om] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'oer %s', - past : '%s lyn', - s : 'in pear sekonden', - ss : '%d sekonden', - m : 'ien minút', - mm : '%d minuten', - h : 'ien oere', - hh : '%d oeren', - d : 'ien dei', - dd : '%d dagen', - M : 'ien moanne', - MM : '%d moannen', - y : 'ien jier', - yy : '%d jierren' - }, - dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return fy; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/gd.js b/app/rainloop/v/1.15.0/app/localization/moment/gd.js deleted file mode 100644 index 4d0d88a747e60baa5c16483739033aaf1563b1ab..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/gd.js +++ /dev/null @@ -1,75 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var months = [ - 'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd' - ]; - - var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh']; - - var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne']; - - var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis']; - - var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa']; - - var gd = moment.defineLocale('gd', { - months : months, - monthsShort : monthsShort, - monthsParseExact : true, - weekdays : weekdays, - weekdaysShort : weekdaysShort, - weekdaysMin : weekdaysMin, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[An-diugh aig] LT', - nextDay : '[A-màireach aig] LT', - nextWeek : 'dddd [aig] LT', - lastDay : '[An-dè aig] LT', - lastWeek : 'dddd [seo chaidh] [aig] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ann an %s', - past : 'bho chionn %s', - s : 'beagan diogan', - ss : '%d diogan', - m : 'mionaid', - mm : '%d mionaidean', - h : 'uair', - hh : '%d uairean', - d : 'latha', - dd : '%d latha', - M : 'mìos', - MM : '%d mìosan', - y : 'bliadhna', - yy : '%d bliadhna' - }, - dayOfMonthOrdinalParse : /\d{1,2}(d|na|mh)/, - ordinal : function (number) { - var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return gd; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/gl.js b/app/rainloop/v/1.15.0/app/localization/moment/gl.js deleted file mode 100644 index 1cc4177cccdffb2adb04a5315a470e0c16b89949..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/gl.js +++ /dev/null @@ -1,76 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var gl = moment.defineLocale('gl', { - months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'), - monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'), - monthsParseExact: true, - weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'), - weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'), - weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY H:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm' - }, - calendar : { - sameDay : function () { - return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; - }, - nextDay : function () { - return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT'; - }, - nextWeek : function () { - return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; - }, - lastDay : function () { - return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT'; - }, - lastWeek : function () { - return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT'; - }, - sameElse : 'L' - }, - relativeTime : { - future : function (str) { - if (str.indexOf('un') === 0) { - return 'n' + str; - } - return 'en ' + str; - }, - past : 'hai %s', - s : 'uns segundos', - ss : '%d segundos', - m : 'un minuto', - mm : '%d minutos', - h : 'unha hora', - hh : '%d horas', - d : 'un día', - dd : '%d días', - M : 'un mes', - MM : '%d meses', - y : 'un ano', - yy : '%d anos' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return gl; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/gom-latn.js b/app/rainloop/v/1.15.0/app/localization/moment/gom-latn.js deleted file mode 100644 index bfad12e739a8e9f769dede404d744cdaecc8bb41..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/gom-latn.js +++ /dev/null @@ -1,122 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 's': ['thodde secondanim', 'thodde second'], - 'ss': [number + ' secondanim', number + ' second'], - 'm': ['eka mintan', 'ek minute'], - 'mm': [number + ' mintanim', number + ' mintam'], - 'h': ['eka voran', 'ek vor'], - 'hh': [number + ' voranim', number + ' voram'], - 'd': ['eka disan', 'ek dis'], - 'dd': [number + ' disanim', number + ' dis'], - 'M': ['eka mhoinean', 'ek mhoino'], - 'MM': [number + ' mhoineanim', number + ' mhoine'], - 'y': ['eka vorsan', 'ek voros'], - 'yy': [number + ' vorsanim', number + ' vorsam'] - }; - return withoutSuffix ? format[key][0] : format[key][1]; - } - - var gomLatn = moment.defineLocale('gom-latn', { - months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'), - monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'), - monthsParseExact : true, - weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\'var'.split('_'), - weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'), - weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'A h:mm [vazta]', - LTS : 'A h:mm:ss [vazta]', - L : 'DD-MM-YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY A h:mm [vazta]', - LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]', - llll: 'ddd, D MMM YYYY, A h:mm [vazta]' - }, - calendar : { - sameDay: '[Aiz] LT', - nextDay: '[Faleam] LT', - nextWeek: '[Ieta to] dddd[,] LT', - lastDay: '[Kal] LT', - lastWeek: '[Fatlo] dddd[,] LT', - sameElse: 'L' - }, - relativeTime : { - future : '%s', - past : '%s adim', - s : processRelativeTime, - ss : processRelativeTime, - m : processRelativeTime, - mm : processRelativeTime, - h : processRelativeTime, - hh : processRelativeTime, - d : processRelativeTime, - dd : processRelativeTime, - M : processRelativeTime, - MM : processRelativeTime, - y : processRelativeTime, - yy : processRelativeTime - }, - dayOfMonthOrdinalParse : /\d{1,2}(er)/, - ordinal : function (number, period) { - switch (period) { - // the ordinal 'er' only applies to day of the month - case 'D': - return number + 'er'; - default: - case 'M': - case 'Q': - case 'DDD': - case 'd': - case 'w': - case 'W': - return number; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - }, - meridiemParse: /rati|sokalli|donparam|sanje/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'rati') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'sokalli') { - return hour; - } else if (meridiem === 'donparam') { - return hour > 12 ? hour : hour + 12; - } else if (meridiem === 'sanje') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'rati'; - } else if (hour < 12) { - return 'sokalli'; - } else if (hour < 16) { - return 'donparam'; - } else if (hour < 20) { - return 'sanje'; - } else { - return 'rati'; - } - } - }); - - return gomLatn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/he.js b/app/rainloop/v/1.15.0/app/localization/moment/he.js deleted file mode 100644 index 7a22e8d7f15ff703ec7b0af226aefe37ec0d7deb..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/he.js +++ /dev/null @@ -1,96 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var he = moment.defineLocale('he', { - months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), - monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'), - weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), - weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'), - weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [ב]MMMM YYYY', - LLL : 'D [ב]MMMM YYYY HH:mm', - LLLL : 'dddd, D [ב]MMMM YYYY HH:mm', - l : 'D/M/YYYY', - ll : 'D MMM YYYY', - lll : 'D MMM YYYY HH:mm', - llll : 'ddd, D MMM YYYY HH:mm' - }, - calendar : { - sameDay : '[היום ב־]LT', - nextDay : '[מחר ב־]LT', - nextWeek : 'dddd [בשעה] LT', - lastDay : '[אתמול ב־]LT', - lastWeek : '[ביום] dddd [האחרון בשעה] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'בעוד %s', - past : 'לפני %s', - s : 'מספר שניות', - ss : '%d שניות', - m : 'דקה', - mm : '%d דקות', - h : 'שעה', - hh : function (number) { - if (number === 2) { - return 'שעתיים'; - } - return number + ' שעות'; - }, - d : 'יום', - dd : function (number) { - if (number === 2) { - return 'יומיים'; - } - return number + ' ימים'; - }, - M : 'חודש', - MM : function (number) { - if (number === 2) { - return 'חודשיים'; - } - return number + ' חודשים'; - }, - y : 'שנה', - yy : function (number) { - if (number === 2) { - return 'שנתיים'; - } else if (number % 10 === 0 && number !== 10) { - return number + ' שנה'; - } - return number + ' שנים'; - } - }, - meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i, - isPM : function (input) { - return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 5) { - return 'לפנות בוקר'; - } else if (hour < 10) { - return 'בבוקר'; - } else if (hour < 12) { - return isLower ? 'לפנה"צ' : 'לפני הצהריים'; - } else if (hour < 18) { - return isLower ? 'אחה"צ' : 'אחרי הצהריים'; - } else { - return 'בערב'; - } - } - }); - - return he; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/hi.js b/app/rainloop/v/1.15.0/app/localization/moment/hi.js deleted file mode 100644 index a07860a0494e0d18a8053db5a88184ca83eb93d8..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/hi.js +++ /dev/null @@ -1,123 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०' - }, - numberMap = { - '१': '1', - '२': '2', - '३': '3', - '४': '4', - '५': '5', - '६': '6', - '७': '7', - '८': '8', - '९': '9', - '०': '0' - }; - - var hi = moment.defineLocale('hi', { - months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'), - monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'), - monthsParseExact: true, - weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), - weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'), - weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), - longDateFormat : { - LT : 'A h:mm बजे', - LTS : 'A h:mm:ss बजे', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm बजे', - LLLL : 'dddd, D MMMM YYYY, A h:mm बजे' - }, - calendar : { - sameDay : '[आज] LT', - nextDay : '[कल] LT', - nextWeek : 'dddd, LT', - lastDay : '[कल] LT', - lastWeek : '[पिछले] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s में', - past : '%s पहले', - s : 'कुछ ही क्षण', - ss : '%d सेकंड', - m : 'एक मिनट', - mm : '%d मिनट', - h : 'एक घंटा', - hh : '%d घंटे', - d : 'एक दिन', - dd : '%d दिन', - M : 'एक महीने', - MM : '%d महीने', - y : 'एक वर्ष', - yy : '%d वर्ष' - }, - preparse: function (string) { - return string.replace(/[१२३४५६७८९०]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - // Hindi notation for meridiems are quite fuzzy in practice. While there exists - // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi. - meridiemParse: /रात|सुबह|दोपहर|शाम/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'रात') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'सुबह') { - return hour; - } else if (meridiem === 'दोपहर') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'शाम') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'रात'; - } else if (hour < 10) { - return 'सुबह'; - } else if (hour < 17) { - return 'दोपहर'; - } else if (hour < 20) { - return 'शाम'; - } else { - return 'रात'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return hi; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/hu.js b/app/rainloop/v/1.15.0/app/localization/moment/hu.js deleted file mode 100644 index 53e9bb6eb44d29ada7f132581700cc1b28f403bb..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/hu.js +++ /dev/null @@ -1,109 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' '); - function translate(number, withoutSuffix, key, isFuture) { - var num = number; - switch (key) { - case 's': - return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce'; - case 'ss': - return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce'; - case 'm': - return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce'); - case 'mm': - return num + (isFuture || withoutSuffix ? ' perc' : ' perce'); - case 'h': - return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája'); - case 'hh': - return num + (isFuture || withoutSuffix ? ' óra' : ' órája'); - case 'd': - return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja'); - case 'dd': - return num + (isFuture || withoutSuffix ? ' nap' : ' napja'); - case 'M': - return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); - case 'MM': - return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja'); - case 'y': - return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve'); - case 'yy': - return num + (isFuture || withoutSuffix ? ' év' : ' éve'); - } - return ''; - } - function week(isFuture) { - return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]'; - } - - var hu = moment.defineLocale('hu', { - months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'), - monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'), - weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'), - weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'), - weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'YYYY.MM.DD.', - LL : 'YYYY. MMMM D.', - LLL : 'YYYY. MMMM D. H:mm', - LLLL : 'YYYY. MMMM D., dddd H:mm' - }, - meridiemParse: /de|du/i, - isPM: function (input) { - return input.charAt(1).toLowerCase() === 'u'; - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 12) { - return isLower === true ? 'de' : 'DE'; - } else { - return isLower === true ? 'du' : 'DU'; - } - }, - calendar : { - sameDay : '[ma] LT[-kor]', - nextDay : '[holnap] LT[-kor]', - nextWeek : function () { - return week.call(this, true); - }, - lastDay : '[tegnap] LT[-kor]', - lastWeek : function () { - return week.call(this, false); - }, - sameElse : 'L' - }, - relativeTime : { - future : '%s múlva', - past : '%s', - s : translate, - ss : translate, - m : translate, - mm : translate, - h : translate, - hh : translate, - d : translate, - dd : translate, - M : translate, - MM : translate, - y : translate, - yy : translate - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return hu; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/id.js b/app/rainloop/v/1.15.0/app/localization/moment/id.js deleted file mode 100644 index c3e8b9e3542995e4356a590195bb6c4f12813cbd..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/id.js +++ /dev/null @@ -1,81 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var id = moment.defineLocale('id', { - months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'), - weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'), - weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), - weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /pagi|siang|sore|malam/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'pagi') { - return hour; - } else if (meridiem === 'siang') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'sore' || meridiem === 'malam') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'pagi'; - } else if (hours < 15) { - return 'siang'; - } else if (hours < 19) { - return 'sore'; - } else { - return 'malam'; - } - }, - calendar : { - sameDay : '[Hari ini pukul] LT', - nextDay : '[Besok pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kemarin pukul] LT', - lastWeek : 'dddd [lalu pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dalam %s', - past : '%s yang lalu', - s : 'beberapa detik', - ss : '%d detik', - m : 'semenit', - mm : '%d menit', - h : 'sejam', - hh : '%d jam', - d : 'sehari', - dd : '%d hari', - M : 'sebulan', - MM : '%d bulan', - y : 'setahun', - yy : '%d tahun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return id; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/it-ch.js b/app/rainloop/v/1.15.0/app/localization/moment/it-ch.js deleted file mode 100644 index fcf2d4b03f3140bca2c18760cb8b781ced12a6b8..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/it-ch.js +++ /dev/null @@ -1,68 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var itCh = moment.defineLocale('it-ch', { - months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), - monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), - weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), - weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), - weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Oggi alle] LT', - nextDay: '[Domani alle] LT', - nextWeek: 'dddd [alle] LT', - lastDay: '[Ieri alle] LT', - lastWeek: function () { - switch (this.day()) { - case 0: - return '[la scorsa] dddd [alle] LT'; - default: - return '[lo scorso] dddd [alle] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : function (s) { - return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; - }, - past : '%s fa', - s : 'alcuni secondi', - ss : '%d secondi', - m : 'un minuto', - mm : '%d minuti', - h : 'un\'ora', - hh : '%d ore', - d : 'un giorno', - dd : '%d giorni', - M : 'un mese', - MM : '%d mesi', - y : 'un anno', - yy : '%d anni' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal: '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return itCh; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/it.js b/app/rainloop/v/1.15.0/app/localization/moment/it.js deleted file mode 100644 index f42ff8fa5b78392bd99028b917db386780feb7c4..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/it.js +++ /dev/null @@ -1,68 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var it = moment.defineLocale('it', { - months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'), - monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'), - weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'), - weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'), - weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Oggi alle] LT', - nextDay: '[Domani alle] LT', - nextWeek: 'dddd [alle] LT', - lastDay: '[Ieri alle] LT', - lastWeek: function () { - switch (this.day()) { - case 0: - return '[la scorsa] dddd [alle] LT'; - default: - return '[lo scorso] dddd [alle] LT'; - } - }, - sameElse: 'L' - }, - relativeTime : { - future : function (s) { - return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s; - }, - past : '%s fa', - s : 'alcuni secondi', - ss : '%d secondi', - m : 'un minuto', - mm : '%d minuti', - h : 'un\'ora', - hh : '%d ore', - d : 'un giorno', - dd : '%d giorni', - M : 'un mese', - MM : '%d mesi', - y : 'un anno', - yy : '%d anni' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal: '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return it; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ja.js b/app/rainloop/v/1.15.0/app/localization/moment/ja.js deleted file mode 100644 index 4e4efd6ae49e0e97cc26c837d42177bd71c36dbc..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ja.js +++ /dev/null @@ -1,91 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ja = moment.defineLocale('ja', { - months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), - weekdaysShort : '日_月_火_水_木_金_土'.split('_'), - weekdaysMin : '日_月_火_水_木_金_土'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY/MM/DD', - LL : 'YYYY年M月D日', - LLL : 'YYYY年M月D日 HH:mm', - LLLL : 'YYYY年M月D日 dddd HH:mm', - l : 'YYYY/MM/DD', - ll : 'YYYY年M月D日', - lll : 'YYYY年M月D日 HH:mm', - llll : 'YYYY年M月D日(ddd) HH:mm' - }, - meridiemParse: /午前|午後/i, - isPM : function (input) { - return input === '午後'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return '午前'; - } else { - return '午後'; - } - }, - calendar : { - sameDay : '[今日] LT', - nextDay : '[明日] LT', - nextWeek : function (now) { - if (now.week() < this.week()) { - return '[来週]dddd LT'; - } else { - return 'dddd LT'; - } - }, - lastDay : '[昨日] LT', - lastWeek : function (now) { - if (this.week() < now.week()) { - return '[先週]dddd LT'; - } else { - return 'dddd LT'; - } - }, - sameElse : 'L' - }, - dayOfMonthOrdinalParse : /\d{1,2}日/, - ordinal : function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + '日'; - default: - return number; - } - }, - relativeTime : { - future : '%s後', - past : '%s前', - s : '数秒', - ss : '%d秒', - m : '1分', - mm : '%d分', - h : '1時間', - hh : '%d時間', - d : '1日', - dd : '%d日', - M : '1ヶ月', - MM : '%dヶ月', - y : '1年', - yy : '%d年' - } - }); - - return ja; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/jv.js b/app/rainloop/v/1.15.0/app/localization/moment/jv.js deleted file mode 100644 index b2bb4f41c89f96e72c140a13301f9f7e4f3a2c36..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/jv.js +++ /dev/null @@ -1,81 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var jv = moment.defineLocale('jv', { - months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'), - monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'), - weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'), - weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'), - weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /enjing|siyang|sonten|ndalu/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'enjing') { - return hour; - } else if (meridiem === 'siyang') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'sonten' || meridiem === 'ndalu') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'enjing'; - } else if (hours < 15) { - return 'siyang'; - } else if (hours < 19) { - return 'sonten'; - } else { - return 'ndalu'; - } - }, - calendar : { - sameDay : '[Dinten puniko pukul] LT', - nextDay : '[Mbenjang pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kala wingi pukul] LT', - lastWeek : 'dddd [kepengker pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'wonten ing %s', - past : '%s ingkang kepengker', - s : 'sawetawis detik', - ss : '%d detik', - m : 'setunggal menit', - mm : '%d menit', - h : 'setunggal jam', - hh : '%d jam', - d : 'sedinten', - dd : '%d dinten', - M : 'sewulan', - MM : '%d wulan', - y : 'setaun', - yy : '%d taun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return jv; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ka.js b/app/rainloop/v/1.15.0/app/localization/moment/ka.js deleted file mode 100644 index 0ec5eb24ebe10ca7802ccf2437241aae69fb9cfe..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ka.js +++ /dev/null @@ -1,88 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ka = moment.defineLocale('ka', { - months : { - standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'), - format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_') - }, - monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'), - weekdays : { - standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'), - format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'), - isFormat: /(წინა|შემდეგ)/ - }, - weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'), - weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[დღეს] LT[-ზე]', - nextDay : '[ხვალ] LT[-ზე]', - lastDay : '[გუშინ] LT[-ზე]', - nextWeek : '[შემდეგ] dddd LT[-ზე]', - lastWeek : '[წინა] dddd LT-ზე', - sameElse : 'L' - }, - relativeTime : { - future : function (s) { - return (/(წამი|წუთი|საათი|წელი)/).test(s) ? - s.replace(/ი$/, 'ში') : - s + 'ში'; - }, - past : function (s) { - if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) { - return s.replace(/(ი|ე)$/, 'ის წინ'); - } - if ((/წელი/).test(s)) { - return s.replace(/წელი$/, 'წლის წინ'); - } - }, - s : 'რამდენიმე წამი', - ss : '%d წამი', - m : 'წუთი', - mm : '%d წუთი', - h : 'საათი', - hh : '%d საათი', - d : 'დღე', - dd : '%d დღე', - M : 'თვე', - MM : '%d თვე', - y : 'წელი', - yy : '%d წელი' - }, - dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/, - ordinal : function (number) { - if (number === 0) { - return number; - } - if (number === 1) { - return number + '-ლი'; - } - if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) { - return 'მე-' + number; - } - return number + '-ე'; - }, - week : { - dow : 1, - doy : 7 - } - }); - - return ka; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/kk.js b/app/rainloop/v/1.15.0/app/localization/moment/kk.js deleted file mode 100644 index c468f6701f3805df26c2fc23577fd081ed658dd3..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/kk.js +++ /dev/null @@ -1,86 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var suffixes = { - 0: '-ші', - 1: '-ші', - 2: '-ші', - 3: '-ші', - 4: '-ші', - 5: '-ші', - 6: '-шы', - 7: '-ші', - 8: '-ші', - 9: '-шы', - 10: '-шы', - 20: '-шы', - 30: '-шы', - 40: '-шы', - 50: '-ші', - 60: '-шы', - 70: '-ші', - 80: '-ші', - 90: '-шы', - 100: '-ші' - }; - - var kk = moment.defineLocale('kk', { - months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'), - monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'), - weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'), - weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'), - weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Бүгін сағат] LT', - nextDay : '[Ертең сағат] LT', - nextWeek : 'dddd [сағат] LT', - lastDay : '[Кеше сағат] LT', - lastWeek : '[Өткен аптаның] dddd [сағат] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ішінде', - past : '%s бұрын', - s : 'бірнеше секунд', - ss : '%d секунд', - m : 'бір минут', - mm : '%d минут', - h : 'бір сағат', - hh : '%d сағат', - d : 'бір күн', - dd : '%d күн', - M : 'бір ай', - MM : '%d ай', - y : 'бір жыл', - yy : '%d жыл' - }, - dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/, - ordinal : function (number) { - var a = number % 10, - b = number >= 100 ? 100 : null; - return number + (suffixes[number] || suffixes[a] || suffixes[b]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return kk; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/kn.js b/app/rainloop/v/1.15.0/app/localization/moment/kn.js deleted file mode 100644 index 8d0ae9d874e302e65243501f3ff0ff5b9a79f419..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/kn.js +++ /dev/null @@ -1,125 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '೧', - '2': '೨', - '3': '೩', - '4': '೪', - '5': '೫', - '6': '೬', - '7': '೭', - '8': '೮', - '9': '೯', - '0': '೦' - }, - numberMap = { - '೧': '1', - '೨': '2', - '೩': '3', - '೪': '4', - '೫': '5', - '೬': '6', - '೭': '7', - '೮': '8', - '೯': '9', - '೦': '0' - }; - - var kn = moment.defineLocale('kn', { - months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'), - monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'), - monthsParseExact: true, - weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'), - weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'), - weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'), - longDateFormat : { - LT : 'A h:mm', - LTS : 'A h:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm', - LLLL : 'dddd, D MMMM YYYY, A h:mm' - }, - calendar : { - sameDay : '[ಇಂದು] LT', - nextDay : '[ನಾಳೆ] LT', - nextWeek : 'dddd, LT', - lastDay : '[ನಿನ್ನೆ] LT', - lastWeek : '[ಕೊನೆಯ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ನಂತರ', - past : '%s ಹಿಂದೆ', - s : 'ಕೆಲವು ಕ್ಷಣಗಳು', - ss : '%d ಸೆಕೆಂಡುಗಳು', - m : 'ಒಂದು ನಿಮಿಷ', - mm : '%d ನಿಮಿಷ', - h : 'ಒಂದು ಗಂಟೆ', - hh : '%d ಗಂಟೆ', - d : 'ಒಂದು ದಿನ', - dd : '%d ದಿನ', - M : 'ಒಂದು ತಿಂಗಳು', - MM : '%d ತಿಂಗಳು', - y : 'ಒಂದು ವರ್ಷ', - yy : '%d ವರ್ಷ' - }, - preparse: function (string) { - return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'ರಾತ್ರಿ') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') { - return hour; - } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'ಸಂಜೆ') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ರಾತ್ರಿ'; - } else if (hour < 10) { - return 'ಬೆಳಿಗ್ಗೆ'; - } else if (hour < 17) { - return 'ಮಧ್ಯಾಹ್ನ'; - } else if (hour < 20) { - return 'ಸಂಜೆ'; - } else { - return 'ರಾತ್ರಿ'; - } - }, - dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/, - ordinal : function (number) { - return number + 'ನೇ'; - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return kn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ko.js b/app/rainloop/v/1.15.0/app/localization/moment/ko.js deleted file mode 100644 index 40f1bb5dc51d71b961b6a23c245fccae35184321..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ko.js +++ /dev/null @@ -1,80 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ko = moment.defineLocale('ko', { - months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), - monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), - weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), - weekdaysShort : '일_월_화_수_목_금_토'.split('_'), - weekdaysMin : '일_월_화_수_목_금_토'.split('_'), - longDateFormat : { - LT : 'A h:mm', - LTS : 'A h:mm:ss', - L : 'YYYY.MM.DD.', - LL : 'YYYY년 MMMM D일', - LLL : 'YYYY년 MMMM D일 A h:mm', - LLLL : 'YYYY년 MMMM D일 dddd A h:mm', - l : 'YYYY.MM.DD.', - ll : 'YYYY년 MMMM D일', - lll : 'YYYY년 MMMM D일 A h:mm', - llll : 'YYYY년 MMMM D일 dddd A h:mm' - }, - calendar : { - sameDay : '오늘 LT', - nextDay : '내일 LT', - nextWeek : 'dddd LT', - lastDay : '어제 LT', - lastWeek : '지난주 dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s 후', - past : '%s 전', - s : '몇 초', - ss : '%d초', - m : '1분', - mm : '%d분', - h : '한 시간', - hh : '%d시간', - d : '하루', - dd : '%d일', - M : '한 달', - MM : '%d달', - y : '일 년', - yy : '%d년' - }, - dayOfMonthOrdinalParse : /\d{1,2}(일|월|주)/, - ordinal : function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + '일'; - case 'M': - return number + '월'; - case 'w': - case 'W': - return number + '주'; - default: - return number; - } - }, - meridiemParse : /오전|오후/, - isPM : function (token) { - return token === '오후'; - }, - meridiem : function (hour, minute, isUpper) { - return hour < 12 ? '오전' : '오후'; - } - }); - - return ko; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ku.js b/app/rainloop/v/1.15.0/app/localization/moment/ku.js deleted file mode 100644 index 05b9dbe2e72d69bd1c7f35a29a308a310e1c5c93..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ku.js +++ /dev/null @@ -1,118 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '١', - '2': '٢', - '3': '٣', - '4': '٤', - '5': '٥', - '6': '٦', - '7': '٧', - '8': '٨', - '9': '٩', - '0': '٠' - }, numberMap = { - '١': '1', - '٢': '2', - '٣': '3', - '٤': '4', - '٥': '5', - '٦': '6', - '٧': '7', - '٨': '8', - '٩': '9', - '٠': '0' - }, - months = [ - 'کانونی دووەم', - 'شوبات', - 'ئازار', - 'نیسان', - 'ئایار', - 'حوزەیران', - 'تەمموز', - 'ئاب', - 'ئەیلوول', - 'تشرینی یەكەم', - 'تشرینی دووەم', - 'كانونی یەکەم' - ]; - - - var ku = moment.defineLocale('ku', { - months : months, - monthsShort : months, - weekdays : 'یهكشهممه_دووشهممه_سێشهممه_چوارشهممه_پێنجشهممه_ههینی_شهممه'.split('_'), - weekdaysShort : 'یهكشهم_دووشهم_سێشهم_چوارشهم_پێنجشهم_ههینی_شهممه'.split('_'), - weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - meridiemParse: /ئێواره|بهیانی/, - isPM: function (input) { - return /ئێواره/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'بهیانی'; - } else { - return 'ئێواره'; - } - }, - calendar : { - sameDay : '[ئهمرۆ كاتژمێر] LT', - nextDay : '[بهیانی كاتژمێر] LT', - nextWeek : 'dddd [كاتژمێر] LT', - lastDay : '[دوێنێ كاتژمێر] LT', - lastWeek : 'dddd [كاتژمێر] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'له %s', - past : '%s', - s : 'چهند چركهیهك', - ss : 'چركه %d', - m : 'یهك خولهك', - mm : '%d خولهك', - h : 'یهك كاتژمێر', - hh : '%d كاتژمێر', - d : 'یهك ڕۆژ', - dd : '%d ڕۆژ', - M : 'یهك مانگ', - MM : '%d مانگ', - y : 'یهك ساڵ', - yy : '%d ساڵ' - }, - preparse: function (string) { - return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) { - return numberMap[match]; - }).replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }).replace(/,/g, '،'); - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return ku; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ky.js b/app/rainloop/v/1.15.0/app/localization/moment/ky.js deleted file mode 100644 index 8bd29a3653f020a3c35f804dc9b31cc70054ac2c..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ky.js +++ /dev/null @@ -1,86 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var suffixes = { - 0: '-чү', - 1: '-чи', - 2: '-чи', - 3: '-чү', - 4: '-чү', - 5: '-чи', - 6: '-чы', - 7: '-чи', - 8: '-чи', - 9: '-чу', - 10: '-чу', - 20: '-чы', - 30: '-чу', - 40: '-чы', - 50: '-чү', - 60: '-чы', - 70: '-чи', - 80: '-чи', - 90: '-чу', - 100: '-чү' - }; - - var ky = moment.defineLocale('ky', { - months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'), - monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'), - weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'), - weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'), - weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Бүгүн саат] LT', - nextDay : '[Эртең саат] LT', - nextWeek : 'dddd [саат] LT', - lastDay : '[Кечээ саат] LT', - lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ичинде', - past : '%s мурун', - s : 'бирнече секунд', - ss : '%d секунд', - m : 'бир мүнөт', - mm : '%d мүнөт', - h : 'бир саат', - hh : '%d саат', - d : 'бир күн', - dd : '%d күн', - M : 'бир ай', - MM : '%d ай', - y : 'бир жыл', - yy : '%d жыл' - }, - dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/, - ordinal : function (number) { - var a = number % 10, - b = number >= 100 ? 100 : null; - return number + (suffixes[number] || suffixes[a] || suffixes[b]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return ky; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/lo.js b/app/rainloop/v/1.15.0/app/localization/moment/lo.js deleted file mode 100644 index 7cd6cfc8d2f7b7969a12683561ea198b10e9aea0..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/lo.js +++ /dev/null @@ -1,69 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var lo = moment.defineLocale('lo', { - months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), - monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'), - weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), - weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'), - weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'ວັນdddd D MMMM YYYY HH:mm' - }, - meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/, - isPM: function (input) { - return input === 'ຕອນແລງ'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ຕອນເຊົ້າ'; - } else { - return 'ຕອນແລງ'; - } - }, - calendar : { - sameDay : '[ມື້ນີ້ເວລາ] LT', - nextDay : '[ມື້ອື່ນເວລາ] LT', - nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT', - lastDay : '[ມື້ວານນີ້ເວລາ] LT', - lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ອີກ %s', - past : '%sຜ່ານມາ', - s : 'ບໍ່ເທົ່າໃດວິນາທີ', - ss : '%d ວິນາທີ' , - m : '1 ນາທີ', - mm : '%d ນາທີ', - h : '1 ຊົ່ວໂມງ', - hh : '%d ຊົ່ວໂມງ', - d : '1 ມື້', - dd : '%d ມື້', - M : '1 ເດືອນ', - MM : '%d ເດືອນ', - y : '1 ປີ', - yy : '%d ປີ' - }, - dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/, - ordinal : function (number) { - return 'ທີ່' + number; - } - }); - - return lo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/lt.js b/app/rainloop/v/1.15.0/app/localization/moment/lt.js deleted file mode 100644 index bc7d7e7a0a32c293563ecc78ea90358e56d4d20c..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/lt.js +++ /dev/null @@ -1,117 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var units = { - 'ss' : 'sekundė_sekundžių_sekundes', - 'm' : 'minutė_minutės_minutę', - 'mm': 'minutės_minučių_minutes', - 'h' : 'valanda_valandos_valandą', - 'hh': 'valandos_valandų_valandas', - 'd' : 'diena_dienos_dieną', - 'dd': 'dienos_dienų_dienas', - 'M' : 'mėnuo_mėnesio_mėnesį', - 'MM': 'mėnesiai_mėnesių_mėnesius', - 'y' : 'metai_metų_metus', - 'yy': 'metai_metų_metus' - }; - function translateSeconds(number, withoutSuffix, key, isFuture) { - if (withoutSuffix) { - return 'kelios sekundės'; - } else { - return isFuture ? 'kelių sekundžių' : 'kelias sekundes'; - } - } - function translateSingular(number, withoutSuffix, key, isFuture) { - return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]); - } - function special(number) { - return number % 10 === 0 || (number > 10 && number < 20); - } - function forms(key) { - return units[key].split('_'); - } - function translate(number, withoutSuffix, key, isFuture) { - var result = number + ' '; - if (number === 1) { - return result + translateSingular(number, withoutSuffix, key[0], isFuture); - } else if (withoutSuffix) { - return result + (special(number) ? forms(key)[1] : forms(key)[0]); - } else { - if (isFuture) { - return result + forms(key)[1]; - } else { - return result + (special(number) ? forms(key)[1] : forms(key)[2]); - } - } - } - var lt = moment.defineLocale('lt', { - months : { - format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'), - standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'), - isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/ - }, - monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'), - weekdays : { - format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'), - standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'), - isFormat: /dddd HH:mm/ - }, - weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'), - weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'YYYY [m.] MMMM D [d.]', - LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', - LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]', - l : 'YYYY-MM-DD', - ll : 'YYYY [m.] MMMM D [d.]', - lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]', - llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]' - }, - calendar : { - sameDay : '[Šiandien] LT', - nextDay : '[Rytoj] LT', - nextWeek : 'dddd LT', - lastDay : '[Vakar] LT', - lastWeek : '[Praėjusį] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : 'po %s', - past : 'prieš %s', - s : translateSeconds, - ss : translate, - m : translateSingular, - mm : translate, - h : translateSingular, - hh : translate, - d : translateSingular, - dd : translate, - M : translateSingular, - MM : translate, - y : translateSingular, - yy : translate - }, - dayOfMonthOrdinalParse: /\d{1,2}-oji/, - ordinal : function (number) { - return number + '-oji'; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return lt; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/lv.js b/app/rainloop/v/1.15.0/app/localization/moment/lv.js deleted file mode 100644 index b5b8ea84304493c8dc754ea9e1a0d405f88a9f97..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/lv.js +++ /dev/null @@ -1,96 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var units = { - 'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'), - 'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), - 'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'), - 'h': 'stundas_stundām_stunda_stundas'.split('_'), - 'hh': 'stundas_stundām_stunda_stundas'.split('_'), - 'd': 'dienas_dienām_diena_dienas'.split('_'), - 'dd': 'dienas_dienām_diena_dienas'.split('_'), - 'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), - 'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'), - 'y': 'gada_gadiem_gads_gadi'.split('_'), - 'yy': 'gada_gadiem_gads_gadi'.split('_') - }; - /** - * @param withoutSuffix boolean true = a length of time; false = before/after a period of time. - */ - function format(forms, number, withoutSuffix) { - if (withoutSuffix) { - // E.g. "21 minūte", "3 minūtes". - return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3]; - } else { - // E.g. "21 minūtes" as in "pēc 21 minūtes". - // E.g. "3 minūtēm" as in "pēc 3 minūtēm". - return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1]; - } - } - function relativeTimeWithPlural(number, withoutSuffix, key) { - return number + ' ' + format(units[key], number, withoutSuffix); - } - function relativeTimeWithSingular(number, withoutSuffix, key) { - return format(units[key], number, withoutSuffix); - } - function relativeSeconds(number, withoutSuffix) { - return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm'; - } - - var lv = moment.defineLocale('lv', { - months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'), - monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'), - weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'), - weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'), - weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY.', - LL : 'YYYY. [gada] D. MMMM', - LLL : 'YYYY. [gada] D. MMMM, HH:mm', - LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm' - }, - calendar : { - sameDay : '[Šodien pulksten] LT', - nextDay : '[Rīt pulksten] LT', - nextWeek : 'dddd [pulksten] LT', - lastDay : '[Vakar pulksten] LT', - lastWeek : '[Pagājušā] dddd [pulksten] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'pēc %s', - past : 'pirms %s', - s : relativeSeconds, - ss : relativeTimeWithPlural, - m : relativeTimeWithSingular, - mm : relativeTimeWithPlural, - h : relativeTimeWithSingular, - hh : relativeTimeWithPlural, - d : relativeTimeWithSingular, - dd : relativeTimeWithPlural, - M : relativeTimeWithSingular, - MM : relativeTimeWithPlural, - y : relativeTimeWithSingular, - yy : relativeTimeWithPlural - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return lv; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/mk.js b/app/rainloop/v/1.15.0/app/localization/moment/mk.js deleted file mode 100644 index 051f683ffd475e9cb0914e248f79f2c823794ec8..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/mk.js +++ /dev/null @@ -1,89 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var mk = moment.defineLocale('mk', { - months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'), - monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'), - weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'), - weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'), - weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'D.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd, D MMMM YYYY H:mm' - }, - calendar : { - sameDay : '[Денес во] LT', - nextDay : '[Утре во] LT', - nextWeek : '[Во] dddd [во] LT', - lastDay : '[Вчера во] LT', - lastWeek : function () { - switch (this.day()) { - case 0: - case 3: - case 6: - return '[Изминатата] dddd [во] LT'; - case 1: - case 2: - case 4: - case 5: - return '[Изминатиот] dddd [во] LT'; - } - }, - sameElse : 'L' - }, - relativeTime : { - future : 'после %s', - past : 'пред %s', - s : 'неколку секунди', - ss : '%d секунди', - m : 'минута', - mm : '%d минути', - h : 'час', - hh : '%d часа', - d : 'ден', - dd : '%d дена', - M : 'месец', - MM : '%d месеци', - y : 'година', - yy : '%d години' - }, - dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/, - ordinal : function (number) { - var lastDigit = number % 10, - last2Digits = number % 100; - if (number === 0) { - return number + '-ев'; - } else if (last2Digits === 0) { - return number + '-ен'; - } else if (last2Digits > 10 && last2Digits < 20) { - return number + '-ти'; - } else if (lastDigit === 1) { - return number + '-ви'; - } else if (lastDigit === 2) { - return number + '-ри'; - } else if (lastDigit === 7 || lastDigit === 8) { - return number + '-ми'; - } else { - return number + '-ти'; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return mk; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ml.js b/app/rainloop/v/1.15.0/app/localization/moment/ml.js deleted file mode 100644 index 806db47b9f1c3446306e1862dac4e931bc0ad9c4..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ml.js +++ /dev/null @@ -1,80 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ml = moment.defineLocale('ml', { - months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'), - monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'), - monthsParseExact : true, - weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'), - weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), - weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'), - longDateFormat : { - LT : 'A h:mm -നു', - LTS : 'A h:mm:ss -നു', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm -നു', - LLLL : 'dddd, D MMMM YYYY, A h:mm -നു' - }, - calendar : { - sameDay : '[ഇന്ന്] LT', - nextDay : '[നാളെ] LT', - nextWeek : 'dddd, LT', - lastDay : '[ഇന്നലെ] LT', - lastWeek : '[കഴിഞ്ഞ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s കഴിഞ്ഞ്', - past : '%s മുൻപ്', - s : 'അൽപ നിമിഷങ്ങൾ', - ss : '%d സെക്കൻഡ്', - m : 'ഒരു മിനിറ്റ്', - mm : '%d മിനിറ്റ്', - h : 'ഒരു മണിക്കൂർ', - hh : '%d മണിക്കൂർ', - d : 'ഒരു ദിവസം', - dd : '%d ദിവസം', - M : 'ഒരു മാസം', - MM : '%d മാസം', - y : 'ഒരു വർഷം', - yy : '%d വർഷം' - }, - meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if ((meridiem === 'രാത്രി' && hour >= 4) || - meridiem === 'ഉച്ച കഴിഞ്ഞ്' || - meridiem === 'വൈകുന്നേരം') { - return hour + 12; - } else { - return hour; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'രാത്രി'; - } else if (hour < 12) { - return 'രാവിലെ'; - } else if (hour < 17) { - return 'ഉച്ച കഴിഞ്ഞ്'; - } else if (hour < 20) { - return 'വൈകുന്നേരം'; - } else { - return 'രാത്രി'; - } - } - }); - - return ml; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/mn.js b/app/rainloop/v/1.15.0/app/localization/moment/mn.js deleted file mode 100644 index f4b95c816e2f4bef8a8ca79a714a084e910117c2..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/mn.js +++ /dev/null @@ -1,103 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function translate(number, withoutSuffix, key, isFuture) { - switch (key) { - case 's': - return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын'; - case 'ss': - return number + (withoutSuffix ? ' секунд' : ' секундын'); - case 'm': - case 'mm': - return number + (withoutSuffix ? ' минут' : ' минутын'); - case 'h': - case 'hh': - return number + (withoutSuffix ? ' цаг' : ' цагийн'); - case 'd': - case 'dd': - return number + (withoutSuffix ? ' өдөр' : ' өдрийн'); - case 'M': - case 'MM': - return number + (withoutSuffix ? ' сар' : ' сарын'); - case 'y': - case 'yy': - return number + (withoutSuffix ? ' жил' : ' жилийн'); - default: - return number; - } - } - - var mn = moment.defineLocale('mn', { - months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'), - monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'), - monthsParseExact : true, - weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'), - weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'), - weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'YYYY оны MMMMын D', - LLL : 'YYYY оны MMMMын D HH:mm', - LLLL : 'dddd, YYYY оны MMMMын D HH:mm' - }, - meridiemParse: /ҮӨ|ҮХ/i, - isPM : function (input) { - return input === 'ҮХ'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ҮӨ'; - } else { - return 'ҮХ'; - } - }, - calendar : { - sameDay : '[Өнөөдөр] LT', - nextDay : '[Маргааш] LT', - nextWeek : '[Ирэх] dddd LT', - lastDay : '[Өчигдөр] LT', - lastWeek : '[Өнгөрсөн] dddd LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s дараа', - past : '%s өмнө', - s : translate, - ss : translate, - m : translate, - mm : translate, - h : translate, - hh : translate, - d : translate, - dd : translate, - M : translate, - MM : translate, - y : translate, - yy : translate - }, - dayOfMonthOrdinalParse: /\d{1,2} өдөр/, - ordinal : function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + ' өдөр'; - default: - return number; - } - } - }); - - return mn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/mr.js b/app/rainloop/v/1.15.0/app/localization/moment/mr.js deleted file mode 100644 index 984559fdfa7e03bcc6230a3a1367d89d791ba6ad..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/mr.js +++ /dev/null @@ -1,159 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०' - }, - numberMap = { - '१': '1', - '२': '2', - '३': '3', - '४': '4', - '५': '5', - '६': '6', - '७': '7', - '८': '8', - '९': '9', - '०': '0' - }; - - function relativeTimeMr(number, withoutSuffix, string, isFuture) - { - var output = ''; - if (withoutSuffix) { - switch (string) { - case 's': output = 'काही सेकंद'; break; - case 'ss': output = '%d सेकंद'; break; - case 'm': output = 'एक मिनिट'; break; - case 'mm': output = '%d मिनिटे'; break; - case 'h': output = 'एक तास'; break; - case 'hh': output = '%d तास'; break; - case 'd': output = 'एक दिवस'; break; - case 'dd': output = '%d दिवस'; break; - case 'M': output = 'एक महिना'; break; - case 'MM': output = '%d महिने'; break; - case 'y': output = 'एक वर्ष'; break; - case 'yy': output = '%d वर्षे'; break; - } - } - else { - switch (string) { - case 's': output = 'काही सेकंदां'; break; - case 'ss': output = '%d सेकंदां'; break; - case 'm': output = 'एका मिनिटा'; break; - case 'mm': output = '%d मिनिटां'; break; - case 'h': output = 'एका तासा'; break; - case 'hh': output = '%d तासां'; break; - case 'd': output = 'एका दिवसा'; break; - case 'dd': output = '%d दिवसां'; break; - case 'M': output = 'एका महिन्या'; break; - case 'MM': output = '%d महिन्यां'; break; - case 'y': output = 'एका वर्षा'; break; - case 'yy': output = '%d वर्षां'; break; - } - } - return output.replace(/%d/i, number); - } - - var mr = moment.defineLocale('mr', { - months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'), - monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'), - monthsParseExact : true, - weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'), - weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'), - weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'), - longDateFormat : { - LT : 'A h:mm वाजता', - LTS : 'A h:mm:ss वाजता', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm वाजता', - LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता' - }, - calendar : { - sameDay : '[आज] LT', - nextDay : '[उद्या] LT', - nextWeek : 'dddd, LT', - lastDay : '[काल] LT', - lastWeek: '[मागील] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future: '%sमध्ये', - past: '%sपूर्वी', - s: relativeTimeMr, - ss: relativeTimeMr, - m: relativeTimeMr, - mm: relativeTimeMr, - h: relativeTimeMr, - hh: relativeTimeMr, - d: relativeTimeMr, - dd: relativeTimeMr, - M: relativeTimeMr, - MM: relativeTimeMr, - y: relativeTimeMr, - yy: relativeTimeMr - }, - preparse: function (string) { - return string.replace(/[१२३४५६७८९०]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'रात्री') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'सकाळी') { - return hour; - } else if (meridiem === 'दुपारी') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'सायंकाळी') { - return hour + 12; - } - }, - meridiem: function (hour, minute, isLower) { - if (hour < 4) { - return 'रात्री'; - } else if (hour < 10) { - return 'सकाळी'; - } else if (hour < 17) { - return 'दुपारी'; - } else if (hour < 20) { - return 'सायंकाळी'; - } else { - return 'रात्री'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return mr; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ms-my.js b/app/rainloop/v/1.15.0/app/localization/moment/ms-my.js deleted file mode 100644 index 92014be240749088f76f182aff22f263b2281bd1..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ms-my.js +++ /dev/null @@ -1,81 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var msMy = moment.defineLocale('ms-my', { - months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), - monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), - weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), - weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), - weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /pagi|tengahari|petang|malam/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'pagi') { - return hour; - } else if (meridiem === 'tengahari') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'petang' || meridiem === 'malam') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'pagi'; - } else if (hours < 15) { - return 'tengahari'; - } else if (hours < 19) { - return 'petang'; - } else { - return 'malam'; - } - }, - calendar : { - sameDay : '[Hari ini pukul] LT', - nextDay : '[Esok pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kelmarin pukul] LT', - lastWeek : 'dddd [lepas pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dalam %s', - past : '%s yang lepas', - s : 'beberapa saat', - ss : '%d saat', - m : 'seminit', - mm : '%d minit', - h : 'sejam', - hh : '%d jam', - d : 'sehari', - dd : '%d hari', - M : 'sebulan', - MM : '%d bulan', - y : 'setahun', - yy : '%d tahun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return msMy; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ms.js b/app/rainloop/v/1.15.0/app/localization/moment/ms.js deleted file mode 100644 index b499b5c53bfdc962ab1a5b5dbde62f05e53de273..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ms.js +++ /dev/null @@ -1,81 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ms = moment.defineLocale('ms', { - months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), - monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'), - weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), - weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), - weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [pukul] HH.mm', - LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm' - }, - meridiemParse: /pagi|tengahari|petang|malam/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'pagi') { - return hour; - } else if (meridiem === 'tengahari') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'petang' || meridiem === 'malam') { - return hour + 12; - } - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'pagi'; - } else if (hours < 15) { - return 'tengahari'; - } else if (hours < 19) { - return 'petang'; - } else { - return 'malam'; - } - }, - calendar : { - sameDay : '[Hari ini pukul] LT', - nextDay : '[Esok pukul] LT', - nextWeek : 'dddd [pukul] LT', - lastDay : '[Kelmarin pukul] LT', - lastWeek : 'dddd [lepas pukul] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'dalam %s', - past : '%s yang lepas', - s : 'beberapa saat', - ss : '%d saat', - m : 'seminit', - mm : '%d minit', - h : 'sejam', - hh : '%d jam', - d : 'sehari', - dd : '%d hari', - M : 'sebulan', - MM : '%d bulan', - y : 'setahun', - yy : '%d tahun' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return ms; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/mt.js b/app/rainloop/v/1.15.0/app/localization/moment/mt.js deleted file mode 100644 index 4a34c5deb2750da0ccfd3645818c4bddcb8ab7b1..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/mt.js +++ /dev/null @@ -1,59 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var mt = moment.defineLocale('mt', { - months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'), - monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'), - weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'), - weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'), - weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Illum fil-]LT', - nextDay : '[Għada fil-]LT', - nextWeek : 'dddd [fil-]LT', - lastDay : '[Il-bieraħ fil-]LT', - lastWeek : 'dddd [li għadda] [fil-]LT', - sameElse : 'L' - }, - relativeTime : { - future : 'f’ %s', - past : '%s ilu', - s : 'ftit sekondi', - ss : '%d sekondi', - m : 'minuta', - mm : '%d minuti', - h : 'siegħa', - hh : '%d siegħat', - d : 'ġurnata', - dd : '%d ġranet', - M : 'xahar', - MM : '%d xhur', - y : 'sena', - yy : '%d sni' - }, - dayOfMonthOrdinalParse : /\d{1,2}º/, - ordinal: '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return mt; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/nb.js b/app/rainloop/v/1.15.0/app/localization/moment/nb.js deleted file mode 100644 index f22981042e2e5e7553ee0161d157c633a7cc1127..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/nb.js +++ /dev/null @@ -1,61 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var nb = moment.defineLocale('nb', { - months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), - monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'), - monthsParseExact : true, - weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'), - weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'), - weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY [kl.] HH:mm', - LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' - }, - calendar : { - sameDay: '[i dag kl.] LT', - nextDay: '[i morgen kl.] LT', - nextWeek: 'dddd [kl.] LT', - lastDay: '[i går kl.] LT', - lastWeek: '[forrige] dddd [kl.] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'om %s', - past : '%s siden', - s : 'noen sekunder', - ss : '%d sekunder', - m : 'ett minutt', - mm : '%d minutter', - h : 'en time', - hh : '%d timer', - d : 'en dag', - dd : '%d dager', - M : 'en måned', - MM : '%d måneder', - y : 'ett år', - yy : '%d år' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return nb; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ne.js b/app/rainloop/v/1.15.0/app/localization/moment/ne.js deleted file mode 100644 index 21c03a85b8cb4ca818ebcc749e04a1dd7039532f..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ne.js +++ /dev/null @@ -1,122 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '१', - '2': '२', - '3': '३', - '4': '४', - '5': '५', - '6': '६', - '7': '७', - '8': '८', - '9': '९', - '0': '०' - }, - numberMap = { - '१': '1', - '२': '2', - '३': '3', - '४': '4', - '५': '5', - '६': '6', - '७': '7', - '८': '8', - '९': '9', - '०': '0' - }; - - var ne = moment.defineLocale('ne', { - months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'), - monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'), - monthsParseExact : true, - weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'), - weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'), - weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'Aको h:mm बजे', - LTS : 'Aको h:mm:ss बजे', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, Aको h:mm बजे', - LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे' - }, - preparse: function (string) { - return string.replace(/[१२३४५६७८९०]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - meridiemParse: /राति|बिहान|दिउँसो|साँझ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'राति') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'बिहान') { - return hour; - } else if (meridiem === 'दिउँसो') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'साँझ') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 3) { - return 'राति'; - } else if (hour < 12) { - return 'बिहान'; - } else if (hour < 16) { - return 'दिउँसो'; - } else if (hour < 20) { - return 'साँझ'; - } else { - return 'राति'; - } - }, - calendar : { - sameDay : '[आज] LT', - nextDay : '[भोलि] LT', - nextWeek : '[आउँदो] dddd[,] LT', - lastDay : '[हिजो] LT', - lastWeek : '[गएको] dddd[,] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%sमा', - past : '%s अगाडि', - s : 'केही क्षण', - ss : '%d सेकेण्ड', - m : 'एक मिनेट', - mm : '%d मिनेट', - h : 'एक घण्टा', - hh : '%d घण्टा', - d : 'एक दिन', - dd : '%d दिन', - M : 'एक महिना', - MM : '%d महिना', - y : 'एक बर्ष', - yy : '%d बर्ष' - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return ne; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/nl-be.js b/app/rainloop/v/1.15.0/app/localization/moment/nl-be.js deleted file mode 100644 index 479e291393c34ce1e3011d3be0987709fd95666f..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/nl-be.js +++ /dev/null @@ -1,86 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), - monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); - - var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; - var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; - - var nlBe = moment.defineLocale('nl-be', { - months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), - monthsShort : function (m, format) { - if (!m) { - return monthsShortWithDots; - } else if (/-MMM-/.test(format)) { - return monthsShortWithoutDots[m.month()]; - } else { - return monthsShortWithDots[m.month()]; - } - }, - - monthsRegex: monthsRegex, - monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, - monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, - - monthsParse : monthsParse, - longMonthsParse : monthsParse, - shortMonthsParse : monthsParse, - - weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), - weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), - weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[vandaag om] LT', - nextDay: '[morgen om] LT', - nextWeek: 'dddd [om] LT', - lastDay: '[gisteren om] LT', - lastWeek: '[afgelopen] dddd [om] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'over %s', - past : '%s geleden', - s : 'een paar seconden', - ss : '%d seconden', - m : 'één minuut', - mm : '%d minuten', - h : 'één uur', - hh : '%d uur', - d : 'één dag', - dd : '%d dagen', - M : 'één maand', - MM : '%d maanden', - y : 'één jaar', - yy : '%d jaar' - }, - dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return nlBe; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/nl.js b/app/rainloop/v/1.15.0/app/localization/moment/nl.js deleted file mode 100644 index 11e78b9a30ec7ecd5b1b9018536a84bc8e485d7a..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/nl.js +++ /dev/null @@ -1,86 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'), - monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'); - - var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i]; - var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i; - - var nl = moment.defineLocale('nl', { - months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'), - monthsShort : function (m, format) { - if (!m) { - return monthsShortWithDots; - } else if (/-MMM-/.test(format)) { - return monthsShortWithoutDots[m.month()]; - } else { - return monthsShortWithDots[m.month()]; - } - }, - - monthsRegex: monthsRegex, - monthsShortRegex: monthsRegex, - monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i, - monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i, - - monthsParse : monthsParse, - longMonthsParse : monthsParse, - shortMonthsParse : monthsParse, - - weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'), - weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'), - weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD-MM-YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[vandaag om] LT', - nextDay: '[morgen om] LT', - nextWeek: 'dddd [om] LT', - lastDay: '[gisteren om] LT', - lastWeek: '[afgelopen] dddd [om] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'over %s', - past : '%s geleden', - s : 'een paar seconden', - ss : '%d seconden', - m : 'één minuut', - mm : '%d minuten', - h : 'één uur', - hh : '%d uur', - d : 'één dag', - dd : '%d dagen', - M : 'één maand', - MM : '%d maanden', - y : 'één jaar', - yy : '%d jaar' - }, - dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/, - ordinal : function (number) { - return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return nl; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/nn.js b/app/rainloop/v/1.15.0/app/localization/moment/nn.js deleted file mode 100644 index 5fa355043f06b0598715254f772b6ff2c59ebb9d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/nn.js +++ /dev/null @@ -1,59 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var nn = moment.defineLocale('nn', { - months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'), - monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'), - weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'), - weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'), - weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM YYYY', - LLL : 'D. MMMM YYYY [kl.] H:mm', - LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm' - }, - calendar : { - sameDay: '[I dag klokka] LT', - nextDay: '[I morgon klokka] LT', - nextWeek: 'dddd [klokka] LT', - lastDay: '[I går klokka] LT', - lastWeek: '[Føregåande] dddd [klokka] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'om %s', - past : '%s sidan', - s : 'nokre sekund', - ss : '%d sekund', - m : 'eit minutt', - mm : '%d minutt', - h : 'ein time', - hh : '%d timar', - d : 'ein dag', - dd : '%d dagar', - M : 'ein månad', - MM : '%d månader', - y : 'eit år', - yy : '%d år' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return nn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/pa-in.js b/app/rainloop/v/1.15.0/app/localization/moment/pa-in.js deleted file mode 100644 index 58ae1283678b447a16f4e35fab948cf9b25fd40b..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/pa-in.js +++ /dev/null @@ -1,123 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '੧', - '2': '੨', - '3': '੩', - '4': '੪', - '5': '੫', - '6': '੬', - '7': '੭', - '8': '੮', - '9': '੯', - '0': '੦' - }, - numberMap = { - '੧': '1', - '੨': '2', - '੩': '3', - '੪': '4', - '੫': '5', - '੬': '6', - '੭': '7', - '੮': '8', - '੯': '9', - '੦': '0' - }; - - var paIn = moment.defineLocale('pa-in', { - // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi. - months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), - monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'), - weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'), - weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), - weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'), - longDateFormat : { - LT : 'A h:mm ਵਜੇ', - LTS : 'A h:mm:ss ਵਜੇ', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm ਵਜੇ', - LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ' - }, - calendar : { - sameDay : '[ਅਜ] LT', - nextDay : '[ਕਲ] LT', - nextWeek : '[ਅਗਲਾ] dddd, LT', - lastDay : '[ਕਲ] LT', - lastWeek : '[ਪਿਛਲੇ] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s ਵਿੱਚ', - past : '%s ਪਿਛਲੇ', - s : 'ਕੁਝ ਸਕਿੰਟ', - ss : '%d ਸਕਿੰਟ', - m : 'ਇਕ ਮਿੰਟ', - mm : '%d ਮਿੰਟ', - h : 'ਇੱਕ ਘੰਟਾ', - hh : '%d ਘੰਟੇ', - d : 'ਇੱਕ ਦਿਨ', - dd : '%d ਦਿਨ', - M : 'ਇੱਕ ਮਹੀਨਾ', - MM : '%d ਮਹੀਨੇ', - y : 'ਇੱਕ ਸਾਲ', - yy : '%d ਸਾਲ' - }, - preparse: function (string) { - return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - // Punjabi notation for meridiems are quite fuzzy in practice. While there exists - // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi. - meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'ਰਾਤ') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'ਸਵੇਰ') { - return hour; - } else if (meridiem === 'ਦੁਪਹਿਰ') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'ਸ਼ਾਮ') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ਰਾਤ'; - } else if (hour < 10) { - return 'ਸਵੇਰ'; - } else if (hour < 17) { - return 'ਦੁਪਹਿਰ'; - } else if (hour < 20) { - return 'ਸ਼ਾਮ'; - } else { - return 'ਰਾਤ'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return paIn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/pt-br.js b/app/rainloop/v/1.15.0/app/localization/moment/pt-br.js deleted file mode 100644 index 6cad5911c9160debaea070acff715ae3bfa88665..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/pt-br.js +++ /dev/null @@ -1,60 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ptBr = moment.defineLocale('pt-br', { - months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), - weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), - weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), - weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY [às] HH:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm' - }, - calendar : { - sameDay: '[Hoje às] LT', - nextDay: '[Amanhã às] LT', - nextWeek: 'dddd [às] LT', - lastDay: '[Ontem às] LT', - lastWeek: function () { - return (this.day() === 0 || this.day() === 6) ? - '[Último] dddd [às] LT' : // Saturday + Sunday - '[Última] dddd [às] LT'; // Monday - Friday - }, - sameElse: 'L' - }, - relativeTime : { - future : 'em %s', - past : 'há %s', - s : 'poucos segundos', - ss : '%d segundos', - m : 'um minuto', - mm : '%d minutos', - h : 'uma hora', - hh : '%d horas', - d : 'um dia', - dd : '%d dias', - M : 'um mês', - MM : '%d meses', - y : 'um ano', - yy : '%d anos' - }, - dayOfMonthOrdinalParse: /\d{1,2}º/, - ordinal : '%dº' - }); - - return ptBr; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/pt.js b/app/rainloop/v/1.15.0/app/localization/moment/pt.js deleted file mode 100644 index 534f1c86f433f550344172318d14a0cb3d777d98..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/pt.js +++ /dev/null @@ -1,64 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var pt = moment.defineLocale('pt', { - months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), - weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), - weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), - weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D [de] MMMM [de] YYYY', - LLL : 'D [de] MMMM [de] YYYY HH:mm', - LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm' - }, - calendar : { - sameDay: '[Hoje às] LT', - nextDay: '[Amanhã às] LT', - nextWeek: 'dddd [às] LT', - lastDay: '[Ontem às] LT', - lastWeek: function () { - return (this.day() === 0 || this.day() === 6) ? - '[Último] dddd [às] LT' : // Saturday + Sunday - '[Última] dddd [às] LT'; // Monday - Friday - }, - sameElse: 'L' - }, - relativeTime : { - future : 'em %s', - past : 'há %s', - s : 'segundos', - ss : '%d segundos', - m : 'um minuto', - mm : '%d minutos', - h : 'uma hora', - hh : '%d horas', - d : 'um dia', - dd : '%d dias', - M : 'um mês', - MM : '%d meses', - y : 'um ano', - yy : '%d anos' - }, - dayOfMonthOrdinalParse: /\d{1,2}º/, - ordinal : '%dº', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return pt; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ro.js b/app/rainloop/v/1.15.0/app/localization/moment/ro.js deleted file mode 100644 index 15bea092d8d0ee88e2228812e57a37e3b7c7d34c..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ro.js +++ /dev/null @@ -1,74 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function relativeTimeWithPlural(number, withoutSuffix, key) { - var format = { - 'ss': 'secunde', - 'mm': 'minute', - 'hh': 'ore', - 'dd': 'zile', - 'MM': 'luni', - 'yy': 'ani' - }, - separator = ' '; - if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) { - separator = ' de '; - } - return number + separator + format[key]; - } - - var ro = moment.defineLocale('ro', { - months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'), - monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'), - monthsParseExact: true, - weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'), - weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), - weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'), - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY H:mm', - LLLL : 'dddd, D MMMM YYYY H:mm' - }, - calendar : { - sameDay: '[azi la] LT', - nextDay: '[mâine la] LT', - nextWeek: 'dddd [la] LT', - lastDay: '[ieri la] LT', - lastWeek: '[fosta] dddd [la] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'peste %s', - past : '%s în urmă', - s : 'câteva secunde', - ss : relativeTimeWithPlural, - m : 'un minut', - mm : relativeTimeWithPlural, - h : 'o oră', - hh : relativeTimeWithPlural, - d : 'o zi', - dd : relativeTimeWithPlural, - M : 'o lună', - MM : relativeTimeWithPlural, - y : 'un an', - yy : relativeTimeWithPlural - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return ro; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/sd.js b/app/rainloop/v/1.15.0/app/localization/moment/sd.js deleted file mode 100644 index 12992382b66e724b75c1aa50c5ce2e739d76019b..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/sd.js +++ /dev/null @@ -1,97 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var months = [ - 'جنوري', - 'فيبروري', - 'مارچ', - 'اپريل', - 'مئي', - 'جون', - 'جولاءِ', - 'آگسٽ', - 'سيپٽمبر', - 'آڪٽوبر', - 'نومبر', - 'ڊسمبر' - ]; - var days = [ - 'آچر', - 'سومر', - 'اڱارو', - 'اربع', - 'خميس', - 'جمع', - 'ڇنڇر' - ]; - - var sd = moment.defineLocale('sd', { - months : months, - monthsShort : months, - weekdays : days, - weekdaysShort : days, - weekdaysMin : days, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd، D MMMM YYYY HH:mm' - }, - meridiemParse: /صبح|شام/, - isPM : function (input) { - return 'شام' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'صبح'; - } - return 'شام'; - }, - calendar : { - sameDay : '[اڄ] LT', - nextDay : '[سڀاڻي] LT', - nextWeek : 'dddd [اڳين هفتي تي] LT', - lastDay : '[ڪالهه] LT', - lastWeek : '[گزريل هفتي] dddd [تي] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s پوء', - past : '%s اڳ', - s : 'چند سيڪنڊ', - ss : '%d سيڪنڊ', - m : 'هڪ منٽ', - mm : '%d منٽ', - h : 'هڪ ڪلاڪ', - hh : '%d ڪلاڪ', - d : 'هڪ ڏينهن', - dd : '%d ڏينهن', - M : 'هڪ مهينو', - MM : '%d مهينا', - y : 'هڪ سال', - yy : '%d سال' - }, - preparse: function (string) { - return string.replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/,/g, '،'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return sd; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/se.js b/app/rainloop/v/1.15.0/app/localization/moment/se.js deleted file mode 100644 index 4b04678038d6cec67e89ae7638c83df748f3488f..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/se.js +++ /dev/null @@ -1,59 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var se = moment.defineLocale('se', { - months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'), - monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'), - weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'), - weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'), - weekdaysMin : 's_v_m_g_d_b_L'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'MMMM D. [b.] YYYY', - LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm', - LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm' - }, - calendar : { - sameDay: '[otne ti] LT', - nextDay: '[ihttin ti] LT', - nextWeek: 'dddd [ti] LT', - lastDay: '[ikte ti] LT', - lastWeek: '[ovddit] dddd [ti] LT', - sameElse: 'L' - }, - relativeTime : { - future : '%s geažes', - past : 'maŋit %s', - s : 'moadde sekunddat', - ss: '%d sekunddat', - m : 'okta minuhta', - mm : '%d minuhtat', - h : 'okta diimmu', - hh : '%d diimmut', - d : 'okta beaivi', - dd : '%d beaivvit', - M : 'okta mánnu', - MM : '%d mánut', - y : 'okta jahki', - yy : '%d jagit' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return se; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/si.js b/app/rainloop/v/1.15.0/app/localization/moment/si.js deleted file mode 100644 index 52dc60807d9fb96e8dd074afdff3ab27e6c8b0e0..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/si.js +++ /dev/null @@ -1,70 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - /*jshint -W100*/ - var si = moment.defineLocale('si', { - months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'), - monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'), - weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'), - weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්රහ_සිකු_සෙන'.split('_'), - weekdaysMin : 'ඉ_ස_අ_බ_බ්ර_සි_සෙ'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'a h:mm', - LTS : 'a h:mm:ss', - L : 'YYYY/MM/DD', - LL : 'YYYY MMMM D', - LLL : 'YYYY MMMM D, a h:mm', - LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss' - }, - calendar : { - sameDay : '[අද] LT[ට]', - nextDay : '[හෙට] LT[ට]', - nextWeek : 'dddd LT[ට]', - lastDay : '[ඊයේ] LT[ට]', - lastWeek : '[පසුගිය] dddd LT[ට]', - sameElse : 'L' - }, - relativeTime : { - future : '%sකින්', - past : '%sකට පෙර', - s : 'තත්පර කිහිපය', - ss : 'තත්පර %d', - m : 'මිනිත්තුව', - mm : 'මිනිත්තු %d', - h : 'පැය', - hh : 'පැය %d', - d : 'දිනය', - dd : 'දින %d', - M : 'මාසය', - MM : 'මාස %d', - y : 'වසර', - yy : 'වසර %d' - }, - dayOfMonthOrdinalParse: /\d{1,2} වැනි/, - ordinal : function (number) { - return number + ' වැනි'; - }, - meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./, - isPM : function (input) { - return input === 'ප.ව.' || input === 'පස් වරු'; - }, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'ප.ව.' : 'පස් වරු'; - } else { - return isLower ? 'පෙ.ව.' : 'පෙර වරු'; - } - } - }); - - return si; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/sq.js b/app/rainloop/v/1.15.0/app/localization/moment/sq.js deleted file mode 100644 index eb081df060d5c0de3fef03089abd303689fa4591..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/sq.js +++ /dev/null @@ -1,67 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var sq = moment.defineLocale('sq', { - months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'), - monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'), - weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'), - weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'), - weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'), - weekdaysParseExact : true, - meridiemParse: /PD|MD/, - isPM: function (input) { - return input.charAt(0) === 'M'; - }, - meridiem : function (hours, minutes, isLower) { - return hours < 12 ? 'PD' : 'MD'; - }, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Sot në] LT', - nextDay : '[Nesër në] LT', - nextWeek : 'dddd [në] LT', - lastDay : '[Dje në] LT', - lastWeek : 'dddd [e kaluar në] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'në %s', - past : '%s më parë', - s : 'disa sekonda', - ss : '%d sekonda', - m : 'një minutë', - mm : '%d minuta', - h : 'një orë', - hh : '%d orë', - d : 'një ditë', - dd : '%d ditë', - M : 'një muaj', - MM : '%d muaj', - y : 'një vit', - yy : '%d vite' - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return sq; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ss.js b/app/rainloop/v/1.15.0/app/localization/moment/ss.js deleted file mode 100644 index a401149c9b6740fb19d0114a050f82affb2b1697..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ss.js +++ /dev/null @@ -1,87 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var ss = moment.defineLocale('ss', { - months : "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split('_'), - monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'), - weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'), - weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'), - weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Namuhla nga] LT', - nextDay : '[Kusasa nga] LT', - nextWeek : 'dddd [nga] LT', - lastDay : '[Itolo nga] LT', - lastWeek : 'dddd [leliphelile] [nga] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'nga %s', - past : 'wenteka nga %s', - s : 'emizuzwana lomcane', - ss : '%d mzuzwana', - m : 'umzuzu', - mm : '%d emizuzu', - h : 'lihora', - hh : '%d emahora', - d : 'lilanga', - dd : '%d emalanga', - M : 'inyanga', - MM : '%d tinyanga', - y : 'umnyaka', - yy : '%d iminyaka' - }, - meridiemParse: /ekuseni|emini|entsambama|ebusuku/, - meridiem : function (hours, minutes, isLower) { - if (hours < 11) { - return 'ekuseni'; - } else if (hours < 15) { - return 'emini'; - } else if (hours < 19) { - return 'entsambama'; - } else { - return 'ebusuku'; - } - }, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'ekuseni') { - return hour; - } else if (meridiem === 'emini') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') { - if (hour === 0) { - return 0; - } - return hour + 12; - } - }, - dayOfMonthOrdinalParse: /\d{1,2}/, - ordinal : '%d', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return ss; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/sv.js b/app/rainloop/v/1.15.0/app/localization/moment/sv.js deleted file mode 100644 index 494fedba03c51e9f49d2be02afc81d3edecf73ee..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/sv.js +++ /dev/null @@ -1,68 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var sv = moment.defineLocale('sv', { - months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'), - monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'), - weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'), - weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'), - weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY-MM-DD', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY [kl.] HH:mm', - LLLL : 'dddd D MMMM YYYY [kl.] HH:mm', - lll : 'D MMM YYYY HH:mm', - llll : 'ddd D MMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Idag] LT', - nextDay: '[Imorgon] LT', - lastDay: '[Igår] LT', - nextWeek: '[På] dddd LT', - lastWeek: '[I] dddd[s] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'om %s', - past : 'för %s sedan', - s : 'några sekunder', - ss : '%d sekunder', - m : 'en minut', - mm : '%d minuter', - h : 'en timme', - hh : '%d timmar', - d : 'en dag', - dd : '%d dagar', - M : 'en månad', - MM : '%d månader', - y : 'ett år', - yy : '%d år' - }, - dayOfMonthOrdinalParse: /\d{1,2}(e|a)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'e' : - (b === 1) ? 'a' : - (b === 2) ? 'a' : - (b === 3) ? 'e' : 'e'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return sv; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/sw.js b/app/rainloop/v/1.15.0/app/localization/moment/sw.js deleted file mode 100644 index 2c066b6439a264d8afa2a3bbb491cf4e06d896c6..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/sw.js +++ /dev/null @@ -1,58 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var sw = moment.defineLocale('sw', { - months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'), - monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'), - weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'), - weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'), - weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[leo saa] LT', - nextDay : '[kesho saa] LT', - nextWeek : '[wiki ijayo] dddd [saat] LT', - lastDay : '[jana] LT', - lastWeek : '[wiki iliyopita] dddd [saat] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s baadaye', - past : 'tokea %s', - s : 'hivi punde', - ss : 'sekunde %d', - m : 'dakika moja', - mm : 'dakika %d', - h : 'saa limoja', - hh : 'masaa %d', - d : 'siku moja', - dd : 'masiku %d', - M : 'mwezi mmoja', - MM : 'miezi %d', - y : 'mwaka mmoja', - yy : 'miaka %d' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return sw; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ta.js b/app/rainloop/v/1.15.0/app/localization/moment/ta.js deleted file mode 100644 index f7a87d7b000cbe7c10a6b1d08c819fe6c79f82c5..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ta.js +++ /dev/null @@ -1,128 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var symbolMap = { - '1': '௧', - '2': '௨', - '3': '௩', - '4': '௪', - '5': '௫', - '6': '௬', - '7': '௭', - '8': '௮', - '9': '௯', - '0': '௦' - }, numberMap = { - '௧': '1', - '௨': '2', - '௩': '3', - '௪': '4', - '௫': '5', - '௬': '6', - '௭': '7', - '௮': '8', - '௯': '9', - '௦': '0' - }; - - var ta = moment.defineLocale('ta', { - months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), - monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), - weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'), - weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), - weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, HH:mm', - LLLL : 'dddd, D MMMM YYYY, HH:mm' - }, - calendar : { - sameDay : '[இன்று] LT', - nextDay : '[நாளை] LT', - nextWeek : 'dddd, LT', - lastDay : '[நேற்று] LT', - lastWeek : '[கடந்த வாரம்] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s இல்', - past : '%s முன்', - s : 'ஒரு சில விநாடிகள்', - ss : '%d விநாடிகள்', - m : 'ஒரு நிமிடம்', - mm : '%d நிமிடங்கள்', - h : 'ஒரு மணி நேரம்', - hh : '%d மணி நேரம்', - d : 'ஒரு நாள்', - dd : '%d நாட்கள்', - M : 'ஒரு மாதம்', - MM : '%d மாதங்கள்', - y : 'ஒரு வருடம்', - yy : '%d ஆண்டுகள்' - }, - dayOfMonthOrdinalParse: /\d{1,2}வது/, - ordinal : function (number) { - return number + 'வது'; - }, - preparse: function (string) { - return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) { - return numberMap[match]; - }); - }, - postformat: function (string) { - return string.replace(/\d/g, function (match) { - return symbolMap[match]; - }); - }, - // refer http://ta.wikipedia.org/s/1er1 - meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/, - meridiem : function (hour, minute, isLower) { - if (hour < 2) { - return ' யாமம்'; - } else if (hour < 6) { - return ' வைகறை'; // வைகறை - } else if (hour < 10) { - return ' காலை'; // காலை - } else if (hour < 14) { - return ' நண்பகல்'; // நண்பகல் - } else if (hour < 18) { - return ' எற்பாடு'; // எற்பாடு - } else if (hour < 22) { - return ' மாலை'; // மாலை - } else { - return ' யாமம்'; - } - }, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'யாமம்') { - return hour < 2 ? hour : hour + 12; - } else if (meridiem === 'வைகறை' || meridiem === 'காலை') { - return hour; - } else if (meridiem === 'நண்பகல்') { - return hour >= 10 ? hour : hour + 12; - } else { - return hour + 12; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return ta; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/te.js b/app/rainloop/v/1.15.0/app/localization/moment/te.js deleted file mode 100644 index abb40bf1f9deb5b014e1466f8bf7940d47ab328a..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/te.js +++ /dev/null @@ -1,88 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var te = moment.defineLocale('te', { - months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'), - monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'), - monthsParseExact : true, - weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'), - weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'), - weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'), - longDateFormat : { - LT : 'A h:mm', - LTS : 'A h:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY, A h:mm', - LLLL : 'dddd, D MMMM YYYY, A h:mm' - }, - calendar : { - sameDay : '[నేడు] LT', - nextDay : '[రేపు] LT', - nextWeek : 'dddd, LT', - lastDay : '[నిన్న] LT', - lastWeek : '[గత] dddd, LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s లో', - past : '%s క్రితం', - s : 'కొన్ని క్షణాలు', - ss : '%d సెకన్లు', - m : 'ఒక నిమిషం', - mm : '%d నిమిషాలు', - h : 'ఒక గంట', - hh : '%d గంటలు', - d : 'ఒక రోజు', - dd : '%d రోజులు', - M : 'ఒక నెల', - MM : '%d నెలలు', - y : 'ఒక సంవత్సరం', - yy : '%d సంవత్సరాలు' - }, - dayOfMonthOrdinalParse : /\d{1,2}వ/, - ordinal : '%dవ', - meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'రాత్రి') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'ఉదయం') { - return hour; - } else if (meridiem === 'మధ్యాహ్నం') { - return hour >= 10 ? hour : hour + 12; - } else if (meridiem === 'సాయంత్రం') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'రాత్రి'; - } else if (hour < 10) { - return 'ఉదయం'; - } else if (hour < 17) { - return 'మధ్యాహ్నం'; - } else if (hour < 20) { - return 'సాయంత్రం'; - } else { - return 'రాత్రి'; - } - }, - week : { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 6th is the first week of the year. - } - }); - - return te; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tet.js b/app/rainloop/v/1.15.0/app/localization/moment/tet.js deleted file mode 100644 index efa53da1ecaa07b89757bf04924d9fb7a4b553b4..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tet.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var tet = moment.defineLocale('tet', { - months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'), - monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), - weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'), - weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'), - weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Ohin iha] LT', - nextDay: '[Aban iha] LT', - nextWeek: 'dddd [iha] LT', - lastDay: '[Horiseik iha] LT', - lastWeek: 'dddd [semana kotuk] [iha] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'iha %s', - past : '%s liuba', - s : 'minutu balun', - ss : 'minutu %d', - m : 'minutu ida', - mm : 'minutu %d', - h : 'oras ida', - hh : 'oras %d', - d : 'loron ida', - dd : 'loron %d', - M : 'fulan ida', - MM : 'fulan %d', - y : 'tinan ida', - yy : 'tinan %d' - }, - dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return tet; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tg.js b/app/rainloop/v/1.15.0/app/localization/moment/tg.js deleted file mode 100644 index c2833680859d3265cc52d5aff54e680ef8aa8087..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tg.js +++ /dev/null @@ -1,115 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var suffixes = { - 0: '-ум', - 1: '-ум', - 2: '-юм', - 3: '-юм', - 4: '-ум', - 5: '-ум', - 6: '-ум', - 7: '-ум', - 8: '-ум', - 9: '-ум', - 10: '-ум', - 12: '-ум', - 13: '-ум', - 20: '-ум', - 30: '-юм', - 40: '-ум', - 50: '-ум', - 60: '-ум', - 70: '-ум', - 80: '-ум', - 90: '-ум', - 100: '-ум' - }; - - var tg = moment.defineLocale('tg', { - months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), - monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), - weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'), - weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'), - weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[Имрӯз соати] LT', - nextDay : '[Пагоҳ соати] LT', - lastDay : '[Дирӯз соати] LT', - nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT', - lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'баъди %s', - past : '%s пеш', - s : 'якчанд сония', - m : 'як дақиқа', - mm : '%d дақиқа', - h : 'як соат', - hh : '%d соат', - d : 'як рӯз', - dd : '%d рӯз', - M : 'як моҳ', - MM : '%d моҳ', - y : 'як сол', - yy : '%d сол' - }, - meridiemParse: /шаб|субҳ|рӯз|бегоҳ/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === 'шаб') { - return hour < 4 ? hour : hour + 12; - } else if (meridiem === 'субҳ') { - return hour; - } else if (meridiem === 'рӯз') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === 'бегоҳ') { - return hour + 12; - } - }, - meridiem: function (hour, minute, isLower) { - if (hour < 4) { - return 'шаб'; - } else if (hour < 11) { - return 'субҳ'; - } else if (hour < 16) { - return 'рӯз'; - } else if (hour < 19) { - return 'бегоҳ'; - } else { - return 'шаб'; - } - }, - dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/, - ordinal: function (number) { - var a = number % 10, - b = number >= 100 ? 100 : null; - return number + (suffixes[number] || suffixes[a] || suffixes[b]); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 1th is the first week of the year. - } - }); - - return tg; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/th.js b/app/rainloop/v/1.15.0/app/localization/moment/th.js deleted file mode 100644 index 87489a4e009bcb4bae6456a6683b0e20117a43a5..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/th.js +++ /dev/null @@ -1,66 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var th = moment.defineLocale('th', { - months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), - monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), - monthsParseExact: true, - weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), - weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference - weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'H:mm', - LTS : 'H:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY เวลา H:mm', - LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm' - }, - meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/, - isPM: function (input) { - return input === 'หลังเที่ยง'; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'ก่อนเที่ยง'; - } else { - return 'หลังเที่ยง'; - } - }, - calendar : { - sameDay : '[วันนี้ เวลา] LT', - nextDay : '[พรุ่งนี้ เวลา] LT', - nextWeek : 'dddd[หน้า เวลา] LT', - lastDay : '[เมื่อวานนี้ เวลา] LT', - lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'อีก %s', - past : '%sที่แล้ว', - s : 'ไม่กี่วินาที', - ss : '%d วินาที', - m : '1 นาที', - mm : '%d นาที', - h : '1 ชั่วโมง', - hh : '%d ชั่วโมง', - d : '1 วัน', - dd : '%d วัน', - M : '1 เดือน', - MM : '%d เดือน', - y : '1 ปี', - yy : '%d ปี' - } - }); - - return th; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tl-ph.js b/app/rainloop/v/1.15.0/app/localization/moment/tl-ph.js deleted file mode 100644 index 3f7e45ee92af74e4af14e3200527d1abe7667d6c..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tl-ph.js +++ /dev/null @@ -1,61 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var tlPh = moment.defineLocale('tl-ph', { - months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'), - monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'), - weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'), - weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'), - weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'MM/D/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY HH:mm', - LLLL : 'dddd, MMMM DD, YYYY HH:mm' - }, - calendar : { - sameDay: 'LT [ngayong araw]', - nextDay: '[Bukas ng] LT', - nextWeek: 'LT [sa susunod na] dddd', - lastDay: 'LT [kahapon]', - lastWeek: 'LT [noong nakaraang] dddd', - sameElse: 'L' - }, - relativeTime : { - future : 'sa loob ng %s', - past : '%s ang nakalipas', - s : 'ilang segundo', - ss : '%d segundo', - m : 'isang minuto', - mm : '%d minuto', - h : 'isang oras', - hh : '%d oras', - d : 'isang araw', - dd : '%d araw', - M : 'isang buwan', - MM : '%d buwan', - y : 'isang taon', - yy : '%d taon' - }, - dayOfMonthOrdinalParse: /\d{1,2}/, - ordinal : function (number) { - return number; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return tlPh; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tlh.js b/app/rainloop/v/1.15.0/app/localization/moment/tlh.js deleted file mode 100644 index 7ea953b8aae0100f02f86e47478e6e94ef7c9a83..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tlh.js +++ /dev/null @@ -1,121 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_'); - - function translateFuture(output) { - var time = output; - time = (output.indexOf('jaj') !== -1) ? - time.slice(0, -3) + 'leS' : - (output.indexOf('jar') !== -1) ? - time.slice(0, -3) + 'waQ' : - (output.indexOf('DIS') !== -1) ? - time.slice(0, -3) + 'nem' : - time + ' pIq'; - return time; - } - - function translatePast(output) { - var time = output; - time = (output.indexOf('jaj') !== -1) ? - time.slice(0, -3) + 'Hu’' : - (output.indexOf('jar') !== -1) ? - time.slice(0, -3) + 'wen' : - (output.indexOf('DIS') !== -1) ? - time.slice(0, -3) + 'ben' : - time + ' ret'; - return time; - } - - function translate(number, withoutSuffix, string, isFuture) { - var numberNoun = numberAsNoun(number); - switch (string) { - case 'ss': - return numberNoun + ' lup'; - case 'mm': - return numberNoun + ' tup'; - case 'hh': - return numberNoun + ' rep'; - case 'dd': - return numberNoun + ' jaj'; - case 'MM': - return numberNoun + ' jar'; - case 'yy': - return numberNoun + ' DIS'; - } - } - - function numberAsNoun(number) { - var hundred = Math.floor((number % 1000) / 100), - ten = Math.floor((number % 100) / 10), - one = number % 10, - word = ''; - if (hundred > 0) { - word += numbersNouns[hundred] + 'vatlh'; - } - if (ten > 0) { - word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH'; - } - if (one > 0) { - word += ((word !== '') ? ' ' : '') + numbersNouns[one]; - } - return (word === '') ? 'pagh' : word; - } - - var tlh = moment.defineLocale('tlh', { - months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'), - monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'), - monthsParseExact : true, - weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), - weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), - weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[DaHjaj] LT', - nextDay: '[wa’leS] LT', - nextWeek: 'LLL', - lastDay: '[wa’Hu’] LT', - lastWeek: 'LLL', - sameElse: 'L' - }, - relativeTime : { - future : translateFuture, - past : translatePast, - s : 'puS lup', - ss : translate, - m : 'wa’ tup', - mm : translate, - h : 'wa’ rep', - hh : translate, - d : 'wa’ jaj', - dd : translate, - M : 'wa’ jar', - MM : translate, - y : 'wa’ DIS', - yy : translate - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return tlh; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tr.js b/app/rainloop/v/1.15.0/app/localization/moment/tr.js deleted file mode 100644 index e3fa275a11426994038e40ae426f563a4ea2e03a..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tr.js +++ /dev/null @@ -1,93 +0,0 @@ - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - var suffixes = { - 1: '\'inci', - 5: '\'inci', - 8: '\'inci', - 70: '\'inci', - 80: '\'inci', - 2: '\'nci', - 7: '\'nci', - 20: '\'nci', - 50: '\'nci', - 3: '\'üncü', - 4: '\'üncü', - 100: '\'üncü', - 6: '\'ncı', - 9: '\'uncu', - 10: '\'uncu', - 30: '\'uncu', - 60: '\'ıncı', - 90: '\'ıncı' - }; - - var tr = moment.defineLocale('tr', { - months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), - monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), - weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), - weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'), - weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[bugün saat] LT', - nextDay : '[yarın saat] LT', - nextWeek : '[gelecek] dddd [saat] LT', - lastDay : '[dün] LT', - lastWeek : '[geçen] dddd [saat] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s sonra', - past : '%s önce', - s : 'birkaç saniye', - ss : '%d saniye', - m : 'bir dakika', - mm : '%d dakika', - h : 'bir saat', - hh : '%d saat', - d : 'bir gün', - dd : '%d gün', - M : 'bir ay', - MM : '%d ay', - y : 'bir yıl', - yy : '%d yıl' - }, - ordinal: function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'Do': - case 'DD': - return number; - default: - if (number === 0) { // special case for zero - return number + '\'ıncı'; - } - var a = number % 10, - b = number % 100 - a, - c = number >= 100 ? 100 : null; - return number + (suffixes[a] || suffixes[b] || suffixes[c]); - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return tr; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tzl.js b/app/rainloop/v/1.15.0/app/localization/moment/tzl.js deleted file mode 100644 index d32601bc40ea055831527a6356f5d5dd8e639110..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tzl.js +++ /dev/null @@ -1,90 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals. - // This is currently too difficult (maybe even impossible) to add. - var tzl = moment.defineLocale('tzl', { - months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'), - monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'), - weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'), - weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'), - weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'), - longDateFormat : { - LT : 'HH.mm', - LTS : 'HH.mm.ss', - L : 'DD.MM.YYYY', - LL : 'D. MMMM [dallas] YYYY', - LLL : 'D. MMMM [dallas] YYYY HH.mm', - LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm' - }, - meridiemParse: /d\'o|d\'a/i, - isPM : function (input) { - return 'd\'o' === input.toLowerCase(); - }, - meridiem : function (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'd\'o' : 'D\'O'; - } else { - return isLower ? 'd\'a' : 'D\'A'; - } - }, - calendar : { - sameDay : '[oxhi à] LT', - nextDay : '[demà à] LT', - nextWeek : 'dddd [à] LT', - lastDay : '[ieiri à] LT', - lastWeek : '[sür el] dddd [lasteu à] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'osprei %s', - past : 'ja%s', - s : processRelativeTime, - ss : processRelativeTime, - m : processRelativeTime, - mm : processRelativeTime, - h : processRelativeTime, - hh : processRelativeTime, - d : processRelativeTime, - dd : processRelativeTime, - M : processRelativeTime, - MM : processRelativeTime, - y : processRelativeTime, - yy : processRelativeTime - }, - dayOfMonthOrdinalParse: /\d{1,2}\./, - ordinal : '%d.', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - function processRelativeTime(number, withoutSuffix, key, isFuture) { - var format = { - 's': ['viensas secunds', '\'iensas secunds'], - 'ss': [number + ' secunds', '' + number + ' secunds'], - 'm': ['\'n míut', '\'iens míut'], - 'mm': [number + ' míuts', '' + number + ' míuts'], - 'h': ['\'n þora', '\'iensa þora'], - 'hh': [number + ' þoras', '' + number + ' þoras'], - 'd': ['\'n ziua', '\'iensa ziua'], - 'dd': [number + ' ziuas', '' + number + ' ziuas'], - 'M': ['\'n mes', '\'iens mes'], - 'MM': [number + ' mesen', '' + number + ' mesen'], - 'y': ['\'n ar', '\'iens ar'], - 'yy': [number + ' ars', '' + number + ' ars'] - }; - return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]); - } - - return tzl; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tzm-latn.js b/app/rainloop/v/1.15.0/app/localization/moment/tzm-latn.js deleted file mode 100644 index b7a2aed1b51e3abc4d546e3e89799e1bd301ad0d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tzm-latn.js +++ /dev/null @@ -1,57 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var tzmLatn = moment.defineLocale('tzm-latn', { - months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), - monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'), - weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), - weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), - weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[asdkh g] LT', - nextDay: '[aska g] LT', - nextWeek: 'dddd [g] LT', - lastDay: '[assant g] LT', - lastWeek: 'dddd [g] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'dadkh s yan %s', - past : 'yan %s', - s : 'imik', - ss : '%d imik', - m : 'minuḍ', - mm : '%d minuḍ', - h : 'saɛa', - hh : '%d tassaɛin', - d : 'ass', - dd : '%d ossan', - M : 'ayowr', - MM : '%d iyyirn', - y : 'asgas', - yy : '%d isgasn' - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return tzmLatn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/tzm.js b/app/rainloop/v/1.15.0/app/localization/moment/tzm.js deleted file mode 100644 index 48d712373d73d53a87732ded6312033229a2317b..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/tzm.js +++ /dev/null @@ -1,57 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var tzm = moment.defineLocale('tzm', { - months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), - monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'), - weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), - weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), - weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS: 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd D MMMM YYYY HH:mm' - }, - calendar : { - sameDay: '[ⴰⵙⴷⵅ ⴴ] LT', - nextDay: '[ⴰⵙⴽⴰ ⴴ] LT', - nextWeek: 'dddd [ⴴ] LT', - lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT', - lastWeek: 'dddd [ⴴ] LT', - sameElse: 'L' - }, - relativeTime : { - future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s', - past : 'ⵢⴰⵏ %s', - s : 'ⵉⵎⵉⴽ', - ss : '%d ⵉⵎⵉⴽ', - m : 'ⵎⵉⵏⵓⴺ', - mm : '%d ⵎⵉⵏⵓⴺ', - h : 'ⵙⴰⵄⴰ', - hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ', - d : 'ⴰⵙⵙ', - dd : '%d oⵙⵙⴰⵏ', - M : 'ⴰⵢoⵓⵔ', - MM : '%d ⵉⵢⵢⵉⵔⵏ', - y : 'ⴰⵙⴳⴰⵙ', - yy : '%d ⵉⵙⴳⴰⵙⵏ' - }, - week : { - dow : 6, // Saturday is the first day of the week. - doy : 12 // The week that contains Jan 12th is the first week of the year. - } - }); - - return tzm; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/uk.js b/app/rainloop/v/1.15.0/app/localization/moment/uk.js deleted file mode 100644 index 70761a180a66f74ec07da0bec4f4bbcd079a68e3..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/uk.js +++ /dev/null @@ -1,153 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - function plural(word, num) { - var forms = word.split('_'); - return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]); - } - function relativeTimeWithPlural(number, withoutSuffix, key) { - var format = { - 'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд', - 'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин', - 'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин', - 'dd': 'день_дні_днів', - 'MM': 'місяць_місяці_місяців', - 'yy': 'рік_роки_років' - }; - if (key === 'm') { - return withoutSuffix ? 'хвилина' : 'хвилину'; - } - else if (key === 'h') { - return withoutSuffix ? 'година' : 'годину'; - } - else { - return number + ' ' + plural(format[key], +number); - } - } - function weekdaysCaseReplace(m, format) { - var weekdays = { - 'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'), - 'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'), - 'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_') - }; - - if (m === true) { - return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1)); - } - if (!m) { - return weekdays['nominative']; - } - - var nounCase = (/(\[[ВвУу]\]) ?dddd/).test(format) ? - 'accusative' : - ((/\[?(?:минулої|наступної)? ?\] ?dddd/).test(format) ? - 'genitive' : - 'nominative'); - return weekdays[nounCase][m.day()]; - } - function processHoursFunction(str) { - return function () { - return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT'; - }; - } - - var uk = moment.defineLocale('uk', { - months : { - 'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'), - 'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_') - }, - monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'), - weekdays : weekdaysCaseReplace, - weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), - weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD.MM.YYYY', - LL : 'D MMMM YYYY р.', - LLL : 'D MMMM YYYY р., HH:mm', - LLLL : 'dddd, D MMMM YYYY р., HH:mm' - }, - calendar : { - sameDay: processHoursFunction('[Сьогодні '), - nextDay: processHoursFunction('[Завтра '), - lastDay: processHoursFunction('[Вчора '), - nextWeek: processHoursFunction('[У] dddd ['), - lastWeek: function () { - switch (this.day()) { - case 0: - case 3: - case 5: - case 6: - return processHoursFunction('[Минулої] dddd [').call(this); - case 1: - case 2: - case 4: - return processHoursFunction('[Минулого] dddd [').call(this); - } - }, - sameElse: 'L' - }, - relativeTime : { - future : 'за %s', - past : '%s тому', - s : 'декілька секунд', - ss : relativeTimeWithPlural, - m : relativeTimeWithPlural, - mm : relativeTimeWithPlural, - h : 'годину', - hh : relativeTimeWithPlural, - d : 'день', - dd : relativeTimeWithPlural, - M : 'місяць', - MM : relativeTimeWithPlural, - y : 'рік', - yy : relativeTimeWithPlural - }, - // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason - meridiemParse: /ночі|ранку|дня|вечора/, - isPM: function (input) { - return /^(дня|вечора)$/.test(input); - }, - meridiem : function (hour, minute, isLower) { - if (hour < 4) { - return 'ночі'; - } else if (hour < 12) { - return 'ранку'; - } else if (hour < 17) { - return 'дня'; - } else { - return 'вечора'; - } - }, - dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/, - ordinal: function (number, period) { - switch (period) { - case 'M': - case 'd': - case 'DDD': - case 'w': - case 'W': - return number + '-й'; - case 'D': - return number + '-го'; - default: - return number; - } - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return uk; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/ur.js b/app/rainloop/v/1.15.0/app/localization/moment/ur.js deleted file mode 100644 index 16093125817587813233c6b6dda2f7c6c74e5e13..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/ur.js +++ /dev/null @@ -1,97 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var months = [ - 'جنوری', - 'فروری', - 'مارچ', - 'اپریل', - 'مئی', - 'جون', - 'جولائی', - 'اگست', - 'ستمبر', - 'اکتوبر', - 'نومبر', - 'دسمبر' - ]; - var days = [ - 'اتوار', - 'پیر', - 'منگل', - 'بدھ', - 'جمعرات', - 'جمعہ', - 'ہفتہ' - ]; - - var ur = moment.defineLocale('ur', { - months : months, - monthsShort : months, - weekdays : days, - weekdaysShort : days, - weekdaysMin : days, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd، D MMMM YYYY HH:mm' - }, - meridiemParse: /صبح|شام/, - isPM : function (input) { - return 'شام' === input; - }, - meridiem : function (hour, minute, isLower) { - if (hour < 12) { - return 'صبح'; - } - return 'شام'; - }, - calendar : { - sameDay : '[آج بوقت] LT', - nextDay : '[کل بوقت] LT', - nextWeek : 'dddd [بوقت] LT', - lastDay : '[گذشتہ روز بوقت] LT', - lastWeek : '[گذشتہ] dddd [بوقت] LT', - sameElse : 'L' - }, - relativeTime : { - future : '%s بعد', - past : '%s قبل', - s : 'چند سیکنڈ', - ss : '%d سیکنڈ', - m : 'ایک منٹ', - mm : '%d منٹ', - h : 'ایک گھنٹہ', - hh : '%d گھنٹے', - d : 'ایک دن', - dd : '%d دن', - M : 'ایک ماہ', - MM : '%d ماہ', - y : 'ایک سال', - yy : '%d سال' - }, - preparse: function (string) { - return string.replace(/،/g, ','); - }, - postformat: function (string) { - return string.replace(/,/g, '،'); - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return ur; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/uz-latn.js b/app/rainloop/v/1.15.0/app/localization/moment/uz-latn.js deleted file mode 100644 index 41a348cbb966e7979c2adb72ac3dee763b843c3d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/uz-latn.js +++ /dev/null @@ -1,57 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var uzLatn = moment.defineLocale('uz-latn', { - months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'), - monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'), - weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'), - weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'), - weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'D MMMM YYYY, dddd HH:mm' - }, - calendar : { - sameDay : '[Bugun soat] LT [da]', - nextDay : '[Ertaga] LT [da]', - nextWeek : 'dddd [kuni soat] LT [da]', - lastDay : '[Kecha soat] LT [da]', - lastWeek : '[O\'tgan] dddd [kuni soat] LT [da]', - sameElse : 'L' - }, - relativeTime : { - future : 'Yaqin %s ichida', - past : 'Bir necha %s oldin', - s : 'soniya', - ss : '%d soniya', - m : 'bir daqiqa', - mm : '%d daqiqa', - h : 'bir soat', - hh : '%d soat', - d : 'bir kun', - dd : '%d kun', - M : 'bir oy', - MM : '%d oy', - y : 'bir yil', - yy : '%d yil' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 7th is the first week of the year. - } - }); - - return uzLatn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/uz.js b/app/rainloop/v/1.15.0/app/localization/moment/uz.js deleted file mode 100644 index 0e4ad22d2029f5a9c2a728e32043cf32d0e21b25..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/uz.js +++ /dev/null @@ -1,57 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var uz = moment.defineLocale('uz', { - months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'), - monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'), - weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), - weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'), - weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'D MMMM YYYY, dddd HH:mm' - }, - calendar : { - sameDay : '[Бугун соат] LT [да]', - nextDay : '[Эртага] LT [да]', - nextWeek : 'dddd [куни соат] LT [да]', - lastDay : '[Кеча соат] LT [да]', - lastWeek : '[Утган] dddd [куни соат] LT [да]', - sameElse : 'L' - }, - relativeTime : { - future : 'Якин %s ичида', - past : 'Бир неча %s олдин', - s : 'фурсат', - ss : '%d фурсат', - m : 'бир дакика', - mm : '%d дакика', - h : 'бир соат', - hh : '%d соат', - d : 'бир кун', - dd : '%d кун', - M : 'бир ой', - MM : '%d ой', - y : 'бир йил', - yy : '%d йил' - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 7 // The week that contains Jan 4th is the first week of the year. - } - }); - - return uz; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/vi.js b/app/rainloop/v/1.15.0/app/localization/moment/vi.js deleted file mode 100644 index 6fcbeafc9adbae4e168fc5ee606eabaf066d2d15..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/vi.js +++ /dev/null @@ -1,78 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var vi = moment.defineLocale('vi', { - months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'), - monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'), - monthsParseExact : true, - weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'), - weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), - weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'), - weekdaysParseExact : true, - meridiemParse: /sa|ch/i, - isPM : function (input) { - return /^ch$/i.test(input); - }, - meridiem : function (hours, minutes, isLower) { - if (hours < 12) { - return isLower ? 'sa' : 'SA'; - } else { - return isLower ? 'ch' : 'CH'; - } - }, - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'DD/MM/YYYY', - LL : 'D MMMM [năm] YYYY', - LLL : 'D MMMM [năm] YYYY HH:mm', - LLLL : 'dddd, D MMMM [năm] YYYY HH:mm', - l : 'DD/M/YYYY', - ll : 'D MMM YYYY', - lll : 'D MMM YYYY HH:mm', - llll : 'ddd, D MMM YYYY HH:mm' - }, - calendar : { - sameDay: '[Hôm nay lúc] LT', - nextDay: '[Ngày mai lúc] LT', - nextWeek: 'dddd [tuần tới lúc] LT', - lastDay: '[Hôm qua lúc] LT', - lastWeek: 'dddd [tuần rồi lúc] LT', - sameElse: 'L' - }, - relativeTime : { - future : '%s tới', - past : '%s trước', - s : 'vài giây', - ss : '%d giây' , - m : 'một phút', - mm : '%d phút', - h : 'một giờ', - hh : '%d giờ', - d : 'một ngày', - dd : '%d ngày', - M : 'một tháng', - MM : '%d tháng', - y : 'một năm', - yy : '%d năm' - }, - dayOfMonthOrdinalParse: /\d{1,2}/, - ordinal : function (number) { - return number; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return vi; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/x-pseudo.js b/app/rainloop/v/1.15.0/app/localization/moment/x-pseudo.js deleted file mode 100644 index 9723c7ba42d91a4848250f6f1d1560ca86b2d569..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/x-pseudo.js +++ /dev/null @@ -1,67 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var xPseudo = moment.defineLocale('x-pseudo', { - months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'), - monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'), - monthsParseExact : true, - weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'), - weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'), - weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'), - weekdaysParseExact : true, - longDateFormat : { - LT : 'HH:mm', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY HH:mm', - LLLL : 'dddd, D MMMM YYYY HH:mm' - }, - calendar : { - sameDay : '[T~ódá~ý át] LT', - nextDay : '[T~ómó~rró~w át] LT', - nextWeek : 'dddd [át] LT', - lastDay : '[Ý~ést~érdá~ý át] LT', - lastWeek : '[L~ást] dddd [át] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'í~ñ %s', - past : '%s á~gó', - s : 'á ~féw ~sécó~ñds', - ss : '%d s~écóñ~ds', - m : 'á ~míñ~úté', - mm : '%d m~íñú~tés', - h : 'á~ñ hó~úr', - hh : '%d h~óúrs', - d : 'á ~dáý', - dd : '%d d~áýs', - M : 'á ~móñ~th', - MM : '%d m~óñt~hs', - y : 'á ~ýéár', - yy : '%d ý~éárs' - }, - dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (~~(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - }, - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return xPseudo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/yo.js b/app/rainloop/v/1.15.0/app/localization/moment/yo.js deleted file mode 100644 index 1a356dcac4138ca64e40587bcd64d99fe0bb6be2..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/yo.js +++ /dev/null @@ -1,59 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var yo = moment.defineLocale('yo', { - months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'), - monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'), - weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'), - weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'), - weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'), - longDateFormat : { - LT : 'h:mm A', - LTS : 'h:mm:ss A', - L : 'DD/MM/YYYY', - LL : 'D MMMM YYYY', - LLL : 'D MMMM YYYY h:mm A', - LLLL : 'dddd, D MMMM YYYY h:mm A' - }, - calendar : { - sameDay : '[Ònì ni] LT', - nextDay : '[Ọ̀la ni] LT', - nextWeek : 'dddd [Ọsẹ̀ tón\'bọ] [ni] LT', - lastDay : '[Àna ni] LT', - lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT', - sameElse : 'L' - }, - relativeTime : { - future : 'ní %s', - past : '%s kọjá', - s : 'ìsẹjú aayá die', - ss :'aayá %d', - m : 'ìsẹjú kan', - mm : 'ìsẹjú %d', - h : 'wákati kan', - hh : 'wákati %d', - d : 'ọjọ́ kan', - dd : 'ọjọ́ %d', - M : 'osù kan', - MM : 'osù %d', - y : 'ọdún kan', - yy : 'ọdún %d' - }, - dayOfMonthOrdinalParse : /ọjọ́\s\d{1,2}/, - ordinal : 'ọjọ́ %d', - week : { - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return yo; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/zh-cn.js b/app/rainloop/v/1.15.0/app/localization/moment/zh-cn.js deleted file mode 100644 index b051f33c27c746022b4faa9ec552bd0fe72d26c8..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/zh-cn.js +++ /dev/null @@ -1,109 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var zhCn = moment.defineLocale('zh-cn', { - months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), - weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'), - weekdaysMin : '日_一_二_三_四_五_六'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY/MM/DD', - LL : 'YYYY年M月D日', - LLL : 'YYYY年M月D日Ah点mm分', - LLLL : 'YYYY年M月D日ddddAh点mm分', - l : 'YYYY/M/D', - ll : 'YYYY年M月D日', - lll : 'YYYY年M月D日 HH:mm', - llll : 'YYYY年M月D日dddd HH:mm' - }, - meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, - meridiemHour: function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === '凌晨' || meridiem === '早上' || - meridiem === '上午') { - return hour; - } else if (meridiem === '下午' || meridiem === '晚上') { - return hour + 12; - } else { - // '中午' - return hour >= 11 ? hour : hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - var hm = hour * 100 + minute; - if (hm < 600) { - return '凌晨'; - } else if (hm < 900) { - return '早上'; - } else if (hm < 1130) { - return '上午'; - } else if (hm < 1230) { - return '中午'; - } else if (hm < 1800) { - return '下午'; - } else { - return '晚上'; - } - }, - calendar : { - sameDay : '[今天]LT', - nextDay : '[明天]LT', - nextWeek : '[下]ddddLT', - lastDay : '[昨天]LT', - lastWeek : '[上]ddddLT', - sameElse : 'L' - }, - dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/, - ordinal : function (number, period) { - switch (period) { - case 'd': - case 'D': - case 'DDD': - return number + '日'; - case 'M': - return number + '月'; - case 'w': - case 'W': - return number + '周'; - default: - return number; - } - }, - relativeTime : { - future : '%s内', - past : '%s前', - s : '几秒', - ss : '%d 秒', - m : '1 分钟', - mm : '%d 分钟', - h : '1 小时', - hh : '%d 小时', - d : '1 天', - dd : '%d 天', - M : '1 个月', - MM : '%d 个月', - y : '1 年', - yy : '%d 年' - }, - week : { - // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效 - dow : 1, // Monday is the first day of the week. - doy : 4 // The week that contains Jan 4th is the first week of the year. - } - }); - - return zhCn; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/zh-hk.js b/app/rainloop/v/1.15.0/app/localization/moment/zh-hk.js deleted file mode 100644 index 0ad0ae31ad0ed2e309083f57104e468cd29cc4c8..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/zh-hk.js +++ /dev/null @@ -1,102 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var zhHk = moment.defineLocale('zh-hk', { - months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), - weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), - weekdaysMin : '日_一_二_三_四_五_六'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY/MM/DD', - LL : 'YYYY年M月D日', - LLL : 'YYYY年M月D日 HH:mm', - LLLL : 'YYYY年M月D日dddd HH:mm', - l : 'YYYY/M/D', - ll : 'YYYY年M月D日', - lll : 'YYYY年M月D日 HH:mm', - llll : 'YYYY年M月D日dddd HH:mm' - }, - meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { - return hour; - } else if (meridiem === '中午') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === '下午' || meridiem === '晚上') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - var hm = hour * 100 + minute; - if (hm < 600) { - return '凌晨'; - } else if (hm < 900) { - return '早上'; - } else if (hm < 1130) { - return '上午'; - } else if (hm < 1230) { - return '中午'; - } else if (hm < 1800) { - return '下午'; - } else { - return '晚上'; - } - }, - calendar : { - sameDay : '[今天]LT', - nextDay : '[明天]LT', - nextWeek : '[下]ddddLT', - lastDay : '[昨天]LT', - lastWeek : '[上]ddddLT', - sameElse : 'L' - }, - dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, - ordinal : function (number, period) { - switch (period) { - case 'd' : - case 'D' : - case 'DDD' : - return number + '日'; - case 'M' : - return number + '月'; - case 'w' : - case 'W' : - return number + '週'; - default : - return number; - } - }, - relativeTime : { - future : '%s內', - past : '%s前', - s : '幾秒', - ss : '%d 秒', - m : '1 分鐘', - mm : '%d 分鐘', - h : '1 小時', - hh : '%d 小時', - d : '1 天', - dd : '%d 天', - M : '1 個月', - MM : '%d 個月', - y : '1 年', - yy : '%d 年' - } - }); - - return zhHk; - -}))); diff --git a/app/rainloop/v/1.15.0/app/localization/moment/zh-tw.js b/app/rainloop/v/1.15.0/app/localization/moment/zh-tw.js deleted file mode 100644 index 6875cfed1825a223242291cb6772e8529fcdca32..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/app/localization/moment/zh-tw.js +++ /dev/null @@ -1,102 +0,0 @@ -//! moment.js locale configuration - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' - && typeof require === 'function' ? factory(require('../moment')) : - typeof define === 'function' && define.amd ? define(['../moment'], factory) : - factory(global.moment) -}(this, (function (moment) { 'use strict'; - - - var zhTw = moment.defineLocale('zh-tw', { - months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), - monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), - weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), - weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'), - weekdaysMin : '日_一_二_三_四_五_六'.split('_'), - longDateFormat : { - LT : 'HH:mm', - LTS : 'HH:mm:ss', - L : 'YYYY/MM/DD', - LL : 'YYYY年M月D日', - LLL : 'YYYY年M月D日 HH:mm', - LLLL : 'YYYY年M月D日dddd HH:mm', - l : 'YYYY/M/D', - ll : 'YYYY年M月D日', - lll : 'YYYY年M月D日 HH:mm', - llll : 'YYYY年M月D日dddd HH:mm' - }, - meridiemParse: /凌晨|早上|上午|中午|下午|晚上/, - meridiemHour : function (hour, meridiem) { - if (hour === 12) { - hour = 0; - } - if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') { - return hour; - } else if (meridiem === '中午') { - return hour >= 11 ? hour : hour + 12; - } else if (meridiem === '下午' || meridiem === '晚上') { - return hour + 12; - } - }, - meridiem : function (hour, minute, isLower) { - var hm = hour * 100 + minute; - if (hm < 600) { - return '凌晨'; - } else if (hm < 900) { - return '早上'; - } else if (hm < 1130) { - return '上午'; - } else if (hm < 1230) { - return '中午'; - } else if (hm < 1800) { - return '下午'; - } else { - return '晚上'; - } - }, - calendar : { - sameDay : '[今天] LT', - nextDay : '[明天] LT', - nextWeek : '[下]dddd LT', - lastDay : '[昨天] LT', - lastWeek : '[上]dddd LT', - sameElse : 'L' - }, - dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/, - ordinal : function (number, period) { - switch (period) { - case 'd' : - case 'D' : - case 'DDD' : - return number + '日'; - case 'M' : - return number + '月'; - case 'w' : - case 'W' : - return number + '週'; - default : - return number; - } - }, - relativeTime : { - future : '%s內', - past : '%s前', - s : '幾秒', - ss : '%d 秒', - m : '1 分鐘', - mm : '%d 分鐘', - h : '1 小時', - hh : '%d 小時', - d : '1 天', - dd : '%d 天', - M : '1 個月', - MM : '%d 個月', - y : '1 年', - yy : '%d 年' - } - }); - - return zhTw; - -}))); diff --git a/app/rainloop/v/1.15.0/static/css/app.min.css b/app/rainloop/v/1.15.0/static/css/app.min.css deleted file mode 100644 index c4b3619a9abac036b0878eee5cb92dec10918221..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/static/css/app.min.css +++ /dev/null @@ -1,7 +0,0 @@ -@charset "UTF-8";/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}/*! jQuery UI - v1.10.3 - 2013-11-25 -* http://jqueryui.com -* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.autocomplete.css, jquery.ui.menu.css, jquery.ui.theme.css -* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc;color:#222;font-weight:700}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #ccc;background:#eee;font-weight:400;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #ccc;background:#eee;font-weight:400;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff;font-weight:400;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:2px}.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:2px}.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:2px}.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:2px}.ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}@font-face{font-family:rainloop;src:url(fonts/rainloop.eot);src:url(fonts/rainloop.eot?#iefix) format("embedded-opentype"),url(fonts/rainloop.woff) format("woff"),url(fonts/rainloop.ttf) format("truetype"),url(fonts/rainloop.svg#rainloop) format("svg");font-weight:400;font-style:normal}[data-icon]:before{font-family:rainloop!important;content:attr(data-icon);font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}[class*=" icon-"]:before,[class^=icon-]:before{font-family:rainloop!important;font-style:normal!important;font-weight:400!important;font-variant:normal!important;text-transform:none!important;speak:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-arrows-in:before{content:"\e000"}.icon-arrows-out:before{content:"\e001"}.icon-list:before{content:"\e002"}.icon-search:before{content:"\e003"}.icon-user:before{content:"\e004"}.icon-user-add:before{content:"\e005"}.icon-tags:before{content:"\e006"}.icon-paper-plane:before{content:"\e007"}.icon-reply:before{content:"\e008"}.icon-reply-all:before{content:"\e009"}.icon-forward:before{content:"\e00a"}.icon-info:before{content:"\e00b"}.icon-right-dir:before{content:"\e00c"}.icon-down-dir:before{content:"\e00d"}.icon-image:before{content:"\e00e"}.icon-print:before{content:"\e00f"}.icon-calendar:before{content:"\e010"}.icon-cog:before{content:"\e011"}.icon-wrench:before{content:"\e012"}.icon-rocket:before{content:"\e013"}.icon-fire:before{content:"\e014"}.icon-purchase:before{content:"\e015"}.icon-apple:before{content:"\e016"}.icon-dropbox:before{content:"\e017"}.icon-skype:before{content:"\e018"}.icon-creative-commons:before{content:"\e019"}.icon-ellipsis:before{content:"\e01a"}.icon-left:before{content:"\e01b"}.icon-right:before{content:"\e01c"}.icon-down:before{content:"\e01d"}.icon-right-mini:before{content:"\e01e"}.icon-down-mini:before{content:"\e01f"}.icon-up:before{content:"\e020"}.icon-star-empty:before{content:"\e021"}.icon-star:before{content:"\e022"}.icon-at:before{content:"\e023"}.icon-list-add:before{content:"\e024"}.icon-google:before{content:"\e025"}.icon-google-plus:before{content:"\e026"}.icon-twitter:before{content:"\e027"}.icon-youtube:before{content:"\e028"}.icon-warning:before{content:"\e029"}.icon-warning-alt:before{content:"\e02a"}.icon-power:before{content:"\e02b"}.icon-plus:before{content:"\e02c"}.icon-ok:before{content:"\e02d"}.icon-remove:before{content:"\e02e"}.icon-file:before{content:"\e02f"}.icon-file-code:before{content:"\e030"}.icon-file-chart-graph:before{content:"\e031"}.icon-file-zip:before{content:"\e032"}.icon-file-music:before{content:"\e033"}.icon-file-text:before{content:"\e034"}.icon-file-bookmark:before{content:"\e035"}.icon-file-image:before{content:"\e036"}.icon-file-analytics:before{content:"\e037"}.icon-file-certificate:before{content:"\e038"}.icon-attachment:before{content:"\e039"}.icon-file-excel:before{content:"\e03a"}.icon-file-movie:before{content:"\e03b"}.icon-folder-add:before{content:"\e03c"}.icon-folder:before{content:"\e03d"}.icon-floppy:before{content:"\e03e"}.icon-eye:before{content:"\e03f"}.icon-facebook-alt:before{content:"\e040"}.icon-facebook:before{content:"\e041"}.icon-bolt:before{content:"\e042"}.icon-download:before{content:"\e043"}.icon-upload:before{content:"\e044"}.icon-popup:before{content:"\e045"}.icon-github:before{content:"\e046"}.icon-telephone:before{content:"\e047"}.icon-mobile:before{content:"\e048"}.icon-pencil:before{content:"\e049"}.icon-trash:before{content:"\e04a"}.icon-left-middle:before{content:"\e04b"}.icon-right-middle:before{content:"\e04c"}.icon-repeat:before{content:"\e04d"}.icon-key:before{content:"\e04e"}.icon-lock:before{content:"\e04f"}.icon-home:before{content:"\e050"}.icon-address-book:before{content:"\e051"}.icon-share:before{content:"\e052"}.icon-suitcase:before{content:"\e053"}.icon-new-sign:before{content:"\e054"}.icon-users:before{content:"\e055"}.icon-earth:before{content:"\e056"}.icon-mail:before{content:"\e057"}.icon-checkbox-checked:before{content:"\e058"}.icon-checkbox-unchecked:before{content:"\e059"}.icon-checkbox-partial:before{content:"\e05a"}.icon-radio-checked:before{content:"\e05b"}.icon-radio-unchecked:before{content:"\e05c"}.icon-google-drive:before{content:"\e05d"}.icon-spinner:before{content:"\e05e"}.icon-archive:before{content:"\e05f"}.icon-buy-sign:before{content:"\e060"}.icon-filter:before{content:"\e061"}.icon-sync:before{content:"\e062"}.icon-ellipsis-alt:before{content:"\e063"}.icon-cloud-up:before{content:"\e064"}.icon-cloud-down:before{content:"\e065"}.icon-import:before{content:"\e066"}.icon-export:before{content:"\e067"}.icon-copy:before{content:"\e068"}.icon-angry-smiley:before{content:"\e069"}.icon-happy-smiley:before{content:"\e06a"}.icon-help:before{content:"\e06b"}.icon-resize-in:before{content:"\e06c"}.icon-resize-out:before{content:"\e06d"}.icon-world:before{content:"\e06f"}.icon-braille:before{content:"\e06e"}.icon-play:before{content:"\e070"}.icon-pause:before{content:"\e071"}.icon-stop:before{content:"\e072"}.icon-check-mark-circle-two:before{content:"\e073"}.icon-laptop:before{content:"\e075"}.nano{overflow:hidden!important}.nano .content{position:absolute;overflow:scroll;top:0;right:0;bottom:0;left:0;-webkit-overflow-scrolling:touch}.nano .content .content-wrapper{height:100%}.nano .content::-webkit-scrollbar{visibility:hidden}.has-scrollbar .content::-webkit-scrollbar{visibility:hidden}.nano-visibility-hidden::-webkit-scrollbar{visibility:hidden}.nano>.pane{background:0 0;position:absolute;width:5px;right:0;top:1px;bottom:1px;opacity:.01;-webkit-transition:.4s;-o-transition:.4s;transition:.4s;border-radius:5px;z-index:102;margin:2px}.nano>.pane2{background:0 0;position:absolute;height:5px;right:1px;left:1px;bottom:0;opacity:.01;-webkit-transition:.4s;-o-transition:.4s;transition:.4s;border-radius:5px;z-index:10000;margin:2px}.nano>.pane>.slider{background-color:#999;background-color:rgba(0,0,0,.3);position:relative;margin:0;border-radius:3px;width:5px}.nano>.pane2>.slider2{background-color:#999;background-color:rgba(0,0,0,.3);position:relative;margin:0;border-radius:3px;height:5px}.nano:hover>.pane,.nano:hover>.pane2,.pane.active,.pane.activescroll,.pane.flashed,.pane2.active,.pane2.activescroll,.pane2.flashed{opacity:.99}.nano>.pane.active,.nano>.pane:hover{background-color:rgba(0,0,0,.15)}.nano>.pane2.active,.nano>.pane2:hover{background-color:rgba(0,0,0,.15)}.nano>.pane.active>.slider,.nano>.pane:hover>.slider{background-color:rgba(0,0,0,.4)}.nano>.pane2.active>.slider2,.nano>.pane2:hover>.slider2{background-color:rgba(0,0,0,.4)}.letterfx{display:inline-block;margin:0;padding:0;-o-transition:all 1s;transition:all 1s;-ms-transition:all 1s;-webkit-transition:all 1s}.letterfx-spin-before{transform:rotate(3600deg);-ms-transform:rotate(3600deg);-webkit-transform:rotate(3600deg)}.letterfx-spin-after{-webkit-transform:none;-ms-transform:none;transform:none}.letterfx-fade-before{opacity:0}.letterfx-grow-before{transform:scale(0,0);-ms-transform:scale(0,0);-webkit-transform:scale(0,0)}.letterfx-grow-after{-webkit-transform:none;-ms-transform:none;transform:none}.letterfx-smear-before{color:transparent;text-shadow:-1px -1px 25px transparent}.letterfx-smear-after{color:inherit;text-shadow:0 0 #333}.letterfx-fall-before{visibility:hidden;transform:scale(3,3);-ms-transform:scale(3,3);-webkit-transform:scale(3,3)}.letterfx-fall-after{transform:scale(1,1);-ms-transform:scale(1,1);-webkit-transform:scale(1,1);text-shadow:0}.letterfx-swirl-before{visibility:hidden;transform:scale(3,3) rotate(3600deg);-ms-transform:scale(3,3) rotate(3600deg);-webkit-transform:scale(3,3) rotate(3600deg)}.letterfx-swirl-after{-webkit-transform:none;-ms-transform:none;transform:none;text-shadow:0}.letterfx-wave-container .letterfx{position:relative}.letterfx-wave-before{bottom:0}.letterfx-wave-after{bottom:15px}.letterfx-fly-bottom-container .letterfx,.letterfx-fly-left-container .letterfx,.letterfx-fly-right-container .letterfx,.letterfx-fly-top-container .letterfx{position:relative}.letterfx-fly-left-before{left:-50em}.letterfx-fly-left-after{left:0}.letterfx-fly-right-before{right:-50em}.letterfx-fly-right-after{right:0}.letterfx-fly-top-before{top:-20em}.letterfx-fly-top-after{top:0}.letterfx-fly-bottom-before{bottom:-20em}.letterfx-fly-bottom-after{bottom:0}.inputosaurus-container{background-color:#fff;border:1px solid #bcbec0;margin:0 5px 0 0;padding:0 3px;display:inline-block;cursor:text;font-size:14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.inputosaurus-container li{display:block;float:left;overflow:hidden;margin:2px 2px 0;padding:2px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;-ms-text-overflow:ellipsis;background-color:#e5eff7;border:#a9cae4 solid 1px;border-radius:2px;color:#5b9bcd;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.75) inset;box-shadow:0 1px 0 rgba(255,255,255,.75) inset;line-height:20px;cursor:default}.inputosaurus-container li.inputosaurus-selected{background-color:#bdd6eb}.inputosaurus-container li a{font-size:16px;color:#5b9bcd;padding:1px;text-decoration:none;outline:0}.inputosaurus-container .inputosaurus-input{border:none;-webkit-box-shadow:none;box-shadow:none;background-color:#fff;margin-top:3px}.inputosaurus-container .inputosaurus-input input{border:none;height:23px;font-size:14px;line-height:20px;color:#555;margin:0;outline:0;padding:0 0 1px 1px;width:25px;-webkit-box-shadow:none;box-shadow:none}.inputosaurus-container .inputosaurus-input input:hover{-webkit-box-shadow:none;box-shadow:none}.inputosaurus-input-hidden{display:none}.flag-wrapper{width:24px;height:16px;display:inline-block}.flag{width:16px;height:11px;display:inline-block;background:url(flags.png) no-repeat}.flag.flag-en{background-position:-144px -154px}.flag.flag-en_us{background-position:-144px -154px}.flag.flag-en_gb{background-position:-176px -44px}.flag.flag-en_uk{background-position:-176px -44px}.flag.flag-en_ca{background-position:-48px -22px}.flag.flag-el_gr{background-position:-112px -55px}.flag.flag-uk_ua{background-position:-96px -154px}.flag.flag-ru_ru{background-position:-224px -121px}.flag.flag-pt_br{background-position:-192px -11px}.flag.flag-pl_pl{background-position:-32px -121px}.flag.flag-nl_nl{background-position:-80px -110px}.flag.flag-nb_no{background-position:-96px -110px}.flag.flag-it_it{background-position:-208px -66px}.flag.flag-de_de{background-position:-80px -33px}.flag.flag-ro_ro{background-position:-192px -121px}.flag.flag-fi_fi{background-position:-64px -44px}.flag.flag-fr_fr{background-position:-144px -44px}.flag.flag-fr_ca{background-position:-144px -44px}.flag.flag-pt_pt{background-position:-112px -121px}.flag.flag-pt_br{background-position:-192px -11px}.flag.flag-ar_sa{background-position:0 -132px}.flag.flag-bg_bg{background-position:-80px -11px}.flag.flag-es_es{background-position:-16px -44px}.flag.flag-es_la{background-position:-16px -44px}.flag.flag-et_ee{background-position:-192px -33px}.flag.flag-fa_ir{background-position:-176px -66px}.flag.flag-lt_lt{background-position:-80px -88px}.flag.flag-lv_lv{background-position:-112px -88px}.flag.flag-is_is{background-position:-192px -66px}.flag.flag-hu_hu{background-position:-32px -66px}.flag.flag-ko_kr{background-position:-144px -77px}.flag.flag-ja_jp{background-position:-16px -77px}.flag.flag-sl_si{background-position:-128px -132px}.flag.flag-sk_sk{background-position:-144px -132px}.flag.flag-tr_tr{background-position:-16px -154px}.flag.flag-sv_se{background-position:-80px -132px}.flag.flag-cs_cz{background-position:-64px -33px}.flag.flag-zh_cn{background-position:-208px -22px}.flag.flag-zh_tw{background-position:-64px -154px}.flag.flag-zh_hk{background-position:-208px -22px}.flag.flag-da_dk{background-position:-112px -33px}.flag.flag-id_id{background-position:-64px -66px}.opentip-container,.opentip-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.opentip-container{position:absolute;max-width:300px;z-index:100;-webkit-transition:-webkit-transform 1s ease-in-out;-o-transition:-o-transform 1s ease-in-out;transition:-webkit-transform 1s ease-in-out;-o-transition:transform 1s ease-in-out;transition:transform 1s ease-in-out;transition:transform 1s ease-in-out,-webkit-transform 1s ease-in-out;pointer-events:none;-webkit-transform:translateX(0) translateY(0);-ms-transform:translateX(0) translateY(0);transform:translateX(0) translateY(0)}.opentip-container.ot-fixed.ot-going-to-show.stem-top.stem-center,.opentip-container.ot-fixed.ot-hidden.stem-top.stem-center,.opentip-container.ot-fixed.ot-hiding.stem-top.stem-center{-webkit-transform:translateY(-5px);-ms-transform:translateY(-5px);transform:translateY(-5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-top.stem-right,.opentip-container.ot-fixed.ot-hidden.stem-top.stem-right,.opentip-container.ot-fixed.ot-hiding.stem-top.stem-right{-webkit-transform:translateY(-5px) translateX(5px);-ms-transform:translateY(-5px) translateX(5px);transform:translateY(-5px) translateX(5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-middle.stem-right,.opentip-container.ot-fixed.ot-hidden.stem-middle.stem-right,.opentip-container.ot-fixed.ot-hiding.stem-middle.stem-right{-webkit-transform:translateX(5px);-ms-transform:translateX(5px);transform:translateX(5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-bottom.stem-right,.opentip-container.ot-fixed.ot-hidden.stem-bottom.stem-right,.opentip-container.ot-fixed.ot-hiding.stem-bottom.stem-right{-webkit-transform:translateY(5px) translateX(5px);-ms-transform:translateY(5px) translateX(5px);transform:translateY(5px) translateX(5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-bottom.stem-center,.opentip-container.ot-fixed.ot-hidden.stem-bottom.stem-center,.opentip-container.ot-fixed.ot-hiding.stem-bottom.stem-center{-webkit-transform:translateY(5px);-ms-transform:translateY(5px);transform:translateY(5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-bottom.stem-left,.opentip-container.ot-fixed.ot-hidden.stem-bottom.stem-left,.opentip-container.ot-fixed.ot-hiding.stem-bottom.stem-left{-webkit-transform:translateY(5px) translateX(-5px);-ms-transform:translateY(5px) translateX(-5px);transform:translateY(5px) translateX(-5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-middle.stem-left,.opentip-container.ot-fixed.ot-hidden.stem-middle.stem-left,.opentip-container.ot-fixed.ot-hiding.stem-middle.stem-left{-webkit-transform:translateX(-5px);-ms-transform:translateX(-5px);transform:translateX(-5px)}.opentip-container.ot-fixed.ot-going-to-show.stem-top.stem-left,.opentip-container.ot-fixed.ot-hidden.stem-top.stem-left,.opentip-container.ot-fixed.ot-hiding.stem-top.stem-left{-webkit-transform:translateY(-5px) translateX(-5px);-ms-transform:translateY(-5px) translateX(-5px);transform:translateY(-5px) translateX(-5px)}.opentip-container.ot-fixed .opentip{pointer-events:auto}.opentip-container.ot-hidden{display:none}.opentip-container .opentip{position:relative;font-size:13px;line-height:120%;padding:9px 14px;color:#4f4b47;text-shadow:-1px -1px 0 rgba(255,255,255,.2)}.opentip-container .opentip .header{margin:0;padding:0}.opentip-container .opentip .ot-close{pointer-events:auto;display:block;position:absolute;top:-12px;left:60px;color:rgba(0,0,0,.5);background:rgba(0,0,0,0);text-decoration:none}.opentip-container .opentip .ot-close span{display:none}.opentip-container .opentip .ot-loading-indicator{display:none}.opentip-container.ot-loading .ot-loading-indicator{width:30px;height:30px;font-size:30px;line-height:30px;font-weight:700;display:block}.opentip-container.ot-loading .ot-loading-indicator span{display:block;-webkit-animation:otloading 2s linear infinite;animation:otloading 2s linear infinite;text-align:center}.opentip-container.style-alert .opentip,.opentip-container.style-dark .opentip{color:#f8f8f8;text-shadow:1px 1px 0 rgba(0,0,0,.2)}.opentip-container.style-glass .opentip{padding:15px 25px;color:#317cc5;text-shadow:1px 1px 8px rgba(0,94,153,.3)}.opentip-container.ot-hide-effect-fade{-webkit-transition:-webkit-transform .5s ease-in-out,opacity 1s ease-in-out;-o-transition:-o-transform .5s ease-in-out,opacity 1s ease-in-out;-webkit-transition:opacity 1s ease-in-out,-webkit-transform .5s ease-in-out;transition:opacity 1s ease-in-out,-webkit-transform .5s ease-in-out;-o-transition:transform .5s ease-in-out,opacity 1s ease-in-out;transition:transform .5s ease-in-out,opacity 1s ease-in-out;transition:transform .5s ease-in-out,opacity 1s ease-in-out,-webkit-transform .5s ease-in-out;opacity:1;-ms-filter:none;-webkit-filter:none;filter:none}.opentip-container.ot-hide-effect-fade.ot-hiding{opacity:0}.opentip-container.ot-show-effect-appear.ot-going-to-show,.opentip-container.ot-show-effect-appear.ot-showing{-webkit-transition:-webkit-transform .5s ease-in-out,opacity 1s ease-in-out;-o-transition:-o-transform .5s ease-in-out,opacity 1s ease-in-out;-webkit-transition:opacity 1s ease-in-out,-webkit-transform .5s ease-in-out;transition:opacity 1s ease-in-out,-webkit-transform .5s ease-in-out;-o-transition:transform .5s ease-in-out,opacity 1s ease-in-out;transition:transform .5s ease-in-out,opacity 1s ease-in-out;transition:transform .5s ease-in-out,opacity 1s ease-in-out,-webkit-transform .5s ease-in-out}.opentip-container.ot-show-effect-appear.ot-going-to-show{opacity:0}.opentip-container.ot-show-effect-appear.ot-showing{opacity:1;-ms-filter:none;-webkit-filter:none;filter:none}.opentip-container.ot-show-effect-appear.ot-visible{opacity:1;-ms-filter:none;-webkit-filter:none;filter:none}@-webkit-keyframes otloading{0%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes otloading{0%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-ms-transform:rotate(360deg);transform:rotate(360deg)}}/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | https://dbushell.com/ - */.pika-single{z-index:9999;display:block;position:relative;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single:after,.pika-single:before{content:" ";display:table}.pika-single:after{clear:both}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;-webkit-box-shadow:0 5px 15px -5px rgba(0,0,0,.5);box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{position:relative;text-align:center}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border-collapse:collapse;border-spacing:0;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700;text-align:center}.pika-button{cursor:pointer;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-box-sizing:border-box;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.pika-week{font-size:11px;color:#999}.is-today .pika-button{color:#3af;font-weight:700}.has-event .pika-button,.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;-webkit-box-shadow:inset 0 1px 3px #178fe5;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.has-event .pika-button{background:#005da9;-webkit-box-shadow:inset 0 1px 3px #0076c9;box-shadow:inset 0 1px 3px #0076c9}.is-disabled .pika-button,.is-inrange .pika-button{background:#d5e9f7}.is-startrange .pika-button{color:#fff;background:#6cb31d;-webkit-box-shadow:none;box-shadow:none;border-radius:3px}.is-endrange .pika-button{color:#fff;background:#3af;-webkit-box-shadow:none;box-shadow:none;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-selection-disabled{pointer-events:none;cursor:default}.pika-button:hover,.pika-row.pick-whole-week:hover .pika-button{color:#fff;background:#ff8000;-webkit-box-shadow:none;box-shadow:none;border-radius:3px}.pika-table abbr{border-bottom:none;cursor:help}.lg-sub-html,.lg-toolbar{background-color:rgba(0,0,0,.45)}#lg-counter,.lg-outer .lg-video-cont{vertical-align:middle;display:inline-block}@font-face{font-family:lg;src:url(fonts/lg.eot?n1z373);src:url(fonts/lg.eot?#iefixn1z373) format("embedded-opentype"),url(fonts/lg.woff?n1z373) format("woff"),url(fonts/lg.ttf?n1z373) format("truetype"),url(fonts/lg.svg?n1z373#lg) format("svg");font-weight:400;font-style:normal}.lg-icon{font-family:lg;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.lg-actions .lg-next,.lg-actions .lg-prev{background-color:rgba(0,0,0,.45);border-radius:2px;color:#999;cursor:pointer;display:block;font-size:22px;margin-top:-10px;padding:8px 10px 9px;position:absolute;top:50%;z-index:1080}.lg-actions .lg-next.disabled,.lg-actions .lg-prev.disabled{pointer-events:none;opacity:.5}.lg-actions .lg-next:hover,.lg-actions .lg-prev:hover{color:#fff}.lg-actions .lg-next{right:20px}.lg-actions .lg-next:before{content:"\e095"}.lg-actions .lg-prev{left:20px}.lg-actions .lg-prev:after{content:"\e094"}@-webkit-keyframes lg-right-end{0%,100%{left:0}50%{left:-30px}}@keyframes lg-right-end{0%,100%{left:0}50%{left:-30px}}@-webkit-keyframes lg-left-end{0%,100%{left:0}50%{left:30px}}@keyframes lg-left-end{0%,100%{left:0}50%{left:30px}}.lg-outer.lg-right-end .lg-object{-webkit-animation:lg-right-end .3s;animation:lg-right-end .3s;position:relative}.lg-outer.lg-left-end .lg-object{-webkit-animation:lg-left-end .3s;animation:lg-left-end .3s;position:relative}.lg-toolbar{z-index:1082;left:0;position:absolute;top:0;width:100%}.lg-toolbar .lg-icon{color:#999;cursor:pointer;float:right;font-size:24px;height:47px;line-height:27px;padding:10px 0;text-align:center;width:50px;text-decoration:none!important;outline:0;-webkit-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.lg-toolbar .lg-icon:hover{color:#fff}.lg-toolbar .lg-close:after{content:"\e070"}.lg-toolbar .lg-download:after{content:"\e0f2"}.lg-sub-html{bottom:0;color:#eee;font-size:16px;left:0;padding:10px 40px;position:fixed;right:0;text-align:center;z-index:1080}.lg-sub-html h4{margin:0;font-size:13px;font-weight:700}.lg-sub-html p{font-size:12px;margin:5px 0 0}#lg-counter{color:#999;font-size:16px;padding-left:20px;padding-top:12px}.lg-next,.lg-prev,.lg-toolbar{opacity:1;-webkit-transition:-webkit-transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;-o-transition:-o-transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;-webkit-transition:opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear,-webkit-transform .35s cubic-bezier(0,0,.25,1) 0s;transition:opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear,-webkit-transform .35s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;transition:transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear;transition:transform .35s cubic-bezier(0,0,.25,1) 0s,opacity .35s cubic-bezier(0,0,.25,1) 0s,color .2s linear,-webkit-transform .35s cubic-bezier(0,0,.25,1) 0s}.lg-hide-items .lg-prev{opacity:0;-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}.lg-hide-items .lg-next{opacity:0;-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}.lg-hide-items .lg-toolbar{opacity:0;-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-object{-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);opacity:0;-webkit-transition:-webkit-transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;-o-transition:-o-transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;-webkit-transition:opacity 250ms cubic-bezier(0,0,.25,1),-webkit-transform 250ms cubic-bezier(0,0,.25,1) 0s!important;transition:opacity 250ms cubic-bezier(0,0,.25,1),-webkit-transform 250ms cubic-bezier(0,0,.25,1) 0s!important;-o-transition:transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;transition:transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1)!important;transition:transform 250ms cubic-bezier(0,0,.25,1) 0s,opacity 250ms cubic-bezier(0,0,.25,1),-webkit-transform 250ms cubic-bezier(0,0,.25,1) 0s!important;-webkit-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%}body:not(.lg-from-hash) .lg-outer.lg-start-zoom .lg-item.lg-complete .lg-object{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-outer .lg-thumb-outer{background-color:#0d0a0a;bottom:0;position:absolute;width:100%;z-index:1080;max-height:350px;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);-webkit-transition:-webkit-transform .25s cubic-bezier(0,0,.25,1) 0s;-o-transition:-o-transform .25s cubic-bezier(0,0,.25,1) 0s;transition:-webkit-transform .25s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform .25s cubic-bezier(0,0,.25,1) 0s;transition:transform .25s cubic-bezier(0,0,.25,1) 0s;transition:transform .25s cubic-bezier(0,0,.25,1) 0s,-webkit-transform .25s cubic-bezier(0,0,.25,1) 0s}.lg-outer .lg-thumb-outer.lg-grab .lg-thumb-item{cursor:-webkit-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.lg-outer .lg-thumb-outer.lg-grabbing .lg-thumb-item{cursor:move;cursor:-webkit-grabbing;cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing}.lg-outer .lg-thumb-outer.lg-dragging .lg-thumb{-webkit-transition-duration:0s!important;-o-transition-duration:0s!important;transition-duration:0s!important}.lg-outer.lg-thumb-open .lg-thumb-outer{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.lg-outer .lg-thumb{padding:10px 0;height:100%;margin-bottom:-5px}.lg-outer .lg-thumb-item{cursor:pointer;float:left;overflow:hidden;height:100%;border:2px solid #fff;border-radius:4px;margin-bottom:5px}@media (min-width:1025px){.lg-outer .lg-thumb-item{-webkit-transition:border-color .25s ease;-o-transition:border-color .25s ease;transition:border-color .25s ease}}.lg-outer .lg-thumb-item.active,.lg-outer .lg-thumb-item:hover{border-color:#a90707}.lg-outer .lg-thumb-item img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.lg-outer.lg-has-thumb .lg-item{padding-bottom:120px}.lg-outer.lg-can-toggle .lg-item{padding-bottom:0}.lg-outer.lg-pull-caption-up .lg-sub-html{-webkit-transition:bottom .25s ease;-o-transition:bottom .25s ease;transition:bottom .25s ease}.lg-outer.lg-pull-caption-up.lg-thumb-open .lg-sub-html{bottom:100px}.lg-outer .lg-toogle-thumb{background-color:#0d0a0a;border-radius:2px 2px 0 0;color:#999;cursor:pointer;font-size:24px;height:39px;line-height:27px;padding:5px 0;position:absolute;right:20px;text-align:center;top:-39px;width:50px}.lg-outer .lg-toogle-thumb:after{content:"\e1ff"}.lg-outer .lg-toogle-thumb:hover{color:#fff}.lg-outer .lg-video-cont{max-width:1140px;max-height:100%;width:100%;padding:0 5px}.lg-outer .lg-video{width:100%;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}.lg-outer .lg-video .lg-object{display:inline-block;position:absolute;top:0;left:0;width:100%!important;height:100%!important}.lg-outer .lg-video .lg-video-play{width:84px;height:59px;position:absolute;left:50%;top:50%;margin-left:-42px;margin-top:-30px;z-index:1080;cursor:pointer}.lg-outer .lg-has-vimeo .lg-video-play{background:url(img/vimeo-play.png) no-repeat}.lg-outer .lg-has-vimeo:hover .lg-video-play{background:url(img/vimeo-play.png) 0 -58px no-repeat}.lg-outer .lg-has-html5 .lg-video-play{background:url(img/video-play.png) no-repeat;height:64px;margin-left:-32px;margin-top:-32px;width:64px;opacity:.8}.lg-outer .lg-has-html5:hover .lg-video-play{opacity:1}.lg-outer .lg-has-youtube .lg-video-play{background:url(img/youtube-play.png) no-repeat}.lg-outer .lg-has-youtube:hover .lg-video-play{background:url(img/youtube-play.png) 0 -60px no-repeat}.lg-outer .lg-video-object{width:100%!important;height:100%!important;position:absolute;top:0;left:0}.lg-outer .lg-has-video .lg-video-object{visibility:hidden}.lg-outer .lg-has-video.lg-video-playing .lg-object,.lg-outer .lg-has-video.lg-video-playing .lg-video-play{display:none}.lg-outer .lg-has-video.lg-video-playing .lg-video-object{visibility:visible}.lg-progress-bar{background-color:#333;height:5px;left:0;position:absolute;top:0;width:100%;z-index:1083;opacity:0;-webkit-transition:opacity 80ms ease 0s;-o-transition:opacity 80ms ease 0s;transition:opacity 80ms ease 0s}.lg-progress-bar .lg-progress{background-color:#a90707;height:5px;width:0}.lg-progress-bar.lg-start .lg-progress{width:100%}.lg-show-autoplay .lg-progress-bar{opacity:1}.lg-autoplay-button:after{content:"\e01d"}.lg-show-autoplay .lg-autoplay-button:after{content:"\e01a"}.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-image,.lg-outer.lg-css3.lg-zoom-dragging .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transition-duration:0s;-o-transition-duration:0s;transition-duration:0s}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-img-wrap{-webkit-transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s;-o-transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s;transition:left .3s cubic-bezier(0,0,.25,1) 0s,top .3s cubic-bezier(0,0,.25,1) 0s;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.lg-outer .lg-item.lg-complete.lg-zoomable .lg-image{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;-o-transition:-o-transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;-webkit-transition:opacity .15s,-webkit-transform .3s cubic-bezier(0,0,.25,1) 0s!important;transition:opacity .15s,-webkit-transform .3s cubic-bezier(0,0,.25,1) 0s!important;-o-transition:transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;transition:transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s!important;transition:transform .3s cubic-bezier(0,0,.25,1) 0s,opacity .15s,-webkit-transform .3s cubic-bezier(0,0,.25,1) 0s!important;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-backface-visibility:hidden;backface-visibility:hidden}#lg-zoom-in:after{content:"\e311"}#lg-actual-size{font-size:20px}#lg-actual-size:after{content:"\e033"}#lg-zoom-out{opacity:.5;pointer-events:none}#lg-zoom-out:after{content:"\e312"}.lg-zoomed #lg-zoom-out{opacity:1;pointer-events:auto}.lg-outer .lg-pager-outer{bottom:60px;left:0;position:absolute;right:0;text-align:center;z-index:1080;height:10px}.lg-outer .lg-pager-outer.lg-pager-hover .lg-pager-cont{overflow:visible}.lg-outer .lg-pager-cont{cursor:pointer;display:inline-block;overflow:hidden;position:relative;vertical-align:top;margin:0 5px}.lg-outer .lg-pager-cont:hover .lg-pager-thumb-cont{opacity:1;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.lg-outer .lg-pager-cont.lg-pager-active .lg-pager{-webkit-box-shadow:0 0 0 2px #fff inset;box-shadow:0 0 0 2px #fff inset}.lg-outer .lg-pager-thumb-cont{background-color:#fff;color:#fff;bottom:100%;height:83px;left:0;margin-bottom:20px;margin-left:-60px;opacity:0;padding:5px;position:absolute;width:120px;border-radius:3px;-webkit-transition:opacity .15s ease 0s,-webkit-transform .15s ease 0s;-o-transition:opacity .15s ease 0s,-o-transform .15s ease 0s;transition:opacity .15s ease 0s,-webkit-transform .15s ease 0s;-o-transition:opacity .15s ease 0s,transform .15s ease 0s;transition:opacity .15s ease 0s,transform .15s ease 0s;transition:opacity .15s ease 0s,transform .15s ease 0s,-webkit-transform .15s ease 0s;-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}.lg-outer .lg-pager-thumb-cont img{width:100%;height:100%}.lg-outer .lg-pager{background-color:rgba(255,255,255,.5);border-radius:50%;-webkit-box-shadow:0 0 0 8px rgba(255,255,255,.7) inset;box-shadow:0 0 0 8px rgba(255,255,255,.7) inset;display:block;height:12px;-webkit-transition:box-shadow .3s ease 0s;-o-transition:box-shadow .3s ease 0s;-webkit-transition:-webkit-box-shadow .3s ease 0s;transition:-webkit-box-shadow .3s ease 0s;transition:box-shadow .3s ease 0s;transition:box-shadow .3s ease 0s,-webkit-box-shadow .3s ease 0s;width:12px}.lg-outer .lg-pager:focus,.lg-outer .lg-pager:hover{-webkit-box-shadow:0 0 0 8px #fff inset;box-shadow:0 0 0 8px #fff inset}.lg-outer .lg-caret{border-left:10px solid transparent;border-right:10px solid transparent;border-top:10px dashed;bottom:-10px;display:inline-block;height:0;left:50%;margin-left:-5px;position:absolute;vertical-align:middle;width:0}.lg-outer,.lg-outer .lg,.lg-outer .lg-inner{width:100%;height:100%}.lg-fullscreen:after{content:"\e20c"}.lg-fullscreen-on .lg-fullscreen:after{content:"\e20d"}.group:after,.group:before{display:table;content:"";line-height:0}.group:after{clear:both}.lg-outer{position:fixed;top:0;left:0;z-index:1050;opacity:0;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-outer *{-webkit-box-sizing:border-box;box-sizing:border-box}.lg-outer.lg-visible{opacity:1}.lg-outer.lg-css3 .lg-item.lg-current,.lg-outer.lg-css3 .lg-item.lg-next-slide,.lg-outer.lg-css3 .lg-item.lg-prev-slide{-webkit-transition-duration:inherit!important;-o-transition-duration:inherit!important;transition-duration:inherit!important;-webkit-transition-timing-function:inherit!important;-o-transition-timing-function:inherit!important;transition-timing-function:inherit!important}.lg-outer.lg-css3.lg-dragging .lg-item.lg-current,.lg-outer.lg-css3.lg-dragging .lg-item.lg-next-slide,.lg-outer.lg-css3.lg-dragging .lg-item.lg-prev-slide{-webkit-transition-duration:0s!important;-o-transition-duration:0s!important;transition-duration:0s!important;opacity:1}.lg-outer.lg-grab img.lg-object{cursor:-webkit-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.lg-outer.lg-grabbing img.lg-object{cursor:move;cursor:-webkit-grabbing;cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing}.lg-outer .lg{position:relative;overflow:hidden;margin-left:auto;margin-right:auto;max-width:100%;max-height:100%}.lg-outer .lg-inner{position:absolute;left:0;top:0;white-space:nowrap}.lg-outer .lg-item{background:url(img/loading.gif) center center no-repeat;display:none!important}.lg-outer.lg-css .lg-current,.lg-outer.lg-css3 .lg-current,.lg-outer.lg-css3 .lg-next-slide,.lg-outer.lg-css3 .lg-prev-slide{display:inline-block!important}.lg-outer .lg-img-wrap,.lg-outer .lg-item{display:inline-block;text-align:center;position:absolute;width:100%;height:100%}.lg-outer .lg-img-wrap:before,.lg-outer .lg-item:before{content:"";display:inline-block;height:50%;width:1px;margin-right:-1px}.lg-outer .lg-img-wrap{position:absolute;padding:0 5px;left:0;right:0;top:0;bottom:0}.lg-outer .lg-item.lg-complete{background-image:none}.lg-outer .lg-item.lg-current{z-index:1060}.lg-outer .lg-image{display:inline-block;vertical-align:middle;max-width:100%;max-height:100%;width:auto!important;height:auto!important}.lg-outer.lg-show-after-load .lg-item .lg-object,.lg-outer.lg-show-after-load .lg-item .lg-video-play{opacity:0;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-outer.lg-show-after-load .lg-item.lg-complete .lg-object,.lg-outer.lg-show-after-load .lg-item.lg-complete .lg-video-play{opacity:1}.lg-outer .lg-empty-html,.lg-outer.lg-hide-download #lg-download{display:none}.lg-backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:1040;background-color:#000;opacity:0;-webkit-transition:opacity .15s ease 0s;-o-transition:opacity .15s ease 0s;transition:opacity .15s ease 0s}.lg-backdrop.in{opacity:1}.lg-css3.lg-no-trans .lg-current,.lg-css3.lg-no-trans .lg-next-slide,.lg-css3.lg-no-trans .lg-prev-slide{-webkit-transition:none 0s ease 0s!important;-o-transition:none 0s ease 0s!important;transition:none 0s ease 0s!important}.lg-css3.lg-use-css3 .lg-item,.lg-css3.lg-use-left .lg-item{-webkit-backface-visibility:hidden;backface-visibility:hidden}.lg-css3.lg-fade .lg-item{opacity:0}.lg-css3.lg-fade .lg-item.lg-current{opacity:1}.lg-css3.lg-fade .lg-item.lg-current,.lg-css3.lg-fade .lg-item.lg-next-slide,.lg-css3.lg-fade .lg-item.lg-prev-slide{-webkit-transition:opacity .1s ease 0s;-o-transition:opacity .1s ease 0s;transition:opacity .1s ease 0s}.lg-css3.lg-slide.lg-use-css3 .lg-item{opacity:0}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-current,.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-next-slide,.lg-css3.lg-slide.lg-use-css3 .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide.lg-use-left .lg-item{opacity:0;position:absolute;left:0}.lg-css3.lg-slide.lg-use-left .lg-item.lg-prev-slide{left:-100%}.lg-css3.lg-slide.lg-use-left .lg-item.lg-next-slide{left:100%}.lg-css3.lg-slide.lg-use-left .lg-item.lg-current{left:0;opacity:1}.lg-css3.lg-slide.lg-use-left .lg-item.lg-current,.lg-css3.lg-slide.lg-use-left .lg-item.lg-next-slide,.lg-css3.lg-slide.lg-use-left .lg-item.lg-prev-slide{-webkit-transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:left 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s}.lg-css3.lg-zoom-in .lg-item{opacity:0}.lg-css3.lg-zoom-in .lg-item.lg-next-slide,.lg-css3.lg-zoom-in .lg-item.lg-prev-slide{-webkit-transform:scale3d(1.3,1.3,1.3);transform:scale3d(1.3,1.3,1.3)}.lg-css3.lg-zoom-in .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-zoom-in .lg-item.lg-current,.lg-css3.lg-zoom-in .lg-item.lg-next-slide,.lg-css3.lg-zoom-in .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-zoom-in-big .lg-item{opacity:0}.lg-css3.lg-zoom-in-big .lg-item.lg-next-slide,.lg-css3.lg-zoom-in-big .lg-item.lg-prev-slide{-webkit-transform:scale3d(2,2,2);transform:scale3d(2,2,2)}.lg-css3.lg-zoom-in-big .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-zoom-in-big .lg-item.lg-current,.lg-css3.lg-zoom-in-big .lg-item.lg-next-slide,.lg-css3.lg-zoom-in-big .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-zoom-out .lg-item{opacity:0}.lg-css3.lg-zoom-out .lg-item.lg-next-slide,.lg-css3.lg-zoom-out .lg-item.lg-prev-slide{-webkit-transform:scale3d(.7,.7,.7);transform:scale3d(.7,.7,.7)}.lg-css3.lg-zoom-out .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-zoom-out .lg-item.lg-current,.lg-css3.lg-zoom-out .lg-item.lg-next-slide,.lg-css3.lg-zoom-out .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-zoom-out-big .lg-item{opacity:0}.lg-css3.lg-zoom-out-big .lg-item.lg-next-slide,.lg-css3.lg-zoom-out-big .lg-item.lg-prev-slide{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0)}.lg-css3.lg-zoom-out-big .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-zoom-out-big .lg-item.lg-current,.lg-css3.lg-zoom-out-big .lg-item.lg-next-slide,.lg-css3.lg-zoom-out-big .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-zoom-out-in .lg-item{opacity:0}.lg-css3.lg-zoom-out-in .lg-item.lg-prev-slide{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0)}.lg-css3.lg-zoom-out-in .lg-item.lg-next-slide{-webkit-transform:scale3d(2,2,2);transform:scale3d(2,2,2)}.lg-css3.lg-zoom-out-in .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-zoom-out-in .lg-item.lg-current,.lg-css3.lg-zoom-out-in .lg-item.lg-next-slide,.lg-css3.lg-zoom-out-in .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-zoom-in-out .lg-item{opacity:0}.lg-css3.lg-zoom-in-out .lg-item.lg-prev-slide{-webkit-transform:scale3d(2,2,2);transform:scale3d(2,2,2)}.lg-css3.lg-zoom-in-out .lg-item.lg-next-slide{-webkit-transform:scale3d(0,0,0);transform:scale3d(0,0,0)}.lg-css3.lg-zoom-in-out .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-zoom-in-out .lg-item.lg-current,.lg-css3.lg-zoom-in-out .lg-item.lg-next-slide,.lg-css3.lg-zoom-in-out .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-soft-zoom .lg-item{opacity:0}.lg-css3.lg-soft-zoom .lg-item.lg-prev-slide{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}.lg-css3.lg-soft-zoom .lg-item.lg-next-slide{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}.lg-css3.lg-soft-zoom .lg-item.lg-current{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.lg-css3.lg-soft-zoom .lg-item.lg-current,.lg-css3.lg-soft-zoom .lg-item.lg-next-slide,.lg-css3.lg-soft-zoom .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-scale-up .lg-item{opacity:0}.lg-css3.lg-scale-up .lg-item.lg-next-slide,.lg-css3.lg-scale-up .lg-item.lg-prev-slide{-ms-transform:scale3d(.8,.8,.8) translate3d(0,10%,0);-webkit-transform:scale3d(.8,.8,.8) translate3d(0,10%,0);transform:scale3d(.8,.8,.8) translate3d(0,10%,0)}.lg-css3.lg-scale-up .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-scale-up .lg-item.lg-current,.lg-css3.lg-scale-up .lg-item.lg-next-slide,.lg-css3.lg-scale-up .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-circular .lg-item{opacity:0}.lg-css3.lg-slide-circular .lg-item.lg-prev-slide{-ms-transform:scale3d(0,0,0) translate3d(-100%,0,0);-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0)}.lg-css3.lg-slide-circular .lg-item.lg-next-slide{-ms-transform:scale3d(0,0,0) translate3d(100%,0,0);-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0)}.lg-css3.lg-slide-circular .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-circular .lg-item.lg-current,.lg-css3.lg-slide-circular .lg-item.lg-next-slide,.lg-css3.lg-slide-circular .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-circular-up .lg-item{opacity:0}.lg-css3.lg-slide-circular-up .lg-item.lg-prev-slide{-ms-transform:scale3d(0,0,0) translate3d(-100%,-100%,0);-webkit-transform:scale3d(0,0,0) translate3d(-100%,-100%,0);transform:scale3d(0,0,0) translate3d(-100%,-100%,0)}.lg-css3.lg-slide-circular-up .lg-item.lg-next-slide{-ms-transform:scale3d(0,0,0) translate3d(100%,-100%,0);-webkit-transform:scale3d(0,0,0) translate3d(100%,-100%,0);transform:scale3d(0,0,0) translate3d(100%,-100%,0)}.lg-css3.lg-slide-circular-up .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-circular-up .lg-item.lg-current,.lg-css3.lg-slide-circular-up .lg-item.lg-next-slide,.lg-css3.lg-slide-circular-up .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-circular-down .lg-item{opacity:0}.lg-css3.lg-slide-circular-down .lg-item.lg-prev-slide{-ms-transform:scale3d(0,0,0) translate3d(-100%,100%,0);-webkit-transform:scale3d(0,0,0) translate3d(-100%,100%,0);transform:scale3d(0,0,0) translate3d(-100%,100%,0)}.lg-css3.lg-slide-circular-down .lg-item.lg-next-slide{-ms-transform:scale3d(0,0,0) translate3d(100%,100%,0);-webkit-transform:scale3d(0,0,0) translate3d(100%,100%,0);transform:scale3d(0,0,0) translate3d(100%,100%,0)}.lg-css3.lg-slide-circular-down .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-circular-down .lg-item.lg-current,.lg-css3.lg-slide-circular-down .lg-item.lg-next-slide,.lg-css3.lg-slide-circular-down .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-circular-vertical .lg-item{opacity:0}.lg-css3.lg-slide-circular-vertical .lg-item.lg-prev-slide{-ms-transform:scale3d(0,0,0) translate3d(0,-100%,0);-webkit-transform:scale3d(0,0,0) translate3d(0,-100%,0);transform:scale3d(0,0,0) translate3d(0,-100%,0)}.lg-css3.lg-slide-circular-vertical .lg-item.lg-next-slide{-ms-transform:scale3d(0,0,0) translate3d(0,100%,0);-webkit-transform:scale3d(0,0,0) translate3d(0,100%,0);transform:scale3d(0,0,0) translate3d(0,100%,0)}.lg-css3.lg-slide-circular-vertical .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-circular-vertical .lg-item.lg-current,.lg-css3.lg-slide-circular-vertical .lg-item.lg-next-slide,.lg-css3.lg-slide-circular-vertical .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-circular-vertical-left .lg-item{opacity:0}.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-prev-slide{-ms-transform:scale3d(0,0,0) translate3d(-100%,-100%,0);-webkit-transform:scale3d(0,0,0) translate3d(-100%,-100%,0);transform:scale3d(0,0,0) translate3d(-100%,-100%,0)}.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-next-slide{-ms-transform:scale3d(0,0,0) translate3d(-100%,100%,0);-webkit-transform:scale3d(0,0,0) translate3d(-100%,100%,0);transform:scale3d(0,0,0) translate3d(-100%,100%,0)}.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-current,.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-next-slide,.lg-css3.lg-slide-circular-vertical-left .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-circular-vertical-down .lg-item{opacity:0}.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-prev-slide{-ms-transform:scale3d(0,0,0) translate3d(100%,-100%,0);-webkit-transform:scale3d(0,0,0) translate3d(100%,-100%,0);transform:scale3d(0,0,0) translate3d(100%,-100%,0)}.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-next-slide{-ms-transform:scale3d(0,0,0) translate3d(100%,100%,0);-webkit-transform:scale3d(0,0,0) translate3d(100%,100%,0);transform:scale3d(0,0,0) translate3d(100%,100%,0)}.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-current,.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-next-slide,.lg-css3.lg-slide-circular-vertical-down .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;-webkit-transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity 1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-vertical .lg-item{opacity:0}.lg-css3.lg-slide-vertical .lg-item.lg-prev-slide{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.lg-css3.lg-slide-vertical .lg-item.lg-next-slide{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.lg-css3.lg-slide-vertical .lg-item.lg-current{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-vertical .lg-item.lg-current,.lg-css3.lg-slide-vertical .lg-item.lg-next-slide,.lg-css3.lg-slide-vertical .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-vertical-growth .lg-item{opacity:0}.lg-css3.lg-slide-vertical-growth .lg-item.lg-prev-slide{-ms-transform:scale3d(.5,.5,.5) translate3d(0,-150%,0);-webkit-transform:scale3d(.5,.5,.5) translate3d(0,-150%,0);transform:scale3d(.5,.5,.5) translate3d(0,-150%,0)}.lg-css3.lg-slide-vertical-growth .lg-item.lg-next-slide{-ms-transform:scale3d(.5,.5,.5) translate3d(0,150%,0);-webkit-transform:scale3d(.5,.5,.5) translate3d(0,150%,0);transform:scale3d(.5,.5,.5) translate3d(0,150%,0)}.lg-css3.lg-slide-vertical-growth .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-vertical-growth .lg-item.lg-current,.lg-css3.lg-slide-vertical-growth .lg-item.lg-next-slide,.lg-css3.lg-slide-vertical-growth .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-only .lg-item{opacity:0}.lg-css3.lg-slide-skew-only .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only .lg-item.lg-prev-slide{-ms-transform:skew(10deg,0deg);-webkit-transform:skew(10deg,0deg);transform:skew(10deg,0deg)}.lg-css3.lg-slide-skew-only .lg-item.lg-current{-ms-transform:skew(0deg,0deg);-webkit-transform:skew(0deg,0deg);transform:skew(0deg,0deg);opacity:1}.lg-css3.lg-slide-skew-only .lg-item.lg-current,.lg-css3.lg-slide-skew-only .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-only-rev .lg-item{opacity:0}.lg-css3.lg-slide-skew-only-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only-rev .lg-item.lg-prev-slide{-ms-transform:skew(-10deg,0deg);-webkit-transform:skew(-10deg,0deg);transform:skew(-10deg,0deg)}.lg-css3.lg-slide-skew-only-rev .lg-item.lg-current{-ms-transform:skew(0deg,0deg);-webkit-transform:skew(0deg,0deg);transform:skew(0deg,0deg);opacity:1}.lg-css3.lg-slide-skew-only-rev .lg-item.lg-current,.lg-css3.lg-slide-skew-only-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-only-y .lg-item{opacity:0}.lg-css3.lg-slide-skew-only-y .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only-y .lg-item.lg-prev-slide{-ms-transform:skew(0deg,10deg);-webkit-transform:skew(0deg,10deg);transform:skew(0deg,10deg)}.lg-css3.lg-slide-skew-only-y .lg-item.lg-current{-ms-transform:skew(0deg,0deg);-webkit-transform:skew(0deg,0deg);transform:skew(0deg,0deg);opacity:1}.lg-css3.lg-slide-skew-only-y .lg-item.lg-current,.lg-css3.lg-slide-skew-only-y .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only-y .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-only-y-rev .lg-item{opacity:0}.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-prev-slide{-ms-transform:skew(0deg,-10deg);-webkit-transform:skew(0deg,-10deg);transform:skew(0deg,-10deg)}.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-current{-ms-transform:skew(0deg,0deg);-webkit-transform:skew(0deg,0deg);transform:skew(0deg,0deg);opacity:1}.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-current,.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-only-y-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew .lg-item{opacity:0}.lg-css3.lg-slide-skew .lg-item.lg-prev-slide{-ms-transform:skew(20deg,0deg) translate3d(-100%,0,0);-webkit-transform:skew(20deg,0deg) translate3d(-100%,0,0);transform:skew(20deg,0deg) translate3d(-100%,0,0)}.lg-css3.lg-slide-skew .lg-item.lg-next-slide{-ms-transform:skew(20deg,0deg) translate3d(100%,0,0);-webkit-transform:skew(20deg,0deg) translate3d(100%,0,0);transform:skew(20deg,0deg) translate3d(100%,0,0)}.lg-css3.lg-slide-skew .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew .lg-item.lg-current,.lg-css3.lg-slide-skew .lg-item.lg-next-slide,.lg-css3.lg-slide-skew .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-rev .lg-item{opacity:0}.lg-css3.lg-slide-skew-rev .lg-item.lg-prev-slide{-ms-transform:skew(-20deg,0deg) translate3d(-100%,0,0);-webkit-transform:skew(-20deg,0deg) translate3d(-100%,0,0);transform:skew(-20deg,0deg) translate3d(-100%,0,0)}.lg-css3.lg-slide-skew-rev .lg-item.lg-next-slide{-ms-transform:skew(-20deg,0deg) translate3d(100%,0,0);-webkit-transform:skew(-20deg,0deg) translate3d(100%,0,0);transform:skew(-20deg,0deg) translate3d(100%,0,0)}.lg-css3.lg-slide-skew-rev .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-rev .lg-item.lg-current,.lg-css3.lg-slide-skew-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-cross .lg-item{opacity:0}.lg-css3.lg-slide-skew-cross .lg-item.lg-prev-slide{-ms-transform:skew(0deg,60deg) translate3d(-100%,0,0);-webkit-transform:skew(0deg,60deg) translate3d(-100%,0,0);transform:skew(0deg,60deg) translate3d(-100%,0,0)}.lg-css3.lg-slide-skew-cross .lg-item.lg-next-slide{-ms-transform:skew(0deg,60deg) translate3d(100%,0,0);-webkit-transform:skew(0deg,60deg) translate3d(100%,0,0);transform:skew(0deg,60deg) translate3d(100%,0,0)}.lg-css3.lg-slide-skew-cross .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-cross .lg-item.lg-current,.lg-css3.lg-slide-skew-cross .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-cross .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-cross-rev .lg-item{opacity:0}.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-prev-slide{-ms-transform:skew(0deg,-60deg) translate3d(-100%,0,0);-webkit-transform:skew(0deg,-60deg) translate3d(-100%,0,0);transform:skew(0deg,-60deg) translate3d(-100%,0,0)}.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-next-slide{-ms-transform:skew(0deg,-60deg) translate3d(100%,0,0);-webkit-transform:skew(0deg,-60deg) translate3d(100%,0,0);transform:skew(0deg,-60deg) translate3d(100%,0,0)}.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-current,.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-cross-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-ver .lg-item{opacity:0}.lg-css3.lg-slide-skew-ver .lg-item.lg-prev-slide{-ms-transform:skew(60deg,0deg) translate3d(0,-100%,0);-webkit-transform:skew(60deg,0deg) translate3d(0,-100%,0);transform:skew(60deg,0deg) translate3d(0,-100%,0)}.lg-css3.lg-slide-skew-ver .lg-item.lg-next-slide{-ms-transform:skew(60deg,0deg) translate3d(0,100%,0);-webkit-transform:skew(60deg,0deg) translate3d(0,100%,0);transform:skew(60deg,0deg) translate3d(0,100%,0)}.lg-css3.lg-slide-skew-ver .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-ver .lg-item.lg-current,.lg-css3.lg-slide-skew-ver .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-ver .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-ver-rev .lg-item{opacity:0}.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-prev-slide{-ms-transform:skew(-60deg,0deg) translate3d(0,-100%,0);-webkit-transform:skew(-60deg,0deg) translate3d(0,-100%,0);transform:skew(-60deg,0deg) translate3d(0,-100%,0)}.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-next-slide{-ms-transform:skew(-60deg,0deg) translate3d(0,100%,0);-webkit-transform:skew(-60deg,0deg) translate3d(0,100%,0);transform:skew(-60deg,0deg) translate3d(0,100%,0)}.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-current,.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-ver-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-ver-cross .lg-item{opacity:0}.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-prev-slide{-ms-transform:skew(0deg,20deg) translate3d(0,-100%,0);-webkit-transform:skew(0deg,20deg) translate3d(0,-100%,0);transform:skew(0deg,20deg) translate3d(0,-100%,0)}.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-next-slide{-ms-transform:skew(0deg,20deg) translate3d(0,100%,0);-webkit-transform:skew(0deg,20deg) translate3d(0,100%,0);transform:skew(0deg,20deg) translate3d(0,100%,0)}.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-current,.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-ver-cross .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-slide-skew-ver-cross-rev .lg-item{opacity:0}.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-prev-slide{-ms-transform:skew(0deg,-20deg) translate3d(0,-100%,0);-webkit-transform:skew(0deg,-20deg) translate3d(0,-100%,0);transform:skew(0deg,-20deg) translate3d(0,-100%,0)}.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-next-slide{-ms-transform:skew(0deg,-20deg) translate3d(0,100%,0);-webkit-transform:skew(0deg,-20deg) translate3d(0,100%,0);transform:skew(0deg,-20deg) translate3d(0,100%,0)}.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-current{-ms-transform:skew(0deg,0deg) translate3d(0,0,0);-webkit-transform:skew(0deg,0deg) translate3d(0,0,0);transform:skew(0deg,0deg) translate3d(0,0,0);opacity:1}.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-current,.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-next-slide,.lg-css3.lg-slide-skew-ver-cross-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-lollipop .lg-item{opacity:0}.lg-css3.lg-lollipop .lg-item.lg-prev-slide{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.lg-css3.lg-lollipop .lg-item.lg-next-slide{-ms-transform:translate3d(0,0,0) scale(.5);-webkit-transform:translate3d(0,0,0) scale(.5);transform:translate3d(0,0,0) scale(.5)}.lg-css3.lg-lollipop .lg-item.lg-current{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.lg-css3.lg-lollipop .lg-item.lg-current,.lg-css3.lg-lollipop .lg-item.lg-next-slide,.lg-css3.lg-lollipop .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-lollipop-rev .lg-item{opacity:0}.lg-css3.lg-lollipop-rev .lg-item.lg-prev-slide{-ms-transform:translate3d(0,0,0) scale(.5);-webkit-transform:translate3d(0,0,0) scale(.5);transform:translate3d(0,0,0) scale(.5)}.lg-css3.lg-lollipop-rev .lg-item.lg-next-slide{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.lg-css3.lg-lollipop-rev .lg-item.lg-current{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}.lg-css3.lg-lollipop-rev .lg-item.lg-current,.lg-css3.lg-lollipop-rev .lg-item.lg-next-slide,.lg-css3.lg-lollipop-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-rotate .lg-item{opacity:0}.lg-css3.lg-rotate .lg-item.lg-prev-slide{-ms-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}.lg-css3.lg-rotate .lg-item.lg-next-slide{-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}.lg-css3.lg-rotate .lg-item.lg-current{-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0);opacity:1}.lg-css3.lg-rotate .lg-item.lg-current,.lg-css3.lg-rotate .lg-item.lg-next-slide,.lg-css3.lg-rotate .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-rotate-rev .lg-item{opacity:0}.lg-css3.lg-rotate-rev .lg-item.lg-prev-slide{-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}.lg-css3.lg-rotate-rev .lg-item.lg-next-slide{-ms-transform:rotate(-360deg);-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}.lg-css3.lg-rotate-rev .lg-item.lg-current{-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0);opacity:1}.lg-css3.lg-rotate-rev .lg-item.lg-current,.lg-css3.lg-rotate-rev .lg-item.lg-next-slide,.lg-css3.lg-rotate-rev .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.lg-css3.lg-tube .lg-item{opacity:0}.lg-css3.lg-tube .lg-item.lg-prev-slide{-ms-transform:scale3d(1,0,1) translate3d(-100%,0,0);-webkit-transform:scale3d(1,0,1) translate3d(-100%,0,0);transform:scale3d(1,0,1) translate3d(-100%,0,0)}.lg-css3.lg-tube .lg-item.lg-next-slide{-ms-transform:scale3d(1,0,1) translate3d(100%,0,0);-webkit-transform:scale3d(1,0,1) translate3d(100%,0,0);transform:scale3d(1,0,1) translate3d(100%,0,0)}.lg-css3.lg-tube .lg-item.lg-current{-ms-transform:scale3d(1,1,1) translate3d(0,0,0);-webkit-transform:scale3d(1,1,1) translate3d(0,0,0);transform:scale3d(1,1,1) translate3d(0,0,0);opacity:1}.lg-css3.lg-tube .lg-item.lg-current,.lg-css3.lg-tube .lg-item.lg-next-slide,.lg-css3.lg-tube .lg-item.lg-prev-slide{-webkit-transition:-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-o-transition:-o-transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;-webkit-transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;transition:opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s;-o-transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s;transition:transform 1s cubic-bezier(0,0,.25,1) 0s,opacity .1s ease 0s,-webkit-transform 1s cubic-bezier(0,0,.25,1) 0s}.progressjs-inner{width:0}.progressjs-progress{z-index:9999999}.progressjs-theme-blue .progressjs-inner{height:2px;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db}.progressjs-theme-blue.progressjs-end{-webkit-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;transition:opacity .2s ease-out;opacity:0}.progressjs-theme-blue .progressjs-percent{display:none}.progressjs-theme-blueOverlay{background-color:#fff;-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.progressjs-theme-blueOverlay .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db}.progressjs-theme-blueOverlay.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlay .progressjs-percent{display:none}.progressjs-theme-blueOverlay{background-color:#fff;-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.progressjs-theme-blueOverlay .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db}.progressjs-theme-blueOverlay.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlay .progressjs-percent{display:none}.progressjs-theme-blueOverlayRadius{background-color:#fff;-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;border-radius:5px}.progressjs-theme-blueOverlayRadius .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db;border-radius:5px}.progressjs-theme-blueOverlayRadius.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlayRadius .progressjs-percent{display:none}.progressjs-theme-blueOverlayRadiusHalfOpacity{background-color:#fff;opacity:.5;-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;border-radius:5px}.progressjs-theme-blueOverlayRadiusHalfOpacity .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db;border-radius:5px}.progressjs-theme-blueOverlayRadiusHalfOpacity.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlayRadiusHalfOpacity .progressjs-percent{display:none}.progressjs-theme-blueOverlayRadiusWithPercentBar{background-color:#fff;-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;border-radius:5px}.progressjs-theme-blueOverlayRadiusWithPercentBar .progressjs-inner{height:100%;-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;background-color:#3498db;border-radius:5px}.progressjs-theme-blueOverlayRadiusWithPercentBar.progressjs-end{opacity:0!important}.progressjs-theme-blueOverlayRadiusWithPercentBar .progressjs-percent{width:70px;text-align:center;height:40px;position:absolute;right:50%;margin-right:-35px;top:50%;margin-top:-20px;font-size:30px;opacity:.5}.progressjs-theme-blackRadiusInputs{height:10px;border-radius:10px;overflow:hidden}.progressjs-theme-blackRadiusInputs .progressjs-inner{height:2px;-webkit-transition:all 1s ease-out;-o-transition:all 1s ease-out;transition:all 1s ease-out;background-color:#34495e}.progressjs-theme-blackRadiusInputs.progressjs-end{-webkit-transition:opacity .2s ease-out;-o-transition:opacity .2s ease-out;transition:opacity .2s ease-out;opacity:0}.progressjs-theme-blackRadiusInputs .progressjs-percent{display:none}.progressjs-theme-rainloop{z-index:2000}.progressjs-theme-rainloop .progressjs-inner{background-color:#939595;position:relative;z-index:2000;height:3px;overflow:hidden;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}.progressjs-theme-rainloop .progressjs-percent{position:absolute;top:0;left:0;right:-32px;bottom:0;background-image:-o-linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.3) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.3) 75%,transparent 75%,transparent);background-size:32px 32px;-webkit-animation:simple-pace-stripe-animation .5s linear infinite;animation:simple-pace-stripe-animation .5s linear infinite}@-webkit-keyframes simple-pace-stripe-animation{0%{-webkit-transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0)}}@keyframes simple-pace-stripe-animation{0%{-webkit-transform:none;transform:none;transform:none}100%{-webkit-transform:translate(-32px,0);transform:translate(-32px,0);transform:translate(-32px,0)}}.clearfix:after,.clearfix:before{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.img-rounded{border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.1)}.img-circle{border-radius:500px}.row{margin-left:-20px}.row:after,.row:before{display:table;content:"";line-height:0}.row:after{clear:both}[class*=span]{float:left;margin-left:20px}.container,.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%}.row-fluid:after,.row-fluid:before{display:table;content:"";line-height:0}.row-fluid:after{clear:both}.row-fluid [class*=span]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:2.12765957%}.row-fluid [class*=span]:first-child{margin-left:0}.row-fluid .span12{width:100%}.row-fluid .span11{width:91.4893617%}.row-fluid .span10{width:82.9787234%}.row-fluid .span9{width:74.46808511%}.row-fluid .span8{width:65.95744681%}.row-fluid .span7{width:57.44680851%}.row-fluid .span6{width:48.93617021%}.row-fluid .span5{width:40.42553191%}.row-fluid .span4{width:31.91489362%}.row-fluid .span3{width:23.40425532%}.row-fluid .span2{width:14.89361702%}.row-fluid .span1{width:6.38297872%}.row-fluid .offset12{margin-left:104.25531915%}.row-fluid .offset12:first-child{margin-left:102.12765957%}.row-fluid .offset11{margin-left:95.74468085%}.row-fluid .offset11:first-child{margin-left:93.61702128%}.row-fluid .offset10{margin-left:87.23404255%}.row-fluid .offset10:first-child{margin-left:85.10638298%}.row-fluid .offset9{margin-left:78.72340426%}.row-fluid .offset9:first-child{margin-left:76.59574468%}.row-fluid .offset8{margin-left:70.21276596%}.row-fluid .offset8:first-child{margin-left:68.08510638%}.row-fluid .offset7{margin-left:61.70212766%}.row-fluid .offset7:first-child{margin-left:59.57446809%}.row-fluid .offset6{margin-left:53.19148936%}.row-fluid .offset6:first-child{margin-left:51.06382979%}.row-fluid .offset5{margin-left:44.68085106%}.row-fluid .offset5:first-child{margin-left:42.55319149%}.row-fluid .offset4{margin-left:36.17021277%}.row-fluid .offset4:first-child{margin-left:34.04255319%}.row-fluid .offset3{margin-left:27.65957447%}.row-fluid .offset3:first-child{margin-left:25.53191489%}.row-fluid .offset2{margin-left:19.14893617%}.row-fluid .offset2:first-child{margin-left:17.0212766%}.row-fluid .offset1{margin-left:10.63829787%}.row-fluid .offset1:first-child{margin-left:8.5106383%}.row-fluid [class*=span].hide,[class*=span].hide{display:none}.row-fluid [class*=span].pull-right,[class*=span].pull-right{float:right}.container{margin-right:auto;margin-left:auto}.container:after,.container:before{display:table;content:"";line-height:0}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px}.container-fluid:after,.container-fluid:before{display:table;content:"";line-height:0}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:20px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:700}em{font-style:italic}cite{font-style:normal}.muted{color:#999}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:700;line-height:1;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:400;line-height:1;color:#999}h1{font-size:36px;line-height:40px}h2{font-size:30px;line-height:40px}h3{font-size:24px;line-height:40px}h4{font-size:18px;line-height:20px}h5{font-size:14px;line-height:20px}h6{font-size:12px;line-height:20px}h1 small{font-size:24px}h2 small{font-size:18px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ol,ul{padding:0;margin:0 0 10px 25px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}li{line-height:20px}ol.unstyled,ul.unstyled{margin-left:0;list-style:none}dl{margin-bottom:20px}dd,dt{line-height:20px}dt{font-weight:700}dd{margin-left:10px}.dl-horizontal dt{float:left;width:120px;clear:left;text-align:right;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:25px}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}blockquote:after,blockquote:before,q:after,q:before{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;border-radius:3px}code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}button,input,label,select,textarea{font-size:14px;font-weight:400;line-height:20px}button,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}.uneditable-input,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{display:inline-block;height:20px;padding:4px 6px;margin-bottom:9px;font-size:14px;line-height:20px;color:#555;border-radius:3px}input,textarea{width:210px}textarea{height:auto}.uneditable-input,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],textarea{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;-webkit-transition:border linear .2s,-webkit-box-shadow linear .2s;transition:border linear .2s,-webkit-box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s,-webkit-box-shadow linear .2s}.uneditable-input:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,textarea:focus{border-color:rgba(82,168,236,.8);outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}input[type=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal;cursor:pointer}input[type=button],input[type=checkbox],input[type=file],input[type=image],input[type=radio],input[type=reset],input[type=submit]{width:auto}input[type=file],select{height:30px;line-height:30px}select{width:220px;border:1px solid #bbb;background-color:#fff}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.025);box-shadow:inset 0 1px 2px rgba(0,0,0,.025);cursor:not-allowed}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.checkbox,.radio{min-height:18px;padding-left:18px}.checkbox input[type=checkbox],.radio input[type=radio]{float:left;margin-left:-18px}.controls>.checkbox:first-child,.controls>.radio:first-child{padding-top:5px}.checkbox.inline,.radio.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.checkbox.inline+.checkbox.inline,.radio.inline+.radio.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}.row-fluid .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span],.uneditable-input[class*=span],input[class*=span],select[class*=span],textarea[class*=span]{float:none;margin-left:0}.input-append .uneditable-input[class*=span],.input-append input[class*=span],.input-prepend .uneditable-input[class*=span],.input-prepend input[class*=span],.row-fluid .input-append [class*=span],.row-fluid .input-prepend [class*=span],.row-fluid .uneditable-input[class*=span],.row-fluid input[class*=span],.row-fluid select[class*=span],.row-fluid textarea[class*=span]{display:inline-block}.uneditable-input,input,textarea{margin-left:0}.controls-row [class*=span]+[class*=span]{margin-left:20px}.uneditable-input.span12,input.span12,textarea.span12{width:926px}.uneditable-input.span11,input.span11,textarea.span11{width:846px}.uneditable-input.span10,input.span10,textarea.span10{width:766px}.uneditable-input.span9,input.span9,textarea.span9{width:686px}.uneditable-input.span8,input.span8,textarea.span8{width:606px}.uneditable-input.span7,input.span7,textarea.span7{width:526px}.uneditable-input.span6,input.span6,textarea.span6{width:446px}.uneditable-input.span5,input.span5,textarea.span5{width:366px}.uneditable-input.span4,input.span4,textarea.span4{width:286px}.uneditable-input.span3,input.span3,textarea.span3{width:206px}.uneditable-input.span2,input.span2,textarea.span2{width:126px}.uneditable-input.span1,input.span1,textarea.span1{width:46px}.controls-row:after,.controls-row:before{display:table;content:"";line-height:0}.controls-row:after{clear:both}.controls-row [class*=span]{float:left}input[disabled],input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type=checkbox][disabled],input[type=checkbox][readonly],input[type=radio][disabled],input[type=radio][readonly]{background-color:transparent}.control-group.warning .help-block,.control-group.warning .help-inline,.control-group.warning>label{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.warning .checkbox:focus,.control-group.warning .radio:focus,.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #dbc59e}.control-group.warning .input-append .add-on,.control-group.warning .input-prepend .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .help-block,.control-group.error .help-inline,.control-group.error>label{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.error .checkbox:focus,.control-group.error .radio:focus,.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #d59392}.control-group.error .input-append .add-on,.control-group.error .input-prepend .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .help-block,.control-group.success .help-inline,.control-group.success>label{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.control-group.success .checkbox:focus,.control-group.success .radio:focus,.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #7aba7b}.control-group.success .input-append .add-on,.control-group.success .input-prepend .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}input:focus:required:invalid,select:focus:required:invalid,textarea:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,select:focus:required:invalid:focus,textarea:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5}.form-actions:after,.form-actions:before{display:table;content:"";line-height:0}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;vertical-align:middle;padding-left:5px}.input-append,.input-prepend{margin-bottom:5px;font-size:0;white-space:nowrap}.input-append .uneditable-input,.input-append input,.input-append select,.input-prepend .uneditable-input,.input-prepend input,.input-prepend select{position:relative;margin-bottom:0;font-size:14px;vertical-align:top;border-radius:0 3px 3px 0}.input-append .uneditable-input:focus,.input-append input:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-prepend input:focus,.input-prepend select:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:400;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-append .btn,.input-prepend .add-on,.input-prepend .btn{margin-left:-1px;vertical-align:top;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{border-radius:3px 0 0 3px}.input-append .uneditable-input,.input-append input,.input-append select{border-radius:3px 0 0 3px}.input-append .add-on:last-child,.input-append .btn:last-child{border-radius:0 3px 3px 0}.input-prepend.input-append .uneditable-input,.input-prepend.input-append input,.input-prepend.input-append select{border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;border-radius:0 3px 3px 0}input.search-query{padding-right:14px;padding-left:14px;margin-bottom:0;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{border-radius:0}.form-search .input-append .search-query{border-radius:14px 0 0 14px}.form-search .input-append .btn{border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{border-radius:0 14px 14px 0}.form-search .input-prepend .btn{border-radius:14px 0 0 14px}.form-horizontal .help-inline,.form-horizontal .input-append,.form-horizontal .input-prepend,.form-horizontal .uneditable-input,.form-horizontal input,.form-horizontal select,.form-horizontal textarea,.form-inline .help-inline,.form-inline .input-append,.form-inline .input-prepend,.form-inline .uneditable-input,.form-inline input,.form-inline select,.form-inline textarea,.form-search .help-inline,.form-search .input-append,.form-search .input-prepend,.form-search .uneditable-input,.form-search input,.form-search select,.form-search textarea{display:inline-block;margin-bottom:0;vertical-align:middle}.form-horizontal .hide,.form-inline .hide,.form-search .hide{display:none}.form-inline .btn-group,.form-inline label,.form-search .btn-group,.form-search label{display:inline-block}.form-inline .input-append,.form-inline .input-prepend,.form-search .input-append,.form-search .input-prepend{margin-bottom:0}.form-inline .checkbox,.form-inline .radio,.form-search .checkbox,.form-search .radio{padding-left:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio],.form-search .checkbox input[type=checkbox],.form-search .radio input[type=radio]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px}.form-horizontal .control-group:after,.form-horizontal .control-group:before{display:table;content:"";line-height:0}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{margin-left:160px}.form-horizontal .help-block{margin-top:10px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}.table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table td,.table th{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:700}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child td,.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child td,.table thead:first-child tr:first-child th{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table-condensed td,.table-condensed th{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;border-left:0;border-radius:4px}.table-bordered td,.table-bordered th{border-left:1px solid #ddd}.table-bordered caption+tbody tr:first-child td,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+thead tr:first-child th,.table-bordered tbody:first-child tr:first-child td,.table-bordered tbody:first-child tr:first-child th,.table-bordered thead:first-child tr:first-child th{border-top:0}.table-bordered tbody:first-child tr:first-child td:first-child,.table-bordered thead:first-child tr:first-child th:first-child{border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered tbody:first-child tr:first-child td:last-child,.table-bordered thead:first-child tr:first-child th:last-child{border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child,.table-bordered thead:last-child tr:last-child th:first-child{border-radius:0 0 0 4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered tbody:last-child tr:last-child td:last-child,.table-bordered tfoot:last-child tr:last-child td:last-child,.table-bordered thead:last-child tr:last-child th:last-child{border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered caption+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child{border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered caption+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child{border-top-right-radius:4px;-moz-border-right-topleft:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table-hover tbody tr:hover td,.table-hover tbody tr:hover th{background-color:#f5f5f5}.row-fluid table [class*=span],table [class*=span]{display:table-cell;float:none;margin-left:0}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}.table tbody tr.success td{background-color:#dff0d8}.table tbody tr.error td{background-color:#f2dede}.table tbody tr.info td{background-color:#d9edf7}.dropdown,.dropup{position:relative}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu li>a:focus,.dropdown-menu li>a:hover,.dropdown-submenu:hover>a{text-decoration:none;color:#fff;background-color:#08c;background-color:#0081c2;background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,left top,left bottom,from(#08c),to(#0077b3));background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#08c;background-color:#0081c2;background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,left top,left bottom,from(#08c),to(#0077b3));background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x}.dropdown-menu .disabled>a,.dropdown-menu .disabled>a:hover{color:#999}.dropdown-menu .disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover .dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#ccc;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown .dropdown-menu .nav-header{padding-left:20px;padding-right:20px}.typeahead{margin-top:2px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-large{padding:24px;border-radius:6px}.well-small{padding:9px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:700;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.btn{display:inline-block;padding:4px 14px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,.75);background-color:#f5f5f5;background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e6e6e6));background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border:1px solid #bbb;border-bottom-color:#a2a2a2;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn.active,.btn.disabled,.btn:active,.btn:hover,.btn[disabled]{color:#333;background-color:#e6e6e6}.btn:hover{color:#333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-color:#e6e6e6;background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-color:#e6e6e6;background-image:none;opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:16px;line-height:normal;border-radius:5px}.btn-large [class^=icon-]{margin-top:2px}.btn-small{padding:3px 9px;font-size:12px;line-height:18px}.btn-small [class^=icon-]{margin-top:0}.btn-mini{padding:2px 6px;font-size:11px;line-height:16px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}.btn-danger.active,.btn-info.active,.btn-inverse.active,.btn-primary.active,.btn-success.active,.btn-warning.active{color:rgba(255,255,255,.75)}.btn{border-color:#c5c5c5;border-color:rgba(0,0,0,.15) rgba(0,0,0,.15) rgba(0,0,0,.25)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#006dcc;background-image:-o-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,left top,left bottom,from(#08c),to(#04c));background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-primary.active,.btn-primary.disabled,.btn-primary:active,.btn-primary:hover,.btn-primary[disabled]{color:#fff;background-color:#04c}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#faa732;background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,left top,left bottom,from(#fbb450),to(#f89406));background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-warning.active,.btn-warning.disabled,.btn-warning:active,.btn-warning:hover,.btn-warning[disabled]{color:#fff;background-color:#f89406}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#da4f49;background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,left top,left bottom,from(#ee5f5b),to(#bd362f));background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-danger.active,.btn-danger.disabled,.btn-danger:active,.btn-danger:hover,.btn-danger[disabled]{color:#fff;background-color:#bd362f}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#5bb75b;background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,left top,left bottom,from(#62c462),to(#51a351));background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-success.active,.btn-success.disabled,.btn-success:active,.btn-success:hover,.btn-success[disabled]{color:#fff;background-color:#51a351}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#49afcd;background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2f96b4));background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-info.active,.btn-info.disabled,.btn-info:active,.btn-info:hover,.btn-info[disabled]{color:#fff;background-color:#2f96b4}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#363636;background-image:-o-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,left top,left bottom,from(#444),to(#222));background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.btn-inverse.active,.btn-inverse.disabled,.btn-inverse:active,.btn-inverse:hover,.btn-inverse[disabled]{color:#fff;background-color:#222}button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0}.btn-link,.btn-link:active{background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;border-radius:0}.btn-link:hover{color:#005580;text-decoration:underline;background-color:transparent}.btn-group{position:relative;font-size:0;white-space:nowrap}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{font-size:0;margin-top:10px;margin-bottom:10px}.btn-toolbar .btn-group{display:inline-block}.btn-toolbar .btn+.btn,.btn-toolbar .btn+.btn-group,.btn-toolbar .btn-group+.btn{margin-left:5px}.btn-group>.btn{position:relative;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu{font-size:14px}.btn-group>.btn-mini{font-size:11px}.btn-group>.btn-small{font-size:12px}.btn-group>.btn-large{font-size:16px}.btn-group>.btn:first-child{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{border-top-right-radius:4px;border-bottom-right-radius:4px}.btn-group>.btn.large:first-child{margin-left:0;border-top-left-radius:6px;border-bottom-left-radius:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{border-top-right-radius:6px;border-bottom-right-radius:6px}.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 1px 0 0 rgba(255,255,255,.125),inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn-group>.btn-mini+.dropdown-toggle{padding-left:5px;padding-right:5px}.btn-group>.btn-large+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret,.btn-mini .caret,.btn-small .caret{margin-top:6px}.btn-large .caret{border-left-width:5px;border-right-width:5px;border-top-width:5px}.dropup .btn-large .caret{border-bottom:5px solid #000;border-top:0}.btn-danger .caret,.btn-info .caret,.btn-inverse .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block}.btn-group-vertical .btn{display:block;float:none;width:100%;border-radius:0}.btn-group-vertical .btn+.btn{margin-left:0;margin-top:-1px}.btn-group-vertical .btn:first-child{border-radius:4px 4px 0 0}.btn-group-vertical .btn:last-child{border-radius:0 0 4px 4px}.btn-group-vertical .btn-large:first-child{border-radius:6px 6px 0 0}.btn-group-vertical .btn-large:last-child{border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,.5);background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px;color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847}.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-left:0;margin-bottom:20px;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:700;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0}.nav-list .nav-header,.nav-list>li>a{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255,255,255,.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.2);background-color:#08c}.nav-list [class^=icon-]{margin-right:2px}.nav-list .divider{height:1px;margin:9px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-pills:after,.nav-pills:before,.nav-tabs:after,.nav-tabs:before{display:table;content:"";line-height:0}.nav-pills:after,.nav-tabs:after{clear:both}.nav-pills>li,.nav-tabs>li{float:left}.nav-pills>li>a,.nav-tabs>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{border-top-right-radius:4px;border-top-left-radius:4px}.nav-tabs.nav-stacked>li:last-child>a{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{border-radius:6px}.nav .dropdown-toggle .caret{border-top-color:#08c;border-bottom-color:#08c;margin-top:6px}.nav .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover{cursor:pointer}.nav-pills .open .dropdown-toggle,.nav-tabs .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open.active .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1}.tabs-stacked .open>a:hover{border-color:#999}.tabbable:after,.tabbable:before{display:table;content:"";line-height:0}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{border-bottom:0}.pill-content>.pill-pane,.tab-content>.tab-pane{display:none}.pill-content>.active,.tab-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover{text-decoration:none;background-color:transparent;cursor:default}.navbar{overflow:visible;margin-bottom:20px;color:#555}.navbar-inner{min-height:40px;padding-left:20px;padding-right:20px;background-color:#fafafa;background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f2f2f2));background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;border-radius:4px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar .brand{float:left;display:block;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#555;text-shadow:0 1px 0 #fff}.navbar .brand:hover{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px}.navbar-link{color:#555}.navbar-link:hover{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-left:1px solid #f2f2f2;border-right:1px solid #fff}.navbar .btn,.navbar .btn-group{margin-top:6px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0}.navbar-form:after,.navbar-form:before{display:table;content:"";line-height:0}.navbar-form:after{clear:both}.navbar-form .checkbox,.navbar-form .radio,.navbar-form input,.navbar-form select{margin-top:5px}.navbar-form .btn,.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0}.navbar-form input[type=checkbox],.navbar-form input[type=image],.navbar-form input[type=radio]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{margin-bottom:0;padding:4px 14px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;line-height:1;border-radius:15px}.navbar-static-top{position:static;width:100%;margin-bottom:0}.navbar-static-top .navbar-inner{border-radius:0}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border:0}.navbar-fixed-bottom .navbar-inner,.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;border-radius:0}.navbar-fixed-bottom .container,.navbar-fixed-top .container,.navbar-static-top .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.1),0 1px 10px rgba(0,0,0,.1);box-shadow:inset 0 -1px 0 rgba(0,0,0,.1),0 1px 10px rgba(0,0,0,.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1),0 -1px 10px rgba(0,0,0,.1);box-shadow:inset 0 1px 0 rgba(0,0,0,.1),0 -1px 10px rgba(0,0,0,.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#555;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{background-color:transparent;color:#333;text-decoration:none}.navbar .nav>.active>a,.navbar .nav>.active>a:focus,.navbar .nav>.active>a:hover{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,.125);box-shadow:inset 0 3px 8px rgba(0,0,0,.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#ededed;background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#e5e5e5));background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.075)}.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar:active,.navbar .btn-navbar:hover,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.25);box-shadow:0 1px 0 rgba(0,0,0,.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:9px}.navbar .nav>li>.dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:10px}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);border-bottom:0;bottom:-7px;top:auto}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{border-top:6px solid #fff;border-bottom:0;bottom:-6px;top:auto}.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle,.navbar .nav li.dropdown.open>.dropdown-toggle{background-color:#e5e5e5;color:#555}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav>li>.dropdown-menu.pull-right,.navbar .pull-right>li>.dropdown-menu{left:auto;right:0}.navbar .nav>li>.dropdown-menu.pull-right:before,.navbar .pull-right>li>.dropdown-menu:before{left:auto;right:12px}.navbar .nav>li>.dropdown-menu.pull-right:after,.navbar .pull-right>li>.dropdown-menu:after{left:auto;right:13px}.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu,.navbar .pull-right>li>.dropdown-menu .dropdown-menu{left:auto;right:100%;margin-left:0;margin-right:-1px;border-radius:6px 0 6px 6px}.navbar-inverse{color:#999}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-o-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,left top,left bottom,from(#222),to(#111));background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{background-color:transparent;color:#fff}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:focus,.navbar-inverse .nav .active>a:hover{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .divider-vertical{border-left-color:#111;border-right-color:#222}.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open>.dropdown-toggle{background-color:#111;color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.1),0 1px 0 rgba(255,255,255,.15);-webkit-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query.focused,.navbar-inverse .navbar-search .search-query:focus{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15);outline:0}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e0e0e;background-image:-o-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,left top,left bottom,from(#151515),to(#040404));background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25)}.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb li{display:inline-block;text-shadow:0 1px 0 #fff}.breadcrumb .divider{padding:0 5px;color:#ccc}.breadcrumb .active{color:#999}.modal-open .dropdown-menu{z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2080}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8}.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.3);border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.3);box-shadow:0 3px 7px rgba(0,0,0,.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{-webkit-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out;top:-25%}.modal.fade.in{top:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{overflow-y:auto;max-height:400px;padding:15px}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:after,.modal-footer:before{display:table;content:"";line-height:0}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0}.tooltip.in{opacity:.8}.tooltip.top{margin-top:-3px}.tooltip.right{margin-left:3px}.tooltip.bottom{margin-top:3px}.tooltip.left{margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#eee;text-align:center;text-decoration:none;background-color:#333;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#333}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#333}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#333}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#333}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;width:236px;padding:1px;background-color:#fff;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-bottom:10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-right:10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover-content ol,.popover-content p,.popover-content ul{margin-bottom:0}.popover .arrow,.popover .arrow:after{position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow:after{content:"";z-index:-1}.popover.top .arrow{bottom:-10px;left:50%;margin-left:-10px;border-width:10px 10px 0;border-top-color:#fff}.popover.top .arrow:after{border-width:11px 11px 0;border-top-color:rgba(0,0,0,.25);bottom:-1px;left:-11px}.popover.right .arrow{top:50%;left:-10px;margin-top:-10px;border-width:10px 10px 10px 0;border-right-color:#fff}.popover.right .arrow:after{border-width:11px 11px 11px 0;border-right-color:rgba(0,0,0,.25);bottom:-11px;left:-1px}.popover.bottom .arrow{top:-10px;left:50%;margin-left:-10px;border-width:0 10px 10px;border-bottom-color:#fff}.popover.bottom .arrow:after{border-width:0 11px 11px;border-bottom-color:rgba(0,0,0,.25);top:-1px;left:-11px}.popover.left .arrow{top:50%;right:-10px;margin-top:-10px;border-width:10px 0 10px 10px;border-left-color:#fff}.popover.left .arrow:after{border-width:11px 0 11px 11px;border-left-color:rgba(0,0,0,.25);bottom:-11px;right:-1px}.badge,.label{font-size:11.844px;font-weight:700;line-height:14px;color:#fff;vertical-align:baseline;white-space:nowrap;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#999}.label{padding:1px 4px 2px;border-radius:3px}.badge{padding:1px 9px 2px;border-radius:9px}a.badge:hover,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.badge-important,.label-important{background-color:#b94a48}.badge-important[href],.label-important[href]{background-color:#953b39}.badge-warning,.label-warning{background-color:#f89406}.badge-warning[href],.label-warning[href]{background-color:#c67605}.badge-success,.label-success{background-color:#468847}.badge-success[href],.label-success[href]{background-color:#356635}.badge-info,.label-info{background-color:#3a87ad}.badge-info[href],.label-info[href]{background-color:#2d6987}.badge-inverse,.label-inverse{background-color:#333}.badge-inverse[href],.label-inverse[href]{background-color:#1a1a1a}.btn .badge,.btn .label{position:relative;top:-1px}.btn-mini .badge,.btn-mini .label{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f7f7f7;background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f9f9f9));background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1);border-radius:4px}.progress .bar{width:0%;height:100%;color:#fff;float:left;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-color:#0e90d2;background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,left top,left bottom,from(#149bdf),to(#0480be));background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 1px 0 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.15)}.progress-striped .bar{background-color:#149bdf;background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress .bar-danger,.progress-danger .bar{background-color:#dd514c;background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,left top,left bottom,from(#ee5f5b),to(#c43c35));background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress .bar-success,.progress-success .bar{background-color:#5eb95e;background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,left top,left bottom,from(#62c462),to(#57a957));background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x}.progress-striped .bar-success,.progress-success.progress-striped .bar{background-color:#62c462;background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress .bar-info,.progress-info .bar{background-color:#4bb1cf;background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#339bb9));background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress .bar-warning,.progress-warning .bar{background-color:#faa732;background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,left top,left bottom,from(#fbb450),to(#f89406));background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x}.progress-striped .bar-warning,.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}[class*=" icon-"],[class^=icon-]{display:inline-block;width:16px;height:16px;line-height:17px;font-size:16px;vertical-align:text-top}.btn[disabled] [class*=" icon-"],.btn[disabled] [class^=icon-],.disabled [class*=" icon-"],.disabled [class^=icon-]{color:grey}.btn[disabled] [class*=" icon-"].icon-white,.btn[disabled] [class^=icon-].icon-white,.disabled [class*=" icon-"].icon-white,.disabled [class^=icon-].icon-white{color:#fff}.icon-folder,.icon-folder-add,.icon-list{line-height:18px;font-size:18px;margin-top:-1px;margin-left:-1px;width:17px}.iconsize50{line-height:50px;font-size:50px;width:50px;height:50px}.iconsize24{line-height:24px;font-size:24px}.iconsize20{line-height:20px;font-size:20px}.icon-white,.nav>.active>a>[class*=" icon-"],.nav>.active>a>[class^=icon-]{color:#fff}.g-ui-menu .e-item:hover [class*=" icon-"],.g-ui-menu .e-item:hover [class^=icon-]{color:#fff}.icon-none{background-image:none!important}.icon-checkbox-checked,.icon-checkbox-partial,.icon-checkbox-unchecked,.icon-radio-checked,.icon-radio-unchecked{cursor:pointer;color:#555;font-size:1em}.icon-checkbox-checked:active,.icon-checkbox-checked:hover,.icon-checkbox-partial:active,.icon-checkbox-partial:hover,.icon-checkbox-unchecked:active,.icon-checkbox-unchecked:hover,.icon-radio-checked:active,.icon-radio-checked:hover,.icon-radio-unchecked:active,.icon-radio-unchecked:hover{color:#000}.icon-white.icon-checkbox-checked,.icon-white.icon-checkbox-partial,.icon-white.icon-checkbox-unchecked,.icon-white.icon-radio-checked,.icon-white.icon-radio-unchecked{color:#eee}.icon-white.icon-checkbox-checked:active,.icon-white.icon-checkbox-checked:hover,.icon-white.icon-checkbox-partial:active,.icon-white.icon-checkbox-partial:hover,.icon-white.icon-checkbox-unchecked:active,.icon-white.icon-checkbox-unchecked:hover,.icon-white.icon-radio-checked:active,.icon-white.icon-radio-checked:hover,.icon-white.icon-radio-unchecked:active,.icon-white.icon-radio-unchecked:hover{color:#fff}.iconcolor-display-none{display:none}.iconcolor-green{color:green}.iconcolor-red{color:red}.iconcolor-white{color:#fff}.iconcolor-grey{color:#aaa}.denied-by-browser{cursor:default}.denied-by-browser .icon-checkbox-checked,.denied-by-browser icon-checkbox-unchecked{cursor:default}.down-mini,.right-mini{width:16px;line-height:20px}@-webkit-keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.icon-spinner{font-family:Arial;height:11px;width:11px;margin-right:-1px;background:0 0;border:3px solid #aaa;border-top-color:#333;border-radius:100%;-webkit-animation:none;animation:none}.icon-spinner:before{content:""}.icon-spinner.animated{border-color:transparent;border-top-color:#999;-webkit-animation:rotation .8s infinite ease-in-out;animation:rotation .8s infinite ease-in-out}.icon-spinner.big{height:13px;width:13px;margin-top:-2px;margin-left:-2px}.icon-spinner.icon-white,.icon-spinner.white{border-color:#fff;border-top-color:#999}.icon-spinner.icon-white.animated,.icon-spinner.white.animated{border-color:transparent;border-top-color:#fff}html.no-cssanimations .icon-spinner{background:0 0;background-image:url(images/sync.png);background-repeat:no-repeat;border:none;-webkit-box-shadow:none;box-shadow:none;height:16px;width:16px;font-family:Arial}html.no-cssanimations .icon-spinner:before{content:""}html.no-cssanimations .icon-spinner.animated{background:0 0;background-image:url(images/sync.gif)}body{background-color:transparent}label{cursor:pointer}label.inline,span.inline{display:inline-block}.close-custom{float:right;font-size:20px;font-weight:700;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close-custom:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.close-custom{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.minimize-custom{border:0 solid #333;border-bottom-width:3px;display:inline-block;float:right;height:20px;width:16px;font-size:20px;font-weight:700;line-height:20px;margin-right:15px;cursor:pointer}.legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}.legend small{font-size:15px;color:#999}.legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.input-append .uneditable-input,.input-append input,.input-append select{border-radius:3px}select{width:223px}.btn .svg-icon{vertical-align:middle}.btn-small.btn-small-small{padding:3px 9px;font-size:11px;line-height:11px}.btn.btn-thin{padding:4px 9px}.btn.btn-thin-2{padding:4px 7px}.btn.btn-nowrap{white-space:nowrap}.btn.btn-ellipsis{-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.btn.btn-transparent{background:0 0!important;border-color:transparent!important;text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;opacity:.6}.btn.btn-transparent [class^=icon-]{width:19px;height:19px;line-height:20px;font-size:19px}.btn.btn-transparent:hover{opacity:1}.btn-group.open .btn.btn-transparent.dropdown-toggle{color:#bd362f}.btn-group.open .btn.btn-transparent.dropdown-toggle .caret{border-top-color:#bd362f}.btn-group.open .btn.btn-transparent.dropdown-toggle [class^=icon-]:before{color:#bd362f}.btn.btn-narrow{padding-left:12px;padding-right:12px}.btn-group.btn-group-custom-margin>.btn+.btn{margin-left:0}.btn.btn-large{font-size:17px}.dropdown-menu{border-radius:3px}.btn-group+.btn-group{margin-left:3px}.btn{border-radius:3px;background-image:none;padding-left:13px;padding-right:13px;border-color:rgba(0,0,0,.25) rgba(0,0,0,.25) rgba(0,0,0,.25)}.btn.disabled,.btn[disabled]{opacity:.8;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}html.textshadow .btn{text-shadow:0 1px 0 #fff}html.textshadow .btn.btn-danger,html.textshadow .btn.btn-primary,html.textshadow .btn.btn-success,html.textshadow .btn.btn-warning{text-shadow:0 1px 0 rgba(0,0,0,.3)}.btn.btn-dark-disabled-border.disabled,.btn.btn-dark-disabled-border[disabled]{border-color:#aaa}.btn.btn-success{background-color:#84ab04}.btn-toolbar{margin-top:0;margin-bottom:0}.dropdown-menu{border-radius:0;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 2px rgba(0,0,0,.2)}.tooltip{font-size:14px;z-index:2000!important;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.tooltip.in{opacity:1}.tooltip .tooltip-inner{max-width:380px;text-shadow:0 0 5px rgba(0,0,0,.2);padding:5px 10px;border-radius:2px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.tooltip .tooltip-big{font-size:18px;padding:0 10px;white-space:nowrap}.popover{width:auto;min-width:250px;max-width:550px}.popover .popover-content pre{border:none;background:rgba(0,0,0,0);padding:0;word-break:normal}.btn-group>.btn{border-radius:0!important}.btn-group>.btn.single{border-radius:3px!important}.btn-group>.btn.first{border-top-left-radius:3px!important;border-bottom-left-radius:3px!important}.btn-group>.btn.last{border-top-right-radius:3px!important;border-bottom-right-radius:3px!important}.btn-group+.btn-group{margin-left:0}.btn-group{margin-right:3px}.btn-group.btn-group-last{margin-right:0}.dropdown.colored-toggle.open .btn.dropdown-toggle{color:#bd362f}.dropdown.colored-toggle.open .btn.dropdown-toggle .caret{border-top-color:#bd362f}.dropdown.colored-toggle.open .btn.dropdown-toggle [class^=icon-]:before{color:#bd362f}input[type=email],input[type=password],input[type=search],input[type=text],textarea{border:1px solid #ccc}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=text]:focus,textarea:focus{background-color:#fff;border:1px solid #999;-webkit-box-shadow:none;box-shadow:none}input[type=email],input[type=password],input[type=search],input[type=text]{height:20px;line-height:20px}select{border:1px solid #ccc}.alert a{text-decoration:underline}.alert.alert-null-left-margin{margin-left:0}.alert a{color:#c09853}.alert.alert-info a{color:#3a87ad}.alert.alert-error a{color:#b94a48}.nav-tabs>li>a{color:#555}.popover{z-index:2000}html.no-rgba .modal{border-width:0!important}.modal-backdrop,.modal-backdrop.fade.in{opacity:.2;-webkit-transform:none;-ms-transform:none;transform:none}.popups{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1100;overflow:auto}.popups .modal{position:static;z-index:1101;margin:5% auto;background-color:transparent;overflow:hidden;-webkit-box-shadow:0 5px 80px rgba(0,0,0,.3);box-shadow:0 5px 80px rgba(0,0,0,.3)}.popups .modal .modal-body{background-color:#fff;max-height:none}.modal.fade{-webkit-transition:none;-o-transition:none;transition:none;top:0}.modal.fade.in{top:0}.modal.loginAdminContent .modal-body,.modal.loginContent .modal-body{background-color:transparent!important}.picker.modal-dialog-bg,.picker.picker-dialog-bg{z-index:2000!important}.picker.modal-dialog,.picker.picker-dialog{z-index:2001!important}.form-horizontal.long-label .control-group .control-label{width:160px}.form-horizontal.long-label .control-group .controls{margin-left:180px}.control-label.remove-padding-top{padding-top:0}html.rl-mobile .popups .modal{width:100%!important;width:calc(100% - 20px)!important}html.rl-mobile .b-settings-content{padding:10px;padding-left:20px}html.rl-mobile .list-table{width:100%;max-width:100%}html.rl-mobile .form-horizontal .control-group .control-label{text-align:left;float:none}html.rl-mobile .form-horizontal .control-group .controls{margin-left:0}.close-input-wrp{display:inline-block;position:relative}.close-input-wrp input{padding-right:15px}.close-input-wrp .close{position:absolute;right:0;top:5px;margin:0 7px;z-index:100;vertical-align:middle;opacity:.4}.close-input-wrp .close:hover{opacity:.6}.inputosaurus-container{width:99%;line-height:20px;padding:2px;border:1px solid #ccc;border-radius:3px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;-webkit-transition:border linear .2s,-webkit-box-shadow linear .2s;transition:border linear .2s,-webkit-box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s,-webkit-box-shadow linear .2s}.inputosaurus-container.inputosaurus-focused{background-color:#fff;border:1px solid #999;-webkit-box-shadow:none;box-shadow:none}.inputosaurus-container li{max-width:500px;background-color:#eee;border:1px solid #aaa;line-height:18px;padding:2px 15px 2px 5px;margin:2px 2px 2px;color:#555;z-index:100;position:relative}.inputosaurus-container li.ui-draggable.ui-draggable-dragging{z-index:101}.inputosaurus-container li a{color:#999;font-size:12px;position:absolute;top:1px;right:2px}.inputosaurus-container li a:hover{color:#666}.inputosaurus-container li span{padding-right:3px}.inputosaurus-container li.inputosaurus-required{padding-right:5px}.inputosaurus-container li.inputosaurus-selected{background-color:#ddd}.inputosaurus-container li.pgp{background-color:#e5f3e2}.inputosaurus-container .inputosaurus-input{margin:1px 10px 1px 0;height:22px}.inputosaurus-container .inputosaurus-input input{border:0;height:21px;padding-left:0}.ui-autocomplete{z-index:2000}.inputosaurus-fake-span{position:absolute;top:0;left:-5000px}.cke_chrome{border:1px solid #ccc!important}.cke_toolgroup{padding-right:0!important;background:#fbfbfb!important}.cke_combo_button,.cke_toolgroup{border:1px solid #a6a6a6!important}.cke_top{padding:6px 4px 1px 6px!important;-webkit-box-shadow:none!important;box-shadow:none!important;border-bottom:1px solid #b6b6b6!important;background:#f0f0f0!important}.cke_combo_off a.cke_combo_button:active,.cke_combo_off a.cke_combo_button:focus,.cke_combo_off a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button{padding:1px!important;margin-left:0!important}.cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after,.cke_toolgroup a.cke_button:last-child:after{border:none!important;height:0!important;width:0!important;margin:0!important;padding:0!important}.cke_button_on{background:#ddd!important}.cke_combo{margin-top:1px!important}.cke_combo__fontsize{margin-left:3px!important}.cke_combo__fontsize .cke_combo_text{width:40px!important}.cke_combo_text{line-height:24px!important;padding-left:8px!important}.cke_combo_button{background:#fbfbfb!important}.cke_source{font-family:Monaco,Menlo,Consolas,'Courier New',monospace!important;padding:10px!important;padding-right:0!important;-webkit-box-shadow:none!important;box-shadow:none!important}.cke_plain{background-color:#fff;outline:0;overflow:auto;z-index:1;margin:0;border:0;padding:10px;padding-right:0;white-space:pre-wrap;font-family:Monaco,Menlo,Consolas,'Courier New',monospace;font-size:13px;line-height:16px;color:#333;resize:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_plain:focus,.cke_source:focus{border:0}.b-compose .cke_chrome{border-right:0;border-left:0;border-bottom:0;-webkit-box-shadow:none;box-shadow:none}.cke_wysiwyg_div{padding:10px!important;font-family:arial,sans-serif;font-size:13px;line-height:16px;color:#333}.cke_wysiwyg_div ul{padding-left:40px}.cke_wysiwyg_div ul li{list-style-type:disc!important}.cke_wysiwyg_div ol{padding-left:40px}.cke_wysiwyg_div ol li{list-style-type:decimal!important}.cke_wysiwyg_div code,.cke_wysiwyg_div pre{margin:0;padding:0;background:#fff;border:none;border-radius:0;font-family:Monaco,Menlo,Consolas,'Courier New',monospace;display:block;word-break:normal;word-wrap:break-word;background-color:#f9f9f9}.cke_wysiwyg_div code{display:inline;padding:2px 5px}.cke_wysiwyg_div pre{padding:5px 10px;border-radius:5px;background-color:#f9f9f9}.cke_wysiwyg_div pre>code{padding:0}.cke_wysiwyg_div blockquote{border:0;border-left:solid 2px #444;margin:5px 0 5px 5px;padding-left:5px}.cke_wysiwyg_div blockquote p{margin:0 0 10px;font-size:14px;line-height:20px}.cke_wysiwyg_div img{vertical-align:bottom}.cke_wysiwyg_div a{color:#00f;text-decoration:underline}.cke_wysiwyg_div a:visited{color:#609}.cke_wysiwyg_div a:active{color:red}.cke_dialog a:hover{text-decoration:none}.cke_dialog .cke_dialog_ui_labeled_content{margin-top:5px;margin-bottom:5px}.cke_dialog .cke_dialog_ui_input_select,.cke_dialog .cke_dialog_ui_input_text,.cke_dialog .cke_dialog_ui_input_textarea{-webkit-box-shadow:none;box-shadow:none;border-radius:2px}.cke_dialog .cke_dialog_ui_input_select:focus,.cke_dialog .cke_dialog_ui_input_text:focus,.cke_dialog .cke_dialog_ui_input_textarea:focus{outline:0;border:1px solid #999}.cke_dialog .cke_dialog_ui_input_select,.cke_dialog .cke_dialog_ui_input_text{height:25px;line-height:25px}.g-ui-user-select-allow{webkit-touch-callout:inherit;-webkit-user-select:inherit;-moz-user-select:inherit;-ms-user-select:inherit;user-select:inherit;standard-user-select:inherit;touch-callout:inherit}.g-ui-clearfix:after,.g-ui-clearfix:before{display:table;content:"";line-height:0}.g-ui-clearfix:after{clear:both}.g-ui-link{color:#369;text-decoration:underline;cursor:pointer;padding:2px}.g-ui-link:focus{outline:1px;outline-style:dotted}.g-ui-min-height-300{min-height:300px}.g-ui-100-proc-height{height:100%}.g-ui-absolute-reset{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0}.g-ui-menu{max-height:400px;max-width:300px;overflow-y:auto;overflow-x:hidden}.g-ui-menu .e-link{text-decoration:none;cursor:pointer}.g-ui-menu .e-item.selected>.e-link{background-color:#eee!important}.g-ui-menu .e-item>.e-link:focus,.g-ui-menu .e-item>.e-link:hover{background-color:#555;background-image:none;color:#fff}.g-ui-menu .e-item.disabled>.e-link{cursor:not-allowed;background-color:#fff;background-image:none;color:grey}.g-ui-menu .e-item.disabled [class^=icon-]{color:grey}.g-ui-table{display:table;width:100%}.g-ui-table .e-row{display:table-row}.g-ui-table .e-cell{display:table-cell;vertical-align:top;text-align:left}.g-ui-height-100proc{height:100%}.g-ui-resizable-delimiter-highlight{border:none;border-right:6px solid #aaa}.e-pagenator .e-page{display:inline-block;color:#999;text-decoration:none;font-size:22px;padding:3px;cursor:pointer}.e-pagenator .e-page:hover .e-page-number{color:#555}.e-pagenator .e-page.current .e-page-number{font-size:25px;color:#333;border-bottom:2px solid #000}html.rgba .g-ui-resizable-delimiter-highlight{border-right-color:rgba(0,0,0,.2)}.settings-saved-trigger{display:inline-block;line-height:17px;font-size:16px}.settings-saved-trigger .animated{color:green}.settings-saved-trigger .success{color:green;-webkit-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear;opacity:0}.settings-saved-trigger .error{color:red;-webkit-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear;opacity:0}.settings-saved-trigger .visible{opacity:1}.settings-saved-trigger-input.success{border-color:green!important;-webkit-transition:border-color .5s linear;-o-transition:border-color .5s linear;transition:border-color .5s linear}.settings-saved-trigger-input.error{border-color:red!important;-webkit-transition:border-color .5s linear;-o-transition:border-color .5s linear;transition:border-color .5s linear}.display-none{display:none}.e-spinner{display:none}.e-mobile-switcher,.e-powered{margin-top:8px;color:#333}.e-mobile-switcher a,.e-powered a{color:#333;text-decoration:underline}.e-mobile-switcher a:hover,.e-powered a:hover{color:#333}.e-languages{margin-top:8px;color:#333}.e-languages .flag-name{color:#333;border-bottom:1px dashed #333;cursor:pointer;padding:2px 0}.e-languages .flag-name:focus{outline:1px;outline-style:dotted}html.cssanimations .e-spinner{display:block;margin:5px auto 0;width:100px;text-align:center}html.cssanimations .e-spinner .e-bounce{width:15px;height:15px;background-color:#ddd;margin:0 5px;-webkit-box-shadow:0 0 3px rgba(0,0,0,.3);box-shadow:0 0 3px rgba(0,0,0,.3);border-radius:100%;display:inline-block;-webkit-animation:bouncedelay 1.4s infinite ease-in-out;animation:bouncedelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}html.cssanimations .e-spinner .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}html.cssanimations .e-spinner .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}@-webkit-keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bouncedelay{0%,100%,80%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.command.command-disabled.hide-on-disabled-command{display:none}html{margin:0;padding:0;overflow:hidden;font-family:Arial,Verdana,Geneva,sans-serif;height:100%}body{margin:0;padding:0;overflow:hidden;background-color:#e3e3e3;font-family:Arial,Verdana,Geneva,sans-serif;-webkit-touch-callout:none;position:absolute;top:0;left:0;bottom:0;right:0;height:100%}textarea{resize:none}option:disabled{color:#aaa;cursor:not-allowed}body:before{content:"";position:fixed;top:-10px;left:0;width:100%;height:8px;z-index:100;-webkit-box-shadow:0 0 10px rgba(0,0,0,.6);box-shadow:0 0 10px rgba(0,0,0,.6)}*{outline:0}select:focus{outline:0}html.mobile *,html.rl-mobile *{-webkit-tap-highlight-color:transparent}input[type=search]{-webkit-box-sizing:content-box;box-sizing:content-box}input::-ms-clear,input::-ms-reveal{display:none}#rl-bg{z-index:-1;position:absolute;left:0;right:0;top:0;bottom:0}#rl-content{height:100%;width:100%}#rl-center{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;min-width:600px;min-height:400px}html.rl-mobile #rl-center{min-width:250px;min-height:250px}html.rl-mobile.rl-left-panel-enabled #rl-right{right:-150px}html.rl-mobile.rl-left-panel-disabled #rl-right{left:5px!important}#rl-top{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;bottom:auto;z-index:2}#rl-bottom{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;top:auto;z-index:1}#rl-left{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;width:200px;min-width:60px}#rl-right{position:absolute;top:0;right:0;bottom:0;left:0;padding:0;margin:0;border:0;z-index:0;z-index:1;left:200px}#rl-sub-left{position:absolute;top:0;bottom:0;left:0;width:500px}#rl-sub-right{position:absolute;top:0;bottom:0;right:0;left:500px}#rl-sub-right .b-message-view-backdrop{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);z-index:10}#rl-sub-right .b-message-view-backdrop .backdrop-message-wrp{position:absolute;top:calc(50% - 50px);left:0;right:0;text-align:center}#rl-sub-right .b-message-view-backdrop .backdrop-message-wrp .backdrop-message{display:inline-block;color:#fff;font-size:20px;line-height:30px;background:rgba(0,0,0,.6);padding:15px;border-radius:5px;text-shadow:0 1px 1px #000}html.ssm-state-desktop-large #rl-left{width:220px}html.ssm-state-desktop-large #rl-right{left:220px}html.ssm-state-desktop-large #rl-sub-left{width:500px}html.ssm-state-desktop-large #rl-sub-right{left:500px}html.ssm-state-desktop-large .b-compose.modal{width:1000px}html.ssm-state-desktop-large .b-contacts-content.modal{width:900px}html.ssm-state-desktop #rl-left{width:200px}html.ssm-state-desktop #rl-right{left:200px}html.ssm-state-desktop #rl-sub-left{width:400px}html.ssm-state-desktop #rl-sub-right{left:400px}html.ssm-state-desktop .b-compose.modal{width:1000px}html.ssm-state-desktop .b-contacts-content.modal{width:900px}html.ssm-state-mobile #rl-left,html.ssm-state-tablet #rl-left{width:155px}html.ssm-state-mobile #rl-right,html.ssm-state-tablet #rl-right{left:155px}html.ssm-state-mobile #rl-sub-left,html.ssm-state-tablet #rl-sub-left{width:310px}html.ssm-state-mobile #rl-sub-left .messageList .inputSearch,html.ssm-state-tablet #rl-sub-left .messageList .inputSearch{width:200px}html.ssm-state-mobile #rl-sub-right,html.ssm-state-tablet #rl-sub-right{left:310px}html.ssm-state-mobile .b-compose.modal,html.ssm-state-tablet .b-compose.modal{width:720px}html.ssm-state-mobile .b-contacts-content.modal,html.ssm-state-tablet .b-contacts-content.modal{width:700px}html.ssm-state-mobile .b-contacts-content.modal .contactValueInput,html.ssm-state-tablet .b-contacts-content.modal .contactValueInput{width:200px}html.ssm-state-tablet .b-compose.modal{width:720px}html.ssm-state-tablet .b-contacts-content.modal{width:800px}html.ssm-state-tablet .b-contacts-content.modal .contactValueInput{width:250px}.show-on-panel-disabled{display:none}html.rl-left-panel-disabled #rl-left{width:60px!important}html.rl-left-panel-disabled #rl-left .show-on-panel-disabled{display:block}html.rl-left-panel-disabled #rl-left .opacity-on-panel-disabled{opacity:.3}html.rl-left-panel-disabled #rl-left .visibility-hidden-on-panel-disabled{visibility:hidden}html.rl-left-panel-disabled #rl-left .hide-on-panel-disabled{display:none}html.rl-left-panel-disabled #rl-left.ui-state-disabled{opacity:1}html.rl-left-panel-disabled #rl-right{left:60px!important}html.rl-left-panel-short #rl-left{width:60px!important}html.rl-left-panel-short #rl-right{left:60px!important}html.rl-left-panel-none #rl-left{width:10px!important}html.rl-left-panel-none #rl-right{left:10px!important}.ui-resizable-helper-w{border-right:5px solid #777;border-right-color:rgba(255,255,255,.7)}.ui-resizable-helper-h{border-bottom:5px solid #ccc;border-bottom-color:rgba(0,0,0,.3)}.ui-resizable-handle:hover{background:#aaa;background:rgba(255,255,255,.5)}html.rl-no-preview-pane #rl-sub-left{right:5px!important;width:inherit}html.rl-no-preview-pane #rl-sub-left .messageList .inputSearch{width:300px!important}html.rl-no-preview-pane #rl-sub-right{left:0!important}html.rl-no-preview-pane #rl-right .ui-resizable-handle{display:none!important}html.rl-side-preview-pane #rl-right .ui-resizable-handle{display:none!important}html.rl-bottom-preview-pane #rl-sub-left{right:5px!important;width:inherit}html.rl-bottom-preview-pane #rl-sub-left .b-message-list-wrapper{bottom:inherit;height:300px;-webkit-box-shadow:none;box-shadow:none}html.rl-bottom-preview-pane #rl-sub-left .messageList .inputSearch{width:300px!important}html.rl-bottom-preview-pane #rl-sub-right{left:0!important}html.rl-bottom-preview-pane #rl-sub-right .messageView .top-toolbar{display:none}html.rl-bottom-preview-pane #rl-sub-right .b-message-view-wrapper{top:356px;left:0;right:5px;-webkit-box-shadow:none;box-shadow:none}.visible-on-ctrl,.visible-on-ctrl-btn{display:none}.hidden-on-ctrl-btn{display:inline-block}html.rl-ctrl-key-pressed .visible-on-ctrl{display:inline-block}html.rl-ctrl-key-pressed .btn-group.open .visible-on-ctrl-btn{display:inline-block}html.rl-ctrl-key-pressed .hidden-on-ctrl{display:none}html.rl-ctrl-key-pressed .btn-group.open .hidden-on-ctrl-btn{display:none}#rl-loading,#rl-loading-error{position:absolute;font-size:30px;line-height:130%;top:50%;width:100%;height:65px;margin:0;margin-top:-60px;background-color:transparent;text-align:center;color:#000}#rl-loading-error{background-image:none;display:none}#rl-loading-error-additional{margin-top:20px;font-size:20px}#rl-app{display:none}#rl-check{display:none}.rl-content-show{display:block!important}html.rl-mobile .hide-on-mobile{display:none!important}.show-on-mobile{display:none!important}html.rl-mobile .show-on-mobile{display:initial!important}html.rl-mobile .width100-on-mobile{width:100%!important}.nano.scroller-shadow-bottom:after,.nano.scroller-shadow-top:before{content:"";position:absolute;left:0;width:100%;height:10px;z-index:102;-webkit-box-shadow:0 0 20px rgba(0,0,0,.4);box-shadow:0 0 20px rgba(0,0,0,.4)}.nano.scroller-shadow-top:before{top:-10px}.nano.scroller-shadow-bottom:after{bottom:-10px}.nano.fixIndex.scroller-shadow-bottom:after,.nano.fixIndex.scroller-shadow-top:before{z-index:98}.e-component.e-select select:focus{outline:1px;outline-style:dotted}.e-component.e-checkbox{margin-bottom:6px;margin-left:-2px;padding:2px;cursor:pointer}.e-component.e-checkbox:focus{outline:1px;outline-style:dotted}.e-component.e-checkbox .e-checkbox-icon{padding:1px 0 0 1px}.e-component.e-checkbox.disabled{cursor:default;color:#999;outline:0;outline-style:none}.e-component.e-radio{cursor:pointer}.e-component.e-radio.disabled{cursor:default;color:#999}.e-component.material-design.e-checkbox{margin-top:2px;padding:2px 2px 1px 2px}.e-component.material-design.e-checkbox .sub-checkbox-container{display:inline-block;position:relative;-webkit-transform:translateZ(0);transform:translateZ(0);width:18px;height:18px;vertical-align:bottom;margin-bottom:3px}.e-component.material-design.e-checkbox .sub-label{padding-left:12px}.e-component.material-design.e-checkbox .sub-checkbox{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:1px;top:0;left:0;width:18px;height:18px;border:solid 2px #999;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}.e-component.material-design.e-checkbox .sub-checkbox.checked{border-top:none;border-left:none;border-color:#0f9d58;top:-1px;left:5px;width:10px;height:18px;border-right-width:2px;border-bottom-width:2px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.e-component.material-design.e-checkbox .sub-checkbox.checked.box{border:solid 2px;-webkit-animation:box-shrink 140ms ease-out forwards;animation:box-shrink 140ms ease-out forwards}.e-component.material-design.e-checkbox .sub-checkbox.checked.checkmark{border-left:none;border-top:none;-webkit-animation:checkmark-expand 140ms ease-out forwards;animation:checkmark-expand 140ms ease-out forwards}.e-component.material-design.e-checkbox .sub-checkbox.unchecked.box{-webkit-animation:box-expand 140ms ease-out forwards;animation:box-expand 140ms ease-out forwards}.e-component.material-design.e-checkbox .sub-checkbox.unchecked.checkmark{border-left:none;border-top:none;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-animation:checkmark-shrink 140ms ease-out forwards;animation:checkmark-shrink 140ms ease-out forwards}.e-component.material-design.e-checkbox.disabled .sub-checkbox{border-color:#aaa;cursor:not-allowed;color:#aaa}.e-component.material-design.e-checkbox.disabled .sub-label{cursor:not-allowed;color:#aaa}@-webkit-keyframes box-shrink{0%{top:0;left:0;width:18px;height:18px;border:solid 2px #999;-webkit-transform:rotate(0);transform:rotate(0)}100%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@keyframes box-shrink{0%{top:0;left:0;width:18px;height:18px;border:solid 2px #999;-webkit-transform:rotate(0);transform:rotate(0)}100%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@-webkit-keyframes checkmark-expand{0%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}100%{top:-1px;left:5px;width:10px;height:18px;border-right-width:2px;border-bottom-width:2px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@keyframes checkmark-expand{0%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}100%{top:-1px;left:5px;width:10px;height:18px;border-right-width:2px;border-bottom-width:2px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@-webkit-keyframes checkmark-shrink{0%{top:-1px;left:5px;width:10px;height:18px;border-right-width:2px;border-bottom-width:2px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}100%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@keyframes checkmark-shrink{0%{top:-1px;left:5px;width:10px;height:18px;border-right-width:2px;border-bottom-width:2px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}100%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}}@-webkit-keyframes box-expand{0%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}100%{top:0;left:0;width:18px;height:18px;border:solid 2px #999;-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes box-expand{0%{top:13px;left:5px;width:4px;height:4px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}100%{top:0;left:0;width:18px;height:18px;border:solid 2px #999;-webkit-transform:rotate(0);transform:rotate(0)}}.b-system-drop-down .b-toolbar{position:absolute;top:0;right:0;height:30px;padding:10px 8px;z-index:103}.b-system-drop-down .e-facebook-name{display:inline-block;padding-top:4px}.b-system-drop-down .btn.system-dropdown{padding-left:10px;padding-right:10px}.b-system-drop-down .button-fb-logout{margin:5px}.b-system-drop-down .email-title{display:inline-block;max-width:200px;text-align:left;-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden;margin-right:28px;vertical-align:middle}.b-system-drop-down .logoPlace{margin:-5px 10px 0 0;font-size:25px;line-height:30px;height:40px}.b-system-drop-down .audioPlace{font-size:25px;line-height:30px;margin-right:10px;width:25px}.b-system-drop-down .audioPlace .playIcon,.b-system-drop-down .audioPlace .stopIcon{cursor:pointer;color:orange;text-shadow:0 1px 0 #555;float:right}.b-system-drop-down .audioPlace .playIcon{margin-top:5px}.b-system-drop-down .audioPlace .stopIcon{font-size:30px;line-height:30px;margin-right:10px}.b-system-drop-down .audioPlace .stopIcon{display:none}.b-system-drop-down .audioPlace:hover .playIcon{display:none}.b-system-drop-down .audioPlace:hover .stopIcon{display:inline-block}.b-system-drop-down .accountPlace{background-color:#000;background-color:rgba(0,0,0,.5);color:#fff;text-shadow:0 1px 0 #000;display:inline-block;height:29px;max-width:250px;font-size:16px;line-height:30px;padding:1px 8px;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;border-radius:4px;font-weight:700;margin-right:5px;white-space:nowrap}.b-system-drop-down .account-item .icon-ok{display:none}.b-system-drop-down .account-item.current .icon-ok{display:inline-block}.b-system-drop-down .account-item.current .icon-user{display:none}.b-system-drop-down .counter{display:inline-block}.b-system-drop-down .g-ui-menu .e-link.account-item{padding-right:5px}html.ssm-state-mobile .accountPlace{max-width:150px!important}@-webkit-keyframes firstBar{0%{height:30%}50%{height:100%}100%{height:30%}}@keyframes firstBar{0%{height:30%}50%{height:100%}100%{height:30%}}@-webkit-keyframes secondBar{0%{height:90%}50%{height:30%}100%{height:100%}}@keyframes secondBar{0%{height:90%}50%{height:30%}100%{height:100%}}@-webkit-keyframes thirdBar{0%{height:20%}40%{height:40%}60%{height:80%}100%{height:40%}}@keyframes thirdBar{0%{height:20%}40%{height:40%}60%{height:80%}100%{height:40%}}.equaliser{width:20px;height:20px;position:relative}.equaliser .bar{float:left;width:5px;height:5px;background:orange;position:absolute;bottom:0}.equaliser .first{left:0;-webkit-animation:none;animation:none}.equaliser .second{left:7px;-webkit-animation:none;animation:none}.equaliser .third{left:14px;-webkit-animation:none;animation:none}.equaliser.animated .first{-webkit-animation:firstBar 1s infinite;animation:firstBar 1s infinite}.equaliser.animated .second{-webkit-animation:secondBar 1s infinite;animation:secondBar 1s infinite}.equaliser.animated .third{-webkit-animation:thirdBar 1s infinite;animation:thirdBar 1s infinite}.b-login-content{height:100%;text-align:center}.b-login-content .loginFormWrapper{display:inline-block;vertical-align:middle;text-align:center;-webkit-perspective:500px;perspective:500px}.b-login-content .loginFormWrapper .descWrapper{margin-bottom:10px}.b-login-content .loginFormWrapper .descWrapper .desc{font-size:18px;padding:2px}.b-login-content .loginFormWrapper .alertError{max-width:450px}.b-login-content .loginFormWrapper .loginForm{background-color:#efefef;text-align:left;color:#333;margin:0;float:none;width:303px}.b-login-content .loginFormWrapper .loginWelcomeForm{display:none}.b-login-content .loginFormWrapper .welcome-on{display:block}.b-login-content .loginFormWrapper .welcome-off{display:none}.b-login-content .loginFormWrapper .control-group,.b-login-content .loginFormWrapper .controls{margin-bottom:25px}.b-login-content .loginFormWrapper .wrapper{padding:40px 40px 20px 40px}.b-login-content .loginFormWrapper #recaptcha_image img{border:1px solid #ccc;border-radius:3px}.b-login-content .loginFormWrapper .controls .inputAdditionalCode,.b-login-content .loginFormWrapper .controls .inputEmail,.b-login-content .loginFormWrapper .controls .inputLogin,.b-login-content .loginFormWrapper .controls .inputLoginForm,.b-login-content .loginFormWrapper .controls .inputPassword{font-size:18px;height:40px;line-height:20px;padding-left:12px;padding-right:12px}.b-login-content .loginFormWrapper .languageLabel{margin-top:5px}.b-login-content .loginFormWrapper .signMeLabel .e-checkbox{margin-top:5px}.b-login-content .loginFormWrapper .languageLabel{margin-right:5px}.b-login-content .loginFormWrapper .input-append .add-on{position:relative;height:30px;background:0 0;margin-left:-35px;z-index:1000;border:0}.b-login-content .loginFormWrapper .input-append .add-on i{font-size:17px;line-height:29px;color:#999}.b-login-content .loginFormWrapper .input-append .add-on i.login-submit-icon{font-size:24px;padding-top:2px;cursor:pointer}.b-login-content .loginFormWrapper .control-group.error .add-on i,.b-login-content .loginFormWrapper .controls.error .add-on i{color:#b94a48}.b-login-content .buttonLogin{margin:0}.b-login-content .alert{margin:0 0 20px 0;text-align:left}.b-login-content .loginAfter{display:inline-block;height:90%;vertical-align:middle;width:0}.b-login-content .flag-selector{margin-bottom:0}.b-login-content .social-buttons{margin-top:5px}.b-login-content .language-button,.b-login-content .social-button{padding:5px;outline:0}@-webkit-keyframes loginRotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loginRotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.submitting-pane{position:relative}.submitting-pane.submitting:before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:0 0;background:rgba(0,0,0,.3);z-index:1051;border-radius:8px}html.cssanimations .submitting-pane.submitting:after{content:'';position:absolute;width:60px;height:60px;top:50%;left:50%;margin-top:-30px;margin-left:-30px;border:8px solid transparent;border-color:transparent;border-top-color:#fff;-webkit-animation:loginRotation 1s infinite ease-in-out;animation:loginRotation 1s infinite ease-in-out;border-radius:50%;z-index:1052}.btn-submit-icon-wrp{border:none;background:0 0;display:inline-block;margin:0;padding:0;outline:0;cursor:pointer}.popups .b-welcom-page-content .modal-header{background-color:#fff}.popups .b-ask-content .modal-header{background-color:#fff}.popups .b-ask-content .modal-body{text-align:center}.popups .b-ask-content .desc-place{font-size:18px}.popups .b-shortcuts-content.modal{width:700px}.popups .b-shortcuts-content .modal-header{background-color:#fff}.b-folders .move-action-content-wrapper{z-index:-1;position:fixed;top:0;bottom:0;left:0;right:0;opacity:.05;background-color:#fff;background-size:60px 60px;background-image:-o-linear-gradient(315deg,#000 25%,transparent 25%,transparent 50%,#000 50%,#000 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,#000 25%,transparent 25%,transparent 50%,#000 50%,#000 75%,transparent 75%,transparent)}.b-folders .b-folders-user .e-link.print-count.system .badge{display:none!important}.b-folders .b-toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 0 0 8px;color:#fff;z-index:101}.b-folders .b-footer{position:absolute;bottom:10px;right:0;left:0;height:30px;padding:0 10px 0 5px;z-index:101;overflow:hidden;white-space:nowrap}.b-folders .b-content{position:absolute;top:58px;bottom:45px;left:0;right:0;overflow:hidden;overflow-y:auto;min-width:100px}.b-folders .b-content .content{-webkit-overflow-scrolling:touch}.b-folders .b-list-delimiter{margin:10px;border-top:0 solid #000;border-bottom:1px solid #999}.b-folders .b-content .e-item{overflow:hidden;white-space:nowrap}.b-folders .b-content .e-item .e-link{display:block;position:relative;z-index:1;height:34px;line-height:34px;background-color:transparent;vertical-align:middle;color:grey;cursor:not-allowed;font-size:14px;padding:0;padding-left:10px;padding-right:10px;outline:0;text-decoration:none}.b-folders .b-content .e-item .e-link .focused-poiner{float:left;display:inline-block;background-color:transparent;height:100%;width:3px;position:absolute;top:0;left:0}.b-folders .b-content .e-item .e-link .inbox-star-icon{display:none;margin-left:7px}.b-folders .b-content .e-item .e-link .inbox-star-icon .icon-star{display:none}.b-folders .b-content .e-item .e-link .inbox-star-icon .icon-star-empty{opacity:.5}.b-folders .b-content .e-item .e-link .inbox-star-icon .icon-star-empty:hover{opacity:1}.b-folders .b-content .e-item .e-link.is-inbox .inbox-star-icon{display:inline}.b-folders .b-content .e-item .e-link.selectable{color:#000;cursor:pointer}.b-folders .b-content .e-item .e-link.selectable.droppableHover,.b-folders .b-content .e-item .e-link.selectable.focused,.b-folders .b-content .e-item .e-link.selectable.selected,.b-folders .b-content .e-item .e-link.selectable:hover{background-color:#555;color:#fff}.b-folders .b-content .e-item .e-link.selectable.focused{color:#fff}.b-folders .b-content .e-item .e-link.focused{background-color:#888}.b-folders .b-content .e-item .e-link.focused .focused-poiner{background-color:#fff}.b-folders .b-content .e-item .e-link.system{cursor:default;color:grey}.b-folders .b-content .e-item .e-link .count{position:relative;display:none;margin-top:5px;line-height:19px}.b-folders .b-content .e-item .e-link.print-count{font-weight:700}.b-folders .b-content .e-item .e-link.print-count .count{display:inline}.b-folders .b-content .e-item .e-link.unread-sub{font-weight:700}.b-folders .b-content .e-item .e-link .e-collapsed-sign{cursor:pointer;width:22px;height:30px;line-height:30px;text-align:center;vertical-align:inherit}.b-folders .b-content .e-item .hidden.e-link{display:none}.b-folders .b-content .e-item .b-sub-folders.collapsed{max-height:0;height:0;display:none}.b-folders.inbox-is-starred .icon-star{color:orange;display:inline-block!important}.b-folders.inbox-is-starred .icon-star-empty{display:none}.b-folders .b-folder-system-item{font-weight:700}.b-folders .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.b-folders .b-sub-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:70px}.b-folders.single-root-inbox .i-am-inbox.e-link{display:none!important}.b-folders.single-root-inbox .i-am-inbox-wrapper>.b-sub-folders{max-height:none!important;height:inherit!important;display:block!important}.b-folders.single-root-inbox .i-am-inbox-wrapper .b-sub-folders .e-item .e-link{padding-left:10px}.b-folders.single-root-inbox .i-am-inbox-wrapper .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:25px}.b-folders.single-root-inbox .i-am-inbox-wrapper .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:40px}.b-folders.single-root-inbox .i-am-inbox-wrapper .b-sub-folders .b-sub-folders .b-sub-folders .b-sub-folders .e-item .e-link{padding-left:55px}.btn .btn-text-wrp{padding-left:7px;white-space:normal}.btn.buttonCompose{width:calc(100% - 85px);max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;white-space:nowrap;overflow:hidden;height:19px;display:inline-block;margin-top:1px}html.rl-left-panel-disabled .buttonComposeText,html.rl-left-panel-short .buttonComposeText{display:none}html.rl-left-panel-disabled .btn.buttonCompose,html.rl-left-panel-short .btn.buttonCompose{width:auto}html.rl-left-panel-disabled .btn.buttonContacts,html.rl-left-panel-short .btn.buttonContacts{margin-top:10px!important;margin-left:0!important}html.rl-left-panel-disabled.rl-mobile #rl-left,html.rl-left-panel-short.rl-mobile #rl-left{visibility:hidden}html.rl-mobile .btn.buttonCompose{width:100%}html.rl-mobile .btn.buttonContacts{display:none}.popups .b-folder-clear-content .modal-header{background-color:#fff}.popups .b-folder-create-content .modal-header{background-color:#fff}.popups .b-folder-system-content .modal-header{background-color:#fff}.popups .b-filter-content{width:750px}.popups .b-filter-content .modal-header{background-color:#fff}.popups .b-filter-content .button-delete{cursor:pointer}.popups .b-filter-content .setRecipientsBtn{margin-top:-2px;margin-left:5px}.popups .b-languages-content.modal{width:700px}.popups .b-languages-content.exp{width:701px}.popups .b-languages-content .modal-header{background-color:#fff}.popups .b-languages-content .lang-item{display:inline-block;padding:5px 15px;margin:2px 5px;width:180px;background-color:#fff;text-align:left;border:1px solid transparent;border-radius:2px}.popups .b-languages-content .lang-item.user{background-color:#fffddd;border-color:#fff555}.popups .b-languages-content .lang-item.selected{background-color:#f5f5f5;border-color:#ccc}.popups .b-languages-content .lang-item:hover{background-color:#eee;border-color:#ccc}html.rl-mobile .b-languages-content .lang-item{width:calc(100% - 40px)}.popups .b-account-add-content .modal-header{background-color:#fff}.popups .b-template-add-content.modal{width:750px}.popups .b-template-add-content .modal-header{background-color:#fff}.popups .b-template-add-content .e-template-place{height:300px}.popups .b-compose-open-pgp-content .modal-header,.popups .b-message-open-pgp-content .modal-header,.popups .b-open-pgp-key-add-content .modal-header,.popups .b-open-pgp-key-generate-content .modal-header,.popups .b-open-pgp-key-view-content .modal-header{background-color:#fff}.popups .b-compose-open-pgp-content.modal,.popups .b-message-open-pgp-content.modal,.popups .b-open-pgp-key-add-content.modal,.popups .b-open-pgp-key-generate-content.modal,.popups .b-open-pgp-key-view-content.modal{width:570px}.popups .b-compose-open-pgp-content .inputKey,.popups .b-message-open-pgp-content .inputKey,.popups .b-open-pgp-key-add-content .inputKey,.popups .b-open-pgp-key-generate-content .inputKey,.popups .b-open-pgp-key-view-content .inputKey{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}.popups .b-compose-open-pgp-content .key-viewer,.popups .b-message-open-pgp-content .key-viewer,.popups .b-open-pgp-key-add-content .key-viewer,.popups .b-open-pgp-key-generate-content .key-viewer,.popups .b-open-pgp-key-view-content .key-viewer{max-height:500px;overflow:auto}.popups .b-compose-open-pgp-content.modal{width:800px}.popups .b-compose-open-pgp-content .key-list{background-color:#f9f9f9;border-radius:5px;padding:10px 15px;margin-top:10px;min-height:40px}.popups .b-compose-open-pgp-content .key-list-wrp:hover{overflow:auto}.popups .b-compose-open-pgp-content .key-list-wrp:hover .key-list__item-name{overflow:visible}.popups .b-compose-open-pgp-content .key-list-wrp.empty{text-align:center;padding-top:10px;color:#aaa;font-size:16px}.popups .b-compose-open-pgp-content .key-list__item{color:#333;white-space:nowrap;padding-bottom:4px}.popups .b-compose-open-pgp-content .key-list__item:last-child{padding-bottom:0}.popups .b-compose-open-pgp-content .key-list__item-delete{cursor:pointer}.popups .b-compose-open-pgp-content .key-list__item-delete.disabled{cursor:not-allowed}.popups .b-compose-open-pgp-content .key-list__item-names{color:#333}.popups .b-compose-open-pgp-content .key-list__item-names.empty{color:red}.popups .b-compose-open-pgp-content .key-list__item-name{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.popups .b-compose-open-pgp-content .key-list__item-error{color:red}.popups .b-compose-open-pgp-content .key-list__item-hash{color:#aaa}.popups .b-compose-open-pgp-content .key-actions{margin-top:10px;min-height:40px}.popups .b-compose-open-pgp-content .key-actions select option.even{background-color:#f5f5f5}.popups .b-message-open-pgp-content.modal{width:700px}.popups .b-message-open-pgp-content .key-list{margin-top:5px;overflow:hidden}.popups .b-message-open-pgp-content .key-list__item{color:#555;cursor:pointer;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.popups .b-message-open-pgp-content .key-list__item__radio{padding:3px 5px 0 0;vertical-align:top}.popups .b-message-open-pgp-content .key-list__item__name{border-bottom:1px solid transparent}.popups .b-message-open-pgp-content .key-list__item__names{display:inline-block}.popups .b-message-open-pgp-content .key-list__item__names:hover .key-list__item__name{border-bottom:1px dashed #555}.popups .b-open-pgp-key-add-content.modal{width:645px}.popups .b-open-pgp-key-add-content.modal .inputKey{width:600px}.popups .b-two-factor-content{width:750px}.popups .b-two-factor-content .modal-body{min-height:100px}.popups .b-two-factor-content .modal-header{background-color:#fff}.popups .b-two-factor-test-content .modal-header{background-color:#fff}.popups .b-identity-content.modal{width:750px}.popups .b-identity-content .modal-header{background-color:#fff}.popups .b-identity-content .modal-body{overflow:hidden}.popups .b-identity-content .control-label{width:100px}.popups .b-identity-content .controls{margin-left:120px}.popups .b-identity-content .e-signature-place{height:200px}.popups .b-identity-content .textEmail{margin-top:5px;font-weight:700}.popups .b-advanced-search-content.modal{width:750px}.popups .b-advanced-search-content.modal .control-label{width:100px}.popups .b-advanced-search-content.modal .controls{margin-left:110px}.popups .b-advanced-search-content .modal-header{background-color:#fff}.attachmentItem{position:relative;display:inline-block;margin:5px;max-width:200px;min-width:60px;overflow:hidden;list-style:none;line-height:24px;border:0;background-color:#fff;-webkit-box-shadow:0 1px 4px #ccc;box-shadow:0 1px 4px #ccc;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.2);-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.04),0 1px 5px rgba(0,0,0,.1);box-shadow:0 0 0 1px rgba(0,0,0,.04),0 1px 5px rgba(0,0,0,.1);border-radius:3px}.attachmentItem.waiting{opacity:.6}.attachmentItem.checked{-webkit-box-shadow:0 1px 4px #00a;box-shadow:0 1px 4px #00a;-webkit-box-shadow:0 1px 5px rgba(0,0,255,.3);box-shadow:0 1px 5px rgba(0,0,255,.3);-webkit-box-shadow:0 0 0 1px rgba(0,0,255,.1),0 1px 5px rgba(0,0,255,.2);box-shadow:0 0 0 1px rgba(0,0,255,.1),0 1px 5px rgba(0,0,255,.2)}.attachmentItem .checkedParent{position:absolute;top:0;right:0;padding:1px 4px 0 5px;background:#fafafa;border:0 solid #ccc}.attachmentItem .attachmentSize{font-size:12px;color:#999}.attachmentItem.error .attachmentIcon,.attachmentItem.error .attachmentName,.attachmentItem.error .attachmentSize{color:red}.attachmentItem .attachmentIconParent{position:relative;height:56px;width:60px;background:0 0}.attachmentItem .attachmentIconParent .iconBG,.attachmentItem .attachmentIconParent .iconMain,.attachmentItem .attachmentIconParent .iconPreview,.attachmentItem .attachmentIconParent .iconProgress{position:absolute;top:0;left:0;display:inline-block;width:100%;height:100%}.attachmentItem .attachmentIconParent .iconProgress{background:#eee;width:0%}.attachmentItem .attachmentIconParent .iconBG{font-size:18px;text-align:center;color:#999;font-weight:700;line-height:55px;text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 rgba(255,255,255,.8)}.attachmentItem .attachmentIconParent .iconPreview{display:none;background:#555;background-image:none;background:rgba(0,0,0,.5)!important}.attachmentItem .attachmentIconParent .iconPreview .attachmentIcon{color:#fff;text-shadow:0 1px 0 #000}.attachmentItem .attachmentNameParent{position:relative;margin-left:60px;padding:4px 4px 3px 6px;min-width:90px;cursor:pointer;color:#333;background:#fafafa;border-left:1px solid #ddd}.attachmentItem .attachmentIcon{margin:6px 0 0 13px;font-size:36px;width:36px;height:36px;color:#aaa}.attachmentItem .attachmentIcon.icon-none{display:none}.attachmentItem .attachmentIcon.icon-file-certificate{margin-left:15px}.attachmentItem .attachmentIconText{display:inline-block;font-size:28px;width:60px;height:56px;color:#aaa;line-height:56px;text-align:center;font-style:normal}.attachmentItem .attachmentIconParent.hasPreview:hover .iconPreview{display:inline-block}.attachmentItem .attachmentIconParent.hasPreview:hover .iconMain{display:none}.attachmentItem .attachmentIconParent.hasPreplay:hover .iconPreview{display:inline-block}.attachmentItem .attachmentIconParent.hasPreplay:hover .iconMain{display:none}.attachmentItem .showPreplay,.attachmentItem .showPreview{display:none;cursor:pointer}.attachmentItem .attachmentIconParent.hasPreview .showPreview{display:inline}.attachmentItem .attachmentIconParent.hasPreview .hidePreview{display:none}.attachmentItem .attachmentIconParent.hasPreplay .showPreplay{display:inline}.attachmentItem .attachmentIconParent.hasPreplay .hidePreview{display:none}html.rl-no-preview-pane .messageList.message-selected{display:none}.messageList .toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 1px;z-index:102;white-space:nowrap}.messageList .b-footer{position:absolute;bottom:0;right:0;left:0;height:30px;padding:7px;z-index:101;background-color:#eee;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.messageList .b-footer .e-quota{display:inline-block;margin-top:5px;margin-left:5px;font-size:18px;cursor:help}.messageList .b-footer .e-quota:hover{border-bottom:1px dashed #333}.messageList .inputSearch{width:258px}.messageList .btn.buttonMoreSearch{padding-left:8px;padding-right:8px}.messageList .b-message-list-wrapper{position:absolute;top:50px;right:0;left:0;bottom:5px;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);border-radius:5px;z-index:101}.messageList .second-toolbar{position:absolute;top:0;right:0;left:0;height:29px;padding:10px 8px 10px 11px;z-index:101;white-space:nowrap;background-color:#eee;border-top-right-radius:5px;border-top-left-radius:5px}.messageList .second-toolbar .checkboxCkeckAll{margin:5px 0}.messageList .line-loading{position:absolute;left:0;right:0;z-index:102;height:0;top:50px}.messageList .mainDelimiter{position:absolute;left:0;right:0;height:1px;z-index:101;background-color:#bbb}.messageList .toolbarDelimiter{top:49px}.messageList .footerDelimiter{bottom:44px}.messageList .b-content{position:absolute;top:50px;bottom:45px;left:0;right:0;padding:0;overflow-x:hidden;overflow-y:auto;z-index:101;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.messageList .b-content .content{-webkit-overflow-scrolling:touch}.messageList .b-content .listClear{color:#333;text-align:center;padding:10px;font-size:14px;line-height:13px}.messageList .b-content .listDragOver,.messageList .b-content .listEmptyList,.messageList .b-content .listEmptyListLoading,.messageList .b-content .listEmptySearchList,.messageList .b-content .listError{color:#999;text-align:center;padding:60px 10px;font-size:24px;line-height:30px}.messageList .b-content .listDragOver .e-icon,.messageList .b-content .listEmptyList .e-icon,.messageList .b-content .listEmptyListLoading .e-icon,.messageList .b-content .listEmptySearchList .e-icon,.messageList .b-content .listError .e-icon{font-size:24px;line-height:30px}.messageList .b-content .listDragOver{max-height:0;overflow:hidden;padding:0 10px}.messageList .b-content .listDragOver.viewAppendArea{max-height:120px;padding:30px 10px}.messageList .b-content .listDragOver.dragOverEnter{background-color:#e0fdda;color:#333}.messageList .b-content .listError{color:#da4f49}.messageList .b-content .listSearchDesc{font-size:18px;padding:15px;border-bottom:1px solid #eee}html.rl-mobile .messageList .b-content .listSearchDesc{font-size:16px;padding:12px}.messageList .b-content .listThreadUidDesc{font-size:16px;padding:7px 20px 6px 20px;background-color:#aaa;border-bottom:1px solid #888;color:#fff;cursor:pointer;text-shadow:0 1px 0 #000;text-align:center}.messageList .b-content .delimiter{display:block;height:1px;background-color:#e5e5e5}.messageList .b-content .messageListItem:last-child{border-bottom:1px solid #e5e5e5}.messageList .b-content .messageListItem:last-child.selected{border-bottom:1px solid #bfd5ef}.messageList .b-content .fullThreadsParent{height:25px;padding:3px 5px;background-color:#f4f4f4;text-align:center}.messageList .b-content .messageListItem{position:relative;height:52px;max-height:60px;font-size:12px;line-height:21px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100;background-color:#f9f9f9}.messageList .b-content .messageListItem .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2}.messageList .b-content .messageListItem .wrapper{padding:5px 0}.messageList .b-content .messageListItem .sidebarParent{display:inline-block;width:6px;background-color:#eee;float:left;height:100%}.messageList .b-content .messageListItem.focused{background-color:#f5f5f5}.messageList .b-content .messageListItem.focused .sidebarParent{background-color:#ccc!important}.messageList .b-content .messageListItem .importantMark{display:none;color:red;margin-right:5px}.messageList .b-content .messageListItem.deleted-mark{opacity:.7}.messageList .b-content .messageListItem.deleted-mark .sender,.messageList .b-content .messageListItem.deleted-mark .subject,.messageList .b-content .messageListItem.deleted-mark .subject-prefix,.messageList .b-content .messageListItem.deleted-mark .subject-suffix{text-decoration:line-through}.messageList .b-content .messageListItem.important .importantMark{display:inline}.messageList .b-content .messageListItem.e-single-line{height:35px}.messageList .b-content .messageListItem.e-single-line .wrapper{line-height:25px;padding:5px}.messageList .b-content .messageListItem.new{max-height:0}.messageList .b-content .messageListItem.deleted{max-height:0;border-color:transparent!important}.messageList .b-content .messageListItem .checkedParent{display:inline-block;float:left;margin-top:11px;padding:0 8px 0 6px;font-size:14px}.messageList .b-content .messageListItem.e-single-line .checkedParent{margin-top:1px}.messageList .b-content .messageListItem .flagParent{display:inline-block;float:right;padding:0 10px 0 5px}.messageList .b-content .messageListItem.e-single-line .flagParent{float:left;padding:0 8px 0 2px}.messageList .b-content .messageListItem .dateParent{display:inline-block;float:right;position:relative;margin:0 5px;color:#999;font-size:11px}.messageList .b-content .messageListItem .threadsParent{display:inline-block;float:right;position:relative}.messageList .b-content .messageListItem .attachmentParent{display:inline-block;float:right;position:relative;margin:2px 10px 0 5px}.messageList .b-content .messageListItem.e-single-line .attachmentParent{float:left;margin:0 8px 0 0}.messageList .b-content .messageListItem .senderParent{display:block;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.messageList .b-content .messageListItem .threadsCountParent{display:inline;overflow:hidden;background-color:#eee;padding:1px 5px;margin-right:5px;border:1px solid #ccc;border-radius:5px}.messageList .b-content .messageListItem .threadsCountParent.lastSelected{background-color:#999;border-color:#999;color:#fff}.messageList .b-content .messageListItem .threadsCountParent:hover{border-color:#666}.messageList .b-content .messageListItem.e-single-line .senderParent{display:inline-block;-o-text-overflow:none;text-overflow:none;width:200px;float:left;font-weight:400}.messageList .b-content .messageListItem .subjectParent{display:block;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;color:#000}.messageList .b-content .messageListItem .dateParent,.messageList .b-content .messageListItem .senderParent,.messageList .b-content .messageListItem .subjectParent{white-space:nowrap}.messageList .b-content .messageListItem .subjectParent .emptySubjectText{display:none;font-style:italic;color:#999}.messageList .b-content .messageListItem.emptySubject .subjectParent .subject,.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-prefix,.messageList .b-content .messageListItem.emptySubject .subjectParent .subject-suffix{display:none}.messageList .b-content .messageListItem.emptySubject .subjectParent .emptySubjectText{display:inline}.messageList .b-content .messageListItem .sender,.messageList .b-content .messageListItem .subject,.messageList .b-content .messageListItem .subject-suffix{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.messageList .b-content .messageListItem .threads-len .threads-len-data{background-color:#eee;color:#666;border-radius:6px;padding:2px 0 1px 6px;margin-right:2px;border:1px solid #ccc}.messageList .b-content .messageListItem .threads-len .threads-len-data [class*=" icon-"],.messageList .b-content .messageListItem .threads-len .threads-len-data [class^=icon-]{font-size:14px}.messageList .b-content .messageListItem .threads-len .threads-len-data:hover{background-color:#aaa;border-color:#666;text-shadow:0 1px 0 #999;color:#fff}.messageList .b-content .messageListItem .subject-prefix{color:#888}.messageList .b-content .messageListItem .attachment{display:none}.messageList .b-content .messageListItem .flagOff,.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{cursor:pointer;display:inline-block}.messageList .b-content .messageListItem .flagOff{opacity:.5}.messageList .b-content .messageListItem .flagOff:hover{opacity:1}.messageList .b-content .messageListItem .flagOn,.messageList .b-content .messageListItem .flagOnHalf{display:none;color:orange}.messageList .b-content .messageListItem .forwardFlag,.messageList .b-content .messageListItem .replyFlag{display:none}.messageList .b-content .messageListItem.answered .replyFlag{display:inline-block}.messageList .b-content .messageListItem.forwarded .forwardFlag{display:inline-block}.messageList .b-content .messageListItem.withAttachments .attachment{display:inline-block;color:#666;text-shadow:0 1px 0 #eee}.messageList .b-content .messageListItem.hasUnseenSubMessage{background-color:#ffffd9}.messageList .b-content .messageListItem.hasUnseenSubMessage .sidebarParent{background-color:#ffdb99}.messageList .b-content .messageListItem.hasUnseenSubMessage.focused .sidebarParent{background-color:#cc8400!important}.messageList .b-content .messageListItem.unseen{background-color:#ffffd9}.messageList .b-content .messageListItem.unseen .sender,.messageList .b-content .messageListItem.unseen .subject,.messageList .b-content .messageListItem.unseen .subject-suffix{font-weight:700}.messageList .b-content .messageListItem.unseen .sidebarParent{background-color:orange}.messageList .b-content .messageListItem.unseen.focused .sidebarParent{background-color:#cc8400!important}.messageList .b-content .messageListItem.checked .sidebarParent{background-color:#69a8f5!important}.messageList .b-content .messageListItem.checked.focused .sidebarParent{background-color:#217ef0!important}.messageList .b-content .messageListItem.selected{background-color:#dfefff;z-index:101}.messageList .b-content .messageListItem.selected .sidebarParent{background-color:#398cf2!important}.messageList .b-content .messageListItem.selected .delimiter{background-color:#398cf2;opacity:.2}.messageList .b-content .messageListItem.selected+.messageListItem .delimiter{background-color:#398cf2;opacity:.3}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOff,.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOn{display:none}.messageList .b-content .messageListItem.hasFlaggedSubMessage .flagOnHalf{display:inline-block}.messageList .b-content .messageListItem.flagged .flagOff,.messageList .b-content .messageListItem.flagged .flagOnHalf{display:none}.messageList .b-content .messageListItem.flagged .flagOn{display:inline-block}.messageList.message-focused .b-message-list-wrapper{background-color:#000}.messageList.message-focused .b-content{opacity:.97}.messageList.hideMessageListCheckbox .checkboxCkeckAll,.messageList.hideMessageListCheckbox .checkedParent{display:none!important}.messageList.hideMessageListCheckbox .sidebarParent{margin-right:10px!important}html.ssm-state-desktop-large .messageList .b-content .messageListItem{font-size:13px}html.ssm-state-desktop-large .messageList .b-content .messageListItem .dateParent{font-size:13px}html.cssanimations .messageList .line-loading{height:5px!important}.draggablePlace{z-index:10003;color:#fff;background-color:#333;background-color:rgba(0,0,0,.5);padding:4px 10px;min-width:30px;height:20px;cursor:pointer;cursor:move}html.rl-mobile #rl-sub-left .messageList .inputSearch{width:160px!important}html.rl-no-preview-pane .messageView{display:none}html.rl-no-preview-pane .messageView.message-selected{display:block}.messageView{z-index:100}.messageView .toolbar{position:absolute;top:0;right:0;left:0;height:30px;padding:10px 0;color:#fff}.messageView .b-content{position:absolute;margin:0;top:58px;bottom:13px;right:8px;left:-2px;border:1px solid #aaa;border-radius:3px;background-color:#fff}.messageView .b-content .b-message-view-checked-helper{text-align:center;font-size:70px;line-height:70px;padding-top:100px;color:#999}.messageView .b-content .b-message-view-checked-helper .icon-mail{font-size:100px;font-size:50px;line-height:90px;padding-left:10px}.messageView .b-content .logoPlace{text-align:center}.messageView .b-content .b-message-view-desc{text-align:center;font-size:24px;line-height:30px;color:#999;padding:120px 10px 0 10px}.messageView .b-content .b-message-view-desc.error{color:#da4f49}.messageView .b-content .b-message-view-iframe-backdrop{display:none;background:0 0;position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;opacity:.1}.messageView .b-content .content{-webkit-overflow-scrolling:touch}.messageView .b-content .message-fixed-button-toolbar{z-index:100;position:absolute;top:33px;right:10px}.messageView .b-content .infoParent{cursor:pointer;margin:0 2px 0 5px;opacity:.3}.messageView .b-content .infoParent:hover{opacity:.6}.messageView .b-content .flagParent{cursor:pointer;margin:0 20px 0 2px}.messageView .b-content .flagParent .flagOn{color:orange}.messageView .b-content .flagParent .flagOff{opacity:.5}.messageView .b-content .flagParent .flagOff:hover{opacity:1}.messageView .b-content .messageItemHeader{position:absolute;padding:10px;background-color:#f8f8f8;border-top:0;border-bottom:1px solid #ddd;border-top-right-radius:5px;border-top-left-radius:5px;z-index:1;top:0;left:0;right:0}.messageView .b-content .messageItemHeader .fromPic{display:inline-block;width:50px;height:50px;float:left;padding:2px;margin:0 5px 0 0;background:#fff;border:1px solid #ccc;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box}.messageView .b-content .messageItemHeader .subjectParent{font-size:18px;font-weight:700;-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;margin-bottom:8px;line-height:100%;height:22px;vertical-align:middle}.messageView .b-content .messageItemHeader .messageButtons{margin-top:5px}.messageView .b-content .messageItemHeader .informationShort{margin:4px 0;margin-left:5px;margin-right:50px}.messageView .b-content .messageItemHeader .informationShort a{color:#369;text-decoration:underline;cursor:pointer;padding:2px}.messageView .b-content .messageItemHeader .informationShort a:focus{outline:1px;outline-style:dotted}html.rl-mobile .messageView .b-content .messageItemHeader .informationShort{-o-text-overflow:ellipsis;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.messageView .b-content .messageItemHeader .informationShortWrp{max-height:100px;overflow-y:auto;min-height:30px;margin-top:4px}.messageView .b-content .messageItemHeader .informationFull{margin-top:10px;border:1px solid #ddd;background-color:#fff;border-radius:5px;padding:8px 0;overflow:hidden}.messageView .b-content .messageItemHeader .informationFull .size{margin-left:4px}.messageView .b-content .messageItemHeader .informationFull table{width:100%}.messageView .b-content .messageItemHeader .informationFull table,.messageView .b-content .messageItemHeader .informationFull td,.messageView .b-content .messageItemHeader .informationFull tr{border-spacing:0}.messageView .b-content .messageItemHeader .informationFull td{padding:0 10px;vertical-align:top;min-width:43px}.messageView .b-content .messageItemHeader .informationFull td:first-child{border-right:1px solid #ddd;text-align:right;width:1%}.messageView .b-content .messageItemHeader .informationFull .uiLabel{white-space:nowrap}.messageView .b-content .messageItemHeader .informationFull .uiLabelValue{word-break:break-all}.messageView .b-content .messageItemHeader .emptySubjectText{display:none;font-style:italic;font-weight:400;color:#999}.messageView .b-content .messageItemHeader.emptySubject .emptySubjectText{display:inline}.messageView .b-content .messageItem{position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:3px}.messageView .b-content .messageItem .buttonFull,.messageView .b-content .messageItem .buttonUnFull,.messageView .b-content .messageItem .buttonUp{display:inline-block;position:fixed;right:25px;bottom:25px;height:30px;width:30px;text-align:center;vertical-align:middle;line-height:30px;background-color:transparent;background-color:#fff;border:1px solid #333;color:#333;z-index:2;cursor:pointer;border-radius:5px;opacity:.5}.messageView .b-content .messageItem .buttonFull:hover,.messageView .b-content .messageItem .buttonUnFull:hover,.messageView .b-content .messageItem .buttonUp:hover{opacity:.8;border-color:#666;background-color:#888;color:#fff}.messageView .b-content .messageItem .buttonUp{right:65px;z-index:0}.messageView .b-content .messageItem .buttonUnFull,.messageView .b-content .messageItem .buttonUp{display:none}.messageView .b-content .messageItem .loading{text-align:center;font-size:24px;color:grey;padding-top:50px}.messageView .b-content .messageItem .line-loading{height:0}.messageView .b-content .messageItem .pgpEncrypted,.messageView .b-content .messageItem .pgpSigned,.messageView .b-content .messageItem .readReceipt,.messageView .b-content .messageItem .showImages{cursor:pointer;padding:10px 15px;border-bottom:1px solid #ddd;background-color:#eee}.messageView .b-content .messageItem .pgpInfo{padding:5px 15px;border-bottom:1px solid #ddd;background-color:#fcf8e3}.messageView .b-content .messageItem .pgpInfo.success{background-color:#e9f4ff}.messageView .b-content .messageItem .readReceipt{background-color:#ffffd9}.messageView .b-content .messageItem .attachmentsPlace{padding:10px 10px 6px 10px;background:#eee;border-bottom:1px solid #ddd;position:relative}.messageView .b-content .messageItem .attachmentsPlace .attachmentList{margin:0}.messageView .b-content .messageItem .attachmentsPlace .checkedParent{display:none}.messageView .b-content .messageItem .attachmentsPlace.selection-mode .checkedParent{display:inline-block}.messageView .b-content .messageItem .attachmentsPlace.unselectedAttachmentsError .attachmentItem{-webkit-box-shadow:0 1px 4px red;box-shadow:0 1px 4px red;-webkit-box-shadow:0 1px 5px rgba(255,0,0,.4);box-shadow:0 1px 5px rgba(255,0,0,.4);-webkit-box-shadow:0 0 0 1px rgba(255,0,0,.2),0 1px 5px rgba(255,0,0,.3);box-shadow:0 0 0 1px rgba(255,0,0,.2),0 1px 5px rgba(255,0,0,.3)}.messageView .b-content .messageItem .attachmentsPlace .controls-handle{position:absolute;bottom:5px;right:8px;color:#999;cursor:pointer}.messageView .b-content .messageItem .attachmentsControls{padding:7px 5px 7px 14px;background:#e8e8e8;border-bottom:1px solid #ddd}.messageView .b-content .messageItem .rlBlockquoteSwitcher{background-color:#eee;border:1px solid #999;display:inline-block;width:30px;height:14px;line-height:14px;text-align:center;cursor:pointer;margin:10px 0;opacity:.5}.messageView .b-content .messageItem .rlBlockquoteSwitcher:hover{opacity:1}.messageView .b-content .messageItem .bodySubHeader{z-index:2}.messageView .b-content .messageItem .bodyText{color:#000;font-family:Arial,Verdana,Geneva,sans-serif}.messageView .b-content .messageItem .bodyText .b-text-part{height:100%}.messageView .b-content .messageItem .bodyText .b-text-part div[data-x-div-type=html]{height:100%}.messageView .b-content .messageItem .bodyText .b-text-part div[data-x-div-type=html] div[data-x-div-type=body]{height:100%}.messageView .b-content .messageItem .bodyText .b-text-part a{color:#00f;text-decoration:underline}.messageView .b-content .messageItem .bodyText .b-text-part a:visited{color:#609}.messageView .b-content .messageItem .bodyText .b-text-part a:active{color:red}.messageView .b-content .messageItem .bodyText .b-text-part blockquote{border-left:2px solid #000;padding:0 10px;margin:0}.messageView .b-content .messageItem .bodyText .b-text-part .rl-bq-switcher.hidden-bq{display:none}.messageView .b-content .messageItem .bodyText .b-text-part.html div[data-x-div-type=body]{margin:15px}.messageView .b-content .messageItem .bodyText .b-text-part.html img{max-width:100%}.messageView .b-content .messageItem .bodyText .b-text-part.html code,.messageView .b-content .messageItem .bodyText .b-text-part.html pre{margin:0;padding:0;background:#fff;border:none;border-radius:0;font-family:Monaco,Menlo,Consolas,'Courier New',monospace;display:block;word-break:normal;word-wrap:break-word;background-color:#f9f9f9}.messageView .b-content .messageItem .bodyText .b-text-part.html code{display:inline;padding:2px 5px}.messageView .b-content .messageItem .bodyText .b-text-part.html pre{padding:5px 10px;border-radius:5px;background-color:#f9f9f9}.messageView .b-content .messageItem .bodyText .b-text-part.html pre>code{padding:0}.messageView .b-content .messageItem .bodyText .b-text-part.plain{padding:15px;font-family:Monaco,Menlo,Consolas,'Courier New',monospace}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre{margin:0;padding:0;background:#fff;border:none;font-family:Monaco,Menlo,Consolas,'Courier New',monospace;display:block;word-break:normal}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre.b-plain-openpgp{display:inline-block;padding:6px 10px;border:1px dashed #666;background:#fff;word-break:break-all}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre.b-plain-openpgp.success{border-color:green;background-color:rgba(0,255,0,.03)}.messageView .b-content .messageItem .bodyText .b-text-part.plain pre.b-plain-openpgp.error{border-color:red;background-color:rgba(255,0,0,.03)}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote{border-left:2px solid #00f;color:#00f}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote{border-left:2px solid green;color:green}.messageView .b-content .messageItem .bodyText .b-text-part.plain blockquote blockquote blockquote{border-left:2px solid red;color:red}.messageView .b-content .messageItem .bodyText .b-text-part .b-openpgp-control{display:inline-block;cursor:pointer;color:#777}.messageView .b-content .messageItem .bodyText .b-text-part .b-openpgp-control:hover{color:#111}.messageView .b-content .messageItem .bodyText .b-text-part .b-openpgp-control.success{color:green;cursor:help}.messageView .b-content .messageItem .bodyText .b-text-part .b-openpgp-control.error{color:red}.messageView.message-focused .b-content{z-index:101;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);border-radius:3px;border-color:#9d9d9d}.messageView .thread-controls .dropdown-toggle{padding-left:10px;padding-right:10px}.messageView .thread-controls.open .dropdown-toggle{padding-left:10px;padding-right:10px}.messageView .thread-list .e-link{padding:4px 8px 6px 10px}.messageView .thread-list.hide-more .thread-list-message.more-that{display:none}.messageView .thread-list .thread-date{font-size:13px;color:#999}.messageView .thread-list .more-threads{text-align:center;padding:8px;background-color:#f5f5f5;color:#555;text-decoration:underline;border-top:1px dashed #555}html.rl-resizer .b-message-view-iframe-backdrop{display:block!important}html.rl-no-preview-pane .messageView .toolbar{padding-left:1px}html.rl-no-preview-pane .messageView .b-content{top:50px;left:0;bottom:5px;right:5px;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);border-radius:5px}html.rl-bottom-preview-pane .messageView .b-content{bottom:5px}html.cssanimations .messageItem .line-loading{height:5px!important}html.rl-message-fullscreen #rl-bottom,html.rl-message-fullscreen #rl-left{display:none!important}html.rl-message-fullscreen #rl-right .RL-MailMessageList,html.rl-message-fullscreen #rl-right .RL-MailMessageView .messageView .toolbar,html.rl-message-fullscreen #rl-right .RL-SettingsPane,html.rl-message-fullscreen #rl-right .RL-SystemDropDown{display:none!important}html.rl-message-fullscreen .messageView .b-content{position:fixed!important;margin:5px!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:10000!important;border:1px solid #aaa!important;border-radius:3px!important}html .messageItem .buttonUp{display:none!important}html .messageItem.scroller-shadow-top .buttonUp{display:inline-block!important}html.rl-desktop .messageItem .buttonFull,html.rl-desktop .messageItem .buttonUp{display:none!important}html.rl-desktop .messageItem:hover .buttonFull,html.rl-desktop .messageItem:hover.scroller-shadow-top .buttonUp{display:inline-block!important}html.rl-message-fullscreen .messageItem .buttonUnFull{display:inline-block!important}html.rl-message-fullscreen .messageItem .buttonFull{display:none!important}html.rl-message-fullscreen .messageItem .buttonUp{display:none!important}html.rl-message-fullscreen .messageItem.scroller-shadow-top .buttonUp{display:inline-block!important}.b-contacts-content .control-group .control-label.fix-width{width:50px}.b-contacts-content .control-group .controls.fix-width{margin-left:70px}.b-contacts-content.modal{position:absolute;right:0;top:0;bottom:0;left:0;width:900px;min-height:300px;max-height:700px;margin:auto}.b-contacts-content.modal .modal-body{overflow:auto;height:100%;background-color:#f5f5f5;padding:0}.b-contacts-content.modal .b-header-toolbar{height:40px;background-color:#aaa;color:#fff;background-color:#333;background-color:rgba(0,0,0,.8)!important}.b-contacts-content.modal .b-header-toolbar .close,.b-contacts-content.modal .b-header-toolbar .close-custom{color:#fff;opacity:1}.b-contacts-content.modal .b-header-toolbar .btn{margin-top:4px}.b-contacts-content.modal .b-list-toolbar{padding:0;height:45px;text-align:right;width:220px;-webkit-box-shadow:inset 0 -1px 0 #ccc;box-shadow:inset 0 -1px 0 #ccc}.b-contacts-content.modal .b-list-toolbar .e-search{margin-top:7px;width:200px}.b-contacts-content.modal .b-list-footer-toolbar{position:absolute;left:0;bottom:0;height:105px;width:220px;background-color:#eee;-webkit-box-shadow:inset 0 1px 0 #ccc;box-shadow:inset 0 1px 0 #ccc}.b-contacts-content.modal .b-list-footer-toolbar .footer-pager{padding:8px 10px 0 0}.b-contacts-content.modal .b-list-content{position:absolute;top:45px;bottom:105px;left:0;width:220px;overflow:hidden;overflow-y:auto}.b-contacts-content.modal .b-list-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-list-content .listClear{color:#333;text-align:center;padding:10px;font-size:14px;line-height:13px;background-color:#fff;-webkit-box-shadow:inset 0 -1px 0 #ccc;box-shadow:inset 0 -1px 0 #ccc}.b-contacts-content.modal .b-list-content .listEmptyList,.b-contacts-content.modal .b-list-content .listEmptyListLoading,.b-contacts-content.modal .b-list-content .listEmptySearchList{color:#999;text-align:center;padding:60px 10px;font-size:24px;line-height:30px}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkboxCkeckAll,.b-contacts-content.modal .b-list-content.hideContactListCheckbox .checkedParent{display:none!important}.b-contacts-content.modal .b-list-content.hideContactListCheckbox .sidebarParent{margin-right:10px!important}.b-contacts-content.modal .b-list-content .e-contact-item{position:relative;height:45px;max-height:45px;line-height:45px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100;border-bottom:1px solid #ddd}.b-contacts-content.modal .b-list-content .e-contact-item .delimiter{position:relative;display:block;height:1px;background-color:#999;opacity:.2}.b-contacts-content.modal .b-list-content .e-contact-item .wrapper{padding:0}.b-contacts-content.modal .b-list-content .e-contact-item .sidebarParent{display:inline-block;width:6px;background-color:#eee;float:left;height:100%}.b-contacts-content.modal .b-list-content .e-contact-item.focused .sidebarParent{background-color:#bbb}.b-contacts-content.modal .b-list-content .e-contact-item.deleted{max-height:0;border-color:transparent!important}.b-contacts-content.modal .b-list-content .e-contact-item .checkedParent{display:inline-block;float:left;padding:0 8px 0 6px}.b-contacts-content.modal .b-list-content .e-contact-item .shareParent{display:none;float:right;position:relative;margin:2px 8px 0 5px}.b-contacts-content.modal .b-list-content .e-contact-item .nameParent{display:block;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;color:#333;font-size:16px}.b-contacts-content.modal .b-list-content .e-contact-item .emailParent,.b-contacts-content.modal .b-list-content .e-contact-item .nameParent{white-space:nowrap}.b-contacts-content.modal .b-list-content .e-contact-item .displayEmail,.b-contacts-content.modal .b-list-content .e-contact-item .displayName{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.b-contacts-content.modal .b-list-content .e-contact-item .displayImg{display:inline-block;float:right;position:relative;margin:0 5px}.b-contacts-content.modal .b-list-content .e-contact-item.shared .shareParent{display:inline-block}.b-contacts-content.modal .b-list-content .e-contact-item.checked{z-index:101}.b-contacts-content.modal .b-list-content .e-contact-item.checked .sidebarParent{background-color:#69a8f5}.b-contacts-content.modal .b-list-content .e-contact-item.checked.focused .sidebarParent{background-color:#519af3!important}.b-contacts-content.modal .b-list-content .e-contact-item.selected{background-color:#fff;z-index:102}.b-contacts-content.modal .b-list-content .e-contact-item.selected .sidebarParent{background-color:#398cf2}.b-contacts-content.modal .b-list-content .e-contact-item.selected.focused .sidebarParent{background-color:#217ef0!important}.b-contacts-content.modal .b-view-content-toolbar{background-color:#f5f5f5;padding:7px;position:absolute;top:0;right:0;left:220px;height:31px;text-align:center;-webkit-box-shadow:inset 0 -1px 0 #ccc;box-shadow:inset 0 -1px 0 #ccc}.b-contacts-content.modal .b-view-content-toolbar .button-save-contact.no-disabled.dirty{color:#51a351;font-weight:700}.b-contacts-content.modal .b-view-content-toolbar.read-only .button-save-contact{display:none}.b-contacts-content.modal .b-view-content{position:absolute;top:45px;bottom:60px;left:220px;right:0;overflow:hidden;overflow-y:auto;background-color:#fff;border-left:1px solid #ddd}.b-contacts-content.modal .b-view-content .content{-webkit-overflow-scrolling:touch}.b-contacts-content.modal .b-view-content .contactValueLargeStatic,.b-contacts-content.modal .b-view-content .contactValueStatic,.b-contacts-content.modal .b-view-content .contactValueTextAreaStatic{height:20px;line-height:20px;font-size:18px;display:inline-block;padding:5px 7px;color:#555;display:none}.b-contacts-content.modal .b-view-content.read-only .contactValueLargeStatic,.b-contacts-content.modal .b-view-content.read-only .contactValueStatic,.b-contacts-content.modal .b-view-content.read-only .contactValueTextAreaStatic{display:inline-block}.b-contacts-content.modal .b-view-content.read-only .contactValueInput,.b-contacts-content.modal .b-view-content.read-only .contactValueInputLarge,.b-contacts-content.modal .b-view-content.read-only .contactValueTextArea{display:none}.b-contacts-content.modal .b-view-content .b-contact-view-desc{text-align:center;font-size:24px;line-height:30px;padding-top:120px;color:#999}.b-contacts-content.modal .b-view-content .top-part{padding-top:20px}.b-contacts-content.modal .b-view-content .property-line{margin-bottom:5px}.b-contacts-content.modal .b-view-content .top-row{padding:10px 0;height:30px}.b-contacts-content.modal .b-view-content .add-link{margin-left:2px;padding:5px;font-size:12px;color:#aaa}.b-contacts-content.modal .b-view-content .contactValueLargeStatic,.b-contacts-content.modal .b-view-content .contactValueStatic,.b-contacts-content.modal .b-view-content .contactValueTextAreaStatic{font-size:18px;display:none}.b-contacts-content.modal .b-view-content .contactValueInput,.b-contacts-content.modal .b-view-content .contactValueInputLarge,.b-contacts-content.modal .b-view-content .contactValueTextArea{-webkit-box-shadow:none;box-shadow:none;border-color:#fff;font-size:18px;width:300px}.b-contacts-content.modal .b-view-content .contactValueInput:hover,.b-contacts-content.modal .b-view-content .contactValueInputLarge:hover,.b-contacts-content.modal .b-view-content .contactValueTextArea:hover{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-color:#ccc}.b-contacts-content.modal .b-view-content .contactValueInput:focus,.b-contacts-content.modal .b-view-content .contactValueInputLarge:focus,.b-contacts-content.modal .b-view-content .contactValueTextArea:focus{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-color:#999}.b-contacts-content.modal .b-view-content .contactValueInput::-webkit-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge::-webkit-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea::-webkit-input-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueInput::-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge::-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea::-moz-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueInput:-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge:-moz-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea:-moz-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueInput:-ms-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueInputLarge:-ms-input-placeholder,.b-contacts-content.modal .b-view-content .contactValueTextArea:-ms-input-placeholder{color:#ddd}.b-contacts-content.modal .b-view-content .contactValueTextArea{width:300px}.b-contacts-content.modal .b-view-content .contactValueInputLarge{width:400px}.b-contacts-content.modal .b-view-content .hasError .contactValueInput{color:#ee5f5b;border-color:#ee5f5b}.b-contacts-content.modal .b-view-content .e-save-trigger{position:absolute;top:25px;left:10px}.b-contacts-content.modal .b-view-content .e-read-only-sign{display:none;position:absolute;top:20px;right:40px}.b-contacts-content.modal .b-view-content .e-share-sign{position:absolute;top:20px;right:20px;cursor:pointer}.b-contacts-content.modal .b-view-content.read-only .e-read-only-sign{display:inline-block}.b-contacts-content.modal .b-view-content.read-only .e-share-sign{display:none}.b-contacts-content .e-contact-item{position:relative;height:55px;max-height:60px;line-height:22px;overflow:hidden;cursor:pointer;margin:0;border:0 solid transparent;z-index:100;border-bottom:1px solid #ddd}html.rl-mobile .b-contacts-content .b-list-content,html.rl-mobile .b-contacts-content .b-list-footer-toolbar,html.rl-mobile .b-contacts-content .b-list-toolbar{width:170px}html.rl-mobile .b-contacts-content .b-list-toolbar .e-search{width:150px}html.rl-mobile .b-contacts-content .b-view-content,html.rl-mobile .b-contacts-content .b-view-content-toolbar{left:170px}.b-compose.modal{width:850px;margin:10px auto}.b-compose.modal .modal-body{overflow:auto;padding:0}.b-compose .attachmentAreaParent,.b-compose .textAreaParent{overflow:hidden;position:relative}.b-compose .attachmentAreaParent{padding:10px 10px 6px 10px;background:#ddd;border-top:1px solid #ccc;overflow-y:auto}.b-compose .attachmentAreaParent .no-attachments-desc{padding:50px 10px;text-align:center;font-size:24px;color:#666;text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 rgba(255,255,255,.5)}.b-compose .attachmentAreaParent .attachmentList{margin:0;padding:10px}.b-compose .b-header-toolbar{height:40px;color:#fff;background-color:#aaa;background-color:#333;background-color:rgba(0,0,0,.8)!important}.b-compose .b-header-toolbar .close,.b-compose .b-header-toolbar .close-custom,.b-compose .b-header-toolbar .minimize-custom{opacity:1;color:#fff;border-color:#eee;font-size:24px;line-height:24px}.b-compose .b-header-toolbar .btn.disabled.button-delete{visibility:hidden}.b-compose .b-header-toolbar .button-delete,.b-compose .b-header-toolbar .button-save,.b-compose .b-header-toolbar .saved-text{margin-left:8px}.b-compose .b-header-toolbar .button-close,.b-compose .b-header-toolbar .button-skip{margin-left:8px}.b-compose .b-header-toolbar .disabled.button-delete{margin-left:0}.b-compose .b-header{padding:10px;background-color:#eee;color:#333}html.rl-mobile .b-compose .b-header{overflow:scroll}.b-compose .b-header .e-identity{color:#333;text-decoration:none;font-weight:700}.b-compose .b-header .e-identity:hover{color:#333;text-decoration:none}.b-compose .b-header .e-identity.multiply{cursor:pointer;border-bottom:1px dashed #555}.b-compose .b-header .e-row{line-height:30px}.b-compose .b-header .e-label{text-align:right;width:1%;min-width:70px;padding:6px 10px}html.rl-mobile .b-compose .b-header .e-label{min-width:50px;padding:6px 10px 6px 0}.b-compose .b-header .e-value{padding:2px 0}.b-compose .b-header .e-value input[type=text],.b-compose .b-header .e-value textarea{width:98%}.b-compose .b-header .e-value textarea{height:40px}.b-compose .b-header .error-desc{color:red}.b-compose .b-header .error-to{color:red;font-weight:700}.b-compose .b-header .b-appachments .b-attacment{line-height:20px;padding-bottom:10px}.b-compose .b-header .b-appachments .b-attacment-in-process{line-height:20px;padding-bottom:10px}.b-compose .b-header .b-appachments .b-attacment-in-process .uploading{display:none;padding-right:5px}.b-compose .b-header .b-appachments .b-attacment-in-process.uploading .uploading{display:inline}.b-compose .b-header .b-appachments .b-attacment-in-process .upload-progress{font-weight:700}.b-compose .b-header .b-appachments .b-attacment-in-process.error .namedStr{color:#888}.b-compose .b-header .b-appachments .b-attacment-in-process .error{color:red}.b-compose .b-header .b-appachments .b-attacment-in-process .close,.b-compose .b-header .b-appachments .b-attacment-in-process .close-custom{float:left;padding-right:13px}.b-compose .cke_chrome{border-left-width:0!important;border-right-width:0!important;border-bottom-width:0!important}.b-compose .b-attachment-button{display:inline-block}.b-compose .b-attachment-place{position:absolute;left:5px;right:5px;top:5px;bottom:5px;border:2px #777 dashed;z-index:300;line-height:119px;text-align:center;background-color:#efefef;font-size:24px;border-radius:10px}.b-compose .b-attachment-place.dragAndDropOver{background-color:#fff}.b-admin-left .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 0 0 8px}.b-admin-left .b-content{position:absolute;top:68px;bottom:8px;left:0;right:0;overflow:hidden}.b-admin-left .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-menu .e-item{overflow:hidden;text-decoration:none;outline:0}.b-admin-menu .e-link{position:relative;display:block;height:30px;line-height:29px;cursor:pointer;font-size:18px;z-index:1;cursor:default;background-color:transparent;color:#888;padding:4px 10px;outline:0;text-decoration:none}.b-admin-menu .e-item.selectable .e-link{cursor:pointer}.b-admin-menu .e-item.selectable.selected .e-link,.b-admin-menu .e-item.selectable:hover .e-link{background-color:#555;color:#fff}.b-admin-right .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 8px;color:#fff;text-shadow:0 1px 1px #000}.b-admin-right .b-content{position:absolute;top:58px;bottom:8px;left:0;right:8px;overflow-y:auto;z-index:2;background-color:#fff;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);border-radius:5px}.b-admin-right .b-content .content{-webkit-overflow-scrolling:touch}.b-admin-right .b-settings-content{padding:20px;padding-left:30px}.b-admin-right .b-settings-content .legend{width:670px}.b-admin-right .b-settings-content .nav-tabs{width:670px}html.rl-mobile .b-settings-content .legend{width:auto}.b-admin-general .flag-selector{padding-top:5px}.b-admin-general .flag-name{border-bottom:1px dashed #555;cursor:pointer;padding:2px 0}.b-admin-general .flag-name:focus{outline:1px;outline-style:dotted}.b-admin-branding .disabled-form{opacity:.8}.b-admin-branding .custom-css-wrapper textarea{font-family:Monaco,Menlo,Consolas,'Courier New',monospace}.b-admin-domains .process-place{width:600px;padding:14px 0;text-align:center;visibility:hidden}.b-admin-domains-list-table{width:600px}.b-admin-domains-list-table .e-item .e-action{cursor:pointer}.b-admin-domains-list-table .e-item .domain-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box}.b-admin-domains-list-table .e-item .domain-alias{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;color:#bbb;padding-left:5px}.b-admin-domains-list-table .e-item.disabled .domain-alias,.b-admin-domains-list-table .e-item.disabled .domain-name{color:#bbb}.b-admin-domains-list-table .e-item .button-delete{margin-right:15px;visibility:hidden;opacity:0}.b-admin-domains-list-table .e-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-admin-domains-list-table .e-item .delete-domain,.b-admin-domains-list-table .e-item .disabled-domain{cursor:pointer;opacity:.5}.b-admin-domains-list-table .e-item.disabled .disabled-domain{opacity:.5}.b-admin-domains-list-table .e-item .delete-domain:hover,.b-admin-domains-list-table .e-item .disabled-domain:hover{opacity:1}.b-domain-alias-content.modal{width:330px}.b-domain-alias-content .modal-header{background-color:#fff}.b-domain-alias-content .error-desc{color:red}.b-domain-content.modal{width:810px}.b-domain-content .modal-header{background-color:#fff}.b-domain-content .modal-body{position:relative;overflow:hidden;width:1600px;height:400px;left:0}.b-domain-content.domain-edit .modal-body{height:340px}.b-domain-content.domain-second-page .modal-body{left:-800px}.b-domain-content .domain-desc{color:#666;line-height:20px;background-color:#f9f9f9;padding:8px;border:1px solid #eee;border-radius:3px;margin:-5px 0}.b-domain-content .domain-desc i{font-style:normal;color:red}.b-domain-content .error-desc{color:red}.b-domain-content .testing-done.imap-header,.b-domain-content .testing-done.sieve-header,.b-domain-content .testing-done.smtp-header{color:green;font-weight:700}.b-domain-content .testing-error.imap-header,.b-domain-content .testing-error.sieve-header,.b-domain-content .testing-error.smtp-header{color:red}.b-admin-packages .alert{width:650px}.b-admin-packages .process-place{visibility:hidden}.b-admin-packages-list-table{width:700px}.b-admin-packages-list-table .e-item .package-img{font-size:12px;margin-right:2px}.b-admin-packages-list-table .e-item .package-name.core{font-weight:700}.b-admin-packages-list-table .e-item .package-desc{color:#999;font-size:12px}.b-admin-packages-list-table .e-item .e-action{cursor:pointer}.b-admin-packages-list-table .e-item .package-actions-parent,.b-admin-packages-list-table .e-item .package-release-parent{text-align:center}.b-admin-packages-list-table .e-item .package-actions-parent{vertical-align:middle}.b-admin-plugins .process-place{visibility:hidden}.b-admin-plugins-list-table.disabled{opacity:.5;background-color:#eee}.b-admin-plugins-list-table .e-item .e-action{cursor:pointer}.b-admin-plugins-list-table .e-item .plugin-img{font-size:12px;margin-right:2px}.b-admin-plugins-list-table .e-item.disabled .plugin-img,.b-admin-plugins-list-table .e-item.disabled .plugin-name{color:#bbb}.b-admin-plugins-list-table .e-item.disabled .disabled-plugin{opacity:.5}.b-admin-plugin-property .help-block{margin-bottom:5px}.b-plugin-content.modal{width:660px}.b-plugin-content.modal .modal-body{overflow:auto}.b-plugin-content .modal-header{background-color:#fff}.b-plugin-content .information{display:inline-block;background-color:#ddd;border-radius:10px;cursor:pointer;height:25px;width:30px;text-align:center;padding-top:5px}.b-plugin-content textarea{width:400px;height:70px}.b-admin-about .rl-logo{display:inline-block;width:250px;height:250px;margin-top:-10px;margin-bottom:-10px;background-image:url(images/rainloop-logo.png)}.b-admin-about .rl-desc{margin-top:20px;margin-left:-20px}.popups .b-activate-content{width:700px}.popups .b-activate-content .modal-header{background-color:#fff}.popups .b-activate-content .help-inline{padding-left:0}.b-settins-left .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 0 0 8px}.b-settins-left .b-footer{position:absolute;bottom:20px;right:0;left:0;height:20px;padding:0 10px 0 5px;z-index:101}.b-settins-left .b-content{position:absolute;top:68px;bottom:8px;left:0;right:0;overflow:hidden}.b-settins-left .b-content .content{-webkit-overflow-scrolling:touch}.b-settings-menu .e-item{overflow:hidden;text-decoration:none;outline:0}.b-settings-menu .e-link{position:relative;display:block;height:30px;line-height:29px;font-size:18px;z-index:1;cursor:default;background-color:transparent;color:#888;padding:4px 10px;outline:0;text-decoration:none}.b-settings-menu .e-item.selectable .e-link{cursor:pointer}.b-settings-menu .e-item.selectable.selected .e-link,.b-settings-menu .e-item.selectable:hover .e-link{background-color:#555;color:#fff}.b-settins-right .b-toolbar{position:absolute;top:0;right:0;left:0;height:34px;padding:8px 5px;color:#fff}.b-settins-right .b-content{position:absolute;top:50px;bottom:8px;left:0;right:8px;overflow-y:auto;z-index:2;background-color:#fff;border:1px solid #aaa;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.2);box-shadow:0 2px 8px rgba(0,0,0,.2);border-radius:5px}.b-settins-right .b-content .content{-webkit-overflow-scrolling:touch}.b-settins-right .b-settings-content{padding:20px;padding-left:30px}.b-settins-right .b-settings-content .legend{width:600px}html.rl-mobile .b-settings-content .legend{width:auto}html.rl-mobile .b-settings-general{margin-right:15px}.b-settings-general .notification-desc-denied{color:#999;display:none}.b-settings-general .denied-by-browser .notification-desc-denied{display:inline}.b-settings-general .denied-by-browser .notification-desc{color:#999}.b-settings-general .flag-selector{padding-top:5px}.b-settings-general .flag-name{border-bottom:1px dashed #555;cursor:pointer;padding:2px 0}.b-settings-general .flag-name:focus{outline:1px;outline-style:dotted}html.rl-mobile .b-settings-accounts{margin-right:15px}.b-settings-accounts .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-accounts .list-table{width:600px}.b-settings-accounts .list-table td{padding:4px 8px;line-height:30px}.b-settings-accounts .list-table .drag-handle{color:#eee}.b-settings-accounts .list-table tr:hover .drag-handle{color:#aaa}.b-settings-accounts .list-table .account-img,.b-settings-accounts .list-table .identity-img{font-size:12px;margin-right:5px}.b-settings-accounts .list-table .account-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:22px}.b-settings-accounts .list-table .identity-default{cursor:pointer;color:#ccc}.b-settings-accounts .list-table .identity-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:22px;cursor:pointer}.b-settings-accounts .accounts-list-top-padding,.b-settings-accounts .identities-list-top-padding{display:inline-block;height:5px;width:5px}.b-settings-accounts .account-item{white-space:nowrap}.b-settings-accounts .account-item .e-action{cursor:pointer}.b-settings-accounts .account-item .drag-handle{cursor:pointer;cursor:all-scroll}.b-settings-accounts .account-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0}.b-settings-accounts .account-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-accounts .account-item .delete-account{cursor:pointer;opacity:.5}.b-settings-accounts .account-item.ui-sortable-helper{background:#f5f5f5;border:1px solid #ddd}.b-settings-accounts .account-item.ui-sortable-helper .button-delete,.b-settings-accounts .account-item.ui-sortable-helper .delete-account{display:none}.b-settings-accounts .account-item.ui-sortable-helper td{border-width:0}.b-settings-accounts .identity-item{white-space:nowrap}.b-settings-accounts .identity-item .e-action{cursor:pointer}.b-settings-accounts .identity-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0}.b-settings-accounts .identity-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-accounts .identity-item .delete-identity{cursor:pointer;opacity:.5}.b-settings-accounts .identity-item.ui-sortable-helper{background:#f5f5f5;border:1px solid #ddd}.b-settings-accounts .identity-item.ui-sortable-helper .button-delete,.b-settings-accounts .identity-item.ui-sortable-helper .delete-identity{display:none}.b-settings-accounts .identity-item.ui-sortable-helper td{border-width:0}html.rl-mobile .b-settings-templates{margin-right:15px}.b-settings-templates .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-templates .list-table{width:600px}.b-settings-templates .list-table td{padding:4px 8px;line-height:30px}.b-settings-templates .list-table .drag-handle{color:#eee}.b-settings-templates .list-table tr:hover .drag-handle{color:#aaa}.b-settings-templates .list-table .template-img{font-size:12px;margin-right:5px}.b-settings-templates .list-table .template-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:22px}.b-settings-templates .templates-list-top-padding{display:inline-block;height:5px;width:5px}.b-settings-templates .template-item .e-action{cursor:pointer}.b-settings-templates .template-item .drag-handle{cursor:pointer;cursor:all-scroll}.b-settings-templates .template-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0}.b-settings-templates .template-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-templates .template-item .delete-template{cursor:pointer;opacity:.5}.b-settings-templates .template-item.ui-sortable-helper{background:#f5f5f5;border:1px solid #ddd}.b-settings-templates .template-item.ui-sortable-helper .button-delete,.b-settings-templates .template-item.ui-sortable-helper .delete-template{display:none}.b-settings-templates .template-item.ui-sortable-helper td{border-width:0}html.rl-mobile .b-settings-open-pgp{margin-right:15px}.b-settings-open-pgp .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-open-pgp .list-table{width:750px}.b-settings-open-pgp .list-table td{padding:4px 8px;line-height:30px}.b-settings-open-pgp .list-table .open-pgp-key-img{margin-right:10px;vertical-align:top}.b-settings-open-pgp .list-table .open-pgp-key-img .svg-icon{width:12px;height:12px}.b-settings-open-pgp .list-table .open-pgp-key-id,.b-settings-open-pgp .list-table .open-pgp-key-user{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:22px;cursor:default}.b-settings-open-pgp .list-table .open-pgp-key-user-address:first-child{line-height:30px;margin-bottom:-4px}.b-settings-open-pgp .open-pgp-key-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0}.b-settings-open-pgp .open-pgp-key-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-open-pgp .open-pgp-key-item .delete-open-pgp-key,.b-settings-open-pgp .open-pgp-key-item .view-open-pgp-key{cursor:pointer;opacity:.7}.b-settings-open-pgp .open-pgp-key-item .delete-open-pgp-key:hover,.b-settings-open-pgp .open-pgp-key-item .view-open-pgp-key:hover{opacity:.9}html.rl-mobile .b-settings-folders{margin-right:35px}.b-settings-folders.ignore-folder-subscribe .subscribe-folder,.b-settings-folders.ignore-folder-subscribe .unsubscribe-folder{display:none}.b-settings-folders .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-folders .folders-list-error{width:550px;margin:10px 0}.b-settings-folders .list-table{width:600px}.b-settings-folders .list-table .e-action{cursor:pointer}.b-settings-folders .list-table td{padding:4px 8px;line-height:30px}.b-settings-folders .list-table .folder-padding{display:inline-block;width:0}.b-settings-folders .list-table .folder-name{display:inline-block;word-break:break-all;white-space:pre-wrap;-webkit-box-sizing:border-box;box-sizing:border-box;margin-left:7px;line-height:22px;cursor:default}.b-settings-folders .list-table .folder-system-name{display:inline-block;line-height:22px;color:#999;cursor:default}.b-settings-folders .list-table .folder-name.can-be-edited:hover{border-bottom:1px dashed #333;cursor:pointer}.b-settings-folders .list-table .folder-name-input{border-width:1px;margin-bottom:0;margin-left:-4px}.b-settings-folders .folder-item.system .folder-name{font-weight:700}.b-settings-folders .folder-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0}.b-settings-folders .folder-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-folders .folder-item .check-folder,.b-settings-folders .folder-item .delete-folder,.b-settings-folders .folder-item .subscribe-folder,.b-settings-folders .folder-item .uncheck-folder,.b-settings-folders .folder-item .unsubscribe-folder{cursor:pointer;opacity:.6}.b-settings-folders .folder-item .unsubscribe-folder{opacity:.2}.b-settings-folders .folder-item .uncheck-folder{opacity:.2}.b-settings-folders .folder-padding.deep-1{width:25px}.b-settings-folders .folder-padding.deep-2{width:40px}.b-settings-folders .folder-padding.deep-3{width:55px}.b-settings-folders .folder-padding.deep-4{width:70px}.b-settings-folders .folder-padding.deep-5{width:85px}.b-settings-content .b-settings-themes .legend{width:100%}html.rl-mobile .b-settings-content .b-settings-theme .legend{width:auto}html.rl-mobile .b-themes-list{margin-right:15px}.b-themes-list .e-item{display:inline-block;border:2px solid transparent;cursor:pointer;color:#000;background-color:#fff;padding:16px;margin:5px}.b-themes-list .e-item:hover{border:2px solid grey}.b-themes-list .e-item.selected{background-color:#eee;border:2px solid #000}.b-themes-list .e-item .e-image{width:100px;height:100px;border:1px solid #ddd}html.rl-mobile .b-settings-filters{margin-right:15px}.b-settings-filters .process-place{text-align:center;width:600px;padding:14px 0}.b-settings-filters .list-table{width:600px}.b-settings-filters .list-table td{padding:4px 8px;line-height:30px}.b-settings-filters .list-table td.drag-wrapper{padding:4px 0}.b-settings-filters .list-table .drag-handle{color:#eee}.b-settings-filters .list-table tr:hover .drag-handle{color:#aaa}.b-settings-filters .list-table .filter-img{font-size:12px;margin-right:5px}.b-settings-filters .list-table .filter-name,.b-settings-filters .list-table .filter-sub-name{display:inline-block;word-break:break-all;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:22px;cursor:pointer}.b-settings-filters .list-table .filter-sub-name{color:#aaa}.b-settings-filters .filters-list-top-padding{display:inline-block;height:5px;width:5px}.b-settings-filters .filter-item{white-space:nowrap}.b-settings-filters .filter-item .e-action{cursor:pointer}.b-settings-filters .filter-item .drag-handle{cursor:pointer;cursor:all-scroll}.b-settings-filters .filter-item .button-delete{margin-right:15px;margin-top:5px;visibility:hidden;opacity:0}.b-settings-filters .filter-item .delete-access.button-delete{visibility:visible;margin-right:0;opacity:1}.b-settings-filters .filter-item .delete-filter{cursor:pointer;opacity:.5}.b-settings-filters .filter-item.ui-sortable-helper{background:#f5f5f5;border:1px solid #ddd}.b-settings-filters .filter-item.ui-sortable-helper .button-delete,.b-settings-filters .filter-item.ui-sortable-helper .delete-filter{display:none}.b-settings-filters .filter-item.ui-sortable-helper td{border-width:0}.rl-cmd{position:absolute;bottom:0;left:0;right:0;top:auto;height:0;z-index:10000;background:rgba(0,0,0,.85);border-top:1px solid #000;overflow:hidden;font-family:monospace;-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;transition:height .1s ease-out}.rl-cmd.opened{height:250px}.rl-cmd .rl-cmd-clr-error{color:#cd3131}.rl-cmd .rl-cmd-clr-info{color:#bfbf00}.rl-cmd .rl-cmd-clr-success{color:#31ff40}.rl-cmd .rl-cmd-wrp{position:relative;height:100%}.rl-cmd .rl-cmd-input-helper{color:#666}.rl-cmd .rl-cmd-input-prefix{color:#31ff40;display:inline-block}.rl-cmd .rl-cmd-input-wrp{position:absolute;bottom:0;left:10px;right:10px}.rl-cmd .rl-cmd-input{background:0 0;border:none;color:#fff;display:inline-block;width:calc(100% - 30px);font-family:monospace}.rl-cmd .rl-cmd-input:focus{background:0 0;border:none}.rl-cmd .rl-cmd-history{color:#fff;font-family:monospace;position:absolute;top:10px;bottom:60px;left:10px;right:-30px;overflow:hidden;overflow-x:hidden;overflow-y:auto}@-webkit-keyframes highlight-folder-row{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes highlight-folder-row{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes bounce-me{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounce-me{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.2);transform:scale(1.2)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@keyframes textLoadingAnimationKeyFrame{0%{opacity:1}33%{opacity:0}100%{opacity:1}}@-webkit-keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:60px 0}}@-webkit-keyframes login-form-shake{0%{-webkit-transform:translateX(0);transform:translateX(0)}12.5%{-webkit-transform:translateX(-6px) rotateY(-5deg);transform:translateX(-6px) rotateY(-5deg)}37.5%{-webkit-transform:translateX(5px) rotateY(4deg);transform:translateX(5px) rotateY(4deg)}62.5%{-webkit-transform:translateX(-3px) rotateY(-2deg);transform:translateX(-3px) rotateY(-2deg)}87.5%{-webkit-transform:translateX(2px) rotateY(1deg);transform:translateX(2px) rotateY(1deg)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes login-form-shake{0%{-webkit-transform:translateX(0);transform:translateX(0)}12.5%{-webkit-transform:translateX(-6px) rotateY(-5deg);transform:translateX(-6px) rotateY(-5deg)}37.5%{-webkit-transform:translateX(5px) rotateY(4deg);transform:translateX(5px) rotateY(4deg)}62.5%{-webkit-transform:translateX(-3px) rotateY(-2deg);transform:translateX(-3px) rotateY(-2deg)}87.5%{-webkit-transform:translateX(2px) rotateY(1deg);transform:translateX(2px) rotateY(1deg)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}html.csstransitions.rl-started-trigger.no-mobile .b-login-content .loginFormWrapper{-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px);opacity:.5}#rl-loading{-webkit-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear}html.csstransitions.rl-started-delay #rl-left{-webkit-transition:width .3s ease-out;-o-transition:width .3s ease-out;transition:width .3s ease-out}html.csstransitions.rl-started-delay #rl-right{-webkit-transition:left .3s ease-out,right .3s ease-out;-o-transition:left .3s ease-out,right .3s ease-out;transition:left .3s ease-out,right .3s ease-out}html.csstransitions.rl-started-delay #rl-sub-left,html.csstransitions.rl-started-delay #rl-sub-left .messageList .inputSearch{-webkit-transition:width .3s ease-out;-o-transition:width .3s ease-out;transition:width .3s ease-out}html.csstransitions.rl-started-delay #rl-sub-right{-webkit-transition:left .3s ease-out;-o-transition:left .3s ease-out;transition:left .3s ease-out}html.rgba.cssanimations.backgroundsize .e-strip-animation{background-size:60px 60px;background-image:-o-linear-gradient(315deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(0,0,0,.1) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.1) 50%,rgba(0,0,0,.1) 75%,transparent 75%,transparent);-webkit-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}html.rl-anim .rl-animated-inited{opacity:1;-webkit-transition:opacity .5s linear;-o-transition:opacity .5s linear;transition:opacity .5s linear}html.rl-anim .rl-animated-inited.rl-animated-hidden{opacity:0}html.rl-anim.cssanimations.csstransitions.no-mobile .b-login-content .errorAnimated{-webkit-animation:login-form-shake .4s ease-in-out;animation:login-form-shake .4s ease-in-out}html.rl-anim.no-mobile .b-login-content .errorAnimated .buttonLogin{color:#b94a48;font-weight:700}html.rl-anim.cssanimations.csstransitions.no-mobile .b-login-content .afterLoginHide{opacity:0}html.rl-anim.csstransitions.no-mobile .btn-group.dropdown.colored-toggle.open .animate-this-icon-on-open{-webkit-animation:bounce-me .5s linear;animation:bounce-me .5s linear}html.rl-anim.csstransitions.no-mobile .b-login-content .loginFormWrapper{-webkit-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}html.rl-anim.csstransitions .button-delete-transitions{-webkit-transition:all .2s linear;-o-transition:all .2s linear;transition:all .2s linear}html.rl-anim.cssanimations .b-folders .e-item .anim-action-class{-webkit-animation:highlight-folder-row .5s linear;animation:highlight-folder-row .5s linear}html.rl-anim.csstransitions .b-folders .btn.buttonContacts{-webkit-transition:margin .3s linear;-o-transition:margin .3s linear;transition:margin .3s linear}html.rl-anim.csstransitions .b-folders .b-content.opacity-on-panel-disabled{-webkit-transition:opacity .3s linear;-o-transition:opacity .3s linear;transition:opacity .3s linear}html.rl-anim.csstransitions .messageList .messageListItem{-webkit-transition:max-height .4s ease;-o-transition:max-height .4s ease;transition:max-height .4s ease}html.rl-anim.csstransitions .messageList .listDragOver{-webkit-transition:all .4s ease;-o-transition:all .4s ease;transition:all .4s ease}html.rl-anim.csstransitions .b-list-content .e-contact-item{-webkit-transition:max-height .4s ease;-o-transition:max-height .4s ease;transition:max-height .4s ease}html.rl-anim.csstransitions .modal.b-domain-content .modal-body{-webkit-transition:left .5s ease;-o-transition:left .5s ease;transition:left .5s ease}html.rl-anim.csstransitions.rl-modal.rl-modal-animation .popups{overflow:hidden}html.rl-anim.csstransitions .modal.fade{-webkit-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}html.rl-anim.csstransitions .modal.fade.in{-webkit-transform:none;-ms-transform:none;transform:none}html.rl-anim.cssanimations .b-compose.loading .b-header-toolbar{background-size:60px 60px;background-image:-o-linear-gradient(315deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent);-webkit-animation:animate-stripes 2s linear infinite;animation:animate-stripes 2s linear infinite}.textLoadingAnimationD1,.textLoadingAnimationD2,.textLoadingAnimationD3{-webkit-animation:textLoadingAnimationKeyFrame 1s linear infinite 0s;animation:textLoadingAnimationKeyFrame 1s linear infinite 0s}.textLoadingAnimationD2{-webkit-animation-delay:.3s;animation-delay:.3s}.textLoadingAnimationD3{-webkit-animation-delay:.6s;animation-delay:.6s}.rl-view-model.RL-About,.rl-view-model.RL-AdminLogin,.rl-view-model.RL-Login,.rl-view-model.RL-LoginNew{position:relative;height:100%;z-index:5}.mfp-container .mfp-figure{min-height:300px;min-width:300px}.ui-resizable-e{right:-1px;width:5px}.pswp__error-msg{color:#ccc}.pswp__error-msg a,.pswp__error-msg a:hover{color:#fff}.pswp__img--placeholder{opacity:0}.opentip-container{z-index:2001!important}.opentip-container .ot-content{font-size:13px}.opentip-container.style-rainloopErrorTip .ot-content{color:red}.opentip-container.ot-hide-effect-none,.opentip-container.ot-show-effect-none{-webkit-transition:none!important;-o-transition:none!important;transition:none!important}.opentip-container.ot-show-effect-fade{-webkit-transition:none;-o-transition:none;transition:none}.opentip-container.ot-show-effect-fade.ot-hidden{opacity:0}.opentip-container.ot-show-effect-fade.ot-going-to-show{opacity:0;-webkit-transition:opacity .2s ease-in-out;-o-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.opentip-container.ot-show-effect-fade.ot-showing{opacity:1;-webkit-transition:opacity .2s ease-in-out;-o-transition:opacity .2s ease-in-out;transition:opacity .2s ease-in-out}.opentip-container.ot-show-effect-fade.ot-visible{opacity:1;-webkit-transition:none;-o-transition:none;transition:none}svg-icon{display:none}.svg-icon{border:0;outline:0;height:16px;width:16px;display:inline-block;fill:#333}.svg-icon.svg-icon-archive{height:14px;width:14px}.lg-backdrop.in{opacity:.8}.btn .btn-text{padding-left:8px}.active-scale-transition{-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;-o-transition:transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.active-scale-transition:active{-webkit-transform:scale(.95);-ms-transform:scale(.95);transform:scale(.95)}html.glass input:-webkit-autofill,html.glass input:-webkit-autofill:active,html.glass input:-webkit-autofill:focus,html.glass input:-webkit-autofill:hover{-webkit-transition-delay:9999s;-webkit-transition:color 9999s ease-out,background-color 9999s ease-out} diff --git a/app/rainloop/v/1.15.0/static/js/admin.js b/app/rainloop/v/1.15.0/static/js/admin.js deleted file mode 100644 index 3d6fa9194a7d760828611ad897532678b4ec244d..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/static/js/admin.js +++ /dev/null @@ -1,22618 +0,0 @@ -/* RainLoop Webmail (c) RainLoop Team | Licensed under AGPL v3 */ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "rainloop/v/0.0.0/static/js/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 540); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 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_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__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 */ 139); -/* 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_find__WEBPACK_IMPORTED_MODULE_7__ = __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_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__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__(/*! $ */ 8); -/* 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 */ 213); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 214); -/* 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()); - window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(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 */ 210).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_7___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_7___default()($el).call($el, '.dropdown-toggle').dropdown('toggle'); - } - - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___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_7___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_7___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 */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('moment').data('moment-time', ko.unwrap(fValueAccessor()))); - }, - update: function update(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).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', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveUp, 10)); - moveUp(); - } - - if (event.pageY >= offset.top && event.pageY <= offset.top + triggerZone) { - var moveDown = function moveDown() { - $this.scrollTop($this.scrollTop() - scrollSpeed); - Utils.windowResize(); - }; - - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(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(' ' + '' + '' + '').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_7___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___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_7___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___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_7___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___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_7___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___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 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { - return EmailModel.splitEmailLine(value); - } - - return null; - }, - parseHook: function parseHook(input) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___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_4___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 = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { - target(false); - target.iFalseTimeoutTimeout = 0; - }, __webpack_require__(/*! Common/Utils */ 2).pInt(option)); - } - }); - return target; -}; - -ko.extenders.specialThrottle = function (target, option) { - target.iSpecialThrottleTimeoutValue = __webpack_require__(/*! Common/Utils */ 2).pInt(option); - - if (0 < target.iSpecialThrottleTimeoutValue) { - target.iSpecialThrottleTimeout = 0; - target.valueForRead = ko.observable(!!target()).extend({ - throttle: 10 - }); - return ko.computed({ - read: target.valueForRead, - write: function write(bValue) { - if (bValue) { - target.valueForRead(bValue); - } else { - if (target.valueForRead()) { - window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iSpecialThrottleTimeout); - target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { - target.valueForRead(false); - target.iSpecialThrottleTimeout = 0; - }, target.iSpecialThrottleTimeoutValue); - } else { - target.valueForRead(bValue); - } - } - } - }); - } - - return target; -}; - -ko.extenders.idleTrigger = function (target) { - target.trigger = ko.observable(Common_Enums__WEBPACK_IMPORTED_MODULE_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_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 211); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 162); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 212); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 139); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_19__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_20__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 215); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 216); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 113); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_26__["a"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default()($__WEBPACK_IMPORTED_MODULE_19___default.a); - -var inArray = $__WEBPACK_IMPORTED_MODULE_19___default.a.inArray; -var isArray = ___WEBPACK_IMPORTED_MODULE_20___default.a.isArray; -var isObject = ___WEBPACK_IMPORTED_MODULE_20___default.a.isObject; -var isFunc = ___WEBPACK_IMPORTED_MODULE_20___default.a.isFunction; -var isUnd = ___WEBPACK_IMPORTED_MODULE_20___default.a.isUndefined; -var isNull = ___WEBPACK_IMPORTED_MODULE_20___default.a.isNull; -var has = ___WEBPACK_IMPORTED_MODULE_20___default.a.has; - -var bind = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_20___default.a); - -var noop = function noop() {}; // eslint-disable-line no-empty-function - - -var noopTrue = function noopTrue() { - return true; -}; - -var noopFalse = function noopFalse() { - return false; -}; - - -/** - * @param {Function} func - */ - -function silentTryCatch(func) { - try { - func(); - } catch (e) {} // eslint-disable-line no-empty - -} -/** - * @param {*} value - * @returns {boolean} - */ - -function isNormal(value) { - return !isUnd(value) && !isNull(value); -} -/** - * @param {(string|number)} value - * @param {boolean=} includeZero = true - * @returns {boolean} - */ - -function isPosNumeric(value, includeZero) { - if (includeZero === void 0) { - includeZero = true; - } - - return !isNormal(value) ? false : includeZero ? /^[0-9]*$/.test(value.toString()) : /^[1-9]+[0-9]*$/.test(value.toString()); -} -/** - * @param {*} value - * @param {number=} defaultValur = 0 - * @returns {number} - */ - -function pInt(value, defaultValur) { - if (defaultValur === void 0) { - defaultValur = 0; - } - - var result = isNormal(value) && '' !== value ? window__WEBPACK_IMPORTED_MODULE_18___default.a.parseInt(value, 10) : defaultValur; - return window__WEBPACK_IMPORTED_MODULE_18___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_18___default.a.encodeURIComponent(component); -} -/** - * @param {string} component - * @returns {string} - */ - -function decodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.decodeURIComponent(component); -} -/** - * @param {string} url - * @returns {string} - */ - -function decodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.decodeURI(url); -} -/** - * @param {string} url - * @returns {string} - */ - -function encodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_18___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_18___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.random() * lineLen), 1); - } - - return result; -} -/** - * @param {string} text - * @returns {string} - */ - -function encodeHtml(text) { - return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_20___default.a.escape(text.toString()) : ''; -} -/** - * @param {string} text - * @param {number=} len = 100 - * @returns {string} - */ - -function splitPlainText(text, len) { - if (len === void 0) { - len = 100; - } - - var prefix = '', - subText = '', - result = text, - spacePos = 0, - newLinePos = 0; - - while (result.length > len) { - subText = result.substring(0, len); - spacePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default()(subText).call(subText, ' '); - newLinePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default()(subText).call(subText, '\n'); - - if (-1 !== newLinePos) { - spacePos = newLinePos; - } - - 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_18___default.a.clearTimeout(timeOuts[action]); - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(fFunction, timeOut); - }; -}(); - -var timeOutActionSecond = function () { - var timeOuts = {}; - return function (action, fFunction, timeOut) { - if (!timeOuts[action]) { - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(function () { - fFunction(); - timeOuts[action] = 0; - }, timeOut); - } - }; -}(); - - -/** - * @param {any} m - * @returns {any} - */ - -function deModule(m) { - return (m && m.default ? m.default : m) || ''; -} -/** - * @returns {boolean} - */ - -function inFocus() { - try { - if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement) { - if (isUnd(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache)) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_19___default()(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable'); - } - - return !!window__WEBPACK_IMPORTED_MODULE_18___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_18___default.a.document && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur) { - try { - var activeEl = $__WEBPACK_IMPORTED_MODULE_19___default()(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement); - - if (activeEl && activeEl.is('input,textarea')) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur(); - } else if (force) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur(); - } - } catch (e) {} // eslint-disable-line no-empty - - } -} -/** - * @returns {void} - */ - -function removeSelection() { - try { - if (window__WEBPACK_IMPORTED_MODULE_18___default.a && window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection) { - var sel = window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection(); - - if (sel && sel.removeAllRanges) { - sel.removeAllRanges(); - } - } else if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.empty) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.empty(); - } - } catch (e) {} // eslint-disable-line no-empty - -} -/** - * @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_20___default.a.each(subject.split(':'), function (part) { - var trimmedPart = trim(part); - - if (!drop && (/^(RE|FWD)$/i.test(trimmedPart) || /^(RE|FWD)[[(][\d]+[\])]$/i.test(trimmedPart))) { - 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_18___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.pow(10, dec); -} -/** - * @param {(number|string)} sizeInBytes - * @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_18___default.a.console && window__WEBPACK_IMPORTED_MODULE_18___default.a.console.log) { - window__WEBPACK_IMPORTED_MODULE_18___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_20___default.a.delay(function () { - object[methodName].apply(object, params); - }, delay); - } - } -} -/** - * @param {?} event - */ - -function killCtrlACtrlS(event) { - event = event || window__WEBPACK_IMPORTED_MODULE_18___default.a.event; - - if (event && event.ctrlKey && !event.shiftKey && !event.altKey) { - var key = event.keyCode || event.which; - - if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_24__["EventKeyCode"].S) { - event.preventDefault(); - return; - } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_24__["EventKeyCode"].A) { - var sender = event.target || event.srcElement; - - if (sender && ('true' === '' + sender.contentEditable || sender.tagName && sender.tagName.match(/INPUT|TEXTAREA/i))) { - return; - } - - if (window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection().removeAllRanges(); - } else if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.clear) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.clear(); - } - - event.preventDefault(); - } - } -} -/** - * @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_21__[/* default */ "a"].observable(true); - fResult.isCommand = true; - - if (isFunc(fCanExecute)) { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { - return fResult && fResult.enabled() && fCanExecute.call(context); - }); - } else { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { - return fResult && fResult.enabled() && !!fCanExecute; - }); - } - - return fResult; -} -/** - * @param {string} theme - * @returns {string} - */ - -var convertThemeName = ___WEBPACK_IMPORTED_MODULE_20___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_18___default.a.Date().getTime(); -} -/** - * @returns {number} - */ - -function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_18___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_19___default()('
]*><\/p>/gi, '').replace(/
]*>([\s\S\r\n\t]*)<\/pre>/gim, convertPre).replace(/[\s]+/gm, ' ').replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gim, fixAttibuteValue).replace(/
]*>/gim, '\n').replace(/<\/h[\d]>/gi, '\n').replace(/<\/p>/gi, '\n\n').replace(/
]*>/gim, '\n__bq__start__\n').replace(/<\/blockquote>/gim, '\n__bq__end__\n').replace(/]*>([\s\S\r\n]*?)<\/a>/gim, convertLinks).replace(/<\/div>/gi, '\n').replace(/ /gi, ' ').replace(/"/gi, '"').replace(/<[^>]*>/gm, ''); - text = Common_Globals__WEBPACK_IMPORTED_MODULE_23__["$div"].html(text).text(); - text = text.replace(/\n[ \t]+/gm, '\n').replace(/[\n]{3,}/gm, '\n\n').replace(/>/gi, '>').replace(/</gi, '<').replace(/&/gi, '&'); - text = splitPlainText(text); - pos = 0; - limit = 800; - - while (0 < limit) { - limit -= 1; - iP1 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__start__', pos); - - if (-1 < iP1) { - iP2 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__start__', iP1 + 5); - iP3 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__end__', iP1 + 5); - - if ((-1 === iP2 || iP3 < iP2) && iP1 < iP3) { - text = text.substring(0, iP1) + convertBlockquote(text.substring(iP1 + 13, iP3)) + text.substring(iP3 + 11); - pos = 0; - } else if (-1 < iP2 && iP2 < iP3) { - pos = iP2 - 1; - } else { - pos = 0; - } - } else { - break; - } - } - - text = text.replace(/__bq__start__/gm, '').replace(/__bq__end__/gm, ''); - return text; -} -/** - * @param {string} plain - * @param {boolean} findEmailAndLinksInText = false - * @returns {string} - */ - -function plainToHtml(plain, findEmailAndLinksInText) { - if (findEmailAndLinksInText === void 0) { - findEmailAndLinksInText = false; - } - - plain = plain.toString().replace(/\r/g, ''); - plain = plain.replace(/^>[> ]>+/gm, function (_ref2) { - var match = _ref2[0]; - return match ? match.replace(/[ ]+/g, '') : match; - }); - var bIn = false, - bDo = true, - bStart = true, - aNextText = [], - sLine = '', - iIndex = 0, - aText = plain.split('\n'); - - do { - bDo = false; - aNextText = []; - - for (iIndex = 0; iIndex < aText.length; iIndex++) { - sLine = aText[iIndex]; - bStart = '>' === sLine.substr(0, 1); - - if (bStart && !bIn) { - bDo = true; - bIn = true; - aNextText.push('~~~blockquote~~~'); - aNextText.push(sLine.substr(1)); - } else if (!bStart && bIn) { - if ('' !== sLine) { - bIn = false; - aNextText.push('~~~/blockquote~~~'); - aNextText.push(sLine); - } else { - aNextText.push(sLine); - } - } else if (bStart && bIn) { - aNextText.push(sLine.substr(1)); - } else { - aNextText.push(sLine); - } - } - - if (bIn) { - bIn = false; - aNextText.push('~~~/blockquote~~~'); - } - - aText = aNextText; - } while (bDo); - - plain = aText.join('\n'); - plain = plain // .replace(/~~~\/blockquote~~~\n~~~blockquote~~~/g, '\n') - .replace(/&/g, '&').replace(/>/g, '>').replace(/').replace(/[\s]*~~~\/blockquote~~~/g, '').replace(/\n/g, '
]*><\/p>/gi, '');
-
- try {
- this.editor.setData(html);
- } catch (e) {} // eslint-disable-line no-empty
-
-
- if (focus) {
- this.focus();
- }
- }
- };
-
- _proto.replaceHtml = function replaceHtml(find, _replaceHtml) {
- if (this.editor && this.__inited && 'wysiwyg' === this.editor.mode) {
- try {
- this.editor.setData(this.editor.getData().replace(find, _replaceHtml));
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.setPlain = function setPlain(plain, focus) {
- if (this.editor && this.__inited) {
- this.clearCachedSignature();
- this.modeToggle(false);
-
- if ('plain' === this.editor.mode && this.editor.plugins.plain && this.editor.__plain) {
- this.editor.__plain.setRawData(plain);
- } else {
- try {
- this.editor.setData(plain);
- } catch (e) {} // eslint-disable-line no-empty
-
- }
-
- if (focus) {
- this.focus();
- }
- }
- };
-
- _proto.init = function init() {
- var _this2 = this;
-
- if (this.element && !this.editor) {
- var initFunc = function initFunc() {
- var config = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["htmlEditorDefaultConfig"],
- language = Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["settingsGet"]('Language'),
- allowSource = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["appSettingsGet"]('allowHtmlEditorSourceButton'),
- biti = !!Storage_Settings__WEBPACK_IMPORTED_MODULE_11__["appSettingsGet"]('allowHtmlEditorBitiButtons');
-
- if ((allowSource || !biti) && !config.toolbarGroups.__cfgInited) {
- config.toolbarGroups.__cfgInited = true;
-
- if (allowSource) {
- config.removeButtons = config.removeButtons.replace(',Source', '');
- }
-
- if (!biti) {
- config.removePlugins += (config.removePlugins ? ',' : '') + 'bidi';
- }
- }
-
- config.enterMode = window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.ENTER_BR;
- config.shiftEnterMode = window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.ENTER_P;
- config.language = Common_Globals__WEBPACK_IMPORTED_MODULE_9__["htmlEditorLangsMap"][(language || 'en').toLowerCase()] || 'en';
-
- if (window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.env) {
- window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.env.isCompatible = true;
- }
-
- _this2.editor = window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR.appendTo(_this2.element, config);
-
- _this2.editor.on('key', function (event) {
- if (event && event.data && Common_Enums__WEBPACK_IMPORTED_MODULE_10__["EventKeyCode"].Tab === event.data.keyCode) {
- return false;
- }
-
- return true;
- });
-
- _this2.editor.on('blur', function () {
- _this2.blurTrigger();
- });
-
- _this2.editor.on('mode', function () {
- _this2.blurTrigger();
-
- if (_this2.onModeChange) {
- _this2.onModeChange('plain' !== _this2.editor.mode);
- }
- });
-
- _this2.editor.on('focus', function () {
- _this2.focusTrigger();
- });
-
- if (window__WEBPACK_IMPORTED_MODULE_6___default.a.FileReader) {
- _this2.editor.on('drop', function (event) {
- if (0 < event.data.dataTransfer.getFilesCount()) {
- var file = event.data.dataTransfer.getFile(0);
-
- if (file && window__WEBPACK_IMPORTED_MODULE_6___default.a.FileReader && event.data.dataTransfer.id && file.type && file.type.match(/^image/i)) {
- var id = event.data.dataTransfer.id,
- imageId = "[img=" + id + "]",
- reader = new window__WEBPACK_IMPORTED_MODULE_6___default.a.FileReader();
-
- reader.onloadend = function () {
- if (reader.result) {
- _this2.replaceHtml(imageId, "");
- }
- };
-
- reader.readAsDataURL(file);
- event.data.dataTransfer.setData('text/html', imageId);
- }
- }
- });
- }
-
- _this2.editor.on('instanceReady', function () {
- if (_this2.editor.removeMenuItem) {
- _this2.editor.removeMenuItem('cut');
-
- _this2.editor.removeMenuItem('copy');
-
- _this2.editor.removeMenuItem('paste');
- }
-
- _this2.__resizable = true;
- _this2.__inited = true;
-
- _this2.resize();
-
- if (_this2.onReady) {
- _this2.onReady();
- }
- });
- };
-
- if (window__WEBPACK_IMPORTED_MODULE_6___default.a.CKEDITOR) {
- initFunc();
- } else {
- window__WEBPACK_IMPORTED_MODULE_6___default.a.__initEditor = initFunc;
- }
- }
- };
-
- _proto.focus = function focus() {
- if (this.editor) {
- try {
- this.editor.focus();
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.hasFocus = function hasFocus() {
- if (this.editor) {
- try {
- return !!this.editor.focusManager.hasFocus;
- } catch (e) {} // eslint-disable-line no-empty
-
- }
-
- return false;
- };
-
- _proto.blur = function blur() {
- if (this.editor) {
- try {
- this.editor.focusManager.blur(true);
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.resizeEditor = function resizeEditor() {
- if (this.editor && this.__resizable) {
- try {
- this.editor.resize(this.$element.width(), this.$element.innerHeight());
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.setReadOnly = function setReadOnly(value) {
- if (this.editor) {
- try {
- this.editor.setReadOnly(!!value);
- } catch (e) {} // eslint-disable-line no-empty
-
- }
- };
-
- _proto.clear = function clear(focus) {
- this.setHtml('', focus);
- };
-
- return HtmlEditor;
-}();
-
-
-
-/***/ }),
-/* 211 */
-/*!*******************************************************************************!*\
- !*** ./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 */ 290);
-
-/***/ }),
-/* 212 */
-/*!**************************************************************************************!*\
- !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/last-index-of.js ***!
- \**************************************************************************************/
-/*! no static exports found */
-/*! exports used: default */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(/*! core-js-pure/stable/instance/last-index-of */ 329);
-
-/***/ }),
-/* 213 */
-/*!*********************************!*\
- !*** ./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'
-};
-
-
-/***/ }),
-/* 214 */
-/*!*****************************************!*\
- !*** ./node_modules/pikaday/pikaday.js ***!
- \*****************************************/
-/*! no static exports found */
-/*! exports used: default */
-/***/ (function(module, exports, __webpack_require__) {
-
-/*!
- * Pikaday
- *
- * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday
- */
-
-(function (root, factory)
-{
- 'use strict';
-
- var moment;
- if (true) {
- // CommonJS module
- // Load moment.js as an optional dependency
- try { moment = __webpack_require__(/*! moment */ 98); } catch (e) {}
- module.exports = factory(moment);
- } else {}
-}(this, function (moment)
-{
- 'use strict';
-
- /**
- * feature detection and helper functions
- */
- var hasMoment = typeof moment === 'function',
-
- hasEventListeners = !!window.addEventListener,
-
- document = window.document,
-
- sto = window.setTimeout,
-
- addEvent = function(el, e, callback, capture)
- {
- if (hasEventListeners) {
- el.addEventListener(e, callback, !!capture);
- } else {
- el.attachEvent('on' + e, callback);
- }
- },
-
- removeEvent = function(el, e, callback, capture)
- {
- if (hasEventListeners) {
- el.removeEventListener(e, callback, !!capture);
- } else {
- el.detachEvent('on' + e, callback);
- }
- },
-
- trim = function(str)
- {
- return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g,'');
- },
-
- hasClass = function(el, cn)
- {
- return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;
- },
-
- addClass = function(el, cn)
- {
- if (!hasClass(el, cn)) {
- el.className = (el.className === '') ? cn : el.className + ' ' + cn;
- }
- },
-
- removeClass = function(el, cn)
- {
- el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));
- },
-
- isArray = function(obj)
- {
- return (/Array/).test(Object.prototype.toString.call(obj));
- },
-
- isDate = function(obj)
- {
- return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
- },
-
- isWeekend = function(date)
- {
- var day = date.getDay();
- return day === 0 || day === 6;
- },
-
- isLeapYear = function(year)
- {
- // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951
- return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
- },
-
- getDaysInMonth = function(year, month)
- {
- return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
- },
-
- setToStartOfDay = function(date)
- {
- if (isDate(date)) date.setHours(0,0,0,0);
- },
-
- compareDates = function(a,b)
- {
- // weak date comparison (use setToStartOfDay(date) to ensure correct result)
- return a.getTime() === b.getTime();
- },
-
- extend = function(to, from, overwrite)
- {
- var prop, hasProp;
- for (prop in from) {
- hasProp = to[prop] !== undefined;
- if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {
- if (isDate(from[prop])) {
- if (overwrite) {
- to[prop] = new Date(from[prop].getTime());
- }
- }
- else if (isArray(from[prop])) {
- if (overwrite) {
- to[prop] = from[prop].slice(0);
- }
- } else {
- to[prop] = extend({}, from[prop], overwrite);
- }
- } else if (overwrite || !hasProp) {
- to[prop] = from[prop];
- }
- }
- return to;
- },
-
- fireEvent = function(el, eventName, data)
- {
- var ev;
-
- if (document.createEvent) {
- ev = document.createEvent('HTMLEvents');
- ev.initEvent(eventName, true, false);
- ev = extend(ev, data);
- el.dispatchEvent(ev);
- } else if (document.createEventObject) {
- ev = document.createEventObject();
- ev = extend(ev, data);
- el.fireEvent('on' + eventName, ev);
- }
- },
-
- adjustCalendar = function(calendar) {
- if (calendar.month < 0) {
- calendar.year -= Math.ceil(Math.abs(calendar.month)/12);
- calendar.month += 12;
- }
- if (calendar.month > 11) {
- calendar.year += Math.floor(Math.abs(calendar.month)/12);
- calendar.month -= 12;
- }
- return calendar;
- },
-
- /**
- * defaults and localisation
- */
- defaults = {
-
- // bind the picker to a form field
- field: null,
-
- // automatically show/hide the picker on `field` focus (default `true` if `field` is set)
- bound: undefined,
-
- // data-attribute on the input field with an aria assistance tekst (only applied when `bound` is set)
- ariaLabel: 'Use the arrow keys to pick a date',
-
- // position of the datepicker, relative to the field (default to bottom & left)
- // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)
- position: 'bottom left',
-
- // automatically fit in the viewport even if it means repositioning from the position option
- reposition: true,
-
- // the default output format for `.toString()` and `field` value
- format: 'YYYY-MM-DD',
-
- // the toString function which gets passed a current date object and format
- // and returns a string
- toString: null,
-
- // used to create date object from current input string
- parse: null,
-
- // the initial date to view when first opened
- defaultDate: null,
-
- // make the `defaultDate` the initial selected value
- setDefaultDate: false,
-
- // first day of week (0: Sunday, 1: Monday etc)
- firstDay: 0,
-
- // the default flag for moment's strict date parsing
- formatStrict: false,
-
- // the minimum/earliest date that can be selected
- minDate: null,
- // the maximum/latest date that can be selected
- maxDate: null,
-
- // number of years either side, or array of upper/lower range
- yearRange: 10,
-
- // show week numbers at head of row
- showWeekNumber: false,
-
- // Week picker mode
- pickWholeWeek: false,
-
- // used internally (don't config outside)
- minYear: 0,
- maxYear: 9999,
- minMonth: undefined,
- maxMonth: undefined,
-
- startRange: null,
- endRange: null,
-
- isRTL: false,
-
- // Additional text to append to the year in the calendar title
- yearSuffix: '',
-
- // Render the month after year in the calendar title
- showMonthAfterYear: false,
-
- // Render days of the calendar grid that fall in the next or previous month
- showDaysInNextAndPreviousMonths: false,
-
- // Allows user to select days that fall in the next or previous month
- enableSelectionDaysInNextAndPreviousMonths: false,
-
- // how many months are visible
- numberOfMonths: 1,
-
- // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)
- // only used for the first display or when a selected date is not visible
- mainCalendar: 'left',
-
- // Specify a DOM element to render the calendar in
- container: undefined,
-
- // Blur field when date is selected
- blurFieldOnSelect : true,
-
- // internationalization
- i18n: {
- previousMonth : 'Previous Month',
- nextMonth : 'Next Month',
- months : ['January','February','March','April','May','June','July','August','September','October','November','December'],
- weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
- weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
- },
-
- // Theme Classname
- theme: null,
-
- // events array
- events: [],
-
- // callback function
- onSelect: null,
- onOpen: null,
- onClose: null,
- onDraw: null,
-
- // Enable keyboard input
- keyboardInput: true
- },
-
-
- /**
- * templating functions to abstract HTML rendering
- */
- renderDayName = function(opts, day, abbr)
- {
- day += opts.firstDay;
- while (day >= 7) {
- day -= 7;
- }
- return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
- },
-
- renderDay = function(opts)
- {
- var arr = [];
- var ariaSelected = 'false';
- if (opts.isEmpty) {
- if (opts.showDaysInNextAndPreviousMonths) {
- arr.push('is-outside-current-month');
-
- if(!opts.enableSelectionDaysInNextAndPreviousMonths) {
- arr.push('is-selection-disabled');
- }
-
- } else {
- return '
" + _this.readme() + ""; - } - }; - _this.bDisabeCloseOnEsc = true; - _this.sDefaultKeyScope = Common_Enums__WEBPACK_IMPORTED_MODULE_10__["KeyState"].All; - _this.tryToClosePopup = ___WEBPACK_IMPORTED_MODULE_7___default.a.debounce(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, _this.tryToClosePopup, Object(_babel_runtime_corejs3_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"])(_this)), Common_Enums__WEBPACK_IMPORTED_MODULE_10__["Magics"].Time200ms); - return _this; - } - - var _proto = PluginPopupView.prototype; - - _proto.saveCommand = function saveCommand() { - var list = {}; - list.Name = this.name(); - - ___WEBPACK_IMPORTED_MODULE_7___default.a.each(this.configures(), function (oItem) { - var value = oItem.value(); - - if (false === value || true === value) { - value = value ? '1' : '0'; - } - - list['_' + oItem.Name] = value; - }); - - this.saveError(''); - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_13__[/* default */ "a"].pluginSettingsUpdate(this.onPluginSettingsUpdateResponse, list); - }; - - _proto.onPluginSettingsUpdateResponse = function onPluginSettingsUpdateResponse(result, data) { - if (Common_Enums__WEBPACK_IMPORTED_MODULE_10__["StorageResultType"].Success === result && data && data.Result) { - this.cancelCommand(); - } else { - this.saveError(''); - - if (data && data.ErrorCode) { - this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["getNotification"])(data.ErrorCode)); - } else { - this.saveError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_10__["Notification"].CantSavePluginSettings)); - } - } - }; - - _proto.onShow = function onShow(oPlugin) { - this.name(); - this.readme(); - this.configures([]); - - if (oPlugin) { - this.name(oPlugin.Name); - this.readme(oPlugin.Readme); - var config = oPlugin.Config; - - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["isNonEmptyArray"])(config)) { - this.configures(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_7___default.a).call(___WEBPACK_IMPORTED_MODULE_7___default.a, config, function (item) { - return { - 'value': ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(item[0]), - 'placeholder': ko__WEBPACK_IMPORTED_MODULE_8__[/* default */ "a"].observable(item[6]), - 'Name': item[1], - 'Type': item[2], - 'Label': item[3], - 'Default': item[4], - 'Desc': item[5] - }; - })); - } - } - }; - - _proto.tryToClosePopup = function tryToClosePopup() { - var _this2 = this; - - var PopupsAskViewModel = __webpack_require__(/*! View/Popup/Ask */ 224); - - if (!Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["isPopupVisible"])(PopupsAskViewModel)) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_14__["showScreenPopup"])(PopupsAskViewModel, [Object(Common_Translator__WEBPACK_IMPORTED_MODULE_12__["i18n"])('POPUPS_ASK/DESC_WANT_CLOSE_THIS_WINDOW'), function () { - if (_this2.modalVisibility()) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_11__["delegateRun"])(_this2, 'cancelCommand'); - } - }]); - } - }; - - _proto.onBuild = function onBuild() { - var _this3 = this; - - key__WEBPACK_IMPORTED_MODULE_9___default()('esc', Common_Enums__WEBPACK_IMPORTED_MODULE_10__["KeyState"].All, function () { - if (_this3.modalVisibility()) { - _this3.tryToClosePopup(); - } - - return false; - }); - }; - - return PluginPopupView; -}(Knoin_AbstractViewNext__WEBPACK_IMPORTED_MODULE_15__[/* AbstractViewNext */ "a"]), (Object(_babel_runtime_corejs3_helpers_esm_applyDecoratedDescriptor__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"])(_class2.prototype, "saveCommand", [_dec2], _babel_runtime_corejs3_core_js_stable_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(_class2.prototype, "saveCommand"), _class2.prototype)), _class2)) || _class); - - -/***/ }), -/* 543 */ -/*!****************************************!*\ - !*** ./dev/Settings/Admin/Branding.js ***! - \****************************************/ -/*! exports provided: BrandingAdminSettings, default */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrandingAdminSettings", function() { return BrandingAdminSettings; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BrandingAdminSettings; }); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 23); -/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/App */ 79); -/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); - - - - - - - - - -var BrandingAdminSettings = /*#__PURE__*/function () { - function BrandingAdminSettings() { - this.capa = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].prem; - this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('Title')).idleTrigger(); - this.loadingDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoadingDescription')).idleTrigger(); - this.faviconUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('FaviconUrl')).idleTrigger(); - this.loginLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginLogo') || '').idleTrigger(); - this.loginBackground = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginBackground') || '').idleTrigger(); - this.userLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogo') || '').idleTrigger(); - this.userLogoMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoMessage') || '').idleTrigger(); - this.userIframeMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserIframeMessage') || '').idleTrigger(); - this.userLogoTitle = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoTitle') || '').idleTrigger(); - this.loginDescription = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginDescription')).idleTrigger(); - this.loginCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginCss')).idleTrigger(); - this.userCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserCss')).idleTrigger(); - this.welcomePageUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageUrl')).idleTrigger(); - this.welcomePageDisplay = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageDisplay')).idleTrigger(); - this.welcomePageDisplay.options = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () { - Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["trigger"])(); - return [{ - optValue: 'none', - optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_NONE') - }, { - optValue: 'once', - optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ONCE') - }, { - optValue: 'always', - optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ALWAYS') - }]; - }); - this.community = true || false; - } - - var _proto = BrandingAdminSettings.prototype; - - _proto.onBuild = function onBuild() { - var _this = this; - - ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () { - var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.title.trigger, _this), - f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loadingDesc.trigger, _this), - f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.faviconUrl.trigger, _this); - - _this.title.subscribe(function (value) { - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, { - 'Title': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) - }); - }); - - _this.loadingDesc.subscribe(function (value) { - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f2, { - 'LoadingDescription': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) - }); - }); - - _this.faviconUrl.subscribe(function (value) { - Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f3, { - 'FaviconUrl': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) - }); - }); - }, Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time50ms); - }; - - return BrandingAdminSettings; -}(); - - - -/***/ }) -/******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9MaW5rcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9hcHBseURlY29yYXRlZERlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmtleVwiIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWRtaW4vQWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0Vmlld05leHQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9Tb2NpYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL1BsdWdpbnMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Db3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9Nb21lbnRvci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuaGFzaGVyXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL2Rldi9IZWxwZXIvQXBwcy9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvTGFuZ3VhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0FwcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvTW9kZWwvRW1haWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9DYXBhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BhY2thZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93Lm1vbWVudFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5wcm9ncmVzc0pzXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9KYXNzbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9UaGVtZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0xpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0tub2luL0Fic3RyYWN0U2NyZWVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnNzbVwiIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuY3Jvc3Nyb2Fkc1wiIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RDaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZW1haWxqcy1hZGRyZXNzcGFyc2VyL2Rpc3QvYWRkcmVzc3BhcnNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0NoZWNrYm94LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSHRtbEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwvT3BlbnRpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcGlrYWRheS9waWthZGF5LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5BdXRvbGlua2VyXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9NaW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Bc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0xhbmd1YWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0Fic3RyYWN0QXBwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUmVtb3RlL0Fic3RyYWN0QWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL0Fic3RyYWN0U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RCb290LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RSYWRpby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LWdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2luZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvZnVuY3Rpb24vdmlydHVhbC9iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL2Rldi9IdG1sL1ByZXZpZXdNZXNzYWdlLmh0bWwiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL2Zvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2F2ZVRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9JbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1JhZGlvLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvVGV4dEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9EYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2NyaXB0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9BZG1pbi9TZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vR2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vRG9tYWlucy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0NvbnRhY3RzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9TZWN1cml0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vU29jaWFsLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QbHVnaW5zLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QYWNrYWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQWJvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9BZG1pbi9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2FkbWluLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0RvbWFpbkFsaWFzLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcuanMiXSwibmFtZXMiOlsiRmlsZVR5cGUiLCJTdG9yYWdlUmVzdWx0VHlwZSIsIkZvY3VzZWQiLCJTdGF0ZSIsIlN0YXRlVHlwZSIsIkNhcGEiLCJLZXlTdGF0ZSIsIkZvbGRlclR5cGUiLCJTZXJ2ZXJGb2xkZXJUeXBlIiwiTG9naW5TaWduTWVUeXBlQXNTdHJpbmciLCJMb2dpblNpZ25NZVR5cGUiLCJDb21wb3NlVHlwZSIsIlVwbG9hZEVycm9yQ29kZSIsIlNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24iLCJDbGllbnRTaWRlS2V5TmFtZSIsIkV2ZW50S2V5Q29kZSIsIk1lc3NhZ2VTZXRBY3Rpb24iLCJNZXNzYWdlU2VsZWN0QWN0aW9uIiwiRGVza3RvcE5vdGlmaWNhdGlvbiIsIk1lc3NhZ2VQcmlvcml0eSIsIkVkaXRvckRlZmF1bHRUeXBlIiwiU2VydmVyU2VjdXJlIiwiU2VhcmNoRGF0ZVR5cGUiLCJTYXZlU2V0dGluZ3NTdGVwIiwiTGF5b3V0IiwiRmlsdGVyQ29uZGl0aW9uRmllbGQiLCJGaWx0ZXJDb25kaXRpb25UeXBlIiwiRmlsdGVyc0FjdGlvbiIsIkZpbHRlclJ1bGVzVHlwZSIsIlNpZ25lZFZlcmlmeVN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0eVR5cGUiLCJNYWdpY3MiLCJQb3J0cyIsIk5vdGlmaWNhdGlvbiIsImtvIiwid2luZG93IiwiJHdpbiIsIiQiLCJmRGlzcG9zYWxUb29sdGlwSGVscGVyIiwiZWxlbWVudCIsInV0aWxzIiwiZG9tTm9kZURpc3Bvc2FsIiwiYWRkRGlzcG9zZUNhbGxiYWNrIiwiX19vcGVudGlwIiwiZGVhY3RpdmF0ZSIsImJpbmRpbmdIYW5kbGVycyIsInVwZGF0ZVdpZHRoIiwiaW5pdCIsImZWYWx1ZUFjY2Vzc29yIiwiJGVsIiwiZlZhbHVlIiwiZkluaXQiLCJ3aWR0aCIsInNldFRpbWVvdXQiLCJUaW1lNTAwbXMiLCJvbiIsIm9mZiIsImVkaXRvciIsIkh0bWxFZGl0b3IiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImZVcGRhdGVFZGl0b3JWYWx1ZSIsIl9fZWRpdG9yIiwic2V0SHRtbE9yUGxhaW4iLCJmVXBkYXRlS29WYWx1ZSIsImdldERhdGFXaXRoSHRtbE1hcmsiLCJmT25SZWFkeSIsImlzT2JzZXJ2YWJsZSIsIl9fZmV0Y2hFZGl0b3JWYWx1ZSIsInN1YnNjcmliZSIsImpzb24iLCJ0ZXh0IiwiSlNPTiIsInN0cmluZ2lmeSIsInVud3JhcCIsInVwZGF0ZSIsInNjcm9sbGVyU2hhZG93cyIsImxpbWl0IiwiY29udCIsImZGdW5jIiwiXyIsInRocm90dGxlIiwidG9nZ2xlQ2xhc3MiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwaWthZGF5IiwiZkFsbEJpbmRpbmdzQWNjZXNzb3IiLCJ2aWV3TW9kZWwiLCJiaW5kaW5nQ29udGV4dCIsInRleHRJbnB1dCIsIlBpa2FkYXkiLCJfX3Bpa2FkYXkiLCJmaWVsZCIsInZpc2libGVBbmltYXRlZCIsImFkZENsYXNzIiwic2hvdyIsImhpZGUiLCJkZWxheSIsInJlbW92ZUNsYXNzIiwidG9vbHRpcCIsImlzTW9iaWxlIiwiZGF0YSIsImlzSTE4TiIsIkdsb2JhbHMiLCJiTW9iaWxlRGV2aWNlIiwic1ZhbHVlIiwiaXNGdW5jdGlvbiIsIk9wZW50aXAiLCJkcm9wZG93blZpc2liaWxpdHkiLCJ2Iiwic2V0Q29udGVudCIsImFjdGl2YXRlIiwiVHJhbnNsYXRvciIsImkxOG4iLCJ0cmlnZ2VyIiwidG9vbHRpcEVycm9yVGlwIiwic3R5bGUiLCJoaWRlT24iLCJ0aXBKb2ludCIsImRvY3VtZW50IiwidmFsdWUiLCJvcGVuVGlwcyIsImlzIiwiVGltZTEwMG1zIiwicmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duIiwiYUJvb3RzdHJhcERyb3Bkb3ducyIsInB1c2giLCJjbGljayIsImRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSIsIm9wZW5Ecm9wZG93blRyaWdnZXIiLCJoYXNDbGFzcyIsImRyb3Bkb3duIiwiZm9jdXMiLCJkcm9wZG93bkNsb3NlciIsImNsb3Nlc3QiLCJwb3BvdmVyIiwiY3NzdGV4dCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwicmVzaXplY3JvcCIsIm9uS2V5RG93biIsImV2ZW50IiwiY2FsbCIsIm9uRW50ZXIiLCJwYXJzZUludCIsImtleUNvZGUiLCJvblNwYWNlIiwib25UYWIiLCJzaGlmdEtleSIsIm9uRXNjIiwiY2xpY2tPblRydWUiLCJtb2RhbCIsIlV0aWxzIiwid2luZG93UmVzaXplQ2FsbGJhY2siLCIkaHRtbCIsIm1vbWVudCIsIm1vbWVudFRvTm9kZSIsImkxOG5Jbml0IiwiaTE4blRvTm9kZXMiLCJ0cmFuc2xhdG9ySW5pdCIsImkxOG5VcGRhdGUiLCJsaW5rIiwiYXR0ciIsInRpdGxlIiwidGV4dEYiLCJpbml0RG9tIiwiaW5pdEZpeGVkVHJpZ2dlciIsInZhbHVlcyIsInRvcCIsIiRjb250YWluZXIiLCJyZXNpemUiLCJvZmZzZXQiLCJjc3MiLCJpbml0UmVzaXplVHJpZ2dlciIsIm9FbGVtZW50IiwicEludCIsInNpemUiLCJoZWlnaHQiLCJhcHBlbmREb20iLCJlbXB0eSIsImFwcGVuZCIsImRyYWdnYWJsZSIsInRyaWdnZXJab25lIiwic2Nyb2xsU3BlZWQiLCJmQWxsVmFsdWVGdW5jIiwiZHJvcHBhYmxlU2VsZWN0b3IiLCJjb25mIiwiZGlzdGFuY2UiLCJoYW5kbGUiLCJjdXJzb3JBdCIsImxlZnQiLCJyZWZyZXNoUG9zaXRpb25zIiwic2Nyb2xsIiwiZHJhZyIsInN0b3AiLCJoZWxwZXIiLCJlYWNoIiwiJHRoaXMiLCJib3R0b21Qb3MiLCJjbGVhckludGVydmFsIiwicGFnZVgiLCJwYWdlWSIsIm1vdmVVcCIsIndpbmRvd1Jlc2l6ZSIsInNldEludGVydmFsIiwibW92ZURvd24iLCJ0YXJnZXQiLCJkYXRhRm9yIiwicmVtb3ZlSW5Gb2N1cyIsImRyb3BwYWJsZSIsImZWYWx1ZUZ1bmMiLCJmT3ZlckNhbGxiYWNrIiwiZHJvcHBhYmxlT3ZlciIsImZPdXRDYWxsYmFjayIsImRyb3BwYWJsZU91dCIsInRvbGVyYW5jZSIsImhvdmVyQ2xhc3MiLCJkcm9wIiwib3ZlciIsIm91dCIsInVpIiwibmFubyIsIlNldHRpbmdzIiwiYkRpc2FibGVOYW5vU2Nyb2xsIiwiYXBwU2V0dGluZ3NHZXQiLCJuYW5vU2Nyb2xsZXIiLCJpT1NOYXRpdmVTY3JvbGxpbmciLCJwcmV2ZW50UGFnZVNjcm9sbGluZyIsInNhdmVUcmlnZ2VyIiwidG9TdHJpbmciLCJlbmQiLCJlbWFpbHNUYWdzIiwiRW1haWxNb2RlbCIsImZBbGxCaW5kaW5ncyIsImZBdXRvQ29tcGxldGVTb3VyY2UiLCJhdXRvQ29tcGxldGVTb3VyY2UiLCJpbnB1dERlbGltaXRlcnMiLCJmRm9jdXNDYWxsYmFjayIsImZvY3VzZWQiLCJpbnB1dG9zYXVydXMiLCJwYXJzZU9uQmx1ciIsImFsbG93RHJhZ0FuZERyb3AiLCJmb2N1c0NhbGxiYWNrIiwic3BsaXRIb29rIiwic3Vic3RyIiwic3BsaXRFbWFpbExpbmUiLCJwYXJzZUhvb2siLCJpbnB1dCIsImZsYXR0ZW4iLCJpbnB1dFZhbHVlIiwicGFyc2VFbWFpbExpbmUiLCJsZW5ndGgiLCJpdGVtIiwiaXNPYmplY3QiLCJ0b0xpbmUiLCJjaGFuZ2UiLCIkb0VsIiwidmFsIiwiY29tbWFuZCIsImpxRWxlbWVudCIsImlzQ29tbWFuZCIsIkVycm9yIiwiZW5hYmxlZCIsIm9ic2VydmFibGUiLCJjYW5FeGVjdXRlIiwiX19yZWFsQ2FuRXhlY3V0ZSIsImNvbXB1dGVkIiwicmVzdWx0IiwicHJvcCIsImV4dGVuZGVycyIsInRyaW1tZXIiLCJyZWFkIiwid3JpdGUiLCJuZXdWYWx1ZSIsInBvc0ludGVyZXIiLCJkZWZhdWx0VmFsIiwibGltaXRlZExpc3QiLCJjdXJyZW50VmFsdWUiLCJsaXN0IiwiaXNOb25FbXB0eUFycmF5IiwiaW5BcnJheSIsImV4dGVuZCIsIm5vdGlmeSIsInZhbHVlSGFzTXV0YXRlZCIsInJldmVyc2libGUiLCJjb21taXQiLCJyZXZlcnNlIiwiY29tbWl0ZWRWYWx1ZSIsInRvZ2dsZVN1YnNjcmliZSIsIm9wdGlvbnMiLCJ0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSIsInByZXYiLCJuZXh0IiwiZmFsc2VUaW1lb3V0Iiwib3B0aW9uIiwiaUZhbHNlVGltZW91dFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzcGVjaWFsVGhyb3R0bGUiLCJpU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQiLCJ2YWx1ZUZvclJlYWQiLCJiVmFsdWUiLCJpZGxlVHJpZ2dlciIsIklkbGUiLCJmbiIsInZhbGlkYXRlTm9uZSIsImhhc0Vycm9yIiwidmFsaWRhdGVFbWFpbCIsInRlc3QiLCJ2YWxpZGF0ZVNpbXBsZUVtYWlsIiwiZGVsZXRlQWNjZXNzSGVscGVyIiwidmFsaWRhdGVGdW5jIiwiaGFzRnVuY0Vycm9yIiwidHJpbSIsImlzQXJyYXkiLCJpc0Z1bmMiLCJpc1VuZCIsImlzVW5kZWZpbmVkIiwiaXNOdWxsIiwiaGFzIiwiYmluZCIsIm5vb3AiLCJub29wVHJ1ZSIsIm5vb3BGYWxzZSIsInNpbGVudFRyeUNhdGNoIiwiZnVuYyIsImUiLCJpc05vcm1hbCIsImlzUG9zTnVtZXJpYyIsImluY2x1ZGVaZXJvIiwiZGVmYXVsdFZhbHVyIiwiaXNOYU4iLCJwU3RyaW5nIiwicEJvb2wiLCJib29sVG9BamF4IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiY29tcG9uZW50IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlVVJJIiwidXJsIiwiZW5jb2RlVVJJIiwic2ltcGxlUXVlcnlQYXJzZXIiLCJxdWVyeVN0cmluZyIsImluZGV4IiwibGVuIiwidGVtcCIsInF1ZXJpZXMiLCJzcGxpdCIsInBhcmFtcyIsImZha2VNZDUiLCJsaW5lIiwibGluZUxlbiIsIk1hdGgiLCJyb3VuZCIsInJhbmRvbSIsImVuY29kZUh0bWwiLCJlc2NhcGUiLCJzcGxpdFBsYWluVGV4dCIsInByZWZpeCIsInN1YlRleHQiLCJzcGFjZVBvcyIsIm5ld0xpbmVQb3MiLCJzdWJzdHJpbmciLCJ0aW1lT3V0QWN0aW9uIiwidGltZU91dHMiLCJhY3Rpb24iLCJmRnVuY3Rpb24iLCJ0aW1lT3V0IiwidGltZU91dEFjdGlvblNlY29uZCIsImRlTW9kdWxlIiwibSIsImluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX19pbkZvY3VzQ2FjaGUiLCJmb3JjZSIsImJsdXIiLCJhY3RpdmVFbCIsInJlbW92ZVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInNlbCIsInJlbW92ZUFsbFJhbmdlcyIsInNlbGVjdGlvbiIsInJlcGx5U3ViamVjdEFkZCIsInN1YmplY3QiLCJ0b1VwcGVyQ2FzZSIsInJlcGxhY2UiLCJyZSIsImZ3ZCIsInBhcnRzIiwicHJlZml4SXNSZSIsInBhcnQiLCJ0cmltbWVkUGFydCIsImpvaW4iLCJyb3VuZE51bWJlciIsIm51bSIsImRlYyIsInBvdyIsImZyaWVuZGx5U2l6ZSIsInNpemVJbkJ5dGVzIiwibG9nIiwiZGVzYyIsImNvbnNvbGUiLCJkZWxlZ2F0ZVJ1biIsIm9iamVjdCIsIm1ldGhvZE5hbWUiLCJraWxsQ3RybEFDdHJsUyIsImN0cmxLZXkiLCJhbHRLZXkiLCJrZXkiLCJ3aGljaCIsIlMiLCJwcmV2ZW50RGVmYXVsdCIsIkEiLCJzZW5kZXIiLCJzcmNFbGVtZW50IiwiY29udGVudEVkaXRhYmxlIiwidGFnTmFtZSIsIm1hdGNoIiwiY2xlYXIiLCJjcmVhdGVDb21tYW5kTGVnYWN5IiwiY29udGV4dCIsImZFeGVjdXRlIiwiZkNhbkV4ZWN1dGUiLCJmUmVzdWx0IiwiZk5vbkVtcHR5IiwiYXJncyIsImFwcGx5IiwiY29udmVydFRoZW1lTmFtZSIsIm1lbW9pemUiLCJ0aGVtZSIsInF1b3RlTmFtZSIsIm5hbWUiLCJtaWNyb3RpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVzdGFtcCIsImNvbnZlcnRMYW5nTmFtZSIsImxhbmd1YWdlIiwiaXNFbmciLCJkcmFnZ2FibGVQbGFjZSIsImFwcGVuZFRvIiwiZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIiwiZG9tSXRlbSIsImRpc2FibGVkIiwiY2xlYXJCcVN3aXRjaGVyIiwiYm9keSIsInJlbW92ZSIsInJlbW92ZUF0dHIiLCJwcmV2aWV3TWVzc2FnZSIsImlzSHRtbCIsInByaW50IiwiZGF0ZSIsImZyb21DcmVkcyIsInRvQ3JlZHMiLCJ0b0xhYmVsIiwiY2NDbGFzcyIsImNjQ3JlZHMiLCJjY0xhYmVsIiwid2luIiwib3BlbiIsImRvYyIsImJvZHlDbG9uZSIsImNsb25lIiwiYm9keUNsYXNzIiwiaHRtbCIsImNsb3NlIiwic2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24iLCJmQ2FsbGJhY2siLCJrb1RyaWdnZXIiLCJ0aW1lciIsInR5cGUiLCJjYWNoZWQiLCJyZXF1ZXN0QWN0aW9uIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJSZXN1bHQiLCJUcnVlUmVzdWx0IiwiRmFsc2VSZXN1bHQiLCJzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiIsInNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uIiwicmVtb3RlIiwic2V0dGluZ05hbWUiLCJmVHJpZ2dlckZ1bmN0aW9uIiwic2F2ZUFkbWluQ29uZmlnIiwic2F2ZVNldHRpbmdzIiwiZmluZEVtYWlsQW5kTGlua3MiLCJBdXRvbGlua2VyIiwibmV3V2luZG93Iiwic3RyaXBQcmVmaXgiLCJ1cmxzIiwiZW1haWwiLCJtZW50aW9uIiwicGhvbmUiLCJoYXNodGFnIiwicmVwbGFjZUZuIiwiZ2V0VHlwZSIsIm1hdGNoZWRUZXh0IiwiaHRtbFRvUGxhaW4iLCJwb3MiLCJpUDEiLCJpUDIiLCJpUDMiLCJjb252ZXJ0QmxvY2txdW90ZSIsImJsb2NrcXVvdGVUZXh0IiwiY29udmVydERpdnMiLCJkaXZUZXh0IiwiY29udmVydFByZSIsImZpeEF0dGlidXRlVmFsdWUiLCJjb252ZXJ0TGlua3MiLCIkZGl2IiwicGxhaW5Ub0h0bWwiLCJwbGFpbiIsImZpbmRFbWFpbEFuZExpbmtzSW5UZXh0IiwiYkluIiwiYkRvIiwiYlN0YXJ0IiwiYU5leHRUZXh0Iiwic0xpbmUiLCJpSW5kZXgiLCJhVGV4dCIsImZvbGRlckxpc3RPcHRpb25zQnVpbGRlciIsImFTeXN0ZW0iLCJhTGlzdCIsImFEaXNhYmxlZCIsImFIZWFkZXJMaW5lcyIsImlVbkRlZXAiLCJmRGlzYWJsZUNhbGxiYWNrIiwiZlZpc2libGVDYWxsYmFjayIsImZSZW5hbWVDYWxsYmFjayIsImJTeXN0ZW0iLCJiQnVpbGRVbnZpc2libGUiLCJvSXRlbSIsImJTZXAiLCJpTGVuIiwiYVJlc3VsdCIsInNEZWVwUHJlZml4IiwiaWQiLCJzeXN0ZW0iLCJzZXBvcmF0b3IiLCJmdWxsTmFtZVJhdyIsInNlbGVjdGFibGUiLCJzdWJTY3JpYmVkIiwiZXhpc3RlbiIsImhhc1N1YlNjcmliZWRTdWJmb2xkZXJzIiwiVXNlciIsIkFycmF5IiwiZGVlcCIsInN1YkZvbGRlcnMiLCJzZWxlY3RFbGVtZW50IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImFkZFJhbmdlIiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZWxlY3QiLCJkZWJvdW5jZSIsIkdsb2JhbHNEYXRhIiwidHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIiwiY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlIiwiZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWciLCJjb25maWd1cmF0aW9uIiwicGFyc2UiLCJkaXNwb3NlT25lIiwicHJvcE9yVmFsdWUiLCJkaXNwb3NhYmxlIiwiZGlzcG9zZSIsImRpc3Bvc2VPYmplY3QiLCJkaXNwb3NhYmxlcyIsIm9iamVjdEZvckVhY2giLCJkZWxlZ2F0ZVJ1bk9uRGVzdHJveSIsIm9iamVjdE9yT2JqZWN0cyIsIm9uRGVzdHJveSIsImFwcGVuZFN0eWxlcyIsIiRzdHlsZVRhZyIsIl9fdGhlbWVUaW1lciIsIl9fdGhlbWVBamF4IiwiY2hhbmdlVGhlbWUiLCJ0aGVtZVRyaWdnZXIiLCJ0aGVtZUxpbmsiLCJjbGVhclRpbWVyIiwidGhlbWVTdHlsZSIsIkFuaW1hdGUiLCJhYm9ydCIsImFqYXgiLCJkYXRhVHlwZSIsInRoZW4iLCJhZnRlciIsImNvbXB1dGVkUGFnZW5hdG9ySGVscGVyIiwia29DdXJyZW50UGFnZSIsImtvUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJwYWdlQ291bnQiLCJmQWRkIiwiY3VzdG9tTmFtZSIsImN1cnJlbnQiLCJjdXN0b20iLCJ1bnNoaWZ0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsImZpbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwb3AiLCJtaW1lQ29udGVudFR5cGUiLCJleHQiLCJNaW1lIiwiaXNUcmFuc3BhcmVudCIsImNvbG9yIiwiZ2V0UmVhbEhlaWdodCIsIiRoY29udCIsInJlc2l6ZUFuZENyb3AiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsImRpZmYiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwidG9EYXRhVVJMIiwic3JjIiwibWFpbFRvSGVscGVyIiwibWFpbFRvVXJsIiwiUG9wdXBDb21wb3NlVmlld01vZGVsIiwidG8iLCJjYyIsImJjYyIsInF1ZXJ5Iiwic2hvd1NjcmVlblBvcHVwIiwiRW1wdHkiLCJkb21SZWFkeSIsInRpbWVvdXQiLCJTdHJpbmciLCJzdHIiLCJzdGFydCIsIlNFVFRJTkdTIiwiX19ybGFoX2RhdGEiLCJBUFBfU0VUVElOR1MiLCJTeXN0ZW0iLCJzZXR0aW5nc0dldCIsInNldHRpbmdzU2V0IiwiY2FwYSIsIl9fc2l6ZXMiLCIkZG9jIiwiJGJvZHkiLCJwb3NpdGlvbiIsInN0YXJ0TWljcm90aW1lIiwiY29tbXVuaXR5IiwiUkxfQ09NTVVOSVRZIiwicmF0ZUxpbWl0IiwidXNlS2V5Ym9hcmRTaG9ydGN1dHMiLCJzVXNlckFnZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYklFIiwiYkNocm9tZSIsImJTYWZhcmkiLCJiQW5pbWF0aW9uU3VwcG9ydGVkIiwiYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJiSXNIdHRwcyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJodG1sRWRpdG9yRGVmYXVsdENvbmZpZyIsImdyb3VwcyIsImh0bWxFZGl0b3JMYW5nc01hcCIsImJBbGxvd1BkZlByZXZpZXciLCJtaW1lVHlwZXMiLCJWSUVXX01PREVMUyIsInNldHRpbmdzIiwibW92ZUFjdGlvbiIsImxlZnRQYW5lbERpc2FibGVkIiwibGVmdFBhbmVsVHlwZSIsImxlZnRQYW5lbFdpZHRoIiwicG9wdXBWaXNpYmlsaXR5TmFtZXMiLCJvYnNlcnZhYmxlQXJyYXkiLCJwb3B1cFZpc2liaWxpdHkiLCJrZXlTY29wZVJlYWwiLCJBbGwiLCJrZXlTY29wZUZha2UiLCJrZXlTY29wZSIsIk1lbnUiLCJDb21wb3NlIiwiZmlsdGVyIiwiZWwiLCJjbGFzc05hbWUiLCJzZXRTY29wZSIsImdldFNjb3BlIiwiX19BUFBfXyIsImlBamF4RXJyb3JDb3VudCIsImlUb2tlbkVycm9yQ291bnQiLCJpTWVzc2FnZUJvZHlDYWNoZUNvdW50IiwiYlVubG9hZCIsImN1cnJlbnRTY3JlZW4iLCJkZWZhdWx0U2NyZWVuTmFtZSIsIlNDUkVFTlMiLCJWaWV3VHlwZSIsIlBvcHVwIiwiTGVmdCIsIlJpZ2h0IiwiQ2VudGVyIiwiaGlkZUxvYWRpbmciLCJjcmVhdGVDb21tYW5kIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWwiLCJTZXR0aW5nc1ZpZXdNb2RlbENsYXNzIiwidGVtcGxhdGUiLCJsYWJlbE5hbWUiLCJyb3V0ZSIsImlzRGVmYXVsdCIsIl9fcmxTZXR0aW5nc0RhdGEiLCJMYWJlbCIsIlRlbXBsYXRlIiwiUm91dGUiLCJJc0RlZmF1bHQiLCJyZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsImRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbCIsInJvdXRlT2ZmIiwiaGFzaGVyIiwiY2hhbmdlZCIsImFjdGl2ZSIsInJvdXRlT24iLCJzY3JlZW4iLCJzY3JlZW5OYW1lIiwiZ2V0U2NyZWVuUG9wdXAiLCJQb3B1Vmlld01vZGVsQ2xhc3MiLCJoaWRlU2NyZWVuUG9wdXAiLCJWaWV3TW9kZWxDbGFzc1RvSGlkZSIsIk1vZGFsVmlldyIsIl9fdm0iLCJfX2RvbSIsIm1vZGFsVmlzaWJpbGl0eSIsInZtUnVuSG9vayIsImhvb2tOYW1lIiwiVmlld01vZGVsQ2xhc3MiLCJfX25hbWVzIiwicnVuSG9vayIsImJ1aWxkVmlld01vZGVsIiwidm1TY3JlZW4iLCJfX2J1aWxkZWQiLCJ2bURvbSIsInZtIiwiX190eXBlIiwidm1QbGFjZSIsIm9uU2hvd1RyaWdnZXIiLCJvbkhpZGVUcmlnZ2VyIiwidmlld01vZGVsTmFtZSIsIl9fbmFtZSIsInZpZXdNb2RlbE5hbWVzIiwidmlld01vZGVsVGVtcGxhdGVJRCIsIl9fdGVtcGxhdGVJRCIsInZpZXdNb2RlbFBvc2l0aW9uIiwidmlld01vZGVsRG9tIiwiY2FuY2VsQ29tbWFuZCIsImNsb3NlQ29tbWFuZCIsInN0b3JlQW5kU2V0S2V5U2NvcGUiLCJyZXN0b3JlS2V5U2NvcGUiLCJhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUiLCJyZWdpc3RlclBvcHVwS2V5RG93biIsIlZpZXdNb2RlbENsYXNzVG9TaG93Iiwid2FybVVwU2NyZWVuUG9wdXAiLCJpc1BvcHVwVmlzaWJsZSIsInNjcmVlbk9uUm91dGUiLCJzdWJQYXJ0IiwiaXNTYW1lU2NyZWVuIiwiY3Jvc3MiLCJfX3N0YXJ0ZWQiLCJ2aWV3TW9kZWxzIiwiZGVmZXIiLCJ2aWV3TW9kZWxWaXNpYmlsaXR5IiwiX19jcm9zcyIsInN0YXJ0U2NyZWVucyIsInNjcmVlbnNDbGFzc2VzIiwiQ1NjcmVlbiIsIl9fc3RhcnQiLCJjcm9zc3JvYWRzIiwiY3JlYXRlIiwiYWRkUm91dGUiLCJpbml0aWFsaXplZCIsImFkZCIsInNldEhhc2giLCJoYXNoIiwic2lsZW5jZSIsImNtZCIsInZpZXdEZWNvcmF0b3IiLCJ0ZW1wbGF0ZUlEIiwicG9wdXBEZWNvcmF0b3IiLCJjb21tYW5kRGVjb3JhdG9yIiwiZGVzY3JpcHRvciIsImluaXRpYWxpemVyIiwibm9ybUNhbkV4ZWN1dGUiLCJzZXR0aW5nc01lbnVLZXlzSGFuZGxlciIsIiRpdGVtcyIsImhhbmRsZXIiLCJ1cCIsInNob3J0Y3V0IiwicmVzdWx0SGFzaCIsImVxIiwiVGltZTIwMG1zIiwiSTE4Tl9EQVRBIiwicmFpbmxvb3BJMThOIiwiSTE4Tl9OT1RJRklDQVRJT05fREFUQSIsIkkxOE5fTk9USUZJQ0FUSU9OX01BUCIsIkludmFsaWRUb2tlbiIsIkF1dGhFcnJvciIsIkFjY2Vzc0Vycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiQ2FwdGNoYUVycm9yIiwiU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlIiwiRG9tYWluTm90QWxsb3dlZCIsIkFjY291bnROb3RBbGxvd2VkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IiLCJDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCIsIkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCIsIk5ld1Bhc3N3b3JkU2hvcnQiLCJOZXdQYXNzd29yZFdlYWsiLCJOZXdQYXNzd29yZEZvcmJpZGRlbiIsIkNvbnRhY3RzU3luY0Vycm9yIiwiQ2FudEdldE1lc3NhZ2VMaXN0IiwiQ2FudEdldE1lc3NhZ2UiLCJDYW50RGVsZXRlTWVzc2FnZSIsIkNhbnRNb3ZlTWVzc2FnZSIsIkNhbnRDb3B5TWVzc2FnZSIsIkNhbnRTYXZlTWVzc2FnZSIsIkNhbnRTZW5kTWVzc2FnZSIsIkludmFsaWRSZWNpcGllbnRzIiwiQ2FudFNhdmVGaWx0ZXJzIiwiQ2FudEdldEZpbHRlcnMiLCJGaWx0ZXJzQXJlTm90Q29ycmVjdCIsIkNhbnRDcmVhdGVGb2xkZXIiLCJDYW50UmVuYW1lRm9sZGVyIiwiQ2FudERlbGV0ZUZvbGRlciIsIkNhbnREZWxldGVOb25FbXB0eUZvbGRlciIsIkNhbnRTdWJzY3JpYmVGb2xkZXIiLCJDYW50VW5zdWJzY3JpYmVGb2xkZXIiLCJDYW50U2F2ZVNldHRpbmdzIiwiQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyIsIkRvbWFpbkFscmVhZHlFeGlzdHMiLCJDYW50SW5zdGFsbFBhY2thZ2UiLCJDYW50RGVsZXRlUGFja2FnZSIsIkludmFsaWRQbHVnaW5QYWNrYWdlIiwiVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlIiwiTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSIsIkxpY2Vuc2luZ0V4cGlyZWQiLCJMaWNlbnNpbmdCYW5uZWQiLCJEZW1vU2VuZE1lc3NhZ2VFcnJvciIsIkRlbW9BY2NvdW50RXJyb3IiLCJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJNYWlsU2VydmVyRXJyb3IiLCJJbnZhbGlkSW5wdXRBcmd1bWVudCIsIlVua25vd25Ob3RpZmljYXRpb24iLCJVbmtub3duRXJyb3IiLCJ2YWx1ZUxpc3QiLCJkZWZhdWxWYWx1ZSIsInZhbHVlTmFtZSIsImkxOG5Ub05vZGUiLCJlbGVtZW50cyIsImFuaW1hdGUiLCJsZXR0ZXJmeCIsInJlbG9hZERhdGEiLCJtb21lbnRvclJlbG9hZCIsImluaXROb3RpZmljYXRpb25MYW5ndWFnZSIsImluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlIiwic3RhcnRDYWxsYmFjayIsImxhbmdDYWxsYmFjayIsImdldE5vdGlmaWNhdGlvbiIsImNvZGUiLCJtZXNzYWdlIiwiZGVmQ29kZSIsIkNsaWVudFZpZXdFcnJvciIsImdldE5vdGlmaWNhdGlvbkZyb21SZXNwb25zZSIsInJlc3BvbnNlIiwiRXJyb3JDb2RlIiwiRXJyb3JNZXNzYWdlIiwiZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlIiwiRmlsZUlzVG9vQmlnIiwiRmlsZVBhcnRpYWxseVVwbG9hZGVkIiwiRmlsZU5vVXBsb2FkZWQiLCJNaXNzaW5nVGVtcEZvbGRlciIsIkZpbGVPblNhdmVpbmdFcnJvciIsInJlbG9hZCIsImFkbWluIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJsYW5nTGluayIsImNhY2hlIiwiaXNSdGwiLCJST09UIiwiSEFTSF9QUkVGSVgiLCJTRVJWRVJfUFJFRklYIiwiU1VCX1FVRVJZX1BSRUZJWCIsIlZFUlNJT04iLCJXRUJfUFJFRklYIiwiVkVSU0lPTl9QUkVGSVgiLCJTVEFUSUNfUFJFRklYIiwiQURNSU5fSE9TVF9VU0UiLCJBRE1JTl9QQVRIIiwiQVVUSF9QUkVGSVgiLCJwb3B1bGF0ZUF1dGhTdWZmaXgiLCJzdWJRdWVyeVByZWZpeCIsInJvb3QiLCJzdGFydHVwVXJsIiwicm9vdEFkbWluIiwicm9vdFVzZXIiLCJhdHRhY2htZW50UmF3IiwiZG93bmxvYWQiLCJjdXN0b21TcGVjU3VmZml4IiwiYXR0YWNobWVudERvd25sb2FkIiwiYXR0YWNobWVudFByZXZpZXciLCJhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyIsImF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbiIsImF0dGFjaG1lbnRGcmFtZWQiLCJzZXJ2ZXJSZXF1ZXN0IiwidXBsb2FkIiwidXBsb2FkQ29udGFjdHMiLCJ1cGxvYWRCYWNrZ3JvdW5kIiwibWVzc2FnZVZpZXdMaW5rIiwicmVxdWVzdEhhc2giLCJtZXNzYWdlRG93bmxvYWRMaW5rIiwiYXZhdGFyTGluayIsInB1YmxpY0xpbmsiLCJ1c2VyQmFja2dyb3VuZCIsInBocEluZm8iLCJsYW5nIiwiaXNBZG1pbiIsImV4cG9ydENvbnRhY3RzVmNmIiwiZXhwb3J0Q29udGFjdHNDc3YiLCJzb2NpYWxHb29nbGUiLCJ4YXV0aCIsInNvY2lhbFR3aXR0ZXIiLCJzb2NpYWxGYWNlYm9vayIsInN0YXRpY1ByZWZpeCIsInBhdGgiLCJlbXB0eUNvbnRhY3RQaWMiLCJzb3VuZCIsIm5vdGlmaWNhdGlvbk1haWxJY29uIiwib3BlblBncEpzIiwib3BlblBncFdvcmtlckpzIiwib3BlblBncFdvcmtlclBhdGgiLCJ0aGVtZVByZXZpZXdMaW5rIiwiaW5ib3giLCJpbmJveEZvbGRlck5hbWUiLCJhYm91dCIsIm1haWxCb3giLCJmb2xkZXIiLCJwYWdlIiwic2VhcmNoIiwidGhyZWFkVWlkIiwicmVzdWx0VGhyZWFkVWlkIiwiUmVtb3RlQWRtaW5BamF4Iiwib1JlcXVlc3RzIiwiYWRtaW5Mb2dpbiIsInNMb2dpbiIsInNQYXNzd29yZCIsImRlZmF1bHRSZXF1ZXN0IiwiYWRtaW5Mb2dvdXQiLCJvRGF0YSIsInNhdmVBZG1pbkNvbmZpZ0hlbHBlciIsInZhbHVlRm4iLCJkb21haW5MaXN0IiwiYkluY2x1ZGVBbGlhc2VzIiwicGx1Z2luTGlzdCIsInBhY2thZ2VzTGlzdCIsImNvcmVEYXRhIiwidXBkYXRlQ29yZURhdGEiLCJwYWNrYWdlSW5zdGFsbCIsIm9QYWNrYWdlIiwiZmlsZSIsInBhY2thZ2VEZWxldGUiLCJkb21haW4iLCJzTmFtZSIsInBsdWdpbiIsImRvbWFpbkRlbGV0ZSIsImRvbWFpbkRpc2FibGUiLCJiRGlzYWJsZWQiLCJOYW1lIiwiRGlzYWJsZWQiLCJwbHVnaW5TZXR0aW5nc1VwZGF0ZSIsIm9Db25maWciLCJsaWNlbnNpbmciLCJiRm9yY2UiLCJGb3JjZSIsImxpY2Vuc2luZ0FjdGl2YXRlIiwic0RvbWFpbiIsInNLZXkiLCJEb21haW4iLCJLZXkiLCJwbHVnaW5EaXNhYmxlIiwiY3JlYXRlRG9tYWluQWxpYXMiLCJzQWxpYXMiLCJBbGlhcyIsImNyZWF0ZU9yVXBkYXRlRG9tYWluIiwiYkNyZWF0ZSIsInNJbmNIb3N0IiwiaUluY1BvcnQiLCJzSW5jU2VjdXJlIiwiYkluY1Nob3J0TG9naW4iLCJiVXNlU2lldmUiLCJzU2lldmVBbGxvd1JhdyIsInNTaWV2ZUhvc3QiLCJpU2lldmVQb3J0Iiwic1NpZXZlU2VjdXJlIiwic091dEhvc3QiLCJpT3V0UG9ydCIsInNPdXRTZWN1cmUiLCJiT3V0U2hvcnRMb2dpbiIsImJPdXRBdXRoIiwiYk91dFBocE1haWwiLCJzV2hpdGVMaXN0IiwidGVzdENvbm5lY3Rpb25Gb3JEb21haW4iLCJ0ZXN0Q29udGFjdHMiLCJzYXZlTmV3QWRtaW5QYXNzd29yZCIsImFkbWluUGluZyIsIkFic3RyYWN0QWpheFJlbW90ZSIsIlNVQlMiLCJzdWIiLCJzdWJGdW5jIiwic3ViTmFtZSIsInB1YiIsIlBsdWdpbnMiLCJpdGVtcyIsIk1FU1NBR0VTX1BFUl9QQUdFIiwiTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIiwiQ09OVEFDVFNfUEVSX1BBR0UiLCJERUZBVUxUX0FKQVhfVElNRU9VVCIsIlNFQVJDSF9BSkFYX1RJTUVPVVQiLCJTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUIiwiU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCIsIkNPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUIiwiVU5VU0VEX09QVElPTl9WQUxVRSIsIkNMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSIsIklNQVBfREVGQVVMVF9QT1JUIiwiSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU01UUF9ERUZBVUxUX1BPUlQiLCJTTVRQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTSUVWRV9ERUZBVUxUX1BPUlQiLCJNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQiLCJBSkFYX0VSUk9SX0xJTUlUIiwiVE9LRU5fRVJST1JfTElNSVQiLCJSQUlOTE9PUF9UUklBTF9LRVkiLCJEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyIsIkRBVEFfSU1BR0VfVFJBTlNQX1BJQyIsIkRBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMiLCJBYnN0cmFjdFZpZXdOZXh0IiwiTm9uZSIsInNDdXJyZW50S2V5U2NvcGUiLCJzRGVmYXVsdEtleVNjb3BlIiwiYkRpc2FiZUNsb3NlT25Fc2MiLCJFc2MiLCJCYWNrc3BhY2UiLCJTb2NpYWxTdG9yZSIsImdvb2dsZSIsInR3aXR0ZXIiLCJmYWNlYm9vayIsImRyb3Bib3giLCJjbGllbnRJRCIsImNsaWVudFNlY3JldCIsImFwaUtleSIsImxvYWRpbmciLCJ1c2VyTmFtZSIsImxvZ2dpbmVkIiwiYXV0aCIsImF1dGhHbWFpbCIsImRyaXZlIiwicHJldmlldyIsImNsaWVudFNldHRpbmdzIiwiYXBpS2V5U2V0dGluZ3MiLCJhcHBJRCIsImFwcFNlY3JldCIsInN1cHBvcnRlZCIsImNvbnN1bWVyS2V5IiwiY29uc3VtZXJTZWNyZXQiLCJwb3B1bGF0ZSIsImFwcGVuZERyb3Bib3giLCJEcm9wYm94IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JpcHQiLCJhcHBlbmRDaGlsZCIsIkFic3RyYWN0Q29tcG9uZW50IiwiZnVuY1RvRGlzcG9zZSIsImNvbXBvbmVudEV4cG9ydEhlbHBlciIsIkNsYXNzT2JqZWN0IiwiY3JlYXRlVmlld01vZGVsIiwiY29tcG9uZW50SW5mbyIsImlubGluZSIsIlNJTVBMRV9IT09LUyIsIlVTRVJfVklFV19NT0RFTFNfSE9PS1MiLCJBRE1JTl9WSUVXX01PREVMU19IT09LUyIsImFkZEhvb2siLCJjYWxsYmFjayIsIm1haW5TZXR0aW5nc0dldCIsInJlbW90ZVJlcXVlc3QiLCJwYXJhbWV0ZXJzIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiIsInJ1blNldHRpbmdzVmlld01vZGVsSG9va3MiLCJLbm9pbiIsInZpZXciLCJwbHVnaW5TZWN0aW9uIiwicGx1Z2lucyIsIkNvcmVBZG1pblN0b3JlIiwiY29yZVJlYWwiLCJjb3JlQ2hhbm5lbCIsImNvcmVUeXBlIiwiY29yZVVwZGF0YWJsZSIsImNvcmVBY2Nlc3MiLCJjb3JlV2FybmluZyIsImNvcmVDaGVja2luZyIsImNvcmVVcGRhdGluZyIsImNvcmVWZXJzaW9uIiwiY29yZVJlbW90ZVZlcnNpb24iLCJjb3JlUmVtb3RlUmVsZWFzZSIsImNvcmVWZXJzaW9uQ29tcGFyZSIsIl9tb21lbnQiLCJfbW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93VW5peCIsInVuaXgiLCJtb21lbnROb3ciLCJtb21lbnROb3dVbml4Iiwic2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyIiwic3VidHJhY3QiLCJmb3JtYXQiLCJmb3JtYXRDdXN0b21TaG9ydERhdGUiLCJub3ciLCJmcm9tTm93IiwiVElNRSIsInllYXIiLCJ0aW1lU3RhbXBJblVUQyIsImZvcm1hdFN0ciIsInRpbWUiLCJnZXRBcHAiLCJMYW5ndWFnZVN0b3JlIiwibGFuZ3VhZ2VzIiwibGFuZ3VhZ2VzQWRtaW4iLCJsYW5ndWFnZUFkbWluIiwidXNlckxhbmd1YWdlIiwidXNlckxhbmd1YWdlQWRtaW4iLCJhTGFuZ3VhZ2VzIiwiYUxhbmd1YWdlc0FkbWluIiwiQXBwQWRtaW5TdG9yZSIsImRldGVybWluZVVzZXJMYW5ndWFnZSIsImRldGVybWluZVVzZXJEb21haW4iLCJ3ZWFrUGFzc3dvcmQiLCJ1c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMiLCJkYXRhRm9sZGVyQWNjZXNzIiwiZ2V0IiwiQWJzdHJhY3RBcHBTdG9yZSIsImRraW1TdGF0dXMiLCJka2ltVmFsdWUiLCJjbGVhckR1cGxpY2F0ZU5hbWUiLCJuZXdJbnN0YW5jZUZyb21Kc29uIiwiaW5pdEJ5SnNvbiIsInZhbGlkYXRlIiwid2l0aG91dE5hbWUiLCJFbWFpbCIsIkRraW1TdGF0dXMiLCJEa2ltVmFsdWUiLCJmcmllbmRseVZpZXciLCJ3cmFwV2l0aExpbmsiLCJ1c2VFbmNvZGVIdG1sIiwicGFyc2VkUmVzdWx0IiwiYWRkcmVzc3BhcnNlciIsImV4aXN0cyIsImFkZHJlc3MiLCJjb21wYWN0IiwiZW1haWxBZGRyZXNzIiwiQWJzdHJhY3RJbnB1dCIsImxhYmVsIiwicHJlTGFiZWwiLCJlbmFibGUiLCJwbGFjZWhvbGRlciIsImxhYmVsZWQiLCJwcmVMYWJlbGVkIiwidHJpZ2dlcmVkIiwiY2xhc3NGb3JUcmlnZ2VyIiwic3VmZml4VmFsdWUiLCJzZXRUcmlnZ2VyU3RhdGUiLCJDYXBhQWRtaW5TdG9yZSIsImFkZGl0aW9uYWxBY2NvdW50cyIsImlkZW50aXRpZXMiLCJncmF2YXRhciIsImF0dGFjaG1lbnRUaHVtYm5haWxzIiwic2lldmUiLCJmaWx0ZXJzIiwidGhlbWVzIiwib3BlblBHUCIsInR3b0ZhY3RvckF1dGgiLCJ0d29GYWN0b3JBdXRoRm9yY2UiLCJ0ZW1wbGF0ZXMiLCJBZGRpdGlvbmFsQWNjb3VudHMiLCJJZGVudGl0aWVzIiwiR3JhdmF0YXIiLCJBdHRhY2htZW50VGh1bWJuYWlscyIsIlNpZXZlIiwiRmlsdGVycyIsIlRoZW1lcyIsIlVzZXJCYWNrZ3JvdW5kIiwiT3BlblBHUCIsIlR3b0ZhY3RvciIsIlR3b0ZhY3RvckZvcmNlIiwiVGVtcGxhdGVzIiwiUGFja2FnZUFkbWluU3RvcmUiLCJwYWNrYWdlcyIsInBhY2thZ2VzUmVhbCIsInBhY2thZ2VzTWFpblVwZGF0YWJsZSIsImphc3NsIiwiYXN5bmMiLCJhbGwiLCJvbmVycm9yIiwiVGhlbWVTdG9yZSIsInRoZW1lQmFja2dyb3VuZE5hbWUiLCJ0aGVtZUJhY2tncm91bmRIYXNoIiwiUGx1Z2luQWRtaW5TdG9yZSIsImVycm9yIiwiTGljZW5zZUFkbWluU3RvcmUiLCJsaWNlbnNpbmdQcm9jZXNzIiwibGljZW5zZVZhbGlkIiwibGljZW5zZUV4cGlyZWQiLCJsaWNlbnNlRXJyb3IiLCJsaWNlbnNlVHJpZ2dlciIsIkFic3RyYWN0U2NyZWVuIiwic1NjcmVlbk5hbWUiLCJhVmlld01vZGVscyIsInJvdXRlcyIsIm9Dcm9zcyIsImZNYXRjaGVyIiwib25Sb3V0ZSIsInJ1bGVzIiwiRG9tYWluQWRtaW5TdG9yZSIsImRvbWFpbnMiLCJkb21haW5zV2l0aG91dEFsaWFzZXMiLCJhbGlhcyIsIkFic3RyYWN0Q2hlY2tib3giLCJkaXNhYmxlIiwicmVhZE9ubHkiLCJpbnZlcnRlZCIsImxhYmVsQW5pbWF0ZWQiLCJDaGVja2JveENvbXBvbmVudCIsIm9uQmx1ciIsIm9uUmVhZHkiLCJvbk1vZGVDaGFuZ2UiLCIkZWxlbWVudCIsInJlc2l6ZUVkaXRvciIsInJ1bk9uQmx1ciIsImJsdXJUcmlnZ2VyIiwiYmx1clRpbWVyIiwiZm9jdXNUcmlnZ2VyIiwibW9kZSIsImNsZWFyQ2FjaGVkU2lnbmF0dXJlIiwiZXhlY0NvbW1hbmQiLCJjbGVhckNhY2hlIiwic2V0U2lnbmF0dXJlIiwic2lnbmF0dXJlIiwiaW5zZXJ0QmVmb3JlIiwiY2hlY2tEaXJ0eSIsInJlc2V0RGlydHkiLCJnZXREYXRhIiwid3JhcElzSHRtbCIsIl9fcGxhaW4iLCJnZXRSYXdEYXRhIiwibW9kZVRvZ2dsZSIsInNldE1vZGUiLCJzZXRIdG1sIiwic2V0UGxhaW4iLCJfX2luaXRlZCIsInNldERhdGEiLCJyZXBsYWNlSHRtbCIsImZpbmQiLCJzZXRSYXdEYXRhIiwiaW5pdEZ1bmMiLCJjb25maWciLCJhbGxvd1NvdXJjZSIsImJpdGkiLCJ0b29sYmFyR3JvdXBzIiwiX19jZmdJbml0ZWQiLCJyZW1vdmVCdXR0b25zIiwicmVtb3ZlUGx1Z2lucyIsImVudGVyTW9kZSIsIkNLRURJVE9SIiwiRU5URVJfQlIiLCJzaGlmdEVudGVyTW9kZSIsIkVOVEVSX1AiLCJlbnYiLCJpc0NvbXBhdGlibGUiLCJUYWIiLCJGaWxlUmVhZGVyIiwiZGF0YVRyYW5zZmVyIiwiZ2V0RmlsZXNDb3VudCIsImdldEZpbGUiLCJpbWFnZUlkIiwicmVhZGVyIiwib25sb2FkZW5kIiwicmVhZEFzRGF0YVVSTCIsInJlbW92ZU1lbnVJdGVtIiwiX19yZXNpemFibGUiLCJfX2luaXRFZGl0b3IiLCJoYXNGb2N1cyIsImZvY3VzTWFuYWdlciIsImlubmVySGVpZ2h0Iiwic2V0UmVhZE9ubHkiLCJzdHlsZXMiLCJyYWlubG9vcCIsInJhaW5sb29wVGlwIiwicmFpbmxvb3BFcnJvclRpcCIsIkFza1BvcHVwVmlldyIsInBvcHVwIiwiYXNrRGVzYyIsInllc0J1dHRvbiIsIm5vQnV0dG9uIiwieWVzRm9jdXMiLCJub0ZvY3VzIiwiZlllc0FjdGlvbiIsImZOb0FjdGlvbiIsImJGb2N1c1llc09uU2hvdyIsIlBvcHVwQXNrIiwiY2xlYXJQb3B1cCIsInllc0NsaWNrIiwibm9DbGljayIsIm9uU2hvdyIsImZZZXNGdW5jIiwiZk5vRnVuYyIsImlzRm9jdXNZZXNPblNob3ciLCJvblNob3dXaXRoRGVsYXkiLCJvbkJ1aWxkIiwiTGFuZ3VhZ2VzUG9wdXBWaWV3IiwiZkxhbmciLCJsYW5ncyIsInVzZXIiLCJzZWxlY3RlZCIsImZ1bGxOYW1lIiwic2V0TGFuZ3VhZ2VTZWxlY3Rpb24iLCJsYW5ndWFnZVRvb2x0aXBOYW1lIiwiY3VycmVudExhbmciLCJvbkJlZm9yZVNob3ciLCJmTGFuZ3VhZ2UiLCJjaGFuZ2VMYW5ndWFnZSIsIkFwcCIsInJsIiwicGx1Z2luU2V0dGluZ3NHZXQiLCJwbHVnaW5SZW1vdGVSZXF1ZXN0IiwiRW51bXMiLCJib290c3RhcnQiLCJUaW1lMTBtcyIsIl9fQVBQX0JPT1QiLCJmRXJyb3JDYWxsYmFjayIsInJhaW5sb29wVEVNUExBVEVTIiwiaW5uZXJIVE1MIiwiYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzIiwiYWxsb3dMYW5ndWFnZXNPbkxvZ2luIiwibmV3TW92ZVRvRm9sZGVyIiwiaW50ZXJmYWNlQW5pbWF0aW9uIiwiYW5pbSIsInByZW0iLCJkZWZhdWx0UmVzcG9uc2UiLCJzUmVxdWVzdEFjdGlvbiIsInNUeXBlIiwiYkNhY2hlZCIsIm9SZXF1ZXN0UGFyYW1ldGVycyIsImZDYWxsIiwiU3VjY2VzcyIsIlVubG9hZCIsImxvZ2luQW5kTG9nb3V0UmVsb2FkIiwiQ2xlYXJBdXRoIiwiTG9nb3V0IiwiY2xlYXJDbGllbnRTaWRlVG9rZW4iLCJBYm9ydCIsImFqYXhSZXF1ZXN0IiwiZlJlc3VsdENhbGxiYWNrIiwiaVRpbWVPdXQiLCJzR2V0QWRkIiwiYWJvcnRBY3Rpb25zIiwiaXNQb3N0IiwiaGVhZGVycyIsIkFjdGlvbiIsImFjdGlvblRvQWJvcnQiLCJfX2Fib3J0ZWQiLCJYVG9rZW4iLCJvRGVmQWpheCIsImdsb2JhbCIsImFsd2F5cyIsIlRpbWUiLCJVcGRhdGVUb2tlbiIsInNldENsaWVudFNpZGVUb2tlbiIsImNhdGNoIiwic0FjdGlvbiIsIm9QYXJhbWV0ZXJzIiwiaVRpbWVvdXQiLCJhQWJvcnRBY3Rpb25zIiwiZ2V0UHVibGljS2V5IiwianNWZXJzaW9uIiwic1ZlcnNpb24iLCJBYnN0cmFjdFNldHRpbmdzU2NyZWVuIiwibWVudSIsIm9DdXJyZW50U3ViU2NyZWVuIiwib1ZpZXdNb2RlbFBsYWNlIiwic2V0dXBTZXR0aW5ncyIsInNldHRpbmdzU2NyZWVuIiwiUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ2aWV3TW9kZWxQbGFjZSIsIlNldHRpbmdzVmlld01vZGVsIiwiRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCIsInRtcGwiLCJvbkhpZGUiLCJSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsIkRlZmF1bHRWaWV3TW9kZWwiLCJkZWZhdWx0Um91dGUiLCJzdWJuYW1lIiwibm9ybWFsaXplXyIsInJxdWVzdCIsInZhbHMiLCJBYnN0cmFjdEFwcCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSIsImlzTG9jYWxBdXRvY29tcGxldGUiLCJpZnJhbWUiLCJsYXN0RXJyb3JUaW1lIiwiRXZlbnRzIiwiaUgiLCJpVyIsIlRpbWU1MG1zIiwiVGltZTVzIiwiZ2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwiZGVmYXVsdF8iLCJhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJvTGluayIsImhyZWYiLCJjcmVhdGVFdmVudCIsIm9FIiwiTW91c2VFdmVudHMiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZCIsInNldFdpbmRvd1RpdGxlIiwicmVkaXJlY3RUb0FkbWluUGFuZWwiLCJfX3JsYWhfY2xlYXIiLCJ0b2tlbiIsIl9fcmxhaF9zZXQiLCJsb2dvdXQiLCJpbklmcmFtZSIsImN1c3RvbUxvZ291dExpbmsiLCJwYXJlbnQiLCJoaXN0b3J5QmFjayIsImhpc3RvcnkiLCJiYWNrIiwibW9iaWxlIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyIiwiVGltZTFzIiwic3NtIiwiYWRkU3RhdGUiLCJvbkxlYXZlIiwiQWJzdHJhY3RCb290IiwiQWJzdHJhY3RSYWRpbyIsIlNhdmVUcmlnZ2VyQ29tcG9uZW50IiwidmVydGljYWxBbGlnbiIsInNldFN0YXRlIiwiSW5wdXRDb21wb25lbnQiLCJTZWxlY3RDb21wb25lbnQiLCJvcHRpb25zVGV4dCIsIm9wdGlvbnNWYWx1ZSIsIm9wdGlvbnNDYXB0aW9uIiwiUmFkaW9Db21wb25lbnQiLCJERUZBVUxUX1JPV1MiLCJUZXh0QXJlYUNvbXBvbmVudCIsInJvd3MiLCJzcGVsbGNoZWNrIiwiRGF0ZUNvbXBvbmVudCIsIlNjcmlwdENvbXBvbmVudCIsInRlbXBsYXRlTm9kZXMiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsIm5vZGVWYWx1ZSIsIkNoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQiLCJhbmltYXRpb25Cb3giLCJhbmltYXRpb25DaGVja21hcmsiLCJhbmltYXRpb25Cb3hTZXRUcnVlIiwiYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSIsInRyaWdnZXJBbmltYXRpb24iLCJib3giLCJBZG1pbkFwcCIsIlJlbW90ZSIsInJlbG9hZERvbWFpbkxpc3QiLCJEb21haW5TdG9yZSIsImRlbGV0ZUFjY2VzcyIsInJlbG9hZFBsdWdpbkxpc3QiLCJQbHVnaW5TdG9yZSIsIkVuYWJsZWQiLCJjb25maWd1cmVkIiwiQ29uZmlndXJlZCIsInJlbG9hZFBhY2thZ2VzTGlzdCIsIlBhY2thZ2VTdG9yZSIsIlJlYWwiLCJNYWluVXBkYXRhYmxlIiwiTGlzdCIsImNhbkJlSW5zdGFsbGVkIiwiQ29yZVN0b3JlIiwicmVsb2FkQ29yZURhdGEiLCJDaGFubmVsIiwiVHlwZSIsIlVwZGF0YWJsZSIsIkFjY2VzcyIsIldhcm5pbmciLCJWZXJzaW9uIiwiUmVtb3RlVmVyc2lvbiIsIlJlbW90ZVJlbGVhc2UiLCJWZXJzaW9uQ29tcGFyZSIsInJlbG9hZExpY2Vuc2luZyIsIkxpY2Vuc2VTdG9yZSIsIkV4cGlyZWQiLCJBcHBTdG9yZSIsImJvb3RlbmQiLCJib290ZW5kQ2FsbGJhY2siLCJwcm9ncmVzc0pzIiwiQ2FwYVN0b3JlIiwiU2V0dGluZ3NBZG1pblNjcmVlbiIsIkxvZ2luQWRtaW5TY3JlZW4iLCJEb21haW5Qb3B1cFZpZXciLCJzZWxmIiwiY2FuQmVTYXZlZCIsImNhbkJlVGVzdGVkIiwiZWRpdCIsInNhdmluZyIsInNhdmluZ0Vycm9yIiwic2lldmVTZXR0aW5ncyIsInRlc3RpbmciLCJ0ZXN0aW5nRG9uZSIsInRlc3RpbmdJbWFwRXJyb3IiLCJ0ZXN0aW5nU2lldmVFcnJvciIsInRlc3RpbmdTbXRwRXJyb3IiLCJ0ZXN0aW5nSW1hcEVycm9yRGVzYyIsInRlc3RpbmdTaWV2ZUVycm9yRGVzYyIsInRlc3RpbmdTbXRwRXJyb3JEZXNjIiwiaW1hcFNlcnZlckZvY3VzIiwic2lldmVTZXJ2ZXJGb2N1cyIsInNtdHBTZXJ2ZXJGb2N1cyIsImltYXBTZXJ2ZXIiLCJpbWFwUG9ydCIsImltYXBTZWN1cmUiLCJpbWFwU2hvcnRMb2dpbiIsInVzZVNpZXZlIiwic2lldmVBbGxvd1JhdyIsInNpZXZlU2VydmVyIiwic2lldmVQb3J0Iiwic2lldmVTZWN1cmUiLCJzbXRwU2VydmVyIiwic210cFBvcnQiLCJzbXRwU2VjdXJlIiwic210cFNob3J0TG9naW4iLCJzbXRwQXV0aCIsInNtdHBQaHBNYWlsIiwid2hpdGVMaXN0IiwiYWxpYXNOYW1lIiwiZW5hYmxlU21hcnRQb3J0cyIsImFsbG93U2lldmUiLCJoZWFkZXJUZXh0IiwiZG9tYWluRGVzYyIsImRvbWFpbklzQ29tcHV0ZWQiLCJ1c2VQaHBNYWlsIiwicG9ydCIsIkltYXBTc2wiLCJJbWFwIiwiU210cFNzbCIsIlNtdHBTdGFydFRscyIsIlNtdHAiLCJjcmVhdGVPckFkZENvbW1hbmQiLCJvbkRvbWFpbkNyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwidGVzdENvbm5lY3Rpb25Db21tYW5kIiwib25UZXN0Q29ubmVjdGlvblJlc3BvbnNlIiwid2hpdGVMaXN0Q29tbWFuZCIsImJhY2tDb21tYW5kIiwic2lldmVDb21tYW5kIiwiY2xlYXJUZXN0aW5nIiwic1Jlc3VsdCIsImJJbWFwIiwiYlNpZXZlIiwib0RvbWFpbiIsImNsZWFyRm9ybSIsIkluY0hvc3QiLCJJbmNQb3J0IiwiSW5jU2VjdXJlIiwiSW5jU2hvcnRMb2dpbiIsIlVzZVNpZXZlIiwiU2lldmVBbGxvd1JhdyIsIlNpZXZlSG9zdCIsIlNpZXZlUG9ydCIsIlNpZXZlU2VjdXJlIiwiT3V0SG9zdCIsIk91dFBvcnQiLCJPdXRTZWN1cmUiLCJPdXRTaG9ydExvZ2luIiwiT3V0QXV0aCIsIk91dFVzZVBocE1haWwiLCJXaGl0ZUxpc3QiLCJBbGlhc05hbWUiLCJNZW51U2V0dGluZ3NBZG1pblZpZXciLCJQYW5lU2V0dGluZ3NBZG1pblZpZXciLCJicmFuZGluZyIsIkdlbmVyYWxBZG1pblNldHRpbmdzIiwiRG9tYWluc0FkbWluU2V0dGluZ3MiLCJMb2dpbkFkbWluU2V0dGluZ3MiLCJDb250YWN0c0FkbWluU2V0dGluZ3MiLCJTZWN1cml0eUFkbWluU2V0dGluZ3MiLCJTb2NpYWxBZG1pblNldHRpbmdzIiwiUGx1Z2luc0FkbWluU2V0dGluZ3MiLCJQYWNrYWdlc0FkbWluU2V0dGluZ3MiLCJBYm91dEFkbWluU2V0dGluZ3MiLCJjYXBhVGhlbWVzIiwiY2FwYVVzZXJCYWNrZ3JvdW5kIiwiY2FwYUdyYXZhdGFyIiwiY2FwYUFkZGl0aW9uYWxBY2NvdW50cyIsImNhcGFJZGVudGl0aWVzIiwiY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzIiwiY2FwYVRlbXBsYXRlcyIsIm1haW5BdHRhY2htZW50TGltaXQiLCJCaXRMZW5ndGgxMDI0IiwidXBsb2FkRGF0YSIsInVwbG9hZERhdGFEZXNjIiwidXBsb2FkX21heF9maWxlc2l6ZSIsInBvc3RfbWF4X3NpemUiLCJ0aGVtZXNPcHRpb25zIiwib3B0VmFsdWUiLCJvcHRUZXh0IiwibGFuZ3VhZ2VGdWxsTmFtZSIsImxhbmd1YWdlQWRtaW5GdWxsTmFtZSIsImF0dGFjaG1lbnRMaW1pdFRyaWdnZXIiLCJsYW5ndWFnZVRyaWdnZXIiLCJsYW5ndWFnZUFkbWluVHJpZ2dlciIsImYxIiwiZjIiLCJmMyIsImZSZWxvYWRMYW5ndWFnZUhlbHBlciIsInNhdmVTZXR0aW5nc1N0ZXAiLCJ0cmFuc2xhdG9yUmVsb2FkIiwic2VsZWN0TGFuZ3VhZ2UiLCJzZWxlY3RMYW5ndWFnZUFkbWluIiwicGhwSW5mb0xpbmsiLCJ2aXNpYmlsaXR5IiwiZG9tYWluRm9yRGVsZXRpb24iLCJvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0Iiwib25Eb21haW5Mb2FkUmVxdWVzdCIsImNyZWF0ZURvbWFpbiIsImRlbGV0ZURvbWFpbiIsImRpc2FibGVEb21haW4iLCJvRG9tIiwiZG9tYWluSXRlbSIsImRlZmF1bHREb21haW4iLCJkdW1teSIsInBkb0RzbiIsInBkb1VzZXIiLCJlbmFibGVDb250YWN0cyIsImNvbnRhY3RzU3luYyIsInN1cHBvcnRlZFR5cGVzIiwidHlwZXMiLCJnZXRUeXBlTmFtZSIsImNvbnRhY3RzU3VwcG9ydGVkIiwiY29udGFjdHNUeXBlcyIsImNvbnRhY3RzVHlwZXNPcHRpb25zIiwiY29udGFjdHNUeXBlIiwibWFpbkNvbnRhY3RzVHlwZSIsInRlc3RDb250YWN0c1N1Y2Nlc3MiLCJ0ZXN0Q29udGFjdHNFcnJvciIsInRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSIsInBkb1Bhc3N3b3JkIiwicGRvRHNuVHJpZ2dlciIsInBkb1VzZXJUcmlnZ2VyIiwicGRvUGFzc3dvcmRUcmlnZ2VyIiwiY29udGFjdHNUeXBlVHJpZ2dlciIsIm9uVGVzdENvbnRhY3RzUmVzcG9uc2UiLCJ0ZXN0Q29udGFjdHNDb21tYW5kIiwiTWVzc2FnZSIsImY0IiwiZjUiLCJhZG1pblBhc3N3b3JkIiwiY2FwYU9wZW5QR1AiLCJjYXBhVHdvRmFjdG9yQXV0aCIsImNhcGFUd29GYWN0b3JBdXRoRm9yY2UiLCJ2ZXJpZnlTc2xDZXJ0aWZpY2F0ZSIsImFsbG93U2VsZlNpZ25lZCIsImlzVHdvRmFjdG9yRHJvcHBlclNob3duIiwidHdvRmFjdG9yRHJvcHBlclVzZXIiLCJhZG1pbkxvZ2luRXJyb3IiLCJhZG1pblBhc3N3b3JkTmV3IiwiYWRtaW5QYXNzd29yZE5ldzIiLCJhZG1pblBhc3N3b3JkTmV3RXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyIsIm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlIiwic2F2ZU5ld0FkbWluUGFzc3dvcmRDb21tYW5kIiwic2hvd1R3b0ZhY3RvckRyb3BwZXIiLCJXZWFrIiwiZ29vZ2xlRW5hYmxlIiwiZ29vZ2xlRW5hYmxlQXV0aCIsImdvb2dsZUVuYWJsZUF1dGhHbWFpbCIsImdvb2dsZUVuYWJsZURyaXZlIiwiZ29vZ2xlRW5hYmxlUHJldmlldyIsImdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyIsImdvb2dsZUVuYWJsZVJlcXVpcmVBcGlLZXkiLCJnb29nbGVDbGllbnRJRCIsImdvb2dsZUNsaWVudFNlY3JldCIsImdvb2dsZUFwaUtleSIsImdvb2dsZVRyaWdnZXIxIiwiZ29vZ2xlVHJpZ2dlcjIiLCJnb29nbGVUcmlnZ2VyMyIsImZhY2Vib29rU3VwcG9ydGVkIiwiZmFjZWJvb2tFbmFibGUiLCJmYWNlYm9va0FwcElEIiwiZmFjZWJvb2tBcHBTZWNyZXQiLCJmYWNlYm9va1RyaWdnZXIxIiwiZmFjZWJvb2tUcmlnZ2VyMiIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyQ29uc3VtZXJLZXkiLCJ0d2l0dGVyQ29uc3VtZXJTZWNyZXQiLCJ0d2l0dGVyVHJpZ2dlcjEiLCJ0d2l0dGVyVHJpZ2dlcjIiLCJkcm9wYm94RW5hYmxlIiwiZHJvcGJveEFwaUtleSIsImRyb3Bib3hUcmlnZ2VyMSIsImY2IiwiZjciLCJmOCIsImVuYWJsZWRQbHVnaW5zIiwicGx1Z2luc0Vycm9yIiwib25QbHVnaW5Mb2FkUmVxdWVzdCIsIm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QiLCJkaXNhYmxlUGx1Z2luIiwiY29uZmlndXJlUGx1Z2luIiwicGFja2FnZXNFcnJvciIsInBhY2thZ2VzQ3VycmVudCIsImluc3RhbGxlZCIsImNvbXBhcmUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSIsInBhY2thZ2VzQXZhaWxhYmxlRm9ySW5zdGFsbGF0aW9uIiwicmVxdWVzdEhlbHBlciIsInBhY2thZ2VUb1JlcXVlc3QiLCJpbnN0YWxsIiwiUmVsb2FkIiwiZGVsZXRlUGFja2FnZSIsInBhY2thZ2VUb0RlbGV0ZSIsImluc3RhbGxQYWNrYWdlIiwicGFja2FnZVRvSW5zdGFsbCIsInZlcnNpb24iLCJhY2Nlc3MiLCJlcnJvckRlc2MiLCJjb3JlUmVtb3RlVmVyc2lvbkh0bWxEZXNjIiwidHJhbnNsYXRvclRyaWdnZXIiLCJzdGF0dXNUeXBlIiwidmVyc2lvblRvQ29tcGFyZSIsImlzQ2hlY2tpbmciLCJpc1VwZGF0aW5nIiwiaXNSZWFsIiwiZG9tIiwiYWRtaW5Eb21haW4iLCJhZG1pbk1hbkxvYWRpbmciLCJhZG1pbk1hbkxvYWRpbmdWaXNpYmlsaXR5IiwibG9nb3V0Q2xpY2siLCJMb2dpbkFkbWluVmlldyIsInN1Ym1pdFJlcXVlc3QiLCJtb2JpbGVEZXZpY2UiLCJoaWRlU3VibWl0QnV0dG9uIiwibG9naW4iLCJwYXNzd29yZCIsImxvZ2luRXJyb3IiLCJwYXNzd29yZEVycm9yIiwibG9naW5FcnJvckFuaW1hdGlvbiIsInBhc3N3b3JkRXJyb3JBbmltYXRpb24iLCJsb2dpbkZvY3VzIiwiZm9ybUhpZGRlbiIsImZvcm1FcnJvciIsInN1Ym1pdEVycm9yIiwic3VibWl0Q29tbWFuZCIsInN1Ym1pdEZvcm0iLCJib290c3RyYXAiLCJEb21haW5BbGlhc1BvcHVwVmlldyIsImRvbWFpbnNPcHRpb25zIiwib25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwiUGx1Z2luUG9wdXBWaWV3IiwiaGFzQ29uZmlndXJhdGlvbiIsIm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSIsInNhdmVFcnJvciIsInJlYWRtZSIsImNvbmZpZ3VyZXMiLCJoYXNSZWFkbWUiLCJyZWFkbWVQb3BvdmVyQ29uZiIsInRyeVRvQ2xvc2VQb3B1cCIsInNhdmVDb21tYW5kIiwib1BsdWdpbiIsIlJlYWRtZSIsIkNvbmZpZyIsIlBvcHVwc0Fza1ZpZXdNb2RlbCIsIkJyYW5kaW5nQWRtaW5TZXR0aW5ncyIsImxvYWRpbmdEZXNjIiwiZmF2aWNvblVybCIsImxvZ2luTG9nbyIsImxvZ2luQmFja2dyb3VuZCIsInVzZXJMb2dvIiwidXNlckxvZ29NZXNzYWdlIiwidXNlcklmcmFtZU1lc3NhZ2UiLCJ1c2VyTG9nb1RpdGxlIiwibG9naW5EZXNjcmlwdGlvbiIsImxvZ2luQ3NzIiwidXNlckNzcyIsIndlbGNvbWVQYWdlVXJsIiwid2VsY29tZVBhZ2VEaXNwbGF5Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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QTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QyxVQUFVO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0Qjs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQztBQUNELDJDQUEyQyxjQUFjLG1naUI7Ozs7Ozs7Ozs7OztBQ2hUNUM7QUFDYixtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQSxnRkFBZ0YsT0FBTzs7QUFFdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7OztBQ1pELHNCQUFzQixtQkFBTyxDQUFDLHdDQUFnQztBQUM5RCxlQUFlLG1CQUFPLENBQUMsZ0NBQXdCO0FBQy9DLHNCQUFzQixtQkFBTyxDQUFDLHlDQUFnQzs7QUFFOUQscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDL0JBOzs7Ozs7Ozs7Ozs7O0FDQWE7QUFDYixxQkFBcUIsbUJBQU8sQ0FBQywrQ0FBc0M7QUFDbkUsa0NBQWtDLG1CQUFPLENBQUMscURBQTZDO0FBQ3ZGLFVBQVUsbUJBQU8sQ0FBQywwQkFBa0I7QUFDcEMsc0JBQXNCLG1CQUFPLENBQUMsd0NBQWdDO0FBQzlELGNBQWMsbUJBQU8sQ0FBQyw4QkFBc0I7O0FBRTVDO0FBQ0E7O0FBRUEsOEJBQThCLGFBQWE7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ3BDQSxhQUFhLG1CQUFPLENBQUMsNkJBQXFCOztBQUUxQzs7Ozs7Ozs7Ozs7O0FDRkEsZUFBZSxtQkFBTyxDQUFDLGdDQUF3QjtBQUMvQyxlQUFlLG1CQUFPLENBQUMsZ0NBQXdCO0FBQy9DLDJCQUEyQixtQkFBTyxDQUFDLDhDQUFxQzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ1hhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLGdDQUF3Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2ZhO0FBQ2Isb0NBQW9DLG1CQUFPLENBQUMsMERBQWlEO0FBQzdGLGVBQWUsbUJBQU8sQ0FBQyxpQ0FBd0I7QUFDL0MsZUFBZSxtQkFBTyxDQUFDLGdDQUF3QjtBQUMvQyw2QkFBNkIsbUJBQU8sQ0FBQywrQ0FBdUM7QUFDNUUseUJBQXlCLG1CQUFPLENBQUMsMkNBQWtDO0FBQ25FLHlCQUF5QixtQkFBTyxDQUFDLDRDQUFtQztBQUNwRSxlQUFlLG1CQUFPLENBQUMsZ0NBQXdCO0FBQy9DLHFCQUFxQixtQkFBTyxDQUFDLDRDQUFtQztBQUNoRSxpQkFBaUIsbUJBQU8sQ0FBQyxtQ0FBMEI7QUFDbkQsWUFBWSxtQkFBTyxDQUFDLDRCQUFvQjs7QUFFeEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLGlDQUFpQyxFQUFFOztBQUV4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0U7QUFDL0U7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EseUJBQXlCLG1CQUFtQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7OztBQ3JJWTtBQUNiLFFBQVEsbUJBQU8sQ0FBQyw2QkFBcUI7QUFDckMsaUJBQWlCLG1CQUFPLENBQUMsbUNBQTBCO0FBQ25ELDZCQUE2QixtQkFBTyxDQUFDLDBDQUFpQzs7QUFFdEU7QUFDQTtBQUNBLEdBQUcsd0VBQXdFO0FBQzNFO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7OztBQ1hEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7Ozs7O0FDSkEsYUFBYSxtQkFBTyxDQUFDLDZCQUFxQjtBQUMxQyxvQkFBb0IsbUJBQU8sQ0FBQyxxQ0FBNkI7O0FBRXpEOztBQUVBOzs7Ozs7Ozs7Ozs7QUNMQSxVQUFVLG1CQUFPLENBQUMsMEJBQWtCO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxnQ0FBdUI7QUFDN0MscUNBQXFDLG1CQUFPLENBQUMseURBQWlEO0FBQzlGLDJCQUEyQixtQkFBTyxDQUFDLDZDQUFxQzs7QUFFeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNiQSxpQkFBaUIsbUJBQU8sQ0FBQyxtQ0FBMkI7QUFDcEQsZ0NBQWdDLG1CQUFPLENBQUMscURBQTRDO0FBQ3BGLGtDQUFrQyxtQkFBTyxDQUFDLHVEQUE4QztBQUN4RixlQUFlLG1CQUFPLENBQUMsZ0NBQXdCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1ZBLHlCQUF5QixtQkFBTyxDQUFDLDRDQUFtQztBQUNwRSxrQkFBa0IsbUJBQU8sQ0FBQyxxQ0FBNEI7O0FBRXREOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1RBLGdCQUFnQixtQkFBTyxDQUFDLGlDQUF5Qjs7QUFFakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNYQSxvQkFBb0IsbUJBQU8sQ0FBQyxxQ0FBNEI7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNOYTtBQUNiLDRCQUE0QixtQkFBTyxDQUFDLDRDQUFvQztBQUN4RSxjQUFjLG1CQUFPLENBQUMsK0JBQXNCOztBQUU1QztBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1JBLGdCQUFnQixtQkFBTyxDQUFDLGlDQUF5QjtBQUNqRCw2QkFBNkIsbUJBQU8sQ0FBQywrQ0FBdUM7O0FBRTVFLHNCQUFzQixrQkFBa0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDMUJhO0FBQ2Isc0JBQXNCLG1CQUFPLENBQUMsd0NBQWdDO0FBQzlELHVCQUF1QixtQkFBTyxDQUFDLDBDQUFpQztBQUNoRSxnQkFBZ0IsbUJBQU8sQ0FBQyxnQ0FBd0I7QUFDaEQsMEJBQTBCLG1CQUFPLENBQUMscUNBQTZCO0FBQy9ELHFCQUFxQixtQkFBTyxDQUFDLHVDQUE4Qjs7QUFFM0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsOEJBQThCO0FBQzlCLGdDQUFnQztBQUNoQyxVQUFVO0FBQ1YsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDcERBLGVBQWUsbUJBQU8sQ0FBQywrQkFBdUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDTGE7QUFDYixpQkFBaUIsbUJBQU8sQ0FBQyxtQ0FBMkI7QUFDcEQsMkJBQTJCLG1CQUFPLENBQUMsNkNBQXFDO0FBQ3hFLHNCQUFzQixtQkFBTyxDQUFDLHdDQUFnQztBQUM5RCxrQkFBa0IsbUJBQU8sQ0FBQyxrQ0FBMEI7O0FBRXBEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsYUFBYTtBQUNyQyxLQUFLO0FBQ0w7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7O0FDSkEsc0JBQXNCLG1CQUFPLENBQUMsd0NBQWdDO0FBQzlELGdCQUFnQixtQkFBTyxDQUFDLGdDQUF3Qjs7QUFFaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDVEEsY0FBYyxtQkFBTyxDQUFDLCtCQUFzQjtBQUM1QyxnQkFBZ0IsbUJBQU8sQ0FBQyxnQ0FBd0I7QUFDaEQsc0JBQXNCLG1CQUFPLENBQUMsd0NBQWdDOztBQUU5RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNWQSxlQUFlLG1CQUFPLENBQUMsZ0NBQXdCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ1pBLHNCQUFzQixtQkFBTyxDQUFDLHdDQUFnQzs7QUFFOUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxTQUFTLEVBQUU7QUFDekQsQ0FBQyxnQkFBZ0I7O0FBRWpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLGdCQUFnQjtBQUNuQjtBQUNBOzs7Ozs7Ozs7Ozs7QUNyQ0EsYUFBYSxtQkFBTyxDQUFDLDZCQUFxQjtBQUMxQywrQkFBK0IsbUJBQU8sQ0FBQyx5REFBaUQ7QUFDeEYsY0FBYyxtQkFBTyxDQUFDLGtDQUEwQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQyw0QkFBbUI7QUFDM0MsYUFBYSxtQkFBTyxDQUFDLHFDQUE0Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLCtDQUErQyxzQkFBc0I7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7O0FDN0VBLGFBQWEsbUJBQU8sQ0FBQyw2QkFBcUI7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDUGE7QUFDYixvQ0FBb0MsbUJBQU8sQ0FBQywwREFBaUQ7QUFDN0YsZUFBZSxtQkFBTyxDQUFDLGdDQUF3QjtBQUMvQyxlQUFlLG1CQUFPLENBQUMsZ0NBQXdCO0FBQy9DLDZCQUE2QixtQkFBTyxDQUFDLCtDQUF1QztBQUM1RSx5QkFBeUIsbUJBQU8sQ0FBQyw0Q0FBbUM7QUFDcEUsaUJBQWlCLG1CQUFPLENBQUMsNENBQW1DOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUMzQ0QsWUFBWSxtQkFBTyxDQUFDLDRCQUFvQjtBQUN4QyxjQUFjLG1CQUFPLENBQUMsbUNBQTBCOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7O0FDWkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNMQSxlQUFlLG1CQUFPLENBQUMsZ0NBQXdCOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2JBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDUEEsYUFBYSxtQkFBTyxDQUFDLDZCQUFxQjtBQUMxQyxnQkFBZ0IsbUJBQU8sQ0FBQyx5Q0FBZ0M7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7OztBQ25CQSxhQUFhLG1CQUFPLENBQUMsNkJBQXFCO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLGtDQUF5Qjs7QUFFakQ7QUFDQSxrREFBa0Q7O0FBRWxEOzs7Ozs7Ozs7Ozs7QUNOQSxhQUFhLG1CQUFPLENBQUMsOEJBQXFCO0FBQzFDLFVBQVUsbUJBQU8sQ0FBQywyQkFBa0I7O0FBRXBDOztBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDUEE7Ozs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7Ozs7QUNBQSxzQkFBc0IsbUJBQU8sQ0FBQyx3Q0FBZ0M7O0FBRTlEO0FBQ0E7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1BBO0FBQ0E7O0lBRU0rSixpQjs7Ozs7Ozs7RUFBMEJMLG1GOztBQUVqQnhKLHVKQUFxQixDQUFDNkosaUJBQUQsRUFBb0IsbUJBQXBCLENBQXBDLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztJQUVNanFDLFU7QUFnQkw7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Msc0JBQVluQixPQUFaLEVBQXFCcXJDLE1BQXJCLEVBQW9DQyxPQUFwQyxFQUFvREMsWUFBcEQsRUFBeUU7QUFBQSxRQUFwREYsTUFBb0Q7QUFBcERBLFlBQW9ELEdBQTNDLElBQTJDO0FBQUE7O0FBQUEsUUFBckNDLE9BQXFDO0FBQXJDQSxhQUFxQyxHQUEzQixJQUEyQjtBQUFBOztBQUFBLFFBQXJCQyxZQUFxQjtBQUFyQkEsa0JBQXFCLEdBQU4sSUFBTTtBQUFBOztBQUFBOztBQUFBLGlJQXBCN0QsQ0FvQjZEOztBQUFBLG1JQWxCM0QsS0FrQjJEOztBQUFBLGdJQWpCOUQsS0FpQjhEOztBQUFBLDhIQWZoRSxJQWVnRTs7QUFBQSwrSEFkL0QsSUFjK0Q7O0FBQUEsb0lBYjFELElBYTBEOztBQUFBOztBQUFBOztBQUFBOztBQUN4RSxTQUFLRixNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLQyxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLQyxZQUFMLEdBQW9CQSxZQUFwQjtBQUVBLFNBQUt2ckMsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS3dyQyxRQUFMLEdBQWdCMXJDLHdDQUFDLENBQUNFLE9BQUQsQ0FBakI7QUFFQSxTQUFLb0ksTUFBTCxHQUFjM0Ysd0NBQUMsQ0FBQ0MsUUFBRixDQUFXLDJGQUFBRCx3Q0FBQyxNQUFELENBQUFBLHdDQUFDLEVBQU0sS0FBS2dwQyxZQUFYLEVBQXlCLElBQXpCLENBQVosRUFBNEMsR0FBNUMsQ0FBZDtBQUVBLFNBQUtqckMsSUFBTDtBQUNBOzs7O1NBRURrckMsUyxHQUFBLHFCQUFZO0FBQ1gsUUFBSSxLQUFLTCxNQUFULEVBQWlCO0FBQ2hCLFdBQUtBLE1BQUw7QUFDQTtBQUNELEc7O1NBRURNLFcsR0FBQSx1QkFBYztBQUFBOztBQUNiLFFBQUksS0FBS04sTUFBVCxFQUFpQjtBQUNoQnpyQyxtREFBTSxDQUFDc1EsWUFBUCxDQUFvQixLQUFLMDdCLFNBQXpCO0FBQ0EsV0FBS0EsU0FBTCxHQUFpQmhzQyw2Q0FBTSxDQUFDa0IsVUFBUCxDQUFrQixZQUFNO0FBQ3hDLGFBQUksQ0FBQzRxQyxTQUFMO0FBQ0EsT0FGZ0IsRUFFZGxzQyxvREFBTSxDQUFDZ3dCLFNBRk8sQ0FBakI7QUFHQTtBQUNELEc7O1NBRURxYyxZLEdBQUEsd0JBQWU7QUFDZCxRQUFJLEtBQUtSLE1BQVQsRUFBaUI7QUFDaEJ6ckMsbURBQU0sQ0FBQ3NRLFlBQVAsQ0FBb0IsS0FBSzA3QixTQUF6QjtBQUNBO0FBQ0Q7QUFFRDtBQUNEO0FBQ0E7OztTQUNDanlCLE0sR0FBQSxrQkFBUztBQUNSLFdBQU8sS0FBS3pZLE1BQUwsR0FBYyxjQUFjLEtBQUtBLE1BQUwsQ0FBWTRxQyxJQUF4QyxHQUErQyxLQUF0RDtBQUNBO0FBRUQ7QUFDRDtBQUNBOzs7U0FDQ0Msb0IsR0FBQSxnQ0FBdUI7QUFDdEIsUUFBSSxLQUFLN3FDLE1BQVQsRUFBaUI7QUFDaEIsV0FBS0EsTUFBTCxDQUFZOHFDLFdBQVosQ0FBd0IsaUJBQXhCLEVBQTJDO0FBQzFDQyxrQkFBVSxFQUFFO0FBRDhCLE9BQTNDO0FBR0E7QUFDRDtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1NBQ0NDLFksR0FBQSxzQkFBYUMsU0FBYixFQUF3Qnp4QixJQUF4QixFQUE4QjB4QixZQUE5QixFQUFvRDtBQUFBLFFBQXRCQSxZQUFzQjtBQUF0QkEsa0JBQXNCLEdBQVAsS0FBTztBQUFBOztBQUNuRCxRQUFJLEtBQUtsckMsTUFBVCxFQUFpQjtBQUNoQixXQUFLQSxNQUFMLENBQVk4cUMsV0FBWixDQUF3QixpQkFBeEIsRUFBMkM7QUFDMUNyeUIsY0FBTSxFQUFFZSxJQURrQztBQUUxQzB4QixvQkFBWSxFQUFFQSxZQUY0QjtBQUcxQ0QsaUJBQVMsRUFBRUE7QUFIK0IsT0FBM0M7QUFLQTtBQUNEO0FBRUQ7QUFDRDtBQUNBOzs7U0FDQ0UsVSxHQUFBLHNCQUFhO0FBQ1osV0FBTyxLQUFLbnJDLE1BQUwsR0FBYyxLQUFLQSxNQUFMLENBQVltckMsVUFBWixFQUFkLEdBQXlDLEtBQWhEO0FBQ0EsRzs7U0FFREMsVSxHQUFBLHNCQUFhO0FBQ1osUUFBSSxLQUFLcHJDLE1BQVQsRUFBaUI7QUFDaEIsV0FBS0EsTUFBTCxDQUFZb3JDLFVBQVo7QUFDQTtBQUNEO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7OztTQUNDQyxPLEdBQUEsaUJBQVFDLFVBQVIsRUFBNEI7QUFBQSxRQUFwQkEsVUFBb0I7QUFBcEJBLGdCQUFvQixHQUFQLEtBQU87QUFBQTs7QUFDM0IsUUFBSW4rQixNQUFNLEdBQUcsRUFBYjs7QUFDQSxRQUFJLEtBQUtuTixNQUFULEVBQWlCO0FBQ2hCLFVBQUk7QUFDSCxZQUFJLFlBQVksS0FBS0EsTUFBTCxDQUFZNHFDLElBQXhCLElBQWdDLEtBQUs1cUMsTUFBTCxDQUFZdWhDLE9BQVosQ0FBb0JqbEIsS0FBcEQsSUFBNkQsS0FBS3RjLE1BQUwsQ0FBWXVyQyxPQUE3RSxFQUFzRjtBQUNyRnArQixnQkFBTSxHQUFHLEtBQUtuTixNQUFMLENBQVl1ckMsT0FBWixDQUFvQkMsVUFBcEIsRUFBVDtBQUNBLFNBRkQsTUFFTztBQUNOcitCLGdCQUFNLEdBQUdtK0IsVUFBVSxHQUNoQix3R0FDQSxLQUFLdHJDLE1BQUwsQ0FBWXFyQyxPQUFaLEVBREEsR0FFQSxRQUhnQixHQUloQixLQUFLcnJDLE1BQUwsQ0FBWXFyQyxPQUFaLEVBSkg7QUFLQTtBQUNELE9BVkQsQ0FVRSxPQUFPdjZCLENBQVAsRUFBVSxDQUFFLENBWEUsQ0FXRDs7QUFDZjs7QUFFRCxXQUFPM0QsTUFBUDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7OztTQUNDM00sbUIsR0FBQSw2QkFBb0I4cUMsVUFBcEIsRUFBd0M7QUFBQSxRQUFwQkEsVUFBb0I7QUFBcEJBLGdCQUFvQixHQUFQLEtBQU87QUFBQTs7QUFDdkMsV0FBTyxDQUFDLEtBQUs3eUIsTUFBTCxLQUFnQixRQUFoQixHQUEyQixFQUE1QixJQUFrQyxLQUFLNHlCLE9BQUwsQ0FBYUMsVUFBYixDQUF6QztBQUNBLEc7O1NBRURHLFUsR0FBQSxvQkFBV252QixLQUFYLEVBQWtCcFYsTUFBbEIsRUFBMEI7QUFDekIsUUFBSSxLQUFLbEgsTUFBVCxFQUFpQjtBQUNoQixVQUFJO0FBQ0gsWUFBSXNjLEtBQUosRUFBVztBQUNWLGNBQUksWUFBWSxLQUFLdGMsTUFBTCxDQUFZNHFDLElBQTVCLEVBQWtDO0FBQ2pDLGlCQUFLNXFDLE1BQUwsQ0FBWTByQyxPQUFaLENBQW9CLFNBQXBCO0FBQ0E7QUFDRCxTQUpELE1BSU8sSUFBSSxjQUFjLEtBQUsxckMsTUFBTCxDQUFZNHFDLElBQTlCLEVBQW9DO0FBQzFDLGVBQUs1cUMsTUFBTCxDQUFZMHJDLE9BQVosQ0FBb0IsT0FBcEI7QUFDQTtBQUNELE9BUkQsQ0FRRSxPQUFPNTZCLENBQVAsRUFBVSxDQUFFLENBVEUsQ0FTRDs7O0FBRWYsVUFBSTVKLE1BQUosRUFBWTtBQUNYLGFBQUtBLE1BQUw7QUFDQTtBQUNEO0FBQ0QsRzs7U0FFRDVHLGMsR0FBQSx3QkFBZVEsSUFBZixFQUFxQjhELEtBQXJCLEVBQTRCO0FBQzNCLFFBQUksYUFBYTlELElBQUksQ0FBQzhLLE1BQUwsQ0FBWSxDQUFaLEVBQWUsQ0FBZixDQUFqQixFQUFvQztBQUNuQyxXQUFLKy9CLE9BQUwsQ0FBYTdxQyxJQUFJLENBQUM4SyxNQUFMLENBQVksQ0FBWixDQUFiLEVBQTZCaEgsS0FBN0I7QUFDQSxLQUZELE1BRU87QUFDTixXQUFLZ25DLFFBQUwsQ0FBYzlxQyxJQUFkLEVBQW9COEQsS0FBcEI7QUFDQTtBQUNELEc7O1NBRUQrbUMsTyxHQUFBLGlCQUFRbnlCLElBQVIsRUFBYzVVLEtBQWQsRUFBcUI7QUFDcEIsUUFBSSxLQUFLNUUsTUFBTCxJQUFlLEtBQUs2ckMsUUFBeEIsRUFBa0M7QUFDakMsV0FBS2hCLG9CQUFMO0FBRUEsV0FBS1ksVUFBTCxDQUFnQixJQUFoQjtBQUVBanlCLFVBQUksR0FBR0EsSUFBSSxDQUFDL0UsT0FBTCxDQUFhLGlCQUFiLEVBQWdDLEVBQWhDLENBQVA7O0FBRUEsVUFBSTtBQUNILGFBQUt6VSxNQUFMLENBQVk4ckMsT0FBWixDQUFvQnR5QixJQUFwQjtBQUNBLE9BRkQsQ0FFRSxPQUFPMUksQ0FBUCxFQUFVLENBQUUsQ0FUbUIsQ0FTbEI7OztBQUVmLFVBQUlsTSxLQUFKLEVBQVc7QUFDVixhQUFLQSxLQUFMO0FBQ0E7QUFDRDtBQUNELEc7O1NBRURtbkMsVyxHQUFBLHFCQUFZQyxJQUFaLEVBQWtCRCxZQUFsQixFQUErQjtBQUM5QixRQUFJLEtBQUsvckMsTUFBTCxJQUFlLEtBQUs2ckMsUUFBcEIsSUFBZ0MsY0FBYyxLQUFLN3JDLE1BQUwsQ0FBWTRxQyxJQUE5RCxFQUFvRTtBQUNuRSxVQUFJO0FBQ0gsYUFBSzVxQyxNQUFMLENBQVk4ckMsT0FBWixDQUFvQixLQUFLOXJDLE1BQUwsQ0FBWXFyQyxPQUFaLEdBQXNCNTJCLE9BQXRCLENBQThCdTNCLElBQTlCLEVBQW9DRCxZQUFwQyxDQUFwQjtBQUNBLE9BRkQsQ0FFRSxPQUFPajdCLENBQVAsRUFBVSxDQUFFLENBSHFELENBR3BEOztBQUNmO0FBQ0QsRzs7U0FFRDg2QixRLEdBQUEsa0JBQVN0dkIsS0FBVCxFQUFnQjFYLEtBQWhCLEVBQXVCO0FBQ3RCLFFBQUksS0FBSzVFLE1BQUwsSUFBZSxLQUFLNnJDLFFBQXhCLEVBQWtDO0FBQ2pDLFdBQUtoQixvQkFBTDtBQUVBLFdBQUtZLFVBQUwsQ0FBZ0IsS0FBaEI7O0FBQ0EsVUFBSSxZQUFZLEtBQUt6ckMsTUFBTCxDQUFZNHFDLElBQXhCLElBQWdDLEtBQUs1cUMsTUFBTCxDQUFZdWhDLE9BQVosQ0FBb0JqbEIsS0FBcEQsSUFBNkQsS0FBS3RjLE1BQUwsQ0FBWXVyQyxPQUE3RSxFQUFzRjtBQUNyRixhQUFLdnJDLE1BQUwsQ0FBWXVyQyxPQUFaLENBQW9CVSxVQUFwQixDQUErQjN2QixLQUEvQjtBQUNBLE9BRkQsTUFFTztBQUNOLFlBQUk7QUFDSCxlQUFLdGMsTUFBTCxDQUFZOHJDLE9BQVosQ0FBb0J4dkIsS0FBcEI7QUFDQSxTQUZELENBRUUsT0FBT3hMLENBQVAsRUFBVSxDQUFFLENBSFIsQ0FHUzs7QUFDZjs7QUFFRCxVQUFJbE0sS0FBSixFQUFXO0FBQ1YsYUFBS0EsS0FBTDtBQUNBO0FBQ0Q7QUFDRCxHOztTQUVEdEYsSSxHQUFBLGdCQUFPO0FBQUE7O0FBQ04sUUFBSSxLQUFLUixPQUFMLElBQWdCLENBQUMsS0FBS2tCLE1BQTFCLEVBQWtDO0FBQ2pDLFVBQU1rc0MsUUFBUSxHQUFHLFNBQVhBLFFBQVcsR0FBTTtBQUN0QixZQUFNQyxNQUFNLEdBQUdubUIsc0VBQWY7QUFBQSxZQUNDbk8sUUFBUSxHQUFHdk4sNkRBQUEsQ0FBcUIsVUFBckIsQ0FEWjtBQUFBLFlBRUM4aEMsV0FBVyxHQUFHLENBQUMsQ0FBQzloQyxnRUFBQSxDQUF3Qiw2QkFBeEIsQ0FGakI7QUFBQSxZQUdDK2hDLElBQUksR0FBRyxDQUFDLENBQUMvaEMsZ0VBQUEsQ0FBd0IsNEJBQXhCLENBSFY7O0FBS0EsWUFBSSxDQUFDOGhDLFdBQVcsSUFBSSxDQUFDQyxJQUFqQixLQUEwQixDQUFDRixNQUFNLENBQUNHLGFBQVAsQ0FBcUJDLFdBQXBELEVBQWlFO0FBQ2hFSixnQkFBTSxDQUFDRyxhQUFQLENBQXFCQyxXQUFyQixHQUFtQyxJQUFuQzs7QUFFQSxjQUFJSCxXQUFKLEVBQWlCO0FBQ2hCRCxrQkFBTSxDQUFDSyxhQUFQLEdBQXVCTCxNQUFNLENBQUNLLGFBQVAsQ0FBcUIvM0IsT0FBckIsQ0FBNkIsU0FBN0IsRUFBd0MsRUFBeEMsQ0FBdkI7QUFDQTs7QUFFRCxjQUFJLENBQUM0M0IsSUFBTCxFQUFXO0FBQ1ZGLGtCQUFNLENBQUNNLGFBQVAsSUFBd0IsQ0FBQ04sTUFBTSxDQUFDTSxhQUFQLEdBQXVCLEdBQXZCLEdBQTZCLEVBQTlCLElBQW9DLE1BQTVEO0FBQ0E7QUFDRDs7QUFFRE4sY0FBTSxDQUFDTyxTQUFQLEdBQW1CaHVDLDZDQUFNLENBQUNpdUMsUUFBUCxDQUFnQkMsUUFBbkM7QUFDQVQsY0FBTSxDQUFDVSxjQUFQLEdBQXdCbnVDLDZDQUFNLENBQUNpdUMsUUFBUCxDQUFnQkcsT0FBeEM7QUFFQVgsY0FBTSxDQUFDdDBCLFFBQVAsR0FBa0JxTyxpRUFBa0IsQ0FBQyxDQUFDck8sUUFBUSxJQUFJLElBQWIsRUFBbUJrSyxXQUFuQixFQUFELENBQWxCLElBQXdELElBQTFFOztBQUNBLFlBQUlyakIsNkNBQU0sQ0FBQ2l1QyxRQUFQLENBQWdCSSxHQUFwQixFQUF5QjtBQUN4QnJ1Qyx1REFBTSxDQUFDaXVDLFFBQVAsQ0FBZ0JJLEdBQWhCLENBQW9CQyxZQUFwQixHQUFtQyxJQUFuQztBQUNBOztBQUVELGNBQUksQ0FBQ2h0QyxNQUFMLEdBQWN0Qiw2Q0FBTSxDQUFDaXVDLFFBQVAsQ0FBZ0IzMEIsUUFBaEIsQ0FBeUIsTUFBSSxDQUFDbFosT0FBOUIsRUFBdUNxdEMsTUFBdkMsQ0FBZDs7QUFFQSxjQUFJLENBQUNuc0MsTUFBTCxDQUFZRixFQUFaLENBQWUsS0FBZixFQUFzQixVQUFDdUYsS0FBRCxFQUFXO0FBQ2hDLGNBQUlBLEtBQUssSUFBSUEsS0FBSyxDQUFDeEMsSUFBZixJQUF1QnZGLDBEQUFZLENBQUMydkMsR0FBYixLQUFxQjVuQyxLQUFLLENBQUN4QyxJQUFOLENBQVc0QyxPQUEzRCxFQUFvRTtBQUNuRSxtQkFBTyxLQUFQO0FBQ0E7O0FBRUQsaUJBQU8sSUFBUDtBQUNBLFNBTkQ7O0FBUUEsY0FBSSxDQUFDekYsTUFBTCxDQUFZRixFQUFaLENBQWUsTUFBZixFQUF1QixZQUFNO0FBQzVCLGdCQUFJLENBQUMycUMsV0FBTDtBQUNBLFNBRkQ7O0FBSUEsY0FBSSxDQUFDenFDLE1BQUwsQ0FBWUYsRUFBWixDQUFlLE1BQWYsRUFBdUIsWUFBTTtBQUM1QixnQkFBSSxDQUFDMnFDLFdBQUw7O0FBQ0EsY0FBSSxNQUFJLENBQUNKLFlBQVQsRUFBdUI7QUFDdEIsa0JBQUksQ0FBQ0EsWUFBTCxDQUFrQixZQUFZLE1BQUksQ0FBQ3JxQyxNQUFMLENBQVk0cUMsSUFBMUM7QUFDQTtBQUNELFNBTEQ7O0FBT0EsY0FBSSxDQUFDNXFDLE1BQUwsQ0FBWUYsRUFBWixDQUFlLE9BQWYsRUFBd0IsWUFBTTtBQUM3QixnQkFBSSxDQUFDNnFDLFlBQUw7QUFDQSxTQUZEOztBQUlBLFlBQUlqc0MsNkNBQU0sQ0FBQ3d1QyxVQUFYLEVBQXVCO0FBQ3RCLGdCQUFJLENBQUNsdEMsTUFBTCxDQUFZRixFQUFaLENBQWUsTUFBZixFQUF1QixVQUFDdUYsS0FBRCxFQUFXO0FBQ2pDLGdCQUFJLElBQUlBLEtBQUssQ0FBQ3hDLElBQU4sQ0FBV3NxQyxZQUFYLENBQXdCQyxhQUF4QixFQUFSLEVBQWlEO0FBQ2hELGtCQUFNaFUsSUFBSSxHQUFHL3pCLEtBQUssQ0FBQ3hDLElBQU4sQ0FBV3NxQyxZQUFYLENBQXdCRSxPQUF4QixDQUFnQyxDQUFoQyxDQUFiOztBQUNBLGtCQUFJalUsSUFBSSxJQUFJMTZCLDZDQUFNLENBQUN3dUMsVUFBZixJQUE2QjduQyxLQUFLLENBQUN4QyxJQUFOLENBQVdzcUMsWUFBWCxDQUF3QnB2QixFQUFyRCxJQUEyRHFiLElBQUksQ0FBQ3RmLElBQWhFLElBQXdFc2YsSUFBSSxDQUFDdGYsSUFBTCxDQUFVckQsS0FBVixDQUFnQixTQUFoQixDQUE1RSxFQUF3RztBQUN2RyxvQkFBTXNILEVBQUUsR0FBRzFZLEtBQUssQ0FBQ3hDLElBQU4sQ0FBV3NxQyxZQUFYLENBQXdCcHZCLEVBQW5DO0FBQUEsb0JBQ0N1dkIsT0FBTyxhQUFXdnZCLEVBQVgsTUFEUjtBQUFBLG9CQUVDd3ZCLE1BQU0sR0FBRyxJQUFJN3VDLDZDQUFNLENBQUN3dUMsVUFBWCxFQUZWOztBQUlBSyxzQkFBTSxDQUFDQyxTQUFQLEdBQW1CLFlBQU07QUFDeEIsc0JBQUlELE1BQU0sQ0FBQ3BnQyxNQUFYLEVBQW1CO0FBQ2xCLDBCQUFJLENBQUM0K0IsV0FBTCxDQUFpQnVCLE9BQWpCLGtCQUF1Q0MsTUFBTSxDQUFDcGdDLE1BQTlDO0FBQ0E7QUFDRCxpQkFKRDs7QUFNQW9nQyxzQkFBTSxDQUFDRSxhQUFQLENBQXFCclUsSUFBckI7QUFFQS96QixxQkFBSyxDQUFDeEMsSUFBTixDQUFXc3FDLFlBQVgsQ0FBd0JyQixPQUF4QixDQUFnQyxXQUFoQyxFQUE2Q3dCLE9BQTdDO0FBQ0E7QUFDRDtBQUNELFdBbkJEO0FBb0JBOztBQUVELGNBQUksQ0FBQ3R0QyxNQUFMLENBQVlGLEVBQVosQ0FBZSxlQUFmLEVBQWdDLFlBQU07QUFDckMsY0FBSSxNQUFJLENBQUNFLE1BQUwsQ0FBWTB0QyxjQUFoQixFQUFnQztBQUMvQixrQkFBSSxDQUFDMXRDLE1BQUwsQ0FBWTB0QyxjQUFaLENBQTJCLEtBQTNCOztBQUNBLGtCQUFJLENBQUMxdEMsTUFBTCxDQUFZMHRDLGNBQVosQ0FBMkIsTUFBM0I7O0FBQ0Esa0JBQUksQ0FBQzF0QyxNQUFMLENBQVkwdEMsY0FBWixDQUEyQixPQUEzQjtBQUNBOztBQUVELGdCQUFJLENBQUNDLFdBQUwsR0FBbUIsSUFBbkI7QUFDQSxnQkFBSSxDQUFDOUIsUUFBTCxHQUFnQixJQUFoQjs7QUFFQSxnQkFBSSxDQUFDM2tDLE1BQUw7O0FBRUEsY0FBSSxNQUFJLENBQUNrakMsT0FBVCxFQUFrQjtBQUNqQixrQkFBSSxDQUFDQSxPQUFMO0FBQ0E7QUFDRCxTQWZEO0FBZ0JBLE9BMUZEOztBQTRGQSxVQUFJMXJDLDZDQUFNLENBQUNpdUMsUUFBWCxFQUFxQjtBQUNwQlQsZ0JBQVE7QUFDUixPQUZELE1BRU87QUFDTnh0QyxxREFBTSxDQUFDa3ZDLFlBQVAsR0FBc0IxQixRQUF0QjtBQUNBO0FBQ0Q7QUFDRCxHOztTQUVEdG5DLEssR0FBQSxpQkFBUTtBQUNQLFFBQUksS0FBSzVFLE1BQVQsRUFBaUI7QUFDaEIsVUFBSTtBQUNILGFBQUtBLE1BQUwsQ0FBWTRFLEtBQVo7QUFDQSxPQUZELENBRUUsT0FBT2tNLENBQVAsRUFBVSxDQUFFLENBSEUsQ0FHRDs7QUFDZjtBQUNELEc7O1NBRUQrOEIsUSxHQUFBLG9CQUFXO0FBQ1YsUUFBSSxLQUFLN3RDLE1BQVQsRUFBaUI7QUFDaEIsVUFBSTtBQUNILGVBQU8sQ0FBQyxDQUFDLEtBQUtBLE1BQUwsQ0FBWTh0QyxZQUFaLENBQXlCRCxRQUFsQztBQUNBLE9BRkQsQ0FFRSxPQUFPLzhCLENBQVAsRUFBVSxDQUFFLENBSEUsQ0FHRDs7QUFDZjs7QUFFRCxXQUFPLEtBQVA7QUFDQSxHOztTQUVEaUQsSSxHQUFBLGdCQUFPO0FBQ04sUUFBSSxLQUFLL1QsTUFBVCxFQUFpQjtBQUNoQixVQUFJO0FBQ0gsYUFBS0EsTUFBTCxDQUFZOHRDLFlBQVosQ0FBeUIvNUIsSUFBekIsQ0FBOEIsSUFBOUI7QUFDQSxPQUZELENBRUUsT0FBT2pELENBQVAsRUFBVSxDQUFFLENBSEUsQ0FHRDs7QUFDZjtBQUNELEc7O1NBRUR5NUIsWSxHQUFBLHdCQUFlO0FBQ2QsUUFBSSxLQUFLdnFDLE1BQUwsSUFBZSxLQUFLMnRDLFdBQXhCLEVBQXFDO0FBQ3BDLFVBQUk7QUFDSCxhQUFLM3RDLE1BQUwsQ0FBWWtILE1BQVosQ0FBbUIsS0FBS29qQyxRQUFMLENBQWMzcUMsS0FBZCxFQUFuQixFQUEwQyxLQUFLMnFDLFFBQUwsQ0FBY3lELFdBQWQsRUFBMUM7QUFDQSxPQUZELENBRUUsT0FBT2o5QixDQUFQLEVBQVUsQ0FBRSxDQUhzQixDQUdyQjs7QUFDZjtBQUNELEc7O1NBRURrOUIsVyxHQUFBLHFCQUFZaHFDLEtBQVosRUFBbUI7QUFDbEIsUUFBSSxLQUFLaEUsTUFBVCxFQUFpQjtBQUNoQixVQUFJO0FBQ0gsYUFBS0EsTUFBTCxDQUFZZ3VDLFdBQVosQ0FBd0IsQ0FBQyxDQUFDaHFDLEtBQTFCO0FBQ0EsT0FGRCxDQUVFLE9BQU84TSxDQUFQLEVBQVUsQ0FBRSxDQUhFLENBR0Q7O0FBQ2Y7QUFDRCxHOztTQUVENEYsSyxHQUFBLGVBQU05UixLQUFOLEVBQWE7QUFDWixTQUFLK21DLE9BQUwsQ0FBYSxFQUFiLEVBQWlCL21DLEtBQWpCO0FBQ0EsRzs7Ozs7Ozs7Ozs7Ozs7OztBQ3RXRixpQkFBaUIsbUJBQU8sQ0FBQyw4Q0FBcUMsRTs7Ozs7Ozs7Ozs7QUNBOUQsaUJBQWlCLG1CQUFPLENBQUMscURBQTRDLEU7Ozs7Ozs7Ozs7OztBQ0FyRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsSUFBTXpCLE9BQU8sR0FBR3pFLDZDQUFNLENBQUN5RSxPQUFQLElBQWtCLEVBQWxDO0FBRUFBLE9BQU8sQ0FBQzhxQyxNQUFSLEdBQWlCOXFDLE9BQU8sQ0FBQzhxQyxNQUFSLElBQWtCLEVBQW5DO0FBRUE5cUMsT0FBTyxDQUFDOHFDLE1BQVIsQ0FBZUMsUUFBZixHQUEwQjtBQUN6QixhQUFXLFVBRGM7QUFHekIsV0FBUyxJQUhnQjtBQUl6QixZQUFVLElBSmU7QUFNekIsV0FBUyxHQU5nQjtBQU96QixlQUFhLENBUFk7QUFTekIsZ0JBQWMsTUFUVztBQVV6Qix3QkFBc0IsR0FWRztBQVl6QixnQkFBYyxNQVpXO0FBYXpCLHdCQUFzQixHQWJHO0FBZXpCLFlBQVUsaUJBZmU7QUFnQnpCLDBCQUF3QixJQWhCQztBQWtCekIsZ0JBQWMsTUFsQlc7QUFtQnpCLFlBQVUsS0FuQmU7QUFxQnpCLGlCQUFlLE1BckJVO0FBc0J6QixrQkFBZ0IsQ0F0QlM7QUF1QnpCLGlCQUFlO0FBdkJVLENBQTFCO0FBMEJBL3FDLE9BQU8sQ0FBQzhxQyxNQUFSLENBQWVFLFdBQWYsR0FBNkI7QUFDNUIsYUFBVyxVQURpQjtBQUU1QixXQUFTLEdBRm1CO0FBRzVCLFdBQVM7QUFIbUIsQ0FBN0I7QUFNQWhyQyxPQUFPLENBQUM4cUMsTUFBUixDQUFlRyxnQkFBZixHQUFrQztBQUNqQyxhQUFXLFVBRHNCO0FBRWpDLGVBQWE7QUFGb0IsQ0FBbEM7Ozs7Ozs7Ozs7OztBQ3RDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsSUFBMkI7QUFDbkM7QUFDQTtBQUNBLGFBQWEsVUFBVSxtQkFBTyxDQUFDLGdCQUFRLEVBQUUsRUFBRTtBQUMzQztBQUNBLEtBQUssTUFBTSxFQVdOO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsd0NBQXdDO0FBQ3hDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBNkIsUUFBUTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLDRCQUE0QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RCxnQkFBZ0I7QUFDeEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRCxnQkFBZ0I7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkJBQTJCLHlCQUF5QjtBQUNwRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxXQUFXO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQzs7Ozs7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LGVBQVAsQ0FBdUI4bkMsRUFBdkIsRUFBMkI7QUFDMUIsZ0NBQXNCdnlDLHlEQUFJLENBQUNqTSxLQUFEO0FBREEsU0FBM0I7QUFHQSxPQUpEOztBQU1BLFdBQUksQ0FBQzJvRCxVQUFMLENBQWdCL3JELFNBQWhCLENBQTBCLFVBQUNvRCxLQUFELEVBQVc7QUFDcENvMUMseUVBQU0sQ0FBQzErQixlQUFQLENBQXVCK25DLEVBQXZCLEVBQTJCO0FBQzFCLHdCQUFjeHlDLHlEQUFJLENBQUNqTSxLQUFEO0FBRFEsU0FBM0I7QUFHQSxPQUpEO0FBS0EsS0F0QkQsRUFzQkcxRixtREFBTSxDQUFDaTNDLFFBdEJWO0FBdUJBLEciLCJmaWxlIjoianMvYWRtaW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcInJhaW5sb29wL3YvMC4wLjAvc3RhdGljL2pzL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTQwKTtcbiIsIi8qIGVzbGludCBxdW90ZS1wcm9wczogMCAqL1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWxlVHlwZSA9IHtcblx0J1Vua25vd24nOiAndW5rbm93bicsXG5cdCdUZXh0JzogJ3RleHQnLFxuXHQnSHRtbCc6ICdodG1sJyxcblx0J0NvZGUnOiAnY29kZScsXG5cdCdFbWwnOiAnZW1sJyxcblx0J1dvcmRUZXh0JzogJ3dvcmQtdGV4dCcsXG5cdCdQZGYnOiAncGRmJyxcblx0J0ltYWdlJzogJ2ltYWdlJyxcblx0J0F1ZGlvJzogJ2F1ZGlvJyxcblx0J1ZpZGVvJzogJ3ZpZGVvJyxcblx0J1NoZWV0JzogJ3NoZWV0Jyxcblx0J1ByZXNlbnRhdGlvbic6ICdwcmVzZW50YXRpb24nLFxuXHQnQ2VydGlmaWNhdGUnOiAnY2VydGlmaWNhdGUnLFxuXHQnQ2VydGlmaWNhdGVCaW4nOiAnY2VydGlmaWNhdGUtYmluJyxcblx0J0FyY2hpdmUnOiAnYXJjaGl2ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFN0b3JhZ2VSZXN1bHRUeXBlID0ge1xuXHQnU3VjY2Vzcyc6ICdzdWNjZXNzJyxcblx0J0Fib3J0JzogJ2Fib3J0Jyxcblx0J0Vycm9yJzogJ2Vycm9yJyxcblx0J1VubG9hZCc6ICd1bmxvYWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2N1c2VkID0ge1xuXHQnTm9uZSc6ICdub25lJyxcblx0J01lc3NhZ2VMaXN0JzogJ21lc3NhZ2UtbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlID0ge1xuXHQnRW1wdHknOiAxMCxcblx0J0xvZ2luJzogMjAsXG5cdCdBdXRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXRlVHlwZSA9IHtcblx0J1dlYm1haWwnOiAwLFxuXHQnQWRtaW4nOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBDYXBhID0ge1xuXHQnVHdvRmFjdG9yJzogJ1RXT19GQUNUT1InLFxuXHQnVHdvRmFjdG9yRm9yY2UnOiAnVFdPX0ZBQ1RPUl9GT1JDRScsXG5cdCdPcGVuUEdQJzogJ09QRU5fUEdQJyxcblx0J1ByZWZldGNoJzogJ1BSRUZFVENIJyxcblx0J0dyYXZhdGFyJzogJ0dSQVZBVEFSJyxcblx0J0ZvbGRlcnMnOiAnRk9MREVSUycsXG5cdCdDb21wb3Nlcic6ICdDT01QT1NFUicsXG5cdCdDb250YWN0cyc6ICdDT05UQUNUUycsXG5cdCdSZWxvYWQnOiAnUkVMT0FEJyxcblx0J1NlYXJjaCc6ICdTRUFSQ0gnLFxuXHQnU2VhcmNoQWR2JzogJ1NFQVJDSF9BRFYnLFxuXHQnTWVzc2FnZUFjdGlvbnMnOiAnTUVTU0FHRV9BQ1RJT05TJyxcblx0J01lc3NhZ2VMaXN0QWN0aW9ucyc6ICdNRVNTQUdFTElTVF9BQ1RJT05TJyxcblx0J0F0dGFjaG1lbnRzQWN0aW9ucyc6ICdBVFRBQ0hNRU5UU19BQ1RJT05TJyxcblx0J0Rhbmdlcm91c0FjdGlvbnMnOiAnREFOR0VST1VTX0FDVElPTlMnLFxuXHQnU2V0dGluZ3MnOiAnU0VUVElOR1MnLFxuXHQnSGVscCc6ICdIRUxQJyxcblx0J1RoZW1lcyc6ICdUSEVNRVMnLFxuXHQnVXNlckJhY2tncm91bmQnOiAnVVNFUl9CQUNLR1JPVU5EJyxcblx0J1NpZXZlJzogJ1NJRVZFJyxcblx0J0ZpbHRlcnMnOiAnRklMVEVSUycsXG5cdCdBdHRhY2htZW50VGh1bWJuYWlscyc6ICdBVFRBQ0hNRU5UX1RIVU1CTkFJTFMnLFxuXHQnVGVtcGxhdGVzJzogJ1RFTVBMQVRFUycsXG5cdCdBdXRvTG9nb3V0JzogJ0FVVE9MT0dPVVQnLFxuXHQnQWRkaXRpb25hbEFjY291bnRzJzogJ0FERElUSU9OQUxfQUNDT1VOVFMnLFxuXHQnSWRlbnRpdGllcyc6ICdJREVOVElUSUVTJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgS2V5U3RhdGUgPSB7XG5cdCdBbGwnOiAnYWxsJyxcblx0J05vbmUnOiAnbm9uZScsXG5cdCdDb250YWN0TGlzdCc6ICdjb250YWN0LWxpc3QnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J0ZvbGRlckxpc3QnOiAnZm9sZGVyLWxpc3QnLFxuXHQnTWVzc2FnZVZpZXcnOiAnbWVzc2FnZS12aWV3Jyxcblx0J0NvbXBvc2UnOiAnY29tcG9zZScsXG5cdCdTZXR0aW5ncyc6ICdzZXR0aW5ncycsXG5cdCdNZW51JzogJ21lbnUnLFxuXHQnUG9wdXBDb21wb3NlT3BlblBHUCc6ICdjb21wb3NlLW9wZW4tcGdwJyxcblx0J1BvcHVwTWVzc2FnZU9wZW5QR1AnOiAnbWVzc2FnZS1vcGVuLXBncCcsXG5cdCdQb3B1cFZpZXdPcGVuUEdQJzogJ3ZpZXctb3Blbi1wZ3AnLFxuXHQnUG9wdXBLZXlib2FyZFNob3J0Y3V0c0hlbHAnOiAncG9wdXAta2V5Ym9hcmQtc2hvcnRjdXRzLWhlbHAnLFxuXHQnUG9wdXBBc2snOiAncG9wdXAtYXNrJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRm9sZGVyVHlwZSA9IHtcblx0J0luYm94JzogMTAsXG5cdCdTZW50SXRlbXMnOiAxMSxcblx0J0RyYWZ0JzogMTIsXG5cdCdUcmFzaCc6IDEzLFxuXHQnU3BhbSc6IDE0LFxuXHQnQXJjaGl2ZSc6IDE1LFxuXHQnTm90U3BhbSc6IDgwLFxuXHQnVXNlcic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJGb2xkZXJUeXBlID0ge1xuXHQnVVNFUic6IDAsXG5cdCdJTkJPWCc6IDEsXG5cdCdTRU5UJzogMixcblx0J0RSQUZUUyc6IDMsXG5cdCdKVU5LJzogNCxcblx0J1RSQVNIJzogNSxcblx0J0lNUE9SVEFOVCc6IDEwLFxuXHQnRkxBR0dFRCc6IDExLFxuXHQnQUxMJzogMTJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZUFzU3RyaW5nID0ge1xuXHQnRGVmYXVsdE9mZic6ICdkZWZhdWx0b2ZmJyxcblx0J0RlZmF1bHRPbic6ICdkZWZhdWx0b24nLFxuXHQnVW51c2VkJzogJ3VudXNlZCdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2luU2lnbk1lVHlwZSA9IHtcblx0J0RlZmF1bHRPZmYnOiAwLFxuXHQnRGVmYXVsdE9uJzogMSxcblx0J1VudXNlZCc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENvbXBvc2VUeXBlID0ge1xuXHQnRW1wdHknOiAnZW1wdHknLFxuXHQnUmVwbHknOiAncmVwbHknLFxuXHQnUmVwbHlBbGwnOiAncmVwbHlhbGwnLFxuXHQnRm9yd2FyZCc6ICdmb3J3YXJkJyxcblx0J0ZvcndhcmRBc0F0dGFjaG1lbnQnOiAnZm9yd2FyZC1hcy1hdHRhY2htZW50Jyxcblx0J0RyYWZ0JzogJ2RyYWZ0Jyxcblx0J0VkaXRBc05ldyc6ICdlZGl0YXNuZXcnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBVcGxvYWRFcnJvckNvZGUgPSB7XG5cdCdOb3JtYWwnOiAwLFxuXHQnRmlsZUlzVG9vQmlnJzogMSxcblx0J0ZpbGVQYXJ0aWFsbHlVcGxvYWRlZCc6IDIsXG5cdCdGaWxlTm9VcGxvYWRlZCc6IDMsXG5cdCdNaXNzaW5nVGVtcEZvbGRlcic6IDQsXG5cdCdGaWxlT25TYXZlaW5nRXJyb3InOiA1LFxuXHQnRmlsZVR5cGUnOiA5OCxcblx0J1Vua25vd24nOiA5OVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2V0U3lzdGVtRm9sZGVyc05vdGlmaWNhdGlvbiA9IHtcblx0J05vbmUnOiAwLFxuXHQnU2VudCc6IDEsXG5cdCdEcmFmdCc6IDIsXG5cdCdTcGFtJzogMyxcblx0J1RyYXNoJzogNCxcblx0J0FyY2hpdmUnOiA1XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDbGllbnRTaWRlS2V5TmFtZSA9IHtcblx0J0ZvbGRlcnNMYXNoSGFzaCc6IDAsXG5cdCdNZXNzYWdlc0luYm94TGFzdEhhc2gnOiAxLFxuXHQnTWFpbEJveExpc3RTaXplJzogMixcblx0J0V4cGFuZGVkRm9sZGVycyc6IDMsXG5cdCdGb2xkZXJMaXN0U2l6ZSc6IDQsXG5cdCdNZXNzYWdlTGlzdFNpemUnOiA1LFxuXHQnTGFzdFJlcGx5QWN0aW9uJzogNixcblx0J0xhc3RTaWduTWUnOiA3LFxuXHQnQ29tcG9zZUxhc3RJZGVudGl0eUlEJzogOCxcblx0J01lc3NhZ2VIZWFkZXJGdWxsSW5mbyc6IDksXG5cdCdNZXNzYWdlQXR0YWNobW5ldENvbnRyb2xzJzogMTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IEV2ZW50S2V5Q29kZSA9IHtcblx0J0JhY2tzcGFjZSc6IDgsXG5cdCdUYWInOiA5LFxuXHQnRW50ZXInOiAxMyxcblx0J0VzYyc6IDI3LFxuXHQnUGFnZVVwJzogMzMsXG5cdCdQYWdlRG93bic6IDM0LFxuXHQnTGVmdCc6IDM3LFxuXHQnUmlnaHQnOiAzOSxcblx0J1VwJzogMzgsXG5cdCdEb3duJzogNDAsXG5cdCdFbmQnOiAzNSxcblx0J0hvbWUnOiAzNixcblx0J1NwYWNlJzogMzIsXG5cdCdJbnNlcnQnOiA0NSxcblx0J0RlbGV0ZSc6IDQ2LFxuXHQnQSc6IDY1LFxuXHQnUyc6IDgzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2V0QWN0aW9uID0ge1xuXHQnU2V0U2Vlbic6IDAsXG5cdCdVbnNldFNlZW4nOiAxLFxuXHQnU2V0RmxhZyc6IDIsXG5cdCdVbnNldEZsYWcnOiAzXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlU2VsZWN0QWN0aW9uID0ge1xuXHQnQWxsJzogMCxcblx0J05vbmUnOiAxLFxuXHQnSW52ZXJ0JzogMixcblx0J1Vuc2Vlbic6IDMsXG5cdCdTZWVuJzogNCxcblx0J0ZsYWdnZWQnOiA1LFxuXHQnVW5mbGFnZ2VkJzogNlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRGVza3RvcE5vdGlmaWNhdGlvbiA9IHtcblx0J0FsbG93ZWQnOiAwLFxuXHQnTm90QWxsb3dlZCc6IDEsXG5cdCdEZW5pZWQnOiAyLFxuXHQnTm90U3VwcG9ydGVkJzogOVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5ID0ge1xuXHQnTG93JzogNSxcblx0J05vcm1hbCc6IDMsXG5cdCdIaWdoJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRWRpdG9yRGVmYXVsdFR5cGUgPSB7XG5cdCdIdG1sJzogJ0h0bWwnLFxuXHQnUGxhaW4nOiAnUGxhaW4nLFxuXHQnSHRtbEZvcmNlZCc6ICdIdG1sRm9yY2VkJyxcblx0J1BsYWluRm9yY2VkJzogJ1BsYWluRm9yY2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VydmVyU2VjdXJlID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTU0wnOiAxLFxuXHQnVExTJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2VhcmNoRGF0ZVR5cGUgPSB7XG5cdCdBbGwnOiAtMSxcblx0J0RheXMzJzogMyxcblx0J0RheXM3JzogNyxcblx0J01vbnRoJzogMzBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNhdmVTZXR0aW5nc1N0ZXAgPSB7XG5cdCdBbmltYXRlJzogLTIsXG5cdCdJZGxlJzogLTEsXG5cdCdUcnVlUmVzdWx0JzogMSxcblx0J0ZhbHNlUmVzdWx0JzogMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTGF5b3V0ID0ge1xuXHQnTm9QcmV2aWV3JzogMCxcblx0J1NpZGVQcmV2aWV3JzogMSxcblx0J0JvdHRvbVByZXZpZXcnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJDb25kaXRpb25GaWVsZCA9IHtcblx0J0Zyb20nOiAnRnJvbScsXG5cdCdSZWNpcGllbnQnOiAnUmVjaXBpZW50Jyxcblx0J1N1YmplY3QnOiAnU3ViamVjdCcsXG5cdCdIZWFkZXInOiAnSGVhZGVyJyxcblx0J1NpemUnOiAnU2l6ZSdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvblR5cGUgPSB7XG5cdCdDb250YWlucyc6ICdDb250YWlucycsXG5cdCdOb3RDb250YWlucyc6ICdOb3RDb250YWlucycsXG5cdCdFcXVhbFRvJzogJ0VxdWFsVG8nLFxuXHQnTm90RXF1YWxUbyc6ICdOb3RFcXVhbFRvJyxcblx0J1JlZ2V4JzogJ1JlZ2V4Jyxcblx0J092ZXInOiAnT3ZlcicsXG5cdCdVbmRlcic6ICdVbmRlcidcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlcnNBY3Rpb24gPSB7XG5cdCdOb25lJzogJ05vbmUnLFxuXHQnTW92ZVRvJzogJ01vdmVUbycsXG5cdCdEaXNjYXJkJzogJ0Rpc2NhcmQnLFxuXHQnVmFjYXRpb24nOiAnVmFjYXRpb24nLFxuXHQnUmVqZWN0JzogJ1JlamVjdCcsXG5cdCdGb3J3YXJkJzogJ0ZvcndhcmQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBGaWx0ZXJSdWxlc1R5cGUgPSB7XG5cdCdBbGwnOiAnQWxsJyxcblx0J0FueSc6ICdBbnknXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTaWduZWRWZXJpZnlTdGF0dXMgPSB7XG5cdCdVbmtub3duUHVibGljS2V5cyc6IC00LFxuXHQnVW5rbm93blByaXZhdGVLZXknOiAtMyxcblx0J1VudmVyaWZpZWQnOiAtMixcblx0J0Vycm9yJzogLTEsXG5cdCdOb25lJzogMCxcblx0J1N1Y2Nlc3MnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBDb250YWN0UHJvcGVydHlUeXBlID0ge1xuXHQnVW5rbm93bic6IDAsXG5cblx0J0Z1bGxOYW1lJzogMTAsXG5cblx0J0ZpcnN0TmFtZSc6IDE1LFxuXHQnTGFzdE5hbWUnOiAxNixcblx0J01pZGRsZU5hbWUnOiAxNixcblx0J05pY2snOiAxOCxcblxuXHQnTmFtZVByZWZpeCc6IDIwLFxuXHQnTmFtZVN1ZmZpeCc6IDIxLFxuXG5cdCdFbWFpbCc6IDMwLFxuXHQnUGhvbmUnOiAzMSxcblx0J1dlYic6IDMyLFxuXG5cdCdCaXJ0aGRheSc6IDQwLFxuXG5cdCdGYWNlYm9vayc6IDkwLFxuXHQnU2t5cGUnOiA5MSxcblx0J0dpdEh1Yic6IDkyLFxuXG5cdCdOb3RlJzogMTEwLFxuXG5cdCdDdXN0b20nOiAyNTBcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1hZ2ljcyA9IHtcblx0J0V2ZW50V2hpY2hNb3VzZU1pZGRsZSc6IDMsXG5cdCdpZnZpc2libGVJZGxlMTBzJzogMTAsXG5cblx0J0JpdExlbmd0aDIwNDgnOiAyMDQ4LFxuXHQnQml0TGVuZ3RoMTAyNCc6IDEwMjQsXG5cblx0J1NpemUzNTBweCc6IDM1MCxcblx0J1NpemU1MHB4JzogNTAsXG5cdCdTaXplMjBweCc6IDIwLFxuXHQnU2l6ZTFweCc6IDEsXG5cblx0J1RpbWUzMG1Jbk1pbic6IDMwLFxuXG5cdCdUaW1lNjBtJzogNjAwMDAgKiA2MCxcblx0J1RpbWUzMG0nOiA2MDAwMCAqIDMwLFxuXHQnVGltZTIwbSc6IDYwMDAwICogMjAsXG5cdCdUaW1lMTVtJzogNjAwMDAgKiAxNSxcblx0J1RpbWUxMG0nOiA2MDAwMCAqIDEwLFxuXHQnVGltZTVtJzogNjAwMDAgKiA1LFxuXHQnVGltZTNtJzogNjAwMDAgKiAzLFxuXHQnVGltZTJtJzogNjAwMDAgKiAyLFxuXHQnVGltZTFtJzogNjAwMDAsXG5cdCdUaW1lMzBzJzogMzAwMDAsXG5cdCdUaW1lMTBzJzogMTAwMDAsXG5cdCdUaW1lN3MnOiA3MDAwLFxuXHQnVGltZTVzJzogNTAwMCxcblx0J1RpbWUzcyc6IDMwMDAsXG5cdCdUaW1lMXMnOiAxMDAwLFxuXHQnVGltZTUwMG1zJzogNTAwLFxuXHQnVGltZTM1MG1zJzogMzUwLFxuXHQnVGltZTI1MG1zJzogMjUwLFxuXHQnVGltZTIwMG1zJzogMjAwLFxuXHQnVGltZTEwMG1zJzogMTAwLFxuXHQnVGltZTUwbXMnOiA1MCxcblx0J1RpbWUyMG1zJzogMjAsXG5cdCdUaW1lMTBtcyc6IDEwLFxuXHQnVGltZTFtcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFBvcnRzID0ge1xuXHQnSW1hcCc6IDE0Myxcblx0J0ltYXBTc2wnOiA5OTMsXG5cdCdTbXRwJzogMjUsXG5cdCdTbXRwU3NsJzogNDY1LFxuXHQnU210cFN0YXJ0VGxzJzogNTg3XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBOb3RpZmljYXRpb24gPSB7XG5cdCdJbnZhbGlkVG9rZW4nOiAxMDEsXG5cdCdBdXRoRXJyb3InOiAxMDIsXG5cdCdBY2Nlc3NFcnJvcic6IDEwMyxcblx0J0Nvbm5lY3Rpb25FcnJvcic6IDEwNCxcblx0J0NhcHRjaGFFcnJvcic6IDEwNSxcblx0J1NvY2lhbEZhY2Vib29rTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA2LFxuXHQnU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwNyxcblx0J1NvY2lhbEdvb2dsZUxvZ2luQWNjZXNzRGlzYWJsZSc6IDEwOCxcblx0J0RvbWFpbk5vdEFsbG93ZWQnOiAxMDksXG5cdCdBY2NvdW50Tm90QWxsb3dlZCc6IDExMCxcblxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCc6IDEyMCxcblx0J0FjY291bnRUd29GYWN0b3JBdXRoRXJyb3InOiAxMjEsXG5cblx0J0NvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkJzogMTMwLFxuXHQnQ3VycmVudFBhc3N3b3JkSW5jb3JyZWN0JzogMTMxLFxuXHQnTmV3UGFzc3dvcmRTaG9ydCc6IDEzMixcblx0J05ld1Bhc3N3b3JkV2Vhayc6IDEzMyxcblx0J05ld1Bhc3N3b3JkRm9yYmlkZGVuJzogMTM0LFxuXG5cdCdDb250YWN0c1N5bmNFcnJvcic6IDE0MCxcblxuXHQnQ2FudEdldE1lc3NhZ2VMaXN0JzogMjAxLFxuXHQnQ2FudEdldE1lc3NhZ2UnOiAyMDIsXG5cdCdDYW50RGVsZXRlTWVzc2FnZSc6IDIwMyxcblx0J0NhbnRNb3ZlTWVzc2FnZSc6IDIwNCxcblx0J0NhbnRDb3B5TWVzc2FnZSc6IDIwNSxcblxuXHQnQ2FudFNhdmVNZXNzYWdlJzogMzAxLFxuXHQnQ2FudFNlbmRNZXNzYWdlJzogMzAyLFxuXHQnSW52YWxpZFJlY2lwaWVudHMnOiAzMDMsXG5cblx0J0NhbnRTYXZlRmlsdGVycyc6IDM1MSxcblx0J0NhbnRHZXRGaWx0ZXJzJzogMzUyLFxuXHQnRmlsdGVyc0FyZU5vdENvcnJlY3QnOiAzNTUsXG5cblx0J0NhbnRDcmVhdGVGb2xkZXInOiA0MDAsXG5cdCdDYW50UmVuYW1lRm9sZGVyJzogNDAxLFxuXHQnQ2FudERlbGV0ZUZvbGRlcic6IDQwMixcblx0J0NhbnRTdWJzY3JpYmVGb2xkZXInOiA0MDMsXG5cdCdDYW50VW5zdWJzY3JpYmVGb2xkZXInOiA0MDQsXG5cdCdDYW50RGVsZXRlTm9uRW1wdHlGb2xkZXInOiA0MDUsXG5cblx0J0NhbnRTYXZlU2V0dGluZ3MnOiA1MDEsXG5cdCdDYW50U2F2ZVBsdWdpblNldHRpbmdzJzogNTAyLFxuXG5cdCdEb21haW5BbHJlYWR5RXhpc3RzJzogNjAxLFxuXG5cdCdDYW50SW5zdGFsbFBhY2thZ2UnOiA3MDEsXG5cdCdDYW50RGVsZXRlUGFja2FnZSc6IDcwMixcblx0J0ludmFsaWRQbHVnaW5QYWNrYWdlJzogNzAzLFxuXHQnVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlJzogNzA0LFxuXG5cdCdMaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlJzogNzEwLFxuXHQnTGljZW5zaW5nRXhwaXJlZCc6IDcxMSxcblx0J0xpY2Vuc2luZ0Jhbm5lZCc6IDcxMixcblxuXHQnRGVtb1NlbmRNZXNzYWdlRXJyb3InOiA3NTAsXG5cdCdEZW1vQWNjb3VudEVycm9yJzogNzUxLFxuXG5cdCdBY2NvdW50QWxyZWFkeUV4aXN0cyc6IDgwMSxcblx0J0FjY291bnREb2VzTm90RXhpc3QnOiA4MDIsXG5cblx0J01haWxTZXJ2ZXJFcnJvcic6IDkwMSxcblx0J0NsaWVudFZpZXdFcnJvcic6IDkwMixcblx0J0ludmFsaWRJbnB1dEFyZ3VtZW50JzogOTAzLFxuXG5cdCdBamF4RmFsc2UnOiA5NTAsXG5cdCdBamF4QWJvcnQnOiA5NTEsXG5cdCdBamF4UGFyc2UnOiA5NTIsXG5cdCdBamF4VGltZW91dCc6IDk1MyxcblxuXHQnVW5rbm93bk5vdGlmaWNhdGlvbic6IDk5OSxcblx0J1Vua25vd25FcnJvcic6IDk5OVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgT3BlbnRpcCBmcm9tICdPcGVudGlwJztcbmltcG9ydCBQaWthZGF5IGZyb20gJ3Bpa2FkYXknO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCBrbyA9IHdpbmRvdy5rbyxcblx0JHdpbiA9ICQod2luZG93KSxcblx0ZkRpc3Bvc2FsVG9vbHRpcEhlbHBlciA9IChlbGVtZW50KSA9PiB7XG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy51cGRhdGVXaWR0aCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRmSW5pdCA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdGZWYWx1ZSgkZWwud2lkdGgoKSk7XG5cdFx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdFx0fTtcblxuXHRcdCR3aW4ub24oJ3Jlc2l6ZScsIGZJbml0KTtcblx0XHRmSW5pdCgpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkd2luLm9mZigncmVzaXplJywgZkluaXQpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZWRpdG9yID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRsZXQgZWRpdG9yID0gbnVsbDtcblxuXHRcdGNvbnN0IGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRIdG1sRWRpdG9yID0gcmVxdWlyZSgnQ29tbW9uL0h0bWxFZGl0b3InKS5kZWZhdWx0LFxuXHRcdFx0ZlVwZGF0ZUVkaXRvclZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZS5fX2VkaXRvci5zZXRIdG1sT3JQbGFpbihmVmFsdWUoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmVXBkYXRlS29WYWx1ZSA9ICgpID0+IHtcblx0XHRcdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuX19lZGl0b3IpIHtcblx0XHRcdFx0XHRmVmFsdWUoZlZhbHVlLl9fZWRpdG9yLmdldERhdGFXaXRoSHRtbE1hcmsoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRmT25SZWFkeSA9ICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yID0gZWRpdG9yO1xuXHRcdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUoKTtcblx0XHRcdH07XG5cblx0XHRpZiAoa28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgSHRtbEVkaXRvcikge1xuXHRcdFx0ZWRpdG9yID0gbmV3IEh0bWxFZGl0b3IoZWxlbWVudCwgZlVwZGF0ZUtvVmFsdWUsIGZPblJlYWR5LCBmVXBkYXRlS29WYWx1ZSk7XG5cblx0XHRcdGZWYWx1ZS5fX2ZldGNoRWRpdG9yVmFsdWUgPSBmVXBkYXRlS29WYWx1ZTtcblxuXHRcdFx0ZlZhbHVlLnN1YnNjcmliZShmVXBkYXRlRWRpdG9yVmFsdWUpO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmpzb24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudCkudGV4dCh3aW5kb3cuSlNPTi5zdHJpbmdpZnkoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNjcm9sbGVyU2hhZG93cyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBsaW1pdCA9IDgsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29udCA9ICRlbC5maW5kKCdbZGF0YS1zY3JvbGxlci1zaGFkb3dzLWNvbnRlbnRdJylbMF0gfHwgbnVsbCxcblx0XHRcdGZGdW5jID0gXy50aHJvdHRsZSgoKSA9PiB7XG5cdFx0XHRcdCRlbFxuXHRcdFx0XHRcdC50b2dnbGVDbGFzcygnc2Nyb2xsZXItc2hhZG93LXRvcCcsIGxpbWl0IDwgY29udC5zY3JvbGxUb3ApXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctYm90dG9tJywgY29udC5zY3JvbGxUb3AgKyBsaW1pdCA8IGNvbnQuc2Nyb2xsSGVpZ2h0IC0gY29udC5jbGllbnRIZWlnaHQpO1xuXHRcdFx0fSwgMTAwKTtcblxuXHRcdGlmIChjb250KSB7XG5cdFx0XHQkKGNvbnQpLm9uKCdzY3JvbGwgcmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0JHdpbi5vbigncmVzaXplJywgZkZ1bmMpO1xuXG5cdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGNvbnQsICgpID0+IHtcblx0XHRcdFx0JChjb250KS5vZmYoKTtcblx0XHRcdFx0JHdpbi5vZmYoJ3Jlc2l6ZScsIGZGdW5jKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBpa2FkYXkgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpID0+IHtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnMudGV4dElucHV0LmluaXQoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChQaWthZGF5KSB7XG5cdFx0XHRlbGVtZW50Ll9fcGlrYWRheSA9IG5ldyBQaWthZGF5KHtcblx0XHRcdFx0ZmllbGQ6IGVsZW1lbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnZpc2libGVBbmltYXRlZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWluaXRlZCcpO1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCRlbC5zaG93KCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5oaWRlKCk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLmFkZENsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKS5zaG93KCk7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0JGVsLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHRcdH0sIDEwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKS5yZW1vdmVDbGFzcygncmwtYW5pbWF0ZWQtaGlkZGVuJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudG9vbHRpcCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkge1xuXHRcdFx0Y29uc3Qgc1ZhbHVlID0gIWtvLmlzT2JzZXJ2YWJsZShmVmFsdWUpICYmIF8uaXNGdW5jdGlvbihmVmFsdWUpID8gZlZhbHVlKCkgOiBrby51bndyYXAoZlZhbHVlKTtcblxuXHRcdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRcdCdzdHlsZSc6ICdyYWlubG9vcFRpcCcsXG5cdFx0XHRcdCdlbGVtZW50JzogZWxlbWVudCxcblx0XHRcdFx0J3RpcEpvaW50JzogJGVsLmRhdGEoJ3Rvb2x0aXAtam9pbicpIHx8ICdib3R0b20nXG5cdFx0XHR9KTtcblxuXHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHRcdGlmICh2KSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCcnID09PSBzVmFsdWUpIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzSTE4Tikge1xuXHRcdFx0XHRjb25zdCBUcmFuc2xhdG9yID0gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKTtcblxuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblxuXHRcdFx0XHRUcmFuc2xhdG9yLnRyaWdnZXIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0R2xvYmFscy5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChUcmFuc2xhdG9yLmkxOG4oc1ZhbHVlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoc1ZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0JHdpbi5vbigncmwudG9vbHRpcHMuYWN0aXZhdGUnLCAoKSA9PiB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmFjdGl2YXRlKCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRpc01vYmlsZSA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1tb2JpbGUnKSB8fCAnb2ZmJyksXG5cdFx0XHRpc0kxOE4gPSAnb24nID09PSAoJGVsLmRhdGEoJ3Rvb2x0aXAtaTE4bicpIHx8ICdvbicpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHRpZiAoKCFHbG9iYWxzLmJNb2JpbGVEZXZpY2UgfHwgaXNNb2JpbGUpICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KGlzSTE4TiA/IHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4bihzVmFsdWUpIDogc1ZhbHVlKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KCcnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwRXJyb3JUaXAgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAgPSBuZXcgT3BlbnRpcChlbGVtZW50LCB7XG5cdFx0XHRzdHlsZTogJ3JhaW5sb29wRXJyb3JUaXAnLFxuXHRcdFx0aGlkZU9uOiAnbW91c2VvdXQgY2xpY2snLFxuXHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdHRpcEpvaW50OiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ3RvcCdcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblxuXHRcdCQod2luZG93LmRvY3VtZW50KS5vbignY2xpY2snLCAoKSA9PiB7XG5cdFx0XHRpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9fb3BlbnRpcCkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRmRGlzcG9zYWxUb29sdGlwSGVscGVyKGVsZW1lbnQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0dmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpLFxuXHRcdFx0b3BlblRpcHMgPSBlbGVtZW50Ll9fb3BlbnRpcDtcblxuXHRcdGlmIChvcGVuVGlwcykge1xuXHRcdFx0aWYgKCcnID09PSB2YWx1ZSkge1xuXHRcdFx0XHRvcGVuVGlwcy5oaWRlKCk7XG5cdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0XHRpZiAoJGVsLmlzKCc6dmlzaWJsZScpKSB7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KHZhbHVlKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmFjdGl2YXRlKCk7XG5cdFx0XHRcdFx0XHRvcGVuVGlwcy5zaG93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQoJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVnaXN0cmF0ZUJvb3RzdHJhcERyb3Bkb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmIChHbG9iYWxzICYmIEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zKSB7XG5cdFx0XHRHbG9iYWxzLmRhdGEuYUJvb3RzdHJhcERyb3Bkb3ducy5wdXNoKCQoZWxlbWVudCkpO1xuXG5cdFx0XHQkKGVsZW1lbnQpLmNsaWNrKCgpID0+IHtcblx0XHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8ga28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQvLyB9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vcGVuRHJvcGRvd25UcmlnZ2VyID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cdFx0XHRpZiAoISRlbC5oYXNDbGFzcygnb3BlbicpKSB7XG5cdFx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fVxuXG5cdFx0XHQkZWwuZmluZCgnLmRyb3Bkb3duLXRvZ2dsZScpLmZvY3VzKCk7XG5cblx0XHRcdHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLmRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuZHJvcGRvd25DbG9zZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmNsb3Nlc3QoJy5kcm9wZG93bicpXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0nLCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudCkuZHJvcGRvd24oJ3RvZ2dsZScpO1xuXHRcdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5wb3BvdmVyID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkucG9wb3Zlcihrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQgPSB7fTtcbmtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LmluaXQgPSBrby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dC51cGRhdGUgPSAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0aWYgKGVsZW1lbnQgJiYgZWxlbWVudC5zdHlsZVNoZWV0ICYmICd1bmRlZmluZWQnICE9PSB0eXBlb2YgZWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQpIHtcblx0XHRlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblx0fSBlbHNlIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnJlc2l6ZWNyb3AgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmFkZENsYXNzKCdyZXNpemVjcm9wJylcblx0XHRcdC5yZXNpemVjcm9wKHtcblx0XHRcdFx0J3dpZHRoJzogJzEwMCcsXG5cdFx0XHRcdCdoZWlnaHQnOiAnMTAwJyxcblx0XHRcdFx0J3dyYXBwZXJDU1MnOiB7XG5cdFx0XHRcdFx0J2JvcmRlci1yYWRpdXMnOiAnMTBweCdcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKSgpO1xuXHRcdCQoZWxlbWVudCkucmVzaXplY3JvcCh7XG5cdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdCdoZWlnaHQnOiAnMTAwJ1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25LZXlEb3duID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25LZXlEb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQpIHtcblx0XHRcdFx0cmV0dXJuIGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwsIGV2ZW50KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXlkb3duLmtvT25LZXlEb3duJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVudGVyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlwcmVzcy5rb09uRW50ZXInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAxMyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXByZXNzLmtvT25FbnRlcicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25TcGFjZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PblNwYWNlJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgMzIgPT09IHdpbmRvdy5wYXJzZUludChldmVudC5rZXlDb2RlLCAxMCkpIHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PblNwYWNlJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblRhYiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5ZG93bi5rb09uVGFiJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgOSA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgISFldmVudC5zaGlmdEtleSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PblRhYicpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMub25Fc2MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXVwLmtvT25Fc2MnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAyNyA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHQkKGVsZW1lbnQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleXVwLmtvT25Fc2MnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmNsaWNrT25UcnVlID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGlmIChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpIHtcblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5tb2RhbCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHRVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpO1xuXG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdmYWRlJywgIUdsb2JhbHMuYk1vYmlsZURldmljZSlcblx0XHRcdC5tb2RhbCh7XG5cdFx0XHRcdCdrZXlib2FyZCc6IGZhbHNlLFxuXHRcdFx0XHQnc2hvdyc6IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKVxuXHRcdFx0fSlcblx0XHRcdC5vbignc2hvd24ua29Nb2RhbCcsIFV0aWxzLndpbmRvd1Jlc2l6ZUNhbGxiYWNrKVxuXHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHQub24oJ2NsaWNrLmtvTW9kYWwnLCAoKSA9PiB7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkoZmFsc2UpO1xuXHRcdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0Lm9mZignc2hvd24ua29Nb2RhbCcpXG5cdFx0XHRcdC5maW5kKCcuY2xvc2UnKVxuXHRcdFx0XHQub2ZmKCdjbGljay5rb01vZGFsJyk7XG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpLm1vZGFsKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSA/ICdzaG93JyA6ICdoaWRlJyk7XG5cblx0XHRpZiAoR2xvYmFscy4kaHRtbC5oYXNDbGFzcygncmwtYW5pbScpKSB7XG5cdFx0XHRHbG9iYWxzLiRodG1sLmFkZENsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRHbG9iYWxzLiRodG1sLnJlbW92ZUNsYXNzKCdybC1tb2RhbC1hbmltYXRpb24nKTtcblx0XHRcdH0sIE1hZ2ljcy5UaW1lNTAwbXMpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vbWVudCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKFxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ21vbWVudCcpXG5cdFx0XHRcdC5kYXRhKCdtb21lbnQtdGltZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHQpO1xuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9Nb21lbnRvcicpLm1vbWVudFRvTm9kZSgkKGVsZW1lbnQpLmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pMThuSW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudHJhbnNsYXRvckluaXQgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5VcGRhdGUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0a28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5saW5rID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCdocmVmJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRpdGxlID0ge1xuXHR1cGRhdGU6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5hdHRyKCd0aXRsZScsIGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50ZXh0RiA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLnRleHQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXREb20gPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0ZlZhbHVlQWNjZXNzb3IoKShlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRGaXhlZFRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHR0b3AgPSB2YWx1ZXNbMV0gfHwgMDtcblxuXHRcdGxldCAkY29udGFpbmVyID0gJCh2YWx1ZXNbMF0gfHwgbnVsbCk7XG5cdFx0JGNvbnRhaW5lciA9ICRjb250YWluZXJbMF0gPyAkY29udGFpbmVyIDogbnVsbDtcblx0XHRpZiAoJGNvbnRhaW5lcikge1xuXHRcdFx0JHdpbi5yZXNpemUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvZmZzZXQgPSAkY29udGFpbmVyID8gJGNvbnRhaW5lci5vZmZzZXQoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChvZmZzZXQgJiYgb2Zmc2V0LnRvcCkge1xuXHRcdFx0XHRcdCRlbC5jc3MoJ3RvcCcsIG9mZnNldC50b3AgKyB0b3ApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5pbml0UmVzaXplVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHRcdCQoZWxlbWVudCkuY3NzKHtcblx0XHRcdCdoZWlnaHQnOiB2YWx1ZXNbMV0sXG5cdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlc1sxXVxuXHRcdH0pO1xuXHR9LFxuXHR1cGRhdGU6IChvRWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0R2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyksXG5cdFx0XHR2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cblx0XHRsZXQgdmFsdWUgPSBVdGlscy5wSW50KHZhbHVlc1sxXSksXG5cdFx0XHRzaXplID0gMCxcblx0XHRcdG9mZnNldCA9ICQob0VsZW1lbnQpLm9mZnNldCgpLnRvcDtcblxuXHRcdGlmICgwIDwgb2Zmc2V0KSB7XG5cdFx0XHRvZmZzZXQgKz0gVXRpbHMucEludCh2YWx1ZXNbMl0pO1xuXHRcdFx0c2l6ZSA9IEdsb2JhbHMuJHdpbi5oZWlnaHQoKSAtIG9mZnNldDtcblxuXHRcdFx0aWYgKHZhbHVlIDwgc2l6ZSkge1xuXHRcdFx0XHR2YWx1ZSA9IHNpemU7XG5cdFx0XHR9XG5cblx0XHRcdCQob0VsZW1lbnQpLmNzcyh7XG5cdFx0XHRcdCdoZWlnaHQnOiB2YWx1ZSxcblx0XHRcdFx0J21pbi1oZWlnaHQnOiB2YWx1ZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuYXBwZW5kRG9tID0ge1xuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdCQoZWxlbWVudClcblx0XHRcdC5oaWRlKClcblx0XHRcdC5lbXB0eSgpXG5cdFx0XHQuYXBwZW5kKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSlcblx0XHRcdC5zaG93KCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcmFnZ2FibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgdHJpZ2dlclpvbmUgPSAxMDAsXG5cdFx0XHRcdHNjcm9sbFNwZWVkID0gMyxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGRyb3BwYWJsZVNlbGVjdG9yID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVTZWxlY3RvciA6ICcnLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdGRpc3RhbmNlOiAyMCxcblx0XHRcdFx0XHRoYW5kbGU6ICcuZHJhZ0hhbmRsZScsXG5cdFx0XHRcdFx0Y3Vyc29yQXQ6IHsgdG9wOiAyMiwgbGVmdDogMyB9LFxuXHRcdFx0XHRcdHJlZnJlc2hQb3NpdGlvbnM6IHRydWUsXG5cdFx0XHRcdFx0c2Nyb2xsOiB0cnVlLFxuXHRcdFx0XHRcdGRyYWc6IG51bGwsXG5cdFx0XHRcdFx0c3RvcDogbnVsbCxcblx0XHRcdFx0XHRoZWxwZXI6IG51bGxcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKGRyb3BwYWJsZVNlbGVjdG9yKSB7XG5cdFx0XHRcdGNvbmYuZHJhZyA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHRcdG9mZnNldCA9ICR0aGlzLm9mZnNldCgpLFxuXHRcdFx0XHRcdFx0XHRib3R0b21Qb3MgPSBvZmZzZXQudG9wICsgJHRoaXMuaGVpZ2h0KCk7XG5cblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cblx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWCA+PSBvZmZzZXQubGVmdCAmJiBldmVudC5wYWdlWCA8PSBvZmZzZXQubGVmdCArICR0aGlzLndpZHRoKCkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VZID49IGJvdHRvbVBvcyAtIHRyaWdnZXJab25lICYmIGV2ZW50LnBhZ2VZIDw9IGJvdHRvbVBvcykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVVcCA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSArIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlVXAsIDEwKSk7XG5cdFx0XHRcdFx0XHRcdFx0bW92ZVVwKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gb2Zmc2V0LnRvcCAmJiBldmVudC5wYWdlWSA8PSBvZmZzZXQudG9wICsgdHJpZ2dlclpvbmUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtb3ZlRG93biA9ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdCR0aGlzLnNjcm9sbFRvcCgkdGhpcy5zY3JvbGxUb3AoKSAtIHNjcm9sbFNwZWVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFV0aWxzLndpbmRvd1Jlc2l6ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIHdpbmRvdy5zZXRJbnRlcnZhbChtb3ZlRG93biwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlRG93bigpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Y29uZi5zdG9wID0gKCkgPT4ge1xuXHRcdFx0XHRcdCQoZHJvcHBhYmxlU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRjb25zdCAkdGhpcyA9ICQodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJJbnRlcnZhbCgkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcpKTtcblx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25mLmhlbHBlciA9IChldmVudCkgPT4gZlZhbHVlQWNjZXNzb3IoKShldmVudCAmJiBldmVudC50YXJnZXQgPyBrby5kYXRhRm9yKGV2ZW50LnRhcmdldCkgOiBudWxsKTtcblxuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuZHJhZ2dhYmxlKGNvbmYpXG5cdFx0XHRcdC5vbignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJywgKCkgPT4ge1xuXHRcdFx0XHRcdFV0aWxzLnJlbW92ZUluRm9jdXMoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdFx0Lm9mZignbW91c2Vkb3duLmtvRHJhZ2dhYmxlJylcblx0XHRcdFx0XHQuZHJhZ2dhYmxlKCdkZXN0cm95Jyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wcGFibGUgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblx0XHRpZiAoIUdsb2JhbHMuYk1vYmlsZURldmljZSkge1xuXHRcdFx0Y29uc3QgZlZhbHVlRnVuYyA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHRcdGZBbGxWYWx1ZUZ1bmMgPSBmQWxsQmluZGluZ3NBY2Nlc3NvcigpLFxuXHRcdFx0XHRmT3ZlckNhbGxiYWNrID0gZkFsbFZhbHVlRnVuYyAmJiBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU92ZXIgOiBudWxsLFxuXHRcdFx0XHRmT3V0Q2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3V0ID8gZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgOiBudWxsLFxuXHRcdFx0XHRjb25mID0ge1xuXHRcdFx0XHRcdHRvbGVyYW5jZTogJ3BvaW50ZXInLFxuXHRcdFx0XHRcdGhvdmVyQ2xhc3M6ICdkcm9wcGFibGVIb3ZlcicsXG5cdFx0XHRcdFx0ZHJvcDogbnVsbCxcblx0XHRcdFx0XHRvdmVyOiBudWxsLFxuXHRcdFx0XHRcdG91dDogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZlZhbHVlRnVuYykge1xuXHRcdFx0XHRjb25mLmRyb3AgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlRnVuYyhldmVudCwgdWkpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChmT3ZlckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdmVyID0gKGV2ZW50LCB1aSkgPT4ge1xuXHRcdFx0XHRcdFx0Zk92ZXJDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZk91dENhbGxiYWNrKSB7XG5cdFx0XHRcdFx0Y29uZi5vdXQgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3V0Q2FsbGJhY2soZXZlbnQsIHVpKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoY29uZik7XG5cblx0XHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdFx0JChlbGVtZW50KS5kcm9wcGFibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubmFubyA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFNldHRpbmdzID0gcmVxdWlyZSgnU3RvcmFnZS9TZXR0aW5ncycpO1xuXG5cdFx0aWYgKCFHbG9iYWxzLmJEaXNhYmxlTmFub1Njcm9sbCAmJiAhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3VzZU5hdGl2ZVNjcm9sbGJhcnMnKSkge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQuYWRkQ2xhc3MoJ25hbm8nKVxuXHRcdFx0XHQubmFub1Njcm9sbGVyKHtcblx0XHRcdFx0XHRpT1NOYXRpdmVTY3JvbGxpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdHByZXZlbnRQYWdlU2Nyb2xsaW5nOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnNhdmVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHQkZWwuZGF0YShcblx0XHRcdCdzYXZlLXRyaWdnZXItdHlwZScsXG5cdFx0XHQkZWwuaXMoJ2lucHV0W3R5cGU9dGV4dF0saW5wdXRbdHlwZT1lbWFpbF0saW5wdXRbdHlwZT1wYXNzd29yZF0sc2VsZWN0LHRleHRhcmVhJykgPyAnaW5wdXQnIDogJ2N1c3RvbSdcblx0XHQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0JGVsXG5cdFx0XHRcdC5hcHBlbmQoXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOycgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1zcGlubmVyIGFuaW1hdGVkXCI+PC9pPicgK1xuXHRcdFx0XHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1yZW1vdmUgZXJyb3JcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLW9rIHN1Y2Nlc3NcIj48L2k+J1xuXHRcdFx0XHQpXG5cdFx0XHRcdC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlcicpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXItaW5wdXQnKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSksXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpO1xuXG5cdFx0aWYgKCdjdXN0b20nID09PSAkZWwuZGF0YSgnc2F2ZS10cmlnZ2VyLXR5cGUnKSkge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWxcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCcpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN3aXRjaCAodmFsdWUudG9TdHJpbmcoKSkge1xuXHRcdFx0XHRjYXNlICcxJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ3N1Y2Nlc3MnKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0JGVsLmFkZENsYXNzKCdlcnJvcicpLnJlbW92ZUNsYXNzKCdzdWNjZXNzJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0yJzpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ2Vycm9yIHN1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lbWFpbHNUYWdzID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRcdEVtYWlsTW9kZWwgPSByZXF1aXJlKCdNb2RlbC9FbWFpbCcpLmRlZmF1bHQsXG5cdFx0XHQkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZBbGxCaW5kaW5ncyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRmQXV0b0NvbXBsZXRlU291cmNlID0gZkFsbEJpbmRpbmdzLmF1dG9Db21wbGV0ZVNvdXJjZSB8fCBudWxsLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzID0gWycsJywgJzsnLCAnXFxuJ10sXG5cdFx0XHRmRm9jdXNDYWxsYmFjayA9ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5mb2N1c2VkKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLmZvY3VzZWQoISF2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQkZWwuaW5wdXRvc2F1cnVzKHtcblx0XHRcdHBhcnNlT25CbHVyOiB0cnVlLFxuXHRcdFx0YWxsb3dEcmFnQW5kRHJvcDogdHJ1ZSxcblx0XHRcdGZvY3VzQ2FsbGJhY2s6IGZGb2N1c0NhbGxiYWNrLFxuXHRcdFx0aW5wdXREZWxpbWl0ZXJzOiBpbnB1dERlbGltaXRlcnMsXG5cdFx0XHRhdXRvQ29tcGxldGVTb3VyY2U6IGZBdXRvQ29tcGxldGVTb3VyY2UsXG5cdFx0XHRzcGxpdEhvb2s6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjb25zdCB2ID0gVXRpbHMudHJpbSh2YWx1ZSk7XG5cdFx0XHRcdGlmICh2ICYmIC0xIDwgaW5wdXREZWxpbWl0ZXJzLmluZGV4T2Yodi5zdWJzdHIoLTEpKSkge1xuXHRcdFx0XHRcdHJldHVybiBFbWFpbE1vZGVsLnNwbGl0RW1haWxMaW5lKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0sXG5cdFx0XHRwYXJzZUhvb2s6IChpbnB1dCkgPT5cblx0XHRcdFx0Xy5tYXAoXG5cdFx0XHRcdFx0Xy5mbGF0dGVuKFxuXHRcdFx0XHRcdFx0Xy5tYXAoaW5wdXQsIChpbnB1dFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlcyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoaW5wdXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZXMubGVuZ3RoID8gdmFsdWVzIDogaW5wdXRWYWx1ZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHQoaXRlbSkgPT4gKF8uaXNPYmplY3QoaXRlbSkgPyBbaXRlbS50b0xpbmUoZmFsc2UpLCBpdGVtXSA6IFtpdGVtLCBudWxsXSlcblx0XHRcdFx0KSxcblx0XHRcdGNoYW5nZTogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdCRlbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0XHRmVmFsdWUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQgJiYgZlZhbHVlLmZvY3VzZWQuc3Vic2NyaWJlKSB7XG5cdFx0XHRmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdCRlbC5pbnB1dG9zYXVydXModmFsdWUgPyAnZm9jdXMnIDogJ2JsdXInKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkb0VsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0aWYgKCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJykgIT09IHZhbHVlKSB7XG5cdFx0XHQkb0VsLnZhbCh2YWx1ZSk7XG5cdFx0XHQkb0VsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIHZhbHVlKTtcblx0XHRcdCRvRWwuaW5wdXRvc2F1cnVzKCdyZWZyZXNoJyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY29tbWFuZCA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGNvbnN0IGpxRWxlbWVudCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb21tYW5kID0gZlZhbHVlQWNjZXNzb3IoKTtcblxuXHRcdGlmICghY29tbWFuZCB8fCAhY29tbWFuZC5pc0NvbW1hbmQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignVmFsdWUgc2hvdWxkIGJlIGEgY29tbWFuZCcpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5lbmFibGVkKSB7XG5cdFx0XHRjb21tYW5kLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tbWFuZC5jYW5FeGVjdXRlKSB7XG5cdFx0XHRjb25zdCBfX3JlYWxDYW5FeGVjdXRlID0gY29tbWFuZC5fX3JlYWxDYW5FeGVjdXRlO1xuXHRcdFx0aWYgKF8uaXNGdW5jdGlvbihfX3JlYWxDYW5FeGVjdXRlKSkge1xuXHRcdFx0XHRjb21tYW5kLmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBjb21tYW5kLmVuYWJsZWQoKSAmJiBfX3JlYWxDYW5FeGVjdXRlLmNhbGwodmlld01vZGVsLCB2aWV3TW9kZWwpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmICEhX19yZWFsQ2FuRXhlY3V0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0anFFbGVtZW50LmFkZENsYXNzKCdjb21tYW5kJyk7XG5cdFx0a28uYmluZGluZ0hhbmRsZXJzW2pxRWxlbWVudC5pcygnZm9ybScpID8gJ3N1Ym1pdCcgOiAnY2xpY2snXS5pbml0KFxuXHRcdFx0ZWxlbWVudCxcblx0XHRcdGZWYWx1ZUFjY2Vzc29yLFxuXHRcdFx0ZkFsbEJpbmRpbmdzQWNjZXNzb3IsXG5cdFx0XHR2aWV3TW9kZWwsXG5cdFx0XHRiaW5kaW5nQ29udGV4dFxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0bGV0IHJlc3VsdCA9IGNvbW1hbmQuZW5hYmxlZCgpO1xuXG5cdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLW5vdC1lbmFibGVkJywgIXJlc3VsdCk7XG5cblx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBjb21tYW5kLmNhbkV4ZWN1dGUoKTtcblx0XHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1jYW4tbm90LWJlLWV4ZWN1dGUnLCAhcmVzdWx0KTtcblx0XHR9XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtZGlzYWJsZWQgZGlzYWJsZSBkaXNhYmxlZCcsICFyZXN1bHQpLnRvZ2dsZUNsYXNzKCduby1kaXNhYmxlZCcsICEhcmVzdWx0KTtcblxuXHRcdGlmIChqcUVsZW1lbnQuaXMoJ2lucHV0JykgfHwganFFbGVtZW50LmlzKCdidXR0b24nKSkge1xuXHRcdFx0anFFbGVtZW50LnByb3AoJ2Rpc2FibGVkJywgIXJlc3VsdCk7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBleHRlbmRlcnNcblxua28uZXh0ZW5kZXJzLnRyaW1tZXIgPSAodGFyZ2V0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoVXRpbHMudHJpbShuZXdWYWx1ZS50b1N0cmluZygpKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5wb3NJbnRlcmVyID0gKHRhcmdldCwgZGVmYXVsdFZhbCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvLmNvbXB1dGVkKHtcblx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHZhbCA9IFV0aWxzLnBJbnQobmV3VmFsdWUudG9TdHJpbmcoKSwgZGVmYXVsdFZhbCk7XG5cdFx0XHRcdGlmICgwID49IHZhbCkge1xuXHRcdFx0XHRcdHZhbCA9IGRlZmF1bHRWYWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsID09PSB0YXJnZXQoKSAmJiAnJyArIHZhbCAhPT0gJycgKyBuZXdWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldCh2YWwgKyAxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldCh2YWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdHJlc3VsdCh0YXJnZXQoKSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMubGltaXRlZExpc3QgPSAodGFyZ2V0LCBsaW1pdGVkTGlzdCkgPT4ge1xuXHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdHJlc3VsdCA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHRcdHdyaXRlOiAobmV3VmFsdWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBrby51bndyYXAodGFyZ2V0KSxcblx0XHRcdFx0XHRcdGxpc3QgPSBrby51bndyYXAobGltaXRlZExpc3QpO1xuXG5cdFx0XHRcdFx0aWYgKFV0aWxzLmlzTm9uRW1wdHlBcnJheShsaXN0KSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgVXRpbHMuaW5BcnJheShuZXdWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KG5ld1ZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoLTEgPCBVdGlscy5pbkFycmF5KGN1cnJlbnRWYWx1ZSwgbGlzdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGxpc3RbMF0gKyAnICcpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRhcmdldCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblxuXHRpZiAoIXJlc3VsdC52YWx1ZUhhc011dGF0ZWQpIHtcblx0XHRyZXN1bHQudmFsdWVIYXNNdXRhdGVkID0gKCkgPT4ge1xuXHRcdFx0dGFyZ2V0LnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnJldmVyc2libGUgPSAodGFyZ2V0KSA9PiB7XG5cdGxldCB2YWx1ZSA9IHRhcmdldCgpO1xuXG5cdHRhcmdldC5jb21taXQgPSAoKSA9PiB7XG5cdFx0dmFsdWUgPSB0YXJnZXQoKTtcblx0fTtcblxuXHR0YXJnZXQucmV2ZXJzZSA9ICgpID0+IHtcblx0XHR0YXJnZXQodmFsdWUpO1xuXHR9O1xuXG5cdHRhcmdldC5jb21taXRlZFZhbHVlID0gKCkgPT4gdmFsdWU7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMudG9nZ2xlU3Vic2NyaWJlID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMV0sIG9wdGlvbnNbMF0sICdiZWZvcmVDaGFuZ2UnKTtcblx0dGFyZ2V0LnN1YnNjcmliZShvcHRpb25zWzJdLCBvcHRpb25zWzBdKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eSA9ICh0YXJnZXQsIG9wdGlvbnMpID0+IHtcblx0Y29uc3QgcHJvcCA9IG9wdGlvbnNbMV07XG5cdGlmIChwcm9wKSB7XG5cdFx0dGFyZ2V0LnN1YnNjcmliZShcblx0XHRcdChwcmV2KSA9PiB7XG5cdFx0XHRcdGlmIChwcmV2ICYmIHByZXZbcHJvcF0pIHtcblx0XHRcdFx0XHRwcmV2W3Byb3BdKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9wdGlvbnNbMF0sXG5cdFx0XHQnYmVmb3JlQ2hhbmdlJ1xuXHRcdCk7XG5cblx0XHR0YXJnZXQuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG5cdFx0XHRpZiAobmV4dCAmJiBuZXh0W3Byb3BdKSB7XG5cdFx0XHRcdG5leHRbcHJvcF0odHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSwgb3B0aW9uc1swXSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmZhbHNlVGltZW91dCA9ICh0YXJnZXQsIG9wdGlvbikgPT4ge1xuXHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHR0YXJnZXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQpO1xuXHRcdFx0dGFyZ2V0LmlGYWxzZVRpbWVvdXRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0YXJnZXQoZmFsc2UpO1xuXHRcdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSAwO1xuXHRcdFx0fSwgcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pKTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuc3BlY2lhbFRocm90dGxlID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJykucEludChvcHRpb24pO1xuXHRpZiAoMCA8IHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKSB7XG5cdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHR0YXJnZXQudmFsdWVGb3JSZWFkID0ga28ub2JzZXJ2YWJsZSghIXRhcmdldCgpKS5leHRlbmQoeyB0aHJvdHRsZTogMTAgfSk7XG5cblx0XHRyZXR1cm4ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LnZhbHVlRm9yUmVhZCxcblx0XHRcdHdyaXRlOiAoYlZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChiVmFsdWUpIHtcblx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHRhcmdldC52YWx1ZUZvclJlYWQoKSkge1xuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCh0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQpO1xuXHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0ID0gMDtcblx0XHRcdFx0XHRcdH0sIHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dFZhbHVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnZhbHVlRm9yUmVhZChiVmFsdWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5pZGxlVHJpZ2dlciA9ICh0YXJnZXQpID0+IHtcblx0dGFyZ2V0LnRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBmdW5jdGlvbnNcblxua28ub2JzZXJ2YWJsZS5mbi5pZGxlVHJpZ2dlciA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5leHRlbmQoeyAnaWRsZVRyaWdnZXInOiB0cnVlIH0pO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZU5vbmUgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVFbWFpbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0dGhpcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0dGhpcy5oYXNFcnJvcignJyAhPT0gdmFsdWUgJiYgIS9eW15AXFxzXStAW15AXFxzXSskLy50ZXN0KHZhbHVlKSk7XG5cdH0pO1xuXG5cdHRoaXMudmFsdWVIYXNNdXRhdGVkKCk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZVNpbXBsZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL14uK0AuKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLmRlbGV0ZUFjY2Vzc0hlbHBlciA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMzAwMCB9KS5leHRlbmQoeyB0b2dnbGVTdWJzY3JpYmVQcm9wZXJ0eTogW3RoaXMsICdkZWxldGVBY2Nlc3MnXSB9KTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlRnVuYyA9IGZ1bmN0aW9uKGZGdW5jKSB7XG5cdHRoaXMuaGFzRnVuY0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0aWYgKF8uaXNGdW5jdGlvbihmRnVuYykpIHtcblx0XHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdHRoaXMuaGFzRnVuY0Vycm9yKCFmRnVuYyh2YWx1ZSkpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuZXhwb3J0IGRlZmF1bHQga287XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBBdXRvbGlua2VyIGZyb20gJ0F1dG9saW5rZXInO1xuXG5pbXBvcnQgeyAkd2luLCAkZGl2LCAkaGNvbnQsIGRyb3Bkb3duVmlzaWJpbGl0eSwgZGF0YSBhcyBHbG9iYWxzRGF0YSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IENvbXBvc2VUeXBlLCBFdmVudEtleUNvZGUsIFNhdmVTZXR0aW5nc1N0ZXAsIEZvbGRlclR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgTWltZSB9IGZyb20gJ0NvbW1vbi9NaW1lJztcbmltcG9ydCB7IGphc3NsIH0gZnJvbSAnQ29tbW9uL0phc3NsJztcblxuY29uc3QgdHJpbSA9ICQudHJpbTtcbmNvbnN0IGluQXJyYXkgPSAkLmluQXJyYXk7XG5jb25zdCBpc0FycmF5ID0gXy5pc0FycmF5O1xuY29uc3QgaXNPYmplY3QgPSBfLmlzT2JqZWN0O1xuY29uc3QgaXNGdW5jID0gXy5pc0Z1bmN0aW9uO1xuY29uc3QgaXNVbmQgPSBfLmlzVW5kZWZpbmVkO1xuY29uc3QgaXNOdWxsID0gXy5pc051bGw7XG5jb25zdCBoYXMgPSBfLmhhcztcbmNvbnN0IGJpbmQgPSBfLmJpbmQ7XG5jb25zdCBub29wID0gKCkgPT4ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbmNvbnN0IG5vb3BUcnVlID0gKCkgPT4gdHJ1ZTtcbmNvbnN0IG5vb3BGYWxzZSA9ICgpID0+IGZhbHNlO1xuXG5leHBvcnQgeyB0cmltLCBpbkFycmF5LCBpc0FycmF5LCBpc09iamVjdCwgaXNGdW5jLCBpc1VuZCwgaXNOdWxsLCBoYXMsIGJpbmQsIG5vb3AsIG5vb3BUcnVlLCBub29wRmFsc2UsIGphc3NsIH07XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2lsZW50VHJ5Q2F0Y2goZnVuYykge1xuXHR0cnkge1xuXHRcdGZ1bmMoKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3JtYWwodmFsdWUpIHtcblx0cmV0dXJuICFpc1VuZCh2YWx1ZSkgJiYgIWlzTnVsbCh2YWx1ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoc3RyaW5nfG51bWJlcil9IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpbmNsdWRlWmVybyA9IHRydWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3NOdW1lcmljKHZhbHVlLCBpbmNsdWRlWmVybyA9IHRydWUpIHtcblx0cmV0dXJuICFpc05vcm1hbCh2YWx1ZSlcblx0XHQ/IGZhbHNlXG5cdFx0OiBpbmNsdWRlWmVyb1xuXHRcdD8gL15bMC05XSokLy50ZXN0KHZhbHVlLnRvU3RyaW5nKCkpXG5cdFx0OiAvXlsxLTldK1swLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXI9fSBkZWZhdWx0VmFsdXIgPSAwXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEludCh2YWx1ZSwgZGVmYXVsdFZhbHVyID0gMCkge1xuXHRjb25zdCByZXN1bHQgPSBpc05vcm1hbCh2YWx1ZSkgJiYgJycgIT09IHZhbHVlID8gd2luZG93LnBhcnNlSW50KHZhbHVlLCAxMCkgOiBkZWZhdWx0VmFsdXI7XG5cdHJldHVybiB3aW5kb3cuaXNOYU4ocmVzdWx0KSA/IGRlZmF1bHRWYWx1ciA6IHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcFN0cmluZyh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb3JtYWwodmFsdWUpID8gJycgKyB2YWx1ZSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcEJvb2wodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xUb0FqYXgodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlID8gJzEnIDogJzAnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9uRW1wdHlBcnJheSh2YWx1ZXMpIHtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiAwIDwgdmFsdWVzLmxlbmd0aDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZGVjb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSSh1cmwpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUkkodXJsKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmVuY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVN0cmluZ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5U3RyaW5nKSB7XG5cdGxldCBpbmRleCA9IDAsXG5cdFx0bGVuID0gMCxcblx0XHR0ZW1wID0gbnVsbDtcblxuXHRjb25zdCBxdWVyaWVzID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKSxcblx0XHRwYXJhbXMgPSB7fTtcblxuXHRmb3IgKGxlbiA9IHF1ZXJpZXMubGVuZ3RoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuXHRcdHRlbXAgPSBxdWVyaWVzW2luZGV4XS5zcGxpdCgnPScpO1xuXHRcdHBhcmFtc1tkZWNvZGVVUklDb21wb25lbnQodGVtcFswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xuXHR9XG5cblx0cmV0dXJuIHBhcmFtcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcj19IGxlbiA9IDMyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZU1kNShsZW4gPSAzMikge1xuXHRjb25zdCBsaW5lID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicsXG5cdFx0bGluZUxlbiA9IGxpbmUubGVuZ3RoO1xuXG5cdGxlbiA9IHBJbnQobGVuKTtcblxuXHRsZXQgcmVzdWx0ID0gJyc7XG5cdHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbGVuKSB7XG5cdFx0cmVzdWx0ICs9IGxpbmUuc3Vic3RyKHdpbmRvdy5NYXRoLnJvdW5kKHdpbmRvdy5NYXRoLnJhbmRvbSgpICogbGluZUxlbiksIDEpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZUh0bWwodGV4dCkge1xuXHRyZXR1cm4gaXNOb3JtYWwodGV4dCkgPyBfLmVzY2FwZSh0ZXh0LnRvU3RyaW5nKCkpIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMTAwXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQbGFpblRleHQodGV4dCwgbGVuID0gMTAwKSB7XG5cdGxldCBwcmVmaXggPSAnJyxcblx0XHRzdWJUZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gdGV4dCxcblx0XHRzcGFjZVBvcyA9IDAsXG5cdFx0bmV3TGluZVBvcyA9IDA7XG5cblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPiBsZW4pIHtcblx0XHRzdWJUZXh0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBsZW4pO1xuXHRcdHNwYWNlUG9zID0gc3ViVGV4dC5sYXN0SW5kZXhPZignICcpO1xuXHRcdG5ld0xpbmVQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCdcXG4nKTtcblxuXHRcdGlmICgtMSAhPT0gbmV3TGluZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBuZXdMaW5lUG9zO1xuXHRcdH1cblxuXHRcdGlmICgtMSA9PT0gc3BhY2VQb3MpIHtcblx0XHRcdHNwYWNlUG9zID0gbGVuO1xuXHRcdH1cblxuXHRcdHByZWZpeCArPSBzdWJUZXh0LnN1YnN0cmluZygwLCBzcGFjZVBvcykgKyAnXFxuJztcblx0XHRyZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKHNwYWNlUG9zICsgMSk7XG5cdH1cblxuXHRyZXR1cm4gcHJlZml4ICsgcmVzdWx0O1xufVxuXG5jb25zdCB0aW1lT3V0QWN0aW9uID0gKGZ1bmN0aW9uKCkge1xuXHRjb25zdCB0aW1lT3V0cyA9IHt9O1xuXHRyZXR1cm4gKGFjdGlvbiwgZkZ1bmN0aW9uLCB0aW1lT3V0KSA9PiB7XG5cdFx0dGltZU91dHNbYWN0aW9uXSA9IGlzVW5kKHRpbWVPdXRzW2FjdGlvbl0pID8gMCA6IHRpbWVPdXRzW2FjdGlvbl07XG5cdFx0d2luZG93LmNsZWFyVGltZW91dCh0aW1lT3V0c1thY3Rpb25dKTtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gd2luZG93LnNldFRpbWVvdXQoZkZ1bmN0aW9uLCB0aW1lT3V0KTtcblx0fTtcbn0pKCk7XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb25TZWNvbmQgPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHRpZiAoIXRpbWVPdXRzW2FjdGlvbl0pIHtcblx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGZGdW5jdGlvbigpO1xuXHRcdFx0XHR0aW1lT3V0c1thY3Rpb25dID0gMDtcblx0XHRcdH0sIHRpbWVPdXQpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbmV4cG9ydCB7IHRpbWVPdXRBY3Rpb24sIHRpbWVPdXRBY3Rpb25TZWNvbmQgfTtcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gbVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlTW9kdWxlKG0pIHtcblx0cmV0dXJuIChtICYmIG0uZGVmYXVsdCA/IG0uZGVmYXVsdCA6IG0pIHx8ICcnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5Gb2N1cygpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcblx0XHRcdGlmIChpc1VuZCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSkpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGUgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KS5pcyhcblx0XHRcdFx0XHQnaW5wdXQsdGV4dGFyZWEsaWZyYW1lLC5ja2VfZWRpdGFibGUnXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhIXdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUluRm9jdXMoZm9yY2UpIHtcblx0aWYgKHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFjdGl2ZUVsID0gJCh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG5cdFx0XHRpZiAoYWN0aXZlRWwgJiYgYWN0aXZlRWwuaXMoJ2lucHV0LHRleHRhcmVhJykpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xuXHRcdFx0fSBlbHNlIGlmIChmb3JjZSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWxlY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0aWYgKHdpbmRvdyAmJiB3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0XHRpZiAoc2VsICYmIHNlbC5yZW1vdmVBbGxSYW5nZXMpIHtcblx0XHRcdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24gJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSkge1xuXHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuXHRcdH1cblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbHlTdWJqZWN0QWRkKHByZWZpeCwgc3ViamVjdCkge1xuXHRwcmVmaXggPSB0cmltKHByZWZpeC50b1VwcGVyQ2FzZSgpKTtcblx0c3ViamVjdCA9IHRyaW0oc3ViamVjdC5yZXBsYWNlKC9bXFxzXSsvZywgJyAnKSk7XG5cblx0bGV0IGRyb3AgPSBmYWxzZSxcblx0XHRyZSA9ICdSRScgPT09IHByZWZpeCxcblx0XHRmd2QgPSAnRldEJyA9PT0gcHJlZml4O1xuXG5cdGNvbnN0IHBhcnRzID0gW10sXG5cdFx0cHJlZml4SXNSZSA9ICFmd2Q7XG5cblx0aWYgKCcnICE9PSBzdWJqZWN0KSB7XG5cdFx0Xy5lYWNoKHN1YmplY3Quc3BsaXQoJzonKSwgKHBhcnQpID0+IHtcblx0XHRcdGNvbnN0IHRyaW1tZWRQYXJ0ID0gdHJpbShwYXJ0KTtcblx0XHRcdGlmICghZHJvcCAmJiAoL14oUkV8RldEKSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSB8fCAvXihSRXxGV0QpW1soXVtcXGRdK1tcXF0pXSQvaS50ZXN0KHRyaW1tZWRQYXJ0KSkpIHtcblx0XHRcdFx0aWYgKCFyZSkge1xuXHRcdFx0XHRcdHJlID0gISEvXlJFL2kudGVzdCh0cmltbWVkUGFydCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWZ3ZCkge1xuXHRcdFx0XHRcdGZ3ZCA9ICEhL15GV0QvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydHMucHVzaChwYXJ0KTtcblx0XHRcdFx0ZHJvcCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRpZiAocHJlZml4SXNSZSkge1xuXHRcdHJlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0ZndkID0gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHJpbSgocHJlZml4SXNSZSA/ICdSZTogJyA6ICdGd2Q6ICcpICsgKHJlID8gJ1JlOiAnIDogJycpICsgKGZ3ZCA/ICdGd2Q6ICcgOiAnJykgKyB0cmltKHBhcnRzLmpvaW4oJzonKSkpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWNcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3VuZE51bWJlcihudW0sIGRlYykge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobnVtICogd2luZG93Lk1hdGgucG93KDEwLCBkZWMpKSAvIHdpbmRvdy5NYXRoLnBvdygxMCwgZGVjKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhudW1iZXJ8c3RyaW5nKX0gc2l6ZUluQnl0ZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcmllbmRseVNpemUoc2l6ZUluQnl0ZXMpIHtcblx0c2l6ZUluQnl0ZXMgPSBwSW50KHNpemVJbkJ5dGVzKTtcblxuXHRzd2l0Y2ggKHRydWUpIHtcblx0XHRjYXNlIDEwNzM3NDE4MjQgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDczNzQxODI0LCAxKSArICdHQic7XG5cdFx0Y2FzZSAxMDQ4NTc2IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTA0ODU3NiwgMSkgKyAnTUInO1xuXHRcdGNhc2UgMTAyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwMjQsIDApICsgJ0tCJztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gc2l6ZUluQnl0ZXMgKyAnQic7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZyhkZXNjKSB7XG5cdGlmICh3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cpIHtcblx0XHR3aW5kb3cuY29uc29sZS5sb2coZGVzYyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gez99IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBwYXJhbXNcbiAqIEBwYXJhbSB7bnVtYmVyPX0gZGVsYXkgPSAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bihvYmplY3QsIG1ldGhvZE5hbWUsIHBhcmFtcywgZGVsYXkgPSAwKSB7XG5cdGlmIChvYmplY3QgJiYgb2JqZWN0W21ldGhvZE5hbWVdKSB7XG5cdFx0ZGVsYXkgPSBwSW50KGRlbGF5KTtcblx0XHRwYXJhbXMgPSBpc0FycmF5KHBhcmFtcykgPyBwYXJhbXMgOiBbXTtcblxuXHRcdGlmICgwID49IGRlbGF5KSB7XG5cdFx0XHRvYmplY3RbbWV0aG9kTmFtZV0oLi4ucGFyYW1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdFx0fSwgZGVsYXkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gZXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbGxDdHJsQUN0cmxTKGV2ZW50KSB7XG5cdGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50O1xuXHRpZiAoZXZlbnQgJiYgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmFsdEtleSkge1xuXHRcdGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG5cdFx0aWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLlMpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fSBlbHNlIGlmIChrZXkgPT09IEV2ZW50S2V5Q29kZS5BKSB7XG5cdFx0XHRjb25zdCBzZW5kZXIgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcblx0XHRcdGlmIChcblx0XHRcdFx0c2VuZGVyICYmXG5cdFx0XHRcdCgndHJ1ZScgPT09ICcnICsgc2VuZGVyLmNvbnRlbnRFZGl0YWJsZSB8fCAoc2VuZGVyLnRhZ05hbWUgJiYgc2VuZGVyLnRhZ05hbWUubWF0Y2goL0lOUFVUfFRFWFRBUkVBL2kpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG5cdFx0XHRcdHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcblx0XHRcdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmNsZWFyKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIoKTtcblx0XHRcdH1cblxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhPYmplY3R8bnVsbHx1bmRlZmluZWQpfSBjb250ZXh0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExlZ2FjeShjb250ZXh0LCBmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdGxldCBmUmVzdWx0ID0gbnVsbDtcblx0Y29uc3QgZk5vbkVtcHR5ID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoZlJlc3VsdCAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUgJiYgZlJlc3VsdC5jYW5FeGVjdXRlKCkpIHtcblx0XHRcdGZFeGVjdXRlLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0ZlJlc3VsdCA9IGZFeGVjdXRlID8gZk5vbkVtcHR5IDogbm9vcDtcblx0ZlJlc3VsdC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0ZlJlc3VsdC5pc0NvbW1hbmQgPSB0cnVlO1xuXG5cdGlmIChpc0Z1bmMoZkNhbkV4ZWN1dGUpKSB7XG5cdFx0ZlJlc3VsdC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gZlJlc3VsdCAmJiBmUmVzdWx0LmVuYWJsZWQoKSAmJiBmQ2FuRXhlY3V0ZS5jYWxsKGNvbnRleHQpKTtcblx0fSBlbHNlIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmICEhZkNhbkV4ZWN1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGZSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRoZW1lTmFtZSA9IF8ubWVtb2l6ZSgodGhlbWUpID0+IHtcblx0aWYgKCdAY3VzdG9tJyA9PT0gdGhlbWUuc3Vic3RyKC03KSkge1xuXHRcdHRoZW1lID0gdHJpbSh0aGVtZS5zdWJzdHJpbmcoMCwgdGhlbWUubGVuZ3RoIC0gNykpO1xuXHR9XG5cblx0cmV0dXJuIHRyaW0oXG5cdFx0dGhlbWVcblx0XHRcdC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJylcblx0XHRcdC5yZXBsYWNlKC8oW0EtWl0pL2csICcgJDEnKVxuXHRcdFx0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpXG5cdCk7XG59KTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1b3RlTmFtZShuYW1lKSB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1tcIl0vZywgJ1xcXFxcIicpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWNyb3RpbWUoKSB7XG5cdHJldHVybiBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcblx0cmV0dXJuIHdpbmRvdy5NYXRoLnJvdW5kKG1pY3JvdGltZSgpIC8gMTAwMCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNFbmcgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSwgaXNFbmcgPSBmYWxzZSkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKFxuXHRcdCdMQU5HU19OQU1FUycgKyAodHJ1ZSA9PT0gaXNFbmcgPyAnX0VOJyA6ICcnKSArICcvTEFOR18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICdfJyksXG5cdFx0bnVsbCxcblx0XHRsYW5ndWFnZVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmFnZ2FibGVQbGFjZSgpIHtcblx0cmV0dXJuICQoXG5cdFx0JzxkaXYgY2xhc3M9XCJkcmFnZ2FibGVQbGFjZVwiPicgK1xuXHRcdFx0JzxzcGFuIGNsYXNzPVwidGV4dFwiPjwvc3Bhbj4mbmJzcDsnICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tY29weSBpY29uLXdoaXRlIHZpc2libGUtb24tY3RybFwiPjwvaT4nICtcblx0XHRcdCc8aSBjbGFzcz1cImljb24tbWFpbCBpY29uLXdoaXRlIGhpZGRlbi1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzwvZGl2Pidcblx0KS5hcHBlbmRUbygnI3JsLWhpZGRlbicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkb21PcHRpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcihkb21JdGVtLCBpdGVtKSB7XG5cdGlmIChpdGVtICYmICFpc1VuZChpdGVtLmRpc2FibGVkKSAmJiBkb21JdGVtKSB7XG5cdFx0JChkb21JdGVtKVxuXHRcdFx0LnRvZ2dsZUNsYXNzKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpXG5cdFx0XHQucHJvcCgnZGlzYWJsZWQnLCBpdGVtLmRpc2FibGVkKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJxU3dpdGNoZXIoYm9keSkge1xuXHRib2R5LmZpbmQoJ2Jsb2NrcXVvdGUucmwtYnEtc3dpdGNoZXInKS5yZW1vdmVDbGFzcygncmwtYnEtc3dpdGNoZXIgaGlkZGVuLWJxJyk7XG5cdGJvZHlcblx0XHQuZmluZCgnLnJsQmxvY2txdW90ZVN3aXRjaGVyJylcblx0XHQub2ZmKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5yZW1vdmUoKTtcblx0Ym9keS5maW5kKCdbZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXJdJykucmVtb3ZlQXR0cignZGF0YS1odG1sLWVkaXRvci1mb250LXdyYXBwZXInKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbWVzc2FnZURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBib2R5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzSHRtbFxuICogQHBhcmFtIHtib29sZWFufSBwcmludFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmV2aWV3TWVzc2FnZShcblx0eyB0aXRsZSwgc3ViamVjdCwgZGF0ZSwgZnJvbUNyZWRzLCB0b0NyZWRzLCB0b0xhYmVsLCBjY0NsYXNzLCBjY0NyZWRzLCBjY0xhYmVsIH0sXG5cdGJvZHksXG5cdGlzSHRtbCxcblx0cHJpbnRcbikge1xuXHRjb25zdCB3aW4gPSB3aW5kb3cub3BlbignJyksXG5cdFx0ZG9jID0gd2luLmRvY3VtZW50LFxuXHRcdGJvZHlDbG9uZSA9IGJvZHkuY2xvbmUoKSxcblx0XHRib2R5Q2xhc3MgPSBpc0h0bWwgPyAnaHRtbCcgOiAncGxhaW4nO1xuXG5cdGNsZWFyQnFTd2l0Y2hlcihib2R5Q2xvbmUpO1xuXG5cdGNvbnN0IGh0bWwgPSBib2R5Q2xvbmUgPyBib2R5Q2xvbmUuaHRtbCgpIDogJyc7XG5cblx0ZG9jLndyaXRlKFxuXHRcdGRlTW9kdWxlKHJlcXVpcmUoJ0h0bWwvUHJldmlld01lc3NhZ2UuaHRtbCcpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dGl0bGV9fScsIGVuY29kZUh0bWwodGl0bGUpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7c3ViamVjdH19JywgZW5jb2RlSHRtbChzdWJqZWN0KSlcblx0XHRcdC5yZXBsYWNlKCd7e2RhdGV9fScsIGVuY29kZUh0bWwoZGF0ZSkpXG5cdFx0XHQucmVwbGFjZSgne3tmcm9tQ3JlZHN9fScsIGVuY29kZUh0bWwoZnJvbUNyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvQ3JlZHN9fScsIGVuY29kZUh0bWwodG9DcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3t0b0xhYmVsfX0nLCBlbmNvZGVIdG1sKHRvTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDbGFzc319JywgZW5jb2RlSHRtbChjY0NsYXNzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjQ3JlZHN9fScsIGVuY29kZUh0bWwoY2NDcmVkcykpXG5cdFx0XHQucmVwbGFjZSgne3tjY0xhYmVsfX0nLCBlbmNvZGVIdG1sKGNjTGFiZWwpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Ym9keUNsYXNzfX0nLCBib2R5Q2xhc3MpXG5cdFx0XHQucmVwbGFjZSgne3todG1sfX0nLCBodG1sKVxuXHQpO1xuXG5cdGRvYy5jbG9zZSgpO1xuXG5cdGlmIChwcmludCkge1xuXHRcdHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHdpbi5wcmludCgpLCAxMDApO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKiBAcGFyYW0gez99IGtvVHJpZ2dlclxuICogQHBhcmFtIHs/fSBjb250ZXh0ID0gbnVsbFxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lciA9IDEwMDBcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKGZDYWxsYmFjaywga29UcmlnZ2VyLCBjb250ZXh0ID0gbnVsbCwgdGltZXIgPSAxMDAwKSB7XG5cdHRpbWVyID0gcEludCh0aW1lcik7XG5cdHJldHVybiAodHlwZSwgZGF0YSwgY2FjaGVkLCByZXF1ZXN0QWN0aW9uLCByZXF1ZXN0UGFyYW1ldGVycykgPT4ge1xuXHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIGRhdGEgJiYgZGF0YS5SZXN1bHQgPyBTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQgOiBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0KTtcblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2suY2FsbChjb250ZXh0LCB0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRrb1RyaWdnZXIuY2FsbChjb250ZXh0LCBTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdH0sIHRpbWVyKTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0ga29UcmlnZ2VyXG4gKiBAcGFyYW0ge21peGVkfSBjb250ZXh0XG4gKiBAcmV0dXJucyB7bWl4ZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbihrb1RyaWdnZXIsIGNvbnRleHQpIHtcblx0cmV0dXJuIHNldHRpbmdzU2F2ZUhlbHBlckZ1bmN0aW9uKG51bGwsIGtvVHJpZ2dlciwgY29udGV4dCwgMTAwMCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlbW90ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNldHRpbmdOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gZlRyaWdnZXJGdW5jdGlvblxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyU3Vic2NyaWJlRnVuY3Rpb24ocmVtb3RlLCBzZXR0aW5nTmFtZSwgdHlwZSwgZlRyaWdnZXJGdW5jdGlvbikge1xuXHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHJlbW90ZSkge1xuXHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdGNhc2UgJ2Jvb2wnOlxuXHRcdFx0XHRjYXNlICdib29sZWFuJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlID8gJzEnIDogJzAnO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdpbnQnOlxuXHRcdFx0XHRjYXNlICdpbnRlZ2VyJzpcblx0XHRcdFx0Y2FzZSAnbnVtYmVyJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHBJbnQodmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd0cmltJzpcblx0XHRcdFx0XHR2YWx1ZSA9IHRyaW0odmFsdWUpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHZhbHVlID0gcFN0cmluZyh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFbc2V0dGluZ05hbWVdID0gdmFsdWU7XG5cblx0XHRcdGlmIChyZW1vdGUuc2F2ZUFkbWluQ29uZmlnKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlQWRtaW5Db25maWcoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH0gZWxzZSBpZiAocmVtb3RlLnNhdmVTZXR0aW5ncykge1xuXHRcdFx0XHRyZW1vdGUuc2F2ZVNldHRpbmdzKGZUcmlnZ2VyRnVuY3Rpb24gfHwgbnVsbCwgZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVtYWlsQW5kTGlua3MoaHRtbCkge1xuXHRyZXR1cm4gQXV0b2xpbmtlclxuXHRcdD8gQXV0b2xpbmtlci5saW5rKGh0bWwsIHtcblx0XHRcdFx0bmV3V2luZG93OiB0cnVlLFxuXHRcdFx0XHRzdHJpcFByZWZpeDogZmFsc2UsXG5cdFx0XHRcdHVybHM6IHRydWUsXG5cdFx0XHRcdGVtYWlsOiB0cnVlLFxuXHRcdFx0XHRtZW50aW9uOiBmYWxzZSxcblx0XHRcdFx0cGhvbmU6IGZhbHNlLFxuXHRcdFx0XHRoYXNodGFnOiBmYWxzZSxcblx0XHRcdFx0cmVwbGFjZUZuOiBmdW5jdGlvbihtYXRjaCkge1xuXHRcdFx0XHRcdHJldHVybiAhKG1hdGNoICYmICd1cmwnID09PSBtYXRjaC5nZXRUeXBlKCkgJiYgbWF0Y2gubWF0Y2hlZFRleHQgJiYgMCAhPT0gbWF0Y2gubWF0Y2hlZFRleHQuaW5kZXhPZignaHR0cCcpKTtcblx0XHRcdFx0fVxuXHRcdCAgfSlcblx0XHQ6IGh0bWw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sVG9QbGFpbihodG1sKSB7XG5cdGxldCBwb3MgPSAwLFxuXHRcdGxpbWl0ID0gMCxcblx0XHRpUDEgPSAwLFxuXHRcdGlQMiA9IDAsXG5cdFx0aVAzID0gMCxcblx0XHR0ZXh0ID0gJyc7XG5cblx0Y29uc3QgY29udmVydEJsb2NrcXVvdGUgPSAoYmxvY2txdW90ZVRleHQpID0+IHtcblx0XHRibG9ja3F1b3RlVGV4dCA9ICc+ICcgKyB0cmltKGJsb2NrcXVvdGVUZXh0KS5yZXBsYWNlKC9cXG4vZ20sICdcXG4+ICcpO1xuXHRcdHJldHVybiBibG9ja3F1b3RlVGV4dC5yZXBsYWNlKC8oXnxcXG4pKFs+IF0rKS9nbSwgKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDIgPCBhcmdzLmxlbmd0aCA/IGFyZ3NbMV0gKyB0cmltKGFyZ3NbMl0ucmVwbGFjZSgvW1xcc10vZywgJycpKSArICcgJyA6ICcnXG5cdFx0KTtcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0RGl2cyA9ICguLi5hcmdzKSA9PiB7XG5cdFx0aWYgKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRsZXQgZGl2VGV4dCA9IHRyaW0oYXJnc1sxXSk7XG5cdFx0XHRpZiAoMCA8IGRpdlRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdGRpdlRleHQgPSBkaXZUZXh0LnJlcGxhY2UoLzxkaXZbXj5dKj4oW1xcc1xcU1xcclxcbl0qKTxcXC9kaXY+L2dpbSwgY29udmVydERpdnMpO1xuXHRcdFx0XHRkaXZUZXh0ID0gJ1xcbicgKyB0cmltKGRpdlRleHQpICsgJ1xcbic7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXZUZXh0O1xuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0UHJlID0gKC4uLmFyZ3MpID0+XG5cdFx0XHRhcmdzICYmIDEgPCBhcmdzLmxlbmd0aFxuXHRcdFx0XHQ/IGFyZ3NbMV1cblx0XHRcdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xcbl0vZ20sICc8YnIgLz4nKVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1tcXHJdL2dtLCAnJylcblx0XHRcdFx0OiAnJyxcblx0XHRmaXhBdHRpYnV0ZVZhbHVlID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/ICcnICsgYXJnc1sxXSArIF8uZXNjYXBlKGFyZ3NbMl0pIDogJycpLFxuXHRcdGNvbnZlcnRMaW5rcyA9ICguLi5hcmdzKSA9PiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGggPyB0cmltKGFyZ3NbMV0pIDogJycpO1xuXG5cdHRleHQgPSBodG1sXG5cdFx0LnJlcGxhY2UoLzxwW14+XSo+PFxcL3A+L2dpLCAnJylcblx0XHQucmVwbGFjZSgvPHByZVtePl0qPihbXFxzXFxTXFxyXFxuXFx0XSopPFxcL3ByZT4vZ2ltLCBjb252ZXJ0UHJlKVxuXHRcdC5yZXBsYWNlKC9bXFxzXSsvZ20sICcgJylcblx0XHQucmVwbGFjZSgvKCg/OmhyZWZ8ZGF0YSlcXHM/PVxccz8pKFwiW15cIl0rP1wifCdbXiddKz8nKS9naW0sIGZpeEF0dGlidXRlVmFsdWUpXG5cdFx0LnJlcGxhY2UoLzxicltePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvaFtcXGRdPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9wPi9naSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLzx1bFtePl0qPi9naW0sICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdWw+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGxpW14+XSo+L2dpbSwgJyAqICcpXG5cdFx0LnJlcGxhY2UoLzxcXC9saT4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdGQ+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3RyPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxocltePl0qPi9naW0sICdcXG5fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cylcblx0XHQucmVwbGFjZSgvPGJsb2NrcXVvdGVbXj5dKj4vZ2ltLCAnXFxuX19icV9fc3RhcnRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9ibG9ja3F1b3RlPi9naW0sICdcXG5fX2JxX19lbmRfX1xcbicpXG5cdFx0LnJlcGxhY2UoLzxhIFtePl0qPihbXFxzXFxTXFxyXFxuXSo/KTxcXC9hPi9naW0sIGNvbnZlcnRMaW5rcylcblx0XHQucmVwbGFjZSgvPFxcL2Rpdj4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mbmJzcDsvZ2ksICcgJylcblx0XHQucmVwbGFjZSgvJnF1b3Q7L2dpLCAnXCInKVxuXHRcdC5yZXBsYWNlKC88W14+XSo+L2dtLCAnJyk7XG5cblx0dGV4dCA9ICRkaXYuaHRtbCh0ZXh0KS50ZXh0KCk7XG5cblx0dGV4dCA9IHRleHRcblx0XHQucmVwbGFjZSgvXFxuWyBcXHRdKy9nbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoL1tcXG5dezMsfS9nbSwgJ1xcblxcbicpXG5cdFx0LnJlcGxhY2UoLyZndDsvZ2ksICc+Jylcblx0XHQucmVwbGFjZSgvJmx0Oy9naSwgJzwnKVxuXHRcdC5yZXBsYWNlKC8mYW1wOy9naSwgJyYnKTtcblxuXHR0ZXh0ID0gc3BsaXRQbGFpblRleHQodGV4dCk7XG5cblx0cG9zID0gMDtcblx0bGltaXQgPSA4MDA7XG5cblx0d2hpbGUgKDAgPCBsaW1pdCkge1xuXHRcdGxpbWl0IC09IDE7XG5cdFx0aVAxID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgcG9zKTtcblx0XHRpZiAoLTEgPCBpUDEpIHtcblx0XHRcdGlQMiA9IHRleHQuaW5kZXhPZignX19icV9fc3RhcnRfXycsIGlQMSArIDUpO1xuXHRcdFx0aVAzID0gdGV4dC5pbmRleE9mKCdfX2JxX19lbmRfXycsIGlQMSArIDUpO1xuXG5cdFx0XHRpZiAoKC0xID09PSBpUDIgfHwgaVAzIDwgaVAyKSAmJiBpUDEgPCBpUDMpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGlQMSkgKyBjb252ZXJ0QmxvY2txdW90ZSh0ZXh0LnN1YnN0cmluZyhpUDEgKyAxMywgaVAzKSkgKyB0ZXh0LnN1YnN0cmluZyhpUDMgKyAxMSk7XG5cblx0XHRcdFx0cG9zID0gMDtcblx0XHRcdH0gZWxzZSBpZiAoLTEgPCBpUDIgJiYgaVAyIDwgaVAzKSB7XG5cdFx0XHRcdHBvcyA9IGlQMiAtIDE7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fX2JxX19zdGFydF9fL2dtLCAnJykucmVwbGFjZSgvX19icV9fZW5kX18vZ20sICcnKTtcblxuXHRyZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGxhaW5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmluZEVtYWlsQW5kTGlua3NJblRleHQgPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYWluVG9IdG1sKHBsYWluLCBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlKSB7XG5cdHBsYWluID0gcGxhaW4udG9TdHJpbmcoKS5yZXBsYWNlKC9cXHIvZywgJycpO1xuXHRwbGFpbiA9IHBsYWluLnJlcGxhY2UoL14+Wz4gXT4rL2dtLCAoW21hdGNoXSkgPT4gKG1hdGNoID8gbWF0Y2gucmVwbGFjZSgvWyBdKy9nLCAnJykgOiBtYXRjaCkpO1xuXG5cdGxldCBiSW4gPSBmYWxzZSxcblx0XHRiRG8gPSB0cnVlLFxuXHRcdGJTdGFydCA9IHRydWUsXG5cdFx0YU5leHRUZXh0ID0gW10sXG5cdFx0c0xpbmUgPSAnJyxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGFUZXh0ID0gcGxhaW4uc3BsaXQoJ1xcbicpO1xuXG5cdGRvIHtcblx0XHRiRG8gPSBmYWxzZTtcblx0XHRhTmV4dFRleHQgPSBbXTtcblx0XHRmb3IgKGlJbmRleCA9IDA7IGlJbmRleCA8IGFUZXh0Lmxlbmd0aDsgaUluZGV4KyspIHtcblx0XHRcdHNMaW5lID0gYVRleHRbaUluZGV4XTtcblx0XHRcdGJTdGFydCA9ICc+JyA9PT0gc0xpbmUuc3Vic3RyKDAsIDEpO1xuXHRcdFx0aWYgKGJTdGFydCAmJiAhYkluKSB7XG5cdFx0XHRcdGJEbyA9IHRydWU7XG5cdFx0XHRcdGJJbiA9IHRydWU7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn5ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lLnN1YnN0cigxKSk7XG5cdFx0XHR9IGVsc2UgaWYgKCFiU3RhcnQgJiYgYkluKSB7XG5cdFx0XHRcdGlmICgnJyAhPT0gc0xpbmUpIHtcblx0XHRcdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaCgnfn5+L2Jsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYkluKSB7XG5cdFx0XHRiSW4gPSBmYWxzZTtcblx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdH1cblxuXHRcdGFUZXh0ID0gYU5leHRUZXh0O1xuXHR9IHdoaWxlIChiRG8pO1xuXG5cdHBsYWluID0gYVRleHQuam9pbignXFxuJyk7XG5cblx0cGxhaW4gPSBwbGFpblxuXHRcdC8vIC5yZXBsYWNlKC9+fn5cXC9ibG9ja3F1b3Rlfn5+XFxufn5+YmxvY2txdW90ZX5+fi9nLCAnXFxuJylcblx0XHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuXHRcdC5yZXBsYWNlKC8+L2csICcmZ3Q7Jylcblx0XHQucmVwbGFjZSgvPC9nLCAnJmx0OycpXG5cdFx0LnJlcGxhY2UoL35+fmJsb2NrcXVvdGV+fn5bXFxzXSovZywgJzxibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKn5+flxcL2Jsb2NrcXVvdGV+fn4vZywgJzwvYmxvY2txdW90ZT4nKVxuXHRcdC5yZXBsYWNlKC9cXG4vZywgJzxiciAvPicpO1xuXG5cdHJldHVybiBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA/IGZpbmRFbWFpbEFuZExpbmtzKHBsYWluKSA6IHBsYWluO1xufVxuXG53aW5kb3dbJ3JhaW5sb29wX1V0aWxzX2h0bWxUb1BsYWluJ10gPSBodG1sVG9QbGFpbjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfcGxhaW5Ub0h0bWwnXSA9IHBsYWluVG9IdG1sOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFTeXN0ZW1cbiAqIEBwYXJhbSB7QXJyYXl9IGFMaXN0XG4gKiBAcGFyYW0ge0FycmF5PX0gYURpc2FibGVkXG4gKiBAcGFyYW0ge0FycmF5PX0gYUhlYWRlckxpbmVzXG4gKiBAcGFyYW0gez9udW1iZXI9fSBpVW5EZWVwXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZkRpc2FibGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZWaXNpYmxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmUmVuYW1lQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJTeXN0ZW1cbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGJCdWlsZFVudmlzaWJsZVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRhU3lzdGVtLFxuXHRhTGlzdCxcblx0YURpc2FibGVkLFxuXHRhSGVhZGVyTGluZXMsXG5cdGlVbkRlZXAsXG5cdGZEaXNhYmxlQ2FsbGJhY2ssXG5cdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdGZSZW5hbWVDYWxsYmFjayxcblx0YlN5c3RlbSxcblx0YkJ1aWxkVW52aXNpYmxlXG4pIHtcblx0bGV0IC8qKlxuXHRcdCAqIEB0eXBlIHs/Rm9sZGVyTW9kZWx9XG5cdFx0ICovXG5cdFx0b0l0ZW0gPSBudWxsLFxuXHRcdGJTZXAgPSBmYWxzZSxcblx0XHRpSW5kZXggPSAwLFxuXHRcdGlMZW4gPSAwLFxuXHRcdGFSZXN1bHQgPSBbXTtcblxuXHRjb25zdCBzRGVlcFByZWZpeCA9ICdcXHUwMEEwXFx1MDBBMFxcdTAwQTAnO1xuXG5cdGJCdWlsZFVudmlzaWJsZSA9IGlzVW5kKGJCdWlsZFVudmlzaWJsZSkgPyBmYWxzZSA6ICEhYkJ1aWxkVW52aXNpYmxlO1xuXHRiU3lzdGVtID0gIWlzTm9ybWFsKGJTeXN0ZW0pID8gMCA8IGFTeXN0ZW0ubGVuZ3RoIDogYlN5c3RlbTtcblx0aVVuRGVlcCA9ICFpc05vcm1hbChpVW5EZWVwKSA/IDAgOiBpVW5EZWVwO1xuXHRmRGlzYWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZkRpc2FibGVDYWxsYmFjaykgPyBmRGlzYWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlZpc2libGVDYWxsYmFjayA9IGlzTm9ybWFsKGZWaXNpYmxlQ2FsbGJhY2spID8gZlZpc2libGVDYWxsYmFjayA6IG51bGw7XG5cdGZSZW5hbWVDYWxsYmFjayA9IGlzTm9ybWFsKGZSZW5hbWVDYWxsYmFjaykgPyBmUmVuYW1lQ2FsbGJhY2sgOiBudWxsO1xuXG5cdGlmICghaXNBcnJheShhRGlzYWJsZWQpKSB7XG5cdFx0YURpc2FibGVkID0gW107XG5cdH1cblxuXHRpZiAoIWlzQXJyYXkoYUhlYWRlckxpbmVzKSkge1xuXHRcdGFIZWFkZXJMaW5lcyA9IFtdO1xuXHR9XG5cblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYUhlYWRlckxpbmVzLmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0aWQ6IGFIZWFkZXJMaW5lc1tpSW5kZXhdWzBdLFxuXHRcdFx0bmFtZTogYUhlYWRlckxpbmVzW2lJbmRleF1bMV0sXG5cdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0c2Vwb3JhdG9yOiBmYWxzZSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFTeXN0ZW0ubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdG9JdGVtID0gYVN5c3RlbVtpSW5kZXhdO1xuXHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0bmFtZTogZlJlbmFtZUNhbGxiYWNrID8gZlJlbmFtZUNhbGxiYWNrKG9JdGVtKSA6IG9JdGVtLm5hbWUoKSxcblx0XHRcdFx0c3lzdGVtOiB0cnVlLFxuXHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHQhb0l0ZW0uc2VsZWN0YWJsZSB8fFxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGJTZXAgPSB0cnVlO1xuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhTGlzdC5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhTGlzdFtpSW5kZXhdO1xuXHRcdC8vIGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKVxuXHRcdGlmIChcblx0XHRcdChvSXRlbS5zdWJTY3JpYmVkKCkgfHwgIW9JdGVtLmV4aXN0ZW4gfHwgYkJ1aWxkVW52aXNpYmxlKSAmJlxuXHRcdFx0KG9JdGVtLnNlbGVjdGFibGUgfHwgb0l0ZW0uaGFzU3ViU2NyaWJlZFN1YmZvbGRlcnMoKSlcblx0XHQpIHtcblx0XHRcdGlmIChmVmlzaWJsZUNhbGxiYWNrID8gZlZpc2libGVDYWxsYmFjayhvSXRlbSkgOiB0cnVlKSB7XG5cdFx0XHRcdGlmIChGb2xkZXJUeXBlLlVzZXIgPT09IG9JdGVtLnR5cGUoKSB8fCAhYlN5c3RlbSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKSB7XG5cdFx0XHRcdFx0aWYgKGJTZXAgJiYgMCA8IGFSZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0XHRpZDogJy0tLScsXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICctLS0nLFxuXHRcdFx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzZXBvcmF0b3I6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGRpc2FibGVkOiB0cnVlXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRiU2VwID0gZmFsc2U7XG5cdFx0XHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBvSXRlbS5mdWxsTmFtZVJhdyxcblx0XHRcdFx0XHRcdG5hbWU6XG5cdFx0XHRcdFx0XHRcdG5ldyB3aW5kb3cuQXJyYXkob0l0ZW0uZGVlcCArIDEgLSBpVW5EZWVwKS5qb2luKHNEZWVwUHJlZml4KSArXG5cdFx0XHRcdFx0XHRcdChmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpKSxcblx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6XG5cdFx0XHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0XHRcdC0xIDwgaW5BcnJheShvSXRlbS5mdWxsTmFtZVJhdywgYURpc2FibGVkKSB8fFxuXHRcdFx0XHRcdFx0XHQoZkRpc2FibGVDYWxsYmFjayA/IGZEaXNhYmxlQ2FsbGJhY2sob0l0ZW0pIDogZmFsc2UpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob0l0ZW0uc3ViU2NyaWJlZCgpICYmIDAgPCBvSXRlbS5zdWJGb2xkZXJzKCkubGVuZ3RoKSB7XG5cdFx0XHRhUmVzdWx0ID0gYVJlc3VsdC5jb25jYXQoXG5cdFx0XHRcdGZvbGRlckxpc3RPcHRpb25zQnVpbGRlcihcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRvSXRlbS5zdWJGb2xkZXJzKCksXG5cdFx0XHRcdFx0YURpc2FibGVkLFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdGlVbkRlZXAsXG5cdFx0XHRcdFx0ZkRpc2FibGVDYWxsYmFjayxcblx0XHRcdFx0XHRmVmlzaWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZSZW5hbWVDYWxsYmFjayxcblx0XHRcdFx0XHRiU3lzdGVtLFxuXHRcdFx0XHRcdGJCdWlsZFVudmlzaWJsZVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhUmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZWxlbWVudCkge1xuXHRsZXQgc2VsID0gbnVsbCxcblx0XHRyYW5nZSA9IG51bGw7XG5cblx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cdFx0c2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cdFx0cmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuXHRcdHNlbC5hZGRSYW5nZShyYW5nZSk7XG5cdH0gZWxzZSBpZiAod2luZG93LmRvY3VtZW50LnNlbGVjdGlvbikge1xuXHRcdHJhbmdlID0gd2luZG93LmRvY3VtZW50LmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdFx0cmFuZ2UubW92ZVRvRWxlbWVudFRleHQoZWxlbWVudCk7XG5cdFx0cmFuZ2Uuc2VsZWN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSA9IF8uZGVib3VuY2UoKCkgPT4ge1xuXHRkcm9wZG93blZpc2liaWxpdHkoISFfLmZpbmQoR2xvYmFsc0RhdGEuYUJvb3RzdHJhcERyb3Bkb3ducywgKGl0ZW0pID0+IGl0ZW0uaGFzQ2xhc3MoJ29wZW4nKSkpO1xufSwgNTApO1xuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGRlbGF5ID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZShkZWxheSA9IGZhbHNlKSB7XG5cdGNvbnN0IGZGdW5jID0gKCkgPT4ge1xuXHRcdCQoJy5jaGVja0F1dG9jb21wbGV0ZScpLnRyaWdnZXIoJ2NoYW5nZScpO1xuXHR9O1xuXG5cdGlmIChkZWxheSkge1xuXHRcdF8uZGVsYXkoZkZ1bmMsIDEwMCk7XG5cdH0gZWxzZSB7XG5cdFx0ZkZ1bmMoKTtcblx0fVxufVxuXG5jb25zdCBjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGUgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ3VyYXRpb25Gcm9tU2NyaXB0VGFnKGNvbmZpZ3VyYXRpb24pIHtcblx0aWYgKCFjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0pIHtcblx0XHRjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0gPSAkKFxuXHRcdFx0J3NjcmlwdFt0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXVtkYXRhLWNvbmZpZ3VyYXRpb249XCInICsgY29uZmlndXJhdGlvbiArICdcIl0nXG5cdFx0KTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlW2NvbmZpZ3VyYXRpb25dLnRleHQoKSk7XG5cdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogQHBhcmFtIHttaXhlZH0gbVByb3BPclZhbHVlXG4gKiBAcGFyYW0ge21peGVkfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzcG9zZU9uZShwcm9wT3JWYWx1ZSwgdmFsdWUpIHtcblx0Y29uc3QgZGlzcG9zYWJsZSA9IHZhbHVlIHx8IHByb3BPclZhbHVlO1xuXHRpZiAoZGlzcG9zYWJsZSAmJiAnZnVuY3Rpb24nID09PSB0eXBlb2YgZGlzcG9zYWJsZS5kaXNwb3NlKSB7XG5cdFx0ZGlzcG9zYWJsZS5kaXNwb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT2JqZWN0KG9iamVjdCkge1xuXHRpZiAob2JqZWN0KSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0LmRpc3Bvc2FibGVzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdC5kaXNwb3NhYmxlcywgZGlzcG9zZU9uZSk7XG5cdFx0fVxuXG5cdFx0a28udXRpbHMub2JqZWN0Rm9yRWFjaChvYmplY3QsIGRpc3Bvc2VPbmUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iamVjdE9yT2JqZWN0c1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxlZ2F0ZVJ1bk9uRGVzdHJveShvYmplY3RPck9iamVjdHMpIHtcblx0aWYgKG9iamVjdE9yT2JqZWN0cykge1xuXHRcdGlmIChpc0FycmF5KG9iamVjdE9yT2JqZWN0cykpIHtcblx0XHRcdF8uZWFjaChvYmplY3RPck9iamVjdHMsIChpdGVtKSA9PiB7XG5cdFx0XHRcdGRlbGVnYXRlUnVuT25EZXN0cm95KGl0ZW0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChvYmplY3RPck9iamVjdHMgJiYgb2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSkge1xuXHRcdFx0b2JqZWN0T3JPYmplY3RzLm9uRGVzdHJveSgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSAkc3R5bGVUYWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBjc3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kU3R5bGVzKCRzdHlsZVRhZywgY3NzKSB7XG5cdGlmICgkc3R5bGVUYWcgJiYgJHN0eWxlVGFnWzBdKSB7XG5cdFx0aWYgKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0ICYmICFpc1VuZCgkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0KSkge1xuXHRcdFx0JHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0XHR9IGVsc2Uge1xuXHRcdFx0JHN0eWxlVGFnLnRleHQoY3NzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxubGV0IF9fdGhlbWVUaW1lciA9IDAsXG5cdF9fdGhlbWVBamF4ID0gbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb249fSB0aGVtZVRyaWdnZXIgPSBub29wXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZVRoZW1lKHZhbHVlLCB0aGVtZVRyaWdnZXIgPSBub29wKSB7XG5cdGNvbnN0IHRoZW1lTGluayA9ICQoJyNhcHAtdGhlbWUtbGluaycpLFxuXHRcdGNsZWFyVGltZXIgPSAoKSA9PiB7XG5cdFx0XHRfX3RoZW1lVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKSwgMTAwMCk7XG5cdFx0XHRfX3RoZW1lQWpheCA9IG51bGw7XG5cdFx0fTtcblxuXHRsZXQgdGhlbWVTdHlsZSA9ICQoJyNhcHAtdGhlbWUtc3R5bGUnKSxcblx0XHR1cmwgPSB0aGVtZUxpbmsuYXR0cignaHJlZicpO1xuXG5cdGlmICghdXJsKSB7XG5cdFx0dXJsID0gdGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnKTtcblx0fVxuXG5cdGlmICh1cmwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKS5yZXBsYWNlKC9cXC8tXFwvW14vXStcXC8tXFwvLywgJy8tLycgKyB2YWx1ZSArICcvLS8nKTtcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvXFwvQ3NzXFwvW14vXStcXC9Vc2VyXFwvLywgJy9Dc3MvMC9Vc2VyLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9IYXNoXFwvW14vXStcXC8vLCAnL0hhc2gvLS8nKTtcblxuXHRcdGlmICgnSnNvbi8nICE9PSB1cmwuc3Vic3RyaW5nKHVybC5sZW5ndGggLSA1LCB1cmwubGVuZ3RoKSkge1xuXHRcdFx0dXJsICs9ICdKc29uLyc7XG5cdFx0fVxuXG5cdFx0d2luZG93LmNsZWFyVGltZW91dChfX3RoZW1lVGltZXIpO1xuXG5cdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuQW5pbWF0ZSk7XG5cblx0XHRpZiAoX190aGVtZUFqYXggJiYgX190aGVtZUFqYXguYWJvcnQpIHtcblx0XHRcdF9fdGhlbWVBamF4LmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0X190aGVtZUFqYXggPSAkLmFqYXgoe1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nXG5cdFx0fSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGlzQXJyYXkoZGF0YSkgJiYgMiA9PT0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAodGhlbWVMaW5rICYmIHRoZW1lTGlua1swXSAmJiAoIXRoZW1lU3R5bGUgfHwgIXRoZW1lU3R5bGVbMF0pKSB7XG5cdFx0XHRcdFx0XHR0aGVtZVN0eWxlID0gJCgnPHN0eWxlIGlkPVwiYXBwLXRoZW1lLXN0eWxlXCI+PC9zdHlsZT4nKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5hZnRlcih0aGVtZVN0eWxlKTtcblx0XHRcdFx0XHRcdHRoZW1lTGluay5yZW1vdmUoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodGhlbWVTdHlsZSAmJiB0aGVtZVN0eWxlWzBdKSB7XG5cdFx0XHRcdFx0XHRpZiAoYXBwZW5kU3R5bGVzKHRoZW1lU3R5bGUsIGRhdGFbMV0pKSB7XG5cdFx0XHRcdFx0XHRcdHRoZW1lU3R5bGUuYXR0cignZGF0YS1ocmVmJywgdXJsKS5hdHRyKCdkYXRhLXRoZW1lJywgZGF0YVswXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dGhlbWVUcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQudGhlbihjbGVhclRpbWVyLCBjbGVhclRpbWVyKTtcblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVkUGFnZW5hdG9ySGVscGVyKGtvQ3VycmVudFBhZ2UsIGtvUGFnZUNvdW50KSB7XG5cdHJldHVybiAoKSA9PiB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSBrb0N1cnJlbnRQYWdlKCksXG5cdFx0XHRwYWdlQ291bnQgPSBrb1BhZ2VDb3VudCgpLFxuXHRcdFx0cmVzdWx0ID0gW10sXG5cdFx0XHRmQWRkID0gKGluZGV4LCBwdXNoID0gdHJ1ZSwgY3VzdG9tTmFtZSA9ICcnKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XG5cdFx0XHRcdFx0Y3VycmVudDogaW5kZXggPT09IGN1cnJlbnRQYWdlLFxuXHRcdFx0XHRcdG5hbWU6ICcnID09PSBjdXN0b21OYW1lID8gaW5kZXgudG9TdHJpbmcoKSA6IGN1c3RvbU5hbWUudG9TdHJpbmcoKSxcblx0XHRcdFx0XHRjdXN0b206ICcnICE9PSBjdXN0b21OYW1lLFxuXHRcdFx0XHRcdHRpdGxlOiAnJyA9PT0gY3VzdG9tTmFtZSA/ICcnIDogaW5kZXgudG9TdHJpbmcoKSxcblx0XHRcdFx0XHR2YWx1ZTogaW5kZXgudG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChwdXNoKSB7XG5cdFx0XHRcdFx0cmVzdWx0LnB1c2goZGF0YSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LnVuc2hpZnQoZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRsZXQgcHJldiA9IDAsXG5cdFx0XHRuZXh0ID0gMCxcblx0XHRcdGxpbWl0ID0gMjtcblxuXHRcdGlmICgxIDwgcGFnZUNvdW50IHx8ICgwIDwgcGFnZUNvdW50ICYmIHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSkge1xuXHRcdFx0aWYgKHBhZ2VDb3VudCA8IGN1cnJlbnRQYWdlKSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50KTtcblx0XHRcdFx0cHJldiA9IHBhZ2VDb3VudDtcblx0XHRcdFx0bmV4dCA9IHBhZ2VDb3VudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgzID49IGN1cnJlbnRQYWdlIHx8IHBhZ2VDb3VudCAtIDIgPD0gY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0XHRsaW1pdCArPSAyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZkFkZChjdXJyZW50UGFnZSk7XG5cdFx0XHRcdHByZXYgPSBjdXJyZW50UGFnZTtcblx0XHRcdFx0bmV4dCA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0XHRcdHByZXYgLT0gMTtcblx0XHRcdFx0bmV4dCArPSAxO1xuXG5cdFx0XHRcdGlmICgwIDwgcHJldikge1xuXHRcdFx0XHRcdGZBZGQocHJldiwgZmFsc2UpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFnZUNvdW50ID49IG5leHQpIHtcblx0XHRcdFx0XHRmQWRkKG5leHQsIHRydWUpO1xuXHRcdFx0XHRcdGxpbWl0IC09IDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoMCA+PSBwcmV2KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKDMgPT09IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgyLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2UgaWYgKDMgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocHJldiAtIDEpIC8gMiksIGZhbHNlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgLSAyID09PSBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50IC0gMSwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKHBhZ2VDb3VudCAtIDIgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQoTWF0aC5yb3VuZCgocGFnZUNvdW50ICsgbmV4dCkgLyAyKSwgdHJ1ZSwgJy4uLicpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBmaXJzdCBhbmQgbGFzdFxuXHRcdFx0aWYgKDEgPCBwcmV2KSB7XG5cdFx0XHRcdGZBZGQoMSwgZmFsc2UpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocGFnZUNvdW50ID4gbmV4dCkge1xuXHRcdFx0XHRmQWRkKHBhZ2VDb3VudCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKSB7XG5cdGZpbGVOYW1lID0gdHJpbShmaWxlTmFtZSkudG9Mb3dlckNhc2UoKTtcblxuXHRjb25zdCByZXN1bHQgPSBmaWxlTmFtZS5zcGxpdCgnLicpLnBvcCgpO1xuXHRyZXR1cm4gcmVzdWx0ID09PSBmaWxlTmFtZSA/ICcnIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pbWVDb250ZW50VHlwZShmaWxlTmFtZSkge1xuXHRsZXQgZXh0ID0gJycsXG5cdFx0cmVzdWx0ID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGlmICgnd2lubWFpbC5kYXQnID09PSBmaWxlTmFtZSkge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vbXMtdG5lZic7XG5cdH1cblxuXHRleHQgPSBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcblx0aWYgKGV4dCAmJiAwIDwgZXh0Lmxlbmd0aCAmJiAhaXNVbmQoTWltZVtleHRdKSkge1xuXHRcdHJlc3VsdCA9IE1pbWVbZXh0XTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJhbnNwYXJlbnQoY29sb3IpIHtcblx0cmV0dXJuICdyZ2JhKDAsIDAsIDAsIDApJyA9PT0gY29sb3IgfHwgJ3RyYW5zcGFyZW50JyA9PT0gY29sb3I7XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9ICRlbFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWxIZWlnaHQoJGVsKSB7XG5cdCRlbFxuXHRcdC5jbG9uZSgpXG5cdFx0LnNob3coKVxuXHRcdC5hcHBlbmRUbygkaGNvbnQpO1xuXHRjb25zdCByZXN1bHQgPSAkaGNvbnQuaGVpZ2h0KCk7XG5cdCRoY29udC5lbXB0eSgpO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZkNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNpemVBbmRDcm9wKHVybCwgdmFsdWUsIGZDYWxsYmFjaykge1xuXHRjb25zdCBpbWcgPSBuZXcgd2luZG93LkltYWdlKCk7XG5cdGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRsZXQgZGlmZiA9IFswLCAwXTtcblxuXHRcdGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcblx0XHRcdGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG5cdFx0Y2FudmFzLndpZHRoID0gdmFsdWU7XG5cdFx0Y2FudmFzLmhlaWdodCA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMud2lkdGggPiB0aGlzLmhlaWdodCkge1xuXHRcdFx0ZGlmZiA9IFt0aGlzLndpZHRoIC0gdGhpcy5oZWlnaHQsIDBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkaWZmID0gWzAsIHRoaXMuaGVpZ2h0IC0gdGhpcy53aWR0aF07XG5cdFx0fVxuXG5cdFx0Y3R4LmZpbGxTdHlsZSA9ICcjZmZmJztcblx0XHRjdHguZmlsbFJlY3QoMCwgMCwgdmFsdWUsIHZhbHVlKTtcblx0XHRjdHguZHJhd0ltYWdlKHRoaXMsIGRpZmZbMF0gLyAyLCBkaWZmWzFdIC8gMiwgdGhpcy53aWR0aCAtIGRpZmZbMF0sIHRoaXMuaGVpZ2h0IC0gZGlmZlsxXSwgMCwgMCwgdmFsdWUsIHZhbHVlKTtcblxuXHRcdGZDYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJykpO1xuXHR9O1xuXG5cdGltZy5zcmMgPSB1cmw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1haWxUb1VybFxuICogQHBhcmFtIHtGdW5jdGlvbn0gUG9wdXBDb21wb3NlVmlld01vZGVsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxUb0hlbHBlcihtYWlsVG9VcmwsIFBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRpZiAoXG5cdFx0bWFpbFRvVXJsICYmXG5cdFx0J21haWx0bzonID09PVxuXHRcdFx0bWFpbFRvVXJsXG5cdFx0XHRcdC50b1N0cmluZygpXG5cdFx0XHRcdC5zdWJzdHIoMCwgNylcblx0XHRcdFx0LnRvTG93ZXJDYXNlKClcblx0KSB7XG5cdFx0aWYgKCFQb3B1cENvbXBvc2VWaWV3TW9kZWwpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdG1haWxUb1VybCA9IG1haWxUb1VybC50b1N0cmluZygpLnN1YnN0cig3KTtcblxuXHRcdGxldCB0byA9IFtdLFxuXHRcdFx0Y2MgPSBudWxsLFxuXHRcdFx0YmNjID0gbnVsbCxcblx0XHRcdHBhcmFtcyA9IHt9O1xuXG5cdFx0Y29uc3QgZW1haWwgPSBtYWlsVG9VcmwucmVwbGFjZSgvXFw/LiskLywgJycpLFxuXHRcdFx0cXVlcnkgPSBtYWlsVG9VcmwucmVwbGFjZSgvXlteP10qXFw/LywgJycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdDtcblxuXHRcdHBhcmFtcyA9IHNpbXBsZVF1ZXJ5UGFyc2VyKHF1ZXJ5KTtcblxuXHRcdGlmICghaXNVbmQocGFyYW1zLnRvKSkge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGRlY29kZVVSSUNvbXBvbmVudChlbWFpbCArICcsJyArIHBhcmFtcy50bykpO1xuXHRcdFx0dG8gPSBfLnZhbHVlcyhcblx0XHRcdFx0dG8ucmVkdWNlKChyZXN1bHQsIHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0W3ZhbHVlLmVtYWlsXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIXJlc3VsdFt2YWx1ZS5lbWFpbF0ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdFt2YWx1ZS5lbWFpbF0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHR9LCB7fSlcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRvID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShlbWFpbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuY2MpKSB7XG5cdFx0XHRjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5jYykpO1xuXHRcdH1cblxuXHRcdGlmICghaXNVbmQocGFyYW1zLmJjYykpIHtcblx0XHRcdGJjYyA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5iY2MpKTtcblx0XHR9XG5cblx0XHRyZXF1aXJlKCdLbm9pbi9Lbm9pbicpLnNob3dTY3JlZW5Qb3B1cChQb3B1cENvbXBvc2VWaWV3TW9kZWwsIFtcblx0XHRcdENvbXBvc2VUeXBlLkVtcHR5LFxuXHRcdFx0bnVsbCxcblx0XHRcdHRvLFxuXHRcdFx0Y2MsXG5cdFx0XHRiY2MsXG5cdFx0XHRpc1VuZChwYXJhbXMuc3ViamVjdCkgPyBudWxsIDogcFN0cmluZyhkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLnN1YmplY3QpKSxcblx0XHRcdGlzVW5kKHBhcmFtcy5ib2R5KSA/IG51bGwgOiBwbGFpblRvSHRtbChwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuYm9keSkpKVxuXHRcdF0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9tUmVhZHkoZm4pIHtcblx0JCgoKSA9PiBmbigpKTtcblx0Ly9cblx0Ly9cdGlmICgnbG9hZGluZycgIT09IHdpbmRvdy5kb2N1bWVudC5yZWFkeVN0YXRlKVxuXHQvL1x0e1xuXHQvL1x0XHRmbigpO1xuXHQvL1x0fVxuXHQvL1x0ZWxzZVxuXHQvL1x0e1xuXHQvL1x0XHR3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTtcblx0Ly9cdH1cbn1cblxuZXhwb3J0IGNvbnN0IHdpbmRvd1Jlc2l6ZSA9IF8uZGVib3VuY2UoKHRpbWVvdXQpID0+IHtcblx0aWYgKGlzVW5kKHRpbWVvdXQpIHx8IGlzTnVsbCh0aW1lb3V0KSkge1xuXHRcdCR3aW4ucmVzaXplKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0JHdpbi5yZXNpemUoKTtcblx0XHR9LCB0aW1lb3V0KTtcblx0fVxufSwgNTApO1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2luZG93UmVzaXplQ2FsbGJhY2soKSB7XG5cdHdpbmRvd1Jlc2l6ZSgpO1xufVxuXG5sZXQgc3Vic3RyID0gd2luZG93LlN0cmluZy5zdWJzdHI7XG5pZiAoJ2InICE9PSAnYWInLnN1YnN0cigtMSkpIHtcblx0c3Vic3RyID0gKHN0ciwgc3RhcnQsIGxlbmd0aCkgPT4ge1xuXHRcdHN0YXJ0ID0gMCA+IHN0YXJ0ID8gc3RyLmxlbmd0aCArIHN0YXJ0IDogc3RhcnQ7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHIoc3RhcnQsIGxlbmd0aCk7XG5cdH07XG5cblx0d2luZG93LlN0cmluZy5zdWJzdHIgPSBzdWJzdHI7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5fOyIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCB7IGlzVW5kLCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmxldCBTRVRUSU5HUyA9IHdpbmRvdy5fX3JsYWhfZGF0YSgpIHx8IG51bGw7XG5TRVRUSU5HUyA9IGlzTm9ybWFsKFNFVFRJTkdTKSA/IFNFVFRJTkdTIDoge307XG5cbmxldCBBUFBfU0VUVElOR1MgPSBTRVRUSU5HUy5TeXN0ZW0gfHwgbnVsbDtcbkFQUF9TRVRUSU5HUyA9IGlzTm9ybWFsKEFQUF9TRVRUSU5HUykgPyBBUFBfU0VUVElOR1MgOiB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChTRVRUSU5HU1tuYW1lXSkgPyBudWxsIDogU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2V0KG5hbWUsIHZhbHVlKSB7XG5cdFNFVFRJTkdTW25hbWVdID0gdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwU2V0dGluZ3NHZXQobmFtZSkge1xuXHRyZXR1cm4gaXNVbmQoQVBQX1NFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBBUFBfU0VUVElOR1NbbmFtZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwYShuYW1lKSB7XG5cdGNvbnN0IHZhbHVlcyA9IHNldHRpbmdzR2V0KCdDYXBhJyk7XG5cdHJldHVybiBpc0FycmF5KHZhbHVlcykgJiYgaXNOb3JtYWwobmFtZSkgJiYgLTEgPCBpbkFycmF5KG5hbWUsIHZhbHVlcyk7XG59XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuY29uc3QgJHdpbiA9ICQod2luZG93KTtcbiR3aW4uX19zaXplcyA9IFswLCAwXTtcblxuZXhwb3J0IHsgJHdpbiB9O1xuXG5leHBvcnQgY29uc3QgJGRvYyA9ICQod2luZG93LmRvY3VtZW50KTtcblxuZXhwb3J0IGNvbnN0ICRodG1sID0gJCgnaHRtbCcpO1xuXG5leHBvcnQgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG5cbmV4cG9ydCBjb25zdCAkZGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcblxuZXhwb3J0IGNvbnN0ICRoY29udCA9ICQoJzxkaXY+PC9kaXY+Jyk7XG4kaGNvbnRcblx0LmF0dHIoJ2FyZWEnLCAnaGlkZGVuJylcblx0LmNzcyh7IHBvc2l0aW9uOiAnYWJzb2x1dGUnLCBsZWZ0OiAtNTAwMCB9KVxuXHQuYXBwZW5kVG8oJGJvZHkpO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRNaWNyb3RpbWUgPSBuZXcgd2luZG93LkRhdGUoKS5nZXRUaW1lKCk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBjb21tdW5pdHkgPSBSTF9DT01NVU5JVFk7XG5cbi8qKlxuICogQHR5cGUgez99XG4gKi9cbmV4cG9ydCBjb25zdCBkcm9wZG93blZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB1c2VLZXlib2FyZFNob3J0Y3V0cyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IHNVc2VyQWdlbnQgPVxuXHQoJ25hdmlnYXRvcicgaW4gd2luZG93ICYmICd1c2VyQWdlbnQnIGluIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkgfHwgJyc7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSUUgPSAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignbXNpZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkNocm9tZSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJTYWZhcmkgPSAhYkNocm9tZSAmJiAtMSA8IHNVc2VyQWdlbnQuaW5kZXhPZignc2FmYXJpJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiTW9iaWxlRGV2aWNlID1cblx0KC9hbmRyb2lkL2kpLnRlc3Qoc1VzZXJBZ2VudCkgfHxcblx0KC9pcGhvbmUvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwb2QvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwYWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2JsYWNrYmVycnkvaSkudGVzdChzVXNlckFnZW50KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJEaXNhYmxlTmFub1Njcm9sbCA9IGJNb2JpbGVEZXZpY2U7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQW5pbWF0aW9uU3VwcG9ydGVkID1cblx0IWJNb2JpbGVEZXZpY2UgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc3RyYW5zaXRpb25zJykgJiYgJGh0bWwuaGFzQ2xhc3MoJ2Nzc2FuaW1hdGlvbnMnKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJYTUxIdHRwUmVxdWVzdFN1cHBvcnRlZCA9ICEhd2luZG93LlhNTEh0dHBSZXF1ZXN0O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYklzSHR0cHMgPVxuXHR3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmxvY2F0aW9uID8gJ2h0dHBzOicgPT09IHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA6IGZhbHNlO1xuXG4vKipcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydCBjb25zdCBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyA9IHtcblx0J3RpdGxlJzogZmFsc2UsXG5cdCdzdHlsZXNTZXQnOiBmYWxzZSxcblx0J2N1c3RvbUNvbmZpZyc6ICcnLFxuXHQnY29udGVudHNDc3MnOiAnJyxcblx0J3Rvb2xiYXJHcm91cHMnOiBbXG5cdFx0eyBuYW1lOiAnc3BlYycgfSxcblx0XHR7IG5hbWU6ICdzdHlsZXMnIH0sXG5cdFx0eyBuYW1lOiAnYmFzaWNzdHlsZXMnLCBncm91cHM6IFsnYmFzaWNzdHlsZXMnLCAnY2xlYW51cCcsICdiaWRpJ10gfSxcblx0XHR7IG5hbWU6ICdjb2xvcnMnIH0sXG5cdFx0Yk1vYmlsZURldmljZSA/IHt9IDogeyBuYW1lOiAncGFyYWdyYXBoJywgZ3JvdXBzOiBbJ2xpc3QnLCAnaW5kZW50JywgJ2Jsb2NrcycsICdhbGlnbiddIH0sXG5cdFx0eyBuYW1lOiAnbGlua3MnIH0sXG5cdFx0eyBuYW1lOiAnaW5zZXJ0JyB9LFxuXHRcdHsgbmFtZTogJ2RvY3VtZW50JywgZ3JvdXBzOiBbJ21vZGUnLCAnZG9jdW1lbnQnLCAnZG9jdG9vbHMnXSB9LFxuXHRcdHsgbmFtZTogJ290aGVycycgfVxuXHRdLFxuXG5cdCdyZW1vdmVQbHVnaW5zJzogJ2xpc3RzdHlsZScsXG5cdCdyZW1vdmVCdXR0b25zJzogJ0Zvcm1hdCxVbmRvLFJlZG8sQ3V0LENvcHksUGFzdGUsQW5jaG9yLFN0cmlrZSxTdWJzY3JpcHQsU3VwZXJzY3JpcHQsSW1hZ2UsU2VsZWN0QWxsLFNvdXJjZScsXG5cdCdyZW1vdmVEaWFsb2dUYWJzJzogJ2xpbms6YWR2YW5jZWQ7bGluazp0YXJnZXQ7aW1hZ2U6YWR2YW5jZWQ7aW1hZ2VzOmFkdmFuY2VkJyxcblxuXHQnZXh0cmFQbHVnaW5zJzogJ3BsYWluLHNpZ25hdHVyZScsXG5cblx0J2FsbG93ZWRDb250ZW50JzogdHJ1ZSxcblx0J2V4dHJhQWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXG5cdCdmaWxsRW1wdHlCbG9ja3MnOiBmYWxzZSxcblx0J2lnbm9yZUVtcHR5UGFyYWdyYXBoJzogdHJ1ZSxcblx0J2Rpc2FibGVOYXRpdmVTcGVsbENoZWNrZXInOiBmYWxzZSxcblxuXHQnY29sb3JCdXR0b25fZW5hYmxlQXV0b21hdGljJzogZmFsc2UsXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVNb3JlJzogdHJ1ZSxcblxuXHQnZm9udF9kZWZhdWx0TGFiZWwnOiAnQXJpYWwnLFxuXHQnZm9udFNpemVfZGVmYXVsdExhYmVsJzogJzEzJyxcblx0J2ZvbnRTaXplX3NpemVzJzogJzEwLzEwcHg7MTIvMTJweDsxMy8xM3B4OzE0LzE0cHg7MTYvMTZweDsxOC8xOHB4OzIwLzIwcHg7MjQvMjRweDsyOC8yOHB4OzM2LzM2cHg7NDgvNDhweCdcbn07XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JMYW5nc01hcCA9IHtcblx0J2FyX3NhJzogJ2FyLXNhJyxcblx0J2JnX2JnJzogJ2JnJyxcblx0J2NzX0NaJzogJ2NzJyxcblx0J2RlX2RlJzogJ2RlJyxcblx0J2VsX2dyJzogJ2VsJyxcblx0J2VzX2VzJzogJ2VzJyxcblx0J2V0X2VlJzogJ2V0Jyxcblx0J2ZyX2ZyJzogJ2ZyJyxcblx0J2h1X2h1JzogJ2h1Jyxcblx0J2lzX2lzJzogJ2lzJyxcblx0J2l0X2l0JzogJ2l0Jyxcblx0J2phX2pwJzogJ2phJyxcblx0J2tvX2tyJzogJ2tvJyxcblx0J2x0X2x0JzogJ2x0Jyxcblx0J2x2X2x2JzogJ2x2Jyxcblx0J2ZhX2lyJzogJ2ZhJyxcblx0J25iX25vJzogJ25iJyxcblx0J25sX25sJzogJ25sJyxcblx0J3BsX3BsJzogJ3BsJyxcblx0J3B0X2JyJzogJ3B0LWJyJyxcblx0J3B0X3B0JzogJ3B0Jyxcblx0J3JvX3JvJzogJ3JvJyxcblx0J3J1X3J1JzogJ3J1Jyxcblx0J3NrX3NrJzogJ3NrJyxcblx0J3NsX3NpJzogJ3NsJyxcblx0J3N2X3NlJzogJ3N2Jyxcblx0J3RyX3RyJzogJ3RyJyxcblx0J3VrX3VhJzogJ3VrJyxcblx0J3poX2NuJzogJ3poLWNuJyxcblx0J3poX3R3JzogJ3poJ1xufTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xubGV0IGJBbGxvd1BkZlByZXZpZXcgPSAhYk1vYmlsZURldmljZTtcblxuaWYgKGJBbGxvd1BkZlByZXZpZXcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcykge1xuXHRiQWxsb3dQZGZQcmV2aWV3ID0gISFfLmZpbmQod2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXMsICh0eXBlKSA9PiB0eXBlICYmICdhcHBsaWNhdGlvbi9wZGYnID09PSB0eXBlLnR5cGUpO1xuXG5cdGlmICghYkFsbG93UGRmUHJldmlldykge1xuXHRcdGJBbGxvd1BkZlByZXZpZXcgPSAndW5kZWZpbmVkJyAhPT0gdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzWydhcHBsaWNhdGlvbi9wZGYnXTtcblx0fVxufVxuXG5leHBvcnQgeyBiQWxsb3dQZGZQcmV2aWV3IH07XG5cbmV4cG9ydCBjb25zdCBWSUVXX01PREVMUyA9IHtcblx0c2V0dGluZ3M6IFtdLFxuXHQnc2V0dGluZ3MtcmVtb3ZlZCc6IFtdLFxuXHQnc2V0dGluZ3MtZGlzYWJsZWQnOiBbXVxufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVBY3Rpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxEaXNhYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFR5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcbmV4cG9ydCBjb25zdCBsZWZ0UGFuZWxXaWR0aCA9IGtvLm9ic2VydmFibGUoMCk7XG5cbmxlZnRQYW5lbERpc2FibGVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIG1vdmVBY3Rpb24oKSkge1xuXHRcdG1vdmVBY3Rpb24oZmFsc2UpO1xuXHR9XG59KTtcblxubW92ZUFjdGlvbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSAmJiBsZWZ0UGFuZWxEaXNhYmxlZCgpKSB7XG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQoZmFsc2UpO1xuXHR9XG59KTtcblxuLy8gcG9wdXBzXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5TmFtZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5leHBvcnQgY29uc3QgcG9wdXBWaXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHBvcHVwVmlzaWJpbGl0eU5hbWVzKCkubGVuZ3RoKTtcblxucG9wdXBWaXNpYmlsaXR5LnN1YnNjcmliZSgoYlZhbHVlKSA9PiB7XG5cdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1tb2RhbCcsIGJWYWx1ZSk7XG59KTtcblxuLy8ga2V5c1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlUmVhbCA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcbmV4cG9ydCBjb25zdCBrZXlTY29wZUZha2UgPSBrby5vYnNlcnZhYmxlKEtleVN0YXRlLkFsbCk7XG5cbmV4cG9ydCBjb25zdCBrZXlTY29wZSA9IGtvLmNvbXB1dGVkKHtcblx0cmVhZDogKCkgPT4ga2V5U2NvcGVGYWtlKCksXG5cdHdyaXRlOiAodmFsdWUpID0+IHtcblx0XHRpZiAoS2V5U3RhdGUuTWVudSAhPT0gdmFsdWUpIHtcblx0XHRcdGlmIChLZXlTdGF0ZS5Db21wb3NlID09PSB2YWx1ZSkge1xuXHRcdFx0XHQvLyBkaXNhYmxlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoKSA9PiB1c2VLZXlib2FyZFNob3J0Y3V0cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVzdG9yZUtleUZpbHRlclxuXHRcdFx0XHRrZXkuZmlsdGVyID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHVzZUtleWJvYXJkU2hvcnRjdXRzKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGVsID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQsXG5cdFx0XHRcdFx0XHRcdHRhZ05hbWUgPSBlbCA/IGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA6ICcnO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gIShcblx0XHRcdFx0XHRcdFx0J0lOUFVUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnU0VMRUNUJyA9PT0gdGFnTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHQnVEVYVEFSRUEnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdChlbCAmJiAnRElWJyA9PT0gdGFnTmFtZSAmJiAoJ2VkaXRvckh0bWxBcmVhJyA9PT0gZWwuY2xhc3NOYW1lIHx8ICd0cnVlJyA9PT0gJycgKyBlbC5jb250ZW50RWRpdGFibGUpKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGtleVNjb3BlRmFrZSh2YWx1ZSk7XG5cdFx0XHRpZiAoZHJvcGRvd25WaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0dmFsdWUgPSBLZXlTdGF0ZS5NZW51O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGtleVNjb3BlUmVhbCh2YWx1ZSk7XG5cdH1cbn0pO1xuXG5rZXlTY29wZVJlYWwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHQvL1x0d2luZG93LmNvbnNvbGUubG9nKCdrZXlTY29wZT0nICsgc1ZhbHVlKTsgLy8gREVCVUdcblx0a2V5LnNldFNjb3BlKHZhbHVlKTtcbn0pO1xuXG5kcm9wZG93blZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUpIHtcblx0XHRrZXlTY29wZShLZXlTdGF0ZS5NZW51KTtcblx0fSBlbHNlIGlmIChLZXlTdGF0ZS5NZW51ID09PSBrZXkuZ2V0U2NvcGUoKSkge1xuXHRcdGtleVNjb3BlKGtleVNjb3BlRmFrZSgpKTtcblx0fVxufSk7XG5cbi8qKlxuICogQHR5cGUgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBkYXRhID0ge1xuXHRfX0FQUF9fOiBudWxsLFxuXHRpQWpheEVycm9yQ291bnQ6IDAsXG5cdGlUb2tlbkVycm9yQ291bnQ6IDAsXG5cdGFCb290c3RyYXBEcm9wZG93bnM6IFtdLFxuXHRpTWVzc2FnZUJvZHlDYWNoZUNvdW50OiAwLFxuXHRiVW5sb2FkOiBmYWxzZVxufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGhhc2hlciBmcm9tICdoYXNoZXInO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBydW5Ib29rIH0gZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuaW1wb3J0IHsgJGh0bWwsIFZJRVdfTU9ERUxTLCBwb3B1cFZpc2liaWxpdHlOYW1lcyB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0IHsgaXNBcnJheSwgaXNVbmQsIHBTdHJpbmcsIGxvZywgaXNGdW5jLCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkZWxlZ2F0ZVJ1biwgaXNOb25FbXB0eUFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IGN1cnJlbnRTY3JlZW4gPSBudWxsLFxuXHRkZWZhdWx0U2NyZWVuTmFtZSA9ICcnO1xuXG5jb25zdCBTQ1JFRU5TID0ge307XG5cbmV4cG9ydCBjb25zdCBWaWV3VHlwZSA9IHtcblx0UG9wdXA6ICdQb3B1cHMnLFxuXHRMZWZ0OiAnTGVmdCcsXG5cdFJpZ2h0OiAnUmlnaHQnLFxuXHRDZW50ZXI6ICdDZW50ZXInXG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmcoKSB7XG5cdCQoJyNybC1jb250ZW50JykuYWRkQ2xhc3MoJ3JsLWNvbnRlbnQtc2hvdycpO1xuXHQkKCcjcmwtbG9hZGluZycpXG5cdFx0LmhpZGUoKVxuXHRcdC5yZW1vdmUoKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmRXhlY3V0ZVxuICogQHBhcmFtIHsoRnVuY3Rpb258Ym9vbGVhbnxudWxsKT19IGZDYW5FeGVjdXRlID0gdHJ1ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZChmRXhlY3V0ZSwgZkNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiBjcmVhdGVDb21tYW5kTGVnYWN5KG51bGwsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzRGVmYXVsdCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlLCBpc0RlZmF1bHQgPSBmYWxzZSkge1xuXHRTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLl9fcmxTZXR0aW5nc0RhdGEgPSB7XG5cdFx0TGFiZWw6IGxhYmVsTmFtZSxcblx0XHRUZW1wbGF0ZTogdGVtcGxhdGUsXG5cdFx0Um91dGU6IHJvdXRlLFxuXHRcdElzRGVmYXVsdDogISFpc0RlZmF1bHRcblx0fTtcblxuXHRWSUVXX01PREVMUy5zZXR0aW5ncy5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNhYmxlU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcykge1xuXHRWSUVXX01PREVMU1snc2V0dGluZ3MtZGlzYWJsZWQnXS5wdXNoKFNldHRpbmdzVmlld01vZGVsQ2xhc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPZmYoKSB7XG5cdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm91dGVPbigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMgez9PYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzY3JlZW4oc2NyZWVuTmFtZSkge1xuXHRyZXR1cm4gJycgIT09IHNjcmVlbk5hbWUgJiYgIWlzVW5kKFNDUkVFTlNbc2NyZWVuTmFtZV0pID8gU0NSRUVOU1tzY3JlZW5OYW1lXSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtGdW5jdGlvbnxudWxsfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NyZWVuUG9wdXAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdGxldCByZXN1bHQgPSBudWxsO1xuXHRpZiAoUG9wdVZpZXdNb2RlbENsYXNzKSB7XG5cdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzO1xuXHRcdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdCkge1xuXHRcdFx0cmVzdWx0ID0gUG9wdVZpZXdNb2RlbENsYXNzLmRlZmF1bHQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvSGlkZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb0hpZGUpO1xuXHRpZiAoTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eShmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9va05hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge21peGVkPX0gcGFyYW1zID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdm1SdW5Ib29rKGhvb2tOYW1lLCBWaWV3TW9kZWxDbGFzcywgcGFyYW1zID0gbnVsbCkge1xuXHRfLmVhY2goVmlld01vZGVsQ2xhc3MuX19uYW1lcywgKG5hbWUpID0+IHtcblx0XHRydW5Ib29rKGhvb2tOYW1lLCBbbmFtZSwgVmlld01vZGVsQ2xhc3MuX192bSwgcGFyYW1zXSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge09iamVjdD19IHZtU2NyZWVuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbikge1xuXHRpZiAoVmlld01vZGVsQ2xhc3MgJiYgIVZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCkge1xuXHRcdGxldCB2bURvbSA9IG51bGw7XG5cdFx0Y29uc3Qgdm0gPSBuZXcgVmlld01vZGVsQ2xhc3Modm1TY3JlZW4pLFxuXHRcdFx0cG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGUgfHwgJycsXG5cdFx0XHR2bVBsYWNlID0gcG9zaXRpb24gPyAkKCcjcmwtY29udGVudCAjcmwtJyArIHBvc2l0aW9uLnRvTG93ZXJDYXNlKCkpIDogbnVsbDtcblxuXHRcdFZpZXdNb2RlbENsYXNzLl9fYnVpbGRlZCA9IHRydWU7XG5cdFx0Vmlld01vZGVsQ2xhc3MuX192bSA9IHZtO1xuXG5cdFx0dm0ub25TaG93VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHZtLm9uSGlkZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHZtLnZpZXdNb2RlbE5hbWUgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWU7XG5cdFx0dm0udmlld01vZGVsTmFtZXMgPSBWaWV3TW9kZWxDbGFzcy5fX25hbWVzO1xuXHRcdHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgPSBWaWV3TW9kZWxDbGFzcy5fX3RlbXBsYXRlSUQ7XG5cdFx0dm0udmlld01vZGVsUG9zaXRpb24gPSBWaWV3TW9kZWxDbGFzcy5fX3R5cGU7XG5cblx0XHRpZiAodm1QbGFjZSAmJiAxID09PSB2bVBsYWNlLmxlbmd0aCkge1xuXHRcdFx0dm1Eb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdC5hZGRDbGFzcygncmwtdmlldy1tb2RlbCcpXG5cdFx0XHRcdC5hZGRDbGFzcygnUkwtJyArIHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQpXG5cdFx0XHRcdC5oaWRlKCk7XG5cdFx0XHR2bURvbS5hcHBlbmRUbyh2bVBsYWNlKTtcblxuXHRcdFx0dm0udmlld01vZGVsRG9tID0gdm1Eb207XG5cdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSA9IHZtRG9tO1xuXG5cdFx0XHRpZiAoVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLmNhbmNlbENvbW1hbmQgPSB2bS5jbG9zZUNvbW1hbmQgPSBjcmVhdGVDb21tYW5kKCgpID0+IHtcblx0XHRcdFx0XHRoaWRlU2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2bS5tb2RhbFZpc2liaWxpdHkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLnNob3coKTtcblx0XHRcdFx0XHRcdHZtLnN0b3JlQW5kU2V0S2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucHVzaCh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAzMDAwICsgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGggKyAxMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uU2hvd1RyaWdnZXIoIXZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDUwMCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bSwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0XHRpZiAodm0ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHR2bS5vbkhpZGVUcmlnZ2VyKCF2bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2bS5yZXN0b3JlS2V5U2NvcGUoKTtcblxuXHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLWhpZGUnLCBWaWV3TW9kZWxDbGFzcyk7XG5cblx0XHRcdFx0XHRcdHBvcHVwVmlzaWJpbGl0eU5hbWVzLnJlbW92ZSh2bS52aWV3TW9kZWxOYW1lKTtcblx0XHRcdFx0XHRcdHZtLnZpZXdNb2RlbERvbS5jc3MoJ3otaW5kZXgnLCAyMDAwKTtcblxuXHRcdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB2bS52aWV3TW9kZWxEb20uaGlkZSgpLCAzMDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wcmUtYnVpbGQnLCBWaWV3TW9kZWxDbGFzcywgdm1Eb20pO1xuXG5cdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdHZtRG9tWzBdLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dHJhbnNsYXRvckluaXQ6IHRydWUsXG5cdFx0XHRcdFx0dGVtcGxhdGU6ICgpID0+ICh7IG5hbWU6IHZtLnZpZXdNb2RlbFRlbXBsYXRlSUQgfSlcblx0XHRcdFx0fSxcblx0XHRcdFx0dm1cblx0XHRcdCk7XG5cblx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25CdWlsZCcsIFt2bURvbV0pO1xuXHRcdFx0aWYgKHZtICYmIFZpZXdUeXBlLlBvcHVwID09PSBwb3NpdGlvbikge1xuXHRcdFx0XHR2bS5yZWdpc3RlclBvcHVwS2V5RG93bigpO1xuXHRcdFx0fVxuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtcG9zdC1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZygnQ2Fubm90IGZpbmQgdmlldyBtb2RlbCBwb3NpdGlvbjogJyArIHBvc2l0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gVmlld01vZGVsQ2xhc3MgPyBWaWV3TW9kZWxDbGFzcy5fX3ZtIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaG93U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3csIHBhcmFtcyA9IFtdKSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uQmVmb3JlU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvblNob3cnLCBwYXJhbXMgfHwgW10pO1xuXG5cdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24tc2hvdycsIE1vZGFsVmlldywgcGFyYW1zIHx8IFtdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJtVXBTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdykge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdyk7XG5cdGlmIChNb2RhbFZpZXcpIHtcblx0XHRidWlsZFZpZXdNb2RlbChNb2RhbFZpZXcpO1xuXG5cdFx0aWYgKE1vZGFsVmlldy5fX3ZtICYmIE1vZGFsVmlldy5fX2RvbSkge1xuXHRcdFx0ZGVsZWdhdGVSdW4oTW9kYWxWaWV3Ll9fdm0sICdvbldhcm1VcCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUG9wdXBWaXNpYmxlKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0cmV0dXJuIE1vZGFsVmlldyAmJiBNb2RhbFZpZXcuX192bSA/IE1vZGFsVmlldy5fX3ZtLm1vZGFsVmlzaWJpbGl0eSgpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmVlbk5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXJ0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbk9uUm91dGUoc2NyZWVuTmFtZSwgc3ViUGFydCkge1xuXHRsZXQgdm1TY3JlZW4gPSBudWxsLFxuXHRcdGlzU2FtZVNjcmVlbiA9IGZhbHNlLFxuXHRcdGNyb3NzID0gbnVsbDtcblxuXHRpZiAoJycgPT09IHBTdHJpbmcoc2NyZWVuTmFtZSkpIHtcblx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdH1cblxuXHRpZiAoJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHR2bVNjcmVlbiA9IHNjcmVlbihzY3JlZW5OYW1lKTtcblx0XHRpZiAoIXZtU2NyZWVuKSB7XG5cdFx0XHR2bVNjcmVlbiA9IHNjcmVlbihkZWZhdWx0U2NyZWVuTmFtZSk7XG5cdFx0XHRpZiAodm1TY3JlZW4pIHtcblx0XHRcdFx0c3ViUGFydCA9IHNjcmVlbk5hbWUgKyAnLycgKyBzdWJQYXJ0O1xuXHRcdFx0XHRzY3JlZW5OYW1lID0gZGVmYXVsdFNjcmVlbk5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fc3RhcnRlZCkge1xuXHRcdFx0aXNTYW1lU2NyZWVuID0gY3VycmVudFNjcmVlbiAmJiB2bVNjcmVlbiA9PT0gY3VycmVudFNjcmVlbjtcblxuXHRcdFx0aWYgKCF2bVNjcmVlbi5fX2J1aWxkZWQpIHtcblx0XHRcdFx0dm1TY3JlZW4uX19idWlsZGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHZtU2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRfLmVhY2godm1TY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdGJ1aWxkVmlld01vZGVsKFZpZXdNb2RlbENsYXNzLCB2bVNjcmVlbik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uQnVpbGQnKTtcblx0XHRcdH1cblxuXHRcdFx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0XHRcdC8vIGhpZGUgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlJyk7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uSGlkZVdpdGhEZWxheScsIFtdLCA1MDApO1xuXG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSkpIHtcblx0XHRcdFx0XHRcdF8uZWFjaChjdXJyZW50U2NyZWVuLnZpZXdNb2RlbHMoKSwgKFZpZXdNb2RlbENsYXNzKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3VHlwZS5Qb3B1cCAhPT0gVmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxQb3NpdGlvblxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbS5oaWRlKCk7XG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS52aWV3TW9kZWxWaXNpYmlsaXR5KGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGN1cnJlbnRTY3JlZW4gPSB2bVNjcmVlbjtcblxuXHRcdFx0XHQvLyBzaG93IHNjcmVlblxuXHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbiAmJiAhaXNTYW1lU2NyZWVuKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4oY3VycmVudFNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcighY3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1vbi1zaG93JywgW2N1cnJlbnRTY3JlZW4uc2NyZWVuTmFtZSgpLCBjdXJyZW50U2NyZWVuXSk7XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkJlZm9yZVNob3cnKTtcblxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLnNob3coKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkodHJ1ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKCFWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXHRcdFx0XHRcdFx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgVmlld01vZGVsQ2xhc3MpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRjcm9zcyA9IHZtU2NyZWVuICYmIHZtU2NyZWVuLl9fY3Jvc3MgPyB2bVNjcmVlbi5fX2Nyb3NzKCkgOiBudWxsO1xuXHRcdFx0XHRpZiAoY3Jvc3MpIHtcblx0XHRcdFx0XHRjcm9zcy5wYXJzZShzdWJQYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc2NyZWVuc0NsYXNzZXNcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRTY3JlZW5zKHNjcmVlbnNDbGFzc2VzKSB7XG5cdF8uZWFjaChzY3JlZW5zQ2xhc3NlcywgKENTY3JlZW4pID0+IHtcblx0XHRpZiAoQ1NjcmVlbikge1xuXHRcdFx0Y29uc3Qgdm1TY3JlZW4gPSBuZXcgQ1NjcmVlbigpLFxuXHRcdFx0XHRzY3JlZW5OYW1lID0gdm1TY3JlZW4gPyB2bVNjcmVlbi5zY3JlZW5OYW1lKCkgOiAnJztcblxuXHRcdFx0aWYgKHZtU2NyZWVuICYmICcnICE9PSBzY3JlZW5OYW1lKSB7XG5cdFx0XHRcdGlmICgnJyA9PT0gZGVmYXVsdFNjcmVlbk5hbWUpIHtcblx0XHRcdFx0XHRkZWZhdWx0U2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRTQ1JFRU5TW3NjcmVlbk5hbWVdID0gdm1TY3JlZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRfLmVhY2goU0NSRUVOUywgKHZtU2NyZWVuKSA9PiB7XG5cdFx0aWYgKHZtU2NyZWVuICYmICF2bVNjcmVlbi5fX3N0YXJ0ZWQgJiYgdm1TY3JlZW4uX19zdGFydCkge1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydGVkID0gdHJ1ZTtcblx0XHRcdHZtU2NyZWVuLl9fc3RhcnQoKTtcblxuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXByZS1zdGFydCcsIFt2bVNjcmVlbi5zY3JlZW5OYW1lKCksIHZtU2NyZWVuXSk7XG5cdFx0XHRkZWxlZ2F0ZVJ1bih2bVNjcmVlbiwgJ29uU3RhcnQnKTtcblx0XHRcdHJ1bkhvb2soJ3NjcmVlbi1wb3N0LXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGNyb3NzID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblx0Y3Jvc3MuYWRkUm91dGUoL14oW2EtekEtWjAtOS1dKilcXC8/KC4qKSQvLCBzY3JlZW5PblJvdXRlKTtcblxuXHRoYXNoZXIuaW5pdGlhbGl6ZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5jaGFuZ2VkLmFkZChjcm9zcy5wYXJzZSwgY3Jvc3MpO1xuXHRoYXNoZXIuaW5pdCgpO1xuXG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLXN0YXJ0ZWQtdHJpZ2dlcicpLmFkZENsYXNzKCdybC1zdGFydGVkJyksIDEwMCk7XG5cdF8uZGVsYXkoKCkgPT4gJGh0bWwuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQtZGVsYXknKSwgMjAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc0hhc2hcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IHNpbGVuY2UgPSBmYWxzZVxuICogQHBhcmFtIHtib29sZWFuPX0gcmVwbGFjZSA9IGZhbHNlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEhhc2goaGFzaCwgc2lsZW5jZSA9IGZhbHNlLCByZXBsYWNlID0gZmFsc2UpIHtcblx0aGFzaCA9ICcjJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cdGhhc2ggPSAnLycgPT09IGhhc2guc3Vic3RyKDAsIDEpID8gaGFzaC5zdWJzdHIoMSkgOiBoYXNoO1xuXG5cdGNvbnN0IGNtZCA9IHJlcGxhY2UgPyAncmVwbGFjZUhhc2gnIDogJ3NldEhhc2gnO1xuXG5cdGlmIChzaWxlbmNlKSB7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHRcdGhhc2hlcltjbWRdKGhhc2gpO1xuXHRcdGhhc2hlci5zZXRIYXNoKGhhc2gpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiAodGFyZ2V0KSA9PiB7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0aWYgKGlzQXJyYXkobmFtZSkpIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IG5hbWU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0Ll9fbmFtZXMgPSBbbmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXQuX19uYW1lID0gdGFyZ2V0Ll9fbmFtZXNbMF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlKSB7XG5cdFx0XHRcdHRhcmdldC5fX3R5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVtcGxhdGVJRCkge1xuXHRcdFx0XHR0YXJnZXQuX190ZW1wbGF0ZUlEID0gdGVtcGxhdGVJRDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwb3B1cERlY29yYXRvcih7IG5hbWUsIHRlbXBsYXRlSUQgfSkge1xuXHRyZXR1cm4gdmlld0RlY29yYXRvcih7IG5hbWUsIHR5cGU6IFZpZXdUeXBlLlBvcHVwLCB0ZW1wbGF0ZUlEIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbkV4ZWN1dGVcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY29tbWFuZERlY29yYXRvcihjYW5FeGVjdXRlID0gdHJ1ZSkge1xuXHRyZXR1cm4gKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSA9PiB7XG5cdFx0aWYgKCFrZXkgfHwgIWtleS5tYXRjaCgvQ29tbWFuZCQvKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBuYW1lIFwiJHtrZXl9XCIgc2hvdWxkIGVuZCB3aXRoIENvbW1hbmQgc3VmZml4YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlIHx8IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIoKSxcblx0XHRcdG5vcm1DYW5FeGVjdXRlID0gaXNGdW5jKGNhbkV4ZWN1dGUpID8gY2FuRXhlY3V0ZSA6ICgpID0+ICEhY2FuRXhlY3V0ZTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG5cdFx0XHRpZiAobm9ybUNhbkV4ZWN1dGUuY2FsbCh0aGlzLCB0aGlzKSkge1xuXHRcdFx0XHR2YWx1ZS5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0XHRkZXNjcmlwdG9yLnZhbHVlLl9fcmVhbENhbkV4ZWN1dGUgPSBub3JtQ2FuRXhlY3V0ZTtcblx0XHRkZXNjcmlwdG9yLnZhbHVlLmlzQ29tbWFuZCA9IHRydWU7XG5cblx0XHRyZXR1cm4gZGVzY3JpcHRvcjtcblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21pY2VkfSAkaXRlbXNcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJGl0ZW1zKSB7XG5cdHJldHVybiBfLnRocm90dGxlKChldmVudCwgaGFuZGxlcikgPT4ge1xuXHRcdGNvbnN0IHVwID0gaGFuZGxlciAmJiAndXAnID09PSBoYW5kbGVyLnNob3J0Y3V0O1xuXG5cdFx0aWYgKGV2ZW50ICYmICRpdGVtcy5sZW5ndGgpIHtcblx0XHRcdGxldCBpbmRleCA9ICRpdGVtcy5pbmRleCgkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSk7XG5cdFx0XHRpZiAodXAgJiYgMCA8IGluZGV4KSB7XG5cdFx0XHRcdGluZGV4IC09IDE7XG5cdFx0XHR9IGVsc2UgaWYgKCF1cCAmJiBpbmRleCA8ICRpdGVtcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdGluZGV4ICs9IDE7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHJlc3VsdEhhc2ggPSAkaXRlbXMuZXEoaW5kZXgpLmF0dHIoJ2hyZWYnKTtcblx0XHRcdGlmIChyZXN1bHRIYXNoKSB7XG5cdFx0XHRcdHNldEhhc2gocmVzdWx0SGFzaCwgZmFsc2UsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSwgTWFnaWNzLlRpbWUyMDBtcyk7XG59XG5cbmV4cG9ydCB7XG5cdGNvbW1hbmREZWNvcmF0b3IsXG5cdGNvbW1hbmREZWNvcmF0b3IgYXMgY29tbWFuZCxcblx0dmlld0RlY29yYXRvcixcblx0dmlld0RlY29yYXRvciBhcyB2aWV3LFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXdNb2RlbCxcblx0cG9wdXBEZWNvcmF0b3IsXG5cdHBvcHVwRGVjb3JhdG9yIGFzIHBvcHVwLFxuXHRzZXR0aW5nc01lbnVLZXlzSGFuZGxlclxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmpRdWVyeTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiwgVXBsb2FkRXJyb3JDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzVW5kLCBpc051bGwsIGhhcywgbWljcm90aW1lLCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7ICRodG1sLCBiQW5pbWF0aW9uU3VwcG9ydGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIG1vbWVudG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL01vbWVudG9yJztcbmltcG9ydCB7IGxhbmdMaW5rIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxubGV0IEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEEgPSB7fTtcbmNvbnN0IEkxOE5fTk9USUZJQ0FUSU9OX01BUCA9IFtcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkVG9rZW4sICdOT1RJRklDQVRJT05TL0lOVkFMSURfVE9LRU4nXSxcblx0W05vdGlmaWNhdGlvbi5BdXRoRXJyb3IsICdOT1RJRklDQVRJT05TL0FVVEhfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5BY2Nlc3NFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDRVNTX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLCAnTk9USUZJQ0FUSU9OUy9DT05ORUNUSU9OX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FwdGNoYUVycm9yLCAnTk9USUZJQ0FUSU9OUy9DQVBUQ0hBX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9GQUNFQk9PS19MT0dJTl9BQ0NFU1NfRElTQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLlNvY2lhbFR3aXR0ZXJMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9UV0lUVEVSX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlLCAnTk9USUZJQ0FUSU9OUy9TT0NJQUxfR09PR0xFX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvRE9NQUlOX05PVF9BTExPV0VEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudE5vdEFsbG93ZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfTk9UX0FMTE9XRUQnXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRUd29GYWN0b3JBdXRoUmVxdWlyZWQsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfVFdPX0ZBQ1RPUl9BVVRIX1JFUVVJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNvdWxkTm90U2F2ZU5ld1Bhc3N3b3JkLCAnTk9USUZJQ0FUSU9OUy9DT1VMRF9OT1RfU0FWRV9ORVdfUEFTU1dPUkQnXSxcblx0W05vdGlmaWNhdGlvbi5DdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QsICdOT1RJRklDQVRJT05TL0NVUlJFTlRfUEFTU1dPUkRfSU5DT1JSRUNUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRTaG9ydCwgJ05PVElGSUNBVElPTlMvTkVXX1BBU1NXT1JEX1NIT1JUJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRXZWFrLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfV0VBSyddLFxuXHRbTm90aWZpY2F0aW9uLk5ld1Bhc3N3b3JkRm9yYmlkZGVuLCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfRk9SQklEREVOVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ29udGFjdHNTeW5jRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTlRBQ1RTX1NZTkNfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRNZXNzYWdlTGlzdCwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRV9MSVNUJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfR0VUX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRNb3ZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50Q29weU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfTU9WRV9NRVNTQUdFJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZU1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0FWRV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNlbmRNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NFTkRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRSZWNpcGllbnRzLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1JFQ0lQSUVOVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlRmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX0ZJTFRFUlMnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0RmlsdGVycywgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkZpbHRlcnNBcmVOb3RDb3JyZWN0LCAnTk9USUZJQ0FUSU9OUy9GSUxURVJTX0FSRV9OT1RfQ09SUkVDVCddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudENyZWF0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9DUkVBVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFJlbmFtZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9SRU5BTUVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZU5vbkVtcHR5Rm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9OT05fRU1QVFlfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFN1YnNjcmliZUZvbGRlciwgJ05PVElGSUNBVElPTlMvQ0FOVF9TVUJTQ1JJQkVfRk9MREVSJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFVuc3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1VOU1VCU0NSSUJFX0ZPTERFUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVTZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1NFVFRJTkdTJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncywgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX1BMVUdJTl9TRVRUSU5HUyddLFxuXG5cdFtOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfSU5TVEFMTF9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9QTFVHSU5fUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSwgJ05PVElGSUNBVElPTlMvVU5TVVBQT1JURURfUExVR0lOX1BBQ0tBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19TRVJWRVJfSVNfVU5BVkFJTEFCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfRVhQSVJFRCddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0Jhbm5lZCwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX0JBTk5FRCddLFxuXG5cdFtOb3RpZmljYXRpb24uRGVtb1NlbmRNZXNzYWdlRXJyb3IsICdOT1RJRklDQVRJT05TL0RFTU9fU0VORF9NRVNTQUdFX0VSUk9SJ10sXG5cdFtOb3RpZmljYXRpb24uRGVtb0FjY291bnRFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19BQ0NPVU5UX0VSUk9SJ10sXG5cblx0W05vdGlmaWNhdGlvbi5BY2NvdW50QWxyZWFkeUV4aXN0cywgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9BTFJFQURZX0VYSVNUUyddLFxuXHRbTm90aWZpY2F0aW9uLkFjY291bnREb2VzTm90RXhpc3QsICdOT1RJRklDQVRJT05TL0FDQ09VTlRfRE9FU19OT1RfRVhJU1QnXSxcblxuXHRbTm90aWZpY2F0aW9uLk1haWxTZXJ2ZXJFcnJvciwgJ05PVElGSUNBVElPTlMvTUFJTF9TRVJWRVJfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5JbnZhbGlkSW5wdXRBcmd1bWVudCwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9JTlBVVF9BUkdVTUVOVCddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24sICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IsICdOT1RJRklDQVRJT05TL1VOS05PV05fRVJST1InXVxuXTtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge09iamVjdD19IHZhbHVlTGlzdFxuICogQHBhcmFtIHtzdHJpbmc9fSBkZWZhdWxWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG4oa2V5LCB2YWx1ZUxpc3QsIGRlZmF1bFZhbHVlKSB7XG5cdGxldCB2YWx1ZU5hbWUgPSAnJyxcblx0XHRyZXN1bHQgPSBJMThOX0RBVEFba2V5XTtcblxuXHRpZiAoaXNVbmQocmVzdWx0KSkge1xuXHRcdHJlc3VsdCA9IGlzVW5kKGRlZmF1bFZhbHVlKSA/IGtleSA6IGRlZmF1bFZhbHVlO1xuXHR9XG5cblx0aWYgKCFpc1VuZCh2YWx1ZUxpc3QpICYmICFpc051bGwodmFsdWVMaXN0KSkge1xuXHRcdGZvciAodmFsdWVOYW1lIGluIHZhbHVlTGlzdCkge1xuXHRcdFx0aWYgKGhhcyh2YWx1ZUxpc3QsIHZhbHVlTmFtZSkpIHtcblx0XHRcdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoJyUnICsgdmFsdWVOYW1lICsgJyUnLCB2YWx1ZUxpc3RbdmFsdWVOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaTE4blRvTm9kZSA9IChlbGVtZW50KSA9PiB7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCksXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ2kxOG4nKTtcblxuXHRpZiAoa2V5KSB7XG5cdFx0aWYgKCdbJyA9PT0ga2V5LnN1YnN0cigwLCAxKSkge1xuXHRcdFx0c3dpdGNoIChrZXkuc3Vic3RyKDAsIDYpKSB7XG5cdFx0XHRcdGNhc2UgJ1todG1sXSc6XG5cdFx0XHRcdFx0JGVsLmh0bWwoaTE4bihrZXkuc3Vic3RyKDYpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1twbGFjZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3BsYWNlaG9sZGVyJywgaTE4bihrZXkuc3Vic3RyKDEzKSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdbdGl0bGUnOlxuXHRcdFx0XHRcdCRlbC5hdHRyKCd0aXRsZScsIGkxOG4oa2V5LnN1YnN0cig3KSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC50ZXh0KGkxOG4oa2V5KSk7XG5cdFx0fVxuXHR9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50c1xuICogQHBhcmFtIHtib29sZWFuPX0gYW5pbWF0ZSA9IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpMThuVG9Ob2RlcyhlbGVtZW50cywgYW5pbWF0ZSA9IGZhbHNlKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJ1tkYXRhLWkxOG5dJywgZWxlbWVudHMpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRpMThuVG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFuaW1hdGUgJiYgYkFuaW1hdGlvblN1cHBvcnRlZCkge1xuXHRcdFx0JCgnLmkxOG4tYW5pbWF0aW9uW2RhdGEtaTE4bl0nLCBlbGVtZW50cykubGV0dGVyZngoe1xuXHRcdFx0XHQnZngnOiAnZmFsbCBmYWRlJyxcblx0XHRcdFx0J2JhY2t3YXJkcyc6IGZhbHNlLFxuXHRcdFx0XHQndGltaW5nJzogNTAsXG5cdFx0XHRcdCdmeF9kdXJhdGlvbic6ICc1MG1zJyxcblx0XHRcdFx0J2xldHRlcl9lbmQnOiAncmVzdG9yZScsXG5cdFx0XHRcdCdlbGVtZW50X2VuZCc6ICdyZXN0b3JlJ1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuY29uc3QgcmVsb2FkRGF0YSA9ICgpID0+IHtcblx0aWYgKHdpbmRvdy5yYWlubG9vcEkxOE4pIHtcblx0XHRJMThOX0RBVEEgPSB3aW5kb3cucmFpbmxvb3BJMThOIHx8IHt9O1xuXG5cdFx0aTE4blRvTm9kZXMod2luZG93LmRvY3VtZW50LCB0cnVlKTtcblxuXHRcdG1vbWVudG9yUmVsb2FkKCk7XG5cdFx0dHJpZ2dlcighdHJpZ2dlcigpKTtcblx0fVxuXG5cdHdpbmRvdy5yYWlubG9vcEkxOE4gPSBudWxsO1xufTtcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXROb3RpZmljYXRpb25MYW5ndWFnZSgpIHtcblx0STE4Tl9OT1RJRklDQVRJT05fTUFQLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRJMThOX05PVElGSUNBVElPTl9EQVRBW2l0ZW1bMF1dID0gaTE4bihpdGVtWzFdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RhcnRDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGxhbmdDYWxsYmFjayA9IG51bGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlKHN0YXJ0Q2FsbGJhY2ssIGxhbmdDYWxsYmFjayA9IG51bGwpIHtcblx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRzdGFydENhbGxiYWNrKCk7XG5cdH1cblxuXHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0aWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHRcdFx0c3RhcnRDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxhbmdDYWxsYmFjaykge1xuXHRcdFx0XHRsYW5nQ2FsbGJhY2soKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChzdGFydENhbGxiYWNrKSB7XG5cdFx0dHJpZ2dlci5zdWJzY3JpYmUoc3RhcnRDYWxsYmFjayk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHsqPX0gbWVzc2FnZSA9ICcnXG4gKiBAcGFyYW0geyo9fSBkZWZDb2RlID0gbnVsbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvbihjb2RlLCBtZXNzYWdlID0gJycsIGRlZkNvZGUgPSBudWxsKSB7XG5cdGNvZGUgPSB3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDA7XG5cdGlmIChOb3RpZmljYXRpb24uQ2xpZW50Vmlld0Vycm9yID09PSBjb2RlICYmIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gbWVzc2FnZTtcblx0fVxuXG5cdGRlZkNvZGUgPSBkZWZDb2RlID8gd2luZG93LnBhcnNlSW50KGRlZkNvZGUsIDEwKSB8fCAwIDogMDtcblx0cmV0dXJuIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV0pXG5cdFx0PyBkZWZDb2RlICYmIGlzVW5kKEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV0pXG5cdFx0XHQ/IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbZGVmQ29kZV1cblx0XHRcdDogJydcblx0XHQ6IEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbY29kZV07XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVmQ29kZSA9IE5vdGlmaWNhdGlvbi5Vbmtub3duTm90aWZpY2F0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb24pIHtcblx0cmV0dXJuIHJlc3BvbnNlICYmIHJlc3BvbnNlLkVycm9yQ29kZVxuXHRcdD8gZ2V0Tm90aWZpY2F0aW9uKHBJbnQocmVzcG9uc2UuRXJyb3JDb2RlKSwgcmVzcG9uc2UuRXJyb3JNZXNzYWdlIHx8ICcnKVxuXHRcdDogZ2V0Tm90aWZpY2F0aW9uKGRlZkNvZGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gY29kZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwbG9hZEVycm9yRGVzY0J5Q29kZShjb2RlKSB7XG5cdGxldCByZXN1bHQgPSAnJztcblx0c3dpdGNoICh3aW5kb3cucGFyc2VJbnQoY29kZSwgMTApIHx8IDApIHtcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlSXNUb29CaWc6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9JU19UT09fQklHJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlUGFydGlhbGx5VXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9QQVJUSUFMTFlfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVOb1VwbG9hZGVkOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX05PX0ZJTEVfVVBMT0FERUQnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLk1pc3NpbmdUZW1wRm9sZGVyOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX01JU1NJTkdfVEVNUF9GT0xERVInKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVPblNhdmVpbmdFcnJvcjpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9PTl9TQVZJTkdfRklMRScpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZVR5cGU6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfRklMRV9UWVBFJyk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX1VOS05PV04nKTtcblx0XHRcdGJyZWFrO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZChhZG1pbiwgbGFuZ3VhZ2UpIHtcblx0Y29uc3Qgc3RhcnQgPSBtaWNyb3RpbWUoKTtcblxuXHQkaHRtbC5hZGRDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblxuXHRyZXR1cm4gbmV3IHdpbmRvdy5Qcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHQkLmFqYXgoe1xuXHRcdFx0dXJsOiBsYW5nTGluayhsYW5ndWFnZSwgYWRtaW4pLFxuXHRcdFx0ZGF0YVR5cGU6ICdzY3JpcHQnLFxuXHRcdFx0Y2FjaGU6IHRydWVcblx0XHR9KS50aGVuKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRfLmRlbGF5KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlbG9hZERhdGEoKTtcblxuXHRcdFx0XHRcdFx0Y29uc3QgaXNSdGwgPSAtMSA8IGluQXJyYXkoKGxhbmd1YWdlIHx8ICcnKS50b0xvd2VyQ2FzZSgpLCBbJ2FyJywgJ2FyX3NhJywgJ2hlJywgJ2hlX2hlJywgJ3VyJywgJ3VyX2lyJ10pO1xuXG5cdFx0XHRcdFx0XHQkaHRtbFxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLWNoYW5naW5nLWxhbmd1YWdlJylcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCdybC1ydGwgcmwtbHRyJylcblx0XHRcdFx0XHRcdFx0Ly8gLmF0dHIoJ2RpcicsIGlzUnRsID8gJ3J0bCcgOiAnbHRyJylcblx0XHRcdFx0XHRcdFx0LmFkZENsYXNzKGlzUnRsID8gJ3JsLXJ0bCcgOiAncmwtbHRyJyk7XG5cblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdDUwMCA8IG1pY3JvdGltZSgpIC0gc3RhcnQgPyAxIDogNTAwXG5cdFx0XHRcdCk7XG5cdFx0XHR9LFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKTtcblx0XHRcdFx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG5cdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH0pO1xufVxuXG4vLyBpbml0IHNlY3Rpb25cbiRodG1sLmFkZENsYXNzKCdybC0nICsgKCRodG1sLmF0dHIoJ2RpcicpIHx8ICdsdHInKSk7XG4iLCJpbXBvcnQgX09iamVjdCRjcmVhdGUgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2NyZWF0ZVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbmRcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgcFN0cmluZywgcEludCwgaXNVbmQsIGlzTm9ybWFsLCB0cmltLCBlbmNvZGVVUklDb21wb25lbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFJPT1QgPSAnLi8nLFxuXHRIQVNIX1BSRUZJWCA9ICcjLycsXG5cdFNFUlZFUl9QUkVGSVggPSAnLi8/Jyxcblx0U1VCX1FVRVJZX1BSRUZJWCA9ICcmcVtdPScsXG5cdFZFUlNJT04gPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndmVyc2lvbicpLFxuXHRXRUJfUFJFRklYID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3dlYlBhdGgnKSB8fCAnJyxcblx0VkVSU0lPTl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViVmVyc2lvblBhdGgnKSB8fCAncmFpbmxvb3Avdi8nICsgVkVSU0lPTiArICcvJyxcblx0U1RBVElDX1BSRUZJWCA9IFZFUlNJT05fUFJFRklYICsgJ3N0YXRpYy8nLFxuXHRBRE1JTl9IT1NUX1VTRSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluSG9zdFVzZScpLFxuXHRBRE1JTl9QQVRIID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FkbWluUGF0aCcpIHx8ICdhZG1pbic7XG5cbmxldCBBVVRIX1BSRUZJWCA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoQWNjb3VudEhhc2gnKSB8fCAnMCc7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3B1bGF0ZUF1dGhTdWZmaXgoKSB7XG5cdEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViUXVlcnlQcmVmaXgoKSB7XG5cdHJldHVybiBTVUJfUVVFUllfUFJFRklYO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc3RhcnR1cFVybFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3Qoc3RhcnR1cFVybCA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArIHBTdHJpbmcoc3RhcnR1cFVybCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RBZG1pbigpIHtcblx0cmV0dXJuIEFETUlOX0hPU1RfVVNFID8gUk9PVCA6IFNFUlZFUl9QUkVGSVggKyBBRE1JTl9QQVRIO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VXNlcigpIHtcblx0cmV0dXJuIFJPT1Q7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFJhdyh0eXBlLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRjdXN0b21TcGVjU3VmZml4ID0gaXNVbmQoY3VzdG9tU3BlY1N1ZmZpeCkgPyBBVVRIX1BSRUZJWCA6IGN1c3RvbVNwZWNTdWZmaXg7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRjdXN0b21TcGVjU3VmZml4ICtcblx0XHQnLycgK1xuXHRcdHR5cGUgK1xuXHRcdCcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRkb3dubG9hZFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudERvd25sb2FkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdEb3dubG9hZCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3KGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFRodW1ibmFpbFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdUaHVtYm5haWwnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UHJldmlld0FzUGxhaW4oZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXdBc1BsYWluJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudEZyYW1lZChkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnRnJhbWVkVmlldycsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcnZlclJlcXVlc3QodHlwZSkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvJyArIHR5cGUgKyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZCcpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWRDb250YWN0cygpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZENvbnRhY3RzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEJhY2tncm91bmQoKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdVcGxvYWRCYWNrZ3JvdW5kJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ0FwcGVuZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYW5nZShlbWFpbCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQ2hhbmdlJykgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhamF4KGFkZCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQWpheCcpICsgYWRkO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VWaWV3TGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggK1xuXHRcdCcvUmF3LycgK1xuXHRcdFNVQl9RVUVSWV9QUkVGSVggK1xuXHRcdCcvJyArXG5cdFx0QVVUSF9QUkVGSVggK1xuXHRcdCcvVmlld0FzUGxhaW4vJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRyZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0SGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VEb3dubG9hZExpbmsocmVxdWVzdEhhc2gpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJy9SYXcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvRG93bmxvYWQvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyByZXF1ZXN0SGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF2YXRhckxpbmsoZW1haWwpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8wL0F2YXRhci8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKSArICcvJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaGFzaFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHB1YmxpY0xpbmsoaGFzaCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvUHVibGljLycgKyBoYXNoICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlckJhY2tncm91bmQoaGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Vc2VyQmFja2dyb3VuZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIGhhc2hcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGhwSW5mbygpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0luZm8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWRtaW5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYW5nTGluayhsYW5nLCBpc0FkbWluKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9MYW5nLzAvJyArIChpc0FkbWluID8gJ0FkbWluJyA6ICdBcHAnKSArICcvJyArIHdpbmRvdy5lbmNvZGVVUkkobGFuZykgKyAnLycgKyBWRVJTSU9OICsgJy8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c1ZjZigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c1ZjZi8nO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDb250YWN0c0NzdigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Db250YWN0c0Nzdi8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0geGF1dGggPSBmYWxzZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEdvb2dsZSh4YXV0aCA9IGZhbHNlKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0J1NvY2lhbEdvb2dsZScgK1xuXHRcdCgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJykgK1xuXHRcdCh4YXV0aCA/ICcmeGF1dGg9MScgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsVHdpdHRlcigpIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnU29jaWFsVHdpdHRlcicgKyAoJycgIT09IEFVVEhfUFJFRklYID8gJy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy8nIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxGYWNlYm9vaygpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICsgJ1NvY2lhbEZhY2Vib29rJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJylcblx0KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXRpY1ByZWZpeChwYXRoKSB7XG5cdHJldHVybiBTVEFUSUNfUFJFRklYICsgcGF0aDtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlDb250YWN0UGljKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2VtcHR5LWNvbnRhY3QucG5nJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc291bmQoZmlsZU5hbWUpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnc291bmRzLycgKyBmaWxlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhdGlvbk1haWxJY29uKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdjc3MvaW1hZ2VzL2ljb20tbWVzc2FnZS1ub3RpZmljYXRpb24ucG5nJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3AubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJKcygpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluL29wZW5wZ3Aud29ya2VyLm1pbi5qcycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuUGdwV29ya2VyUGF0aCgpIHtcblx0cmV0dXJuIHN0YXRpY1ByZWZpeCgnanMvbWluLycpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGVtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRoZW1lUHJldmlld0xpbmsodGhlbWUpIHtcblx0bGV0IHByZWZpeCA9IFZFUlNJT05fUFJFRklYO1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdFx0cHJlZml4ID0gV0VCX1BSRUZJWDtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyAndGhlbWVzLycgKyB3aW5kb3cuZW5jb2RlVVJJKHRoZW1lKSArICcvaW1hZ2VzL3ByZXZpZXcucG5nJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluYm94KGluYm94Rm9sZGVyTmFtZSA9ICdJTkJPWCcpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ21haWxib3gvJyArIGluYm94Rm9sZGVyTmFtZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZz19IHNjcmVlbk5hbWUgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzKHNjcmVlbk5hbWUgPSAnJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnc2V0dGluZ3MnICsgKHNjcmVlbk5hbWUgPyAnLycgKyBzY3JlZW5OYW1lIDogJycpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhYm91dCgpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgJ2Fib3V0Jztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkbWluKHNjcmVlbk5hbWUpIHtcblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYO1xuXHRzd2l0Y2ggKHNjcmVlbk5hbWUpIHtcblx0XHRjYXNlICdBZG1pbkRvbWFpbnMnOlxuXHRcdFx0cmVzdWx0ICs9ICdkb21haW5zJztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluU2VjdXJpdHknOlxuXHRcdFx0cmVzdWx0ICs9ICdzZWN1cml0eSc7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdBZG1pbkxpY2Vuc2luZyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2xpY2Vuc2luZyc7XG5cdFx0XHRicmVhaztcblx0XHQvLyBubyBkZWZhdWx0XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb2xkZXJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gcGFnZSA9IDFcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2VhcmNoID0gJydcbiAqIEBwYXJhbSB7c3RyaW5nPX0gdGhyZWFkVWlkID0gJydcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWlsQm94KGZvbGRlciwgcGFnZSA9IDEsIHNlYXJjaCA9ICcnLCB0aHJlYWRVaWQgPSAnJykge1xuXHRwYWdlID0gaXNOb3JtYWwocGFnZSkgPyBwSW50KHBhZ2UpIDogMTtcblx0c2VhcmNoID0gcFN0cmluZyhzZWFyY2gpO1xuXG5cdGxldCByZXN1bHQgPSBIQVNIX1BSRUZJWCArICdtYWlsYm94Lyc7XG5cblx0aWYgKCcnICE9PSBmb2xkZXIpIHtcblx0XHRjb25zdCByZXN1bHRUaHJlYWRVaWQgPSBwSW50KHRocmVhZFVpZCk7XG5cdFx0cmVzdWx0ICs9IHdpbmRvdy5lbmNvZGVVUkkoZm9sZGVyKSArICgwIDwgcmVzdWx0VGhyZWFkVWlkID8gJ34nICsgcmVzdWx0VGhyZWFkVWlkIDogJycpO1xuXHR9XG5cblx0aWYgKDEgPCBwYWdlKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnL3AnICsgcGFnZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2VhcmNoKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1svXSskLywgJycpO1xuXHRcdHJlc3VsdCArPSAnLycgKyB3aW5kb3cuZW5jb2RlVVJJKHNlYXJjaCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwiaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvbWFwXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJpbXBvcnQgX09iamVjdCRkZWZpbmVQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5pbXBvcnQgX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9zbGljZVwiO1xuaW1wb3J0IF9yZXZlcnNlSW5zdGFuY2VQcm9wZXJ0eSBmcm9tIFwiLi4vLi4vY29yZS1qcy9pbnN0YW5jZS9yZXZlcnNlXCI7XG5pbXBvcnQgX3JlZHVjZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIi4uLy4uL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCI7XG5pbXBvcnQgX09iamVjdCRrZXlzIGZyb20gXCIuLi8uLi9jb3JlLWpzL29iamVjdC9rZXlzXCI7XG5pbXBvcnQgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCIuLi8uLi9jb3JlLWpzL2luc3RhbmNlL2Zvci1lYWNoXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHksIGRlY29yYXRvcnMsIGRlc2NyaXB0b3IsIGNvbnRleHQpIHtcbiAgdmFyIF9jb250ZXh0LCBfY29udGV4dDIsIF9jb250ZXh0MztcblxuICB2YXIgZGVzYyA9IHt9O1xuXG4gIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qka2V5cyhkZXNjcmlwdG9yKSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG5cbiAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7XG4gIGRlc2MuY29uZmlndXJhYmxlID0gISFkZXNjLmNvbmZpZ3VyYWJsZTtcblxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHtcbiAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlc2MgPSBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShkZWNvcmF0b3JzKS5jYWxsKGRlY29yYXRvcnMpKS5jYWxsKF9jb250ZXh0MykpLmNhbGwoX2NvbnRleHQyLCBmdW5jdGlvbiAoZGVzYywgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjO1xuICB9LCBkZXNjKTtcblxuICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDApIHtcbiAgICBkZXNjLnZhbHVlID0gZGVzYy5pbml0aWFsaXplciA/IGRlc2MuaW5pdGlhbGl6ZXIuY2FsbChjb250ZXh0KSA6IHZvaWQgMDtcbiAgICBkZXNjLmluaXRpYWxpemVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG5cbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkZXNjO1xufSIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LmtleTsiLCJpbXBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUgfSBmcm9tICdSZW1vdGUvQWJzdHJhY3RBamF4JztcblxuY2xhc3MgUmVtb3RlQWRtaW5BamF4IGV4dGVuZHMgQWJzdHJhY3RBamF4UmVtb3RlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMub1JlcXVlc3RzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0xvZ2luXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUGFzc3dvcmRcblx0ICovXG5cdGFkbWluTG9naW4oZkNhbGxiYWNrLCBzTG9naW4sIHNQYXNzd29yZCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dpbicsIHtcblx0XHRcdCdMb2dpbic6IHNMb2dpbixcblx0XHRcdCdQYXNzd29yZCc6IHNQYXNzd29yZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluTG9nb3V0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Mb2dvdXQnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVBZG1pbkNvbmZpZyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblNldHRpbmdzVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IHZhbHVlRm5cblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZuXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWdIZWxwZXIoa2V5LCB2YWx1ZUZuLCBmbikge1xuXHRcdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSB7fTtcblx0XHRcdGRhdGFba2V5XSA9IHZhbHVlRm4gPyB2YWx1ZUZuKHZhbHVlKSA6IHZhbHVlO1xuXHRcdFx0dGhpcy5zYXZlQWRtaW5Db25maWcoZm4gfHwgbnVsbCwgZGF0YSk7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGJJbmNsdWRlQWxpYXNlcyA9IHRydWVcblx0ICovXG5cdGRvbWFpbkxpc3QoZkNhbGxiYWNrLCBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxpc3QnLCB7XG5cdFx0XHQnSW5jbHVkZUFsaWFzZXMnOiBiSW5jbHVkZUFsaWFzZXMgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRwbHVnaW5MaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5MaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGFja2FnZXNMaXN0KGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QYWNrYWdlc0xpc3QnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRjb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluQ29yZURhdGEnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHR1cGRhdGVDb3JlRGF0YShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluVXBkYXRlQ29yZURhdGEnLCB7fSwgOTAwMDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlSW5zdGFsbChmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdCdBZG1pblBhY2thZ2VJbnN0YWxsJyxcblx0XHRcdHtcblx0XHRcdFx0J0lkJzogb1BhY2thZ2UuaWQsXG5cdFx0XHRcdCdUeXBlJzogb1BhY2thZ2UudHlwZSxcblx0XHRcdFx0J0ZpbGUnOiBvUGFja2FnZS5maWxlXG5cdFx0XHR9LFxuXHRcdFx0NjAwMDBcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtPYmplY3R9IG9QYWNrYWdlXG5cdCAqL1xuXHRwYWNrYWdlRGVsZXRlKGZDYWxsYmFjaywgb1BhY2thZ2UpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZURlbGV0ZScsIHtcblx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdHBsdWdpbihmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkxvYWQnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICovXG5cdGRvbWFpbkRlbGV0ZShmQ2FsbGJhY2ssIHNOYW1lKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRlbGV0ZScsIHtcblx0XHRcdCdOYW1lJzogc05hbWVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0ZG9tYWluRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvQ29uZmlnXG5cdCAqL1xuXHRwbHVnaW5TZXR0aW5nc1VwZGF0ZShmQ2FsbGJhY2ssIG9Db25maWcpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpblNldHRpbmdzVXBkYXRlJywgb0NvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJGb3JjZVxuXHQgKi9cblx0bGljZW5zaW5nKGZDYWxsYmFjaywgYkZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmcnLCB7XG5cdFx0XHRGb3JjZTogYkZvcmNlID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0RvbWFpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0tleVxuXHQgKi9cblx0bGljZW5zaW5nQWN0aXZhdGUoZkNhbGxiYWNrLCBzRG9tYWluLCBzS2V5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5MaWNlbnNpbmdBY3RpdmF0ZScsIHtcblx0XHRcdERvbWFpbjogc0RvbWFpbixcblx0XHRcdEtleTogc0tleVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRpc2FibGVkXG5cdCAqL1xuXHRwbHVnaW5EaXNhYmxlKGZDYWxsYmFjaywgc05hbWUsIGJEaXNhYmxlZCkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luRGlzYWJsZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0RGlzYWJsZWQ6IGJEaXNhYmxlZCA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluQWxpYXMoZkNhbGxiYWNrLCBzTmFtZSwgc0FsaWFzKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpbkFsaWFzU2F2ZScsIHtcblx0XHRcdE5hbWU6IHNOYW1lLFxuXHRcdFx0QWxpYXM6IHNBbGlhc1xuXHRcdH0pO1xuXHR9XG5cblx0Y3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0ZkNhbGxiYWNrLFxuXHRcdGJDcmVhdGUsXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiSW5jU2hvcnRMb2dpbixcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlQWxsb3dSYXcsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRTaG9ydExvZ2luLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsLFxuXHRcdHNXaGl0ZUxpc3Rcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblNhdmUnLCB7XG5cdFx0XHQnQ3JlYXRlJzogYkNyZWF0ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdOYW1lJzogc05hbWUsXG5cblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnSW5jU2hvcnRMb2dpbic6IGJJbmNTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVBbGxvd1Jhdyc6IHNTaWV2ZUFsbG93UmF3ID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlSG9zdCc6IHNTaWV2ZUhvc3QsXG5cdFx0XHQnU2lldmVQb3J0JzogaVNpZXZlUG9ydCxcblx0XHRcdCdTaWV2ZVNlY3VyZSc6IHNTaWV2ZVNlY3VyZSxcblxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRTaG9ydExvZ2luJzogYk91dFNob3J0TG9naW4gPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0QXV0aCc6IGJPdXRBdXRoID8gJzEnIDogJzAnLFxuXHRcdFx0J091dFVzZVBocE1haWwnOiBiT3V0UGhwTWFpbCA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1doaXRlTGlzdCc6IHNXaGl0ZUxpc3Rcblx0XHR9KTtcblx0fVxuXG5cdHRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRzTmFtZSxcblx0XHRzSW5jSG9zdCxcblx0XHRpSW5jUG9ydCxcblx0XHRzSW5jU2VjdXJlLFxuXHRcdGJVc2VTaWV2ZSxcblx0XHRzU2lldmVIb3N0LFxuXHRcdGlTaWV2ZVBvcnQsXG5cdFx0c1NpZXZlU2VjdXJlLFxuXHRcdHNPdXRIb3N0LFxuXHRcdGlPdXRQb3J0LFxuXHRcdHNPdXRTZWN1cmUsXG5cdFx0Yk91dEF1dGgsXG5cdFx0Yk91dFBocE1haWxcblx0KSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkRvbWFpblRlc3QnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXHRcdFx0J0luY0hvc3QnOiBzSW5jSG9zdCxcblx0XHRcdCdJbmNQb3J0JzogaUluY1BvcnQsXG5cdFx0XHQnSW5jU2VjdXJlJzogc0luY1NlY3VyZSxcblx0XHRcdCdVc2VTaWV2ZSc6IGJVc2VTaWV2ZSA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cdFx0XHQnT3V0SG9zdCc6IHNPdXRIb3N0LFxuXHRcdFx0J091dFBvcnQnOiBpT3V0UG9ydCxcblx0XHRcdCdPdXRTZWN1cmUnOiBzT3V0U2VjdXJlLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHRlc3RDb250YWN0cyhmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvbnRhY3RzVGVzdCcsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7P30gb0RhdGFcblx0ICovXG5cdHNhdmVOZXdBZG1pblBhc3N3b3JkKGZDYWxsYmFjaywgb0RhdGEpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFzc3dvcmRVcGRhdGUnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0YWRtaW5QaW5nKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QaW5nJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFJlbW90ZUFkbWluQWpheCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgUGx1Z2lucyBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmNvbnN0IFNVQlMgPSB7fTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViKG5hbWUsIGZ1bmMsIGNvbnRleHQpIHtcblx0aWYgKGlzT2JqZWN0KG5hbWUpKSB7XG5cdFx0Y29udGV4dCA9IGZ1bmMgfHwgbnVsbDtcblx0XHRmdW5jID0gbnVsbDtcblxuXHRcdF8uZWFjaChuYW1lLCAoc3ViRnVuYywgc3ViTmFtZSkgPT4ge1xuXHRcdFx0c3ViKHN1Yk5hbWUsIHN1YkZ1bmMsIGNvbnRleHQpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdFx0U1VCU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNVQlNbbmFtZV0ucHVzaChbZnVuYywgY29udGV4dF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdWIobmFtZSwgYXJncykge1xuXHRQbHVnaW5zLnJ1bkhvb2soJ3JsLXB1YicsIFtuYW1lLCBhcmdzXSk7XG5cblx0aWYgKCFpc1VuZChTVUJTW25hbWVdKSkge1xuXHRcdF8uZWFjaChTVUJTW25hbWVdLCAoaXRlbXMpID0+IHtcblx0XHRcdGlmIChpdGVtc1swXSkge1xuXHRcdFx0XHRpdGVtc1swXS5hcHBseShpdGVtc1sxXSB8fCBudWxsLCBhcmdzIHx8IFtdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiZXhwb3J0IGNvbnN0IE1FU1NBR0VTX1BFUl9QQUdFID0gMjA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRV9WQUxVRVMgPSBbMTAsIDIwLCAzMCwgNTAsIDEwMF07XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19QRVJfUEFHRSA9IDUwO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BSkFYX1RJTUVPVVQgPSAzMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNFQVJDSF9BSkFYX1RJTUVPVVQgPSAzMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IENPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUID0gMjAwMDAwO1xuXG5leHBvcnQgY29uc3QgVU5VU0VEX09QVElPTl9WQUxVRSA9ICdfX1VOVVNFX18nO1xuXG5leHBvcnQgY29uc3QgQ0xJRU5UX1NJREVfU1RPUkFHRV9JTkRFWF9OQU1FID0gJ3JsY3NjJztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9QT1JUID0gMTQzO1xuXG5leHBvcnQgY29uc3QgSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUID0gOTkzO1xuXG5leHBvcnQgY29uc3QgU01UUF9ERUZBVUxUX1BPUlQgPSAyNTtcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDQ2NTtcblxuZXhwb3J0IGNvbnN0IFNJRVZFX0RFRkFVTFRfUE9SVCA9IDQxOTA7XG5cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQgPSAxNTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfRVJST1JfTElNSVQgPSA3O1xuXG5leHBvcnQgY29uc3QgVE9LRU5fRVJST1JfTElNSVQgPSAxMDtcblxuZXhwb3J0IGNvbnN0IFJBSU5MT09QX1RSSUFMX0tFWSA9ICdSQUlOTE9PUC1UUklBTC1LRVknO1xuXG4vKiBlc2xpbnQgbWF4LWxlbjogMCAqL1xuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVVNFUl9ET1RfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQzRBQUFBdUNBWUFBQUJYdVNzM0FBQUhIa2xFUVZSb1E3VlpXMDhiVnhDZVhSdXdJYlRHWEl3TnRCQmFxandnVlVpUjhsRGxiemE5cWUxRHBWWjlhTlEvMEtwUGVhSkswN1NwY3VFZUNFbVVBT2JtMjFiZnJMOWxPTmpleFNZcldmYnVuajM3elhkbXZwa3o5b0lnQ0tURDBXZzB4UGQ5NFREUDgzUTB6dldhNTB2emtsU3JkYW5WYW5xZjQvRDg0R0JHcitGK09wM1M4ZnFvSnhMT2RuWmdUdnNPL25ZaGVuSEErVUM3Q1dGMXVYd2tiOSsrbGRQVFV3VmVyVmJWcUZRcXBSOFlQalEwSkNNakk1TE5EaWpvUmdQM1BRVnU1KzVFb3IyWEdMZzdJVjRHa0lkSEovTG16UnM1T0RpSXdOYnJkUjBPMEdDY3E0WHo0ZUZobVp5Y2xQNyt0RFFhSWlrL0JHNVhLUW40U3dHM3pKVExaWG45K3JVY2xJOFVIRDVZVm9ERE44YlN6WGhPTndMNDhmRnhHUjRlaWx6RlpUMXVGUklCNXlUOEJxQ2RuUjNaM2QwVlA5VW42WFJhd1lKcGdnVnJaQnYzOE1FNFhLdFVLbkx0MmpVcGxVb3kxUFIvbDNVN1Q2c1ZTQVFjZ01Ba2o4UERROW5lM3Bham95TVJMN3plS3NZWldIZ1dZREdtdjc4L21tZHdjRkErbUpsU2d6aUhEV3JFUnJzakVYRFhlZ1RpMXRaVytETHhJMmJ4SXJxRk5ZVFh5RHlDRndlTUFIQ3diOGU0Um5UTnVPc3FlM3Q3c3JhMjFwVEQwS2N0NjY2RThYbGNaeXp3OS9SVVVYSzVuSzVvVWluVVFJNlRRM2N5bk8vdjc4dnE2cXJLWENOd2xUaUpKcHlOR2MzblpIcDZ1cVYyZHdyUVdPQ3RaQkRBVjFaV3dzUWs3ZjB3aVFuNWtmZmJBdS8wL0tXQll6SUMxK1h1a2ZHeDBSR1ptcHBLbEMydElWMEJoNGFEY1pXN0hoa2ZIOHVyTExaTDdUMnBpaHZsa01Obno1NkZpYWRIeGljTDQxSXNGcE40MWJreHNZeGJSZEZvOWp3QjhLZFBuMTRKOEtuU3BCUUtoUXM2M25QbWJDVlJjQlVBUjJMcTFWVm1wa3N5TVRGeEFYamNFc1F5YmllZ0VTaW9uang1b3NDWk9lTmUxTzQrRWhDQVg3YlFTZ1FjeFJIVE1nQWdjejUrL0Rpcy9oTDR1SFUzL0I0WUdOQVNHSElLeHVFcWwwaytsMDVBZUlBRjF2UG56NVZ4RkZtZERsYUpyTXRaSVRKZVNzWENPVGxNdW5LeGpMdE1ZT0tOalExNThlSkZ1QXVLa1VPYjVzRXdnZmYxOVNrSlVCVmtUaFpVYm5YWnJ0Q0tCUTZnYm5XSWtqWnB5bmUzZWpBV29HbkE3SWN6NmlydkJMZ2JPTWljQ002VGt4UHgvTEFrYlhmZ1djc2F6dUUya0ZSc0tENVorQ2lxRHVtS25jcFp2aWVXY1M2ZERWRDh4aVlDTmZscEpkd2Nkd0pPZjlhaXJMbVZRN0RQek14SVlXTHNYR1hvVnFMdDVrME0zSzNKVVZQRFpkYldOenNDcDQ4VFBGZHZkblpXVXozMm5EaGE3Yko2M2tnQUpQelNkUmtzOS9LZjl4TUpBUTFncTJOcGFVbXkyWXo0emFyNG5RQzN4Yjk5QVF3Q2NHekxBQXd1aEc4WWlXdmNPS3RzK3I0R09lNW5NaG01ZWZPbTlsVUEzRTN2U1pKUnJLdkUwZm5Qdi8vSnk1Y3ZvNWNUSElQUWJTamhPb3FxNjlldlMxOWY2bHhES0s0K3NWaGlnWlB0S0pxYnJRZXF4ZDUrV1I0K2ZLZ3FnVDBrMlhYM25oaVBnRVRXWEZoWWtGenVQWjJ5VnExR1RTT1hwRTQ3L1ZqZ05uRDRtNEdHNy9MaHNUeDY5RWl3RDRWcjJNd0lJeGdiQUgxOGZLeDF5Zno4dkVvZ052R3RXbkN1aExaYTlVVEFyZVZXRnNIeS9iLytWcmJkbDdFNVJFTVFEMmpEb1ViQnl0eSsvWm5VNjRHa1UySHp5Skxoa3RVMWNMdjhuQVJna1lTMmQzYWpBZ3dHOHFVMm9MbURaOTJDTWFPam83SzR1Q2laZ2JEV2FSV2duWmhQeExock1VQ3ZyNjlyaXdLWmsxTEhGN1hxcldBTzloSnhINm96TnpjbkN4L1BxenRaZzltZjZTUU1zY0N0bTJDNWtlNEJHTWxIV1RVcDM2MDM2QUphakRWckZNekJyaGhXc2xRc1NyRllpT3FWcE1yaU5ZSWdxRlJxMmozRkFiL3pmZlQ2enV4Rlh4c056czNOVFhuMTZsVzRnWWlXOTZ3MUZ5ZWRGKzgzeEcvMkZOR0NScFU0TmphbU1zbitPWjl4RTVSWHFkYURkUHBpYjZSV0N6dXdLRjlSeHFJMkFWTlFCd1FZSm9LMHdkQmVqbnF0RWlrUDNwZlA1MVhqVVRFU2wxMkZxSkVLeHNFb3JBUllERDQ0T05UZUlEN1lwc0VuclJ2UWZXQUkyZThXZkRhVFVTSXdKMGlCQ21GT3RPVUFIdlZNUHAvVFB3dllGVllGSXVQOGwrREJnd2RhYTJNaXF3YTBHZ1l3ZmVNbHRvdmJEZmg2YzF2SWdNWWNsaVNzS3Y0SVdGcjZWREh4dmxkdkJBSCsxc0ErY25sNVdZT1BtbXI5aXIrMWw5STBDZ3oweWpoWGpmSkowSlJPbm1leldibDE2NWF5ci81ZnF3Y0JOcjdJZmhqTXFLY3ZFU1NNNGVSY0Nhc1EzYkROT2JtS1BMZEdVR3Bac04yNGNVTkxCbTl6YXp1NGQrK2U2cXBOQkZhVHVVUzI2VTVkcHVSMUN4eUE3SjlkZHJNUnFsejRwd0xMWWF3eW1QZCsrLzJQQUR0MnVnY0d3cTlnQ0NkaFE5NkM2eFd3YTZqMWNldXErSTBFaFcwaThNQUlWSmZlTDNkL0RWRDhFS2kxMlA2LzJTMmpWL0VjY1ZCNTRPL2Vqei85SEdDcG9CQk10YTVyWE1YTHU1M0QxWEF3amhYd3Z2ditoNEJBWFZlNGJPdTNPM0NoeEYwOExpWkZHM2ZlbDE5OUc5Q0gzZkx5cXYyNE5jQjQ0TVJocGRLNzg4VTNDcHlLd3NDdzU5MHhtZlNwenNCdDBGcWMzdWQzdnRaaWd4V2NWWkNrbFZwU2lOMHczcTVFL2g5VEdNSVV1QTMrRVFBQUFBQkpSVTVFcmtKZ2dnPT0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9UUkFOU1BfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRSVcyTmtBQUlBQUFvQUFnZ0E5R2tBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX0xBWllfUExBQ0VIT0xERVJfUElDID1cblx0J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc1FBQUE3RUFaVXJEaHNBQUFBTlNVUkJWQmhYWXpoOCtQQi9BQWZmQTBuTlB1Q0xBQUFBQUVsRlRrU3VRbUNDJztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvYmluZFwiKTsiLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgZGVsZWdhdGVSdW4sIGluRm9jdXMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUsIEV2ZW50S2V5Q29kZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyAkd2luLCBrZXlTY29wZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0Vmlld05leHQge1xuXHRiRGlzYWJlQ2xvc2VPbkVzYyA9IGZhbHNlO1xuXHRzRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblx0c0N1cnJlbnRLZXlTY29wZSA9IEtleVN0YXRlLk5vbmU7XG5cblx0dmlld01vZGVsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRtb2RhbFZpc2liaWxpdHkgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyByYXRlTGltaXQ6IDAgfSk7XG5cblx0dmlld01vZGVsTmFtZSA9ICcnO1xuXHR2aWV3TW9kZWxOYW1lcyA9IFtdO1xuXHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHN0b3JlQW5kU2V0S2V5U2NvcGUoKSB7XG5cdFx0dGhpcy5zQ3VycmVudEtleVNjb3BlID0ga2V5U2NvcGUoKTtcblx0XHRrZXlTY29wZSh0aGlzLnNEZWZhdWx0S2V5U2NvcGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0cmVzdG9yZUtleVNjb3BlKCkge1xuXHRcdGtleVNjb3BlKHRoaXMuc0N1cnJlbnRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZWdpc3RlclBvcHVwS2V5RG93bigpIHtcblx0XHQkd2luLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnQgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkgJiYgdGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRpZiAoIXRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgJiYgRXZlbnRLZXlDb2RlLkVzYyA9PT0gZXZlbnQua2V5Q29kZSkge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEV2ZW50S2V5Q29kZS5CYWNrc3BhY2UgPT09IGV2ZW50LmtleUNvZGUgJiYgIWluRm9jdXMoKSkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdGNhbmNlbENvbW1hbmQoKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXG5cdGNsb3NlQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBTb2NpYWxTdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZ29vZ2xlID0ge307XG5cdFx0dGhpcy50d2l0dGVyID0ge307XG5cdFx0dGhpcy5mYWNlYm9vayA9IHt9O1xuXHRcdHRoaXMuZHJvcGJveCA9IHt9O1xuXG5cdFx0Ly8gR29vZ2xlXG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5nb29nbGUuY2xpZW50SUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS51c2VyTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5nb29nbGUudXNlck5hbWUoKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhID0ge307XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmRyaXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5wcmV2aWV3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlID0ge307XG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKFxuXHRcdFx0KCkgPT5cblx0XHRcdFx0dGhpcy5nb29nbGUuZW5hYmxlZCgpICYmICh0aGlzLmdvb2dsZS5jYXBhLmF1dGgoKSB8fCB0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSlcblx0XHQpO1xuXG5cdFx0dGhpcy5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncyA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMuZ29vZ2xlLmVuYWJsZWQoKSAmJiB0aGlzLmdvb2dsZS5jYXBhLmRyaXZlKCkpO1xuXG5cdFx0Ly8gRmFjZWJvb2tcblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBTZWNyZXQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZhY2Vib29rLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZmFjZWJvb2subG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5mYWNlYm9vay51c2VyTmFtZSgpKTtcblxuXHRcdC8vIFR3aXR0ZXJcblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudHdpdHRlci5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnR3aXR0ZXIubG9nZ2luZWQgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy50d2l0dGVyLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gRHJvcGJveFxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5nb29nbGUuZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnR29vZ2xlQ2xpZW50SUQnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2xpZW50U2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRTZWNyZXQnKSk7XG5cdFx0dGhpcy5nb29nbGUuYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVBcGlLZXknKSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGgoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsQXV0aEdtYWlsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxEcml2ZScpKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxQcmV2aWV3JykpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RmFjZWJvb2tTb2NpYWwnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5hcHBJRChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBJRCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldChTZXR0aW5ncy5zZXR0aW5nc0dldCgnRmFjZWJvb2tBcHBTZWNyZXQnKSk7XG5cdFx0dGhpcy5mYWNlYm9vay5zdXBwb3J0ZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnU3VwcG9ydGVkRmFjZWJvb2tTb2NpYWwnKSk7XG5cblx0XHR0aGlzLnR3aXR0ZXIuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dUd2l0dGVyU29jaWFsJykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lcktleSA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lcktleScpKTtcblx0XHR0aGlzLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQgPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnKSk7XG5cblx0XHR0aGlzLmRyb3Bib3guZW5hYmxlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0Ryb3Bib3hTb2NpYWwnKSk7XG5cdFx0dGhpcy5kcm9wYm94LmFwaUtleShTZXR0aW5ncy5zZXR0aW5nc0dldCgnRHJvcGJveEFwaUtleScpKTtcblx0fVxuXG5cdGFwcGVuZERyb3Bib3goKSB7XG5cdFx0aWYgKCF3aW5kb3cuRHJvcGJveCAmJiB0aGlzLmRyb3Bib3guZW5hYmxlZCgpICYmIHRoaXMuZHJvcGJveC5hcGlLZXkoKSkge1xuXHRcdFx0aWYgKCF3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Ryb3Bib3hqcycpKSB7XG5cdFx0XHRcdGNvbnN0IHNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcblx0XHRcdFx0c2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jztcblx0XHRcdFx0c2NyaXB0LnNyYyA9ICdodHRwczovL3d3dy5kcm9wYm94LmNvbS9zdGF0aWMvYXBpLzIvZHJvcGlucy5qcyc7XG5cdFx0XHRcdCQoc2NyaXB0KVxuXHRcdFx0XHRcdC5hdHRyKCdpZCcsICdkcm9wYm94anMnKVxuXHRcdFx0XHRcdC5hdHRyKCdkYXRhLWFwcC1rZXknLCB0aGlzLmRyb3Bib3guYXBpS2V5KCkpO1xuXG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTb2NpYWxTdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9pbmRleC1vZlwiKTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIGVsc2UgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gY3JlYXRlV2VsbEtub3duU3ltYm9sKCdTeW1ib2wuJyArIG5hbWUpO1xuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJpbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGkxOG5Ub05vZGVzIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5jbGFzcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdGRpc3Bvc2FibGUgPSBbXTtcblxuXHRkaXNwb3NlKCkge1xuXHRcdHRoaXMuZGlzcG9zYWJsZS5mb3JFYWNoKChmdW5jVG9EaXNwb3NlKSA9PiB7XG5cdFx0XHRpZiAoZnVuY1RvRGlzcG9zZSAmJiBmdW5jVG9EaXNwb3NlLmRpc3Bvc2UpIHtcblx0XHRcdFx0ZnVuY1RvRGlzcG9zZS5kaXNwb3NlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IENsYXNzT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVJRCA9ICcnXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCBjb21wb25lbnRFeHBvcnRIZWxwZXIgPSAoQ2xhc3NPYmplY3QsIHRlbXBsYXRlSUQgPSAnJykgPT4gKHtcblx0dGVtcGxhdGU6IHRlbXBsYXRlSUQgPyB7IGVsZW1lbnQ6IHRlbXBsYXRlSUQgfSA6ICc8Yj48L2I+Jyxcblx0dmlld01vZGVsOiB7XG5cdFx0Y3JlYXRlVmlld01vZGVsOiAocGFyYW1zLCBjb21wb25lbnRJbmZvKSA9PiB7XG5cdFx0XHRwYXJhbXMgPSBwYXJhbXMgfHwge307XG5cdFx0XHRwYXJhbXMuZWxlbWVudCA9IG51bGw7XG5cblx0XHRcdGlmIChjb21wb25lbnRJbmZvICYmIGNvbXBvbmVudEluZm8uZWxlbWVudCkge1xuXHRcdFx0XHRwYXJhbXMuY29tcG9uZW50ID0gY29tcG9uZW50SW5mbztcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQgPSAkKGNvbXBvbmVudEluZm8uZWxlbWVudCk7XG5cblx0XHRcdFx0aTE4blRvTm9kZXMocGFyYW1zLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGlmICghaXNVbmQocGFyYW1zLmlubGluZSkgJiYga28udW53cmFwKHBhcmFtcy5pbmxpbmUpKSB7XG5cdFx0XHRcdFx0cGFyYW1zLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBuZXcgQ2xhc3NPYmplY3QocGFyYW1zKTtcblx0XHR9XG5cdH1cbn0pO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNGdW5jLCBpc0FycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNvbnN0IFNJTVBMRV9IT09LUyA9IHt9LFxuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTID0gW10sXG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTID0gW107XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKG5hbWUsIGNhbGxiYWNrKSB7XG5cdGlmIChpc0Z1bmMoY2FsbGJhY2spKSB7XG5cdFx0aWYgKCFpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRcdFNJTVBMRV9IT09LU1tuYW1lXSA9IFtdO1xuXHRcdH1cblxuXHRcdFNJTVBMRV9IT09LU1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJncyA9IFtdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Ib29rKG5hbWUsIGFyZ3MgPSBbXSkge1xuXHRpZiAoaXNBcnJheShTSU1QTEVfSE9PS1NbbmFtZV0pKSB7XG5cdFx0Xy5lYWNoKFNJTVBMRV9IT09LU1tuYW1lXSwgKGNhbGxiYWNrKSA9PiB7XG5cdFx0XHRjYWxsYmFjayguLi5hcmdzKTtcblx0XHR9KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haW5TZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBTZXR0aW5ncy5zZXR0aW5nc0dldChuYW1lKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtzdHJpbmd9IGFjdGlvblxuICogQHBhcmFtIHtPYmplY3Q9fSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gez9udW1iZXI9fSB0aW1lb3V0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdGVSZXF1ZXN0KGNhbGxiYWNrLCBhY3Rpb24sIHBhcmFtZXRlcnMsIHRpbWVvdXQpIHtcblx0aWYgKEdsb2JhbHNEYXRhLl9fQVBQX18pIHtcblx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLnJlbW90ZSgpLmRlZmF1bHRSZXF1ZXN0KGNhbGxiYWNrLCAnUGx1Z2luJyArIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0VVNFUl9WSUVXX01PREVMU19IT09LUy5wdXNoKFtTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZV0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluKFNldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlKSB7XG5cdEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBhZG1pblxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyhhZG1pbikge1xuXHRjb25zdCBLbm9pbiA9IHJlcXVpcmUoJ0tub2luL0tub2luJyk7XG5cdF8uZWFjaChhZG1pbiA/IEFETUlOX1ZJRVdfTU9ERUxTX0hPT0tTIDogVVNFUl9WSUVXX01PREVMU19IT09LUywgKHZpZXcpID0+IHtcblx0XHRLbm9pbi5hZGRTZXR0aW5nc1ZpZXdNb2RlbCh2aWV3WzBdLCB2aWV3WzFdLCB2aWV3WzJdLCB2aWV3WzNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpblNlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7P31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KHBsdWdpblNlY3Rpb24sIG5hbWUpIHtcblx0bGV0IHBsdWdpbnMgPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnUGx1Z2lucycpO1xuXHRwbHVnaW5zID0gcGx1Z2lucyAmJiAhaXNVbmQocGx1Z2luc1twbHVnaW5TZWN0aW9uXSkgPyBwbHVnaW5zW3BsdWdpblNlY3Rpb25dIDogbnVsbDtcblx0cmV0dXJuIHBsdWdpbnMgPyAoaXNVbmQocGx1Z2luc1tuYW1lXSkgPyBudWxsIDogcGx1Z2luc1tuYW1lXSkgOiBudWxsO1xufVxuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgQ29yZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvcmVSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVDaGFubmVsID0ga28ub2JzZXJ2YWJsZSgnc3RhYmxlJyk7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQWNjZXNzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVXYXJuaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb3JlQ2hlY2tpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXHRcdHRoaXMuY29yZVVwZGF0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlUmVtb3RlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IGtvLm9ic2VydmFibGUoLTIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlQWRtaW5TdG9yZSgpO1xuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgd3JhcENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gIHZhciBXcmFwcGVyID0gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE5hdGl2ZUNvbnN0cnVjdG9yKSB7XG4gICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihhKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIpO1xuICAgICAgfSByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEsIGIsIGMpO1xuICAgIH0gcmV0dXJuIE5hdGl2ZUNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICByZXR1cm4gV3JhcHBlcjtcbn07XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgUFJPVE8gPSBvcHRpb25zLnByb3RvO1xuXG4gIHZhciBuYXRpdmVTb3VyY2UgPSBHTE9CQUwgPyBnbG9iYWwgOiBTVEFUSUMgPyBnbG9iYWxbVEFSR0VUXSA6IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuXG4gIHZhciB0YXJnZXQgPSBHTE9CQUwgPyBwYXRoIDogcGF0aFtUQVJHRVRdIHx8IChwYXRoW1RBUkdFVF0gPSB7fSk7XG4gIHZhciB0YXJnZXRQcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuXG4gIHZhciBGT1JDRUQsIFVTRV9OQVRJVkUsIFZJUlRVQUxfUFJPVE9UWVBFO1xuICB2YXIga2V5LCBzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHksIG5hdGl2ZVByb3BlcnR5LCByZXN1bHRQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcblxuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIFVTRV9OQVRJVkUgPSAhRk9SQ0VEICYmIG5hdGl2ZVNvdXJjZSAmJiBoYXMobmF0aXZlU291cmNlLCBrZXkpO1xuXG4gICAgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFKSBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihuYXRpdmVTb3VyY2UsIGtleSk7XG4gICAgICBuYXRpdmVQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgbmF0aXZlUHJvcGVydHkgPSBuYXRpdmVTb3VyY2Vba2V5XTtcblxuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgaW1wbGVtZW50YXRpb25cbiAgICBzb3VyY2VQcm9wZXJ0eSA9IChVU0VfTkFUSVZFICYmIG5hdGl2ZVByb3BlcnR5KSA/IG5hdGl2ZVByb3BlcnR5IDogc291cmNlW2tleV07XG5cbiAgICBpZiAoVVNFX05BVElWRSAmJiB0eXBlb2YgdGFyZ2V0UHJvcGVydHkgPT09IHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSkgY29udGludWU7XG5cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGlmIChvcHRpb25zLmJpbmQgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSBiaW5kKHNvdXJjZVByb3BlcnR5LCBnbG9iYWwpO1xuICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ3MgaW4gdGhpcyB2ZXJzaW9uXG4gICAgZWxzZSBpZiAob3B0aW9ucy53cmFwICYmIFVTRV9OQVRJVkUpIHJlc3VsdFByb3BlcnR5ID0gd3JhcENvbnN0cnVjdG9yKHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICBlbHNlIGlmIChQUk9UTyAmJiB0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gJ2Z1bmN0aW9uJykgcmVzdWx0UHJvcGVydHkgPSBiaW5kKEZ1bmN0aW9uLmNhbGwsIHNvdXJjZVByb3BlcnR5KTtcbiAgICAvLyBkZWZhdWx0IGNhc2VcbiAgICBlbHNlIHJlc3VsdFByb3BlcnR5ID0gc291cmNlUHJvcGVydHk7XG5cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAoc291cmNlUHJvcGVydHkgJiYgc291cmNlUHJvcGVydHkuc2hhbSkgfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0UHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgdGFyZ2V0W2tleV0gPSByZXN1bHRQcm9wZXJ0eTtcblxuICAgIGlmIChQUk9UTykge1xuICAgICAgVklSVFVBTF9QUk9UT1RZUEUgPSBUQVJHRVQgKyAnUHJvdG90eXBlJztcbiAgICAgIGlmICghaGFzKHBhdGgsIFZJUlRVQUxfUFJPVE9UWVBFKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUsIHt9KTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9ydCB2aXJ0dWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBwYXRoW1ZJUlRVQUxfUFJPVE9UWVBFXVtrZXldID0gc291cmNlUHJvcGVydHk7XG4gICAgICAvLyBleHBvcnQgcmVhbCBwcm90b3R5cGUgbWV0aG9kc1xuICAgICAgaWYgKG9wdGlvbnMucmVhbCAmJiB0YXJnZXRQcm90b3R5cGUgJiYgIXRhcmdldFByb3RvdHlwZVtrZXldKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXRQcm90b3R5cGUsIGtleSwgc291cmNlUHJvcGVydHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9IDc7XG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3B0aW9ucywgc291cmNlKSB7XG4gIHZhciBUQVJHRVQgPSBvcHRpb25zLnRhcmdldDtcbiAgdmFyIEdMT0JBTCA9IG9wdGlvbnMuZ2xvYmFsO1xuICB2YXIgU1RBVElDID0gb3B0aW9ucy5zdGF0O1xuICB2YXIgRk9SQ0VELCB0YXJnZXQsIGtleSwgdGFyZ2V0UHJvcGVydHksIHNvdXJjZVByb3BlcnR5LCBkZXNjcmlwdG9yO1xuICBpZiAoR0xPQkFMKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsO1xuICB9IGVsc2UgaWYgKFNUQVRJQykge1xuICAgIHRhcmdldCA9IGdsb2JhbFtUQVJHRVRdIHx8IHNldEdsb2JhbChUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZyA9IEZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyBGdW5jdGlvbiBpbnN0YW5jZXMgYC5uYW1lYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhKE5BTUUgaW4gRnVuY3Rpb25Qcm90b3R5cGUpKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBOQU1FLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcuY2FsbCh0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IG5hdGl2ZURlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnICYmICFoYXModmFsdWUsICduYW1lJykpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBrZXkpO1xuICAgIGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAnJyk7XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKFJFUExBQ0UsIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSwgcmVhc29uKSB7XG4gIHZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IHJlYXNvbi5SRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTtcbiAgdmFyIFJFUExBQ0VfS0VFUFNfJDAgPSByZWFzb24uUkVQTEFDRV9LRUVQU18kMDtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKCFSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSAmJiBSRVBMQUNFX0tFRVBTXyQwKSB8fFxuICAgICAgICAodHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSlcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuIG5hdGl2ZVJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlID09ICdmdW5jdGlvbicgPyB2YXJpYWJsZSA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihwYXRoW25hbWVzcGFjZV0pIHx8IGFGdW5jdGlvbihnbG9iYWxbbmFtZXNwYWNlXSlcbiAgICA6IHBhdGhbbmFtZXNwYWNlXSAmJiBwYXRoW25hbWVzcGFjZV1bbWV0aG9kXSB8fCBnbG9iYWxbbmFtZXNwYWNlXSAmJiBnbG9iYWxbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5sZXQgX21vbWVudCA9IG51bGw7XG5sZXQgX21vbWVudE5vdyA9IDA7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vdyA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50ID0gbW9tZW50KCk7XG5cdH0sXG5cdDUwMCxcblx0dHJ1ZVxuKTtcblxuY29uc3QgdXBkYXRlTW9tZW50Tm93VW5peCA9IF8uZGVib3VuY2UoXG5cdCgpID0+IHtcblx0XHRfbW9tZW50Tm93ID0gbW9tZW50KCkudW5peCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbi8qKlxuICogQHJldHVybnMge21vbWVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudE5vdygpIHtcblx0dXBkYXRlTW9tZW50Tm93KCk7XG5cdHJldHVybiBfbW9tZW50IHx8IG1vbWVudCgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3dVbml4KCkge1xuXHR1cGRhdGVNb21lbnROb3dVbml4KCk7XG5cdHJldHVybiBfbW9tZW50Tm93IHx8IDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGRhdGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hTdWJ0cmFjdEZvcm1hdERhdGVIZWxwZXIoZGF0ZSkge1xuXHRyZXR1cm4gbW9tZW50Tm93KClcblx0XHQuY2xvbmUoKVxuXHRcdC5zdWJ0cmFjdChkYXRlLCAnZGF5cycpXG5cdFx0LmZvcm1hdCgnWVlZWS5NTS5ERCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBtXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRDdXN0b21TaG9ydERhdGUobSkge1xuXHRjb25zdCBub3cgPSBtb21lbnROb3coKTtcblx0aWYgKG0gJiYgbm93KSB7XG5cdFx0c3dpdGNoICh0cnVlKSB7XG5cdFx0XHRjYXNlIDQgPj0gbm93LmRpZmYobSwgJ2hvdXJzJyk6XG5cdFx0XHRcdHJldHVybiBtLmZyb21Ob3coKTtcblx0XHRcdGNhc2Ugbm93LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1RPREFZX0FUJywge1xuXHRcdFx0XHRcdFRJTUU6IG0uZm9ybWF0KCdMVCcpXG5cdFx0XHRcdH0pO1xuXHRcdFx0Y2FzZSBub3dcblx0XHRcdFx0LmNsb25lKClcblx0XHRcdFx0LnN1YnRyYWN0KDEsICdkYXlzJylcblx0XHRcdFx0LmZvcm1hdCgnTCcpID09PSBtLmZvcm1hdCgnTCcpOlxuXHRcdFx0XHRyZXR1cm4gaTE4bignTUVTU0FHRV9MSVNUL1lFU1RFUkRBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93LnllYXIoKSA9PT0gbS55ZWFyKCk6XG5cdFx0XHRcdHJldHVybiBtLmZvcm1hdCgnRCBNTU0uJyk7XG5cdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG0gPyBtLmZvcm1hdCgnTEwnKSA6ICcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lU3RhbXBJblVUQ1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdFN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdCh0aW1lU3RhbXBJblVUQywgZm9ybWF0U3RyKSB7XG5cdGxldCBtID0gbnVsbCxcblx0XHRyZXN1bHQgPSAnJztcblxuXHRjb25zdCBub3cgPSBtb21lbnROb3dVbml4KCk7XG5cblx0dGltZVN0YW1wSW5VVEMgPSAwIDwgdGltZVN0YW1wSW5VVEMgPyB0aW1lU3RhbXBJblVUQyA6IDAgPT09IHRpbWVTdGFtcEluVVRDID8gbm93IDogMDtcblx0dGltZVN0YW1wSW5VVEMgPSBub3cgPCB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IHRpbWVTdGFtcEluVVRDO1xuXG5cdG0gPSAwIDwgdGltZVN0YW1wSW5VVEMgPyBtb21lbnQudW5peCh0aW1lU3RhbXBJblVUQykgOiBudWxsO1xuXG5cdGlmIChtICYmIDE5NzAgPT09IG0ueWVhcigpKSB7XG5cdFx0bSA9IG51bGw7XG5cdH1cblxuXHRpZiAobSkge1xuXHRcdHN3aXRjaCAoZm9ybWF0U3RyKSB7XG5cdFx0XHRjYXNlICdGUk9NTk9XJzpcblx0XHRcdFx0cmVzdWx0ID0gbS5mcm9tTm93KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnU0hPUlQnOlxuXHRcdFx0XHRyZXN1bHQgPSBmb3JtYXRDdXN0b21TaG9ydERhdGUobSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSAnRlVMTCc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZm9ybWF0KCdMTEwnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdChmb3JtYXRTdHIpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vbWVudFRvTm9kZShlbGVtZW50KSB7XG5cdGxldCBrZXkgPSAnJyxcblx0XHR0aW1lID0gMDtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHR0aW1lID0gJGVsLmRhdGEoJ21vbWVudC10aW1lJyk7XG5cdGlmICh0aW1lKSB7XG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwudGV4dChmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXG5cdFx0a2V5ID0gJGVsLmRhdGEoJ21vbWVudC1mb3JtYXQtdGl0bGUnKTtcblx0XHRpZiAoa2V5KSB7XG5cdFx0XHQkZWwuYXR0cigndGl0bGUnLCBmb3JtYXQodGltZSwga2V5KSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWQoKSB7XG5cdF8uZGVmZXIoKCkgPT4ge1xuXHRcdCQoJy5tb21lbnQnLCB3aW5kb3cuZG9jdW1lbnQpLmVhY2goKGluZGV4LCBpdGVtKSA9PiB7XG5cdFx0XHRtb21lbnRUb05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cdH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuaGFzaGVyOyIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIHJlZGVmaW5lKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIHRvU3RyaW5nLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIi8qKlxuICogQHJldHVybnMge0FwcEFkbWlufVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwKCkge1xuXHRyZXR1cm4gcmVxdWlyZSgnQXBwL0FkbWluJykuZGVmYXVsdDtcbn1cbiIsInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgaGFuZGxlciA9PSAnZnVuY3Rpb24nID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXMoV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhcyhTeW1ib2wsIG5hbWUpKSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgZWxzZSBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoXCIpOyIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBMYW5ndWFnZVN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5sYW5ndWFnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZSA9IGtvXG5cdFx0XHQub2JzZXJ2YWJsZSgnJylcblx0XHRcdC5leHRlbmQoeyBsaW1pdGVkTGlzdDogdGhpcy5sYW5ndWFnZXMgfSlcblx0XHRcdC5leHRlbmQoeyByZXZlcnNpYmxlOiB0cnVlIH0pO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKCcnKVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLmxhbmd1YWdlc0FkbWluIH0pXG5cdFx0XHQuZXh0ZW5kKHsgcmV2ZXJzaWJsZTogdHJ1ZSB9KTtcblxuXHRcdHRoaXMudXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2VBZG1pbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgYUxhbmd1YWdlcyA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsYW5ndWFnZXMnKSxcblx0XHRcdGFMYW5ndWFnZXNBZG1pbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdsYW5ndWFnZXNBZG1pbicpO1xuXG5cdFx0dGhpcy5sYW5ndWFnZXMoaXNBcnJheShhTGFuZ3VhZ2VzKSA/IGFMYW5ndWFnZXMgOiBbXSk7XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbihpc0FycmF5KGFMYW5ndWFnZXNBZG1pbikgPyBhTGFuZ3VhZ2VzQWRtaW4gOiBbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xhbmd1YWdlQWRtaW4nKSk7XG5cblx0XHR0aGlzLnVzZXJMYW5ndWFnZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxhbmd1YWdlJykpO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlQWRtaW4oU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1VzZXJMYW5ndWFnZUFkbWluJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBMYW5ndWFnZVN0b3JlKCk7XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVKb2luID0gW10uam9pbjtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPSBPYmplY3Q7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEVTM19TVFJJTkdTIHx8ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbi5jYWxsKHRvSW5kZXhlZE9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlIH0gZnJvbSAnU3RvcmVzL0Fic3RyYWN0QXBwJztcblxuY2xhc3MgQXBwQWRtaW5TdG9yZSBleHRlbmRzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMud2Vha1Bhc3N3b3JkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZGF0YUZvbGRlckFjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0c3VwZXIucG9wdWxhdGUoKTtcblxuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlKCEhc2V0dGluZ3NHZXQoJ0RldGVybWluZVVzZXJMYW5ndWFnZScpKTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4oISFzZXR0aW5nc0dldCgnRGV0ZXJtaW5lVXNlckRvbWFpbicpKTtcblxuXHRcdHRoaXMud2Vha1Bhc3N3b3JkKCEhc2V0dGluZ3NHZXQoJ1dlYWtQYXNzd29yZCcpKTtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyghIXNldHRpbmdzR2V0KCdVc2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMnKSk7XG5cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0JC5nZXQoJy4vZGF0YS9WRVJTSU9OPycgKyB3aW5kb3cuTWF0aC5yYW5kb20oKSkudGhlbigoKSA9PiB0aGlzLmRhdGFGb2xkZXJBY2Nlc3ModHJ1ZSkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXBwQWRtaW5TdG9yZSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGFkZHJlc3NwYXJzZXIgZnJvbSAnZW1haWxqcy1hZGRyZXNzcGFyc2VyJztcbmltcG9ydCB7IHRyaW0sIGVuY29kZUh0bWwsIGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmNsYXNzIEVtYWlsTW9kZWwge1xuXHRlbWFpbCA9ICcnO1xuXHRuYW1lID0gJyc7XG5cdGRraW1TdGF0dXMgPSAnJztcblx0ZGtpbVZhbHVlID0gJyc7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZW1haWwgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGRraW1TdGF0dXMgPSAnbm9uZSdcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltVmFsdWUgPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZW1haWwgPSAnJywgbmFtZSA9ICcnLCBka2ltU3RhdHVzID0gJ25vbmUnLCBka2ltVmFsdWUgPSAnJykge1xuXHRcdHRoaXMuZW1haWwgPSBlbWFpbDtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMuZGtpbVN0YXR1cyA9IGRraW1TdGF0dXM7XG5cdFx0dGhpcy5ka2ltVmFsdWUgPSBka2ltVmFsdWU7XG5cblx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtBamF4SnNvbkVtYWlsfSBqc29uXG5cdCAqIEByZXR1cm5zIHs/RW1haWxNb2RlbH1cblx0ICovXG5cdHN0YXRpYyBuZXdJbnN0YW5jZUZyb21Kc29uKGpzb24pIHtcblx0XHRjb25zdCBlbWFpbCA9IG5ldyBFbWFpbE1vZGVsKCk7XG5cdFx0cmV0dXJuIGVtYWlsLmluaXRCeUpzb24oanNvbikgPyBlbWFpbCA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmVtYWlsID0gJyc7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmRraW1TdGF0dXMgPSAnbm9uZSc7XG5cdFx0dGhpcy5ka2ltVmFsdWUgPSAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHZhbGlkYXRlKCkge1xuXHRcdHJldHVybiAnJyAhPT0gdGhpcy5uYW1lIHx8ICcnICE9PSB0aGlzLmVtYWlsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gd2l0aG91dE5hbWUgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aGFzaCh3aXRob3V0TmFtZSA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuICcjJyArICh3aXRob3V0TmFtZSA/ICcnIDogdGhpcy5uYW1lKSArICcjJyArIHRoaXMuZW1haWwgKyAnIyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckR1cGxpY2F0ZU5hbWUoKSB7XG5cdFx0aWYgKHRoaXMubmFtZSA9PT0gdGhpcy5lbWFpbCkge1xuXHRcdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHNlYXJjaChxdWVyeSkge1xuXHRcdHJldHVybiAtMSA8ICh0aGlzLm5hbWUgKyAnICcgKyB0aGlzLmVtYWlsKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbkVtYWlsfSBvSnNvbkVtYWlsXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvRW1haWwnID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHRoaXMubmFtZSA9IHRyaW0oanNvbi5OYW1lKTtcblx0XHRcdHRoaXMuZW1haWwgPSB0cmltKGpzb24uRW1haWwpO1xuXHRcdFx0dGhpcy5ka2ltU3RhdHVzID0gdHJpbShqc29uLkRraW1TdGF0dXMgfHwgJycpO1xuXHRcdFx0dGhpcy5ka2ltVmFsdWUgPSB0cmltKGpzb24uRGtpbVZhbHVlIHx8ICcnKTtcblxuXHRcdFx0cmVzdWx0ID0gJycgIT09IHRoaXMuZW1haWw7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gdXNlRW5jb2RlSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSwgdXNlRW5jb2RlSHRtbCA9IGZhbHNlKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGlmICgnJyAhPT0gdGhpcy5lbWFpbCkge1xuXHRcdFx0aWYgKGZyaWVuZGx5VmlldyAmJiAnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHdyYXBXaXRoTGlua1xuXHRcdFx0XHRcdD8gJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHQgICc/dG89JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0ICAnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLm5hbWUpICtcblx0XHRcdFx0XHQgICc8L2E+J1xuXHRcdFx0XHRcdDogdXNlRW5jb2RlSHRtbFxuXHRcdFx0XHRcdD8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpXG5cdFx0XHRcdFx0OiB0aGlzLm5hbWU7XG5cdFx0XHRcdC8vIHJlc3VsdCA9IHdyYXBXaXRoTGluayA/ICc8YSBocmVmPVwibWFpbHRvOicgKyBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICsgZW5jb2RlSHRtbCh0aGlzLm5hbWUpICsgJzwvYT4nIDogKHVzZUVuY29kZUh0bWwgPyBlbmNvZGVIdG1sKHRoaXMubmFtZSkgOiB0aGlzLm5hbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5lbWFpbDtcblx0XHRcdFx0aWYgKCcnICE9PSB0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHRpZiAod3JhcFdpdGhMaW5rKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICtcblx0XHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0XHQnP3RvPScgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwocmVzdWx0KSArXG5cdFx0XHRcdFx0XHRcdCc8L2E+JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJz4nKTtcblx0XHRcdFx0XHRcdC8vIHJlc3VsdCA9IGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JykgKyAnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0Ly8gXHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0Ly8gXHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9ICdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyByZXN1bHQgKyAnPic7XG5cdFx0XHRcdFx0XHRpZiAodXNlRW5jb2RlSHRtbCkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBlbmNvZGVIdG1sKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0XHQnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0JzwvYT4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzcGxpdEVtYWlsTGluZShsaW5lKSB7XG5cdFx0Y29uc3QgcGFyc2VkUmVzdWx0ID0gYWRkcmVzc3BhcnNlcihsaW5lKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHBhcnNlZFJlc3VsdCkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdFx0bGV0IGV4aXN0cyA9IGZhbHNlO1xuXHRcdFx0cGFyc2VkUmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc1xuXHRcdFx0XHRcdD8gbmV3IEVtYWlsTW9kZWwoaXRlbS5hZGRyZXNzLnJlcGxhY2UoL15bPF0rKC4qKVs+XSskL2csICckMScpLCBpdGVtLm5hbWUgfHwgJycpXG5cdFx0XHRcdFx0OiBudWxsO1xuXG5cdFx0XHRcdGlmIChhZGRyZXNzICYmIGFkZHJlc3MuZW1haWwpIHtcblx0XHRcdFx0XHRleGlzdHMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goYWRkcmVzcyA/IGFkZHJlc3MudG9MaW5lKGZhbHNlKSA6IGl0ZW0ubmFtZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGV4aXN0cyA/IHJlc3VsdCA6IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzdGF0aWMgcGFyc2VFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gXy5jb21wYWN0KFxuXHRcdFx0XHRfLm1hcChwYXJzZWRSZXN1bHQsIChpdGVtKSA9PlxuXHRcdFx0XHRcdGl0ZW0uYWRkcmVzcyA/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKSA6IG51bGxcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsQWRkcmVzc1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHBhcnNlKGVtYWlsQWRkcmVzcykge1xuXHRcdGVtYWlsQWRkcmVzcyA9IHRyaW0oZW1haWxBZGRyZXNzKTtcblx0XHRpZiAoJycgPT09IGVtYWlsQWRkcmVzcykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGFkZHJlc3NwYXJzZXIoZW1haWxBZGRyZXNzKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJlc3VsdCkgJiYgcmVzdWx0WzBdKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSByZXN1bHRbMF0ubmFtZSB8fCAnJztcblx0XHRcdHRoaXMuZW1haWwgPSByZXN1bHRbMF0uYWRkcmVzcyB8fCAnJztcblx0XHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgeyBFbWFpbE1vZGVsLCBFbWFpbE1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIGNhY2hlID0ge307XG5cbnZhciB0aHJvd2VyID0gZnVuY3Rpb24gKGl0KSB7IHRocm93IGl0OyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgb3B0aW9ucykge1xuICBpZiAoaGFzKGNhY2hlLCBNRVRIT0RfTkFNRSkpIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV07XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICB2YXIgQUNDRVNTT1JTID0gaGFzKG9wdGlvbnMsICdBQ0NFU1NPUlMnKSA/IG9wdGlvbnMuQUNDRVNTT1JTIDogZmFsc2U7XG4gIHZhciBhcmd1bWVudDAgPSBoYXMob3B0aW9ucywgMCkgPyBvcHRpb25zWzBdIDogdGhyb3dlcjtcbiAgdmFyIGFyZ3VtZW50MSA9IGhhcyhvcHRpb25zLCAxKSA/IG9wdGlvbnNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXSA9ICEhbWV0aG9kICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgaWYgKEFDQ0VTU09SUyAmJiAhREVTQ1JJUFRPUlMpIHJldHVybiB0cnVlO1xuICAgIHZhciBPID0geyBsZW5ndGg6IC0xIH07XG5cbiAgICBpZiAoQUNDRVNTT1JTKSBkZWZpbmVQcm9wZXJ0eShPLCAxLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogdGhyb3dlciB9KTtcbiAgICBlbHNlIE9bMV0gPSAxO1xuXG4gICAgbWV0aG9kLmNhbGwoTywgYXJndW1lbnQwLCBhcmd1bWVudDEpO1xuICB9KTtcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQsIHRyaW0sIHBJbnQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0SW5wdXQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSB8fCAnJztcblx0XHR0aGlzLnNpemUgPSBwYXJhbXMuc2l6ZSB8fCAwO1xuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5wcmVMYWJlbCA9IHBhcmFtcy5wcmVMYWJlbCB8fCAnJztcblx0XHR0aGlzLmVuYWJsZSA9IGlzVW5kKHBhcmFtcy5lbmFibGUpID8gdHJ1ZSA6IHBhcmFtcy5lbmFibGU7XG5cdFx0dGhpcy50cmlnZ2VyID0gcGFyYW1zLnRyaWdnZXIgJiYgcGFyYW1zLnRyaWdnZXIuc3Vic2NyaWJlID8gcGFyYW1zLnRyaWdnZXIgOiBudWxsO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBwYXJhbXMucGxhY2Vob2xkZXIgfHwgJyc7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLnByZUxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLnByZUxhYmVsKTtcblx0XHR0aGlzLnRyaWdnZXJlZCA9ICFpc1VuZChwYXJhbXMudHJpZ2dlcikgJiYgISF0aGlzLnRyaWdnZXI7XG5cblx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5jbGFzc05hbWUgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBzaXplID0ga28udW53cmFwKHRoaXMuc2l6ZSksXG5cdFx0XHRcdHN1ZmZpeFZhbHVlID0gdGhpcy50cmlnZ2VyID8gJyAnICsgdHJpbSgnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCAnICsgdGhpcy5jbGFzc0ZvclRyaWdnZXIoKSkgOiAnJztcblx0XHRcdHJldHVybiAoMCA8IHNpemUgPyAnc3BhbicgKyBzaXplIDogJycpICsgc3VmZml4VmFsdWU7XG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy53aWR0aCkgJiYgcGFyYW1zLmVsZW1lbnQpIHtcblx0XHRcdHBhcmFtcy5lbGVtZW50LmZpbmQoJ2lucHV0LHNlbGVjdCx0ZXh0YXJlYScpLmNzcygnd2lkdGgnLCBwYXJhbXMud2lkdGgpO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMuY2xhc3NOYW1lKTtcblxuXHRcdGlmICh0aGlzLnRyaWdnZXIpIHtcblx0XHRcdHRoaXMuc2V0VHJpZ2dlclN0YXRlKHRoaXMudHJpZ2dlcigpKTtcblxuXHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy50cmlnZ2VyLnN1YnNjcmliZSh0aGlzLnNldFRyaWdnZXJTdGF0ZSwgdGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHNldFRyaWdnZXJTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmNsYXNzRm9yVHJpZ2dlcignc3VjY2VzcycpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJ2Vycm9yJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJycpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJzdHJhY3RJbnB1dCwgQWJzdHJhY3RJbnB1dCBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgQ2FwYSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQ2FwYUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFkZGl0aW9uYWxBY2NvdW50cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ3JhdmF0YXIgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmF0dGFjaG1lbnRUaHVtYm5haWxzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmlsdGVycyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGhlbWVzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5vcGVuUEdQID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlbXBsYXRlcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQWNjb3VudHMoU2V0dGluZ3MuY2FwYShDYXBhLkFkZGl0aW9uYWxBY2NvdW50cykpO1xuXHRcdHRoaXMuaWRlbnRpdGllcyhTZXR0aW5ncy5jYXBhKENhcGEuSWRlbnRpdGllcykpO1xuXHRcdHRoaXMuZ3JhdmF0YXIoU2V0dGluZ3MuY2FwYShDYXBhLkdyYXZhdGFyKSk7XG5cdFx0dGhpcy5hdHRhY2htZW50VGh1bWJuYWlscyhTZXR0aW5ncy5jYXBhKENhcGEuQXR0YWNobWVudFRodW1ibmFpbHMpKTtcblx0XHR0aGlzLnNpZXZlKFNldHRpbmdzLmNhcGEoQ2FwYS5TaWV2ZSkpO1xuXHRcdHRoaXMuZmlsdGVycyhTZXR0aW5ncy5jYXBhKENhcGEuRmlsdGVycykpO1xuXHRcdHRoaXMudGhlbWVzKFNldHRpbmdzLmNhcGEoQ2FwYS5UaGVtZXMpKTtcblx0XHR0aGlzLnVzZXJCYWNrZ3JvdW5kKFNldHRpbmdzLmNhcGEoQ2FwYS5Vc2VyQmFja2dyb3VuZCkpO1xuXHRcdHRoaXMub3BlblBHUChTZXR0aW5ncy5jYXBhKENhcGEuT3BlblBHUCkpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aChTZXR0aW5ncy5jYXBhKENhcGEuVHdvRmFjdG9yKSk7XG5cdFx0dGhpcy50d29GYWN0b3JBdXRoRm9yY2UoU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvckZvcmNlKSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXMoU2V0dGluZ3MuY2FwYShDYXBhLlRlbXBsYXRlcykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDYXBhQWRtaW5TdG9yZSgpO1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVApIHtcbiAgdmFyIHN0b3JlID0gbmV3IFdlYWtNYXAoKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQYWNrYWdlQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMucGFja2FnZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXHRcdHRoaXMucGFja2FnZXMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cblx0XHR0aGlzLnBhY2thZ2VzUmVhbCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5wYWNrYWdlc01haW5VcGRhdGFibGUgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQYWNrYWdlQWRtaW5TdG9yZSgpO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi50b1N0cmluZztcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGAzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICh0eXBlb2Ygc3RvcmUuaW5zcGVjdFNvdXJjZSAhPSAnZnVuY3Rpb24nKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGl0KTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZS5pbnNwZWN0U291cmNlO1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lm1vbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5wcm9ncmVzc0pzOyIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59O1xuXG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWSB8fCBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWTtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IHJlZ2V4cEZsYWdzLmNhbGwocmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCd5JywgJycpO1xuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gU3RyaW5nKHN0cikuc2xpY2UocmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIHN0cltyZS5sYXN0SW5kZXggLSAxXSAhPT0gJ1xcbicpKSB7XG4gICAgICAgIHNvdXJjZSA9ICcoPzogJyArIHNvdXJjZSArICcpJztcbiAgICAgICAgc3RyQ29weSA9ICcgJyArIHN0ckNvcHk7XG4gICAgICAgIGNoYXJzQWRkZWQrKztcbiAgICAgIH1cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBzdHIgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14oPzonICsgc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgfVxuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgc291cmNlICsgJyQoPyFcXFxccyknLCBmbGFncyk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IG1hdGNoLmlucHV0LnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaC5pbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgICAgcmUubGFzdEluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgIH0gZWxzZSByZS5sYXN0SW5kZXggPSAwO1xuICAgIH0gZWxzZSBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZS5sYXN0SW5kZXggPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuLy8gbGV0IHJhaW5sb29wQ2FjaGVzID0gd2luZG93LmNhY2hlcyAmJiB3aW5kb3cuY2FjaGVzLm9wZW4gPyB3aW5kb3cuY2FjaGVzIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3NyY30gc3JjXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFzeW5jID0gZmFsc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gamFzc2woc3JjLCBhc3luYyA9IGZhbHNlKSB7XG5cdGlmICghd2luZG93LlByb21pc2UgfHwgIXdpbmRvdy5Qcm9taXNlLmFsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgYXJlIG5vdCBhdmFpbGFibGUgeW91ciBlbnZpcm9ubWVudC4nKTtcblx0fVxuXG5cdGlmICghc3JjKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdzcmMgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0fVxuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cblx0XHRlbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHJlc29sdmUoc3JjKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihzcmMpKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5hc3luYyA9IHRydWUgPT09IGFzeW5jO1xuXHRcdGVsZW1lbnQuc3JjID0gc3JjO1xuXG5cdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH0pIC8qIC50aGVuKChzKSA9PiB7XG5cblx0XHRjb25zdCBmb3VuZCA9IHMgJiYgcmFpbmxvb3BDYWNoZXMgPyBzLm1hdGNoKC9yYWlubG9vcFxcL3ZcXC8oW15cXC9dKylcXC9zdGF0aWNcXC8vKSA6IG51bGw7XG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kWzFdKVxuXHRcdHtcblx0XHRcdHJhaW5sb29wQ2FjaGVzLm9wZW4oJ3JhaW5sb29wLW9mZmxpbmUtJyArIGZvdW5kWzFdKS50aGVuKFxuXHRcdFx0XHQoY2FjaGUpID0+IGNhY2hlLmFkZChzKVxuXHRcdFx0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJhaW5sb29wQ2FjaGVzID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzO1xuXHR9KSovO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFRoZW1lU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRoZW1lID0ga28ub2JzZXJ2YWJsZSgnJykuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMudGhlbWVzIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgdGhlbWVzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3RoZW1lcycpO1xuXG5cdFx0dGhpcy50aGVtZXMoaXNBcnJheSh0aGVtZXMpID8gdGhlbWVzIDogW10pO1xuXHRcdHRoaXMudGhlbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RoZW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmROYW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZVN0b3JlKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQbHVnaW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wbHVnaW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBsdWdpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5wbHVnaW5zLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbkFkbWluU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIExpY2Vuc2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saWNlbnNpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2luZ1Byb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2VWYWxpZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zZUV4cGlyZWQgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMubGljZW5zZUVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxpY2Vuc2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExpY2Vuc2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3IgPSBOYXRpdmVQcm9taXNlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyICRmZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xudmFyIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5O1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICB2YXIgR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSkge1xuICAgIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgIGlmIChWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gICAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIGlmICghSVNfTk9ERSAmJiB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ICE9ICdmdW5jdGlvbicpIHJldHVybiB0cnVlO1xuICB9XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFByb21pc2VDb25zdHJ1Y3RvcikpIHJldHVybiBmYWxzZTtcbiAgLy8gRGV0ZWN0IGNvcnJlY3RuZXNzIG9mIHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgdmFyIHByb21pc2UgPSBQcm9taXNlQ29uc3RydWN0b3IucmVzb2x2ZSgxKTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICByZXR1cm4gIShwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlKTtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UsIHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQocHJvbWlzZSwgc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmIChoYW5kbGVyID0gZ2xvYmFsWydvbicgKyBuYW1lXSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgcHJvbWlzZSwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4ocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHByb21pc2UsIHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHByb21pc2UsIHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAocHJvbWlzZSwgc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlc29sdmUsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZWplY3QsIHByb21pc2UsIHdyYXBwZXIsIHN0YXRlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaW50ZXJuYWxSZWplY3QocHJvbWlzZSwgd3JhcHBlciwgZXJyb3IsIHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gICAgICBzdGF0ZS5zdGF0ZSA9IEZVTEZJTExFRDtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBzdGF0ZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnRlcm5hbFJlamVjdChwcm9taXNlLCB7IGRvbmU6IGZhbHNlIH0sIGVycm9yLCBzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoRk9SQ0VEKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB0aGlzLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHRoaXMsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHRoaXMsIHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgICBzdGF0ZS5yZWFjdGlvbnMucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAoc3RhdGUuc3RhdGUgIT0gUEVORElORykgbm90aWZ5KHRoaXMsIHN0YXRlLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS5jYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBwcm9taXNlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBwcm9taXNlLCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiB0eXBlb2YgTmF0aXZlUHJvbWlzZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2UucHJvdG90eXBlLnRoZW47XG5cbiAgICAvLyB3cmFwIG5hdGl2ZSBQcm9taXNlI3RoZW4gZm9yIG5hdGl2ZSBhc3luYyBmdW5jdGlvbnNcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgLy8gd3JhcCBmZXRjaCByZXN1bHRcbiAgICBpZiAodHlwZW9mICRmZXRjaCA9PSAnZnVuY3Rpb24nKSAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShQcm9taXNlQ29uc3RydWN0b3IsICRmZXRjaC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgY2FwYWJpbGl0eS5yZWplY3QuY2FsbCh1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXByb21pc2UucmVzb2x2ZVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoSVNfUFVSRSAmJiB0aGlzID09PSBQcm9taXNlV3JhcHBlciA/IFByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogUFJPTUlTRSwgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgLy8gYFByb21pc2UuYWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFGdW5jdGlvbihDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUZ1bmN0aW9uKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgUFJFRkVSUkVEX1NUUklORykge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaW5wdXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVBSRUZFUlJFRF9TVFJJTkcgJiYgdHlwZW9mIChmbiA9IGlucHV0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCJ2YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy42LjQnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjAgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IHR5cGVvZiBkZXRlY3Rpb24gPT0gJ2Z1bmN0aW9uJyA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICByZXR1cm4gIVN0cmluZyhTeW1ib2woKSk7XG59KTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIHBvc3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiYgIWZhaWxzKHBvc3QpKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gLyhpcGhvbmV8aXBvZHxpcGFkKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbi8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuLy8gV2VleCBKUyBoYXMgZnJvemVuIGJ1aWx0LWluIHByb3RvdHlwZXMsIHNvIHVzZSB0cnkgLyBjYXRjaCB3cmFwcGVyXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoICE9PSAyIHx8IHJlc3VsdFswXSAhPT0gJ2EnIHx8IHJlc3VsdFsxXSAhPT0gJ2InO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjLCBzaGFtKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIShcbiAgICAgIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTICYmXG4gICAgICBSRVBMQUNFX0tFRVBTXyQwICYmXG4gICAgICAhUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICApKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0sIHtcbiAgICAgIFJFUExBQ0VfS0VFUFNfJDA6IFJFUExBQ0VfS0VFUFNfJDAsXG4gICAgICBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRTogUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkVcbiAgICB9KTtcbiAgICB2YXIgc3RyaW5nTWV0aG9kID0gbWV0aG9kc1swXTtcbiAgICB2YXIgcmVnZXhNZXRob2QgPSBtZXRob2RzWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJpbmdNZXRob2QpO1xuICAgIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcmVnZXhNZXRob2QuY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByZWdleE1ldGhvZC5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG5cbiAgaWYgKHNoYW0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHAucHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL2NsYXNzb2YtcmF3Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuXG4gIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG59O1xuXG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGNyb3Nzcm9hZHMgZnJvbSAnY3Jvc3Nyb2Fkcyc7XG5pbXBvcnQgeyBpc0FycmF5LCBpc05vbkVtcHR5QXJyYXksIG5vb3AgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTY3JlZW4ge1xuXHRvQ3Jvc3MgPSBudWxsO1xuXHRzU2NyZWVuTmFtZTtcblx0YVZpZXdNb2RlbHM7XG5cblx0Y29uc3RydWN0b3Ioc2NyZWVuTmFtZSwgdmlld01vZGVscyA9IFtdKSB7XG5cdFx0dGhpcy5zU2NyZWVuTmFtZSA9IHNjcmVlbk5hbWU7XG5cdFx0dGhpcy5hVmlld01vZGVscyA9IGlzQXJyYXkodmlld01vZGVscykgPyB2aWV3TW9kZWxzIDogW107XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge0FycmF5fVxuXHQgKi9cblx0dmlld01vZGVscygpIHtcblx0XHRyZXR1cm4gdGhpcy5hVmlld01vZGVscztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0c2NyZWVuTmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5zU2NyZWVuTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P0FycmF5KX1cblx0ICovXG5cdHJvdXRlcygpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7P09iamVjdH1cblx0ICovXG5cdF9fY3Jvc3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMub0Nyb3NzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0X19zdGFydCgpIHtcblx0XHRsZXQgcm91dGUgPSBudWxsLFxuXHRcdFx0Zk1hdGNoZXIgPSBudWxsO1xuXHRcdGNvbnN0IHJvdXRlcyA9IHRoaXMucm91dGVzKCk7XG5cblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJvdXRlcykpIHtcblx0XHRcdGZNYXRjaGVyID0gXy5iaW5kKHRoaXMub25Sb3V0ZSB8fCBub29wLCB0aGlzKTtcblx0XHRcdHJvdXRlID0gY3Jvc3Nyb2Fkcy5jcmVhdGUoKTtcblxuXHRcdFx0cm91dGVzLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKGl0ZW0gJiYgcm91dGUpIHtcblx0XHRcdFx0XHRyb3V0ZS5hZGRSb3V0ZShpdGVtWzBdLCBmTWF0Y2hlcikucnVsZXMgPSBpdGVtWzFdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5vQ3Jvc3MgPSByb3V0ZTtcblx0XHR9XG5cdH1cbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5zc207IiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXMoaGlkZGVuS2V5cywga2V5KSAmJiBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBpdGVyYXRlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGZuLCB0aGF0LCBBU19FTlRSSUVTLCBJU19JVEVSQVRPUikge1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoZm4sIHRoYXQsIEFTX0VOVFJJRVMgPyAyIDogMSk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBBU19FTlRSSUVTXG4gICAgICAgICAgPyBib3VuZEZ1bmN0aW9uKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKVxuICAgICAgICAgIDogYm91bmRGdW5jdGlvbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHJlc3VsdCA9IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIGJvdW5kRnVuY3Rpb24sIHN0ZXAudmFsdWUsIEFTX0VOVFJJRVMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcblxuaXRlcmF0ZS5zdG9wID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCByZXN1bHQpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgU3BlY2llc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgRG9tYWluQWRtaW5TdG9yZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5kb21haW5zLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAndGhyb3R0bGUnOiAxMDAgfSk7XG5cdFx0dGhpcy5kb21haW5zV2l0aG91dEFsaWFzZXMgPSBrby5jb21wdXRlZCgoKSA9PiBfLmZpbHRlcih0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgIWl0ZW0uYWxpYXMpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRG9tYWluQWRtaW5TdG9yZSgpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgKi9cbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBkb2N1bWVudC5kb21haW4gJiYgbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IGFjdGl2ZVhEb2N1bWVudCA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpO1xuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdICsgbWF0Y2hbMV07XG59IGVsc2UgaWYgKHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY2xhc3NvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJPdXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgSVNfRklMVEVSX09VVCA9IFRZUEUgPT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9PVVQgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlck91dFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyT3V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlck91dDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9jb25jYXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuY3Jvc3Nyb2FkczsiLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdENoZWNrYm94IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyA9IHt9XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMgPSB7fSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLnZhbHVlID0gcGFyYW1zLnZhbHVlO1xuXHRcdGlmIChpc1VuZCh0aGlzLnZhbHVlKSB8fCAhdGhpcy52YWx1ZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMudmFsdWUgPSBrby5vYnNlcnZhYmxlKGlzVW5kKHRoaXMudmFsdWUpID8gZmFsc2UgOiAhIXRoaXMudmFsdWUpO1xuXHRcdH1cblxuXHRcdHRoaXMuZW5hYmxlID0gcGFyYW1zLmVuYWJsZTtcblx0XHRpZiAoaXNVbmQodGhpcy5lbmFibGUpIHx8ICF0aGlzLmVuYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZW5hYmxlID0ga28ub2JzZXJ2YWJsZShpc1VuZCh0aGlzLmVuYWJsZSkgPyB0cnVlIDogISF0aGlzLmVuYWJsZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNhYmxlID0gcGFyYW1zLmRpc2FibGU7XG5cdFx0aWYgKGlzVW5kKHRoaXMuZGlzYWJsZSkgfHwgIXRoaXMuZGlzYWJsZS5zdWJzY3JpYmUpIHtcblx0XHRcdHRoaXMuZGlzYWJsZSA9IGtvLm9ic2VydmFibGUoaXNVbmQodGhpcy5kaXNhYmxlKSA/IGZhbHNlIDogISF0aGlzLmRpc2FibGUpO1xuXHRcdH1cblxuXHRcdHRoaXMubGFiZWwgPSBwYXJhbXMubGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblxuXHRcdHRoaXMucmVhZE9ubHkgPSBpc1VuZChwYXJhbXMucmVhZE9ubHkpID8gZmFsc2UgOiAhIXBhcmFtcy5yZWFkT25seTtcblx0XHR0aGlzLmludmVydGVkID0gaXNVbmQocGFyYW1zLmludmVydGVkKSA/IGZhbHNlIDogISFwYXJhbXMuaW52ZXJ0ZWQ7XG5cblx0XHR0aGlzLmxhYmVsZWQgPSAhaXNVbmQocGFyYW1zLmxhYmVsKTtcblx0XHR0aGlzLmxhYmVsQW5pbWF0ZWQgPSAhIXBhcmFtcy5sYWJlbEFuaW1hdGVkO1xuXHR9XG5cblx0Y2xpY2soKSB7XG5cdFx0aWYgKCF0aGlzLnJlYWRPbmx5ICYmIHRoaXMuZW5hYmxlKCkgJiYgIXRoaXMuZGlzYWJsZSgpKSB7XG5cdFx0XHR0aGlzLnZhbHVlKCF0aGlzLnZhbHVlKCkpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdENoZWNrYm94LCBBYnN0cmFjdENoZWNrYm94IGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2U7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8qKlxuICogUGFyc2VzIHN0cnVjdHVyZWQgZS1tYWlsIGFkZHJlc3NlcyBmcm9tIGFuIGFkZHJlc3MgZmllbGRcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqICAgIFwiTmFtZSA8YWRkcmVzc0Bkb21haW4+XCJcbiAqXG4gKiB3aWxsIGJlIGNvbnZlcnRlZCB0b1xuICpcbiAqICAgICBbe25hbWU6IFwiTmFtZVwiLCBhZGRyZXNzOiBcImFkZHJlc3NAZG9tYWluXCJ9XVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZFxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIGFkZHJlc3Mgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgdmFyIHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoc3RyKTtcbiAgdmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZSgpO1xuXG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGFkZHJlc3MgPSBbXTtcbiAgdmFyIHBhcnNlZEFkZHJlc3NlcyA9IFtdO1xuXG4gIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xuICAgIGlmICh0b2tlbi50eXBlID09PSAnb3BlcmF0b3InICYmICh0b2tlbi52YWx1ZSA9PT0gJywnIHx8IHRva2VuLnZhbHVlID09PSAnOycpKSB7XG4gICAgICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgYWRkcmVzc2VzLnB1c2goYWRkcmVzcyk7XG4gICAgICB9XG4gICAgICBhZGRyZXNzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZHJlc3MucHVzaCh0b2tlbik7XG4gICAgfVxuICB9KTtcblxuICBpZiAoYWRkcmVzcy5sZW5ndGgpIHtcbiAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgfVxuXG4gIGFkZHJlc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChhZGRyZXNzKSB7XG4gICAgYWRkcmVzcyA9IF9oYW5kbGVBZGRyZXNzKGFkZHJlc3MpO1xuICAgIGlmIChhZGRyZXNzLmxlbmd0aCkge1xuICAgICAgcGFyc2VkQWRkcmVzc2VzID0gcGFyc2VkQWRkcmVzc2VzLmNvbmNhdChhZGRyZXNzKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWRBZGRyZXNzZXM7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIHRva2VucyBmb3IgYSBzaW5nbGUgYWRkcmVzcyBpbnRvIGFuIGFkZHJlc3Mgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtBcnJheX0gdG9rZW5zIFRva2VucyBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gQWRkcmVzcyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gX2hhbmRsZUFkZHJlc3ModG9rZW5zKSB7XG4gIHZhciBpc0dyb3VwID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9ICd0ZXh0JztcbiAgdmFyIGFkZHJlc3MgPSB2b2lkIDA7XG4gIHZhciBhZGRyZXNzZXMgPSBbXTtcbiAgdmFyIGRhdGEgPSB7XG4gICAgYWRkcmVzczogW10sXG4gICAgY29tbWVudDogW10sXG4gICAgZ3JvdXA6IFtdLFxuICAgIHRleHQ6IFtdXG5cbiAgICAvLyBGaWx0ZXIgb3V0IDxhZGRyZXNzZXM+LCAoY29tbWVudHMpIGFuZCByZWd1bGFyIHRleHRcbiAgfTtmb3IgKHZhciBpID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG4gICAgaWYgKHRva2VuLnR5cGUgPT09ICdvcGVyYXRvcicpIHtcbiAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgc3RhdGUgPSAnYWRkcmVzcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJygnOlxuICAgICAgICAgIHN0YXRlID0gJ2NvbW1lbnQnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICc6JzpcbiAgICAgICAgICBzdGF0ZSA9ICdncm91cCc7XG4gICAgICAgICAgaXNHcm91cCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3RhdGUgPSAndGV4dCc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICBkYXRhW3N0YXRlXS5wdXNoKHRva2VuLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBJZiB0aGVyZSBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQsIHJlcGxhY2UgdGhlIHR3b1xuICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgIGRhdGEudGV4dCA9IGRhdGEuY29tbWVudDtcbiAgICBkYXRhLmNvbW1lbnQgPSBbXTtcbiAgfVxuXG4gIGlmIChpc0dyb3VwKSB7XG4gICAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNhcHBlbmRpeC1BLjEuM1xuICAgIGRhdGEudGV4dCA9IGRhdGEudGV4dC5qb2luKCcgJyk7XG4gICAgYWRkcmVzc2VzLnB1c2goe1xuICAgICAgbmFtZTogZGF0YS50ZXh0IHx8IGFkZHJlc3MgJiYgYWRkcmVzcy5uYW1lLFxuICAgICAgZ3JvdXA6IGRhdGEuZ3JvdXAubGVuZ3RoID8gcGFyc2UoZGF0YS5ncm91cC5qb2luKCcsJykpIDogW11cbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBubyBhZGRyZXNzIHdhcyBmb3VuZCwgdHJ5IHRvIGRldGVjdCBvbmUgZnJvbSByZWd1bGFyIHRleHRcbiAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGggJiYgZGF0YS50ZXh0Lmxlbmd0aCkge1xuICAgICAgZm9yICh2YXIgX2kgPSBkYXRhLnRleHQubGVuZ3RoIC0gMTsgX2kgPj0gMDsgX2ktLSkge1xuICAgICAgICBpZiAoZGF0YS50ZXh0W19pXS5tYXRjaCgvXlteQFxcc10rQFteQFxcc10rJC8pKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gZGF0YS50ZXh0LnNwbGljZShfaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIF9yZWdleEhhbmRsZXIgPSBmdW5jdGlvbiBfcmVnZXhIYW5kbGVyKGFkZHJlc3MpIHtcbiAgICAgICAgaWYgKCFkYXRhLmFkZHJlc3MubGVuZ3RoKSB7XG4gICAgICAgICAgZGF0YS5hZGRyZXNzID0gW2FkZHJlc3MudHJpbSgpXTtcbiAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBzdGlsbCBubyBhZGRyZXNzXG4gICAgICBpZiAoIWRhdGEuYWRkcmVzcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgX2kyID0gZGF0YS50ZXh0Lmxlbmd0aCAtIDE7IF9pMiA+PSAwOyBfaTItLSkge1xuICAgICAgICAgIGRhdGEudGV4dFtfaTJdID0gZGF0YS50ZXh0W19pMl0ucmVwbGFjZSgvXFxzKlxcYlteQFxcc10rQFteQFxcc10rXFxiXFxzKi8sIF9yZWdleEhhbmRsZXIpLnRyaW0oKTtcbiAgICAgICAgICBpZiAoZGF0YS5hZGRyZXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBzdGlsbCBpcyBubyB0ZXh0IGJ1dCBhIGNvbW1lbnQgZXhpeHRzLCByZXBsYWNlIHRoZSB0d29cbiAgICBpZiAoIWRhdGEudGV4dC5sZW5ndGggJiYgZGF0YS5jb21tZW50Lmxlbmd0aCkge1xuICAgICAgZGF0YS50ZXh0ID0gZGF0YS5jb21tZW50O1xuICAgICAgZGF0YS5jb21tZW50ID0gW107XG4gICAgfVxuXG4gICAgLy8gS2VlcCBvbmx5IHRoZSBmaXJzdCBhZGRyZXNzIG9jY3VyZW5jZSwgcHVzaCBvdGhlcnMgdG8gcmVndWxhciB0ZXh0XG4gICAgaWYgKGRhdGEuYWRkcmVzcy5sZW5ndGggPiAxKSB7XG4gICAgICBkYXRhLnRleHQgPSBkYXRhLnRleHQuY29uY2F0KGRhdGEuYWRkcmVzcy5zcGxpY2UoMSkpO1xuICAgIH1cblxuICAgIC8vIEpvaW4gdmFsdWVzIHdpdGggc3BhY2VzXG4gICAgZGF0YS50ZXh0ID0gZGF0YS50ZXh0LmpvaW4oJyAnKTtcbiAgICBkYXRhLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3Muam9pbignICcpO1xuXG4gICAgaWYgKCFkYXRhLmFkZHJlc3MgJiYgaXNHcm91cCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGRyZXNzID0ge1xuICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MgfHwgZGF0YS50ZXh0IHx8ICcnLFxuICAgICAgICBuYW1lOiBkYXRhLnRleHQgfHwgZGF0YS5hZGRyZXNzIHx8ICcnXG4gICAgICB9O1xuXG4gICAgICBpZiAoYWRkcmVzcy5hZGRyZXNzID09PSBhZGRyZXNzLm5hbWUpIHtcbiAgICAgICAgaWYgKChhZGRyZXNzLmFkZHJlc3MgfHwgJycpLm1hdGNoKC9ALykpIHtcbiAgICAgICAgICBhZGRyZXNzLm5hbWUgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRyZXNzLmFkZHJlc3MgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRyZXNzZXMucHVzaChhZGRyZXNzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWRkcmVzc2VzO1xufTtcblxuLypcbiAqIE9wZXJhdG9yIHRva2VucyBhbmQgd2hpY2ggdG9rZW5zIGFyZSBleHBlY3RlZCB0byBlbmQgdGhlIHNlcXVlbmNlXG4gKi9cbnZhciBPUEVSQVRPUlMgPSB7XG4gICdcIic6ICdcIicsXG4gICcoJzogJyknLFxuICAnPCc6ICc+JyxcbiAgJywnOiAnJyxcbiAgLy8gR3JvdXBzIGFyZSBlbmRlZCBieSBzZW1pY29sb25zXG4gICc6JzogJzsnLFxuICAvLyBTZW1pY29sb25zIGFyZSBub3QgYSBsZWdhbCBkZWxpbWl0ZXIgcGVyIHRoZSBSRkMyODIyIGdyYW1tYXIgb3RoZXJcbiAgLy8gdGhhbiBmb3IgdGVybWluYXRpbmcgYSBncm91cCwgYnV0IHRoZXkgYXJlIGFsc28gbm90IHZhbGlkIGZvciBhbnlcbiAgLy8gb3RoZXIgdXNlIGluIHRoaXMgY29udGV4dC4gIEdpdmVuIHRoYXQgc29tZSBtYWlsIGNsaWVudHMgaGF2ZVxuICAvLyBoaXN0b3JpY2FsbHkgYWxsb3dlZCB0aGUgc2VtaWNvbG9uIGFzIGEgZGVsaW1pdGVyIGVxdWl2YWxlbnQgdG8gdGhlXG4gIC8vIGNvbW1hIGluIHRoZWlyIFVJLCBpdCBtYWtlcyBzZW5zZSB0byB0cmVhdCB0aGVtIHRoZSBzYW1lIGFzIGEgY29tbWFcbiAgLy8gd2hlbiB1c2VkIG91dHNpZGUgb2YgYSBncm91cC5cbiAgJzsnOiAnJ1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVG9rZW5pemVyIG9iamVjdCBmb3IgdG9rZW5pemluZyBhZGRyZXNzIGZpZWxkIHN0cmluZ3NcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgQWRkcmVzcyBmaWVsZCBzdHJpbmdcbiAgICovXG59O1xudmFyIFRva2VuaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVG9rZW5pemVyKHN0cikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUb2tlbml6ZXIpO1xuXG4gICAgdGhpcy5zdHIgPSAoc3RyIHx8ICcnKS50b1N0cmluZygpO1xuICAgIHRoaXMub3BlcmF0b3JDdXJyZW50ID0gJyc7XG4gICAgdGhpcy5vcGVyYXRvckV4cGVjdGluZyA9ICcnO1xuICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgdGhpcy5saXN0ID0gW107XG4gIH1cblxuICAvKipcbiAgICogVG9rZW5pemVzIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmdcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9wZXJhdG9yfHRleHQgdG9rZW5zXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKFRva2VuaXplciwgW3tcbiAgICBrZXk6ICd0b2tlbml6ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRva2VuaXplKCkge1xuICAgICAgdmFyIGNociA9IHZvaWQgMDtcbiAgICAgIHZhciBsaXN0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5zdHIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY2hyID0gdGhpcy5zdHIuY2hhckF0KGkpO1xuICAgICAgICB0aGlzLmNoZWNrQ2hhcihjaHIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxpc3QuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gKG5vZGUudmFsdWUgfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgIGxpc3QucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGNoYXJhY3RlciBpcyBhbiBvcGVyYXRvciBvciB0ZXh0IGFuZCBhY3RzIGFjY29yZGluZ2x5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY2hyIENoYXJhY3RlciBmcm9tIHRoZSBhZGRyZXNzIGZpZWxkXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogJ2NoZWNrQ2hhcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoZWNrQ2hhcihjaHIpIHtcbiAgICAgIGlmICgoY2hyIGluIE9QRVJBVE9SUyB8fCBjaHIgPT09ICdcXFxcJykgJiYgdGhpcy5lc2NhcGVkKSB7XG4gICAgICAgIHRoaXMuZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm9wZXJhdG9yRXhwZWN0aW5nICYmIGNociA9PT0gdGhpcy5vcGVyYXRvckV4cGVjdGluZykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSAnJztcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3BlcmF0b3JFeHBlY3RpbmcgJiYgY2hyIGluIE9QRVJBVE9SUykge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ29wZXJhdG9yJyxcbiAgICAgICAgICB2YWx1ZTogY2hyXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHRoaXMubm9kZSk7XG4gICAgICAgIHRoaXMubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMub3BlcmF0b3JFeHBlY3RpbmcgPSBPUEVSQVRPUlNbY2hyXTtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmVzY2FwZWQgJiYgY2hyID09PSAnXFxcXCcpIHtcbiAgICAgICAgdGhpcy5lc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMubm9kZSkge1xuICAgICAgICB0aGlzLm5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxpc3QucHVzaCh0aGlzLm5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5lc2NhcGVkICYmIGNociAhPT0gJ1xcXFwnKSB7XG4gICAgICAgIHRoaXMubm9kZS52YWx1ZSArPSAnXFxcXCc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubm9kZS52YWx1ZSArPSBjaHI7XG4gICAgICB0aGlzLmVzY2FwZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVG9rZW5pemVyO1xufSgpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUwzTnlZeTloWkdSeVpYTnpjR0Z5YzJWeUxtcHpJbDBzSW01aGJXVnpJanBiSW5CaGNuTmxJaXdpYzNSeUlpd2lkRzlyWlc1cGVtVnlJaXdpVkc5clpXNXBlbVZ5SWl3aWRHOXJaVzV6SWl3aWRHOXJaVzVwZW1VaUxDSmhaR1J5WlhOelpYTWlMQ0poWkdSeVpYTnpJaXdpY0dGeWMyVmtRV1JrY21WemMyVnpJaXdpWm05eVJXRmphQ0lzSW5SdmEyVnVJaXdpZEhsd1pTSXNJblpoYkhWbElpd2liR1Z1WjNSb0lpd2ljSFZ6YUNJc0lsOW9ZVzVrYkdWQlpHUnlaWE56SWl3aVkyOXVZMkYwSWl3aWFYTkhjbTkxY0NJc0luTjBZWFJsSWl3aVpHRjBZU0lzSW1OdmJXMWxiblFpTENKbmNtOTFjQ0lzSW5SbGVIUWlMQ0pwSWl3aWJHVnVJaXdpYW05cGJpSXNJbTVoYldVaUxDSnRZWFJqYUNJc0luTndiR2xqWlNJc0lsOXlaV2RsZUVoaGJtUnNaWElpTENKMGNtbHRJaXdpY21Wd2JHRmpaU0lzSWs5UVJWSkJWRTlTVXlJc0luUnZVM1J5YVc1bklpd2liM0JsY21GMGIzSkRkWEp5Wlc1MElpd2liM0JsY21GMGIzSkZlSEJsWTNScGJtY2lMQ0p1YjJSbElpd2laWE5qWVhCbFpDSXNJbXhwYzNRaUxDSmphSElpTENKamFHRnlRWFFpTENKamFHVmphME5vWVhJaVhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPMnRDUVdOM1FrRXNTenM3T3p0QlFXUjRRanM3T3pzN096czdPenM3T3pzN1FVRmpaU3hUUVVGVFFTeExRVUZVTEVOQlFXZENReXhIUVVGb1FpeEZRVUZ4UWp0QlFVTnNReXhOUVVGTlF5eFpRVUZaTEVsQlFVbERMRk5CUVVvc1EwRkJZMFlzUjBGQlpDeERRVUZzUWp0QlFVTkJMRTFCUVUxSExGTkJRVk5HTEZWQlFWVkhMRkZCUVZZc1JVRkJaanM3UVVGRlFTeE5RVUZOUXl4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlNVTXNWVUZCVlN4RlFVRmtPMEZCUTBFc1RVRkJTVU1zYTBKQlFXdENMRVZCUVhSQ096dEJRVVZCU2l4VFFVRlBTeXhQUVVGUUxFTkJRV1VzVlVGQlZVTXNTMEZCVml4RlFVRnBRanRCUVVNNVFpeFJRVUZKUVN4TlFVRk5ReXhKUVVGT0xFdEJRV1VzVlVGQlppeExRVUU0UWtRc1RVRkJUVVVzUzBGQlRpeExRVUZuUWl4SFFVRm9RaXhKUVVGMVFrWXNUVUZCVFVVc1MwRkJUaXhMUVVGblFpeEhRVUZ5UlN4RFFVRktMRVZCUVN0Rk8wRkJRemRGTEZWQlFVbE1MRkZCUVZGTkxFMUJRVm9zUlVGQmIwSTdRVUZEYkVKUUxHdENRVUZWVVN4SlFVRldMRU5CUVdWUUxFOUJRV1k3UVVGRFJEdEJRVU5FUVN4blFrRkJWU3hGUVVGV08wRkJRMFFzUzBGTVJDeE5RVXRQTzBGQlEweEJMR05CUVZGUExFbEJRVklzUTBGQllVb3NTMEZCWWp0QlFVTkVPMEZCUTBZc1IwRlVSRHM3UVVGWFFTeE5RVUZKU0N4UlFVRlJUU3hOUVVGYUxFVkJRVzlDTzBGQlEyeENVQ3hqUVVGVlVTeEpRVUZXTEVOQlFXVlFMRTlCUVdZN1FVRkRSRHM3UVVGRlJFUXNXVUZCVlVjc1QwRkJWaXhEUVVGclFpeFZRVUZWUml4UFFVRldMRVZCUVcxQ08wRkJRMjVEUVN4alFVRlZVU3hsUVVGbFVpeFBRVUZtTEVOQlFWWTdRVUZEUVN4UlFVRkpRU3hSUVVGUlRTeE5RVUZhTEVWQlFXOUNPMEZCUTJ4Q1RDeDNRa0ZCYTBKQkxHZENRVUZuUWxFc1RVRkJhRUlzUTBGQmRVSlVMRTlCUVhaQ0xFTkJRV3hDTzBGQlEwUTdRVUZEUml4SFFVeEVPenRCUVU5QkxGTkJRVTlETEdWQlFWQTdRVUZEUkRzN1FVRkZSRHM3T3pzN08wRkJUVUVzVTBGQlUwOHNZMEZCVkN4RFFVRjVRbGdzVFVGQmVrSXNSVUZCYVVNN1FVRkRMMElzVFVGQlNXRXNWVUZCVlN4TFFVRmtPMEZCUTBFc1RVRkJTVU1zVVVGQlVTeE5RVUZhTzBGQlEwRXNUVUZCU1Znc1owSkJRVW83UVVGRFFTeE5RVUZOUkN4WlFVRlpMRVZCUVd4Q08wRkJRMEVzVFVGQlRXRXNUMEZCVHp0QlFVTllXaXhoUVVGVExFVkJSRVU3UVVGRldHRXNZVUZCVXl4RlFVWkZPMEZCUjFoRExGZEJRVThzUlVGSVNUdEJRVWxZUXl4VlFVRk5PenRCUVVkU08wRkJVR0VzUjBGQllpeERRVkZCTEV0QlFVc3NTVUZCU1VNc1NVRkJTU3hEUVVGU0xFVkJRVmRETEUxQlFVMXdRaXhQUVVGUFV5eE5RVUUzUWl4RlFVRnhRMVVzU1VGQlNVTXNSMEZCZWtNc1JVRkJPRU5FTEVkQlFUbERMRVZCUVcxRU8wRkJRMnBFTEZGQlFVMWlMRkZCUVZGT0xFOUJRVTl0UWl4RFFVRlFMRU5CUVdRN08wRkJSVUVzVVVGQlNXSXNUVUZCVFVNc1NVRkJUaXhMUVVGbExGVkJRVzVDTEVWQlFTdENPMEZCUXpkQ0xHTkJRVkZFTEUxQlFVMUZMRXRCUVdRN1FVRkRSU3hoUVVGTExFZEJRVXc3UVVGRFJVMHNhMEpCUVZFc1UwRkJVanRCUVVOQk8wRkJRMFlzWVVGQlN5eEhRVUZNTzBGQlEwVkJMR3RDUVVGUkxGTkJRVkk3UVVGRFFUdEJRVU5HTEdGQlFVc3NSMEZCVER0QlFVTkZRU3hyUWtGQlVTeFBRVUZTTzBGQlEwRkVMRzlDUVVGVkxFbEJRVlk3UVVGRFFUdEJRVU5HTzBGQlEwVkRMR3RDUVVGUkxFMUJRVkk3UVVGYVNqdEJRV05FTEV0QlprUXNUVUZsVHp0QlFVTk1MRlZCUVVsU0xFMUJRVTFGTEV0QlFWWXNSVUZCYVVJN1FVRkRaazhzWVVGQlMwUXNTMEZCVEN4RlFVRlpTaXhKUVVGYUxFTkJRV2xDU2l4TlFVRk5SU3hMUVVGMlFqdEJRVU5FTzBGQlEwWTdRVUZEUmpzN1FVRkZSRHRCUVVOQkxFMUJRVWtzUTBGQlEwOHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUZZTEVsQlFYRkNUU3hMUVVGTFF5eFBRVUZNTEVOQlFXRlFMRTFCUVhSRExFVkJRVGhETzBGQlF6VkRUU3hUUVVGTFJ5eEpRVUZNTEVkQlFWbElMRXRCUVV0RExFOUJRV3BDTzBGQlEwRkVMRk5CUVV0RExFOUJRVXdzUjBGQlpTeEZRVUZtTzBGQlEwUTdPMEZCUlVRc1RVRkJTVWdzVDBGQlNpeEZRVUZoTzBGQlExZzdRVUZEUVVVc1UwRkJTMGNzU1VGQlRDeEhRVUZaU0N4TFFVRkxSeXhKUVVGTUxFTkJRVlZITEVsQlFWWXNRMEZCWlN4SFFVRm1MRU5CUVZvN1FVRkRRVzVDTEdOQlFWVlJMRWxCUVZZc1EwRkJaVHRCUVVOaVdTeFpRVUZOVUN4TFFVRkxSeXhKUVVGTUxFbEJRV05tTEZkQlFWZEJMRkZCUVZGdFFpeEpRVVF4UWp0QlFVVmlUQ3hoUVVGUFJpeExRVUZMUlN4TFFVRk1MRU5CUVZkU0xFMUJRVmdzUjBGQmIwSmlMRTFCUVUxdFFpeExRVUZMUlN4TFFVRk1MRU5CUVZkSkxFbEJRVmdzUTBGQlowSXNSMEZCYUVJc1EwRkJUaXhEUVVGd1FpeEhRVUZyUkR0QlFVWTFReXhMUVVGbU8wRkJTVVFzUjBGUVJDeE5RVTlQTzBGQlEwdzdRVUZEUVN4UlFVRkpMRU5CUVVOT0xFdEJRVXRhTEU5QlFVd3NRMEZCWVUwc1RVRkJaQ3hKUVVGM1FrMHNTMEZCUzBjc1NVRkJUQ3hEUVVGVlZDeE5RVUYwUXl4RlFVRTRRenRCUVVNMVF5eFhRVUZMTEVsQlFVbFZMRXRCUVVsS0xFdEJRVXRITEVsQlFVd3NRMEZCVlZRc1RVRkJWaXhIUVVGdFFpeERRVUZvUXl4RlFVRnRRMVVzVFVGQlN5eERRVUY0UXl4RlFVRXlRMEVzU1VGQk0wTXNSVUZCWjBRN1FVRkRPVU1zV1VGQlNVb3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlF5eEZRVUZXTEVWQlFXRkpMRXRCUVdJc1EwRkJiVUlzYlVKQlFXNUNMRU5CUVVvc1JVRkJOa003UVVGRE0wTlNMR1ZCUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzBjc1NVRkJUQ3hEUVVGVlRTeE5RVUZXTEVOQlFXbENUQ3hGUVVGcVFpeEZRVUZ2UWl4RFFVRndRaXhEUVVGbU8wRkJRMEU3UVVGRFJEdEJRVU5HT3p0QlFVVkVMRlZCUVVsTkxHZENRVUZuUWl4VFFVRm9Ra0VzWVVGQlowSXNRMEZCVlhSQ0xFOUJRVllzUlVGQmJVSTdRVUZEY2tNc1dVRkJTU3hEUVVGRFdTeExRVUZMV2l4UFFVRk1MRU5CUVdGTkxFMUJRV3hDTEVWQlFUQkNPMEZCUTNoQ1RTeGxRVUZMV2l4UFFVRk1MRWRCUVdVc1EwRkJRMEVzVVVGQlVYVkNMRWxCUVZJc1JVRkJSQ3hEUVVGbU8wRkJRMEVzYVVKQlFVOHNSMEZCVUR0QlFVTkVMRk5CU0VRc1RVRkhUenRCUVVOTUxHbENRVUZQZGtJc1QwRkJVRHRCUVVORU8wRkJRMFlzVDBGUVJEczdRVUZUUVR0QlFVTkJMRlZCUVVrc1EwRkJRMWtzUzBGQlMxb3NUMEZCVEN4RFFVRmhUU3hOUVVGc1FpeEZRVUV3UWp0QlFVTjRRaXhoUVVGTExFbEJRVWxWTEUxQlFVbEtMRXRCUVV0SExFbEJRVXdzUTBGQlZWUXNUVUZCVml4SFFVRnRRaXhEUVVGb1F5eEZRVUZ0UTFVc1QwRkJTeXhEUVVGNFF5eEZRVUV5UTBFc1MwRkJNME1zUlVGQlowUTdRVUZET1VOS0xHVkJRVXRITEVsQlFVd3NRMEZCVlVNc1IwRkJWaXhKUVVGbFNpeExRVUZMUnl4SlFVRk1MRU5CUVZWRExFZEJRVllzUlVGQllWRXNUMEZCWWl4RFFVRnhRaXd5UWtGQmNrSXNSVUZCYTBSR0xHRkJRV3hFTEVWQlFXbEZReXhKUVVGcVJTeEZRVUZtTzBGQlEwRXNZMEZCU1Znc1MwRkJTMW9zVDBGQlRDeERRVUZoVFN4TlFVRnFRaXhGUVVGNVFqdEJRVU4yUWp0QlFVTkVPMEZCUTBZN1FVRkRSanRCUVVOR096dEJRVVZFTzBGQlEwRXNVVUZCU1N4RFFVRkRUU3hMUVVGTFJ5eEpRVUZNTEVOQlFWVlVMRTFCUVZnc1NVRkJjVUpOTEV0QlFVdERMRTlCUVV3c1EwRkJZVkFzVFVGQmRFTXNSVUZCT0VNN1FVRkROVU5OTEZkQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwTXNUMEZCYWtJN1FVRkRRVVFzVjBGQlMwTXNUMEZCVEN4SFFVRmxMRVZCUVdZN1FVRkRSRHM3UVVGRlJEdEJRVU5CTEZGQlFVbEVMRXRCUVV0YUxFOUJRVXdzUTBGQllVMHNUVUZCWWl4SFFVRnpRaXhEUVVFeFFpeEZRVUUyUWp0QlFVTXpRazBzVjBGQlMwY3NTVUZCVEN4SFFVRlpTQ3hMUVVGTFJ5eEpRVUZNTEVOQlFWVk9MRTFCUVZZc1EwRkJhVUpITEV0QlFVdGFMRTlCUVV3c1EwRkJZWEZDTEUxQlFXSXNRMEZCYjBJc1EwRkJjRUlzUTBGQmFrSXNRMEZCV2p0QlFVTkVPenRCUVVWRU8wRkJRMEZVTEZOQlFVdEhMRWxCUVV3c1IwRkJXVWdzUzBGQlMwY3NTVUZCVEN4RFFVRlZSeXhKUVVGV0xFTkJRV1VzUjBGQlppeERRVUZhTzBGQlEwRk9MRk5CUVV0YUxFOUJRVXdzUjBGQlpWa3NTMEZCUzFvc1QwRkJUQ3hEUVVGaGEwSXNTVUZCWWl4RFFVRnJRaXhIUVVGc1FpeERRVUZtT3p0QlFVVkJMRkZCUVVrc1EwRkJRMDRzUzBGQlMxb3NUMEZCVGl4SlFVRnBRbFVzVDBGQmNrSXNSVUZCT0VJN1FVRkROVUlzWVVGQlR5eEZRVUZRTzBGQlEwUXNTMEZHUkN4TlFVVlBPMEZCUTB4V0xHZENRVUZWTzBGQlExSkJMR2xDUVVGVFdTeExRVUZMV2l4UFFVRk1MRWxCUVdkQ1dTeExRVUZMUnl4SlFVRnlRaXhKUVVFMlFpeEZRVVE1UWp0QlFVVlNTU3hqUVVGTlVDeExRVUZMUnl4SlFVRk1MRWxCUVdGSUxFdEJRVXRhTEU5QlFXeENMRWxCUVRaQ08wRkJSak5DTEU5QlFWWTdPMEZCUzBFc1ZVRkJTVUVzVVVGQlVVRXNUMEZCVWl4TFFVRnZRa0VzVVVGQlVXMUNMRWxCUVdoRExFVkJRWE5ETzBGQlEzQkRMRmxCUVVrc1EwRkJRMjVDTEZGQlFWRkJMRTlCUVZJc1NVRkJiVUlzUlVGQmNFSXNSVUZCZDBKdlFpeExRVUY0UWl4RFFVRTRRaXhIUVVFNVFpeERRVUZLTEVWQlFYZERPMEZCUTNSRGNFSXNhMEpCUVZGdFFpeEpRVUZTTEVkQlFXVXNSVUZCWmp0QlFVTkVMRk5CUmtRc1RVRkZUenRCUVVOTWJrSXNhMEpCUVZGQkxFOUJRVklzUjBGQmEwSXNSVUZCYkVJN1FVRkRSRHRCUVVOR096dEJRVVZFUkN4blFrRkJWVkVzU1VGQlZpeERRVUZsVUN4UFFVRm1PMEZCUTBRN1FVRkRSanM3UVVGRlJDeFRRVUZQUkN4VFFVRlFPMEZCUTBRN08wRkJSVVE3T3p0QlFVZEJMRWxCUVUwd1FpeFpRVUZaTzBGQlEyaENMRTlCUVVzc1IwRkVWenRCUVVWb1FpeFBRVUZMTEVkQlJsYzdRVUZIYUVJc1QwRkJTeXhIUVVoWE8wRkJTV2hDTEU5QlFVc3NSVUZLVnp0QlFVdG9RanRCUVVOQkxFOUJRVXNzUjBGT1Z6dEJRVTlvUWp0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFTeFBRVUZMT3p0QlFVZFFPenM3T3pzN1FVRm9RbXRDTEVOQlFXeENPMGxCYzBKTk4wSXNVenRCUVVOS0xIRkNRVUZoUml4SFFVRmlMRVZCUVd0Q08wRkJRVUU3TzBGQlEyaENMRk5CUVV0QkxFZEJRVXdzUjBGQlZ5eERRVUZEUVN4UFFVRlBMRVZCUVZJc1JVRkJXV2RETEZGQlFWb3NSVUZCV0R0QlFVTkJMRk5CUVV0RExHVkJRVXdzUjBGQmRVSXNSVUZCZGtJN1FVRkRRU3hUUVVGTFF5eHBRa0ZCVEN4SFFVRjVRaXhGUVVGNlFqdEJRVU5CTEZOQlFVdERMRWxCUVV3c1IwRkJXU3hKUVVGYU8wRkJRMEVzVTBGQlMwTXNUMEZCVEN4SFFVRmxMRXRCUVdZN1FVRkRRU3hUUVVGTFF5eEpRVUZNTEVkQlFWa3NSVUZCV2p0QlFVTkVPenRCUVVWRU96czdPenM3T3pzN0swSkJTMWs3UVVGRFZpeFZRVUZKUXl4WlFVRktPMEZCUTBFc1ZVRkJTVVFzVDBGQlR5eEZRVUZZTzBGQlEwRXNWMEZCU3l4SlFVRkpaaXhKUVVGSkxFTkJRVklzUlVGQlYwTXNUVUZCVFN4TFFVRkxka0lzUjBGQlRDeERRVUZUV1N4TlFVRXZRaXhGUVVGMVExVXNTVUZCU1VNc1IwRkJNME1zUlVGQlowUkVMRWRCUVdoRUxFVkJRWEZFTzBGQlEyNUVaMElzWTBGQlRTeExRVUZMZEVNc1IwRkJUQ3hEUVVGVGRVTXNUVUZCVkN4RFFVRm5RbXBDTEVOQlFXaENMRU5CUVU0N1FVRkRRU3hoUVVGTGEwSXNVMEZCVEN4RFFVRmxSaXhIUVVGbU8wRkJRMFE3TzBGQlJVUXNWMEZCUzBRc1NVRkJUQ3hEUVVGVk4wSXNUMEZCVml4RFFVRnJRaXhWUVVGVk1rSXNTVUZCVml4RlFVRm5RanRCUVVOb1EwRXNZVUZCUzNoQ0xFdEJRVXdzUjBGQllTeERRVUZEZDBJc1MwRkJTM2hDTEV0QlFVd3NTVUZCWXl4RlFVRm1MRVZCUVcxQ2NVSXNVVUZCYmtJc1IwRkJPRUpJTEVsQlFUbENMRVZCUVdJN1FVRkRRU3haUVVGSlRTeExRVUZMZUVJc1MwRkJWQ3hGUVVGblFqdEJRVU5rTUVJc1pVRkJTM2hDTEVsQlFVd3NRMEZCVlhOQ0xFbEJRVlk3UVVGRFJEdEJRVU5HTEU5QlRFUTdPMEZCVDBFc1lVRkJUMFVzU1VGQlVEdEJRVU5FT3p0QlFVVkVPenM3T3pzN096czRRa0ZMVjBNc1J5eEZRVUZMTzBGQlEyUXNWVUZCU1N4RFFVRkRRU3hQUVVGUFVDeFRRVUZRTEVsQlFXOUNUeXhSUVVGUkxFbEJRVGRDTEV0QlFYTkRMRXRCUVV0R0xFOUJRUzlETEVWQlFYZEVPMEZCUTNSRUxHRkJRVXRCTEU5QlFVd3NSMEZCWlN4TFFVRm1PMEZCUTBRc1QwRkdSQ3hOUVVWUExFbEJRVWtzUzBGQlMwWXNhVUpCUVV3c1NVRkJNRUpKTEZGQlFWRXNTMEZCUzBvc2FVSkJRVE5ETEVWQlFUaEVPMEZCUTI1RkxHRkJRVXRETEVsQlFVd3NSMEZCV1R0QlFVTldla0lzWjBKQlFVMHNWVUZFU1R0QlFVVldReXhwUWtGQlR6SkNPMEZCUmtjc1UwRkJXanRCUVVsQkxHRkJRVXRFTEVsQlFVd3NRMEZCVlhoQ0xFbEJRVllzUTBGQlpTeExRVUZMYzBJc1NVRkJjRUk3UVVGRFFTeGhRVUZMUVN4SlFVRk1MRWRCUVZrc1NVRkJXanRCUVVOQkxHRkJRVXRFTEdsQ1FVRk1MRWRCUVhsQ0xFVkJRWHBDTzBGQlEwRXNZVUZCUzBVc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FTEU5QlZrMHNUVUZWUVN4SlFVRkpMRU5CUVVNc1MwRkJTMFlzYVVKQlFVNHNTVUZCTWtKSkxFOUJRVTlRTEZOQlFYUkRMRVZCUVdsRU8wRkJRM1JFTEdGQlFVdEpMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1ZVRkVTVHRCUVVWV1F5eHBRa0ZCVHpKQ08wRkJSa2NzVTBGQldqdEJRVWxCTEdGQlFVdEVMRWxCUVV3c1EwRkJWWGhDTEVsQlFWWXNRMEZCWlN4TFFVRkxjMElzU1VGQmNFSTdRVUZEUVN4aFFVRkxRU3hKUVVGTUxFZEJRVmtzU1VGQldqdEJRVU5CTEdGQlFVdEVMR2xDUVVGTUxFZEJRWGxDU0N4VlFVRlZUeXhIUVVGV0xFTkJRWHBDTzBGQlEwRXNZVUZCUzBZc1QwRkJUQ3hIUVVGbExFdEJRV1k3UVVGRFFUdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1EwRkJReXhMUVVGTFFTeFBRVUZPTEVsQlFXbENSU3hSUVVGUkxFbEJRVGRDTEVWQlFXMURPMEZCUTJwRExHRkJRVXRHTEU5QlFVd3NSMEZCWlN4SlFVRm1PMEZCUTBFN1FVRkRSRHM3UVVGRlJDeFZRVUZKTEVOQlFVTXNTMEZCUzBRc1NVRkJWaXhGUVVGblFqdEJRVU5rTEdGQlFVdEJMRWxCUVV3c1IwRkJXVHRCUVVOV2VrSXNaMEpCUVUwc1RVRkVTVHRCUVVWV1F5eHBRa0ZCVHp0QlFVWkhMRk5CUVZvN1FVRkpRU3hoUVVGTE1FSXNTVUZCVEN4RFFVRlZlRUlzU1VGQlZpeERRVUZsTEV0QlFVdHpRaXhKUVVGd1FqdEJRVU5FT3p0QlFVVkVMRlZCUVVrc1MwRkJTME1zVDBGQlRDeEpRVUZuUWtVc1VVRkJVU3hKUVVFMVFpeEZRVUZyUXp0QlFVTm9ReXhoUVVGTFNDeEpRVUZNTEVOQlFWVjRRaXhMUVVGV0xFbEJRVzFDTEVsQlFXNUNPMEZCUTBRN08wRkJSVVFzVjBGQlMzZENMRWxCUVV3c1EwRkJWWGhDTEV0QlFWWXNTVUZCYlVJeVFpeEhRVUZ1UWp0QlFVTkJMRmRCUVV0R0xFOUJRVXdzUjBGQlpTeExRVUZtTzBGQlEwUWlMQ0ptYVd4bElqb2lZV1JrY21WemMzQmhjbk5sY2k1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dVR0Z5YzJWeklITjBjblZqZEhWeVpXUWdaUzF0WVdsc0lHRmtaSEpsYzNObGN5Qm1jbTl0SUdGdUlHRmtaSEpsYzNNZ1ptbGxiR1JjYmlBcVhHNGdLaUJGZUdGdGNHeGxPbHh1SUNwY2JpQXFJQ0FnSUZ3aVRtRnRaU0E4WVdSa2NtVnpjMEJrYjIxaGFXNCtYQ0pjYmlBcVhHNGdLaUIzYVd4c0lHSmxJR052Ym5abGNuUmxaQ0IwYjF4dUlDcGNiaUFxSUNBZ0lDQmJlMjVoYldVNklGd2lUbUZ0WlZ3aUxDQmhaR1J5WlhOek9pQmNJbUZrWkhKbGMzTkFaRzl0WVdsdVhDSjlYVnh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdVM1J5YVc1bmZTQnpkSElnUVdSa2NtVnpjeUJtYVdWc1pGeHVJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUdGa1pISmxjM01nYjJKcVpXTjBjMXh1SUNvdlhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCbWRXNWpkR2x2YmlCd1lYSnpaU0FvYzNSeUtTQjdYRzRnSUdOdmJuTjBJSFJ2YTJWdWFYcGxjaUE5SUc1bGR5QlViMnRsYm1sNlpYSW9jM1J5S1Z4dUlDQmpiMjV6ZENCMGIydGxibk1nUFNCMGIydGxibWw2WlhJdWRHOXJaVzVwZW1Vb0tWeHVYRzRnSUdOdmJuTjBJR0ZrWkhKbGMzTmxjeUE5SUZ0ZFhHNGdJR3hsZENCaFpHUnlaWE56SUQwZ1cxMWNiaUFnYkdWMElIQmhjbk5sWkVGa1pISmxjM05sY3lBOUlGdGRYRzVjYmlBZ2RHOXJaVzV6TG1admNrVmhZMmdvWm5WdVkzUnBiMjRnS0hSdmEyVnVLU0I3WEc0Z0lDQWdhV1lnS0hSdmEyVnVMblI1Y0dVZ1BUMDlJQ2R2Y0dWeVlYUnZjaWNnSmlZZ0tIUnZhMlZ1TG5aaGJIVmxJRDA5UFNBbkxDY2dmSHdnZEc5clpXNHVkbUZzZFdVZ1BUMDlJQ2M3SnlrcElIdGNiaUFnSUNBZ0lHbG1JQ2hoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaGhaR1J5WlhOektWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1lXUmtjbVZ6Y3lBOUlGdGRYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdGa1pISmxjM011Y0hWemFDaDBiMnRsYmlsY2JpQWdJQ0I5WEc0Z0lIMHBYRzVjYmlBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ1lXUmtjbVZ6YzJWekxuQjFjMmdvWVdSa2NtVnpjeWxjYmlBZ2ZWeHVYRzRnSUdGa1pISmxjM05sY3k1bWIzSkZZV05vS0daMWJtTjBhVzl1SUNoaFpHUnlaWE56S1NCN1hHNGdJQ0FnWVdSa2NtVnpjeUE5SUY5b1lXNWtiR1ZCWkdSeVpYTnpLR0ZrWkhKbGMzTXBYRzRnSUNBZ2FXWWdLR0ZrWkhKbGMzTXViR1Z1WjNSb0tTQjdYRzRnSUNBZ0lDQndZWEp6WldSQlpHUnlaWE56WlhNZ1BTQndZWEp6WldSQlpHUnlaWE56WlhNdVkyOXVZMkYwS0dGa1pISmxjM01wWEc0Z0lDQWdmVnh1SUNCOUtWeHVYRzRnSUhKbGRIVnliaUJ3WVhKelpXUkJaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFLbHh1SUNvZ1EyOXVkbVZ5ZEhNZ2RHOXJaVzV6SUdadmNpQmhJSE5wYm1kc1pTQmhaR1J5WlhOeklHbHVkRzhnWVc0Z1lXUmtjbVZ6Y3lCdlltcGxZM1JjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMEZ5Y21GNWZTQjBiMnRsYm5NZ1ZHOXJaVzV6SUc5aWFtVmpkRnh1SUNvZ1FISmxkSFZ5YmlCN1QySnFaV04wZlNCQlpHUnlaWE56SUc5aWFtVmpkRnh1SUNvdlhHNW1kVzVqZEdsdmJpQmZhR0Z1Wkd4bFFXUmtjbVZ6Y3lBb2RHOXJaVzV6S1NCN1hHNGdJR3hsZENCcGMwZHliM1Z3SUQwZ1ptRnNjMlZjYmlBZ2JHVjBJSE4wWVhSbElEMGdKM1JsZUhRblhHNGdJR3hsZENCaFpHUnlaWE56WEc0Z0lHTnZibk4wSUdGa1pISmxjM05sY3lBOUlGdGRYRzRnSUdOdmJuTjBJR1JoZEdFZ1BTQjdYRzRnSUNBZ1lXUmtjbVZ6Y3pvZ1cxMHNYRzRnSUNBZ1kyOXRiV1Z1ZERvZ1cxMHNYRzRnSUNBZ1ozSnZkWEE2SUZ0ZExGeHVJQ0FnSUhSbGVIUTZJRnRkWEc0Z0lIMWNibHh1SUNBdkx5QkdhV3gwWlhJZ2IzVjBJRHhoWkdSeVpYTnpaWE0rTENBb1kyOXRiV1Z1ZEhNcElHRnVaQ0J5WldkMWJHRnlJSFJsZUhSY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHeGxiaUE5SUhSdmEyVnVjeTVzWlc1bmRHZzdJR2tnUENCc1pXNDdJR2tyS3lrZ2UxeHVJQ0FnSUdOdmJuTjBJSFJ2YTJWdUlEMGdkRzlyWlc1elcybGRYRzVjYmlBZ0lDQnBaaUFvZEc5clpXNHVkSGx3WlNBOVBUMGdKMjl3WlhKaGRHOXlKeWtnZTF4dUlDQWdJQ0FnYzNkcGRHTm9JQ2gwYjJ0bGJpNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQmpZWE5sSUNjOEp6cGNiaUFnSUNBZ0lDQWdJQ0J6ZEdGMFpTQTlJQ2RoWkdSeVpYTnpKMXh1SUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJR05oYzJVZ0p5Z25PbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjJOdmJXMWxiblFuWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnWTJGelpTQW5PaWM2WEc0Z0lDQWdJQ0FnSUNBZ2MzUmhkR1VnUFNBblozSnZkWEFuWEc0Z0lDQWdJQ0FnSUNBZ2FYTkhjbTkxY0NBOUlIUnlkV1ZjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhMXh1SUNBZ0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0FnSUhOMFlYUmxJRDBnSjNSbGVIUW5YRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdsbUlDaDBiMnRsYmk1MllXeDFaU2tnZTF4dUlDQWdJQ0FnSUNCa1lYUmhXM04wWVhSbFhTNXdkWE5vS0hSdmEyVnVMblpoYkhWbEtWeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRWxtSUhSb1pYSmxJR2x6SUc1dklIUmxlSFFnWW5WMElHRWdZMjl0YldWdWRDd2djbVZ3YkdGalpTQjBhR1VnZEhkdlhHNGdJR2xtSUNnaFpHRjBZUzUwWlhoMExteGxibWQwYUNBbUppQmtZWFJoTG1OdmJXMWxiblF1YkdWdVozUm9LU0I3WEc0Z0lDQWdaR0YwWVM1MFpYaDBJRDBnWkdGMFlTNWpiMjF0Wlc1MFhHNGdJQ0FnWkdGMFlTNWpiMjF0Wlc1MElEMGdXMTFjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBjMGR5YjNWd0tTQjdYRzRnSUNBZ0x5OGdhSFIwY0RvdkwzUnZiMnh6TG1sbGRHWXViM0puTDJoMGJXd3ZjbVpqTWpneU1pTmhjSEJsYm1ScGVDMUJMakV1TTF4dUlDQWdJR1JoZEdFdWRHVjRkQ0E5SUdSaGRHRXVkR1Y0ZEM1cWIybHVLQ2NnSnlsY2JpQWdJQ0JoWkdSeVpYTnpaWE11Y0hWemFDaDdYRzRnSUNBZ0lDQnVZVzFsT2lCa1lYUmhMblJsZUhRZ2ZId2dLR0ZrWkhKbGMzTWdKaVlnWVdSa2NtVnpjeTV1WVcxbEtTeGNiaUFnSUNBZ0lHZHliM1Z3T2lCa1lYUmhMbWR5YjNWd0xteGxibWQwYUNBL0lIQmhjbk5sS0dSaGRHRXVaM0p2ZFhBdWFtOXBiaWduTENjcEtTQTZJRnRkWEc0Z0lDQWdmU2xjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCSlppQnVieUJoWkdSeVpYTnpJSGRoY3lCbWIzVnVaQ3dnZEhKNUlIUnZJR1JsZEdWamRDQnZibVVnWm5KdmJTQnlaV2QxYkdGeUlIUmxlSFJjYmlBZ0lDQnBaaUFvSVdSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdnZ0ppWWdaR0YwWVM1MFpYaDBMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdabTl5SUNoc1pYUWdhU0E5SUdSaGRHRXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeE95QnBJRDQ5SURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnSUNCcFppQW9aR0YwWVM1MFpYaDBXMmxkTG0xaGRHTm9LQzllVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3NrTHlrcElIdGNiaUFnSUNBZ0lDQWdJQ0JrWVhSaExtRmtaSEpsYzNNZ1BTQmtZWFJoTG5SbGVIUXVjM0JzYVdObEtHa3NJREVwWEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3RjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCMllYSWdYM0psWjJWNFNHRnVaR3hsY2lBOUlHWjFibU4wYVc5dUlDaGhaR1J5WlhOektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNnaFpHRjBZUzVoWkdSeVpYTnpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJRnRoWkdSeVpYTnpMblJ5YVcwb0tWMWNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdKeUFuWEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGa1pISmxjM05jYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNBdkx5QnpkR2xzYkNCdWJ5QmhaR1J5WlhOelhHNGdJQ0FnSUNCcFppQW9JV1JoZEdFdVlXUmtjbVZ6Y3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJR1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dMU0F4T3lCcElENDlJREE3SUdrdExTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXVkR1Y0ZEZ0cFhTQTlJR1JoZEdFdWRHVjRkRnRwWFM1eVpYQnNZV05sS0M5Y1hITXFYRnhpVzE1QVhGeHpYU3RBVzE1QVhGeHpYU3RjWEdKY1hITXFMeXdnWDNKbFoyVjRTR0Z1Wkd4bGNpa3VkSEpwYlNncFhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dSaGRHRXVZV1JrY21WemN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdKeVpXRnJYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1NXWWdkR2hsY21VbmN5QnpkR2xzYkNCcGN5QnVieUIwWlhoMElHSjFkQ0JoSUdOdmJXMWxiblFnWlhocGVIUnpMQ0J5WlhCc1lXTmxJSFJvWlNCMGQyOWNiaUFnSUNCcFppQW9JV1JoZEdFdWRHVjRkQzVzWlc1bmRHZ2dKaVlnWkdGMFlTNWpiMjF0Wlc1MExteGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ1pHRjBZUzUwWlhoMElEMGdaR0YwWVM1amIyMXRaVzUwWEc0Z0lDQWdJQ0JrWVhSaExtTnZiVzFsYm5RZ1BTQmJYVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXRsWlhBZ2IyNXNlU0IwYUdVZ1ptbHljM1FnWVdSa2NtVnpjeUJ2WTJOMWNtVnVZMlVzSUhCMWMyZ2diM1JvWlhKeklIUnZJSEpsWjNWc1lYSWdkR1Y0ZEZ4dUlDQWdJR2xtSUNoa1lYUmhMbUZrWkhKbGMzTXViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtTnZibU5oZENoa1lYUmhMbUZrWkhKbGMzTXVjM0JzYVdObEtERXBLVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRXB2YVc0Z2RtRnNkV1Z6SUhkcGRHZ2djM0JoWTJWelhHNGdJQ0FnWkdGMFlTNTBaWGgwSUQwZ1pHRjBZUzUwWlhoMExtcHZhVzRvSnlBbktWeHVJQ0FnSUdSaGRHRXVZV1JrY21WemN5QTlJR1JoZEdFdVlXUmtjbVZ6Y3k1cWIybHVLQ2NnSnlsY2JseHVJQ0FnSUdsbUlDZ2haR0YwWVM1aFpHUnlaWE56SUNZbUlHbHpSM0p2ZFhBcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCYlhWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JoWkdSeVpYTnpJRDBnZTF4dUlDQWdJQ0FnSUNCaFpHUnlaWE56T2lCa1lYUmhMbUZrWkhKbGMzTWdmSHdnWkdGMFlTNTBaWGgwSUh4OElDY25MRnh1SUNBZ0lDQWdJQ0J1WVcxbE9pQmtZWFJoTG5SbGVIUWdmSHdnWkdGMFlTNWhaR1J5WlhOeklIeDhJQ2NuWEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdsbUlDaGhaR1J5WlhOekxtRmtaSEpsYzNNZ1BUMDlJR0ZrWkhKbGMzTXVibUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dGa1pISmxjM011WVdSa2NtVnpjeUI4ZkNBbkp5a3ViV0YwWTJnb0wwQXZLU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHRmtaSEpsYzNNdWJtRnRaU0E5SUNjblhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdZV1JrY21WemN5NWhaR1J5WlhOeklEMGdKeWRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCaFpHUnlaWE56WlhNdWNIVnphQ2hoWkdSeVpYTnpLVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQmhaR1J5WlhOelpYTmNibjA3WEc1Y2JpOHFYRzRnS2lCUGNHVnlZWFJ2Y2lCMGIydGxibk1nWVc1a0lIZG9hV05vSUhSdmEyVnVjeUJoY21VZ1pYaHdaV04wWldRZ2RHOGdaVzVrSUhSb1pTQnpaWEYxWlc1alpWeHVJQ292WEc1amIyNXpkQ0JQVUVWU1FWUlBVbE1nUFNCN1hHNGdJQ2RjSWljNklDZGNJaWNzWEc0Z0lDY29Kem9nSnlrbkxGeHVJQ0FuUENjNklDYytKeXhjYmlBZ0p5d25PaUFuSnl4Y2JpQWdMeThnUjNKdmRYQnpJR0Z5WlNCbGJtUmxaQ0JpZVNCelpXMXBZMjlzYjI1elhHNGdJQ2M2SnpvZ0p6c25MRnh1SUNBdkx5QlRaVzFwWTI5c2IyNXpJR0Z5WlNCdWIzUWdZU0JzWldkaGJDQmtaV3hwYldsMFpYSWdjR1Z5SUhSb1pTQlNSa015T0RJeUlHZHlZVzF0WVhJZ2IzUm9aWEpjYmlBZ0x5OGdkR2hoYmlCbWIzSWdkR1Z5YldsdVlYUnBibWNnWVNCbmNtOTFjQ3dnWW5WMElIUm9aWGtnWVhKbElHRnNjMjhnYm05MElIWmhiR2xrSUdadmNpQmhibmxjYmlBZ0x5OGdiM1JvWlhJZ2RYTmxJR2x1SUhSb2FYTWdZMjl1ZEdWNGRDNGdJRWRwZG1WdUlIUm9ZWFFnYzI5dFpTQnRZV2xzSUdOc2FXVnVkSE1nYUdGMlpWeHVJQ0F2THlCb2FYTjBiM0pwWTJGc2JIa2dZV3hzYjNkbFpDQjBhR1VnYzJWdGFXTnZiRzl1SUdGeklHRWdaR1ZzYVcxcGRHVnlJR1Z4ZFdsMllXeGxiblFnZEc4Z2RHaGxYRzRnSUM4dklHTnZiVzFoSUdsdUlIUm9aV2x5SUZWSkxDQnBkQ0J0WVd0bGN5QnpaVzV6WlNCMGJ5QjBjbVZoZENCMGFHVnRJSFJvWlNCellXMWxJR0Z6SUdFZ1kyOXRiV0ZjYmlBZ0x5OGdkMmhsYmlCMWMyVmtJRzkxZEhOcFpHVWdiMllnWVNCbmNtOTFjQzVjYmlBZ0p6c25PaUFuSjF4dWZWeHVYRzR2S2lwY2JpQXFJRU55WldGMFpYTWdZU0JVYjJ0bGJtbDZaWElnYjJKcVpXTjBJR1p2Y2lCMGIydGxibWw2YVc1bklHRmtaSEpsYzNNZ1ptbGxiR1FnYzNSeWFXNW5jMXh1SUNwY2JpQXFJRUJqYjI1emRISjFZM1J2Y2x4dUlDb2dRSEJoY21GdElIdFRkSEpwYm1kOUlITjBjaUJCWkdSeVpYTnpJR1pwWld4a0lITjBjbWx1WjF4dUlDb3ZYRzVqYkdGemN5QlViMnRsYm1sNlpYSWdlMXh1SUNCamIyNXpkSEoxWTNSdmNpQW9jM1J5S1NCN1hHNGdJQ0FnZEdocGN5NXpkSElnUFNBb2MzUnlJSHg4SUNjbktTNTBiMU4wY21sdVp5Z3BYRzRnSUNBZ2RHaHBjeTV2Y0dWeVlYUnZja04xY25KbGJuUWdQU0FuSjF4dUlDQWdJSFJvYVhNdWIzQmxjbUYwYjNKRmVIQmxZM1JwYm1jZ1BTQW5KMXh1SUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQm1ZV3h6WlZ4dUlDQWdJSFJvYVhNdWJHbHpkQ0E5SUZ0ZFhHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWRzlyWlc1cGVtVnpJSFJvWlNCdmNtbG5hVzVoYkNCcGJuQjFkQ0J6ZEhKcGJtZGNiaUFnSUNwY2JpQWdJQ29nUUhKbGRIVnliaUI3UVhKeVlYbDlJRUZ1SUdGeWNtRjVJRzltSUc5d1pYSmhkRzl5ZkhSbGVIUWdkRzlyWlc1elhHNGdJQ0FxTDF4dUlDQjBiMnRsYm1sNlpTQW9LU0I3WEc0Z0lDQWdiR1YwSUdOb2NseHVJQ0FnSUd4bGRDQnNhWE4wSUQwZ1cxMWNiaUFnSUNCbWIzSWdLSFpoY2lCcElEMGdNQ3dnYkdWdUlEMGdkR2hwY3k1emRISXViR1Z1WjNSb095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdOb2NpQTlJSFJvYVhNdWMzUnlMbU5vWVhKQmRDaHBLVnh1SUNBZ0lDQWdkR2hwY3k1amFHVmphME5vWVhJb1kyaHlLVnh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11YkdsemRDNW1iM0pGWVdOb0tHWjFibU4wYVc5dUlDaHViMlJsS1NCN1hHNGdJQ0FnSUNCdWIyUmxMblpoYkhWbElEMGdLRzV2WkdVdWRtRnNkV1VnZkh3Z0p5Y3BMblJ2VTNSeWFXNW5LQ2t1ZEhKcGJTZ3BYRzRnSUNBZ0lDQnBaaUFvYm05a1pTNTJZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQnNhWE4wTG5CMWMyZ29ibTlrWlNsY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5S1Z4dVhHNGdJQ0FnY21WMGRYSnVJR3hwYzNSY2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkRhR1ZqYTNNZ2FXWWdZU0JqYUdGeVlXTjBaWElnYVhNZ1lXNGdiM0JsY21GMGIzSWdiM0lnZEdWNGRDQmhibVFnWVdOMGN5QmhZMk52Y21ScGJtZHNlVnh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMzBnWTJoeUlFTm9ZWEpoWTNSbGNpQm1jbTl0SUhSb1pTQmhaR1J5WlhOeklHWnBaV3hrWEc0Z0lDQXFMMXh1SUNCamFHVmphME5vWVhJZ0tHTm9jaWtnZTF4dUlDQWdJR2xtSUNnb1kyaHlJR2x1SUU5UVJWSkJWRTlTVXlCOGZDQmphSElnUFQwOUlDZGNYRnhjSnlrZ0ppWWdkR2hwY3k1bGMyTmhjR1ZrS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZ6WTJGd1pXUWdQU0JtWVd4elpWeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdQVDA5SUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWJtOWtaU0E5SUh0Y2JpQWdJQ0FnSUNBZ2RIbHdaVG9nSjI5d1pYSmhkRzl5Snl4Y2JpQWdJQ0FnSUNBZ2RtRnNkV1U2SUdOb2NseHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVzYVhOMExuQjFjMmdvZEdocGN5NXViMlJsS1Z4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2JuVnNiRnh1SUNBZ0lDQWdkR2hwY3k1dmNHVnlZWFJ2Y2tWNGNHVmpkR2x1WnlBOUlDY25YRzRnSUNBZ0lDQjBhR2x6TG1WelkyRndaV1FnUFNCbVlXeHpaVnh1SUNBZ0lDQWdjbVYwZFhKdVhHNGdJQ0FnZlNCbGJITmxJR2xtSUNnaGRHaHBjeTV2Y0dWeVlYUnZja1Y0Y0dWamRHbHVaeUFtSmlCamFISWdhVzRnVDFCRlVrRlVUMUpUS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbTV2WkdVZ1BTQjdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklDZHZjR1Z5WVhSdmNpY3NYRzRnSUNBZ0lDQWdJSFpoYkhWbE9pQmphSEpjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWJHbHpkQzV3ZFhOb0tIUm9hWE11Ym05a1pTbGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTQTlJRzUxYkd4Y2JpQWdJQ0FnSUhSb2FYTXViM0JsY21GMGIzSkZlSEJsWTNScGJtY2dQU0JQVUVWU1FWUlBVbE5iWTJoeVhWeHVJQ0FnSUNBZ2RHaHBjeTVsYzJOaGNHVmtJRDBnWm1Gc2MyVmNiaUFnSUNBZ0lISmxkSFZ5Ymx4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNnaGRHaHBjeTVsYzJOaGNHVmtJQ1ltSUdOb2NpQTlQVDBnSjF4Y1hGd25LU0I3WEc0Z0lDQWdJQ0IwYUdsekxtVnpZMkZ3WldRZ1BTQjBjblZsWEc0Z0lDQWdJQ0J5WlhSMWNtNWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9JWFJvYVhNdWJtOWtaU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXViMlJsSUQwZ2UxeHVJQ0FnSUNBZ0lDQjBlWEJsT2lBbmRHVjRkQ2NzWEc0Z0lDQWdJQ0FnSUhaaGJIVmxPaUFuSjF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NXNhWE4wTG5CMWMyZ29kR2hwY3k1dWIyUmxLVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtVnpZMkZ3WldRZ0ppWWdZMmh5SUNFOVBTQW5YRnhjWENjcElIdGNiaUFnSUNBZ0lIUm9hWE11Ym05a1pTNTJZV3gxWlNBclBTQW5YRnhjWENkY2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtNXZaR1V1ZG1Gc2RXVWdLejBnWTJoeVhHNGdJQ0FnZEdocGN5NWxjMk5oY0dWa0lEMGdabUZzYzJWY2JpQWdmVnh1ZlZ4dUlsMTkiLCIndXNlIHN0cmljdCc7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbmlmIChJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5pZiAoIUlTX1BVUkUgJiYgIWhhcyhJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIGFycmF5UHVzaCA9IFtdLnB1c2g7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc3BsaXQnLCAyLCBmdW5jdGlvbiAoU1BMSVQsIG5hdGl2ZVNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCcuc3BsaXQoLyg/OikvLCAtMSkubGVuZ3RoICE9IDQgfHxcbiAgICAnYWInLnNwbGl0KC8oPzphYikqLykubGVuZ3RoICE9IDIgfHxcbiAgICAnLicuc3BsaXQoLyguPykoLj8pLykubGVuZ3RoICE9IDQgfHxcbiAgICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxIHx8XG4gICAgJycuc3BsaXQoLy4/LykubGVuZ3RoXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gW3N0cmluZ107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW0pO1xuICAgICAgfVxuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleDtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZy5sZW5ndGgpIGFycmF5UHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dC5sZW5ndGggPj0gbGltKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weS5sYXN0SW5kZXggPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nLmxlbmd0aCkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbSA/IG91dHB1dC5zbGljZSgwLCBsaW0pIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCcuc3BsaXQodW5kZWZpbmVkLCAwKS5sZW5ndGgpIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogbmF0aXZlU3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2UgaW50ZXJuYWxTcGxpdCA9IG5hdGl2ZVNwbGl0O1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSBuYXRpdmVTcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9IG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59LCAhU1VQUE9SVFNfWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUubGlua2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmxpbmtcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdsaW5rJykgfSwge1xuICBsaW5rOiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXModGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgJiYgIVN5bWJvbC5zaGFtXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBjb2RlUG9pbnRBdCwgYXQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gUy5jaGFyQ29kZUF0KHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HID8gUy5jaGFyQXQocG9zaXRpb24pIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklORyA/IFMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMikgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1jcmVhdGV1bm1hcHBlZGFyZ3VtZW50c29iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHZhciByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIElTX05PREUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE11dGF0aW9uT2JzZXJ2ZXIgJiYgIUlTX0lPUykge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYSwgYikge1xuICB2YXIgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgMSwgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBtYXRjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gbWF0Y2hlciAhPT0gdW5kZWZpbmVkID8gbWF0Y2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT0gJ1N0cmluZycgPyBzcGxpdC5jYWxsKGl0LCAnJykgOiBPYmplY3QoaXQpO1xufSA6IE9iamVjdDtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBQUkVGRVJSRURfU1RSSU5HKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpbnB1dC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUFJFRkVSUkVEX1NUUklORyAmJiB0eXBlb2YgKGZuID0gaW5wdXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzTmFOKGFyZ3VtZW50ID0gK2FyZ3VtZW50KSA/IDAgOiAoYXJndW1lbnQgPiAwID8gZmxvb3IgOiBjZWlsKShhcmd1bWVudCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gKyBtYXRjaFsxXTtcbn0gZWxzZSBpZiAodXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uICYmICt2ZXJzaW9uO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBzZXRHbG9iYWwoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RDaGVja2JveCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94JztcblxuY2xhc3MgQ2hlY2tib3hDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveENvbXBvbmVudCwgJ0NoZWNrYm94Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgaHRtbEVkaXRvckRlZmF1bHRDb25maWcsIGh0bWxFZGl0b3JMYW5nc01hcCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEV2ZW50S2V5Q29kZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBIdG1sRWRpdG9yIHtcblx0ZWRpdG9yO1xuXHRibHVyVGltZXIgPSAwO1xuXG5cdF9fcmVzaXphYmxlID0gZmFsc2U7XG5cdF9faW5pdGVkID0gZmFsc2U7XG5cblx0b25CbHVyID0gbnVsbDtcblx0b25SZWFkeSA9IG51bGw7XG5cdG9uTW9kZUNoYW5nZSA9IG51bGw7XG5cblx0ZWxlbWVudDtcblx0JGVsZW1lbnQ7XG5cblx0cmVzaXplO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gb25CbHVyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvblJlYWR5XG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBvbk1vZGVDaGFuZ2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVsZW1lbnQsIG9uQmx1ciA9IG51bGwsIG9uUmVhZHkgPSBudWxsLCBvbk1vZGVDaGFuZ2UgPSBudWxsKSB7XG5cdFx0dGhpcy5vbkJsdXIgPSBvbkJsdXI7XG5cdFx0dGhpcy5vblJlYWR5ID0gb25SZWFkeTtcblx0XHR0aGlzLm9uTW9kZUNoYW5nZSA9IG9uTW9kZUNoYW5nZTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cdFx0dGhpcy4kZWxlbWVudCA9ICQoZWxlbWVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSA9IF8udGhyb3R0bGUoXy5iaW5kKHRoaXMucmVzaXplRWRpdG9yLCB0aGlzKSwgMTAwKTtcblxuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0cnVuT25CbHVyKCkge1xuXHRcdGlmICh0aGlzLm9uQmx1cikge1xuXHRcdFx0dGhpcy5vbkJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHRibHVyVHJpZ2dlcigpIHtcblx0XHRpZiAodGhpcy5vbkJsdXIpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpO1xuXHRcdFx0dGhpcy5ibHVyVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMucnVuT25CbHVyKCk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRmb2N1c1RyaWdnZXIoKSB7XG5cdFx0aWYgKHRoaXMub25CbHVyKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuYmx1clRpbWVyKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0h0bWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdG9yID8gJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlIDogZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckNhY2hlZFNpZ25hdHVyZSgpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCdpbnNlcnRTaWduYXR1cmUnLCB7XG5cdFx0XHRcdGNsZWFyQ2FjaGU6IHRydWVcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG5cdCAqIEBwYXJhbSB7Ym9vbH0gaHRtbFxuXHQgKiBAcGFyYW0ge2Jvb2x9IGluc2VydEJlZm9yZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHNldFNpZ25hdHVyZShzaWduYXR1cmUsIGh0bWwsIGluc2VydEJlZm9yZSA9IGZhbHNlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgnaW5zZXJ0U2lnbmF0dXJlJywge1xuXHRcdFx0XHRpc0h0bWw6IGh0bWwsXG5cdFx0XHRcdGluc2VydEJlZm9yZTogaW5zZXJ0QmVmb3JlLFxuXHRcdFx0XHRzaWduYXR1cmU6IHNpZ25hdHVyZVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Y2hlY2tEaXJ0eSgpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0b3IgPyB0aGlzLmVkaXRvci5jaGVja0RpcnR5KCkgOiBmYWxzZTtcblx0fVxuXG5cdHJlc2V0RGlydHkoKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0aGlzLmVkaXRvci5yZXNldERpcnR5KCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IHdyYXBJc0h0bWwgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0RGF0YSh3cmFwSXNIdG1sID0gZmFsc2UpIHtcblx0XHRsZXQgcmVzdWx0ID0gJyc7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSAmJiB0aGlzLmVkaXRvci5wbHVnaW5zLnBsYWluICYmIHRoaXMuZWRpdG9yLl9fcGxhaW4pIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB0aGlzLmVkaXRvci5fX3BsYWluLmdldFJhd0RhdGEoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQgPSB3cmFwSXNIdG1sXG5cdFx0XHRcdFx0XHQ/ICc8ZGl2IGRhdGEtaHRtbC1lZGl0b3ItZm9udC13cmFwcGVyPVwidHJ1ZVwiIHN0eWxlPVwiZm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEzcHg7XCI+JyArXG5cdFx0XHRcdFx0XHQgIHRoaXMuZWRpdG9yLmdldERhdGEoKSArXG5cdFx0XHRcdFx0XHQgICc8L2Rpdj4nXG5cdFx0XHRcdFx0XHQ6IHRoaXMuZWRpdG9yLmdldERhdGEoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcElzSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXREYXRhV2l0aEh0bWxNYXJrKHdyYXBJc0h0bWwgPSBmYWxzZSkge1xuXHRcdHJldHVybiAodGhpcy5pc0h0bWwoKSA/ICc6SFRNTDonIDogJycpICsgdGhpcy5nZXREYXRhKHdyYXBJc0h0bWwpO1xuXHR9XG5cblx0bW9kZVRvZ2dsZShwbGFpbiwgcmVzaXplKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAocGxhaW4pIHtcblx0XHRcdFx0XHRpZiAoJ3BsYWluJyA9PT0gdGhpcy5lZGl0b3IubW9kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5lZGl0b3Iuc2V0TW9kZSgnd3lzaXd5ZycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmICgnd3lzaXd5ZycgPT09IHRoaXMuZWRpdG9yLm1vZGUpIHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXRNb2RlKCdwbGFpbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0XHRcdGlmIChyZXNpemUpIHtcblx0XHRcdFx0dGhpcy5yZXNpemUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sT3JQbGFpbih0ZXh0LCBmb2N1cykge1xuXHRcdGlmICgnOkhUTUw6JyA9PT0gdGV4dC5zdWJzdHIoMCwgNikpIHtcblx0XHRcdHRoaXMuc2V0SHRtbCh0ZXh0LnN1YnN0cig2KSwgZm9jdXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldFBsYWluKHRleHQsIGZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRzZXRIdG1sKGh0bWwsIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKHRydWUpO1xuXG5cdFx0XHRodG1sID0gaHRtbC5yZXBsYWNlKC88cFtePl0qPjxcXC9wPi9naSwgJycpO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKGh0bWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJlcGxhY2VIdG1sKGZpbmQsIHJlcGxhY2VIdG1sKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQgJiYgJ3d5c2l3eWcnID09PSB0aGlzLmVkaXRvci5tb2RlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHRoaXMuZWRpdG9yLmdldERhdGEoKS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VIdG1sKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0c2V0UGxhaW4ocGxhaW4sIGZvY3VzKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yICYmIHRoaXMuX19pbml0ZWQpIHtcblx0XHRcdHRoaXMuY2xlYXJDYWNoZWRTaWduYXR1cmUoKTtcblxuXHRcdFx0dGhpcy5tb2RlVG9nZ2xlKGZhbHNlKTtcblx0XHRcdGlmICgncGxhaW4nID09PSB0aGlzLmVkaXRvci5tb2RlICYmIHRoaXMuZWRpdG9yLnBsdWdpbnMucGxhaW4gJiYgdGhpcy5lZGl0b3IuX19wbGFpbikge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5fX3BsYWluLnNldFJhd0RhdGEocGxhaW4pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aGlzLmVkaXRvci5zZXREYXRhKHBsYWluKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZm9jdXMpIHtcblx0XHRcdFx0dGhpcy5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGluaXQoKSB7XG5cdFx0aWYgKHRoaXMuZWxlbWVudCAmJiAhdGhpcy5lZGl0b3IpIHtcblx0XHRcdGNvbnN0IGluaXRGdW5jID0gKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjb25maWcgPSBodG1sRWRpdG9yRGVmYXVsdENvbmZpZyxcblx0XHRcdFx0XHRsYW5ndWFnZSA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdMYW5ndWFnZScpLFxuXHRcdFx0XHRcdGFsbG93U291cmNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dIdG1sRWRpdG9yU291cmNlQnV0dG9uJyksXG5cdFx0XHRcdFx0Yml0aSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2FsbG93SHRtbEVkaXRvckJpdGlCdXR0b25zJyk7XG5cblx0XHRcdFx0aWYgKChhbGxvd1NvdXJjZSB8fCAhYml0aSkgJiYgIWNvbmZpZy50b29sYmFyR3JvdXBzLl9fY2ZnSW5pdGVkKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnRvb2xiYXJHcm91cHMuX19jZmdJbml0ZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKGFsbG93U291cmNlKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlQnV0dG9ucyA9IGNvbmZpZy5yZW1vdmVCdXR0b25zLnJlcGxhY2UoJyxTb3VyY2UnLCAnJyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCFiaXRpKSB7XG5cdFx0XHRcdFx0XHRjb25maWcucmVtb3ZlUGx1Z2lucyArPSAoY29uZmlnLnJlbW92ZVBsdWdpbnMgPyAnLCcgOiAnJykgKyAnYmlkaSc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZmlnLmVudGVyTW9kZSA9IHdpbmRvdy5DS0VESVRPUi5FTlRFUl9CUjtcblx0XHRcdFx0Y29uZmlnLnNoaWZ0RW50ZXJNb2RlID0gd2luZG93LkNLRURJVE9SLkVOVEVSX1A7XG5cblx0XHRcdFx0Y29uZmlnLmxhbmd1YWdlID0gaHRtbEVkaXRvckxhbmdzTWFwWyhsYW5ndWFnZSB8fCAnZW4nKS50b0xvd2VyQ2FzZSgpXSB8fCAnZW4nO1xuXHRcdFx0XHRpZiAod2luZG93LkNLRURJVE9SLmVudikge1xuXHRcdFx0XHRcdHdpbmRvdy5DS0VESVRPUi5lbnYuaXNDb21wYXRpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuZWRpdG9yID0gd2luZG93LkNLRURJVE9SLmFwcGVuZFRvKHRoaXMuZWxlbWVudCwgY29uZmlnKTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbigna2V5JywgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmRhdGEgJiYgRXZlbnRLZXlDb2RlLlRhYiA9PT0gZXZlbnQuZGF0YS5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuZWRpdG9yLm9uKCdibHVyJywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYmx1clRyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ21vZGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5ibHVyVHJpZ2dlcigpO1xuXHRcdFx0XHRcdGlmICh0aGlzLm9uTW9kZUNoYW5nZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vbk1vZGVDaGFuZ2UoJ3BsYWluJyAhPT0gdGhpcy5lZGl0b3IubW9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignZm9jdXMnLCAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5mb2N1c1RyaWdnZXIoKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKHdpbmRvdy5GaWxlUmVhZGVyKSB7XG5cdFx0XHRcdFx0dGhpcy5lZGl0b3Iub24oJ2Ryb3AnLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdGlmICgwIDwgZXZlbnQuZGF0YS5kYXRhVHJhbnNmZXIuZ2V0RmlsZXNDb3VudCgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGZpbGUgPSBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5nZXRGaWxlKDApO1xuXHRcdFx0XHRcdFx0XHRpZiAoZmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiBldmVudC5kYXRhLmRhdGFUcmFuc2Zlci5pZCAmJiBmaWxlLnR5cGUgJiYgZmlsZS50eXBlLm1hdGNoKC9eaW1hZ2UvaSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpZCA9IGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLmlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW1hZ2VJZCA9IGBbaW1nPSR7aWR9XWAsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZWFkZXIgPSBuZXcgd2luZG93LkZpbGVSZWFkZXIoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVhZGVyLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlcGxhY2VIdG1sKGltYWdlSWQsIGA8aW1nIHNyYz1cIiR7cmVhZGVyLnJlc3VsdH1cIiAvPmApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRyZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmRhdGEuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvaHRtbCcsIGltYWdlSWQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmVkaXRvci5vbignaW5zdGFuY2VSZWFkeScsICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5lZGl0b3IucmVtb3ZlTWVudUl0ZW0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjdXQnKTtcblx0XHRcdFx0XHRcdHRoaXMuZWRpdG9yLnJlbW92ZU1lbnVJdGVtKCdjb3B5Jyk7XG5cdFx0XHRcdFx0XHR0aGlzLmVkaXRvci5yZW1vdmVNZW51SXRlbSgncGFzdGUnKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl9fcmVzaXphYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHR0aGlzLl9faW5pdGVkID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVzaXplKCk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5vblJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fTtcblxuXHRcdFx0aWYgKHdpbmRvdy5DS0VESVRPUikge1xuXHRcdFx0XHRpbml0RnVuYygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93Ll9faW5pdEVkaXRvciA9IGluaXRGdW5jO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvY3VzKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXMoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRoYXNGb2N1cygpIHtcblx0XHRpZiAodGhpcy5lZGl0b3IpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiAhIXRoaXMuZWRpdG9yLmZvY3VzTWFuYWdlci5oYXNGb2N1cztcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRibHVyKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvcikge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpcy5lZGl0b3IuZm9jdXNNYW5hZ2VyLmJsdXIodHJ1ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdFx0fVxuXHR9XG5cblx0cmVzaXplRWRpdG9yKCkge1xuXHRcdGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLl9fcmVzaXphYmxlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5yZXNpemUodGhpcy4kZWxlbWVudC53aWR0aCgpLCB0aGlzLiRlbGVtZW50LmlubmVySGVpZ2h0KCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXHRcdH1cblx0fVxuXG5cdHNldFJlYWRPbmx5KHZhbHVlKSB7XG5cdFx0aWYgKHRoaXMuZWRpdG9yKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzLmVkaXRvci5zZXRSZWFkT25seSghIXZhbHVlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcblx0XHR9XG5cdH1cblxuXHRjbGVhcihmb2N1cykge1xuXHRcdHRoaXMuc2V0SHRtbCgnJywgZm9jdXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEh0bWxFZGl0b3IsIEh0bWxFZGl0b3IgYXMgZGVmYXVsdCB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9sYXN0LWluZGV4LW9mXCIpOyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuY29uc3QgT3BlbnRpcCA9IHdpbmRvdy5PcGVudGlwIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcyA9IE9wZW50aXAuc3R5bGVzIHx8IHt9O1xuXG5PcGVudGlwLnN0eWxlcy5yYWlubG9vcCA9IHtcblx0J2V4dGVuZHMnOiAnc3RhbmRhcmQnLFxuXG5cdCdmaXhlZCc6IHRydWUsXG5cdCd0YXJnZXQnOiB0cnVlLFxuXG5cdCdkZWxheSc6IDAuMixcblx0J2hpZGVEZWxheSc6IDAsXG5cblx0J2hpZGVFZmZlY3QnOiAnZmFkZScsXG5cdCdoaWRlRWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dFZmZlY3QnOiAnZmFkZScsXG5cdCdzaG93RWZmZWN0RHVyYXRpb24nOiAwLjIsXG5cblx0J3Nob3dPbic6ICdtb3VzZW92ZXIgY2xpY2snLFxuXHQncmVtb3ZlRWxlbWVudHNPbkhpZGUnOiB0cnVlLFxuXG5cdCdiYWNrZ3JvdW5kJzogJyNmZmYnLFxuXHQnc2hhZG93JzogZmFsc2UsXG5cblx0J2JvcmRlckNvbG9yJzogJyM5OTknLFxuXHQnYm9yZGVyUmFkaXVzJzogMixcblx0J2JvcmRlcldpZHRoJzogMVxufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BUaXAgPSB7XG5cdCdleHRlbmRzJzogJ3JhaW5sb29wJyxcblx0J2RlbGF5JzogMC40LFxuXHQnZ3JvdXAnOiAncmFpbmxvb3BUaXBzJ1xufTtcblxuT3BlbnRpcC5zdHlsZXMucmFpbmxvb3BFcnJvclRpcCA9IHtcblx0J2V4dGVuZHMnOiAncmFpbmxvb3AnLFxuXHQnY2xhc3NOYW1lJzogJ3JhaW5sb29wRXJyb3JUaXAnXG59O1xuXG5leHBvcnQgeyBPcGVudGlwLCBPcGVudGlwIGFzIGRlZmF1bHQgfTtcbiIsIi8qIVxuICogUGlrYWRheVxuICpcbiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXlcbiAqL1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIG1vbWVudDtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIENvbW1vbkpTIG1vZHVsZVxuICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcXVpcmUoJ21vbWVudCcpOyB9IGNhdGNoIChlKSB7fVxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAocmVxKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBMb2FkIG1vbWVudC5qcyBhcyBhbiBvcHRpb25hbCBkZXBlbmRlbmN5XG4gICAgICAgICAgICB2YXIgaWQgPSAnbW9tZW50JztcbiAgICAgICAgICAgIHRyeSB7IG1vbWVudCA9IHJlcShpZCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICByZXR1cm4gZmFjdG9yeShtb21lbnQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByb290LlBpa2FkYXkgPSBmYWN0b3J5KHJvb3QubW9tZW50KTtcbiAgICB9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpXG57XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqXG4gICAgICogZmVhdHVyZSBkZXRlY3Rpb24gYW5kIGhlbHBlciBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICB2YXIgaGFzTW9tZW50ID0gdHlwZW9mIG1vbWVudCA9PT0gJ2Z1bmN0aW9uJyxcblxuICAgIGhhc0V2ZW50TGlzdGVuZXJzID0gISF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcixcblxuICAgIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LFxuXG4gICAgc3RvID0gd2luZG93LnNldFRpbWVvdXQsXG5cbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uKGVsLCBlLCBjYWxsYmFjaywgY2FwdHVyZSlcbiAgICB7XG4gICAgICAgIGlmIChoYXNFdmVudExpc3RlbmVycykge1xuICAgICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVsLmF0dGFjaEV2ZW50KCdvbicgKyBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpXG4gICAge1xuICAgICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbC5kZXRhY2hFdmVudCgnb24nICsgZSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHRyaW0gPSBmdW5jdGlvbihzdHIpXG4gICAge1xuICAgICAgICByZXR1cm4gc3RyLnRyaW0gPyBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csJycpO1xuICAgIH0sXG5cbiAgICBoYXNDbGFzcyA9IGZ1bmN0aW9uKGVsLCBjbilcbiAgICB7XG4gICAgICAgIHJldHVybiAoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5pbmRleE9mKCcgJyArIGNuICsgJyAnKSAhPT0gLTE7XG4gICAgfSxcblxuICAgIGFkZENsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY24pKSB7XG4gICAgICAgICAgICBlbC5jbGFzc05hbWUgPSAoZWwuY2xhc3NOYW1lID09PSAnJykgPyBjbiA6IGVsLmNsYXNzTmFtZSArICcgJyArIGNuO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNuKVxuICAgIHtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gdHJpbSgoJyAnICsgZWwuY2xhc3NOYW1lICsgJyAnKS5yZXBsYWNlKCcgJyArIGNuICsgJyAnLCAnICcpKTtcbiAgICB9LFxuXG4gICAgaXNBcnJheSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0FycmF5LykudGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSk7XG4gICAgfSxcblxuICAgIGlzRGF0ZSA9IGZ1bmN0aW9uKG9iailcbiAgICB7XG4gICAgICAgIHJldHVybiAoL0RhdGUvKS50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSAmJiAhaXNOYU4ob2JqLmdldFRpbWUoKSk7XG4gICAgfSxcblxuICAgIGlzV2Vla2VuZCA9IGZ1bmN0aW9uKGRhdGUpXG4gICAge1xuICAgICAgICB2YXIgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgcmV0dXJuIGRheSA9PT0gMCB8fCBkYXkgPT09IDY7XG4gICAgfSxcblxuICAgIGlzTGVhcFllYXIgPSBmdW5jdGlvbih5ZWFyKVxuICAgIHtcbiAgICAgICAgLy8gc29sdXRpb24gYnkgTWF0dGkgVmlya2t1bmVuOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80ODgxOTUxXG4gICAgICAgIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpXG4gICAge1xuICAgICAgICByZXR1cm4gWzMxLCBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcbiAgICB9LFxuXG4gICAgc2V0VG9TdGFydE9mRGF5ID0gZnVuY3Rpb24oZGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChpc0RhdGUoZGF0ZSkpIGRhdGUuc2V0SG91cnMoMCwwLDAsMCk7XG4gICAgfSxcblxuICAgIGNvbXBhcmVEYXRlcyA9IGZ1bmN0aW9uKGEsYilcbiAgICB7XG4gICAgICAgIC8vIHdlYWsgZGF0ZSBjb21wYXJpc29uICh1c2Ugc2V0VG9TdGFydE9mRGF5KGRhdGUpIHRvIGVuc3VyZSBjb3JyZWN0IHJlc3VsdClcbiAgICAgICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgICB9LFxuXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24odG8sIGZyb20sIG92ZXJ3cml0ZSlcbiAgICB7XG4gICAgICAgIHZhciBwcm9wLCBoYXNQcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gZnJvbSkge1xuICAgICAgICAgICAgaGFzUHJvcCA9IHRvW3Byb3BdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoaGFzUHJvcCAmJiB0eXBlb2YgZnJvbVtwcm9wXSA9PT0gJ29iamVjdCcgJiYgZnJvbVtwcm9wXSAhPT0gbnVsbCAmJiBmcm9tW3Byb3BdLm5vZGVOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNEYXRlKGZyb21bcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gbmV3IERhdGUoZnJvbVtwcm9wXS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXkoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBmcm9tW3Byb3BdLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSBleHRlbmQoe30sIGZyb21bcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChvdmVyd3JpdGUgfHwgIWhhc1Byb3ApIHtcbiAgICAgICAgICAgICAgICB0b1twcm9wXSA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH0sXG5cbiAgICBmaXJlRXZlbnQgPSBmdW5jdGlvbihlbCwgZXZlbnROYW1lLCBkYXRhKVxuICAgIHtcbiAgICAgICAgdmFyIGV2O1xuXG4gICAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgICAgICAgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpO1xuICAgICAgICAgICAgZXYuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgZXYgPSBleHRlbmQoZXYsIGRhdGEpO1xuICAgICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChldik7XG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QpIHtcbiAgICAgICAgICAgIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKTtcbiAgICAgICAgICAgIGV2ID0gZXh0ZW5kKGV2LCBkYXRhKTtcbiAgICAgICAgICAgIGVsLmZpcmVFdmVudCgnb24nICsgZXZlbnROYW1lLCBldik7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRqdXN0Q2FsZW5kYXIgPSBmdW5jdGlvbihjYWxlbmRhcikge1xuICAgICAgICBpZiAoY2FsZW5kYXIubW9udGggPCAwKSB7XG4gICAgICAgICAgICBjYWxlbmRhci55ZWFyIC09IE1hdGguY2VpbChNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGVuZGFyLm1vbnRoID4gMTEpIHtcbiAgICAgICAgICAgIGNhbGVuZGFyLnllYXIgKz0gTWF0aC5mbG9vcihNYXRoLmFicyhjYWxlbmRhci5tb250aCkvMTIpO1xuICAgICAgICAgICAgY2FsZW5kYXIubW9udGggLT0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbGVuZGFyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZWZhdWx0cyBhbmQgbG9jYWxpc2F0aW9uXG4gICAgICovXG4gICAgZGVmYXVsdHMgPSB7XG5cbiAgICAgICAgLy8gYmluZCB0aGUgcGlja2VyIHRvIGEgZm9ybSBmaWVsZFxuICAgICAgICBmaWVsZDogbnVsbCxcblxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNob3cvaGlkZSB0aGUgcGlja2VyIG9uIGBmaWVsZGAgZm9jdXMgKGRlZmF1bHQgYHRydWVgIGlmIGBmaWVsZGAgaXMgc2V0KVxuICAgICAgICBib3VuZDogdW5kZWZpbmVkLFxuXG4gICAgICAgIC8vIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGFuIGFyaWEgYXNzaXN0YW5jZSB0ZWtzdCAob25seSBhcHBsaWVkIHdoZW4gYGJvdW5kYCBpcyBzZXQpXG4gICAgICAgIGFyaWFMYWJlbDogJ1VzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZScsXG5cbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGRhdGVwaWNrZXIsIHJlbGF0aXZlIHRvIHRoZSBmaWVsZCAoZGVmYXVsdCB0byBib3R0b20gJiBsZWZ0KVxuICAgICAgICAvLyAoJ2JvdHRvbScgJiAnbGVmdCcga2V5d29yZHMgYXJlIG5vdCB1c2VkLCAndG9wJyAmICdyaWdodCcgYXJlIG1vZGlmaWVyIG9uIHRoZSBib3R0b20vbGVmdCBwb3NpdGlvbilcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20gbGVmdCcsXG5cbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBmaXQgaW4gdGhlIHZpZXdwb3J0IGV2ZW4gaWYgaXQgbWVhbnMgcmVwb3NpdGlvbmluZyBmcm9tIHRoZSBwb3NpdGlvbiBvcHRpb25cbiAgICAgICAgcmVwb3NpdGlvbjogdHJ1ZSxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZvciBgLnRvU3RyaW5nKClgIGFuZCBgZmllbGRgIHZhbHVlXG4gICAgICAgIGZvcm1hdDogJ1lZWVktTU0tREQnLFxuXG4gICAgICAgIC8vIHRoZSB0b1N0cmluZyBmdW5jdGlvbiB3aGljaCBnZXRzIHBhc3NlZCBhIGN1cnJlbnQgZGF0ZSBvYmplY3QgYW5kIGZvcm1hdFxuICAgICAgICAvLyBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICAgICAgICB0b1N0cmluZzogbnVsbCxcblxuICAgICAgICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gICAgICAgIHBhcnNlOiBudWxsLFxuXG4gICAgICAgIC8vIHRoZSBpbml0aWFsIGRhdGUgdG8gdmlldyB3aGVuIGZpcnN0IG9wZW5lZFxuICAgICAgICBkZWZhdWx0RGF0ZTogbnVsbCxcblxuICAgICAgICAvLyBtYWtlIHRoZSBgZGVmYXVsdERhdGVgIHRoZSBpbml0aWFsIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgIHNldERlZmF1bHREYXRlOiBmYWxzZSxcblxuICAgICAgICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICAgICAgICBmaXJzdERheTogMCxcblxuICAgICAgICAvLyB0aGUgZGVmYXVsdCBmbGFnIGZvciBtb21lbnQncyBzdHJpY3QgZGF0ZSBwYXJzaW5nXG4gICAgICAgIGZvcm1hdFN0cmljdDogZmFsc2UsXG5cbiAgICAgICAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtaW5EYXRlOiBudWxsLFxuICAgICAgICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICAgICAgICBtYXhEYXRlOiBudWxsLFxuXG4gICAgICAgIC8vIG51bWJlciBvZiB5ZWFycyBlaXRoZXIgc2lkZSwgb3IgYXJyYXkgb2YgdXBwZXIvbG93ZXIgcmFuZ2VcbiAgICAgICAgeWVhclJhbmdlOiAxMCxcblxuICAgICAgICAvLyBzaG93IHdlZWsgbnVtYmVycyBhdCBoZWFkIG9mIHJvd1xuICAgICAgICBzaG93V2Vla051bWJlcjogZmFsc2UsXG5cbiAgICAgICAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICAgICAgICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcblxuICAgICAgICAvLyB1c2VkIGludGVybmFsbHkgKGRvbid0IGNvbmZpZyBvdXRzaWRlKVxuICAgICAgICBtaW5ZZWFyOiAwLFxuICAgICAgICBtYXhZZWFyOiA5OTk5LFxuICAgICAgICBtaW5Nb250aDogdW5kZWZpbmVkLFxuICAgICAgICBtYXhNb250aDogdW5kZWZpbmVkLFxuXG4gICAgICAgIHN0YXJ0UmFuZ2U6IG51bGwsXG4gICAgICAgIGVuZFJhbmdlOiBudWxsLFxuXG4gICAgICAgIGlzUlRMOiBmYWxzZSxcblxuICAgICAgICAvLyBBZGRpdGlvbmFsIHRleHQgdG8gYXBwZW5kIHRvIHRoZSB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICAgICAgICB5ZWFyU3VmZml4OiAnJyxcblxuICAgICAgICAvLyBSZW5kZXIgdGhlIG1vbnRoIGFmdGVyIHllYXIgaW4gdGhlIGNhbGVuZGFyIHRpdGxlXG4gICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogZmFsc2UsXG5cbiAgICAgICAgLy8gUmVuZGVyIGRheXMgb2YgdGhlIGNhbGVuZGFyIGdyaWQgdGhhdCBmYWxsIGluIHRoZSBuZXh0IG9yIHByZXZpb3VzIG1vbnRoXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICAgICAgICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuXG4gICAgICAgIC8vIGhvdyBtYW55IG1vbnRocyBhcmUgdmlzaWJsZVxuICAgICAgICBudW1iZXJPZk1vbnRoczogMSxcblxuICAgICAgICAvLyB3aGVuIG51bWJlck9mTW9udGhzIGlzIHVzZWQsIHRoaXMgd2lsbCBoZWxwIHlvdSB0byBjaG9vc2Ugd2hlcmUgdGhlIG1haW4gY2FsZW5kYXIgd2lsbCBiZSAoZGVmYXVsdCBgbGVmdGAsIGNhbiBiZSBzZXQgdG8gYHJpZ2h0YClcbiAgICAgICAgLy8gb25seSB1c2VkIGZvciB0aGUgZmlyc3QgZGlzcGxheSBvciB3aGVuIGEgc2VsZWN0ZWQgZGF0ZSBpcyBub3QgdmlzaWJsZVxuICAgICAgICBtYWluQ2FsZW5kYXI6ICdsZWZ0JyxcblxuICAgICAgICAvLyBTcGVjaWZ5IGEgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIHRoZSBjYWxlbmRhciBpblxuICAgICAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcblxuICAgICAgICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBibHVyRmllbGRPblNlbGVjdCA6IHRydWUsXG5cbiAgICAgICAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgcHJldmlvdXNNb250aCA6ICdQcmV2aW91cyBNb250aCcsXG4gICAgICAgICAgICBuZXh0TW9udGggICAgIDogJ05leHQgTW9udGgnLFxuICAgICAgICAgICAgbW9udGhzICAgICAgICA6IFsnSmFudWFyeScsJ0ZlYnJ1YXJ5JywnTWFyY2gnLCdBcHJpbCcsJ01heScsJ0p1bmUnLCdKdWx5JywnQXVndXN0JywnU2VwdGVtYmVyJywnT2N0b2JlcicsJ05vdmVtYmVyJywnRGVjZW1iZXInXSxcbiAgICAgICAgICAgIHdlZWtkYXlzICAgICAgOiBbJ1N1bmRheScsJ01vbmRheScsJ1R1ZXNkYXknLCdXZWRuZXNkYXknLCdUaHVyc2RheScsJ0ZyaWRheScsJ1NhdHVyZGF5J10sXG4gICAgICAgICAgICB3ZWVrZGF5c1Nob3J0IDogWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRoZW1lIENsYXNzbmFtZVxuICAgICAgICB0aGVtZTogbnVsbCxcblxuICAgICAgICAvLyBldmVudHMgYXJyYXlcbiAgICAgICAgZXZlbnRzOiBbXSxcblxuICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBvblNlbGVjdDogbnVsbCxcbiAgICAgICAgb25PcGVuOiBudWxsLFxuICAgICAgICBvbkNsb3NlOiBudWxsLFxuICAgICAgICBvbkRyYXc6IG51bGwsXG5cbiAgICAgICAgLy8gRW5hYmxlIGtleWJvYXJkIGlucHV0XG4gICAgICAgIGtleWJvYXJkSW5wdXQ6IHRydWVcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiB0ZW1wbGF0aW5nIGZ1bmN0aW9ucyB0byBhYnN0cmFjdCBIVE1MIHJlbmRlcmluZ1xuICAgICAqL1xuICAgIHJlbmRlckRheU5hbWUgPSBmdW5jdGlvbihvcHRzLCBkYXksIGFiYnIpXG4gICAge1xuICAgICAgICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgICAgICAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgICAgICAgICBkYXkgLT0gNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWJiciA/IG9wdHMuaTE4bi53ZWVrZGF5c1Nob3J0W2RheV0gOiBvcHRzLmkxOG4ud2Vla2RheXNbZGF5XTtcbiAgICB9LFxuXG4gICAgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cylcbiAgICB7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgICAgdmFyIGFyaWFTZWxlY3RlZCA9ICdmYWxzZSc7XG4gICAgICAgIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCgnaXMtb3V0c2lkZS1jdXJyZW50LW1vbnRoJyk7XG5cbiAgICAgICAgICAgICAgICBpZighb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXNlbGVjdGlvbi1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzx0ZCBjbGFzcz1cImlzLWVtcHR5XCI+PC90ZD4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgYXJpYVNlbGVjdGVkID0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaGFzLWV2ZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtaW5yYW5nZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgICAgICAgICAgYXJyLnB1c2goJ2lzLXN0YXJ0cmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgICAgICAgICBhcnIucHVzaCgnaXMtZW5kcmFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbignICcpICsgJ1wiIGFyaWEtc2VsZWN0ZWQ9XCInICsgYXJpYVNlbGVjdGVkICsgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiICcgK1xuICAgICAgICAgICAgICAgICAgICAnZGF0YS1waWthLXllYXI9XCInICsgb3B0cy55ZWFyICsgJ1wiIGRhdGEtcGlrYS1tb250aD1cIicgKyBvcHRzLm1vbnRoICsgJ1wiIGRhdGEtcGlrYS1kYXk9XCInICsgb3B0cy5kYXkgKyAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmRheSArXG4gICAgICAgICAgICAgICAgICc8L2J1dHRvbj4nICtcbiAgICAgICAgICAgICAgICc8L3RkPic7XG4gICAgfSxcblxuICAgIHJlbmRlcldlZWsgPSBmdW5jdGlvbiAoZCwgbSwgeSkge1xuICAgICAgICAvLyBMaWZ0ZWQgZnJvbSBodHRwOi8vamF2YXNjcmlwdC5hYm91dC5jb20vbGlicmFyeS9ibHdlZWt5ZWFyLmh0bSwgbGlnaHRseSBtb2RpZmllZC5cbiAgICAgICAgdmFyIG9uZWphbiA9IG5ldyBEYXRlKHksIDAsIDEpLFxuICAgICAgICAgICAgd2Vla051bSA9IE1hdGguY2VpbCgoKChuZXcgRGF0ZSh5LCBtLCBkKSAtIG9uZWphbikgLyA4NjQwMDAwMCkgKyBvbmVqYW4uZ2V0RGF5KCkrMSkvNyk7XG4gICAgICAgIHJldHVybiAnPHRkIGNsYXNzPVwicGlrYS13ZWVrXCI+JyArIHdlZWtOdW0gKyAnPC90ZD4nO1xuICAgIH0sXG5cbiAgICByZW5kZXJSb3cgPSBmdW5jdGlvbihkYXlzLCBpc1JUTCwgcGlja1dob2xlV2VlaywgaXNSb3dTZWxlY3RlZClcbiAgICB7XG4gICAgICAgIHJldHVybiAnPHRyIGNsYXNzPVwicGlrYS1yb3cnICsgKHBpY2tXaG9sZVdlZWsgPyAnIHBpY2std2hvbGUtd2VlaycgOiAnJykgKyAoaXNSb3dTZWxlY3RlZCA/ICcgaXMtc2VsZWN0ZWQnIDogJycpICsgJ1wiPicgKyAoaXNSVEwgPyBkYXlzLnJldmVyc2UoKSA6IGRheXMpLmpvaW4oJycpICsgJzwvdHI+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKHJvd3MpXG4gICAge1xuICAgICAgICByZXR1cm4gJzx0Ym9keT4nICsgcm93cy5qb2luKCcnKSArICc8L3Rib2R5Pic7XG4gICAgfSxcblxuICAgIHJlbmRlckhlYWQgPSBmdW5jdGlvbihvcHRzKVxuICAgIHtcbiAgICAgICAgdmFyIGksIGFyciA9IFtdO1xuICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgYXJyLnB1c2goJzx0aD48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8dGggc2NvcGU9XCJjb2xcIj48YWJiciB0aXRsZT1cIicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGkpICsgJ1wiPicgKyByZW5kZXJEYXlOYW1lKG9wdHMsIGksIHRydWUpICsgJzwvYWJicj48L3RoPicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnPHRoZWFkPjx0cj4nICsgKG9wdHMuaXNSVEwgPyBhcnIucmV2ZXJzZSgpIDogYXJyKS5qb2luKCcnKSArICc8L3RyPjwvdGhlYWQ+JztcbiAgICB9LFxuXG4gICAgcmVuZGVyVGl0bGUgPSBmdW5jdGlvbihpbnN0YW5jZSwgYywgeWVhciwgbW9udGgsIHJlZlllYXIsIHJhbmRJZClcbiAgICB7XG4gICAgICAgIHZhciBpLCBqLCBhcnIsXG4gICAgICAgICAgICBvcHRzID0gaW5zdGFuY2UuX28sXG4gICAgICAgICAgICBpc01pblllYXIgPSB5ZWFyID09PSBvcHRzLm1pblllYXIsXG4gICAgICAgICAgICBpc01heFllYXIgPSB5ZWFyID09PSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICBodG1sID0gJzxkaXYgaWQ9XCInICsgcmFuZElkICsgJ1wiIGNsYXNzPVwicGlrYS10aXRsZVwiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCI+JyxcbiAgICAgICAgICAgIG1vbnRoSHRtbCxcbiAgICAgICAgICAgIHllYXJIdG1sLFxuICAgICAgICAgICAgcHJldiA9IHRydWUsXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGFyciA9IFtdLCBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArICh5ZWFyID09PSByZWZZZWFyID8gaSAtIGMgOiAxMiArIGkgLSBjKSArICdcIicgK1xuICAgICAgICAgICAgICAgIChpID09PSBtb250aCA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJzogJycpICtcbiAgICAgICAgICAgICAgICAoKGlzTWluWWVhciAmJiBpIDwgb3B0cy5taW5Nb250aCkgfHwgKGlzTWF4WWVhciAmJiBpID4gb3B0cy5tYXhNb250aCkgPyAnZGlzYWJsZWQ9XCJkaXNhYmxlZFwiJyA6ICcnKSArICc+JyArXG4gICAgICAgICAgICAgICAgb3B0cy5pMThuLm1vbnRoc1tpXSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoSHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyBvcHRzLmkxOG4ubW9udGhzW21vbnRoXSArICc8c2VsZWN0IGNsYXNzPVwicGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QtbW9udGhcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKCcnKSArICc8L3NlbGVjdD48L2Rpdj4nO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgICAgICAgICAgaSA9IG9wdHMueWVhclJhbmdlWzBdO1xuICAgICAgICAgICAgaiA9IG9wdHMueWVhclJhbmdlWzFdICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSB5ZWFyIC0gb3B0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICBqID0gMSArIHllYXIgKyBvcHRzLnllYXJSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoYXJyID0gW107IGkgPCBqICYmIGkgPD0gb3B0cy5tYXhZZWFyOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID49IG9wdHMubWluWWVhcikge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCInICsgKGkgPT09IHllYXIgPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIic6ICcnKSArICc+JyArIChpKSArICc8L29wdGlvbj4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB5ZWFySHRtbCA9ICc8ZGl2IGNsYXNzPVwicGlrYS1sYWJlbFwiPicgKyB5ZWFyICsgb3B0cy55ZWFyU3VmZml4ICsgJzxzZWxlY3QgY2xhc3M9XCJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbignJykgKyAnPC9zZWxlY3Q+PC9kaXY+JztcblxuICAgICAgICBpZiAob3B0cy5zaG93TW9udGhBZnRlclllYXIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0geWVhckh0bWwgKyBtb250aEh0bWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodG1sICs9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTWluWWVhciAmJiAobW9udGggPT09IDAgfHwgb3B0cy5taW5Nb250aCA+PSBtb250aCkpIHtcbiAgICAgICAgICAgIHByZXYgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01heFllYXIgJiYgKG1vbnRoID09PSAxMSB8fCBvcHRzLm1heE1vbnRoIDw9IG1vbnRoKSkge1xuICAgICAgICAgICAgbmV4dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLXByZXYnICsgKHByZXYgPyAnJyA6ICcgaXMtZGlzYWJsZWQnKSArICdcIiB0eXBlPVwiYnV0dG9uXCI+JyArIG9wdHMuaTE4bi5wcmV2aW91c01vbnRoICsgJzwvYnV0dG9uPic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IChpbnN0YW5jZS5fby5udW1iZXJPZk1vbnRocyAtIDEpICkge1xuICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz1cInBpa2EtbmV4dCcgKyAobmV4dCA/ICcnIDogJyBpcy1kaXNhYmxlZCcpICsgJ1wiIHR5cGU9XCJidXR0b25cIj4nICsgb3B0cy5pMThuLm5leHRNb250aCArICc8L2J1dHRvbj4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgfSxcblxuICAgIHJlbmRlclRhYmxlID0gZnVuY3Rpb24ob3B0cywgZGF0YSwgcmFuZElkKVxuICAgIHtcbiAgICAgICAgcmV0dXJuICc8dGFibGUgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJwaWthLXRhYmxlXCIgcm9sZT1cImdyaWRcIiBhcmlhLWxhYmVsbGVkYnk9XCInICsgcmFuZElkICsgJ1wiPicgKyByZW5kZXJIZWFkKG9wdHMpICsgcmVuZGVyQm9keShkYXRhKSArICc8L3RhYmxlPic7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogUGlrYWRheSBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIFBpa2FkYXkgPSBmdW5jdGlvbihvcHRpb25zKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgb3B0cyA9IHNlbGYuY29uZmlnKG9wdGlvbnMpO1xuXG4gICAgICAgIHNlbGYuX29uTW91c2VEb3duID0gZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFzZWxmLl92KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50O1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgJ2lzLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3ModGFyZ2V0LCAncGlrYS1idXR0b24nKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LCAnaXMtZW1wdHknKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LnBhcmVudE5vZGUsICdpcy1kaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShuZXcgRGF0ZSh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EteWVhcicpLCB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBpa2EtbW9udGgnKSwgdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1waWthLWRheScpKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG8oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuYmx1ckZpZWxkT25TZWxlY3QgJiYgb3B0cy5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtcHJldicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucHJldk1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2EtbmV4dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dE1vbnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0b3VjaCBldmVudCBwcmV2ZW50IG1vdXNlIGV2ZW50cyBlbXVsYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9jID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsICdwaWthLXNlbGVjdC1tb250aCcpKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5nb3RvTW9udGgodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0LXllYXInKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b1llYXIodGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbktleUNoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcblxuICAgICAgICAgICAgaWYgKHNlbGYuaXNWaXNpYmxlKCkpIHtcblxuICAgICAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLmJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkanVzdERhdGUoJ3N1YnRyYWN0JywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRqdXN0RGF0ZSgnYWRkJywgNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENoYW5nZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkYXRlO1xuXG4gICAgICAgICAgICBpZiAoZS5maXJlZEJ5ID09PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMucGFyc2UpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gb3B0cy5wYXJzZShvcHRzLmZpZWxkLnZhbHVlLCBvcHRzLmZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQsIG9wdHMuZm9ybWF0U3RyaWN0KTtcbiAgICAgICAgICAgICAgICBkYXRlID0gKGRhdGUgJiYgZGF0ZS5pc1ZhbGlkKCkpID8gZGF0ZS50b0RhdGUoKSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2VsZi5fdikge1xuICAgICAgICAgICAgICAgIHNlbGYuc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgc2VsZi5zaG93KCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25JbnB1dENsaWNrID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBzZWxmLnNob3coKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZWxmLl9vbklucHV0Qmx1ciA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gSUUgYWxsb3dzIHBpa2EgZGl2IHRvIGdhaW4gZm9jdXM7IGNhdGNoIGJsdXIgdGhlIGlucHV0IGZpZWxkXG4gICAgICAgICAgICB2YXIgcEVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MocEVsLCAncGlrYS1zaW5nbGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKChwRWwgPSBwRWwucGFyZW50Tm9kZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9iID0gc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLl9jID0gZmFsc2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5fb25DbGljayA9IGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgcEVsID0gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWhhc0V2ZW50TGlzdGVuZXJzICYmIGhhc0NsYXNzKHRhcmdldCwgJ3Bpa2Etc2VsZWN0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdvbmNoYW5nZScsICdyZXR1cm47Jyk7XG4gICAgICAgICAgICAgICAgICAgIGFkZEV2ZW50KHRhcmdldCwgJ2NoYW5nZScsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgJ3Bpa2Etc2luZ2xlJykgfHwgcEVsID09PSBvcHRzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICgocEVsID0gcEVsLnBhcmVudE5vZGUpKTtcbiAgICAgICAgICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2VsZi5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxmLmVsLmNsYXNzTmFtZSA9ICdwaWthLXNpbmdsZScgKyAob3B0cy5pc1JUTCA/ICcgaXMtcnRsJyA6ICcnKSArIChvcHRzLnRoZW1lID8gJyAnICsgb3B0cy50aGVtZSA6ICcnKTtcblxuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAnbW91c2Vkb3duJywgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgICAgICBhZGRFdmVudChzZWxmLmVsLCAndG91Y2hlbmQnLCBzZWxmLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgIGFkZEV2ZW50KHNlbGYuZWwsICdjaGFuZ2UnLCBzZWxmLl9vbkNoYW5nZSk7XG5cbiAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJywgc2VsZi5fb25LZXlDaGFuZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIG9wdHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHNlbGYuZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzZWxmLmVsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmVsLCBvcHRzLmZpZWxkLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsICdjaGFuZ2UnLCBzZWxmLl9vbklucHV0Q2hhbmdlKTtcblxuICAgICAgICAgICAgaWYgKCFvcHRzLmRlZmF1bHREYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc01vbWVudCAmJiBvcHRzLmZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBtb21lbnQob3B0cy5maWVsZC52YWx1ZSwgb3B0cy5mb3JtYXQpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKG9wdHMuZmllbGQudmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0cy5zZXREZWZhdWx0RGF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGVmRGF0ZSA9IG9wdHMuZGVmYXVsdERhdGU7XG5cbiAgICAgICAgaWYgKGlzRGF0ZShkZWZEYXRlKSkge1xuICAgICAgICAgICAgaWYgKG9wdHMuc2V0RGVmYXVsdERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoZGVmRGF0ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuZ290b0RhdGUoZGVmRGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxmLmdvdG9EYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMuYm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgc2VsZi5lbC5jbGFzc05hbWUgKz0gJyBpcy1ib3VuZCc7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdjbGljaycsIHNlbGYuX29uSW5wdXRDbGljayk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdmb2N1cycsIHNlbGYuX29uSW5wdXRGb2N1cyk7XG4gICAgICAgICAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgc2VsZi5fb25JbnB1dEJsdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgUGlrYWRheSBBUElcbiAgICAgKi9cbiAgICBQaWthZGF5LnByb3RvdHlwZSA9IHtcblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb25maWd1cmUgZnVuY3Rpb25hbGl0eVxuICAgICAgICAgKi9cbiAgICAgICAgY29uZmlnOiBmdW5jdGlvbihvcHRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX28pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvcHRzID0gZXh0ZW5kKHRoaXMuX28sIG9wdGlvbnMsIHRydWUpO1xuXG4gICAgICAgICAgICBvcHRzLmlzUlRMID0gISFvcHRzLmlzUlRMO1xuXG4gICAgICAgICAgICBvcHRzLmZpZWxkID0gKG9wdHMuZmllbGQgJiYgb3B0cy5maWVsZC5ub2RlTmFtZSkgPyBvcHRzLmZpZWxkIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy50aGVtZSA9ICh0eXBlb2Ygb3B0cy50aGVtZSkgPT09ICdzdHJpbmcnICYmIG9wdHMudGhlbWUgPyBvcHRzLnRoZW1lIDogbnVsbDtcblxuICAgICAgICAgICAgb3B0cy5ib3VuZCA9ICEhKG9wdHMuYm91bmQgIT09IHVuZGVmaW5lZCA/IG9wdHMuZmllbGQgJiYgb3B0cy5ib3VuZCA6IG9wdHMuZmllbGQpO1xuXG4gICAgICAgICAgICBvcHRzLnRyaWdnZXIgPSAob3B0cy50cmlnZ2VyICYmIG9wdHMudHJpZ2dlci5ub2RlTmFtZSkgPyBvcHRzLnRyaWdnZXIgOiBvcHRzLmZpZWxkO1xuXG4gICAgICAgICAgICBvcHRzLmRpc2FibGVXZWVrZW5kcyA9ICEhb3B0cy5kaXNhYmxlV2Vla2VuZHM7XG5cbiAgICAgICAgICAgIG9wdHMuZGlzYWJsZURheUZuID0gKHR5cGVvZiBvcHRzLmRpc2FibGVEYXlGbikgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRpc2FibGVEYXlGbiA6IG51bGw7XG5cbiAgICAgICAgICAgIHZhciBub20gPSBwYXJzZUludChvcHRzLm51bWJlck9mTW9udGhzLCAxMCkgfHwgMTtcbiAgICAgICAgICAgIG9wdHMubnVtYmVyT2ZNb250aHMgPSBub20gPiA0ID8gNCA6IG5vbTtcblxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5taW5EYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWluRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0RhdGUob3B0cy5tYXhEYXRlKSkge1xuICAgICAgICAgICAgICAgIG9wdHMubWF4RGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChvcHRzLm1pbkRhdGUgJiYgb3B0cy5tYXhEYXRlKSAmJiBvcHRzLm1heERhdGUgPCBvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBvcHRzLm1heERhdGUgPSBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1pbkRhdGUob3B0cy5taW5EYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE1heERhdGUob3B0cy5tYXhEYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQXJyYXkob3B0cy55ZWFyUmFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMTA7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2VbMF0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVswXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlWzFdID0gcGFyc2VJbnQob3B0cy55ZWFyUmFuZ2VbMV0sIDEwKSB8fCBmYWxsYmFjaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3B0cy55ZWFyUmFuZ2UgPSBNYXRoLmFicyhwYXJzZUludChvcHRzLnllYXJSYW5nZSwgMTApKSB8fCBkZWZhdWx0cy55ZWFyUmFuZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMueWVhclJhbmdlID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdHMueWVhclJhbmdlID0gMTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmcgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uICh1c2luZyBNb21lbnQuanMgaWYgYXZhaWxhYmxlKVxuICAgICAgICAgKi9cbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKGZvcm1hdClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8IHRoaXMuX28uZm9ybWF0O1xuICAgICAgICAgICAgaWYgKCFpc0RhdGUodGhpcy5fZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fby50b1N0cmluZykge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fby50b1N0cmluZyh0aGlzLl9kLCBmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc01vbWVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KHRoaXMuX2QpLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2QudG9EYXRlU3RyaW5nKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHJldHVybiBhIE1vbWVudC5qcyBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChpZiBhdmFpbGFibGUpXG4gICAgICAgICAqL1xuICAgICAgICBnZXRNb21lbnQ6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGhhc01vbWVudCA/IG1vbWVudCh0aGlzLl9kKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb24gZnJvbSBhIE1vbWVudC5qcyBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAgICAgICAgICovXG4gICAgICAgIHNldE1vbWVudDogZnVuY3Rpb24oZGF0ZSwgcHJldmVudE9uU2VsZWN0KVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoaGFzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkYXRlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0ZShkYXRlLnRvRGF0ZSgpLCBwcmV2ZW50T25TZWxlY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZXR1cm4gYSBEYXRlIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIGdldERhdGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIGlzRGF0ZSh0aGlzLl9kKSA/IG5ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKSA6IG51bGw7XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHNldCB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIHNldERhdGU6IGZ1bmN0aW9uKGRhdGUsIHByZXZlbnRPblNlbGVjdClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCAnY2hhbmdlJywgeyBmaXJlZEJ5OiB0aGlzIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShkYXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG1pbiA9IHRoaXMuX28ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICBtYXggPSB0aGlzLl9vLm1heERhdGU7XG5cbiAgICAgICAgICAgIGlmIChpc0RhdGUobWluKSAmJiBkYXRlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IG1pbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKG1heCkgJiYgZGF0ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBtYXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodGhpcy5fZCk7XG4gICAgICAgICAgICB0aGlzLmdvdG9EYXRlKHRoaXMuX2QpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fby5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZmllbGQudmFsdWUgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50KHRoaXMuX28uZmllbGQsICdjaGFuZ2UnLCB7IGZpcmVkQnk6IHRoaXMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXByZXZlbnRPblNlbGVjdCAmJiB0eXBlb2YgdGhpcy5fby5vblNlbGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25TZWxlY3QuY2FsbCh0aGlzLCB0aGlzLmdldERhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNoYW5nZSB2aWV3IHRvIGEgc3BlY2lmaWMgZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b0RhdGU6IGZ1bmN0aW9uKGRhdGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdDYWxlbmRhciA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRlKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxlbmRhcnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlyc3RWaXNpYmxlRGF0ZSA9IG5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLCAxKSxcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsIHRoaXMuY2FsZW5kYXJzW3RoaXMuY2FsZW5kYXJzLmxlbmd0aC0xXS5tb250aCwgMSksXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGVEYXRlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBlbmQgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgbGFzdFZpc2libGVEYXRlLnNldE1vbnRoKGxhc3RWaXNpYmxlRGF0ZS5nZXRNb250aCgpKzEpO1xuICAgICAgICAgICAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXREYXRlKGxhc3RWaXNpYmxlRGF0ZS5nZXREYXRlKCktMSk7XG4gICAgICAgICAgICAgICAgbmV3Q2FsZW5kYXIgPSAodmlzaWJsZURhdGUgPCBmaXJzdFZpc2libGVEYXRlLmdldFRpbWUoKSB8fCBsYXN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIDwgdmlzaWJsZURhdGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3Q2FsZW5kYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFycyA9IFt7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vLm1haW5DYWxlbmRhciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCArPSAxIC0gdGhpcy5fby5udW1iZXJPZk1vbnRocztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgYWRqdXN0RGF0ZTogZnVuY3Rpb24oc2lnbiwgZGF5cykge1xuXG4gICAgICAgICAgICB2YXIgZGF5ID0gdGhpcy5nZXREYXRlKCkgfHwgbmV3IERhdGUoKTtcbiAgICAgICAgICAgIHZhciBkaWZmZXJlbmNlID0gcGFyc2VJbnQoZGF5cykqMjQqNjAqNjAqMTAwMDtcblxuICAgICAgICAgICAgdmFyIG5ld0RheTtcblxuICAgICAgICAgICAgaWYgKHNpZ24gPT09ICdhZGQnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSArIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF5ID0gbmV3IERhdGUoZGF5LnZhbHVlT2YoKSAtIGRpZmZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldERhdGUobmV3RGF5KTtcbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0gPSBhZGp1c3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gMTsgYyA8IHRoaXMuX28ubnVtYmVyT2ZNb250aHM7IGMrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzW2NdID0gYWRqdXN0Q2FsZW5kYXIoe1xuICAgICAgICAgICAgICAgICAgICBtb250aDogdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKyBjLFxuICAgICAgICAgICAgICAgICAgICB5ZWFyOiB0aGlzLmNhbGVuZGFyc1swXS55ZWFyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnb3RvVG9kYXk6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHZpZXcgdG8gYSBzcGVjaWZpYyBtb250aCAoemVyby1pbmRleCwgZS5nLiAwOiBKYW51YXJ5KVxuICAgICAgICAgKi9cbiAgICAgICAgZ290b01vbnRoOiBmdW5jdGlvbihtb250aClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aCA9IHBhcnNlSW50KG1vbnRoLCAxMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBuZXh0TW9udGg6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKztcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcHJldk1vbnRoOiBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS07XG4gICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGZ1bGwgeWVhciAoZS5nLiBcIjIwMTJcIilcbiAgICAgICAgICovXG4gICAgICAgIGdvdG9ZZWFyOiBmdW5jdGlvbih5ZWFyKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkanVzdENhbGVuZGFycygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjaGFuZ2UgdGhlIG1pbkRhdGVcbiAgICAgICAgICovXG4gICAgICAgIHNldE1pbkRhdGU6IGZ1bmN0aW9uKHZhbHVlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZih2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1pbkRhdGUgPSBkZWZhdWx0cy5taW5EYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluWWVhciAgPSBkZWZhdWx0cy5taW5ZZWFyO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWluTW9udGggPSBkZWZhdWx0cy5taW5Nb250aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSBkZWZhdWx0cy5zdGFydFJhbmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogY2hhbmdlIHRoZSBtYXhEYXRlXG4gICAgICAgICAqL1xuICAgICAgICBzZXRNYXhEYXRlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgc2V0VG9TdGFydE9mRGF5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4TW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vLm1heERhdGUgPSBkZWZhdWx0cy5tYXhEYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuX28ubWF4WWVhciA9IGRlZmF1bHRzLm1heFllYXI7XG4gICAgICAgICAgICAgICAgdGhpcy5fby5tYXhNb250aCA9IGRlZmF1bHRzLm1heE1vbnRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX28uZW5kUmFuZ2UgPSBkZWZhdWx0cy5lbmRSYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kcmF3KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0U3RhcnRSYW5nZTogZnVuY3Rpb24odmFsdWUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRoaXMuX28uc3RhcnRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldEVuZFJhbmdlOiBmdW5jdGlvbih2YWx1ZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IHZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByZWZyZXNoIHRoZSBIVE1MXG4gICAgICAgICAqL1xuICAgICAgICBkcmF3OiBmdW5jdGlvbihmb3JjZSlcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl92ICYmICFmb3JjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBtaW5ZZWFyID0gb3B0cy5taW5ZZWFyLFxuICAgICAgICAgICAgICAgIG1heFllYXIgPSBvcHRzLm1heFllYXIsXG4gICAgICAgICAgICAgICAgbWluTW9udGggPSBvcHRzLm1pbk1vbnRoLFxuICAgICAgICAgICAgICAgIG1heE1vbnRoID0gb3B0cy5tYXhNb250aCxcbiAgICAgICAgICAgICAgICBodG1sID0gJycsXG4gICAgICAgICAgICAgICAgcmFuZElkO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5feSA8PSBtaW5ZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1pblllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtaW5Nb250aCkgJiYgdGhpcy5fbSA8IG1pbk1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtaW5Nb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5feSA+PSBtYXhZZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5feSA9IG1heFllYXI7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihtYXhNb250aCkgJiYgdGhpcy5fbSA+IG1heE1vbnRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX20gPSBtYXhNb250aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmRJZCA9ICdwaWthLXRpdGxlLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKS5zdWJzdHIoMCwgMik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgb3B0cy5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInBpa2EtbGVuZGFyXCI+JyArIHJlbmRlclRpdGxlKHRoaXMsIGMsIHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCB0aGlzLmNhbGVuZGFyc1swXS55ZWFyLCByYW5kSWQpICsgdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbY10ueWVhciwgdGhpcy5jYWxlbmRhcnNbY10ubW9udGgsIHJhbmRJZCkgKyAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lbC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIGlmKG9wdHMuZmllbGQudHlwZSAhPT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy50cmlnZ2VyLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9vLm9uRHJhdyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX28ub25EcmF3KHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgc2NyZWVuIHJlYWRlciB1c2VyIGtub3cgdG8gdXNlIGFycm93IGtleXNcbiAgICAgICAgICAgICAgICBvcHRzLmZpZWxkLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG9wdHMuYXJpYUxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBhZGp1c3RQb3NpdGlvbjogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZmllbGQsIHBFbCwgd2lkdGgsIGhlaWdodCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCwgbGVmdCwgdG9wLCBjbGllbnRSZWN0LCBsZWZ0QWxpZ25lZCwgYm90dG9tQWxpZ25lZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX28uY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgICAgICAgICBmaWVsZCA9IHRoaXMuX28udHJpZ2dlcjtcbiAgICAgICAgICAgIHBFbCA9IGZpZWxkO1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLmVsLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICB2aWV3cG9ydFdpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgbGVmdEFsaWduZWQgPSB0cnVlO1xuICAgICAgICAgICAgYm90dG9tQWxpZ25lZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2xpZW50UmVjdCA9IGZpZWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBjbGllbnRSZWN0LmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdG9wID0gY2xpZW50UmVjdC5ib3R0b20gKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBwRWwub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgICAgICB0b3AgID0gcEVsLm9mZnNldFRvcCArIHBFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgd2hpbGUoKHBFbCA9IHBFbC5vZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gcEVsLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgICAgIHRvcCAgKz0gcEVsLm9mZnNldFRvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGRlZmF1bHQgcG9zaXRpb24gaXMgYm90dG9tICYgbGVmdFxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgbGVmdCArIHdpZHRoID4gdmlld3BvcnRXaWR0aCkgfHxcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigncmlnaHQnKSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIGxlZnQgLSB3aWR0aCArIGZpZWxkLm9mZnNldFdpZHRoID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBsZWZ0QWxpZ25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCh0aGlzLl9vLnJlcG9zaXRpb24gJiYgdG9wICsgaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQgKyBzY3JvbGxUb3ApIHx8XG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoJ3RvcCcpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0ID4gMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRvcCA9IHRvcCAtIGhlaWdodCAtIGZpZWxkLm9mZnNldEhlaWdodDtcbiAgICAgICAgICAgICAgICBib3R0b21BbGlnbmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSB0b3AgKyAncHgnO1xuXG4gICAgICAgICAgICBhZGRDbGFzcyh0aGlzLmVsLCBsZWZ0QWxpZ25lZCA/ICdsZWZ0LWFsaWduZWQnIDogJ3JpZ2h0LWFsaWduZWQnKTtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMuZWwsIGJvdHRvbUFsaWduZWQgPyAnYm90dG9tLWFsaWduZWQnIDogJ3RvcC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhbGVmdEFsaWduZWQgPyAnbGVmdC1hbGlnbmVkJyA6ICdyaWdodC1hbGlnbmVkJyk7XG4gICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhYm90dG9tQWxpZ25lZCA/ICdib3R0b20tYWxpZ25lZCcgOiAndG9wLWFsaWduZWQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogcmVuZGVyIEhUTUwgZm9yIGEgcGFydGljdWxhciBtb250aFxuICAgICAgICAgKi9cbiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbih5ZWFyLCBtb250aCwgcmFuZElkKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgb3B0cyAgID0gdGhpcy5fbyxcbiAgICAgICAgICAgICAgICBub3cgICAgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIGRheXMgICA9IGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSxcbiAgICAgICAgICAgICAgICBiZWZvcmUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCksXG4gICAgICAgICAgICAgICAgZGF0YSAgID0gW10sXG4gICAgICAgICAgICAgICAgcm93ICAgID0gW107XG4gICAgICAgICAgICBzZXRUb1N0YXJ0T2ZEYXkobm93KTtcbiAgICAgICAgICAgIGlmIChvcHRzLmZpcnN0RGF5ID4gMCkge1xuICAgICAgICAgICAgICAgIGJlZm9yZSAtPSBvcHRzLmZpcnN0RGF5O1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZSArPSA3O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2aW91c01vbnRoID0gbW9udGggPT09IDAgPyAxMSA6IG1vbnRoIC0gMSxcbiAgICAgICAgICAgICAgICBuZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyAwIDogbW9udGggKyAxLFxuICAgICAgICAgICAgICAgIHllYXJPZlByZXZpb3VzTW9udGggPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcixcbiAgICAgICAgICAgICAgICB5ZWFyT2ZOZXh0TW9udGggPSBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXIsXG4gICAgICAgICAgICAgICAgZGF5c0luUHJldmlvdXNNb250aCA9IGdldERheXNJbk1vbnRoKHllYXJPZlByZXZpb3VzTW9udGgsIHByZXZpb3VzTW9udGgpO1xuICAgICAgICAgICAgdmFyIGNlbGxzID0gZGF5cyArIGJlZm9yZSxcbiAgICAgICAgICAgICAgICBhZnRlciA9IGNlbGxzO1xuICAgICAgICAgICAgd2hpbGUoYWZ0ZXIgPiA3KSB7XG4gICAgICAgICAgICAgICAgYWZ0ZXIgLT0gNztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxzICs9IDcgLSBhZnRlcjtcbiAgICAgICAgICAgIHZhciBpc1dlZWtTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIHIgPSAwOyBpIDwgY2VsbHM7IGkrKylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF5ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEgKyAoaSAtIGJlZm9yZSkpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkID0gaXNEYXRlKHRoaXMuX2QpID8gY29tcGFyZURhdGVzKGRheSwgdGhpcy5fZCkgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNUb2RheSA9IGNvbXBhcmVEYXRlcyhkYXksIG5vdyksXG4gICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50ID0gb3B0cy5ldmVudHMuaW5kZXhPZihkYXkudG9EYXRlU3RyaW5nKCkpICE9PSAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbXB0eSA9IGkgPCBiZWZvcmUgfHwgaSA+PSAoZGF5cyArIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIGRheU51bWJlciA9IDEgKyAoaSAtIGJlZm9yZSksXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoTnVtYmVyID0gbW9udGgsXG4gICAgICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyLFxuICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2UgPSBvcHRzLnN0YXJ0UmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuc3RhcnRSYW5nZSwgZGF5KSxcbiAgICAgICAgICAgICAgICAgICAgaXNFbmRSYW5nZSA9IG9wdHMuZW5kUmFuZ2UgJiYgY29tcGFyZURhdGVzKG9wdHMuZW5kUmFuZ2UsIGRheSksXG4gICAgICAgICAgICAgICAgICAgIGlzSW5SYW5nZSA9IG9wdHMuc3RhcnRSYW5nZSAmJiBvcHRzLmVuZFJhbmdlICYmIG9wdHMuc3RhcnRSYW5nZSA8IGRheSAmJiBkYXkgPCBvcHRzLmVuZFJhbmdlLFxuICAgICAgICAgICAgICAgICAgICBpc0Rpc2FibGVkID0gKG9wdHMubWluRGF0ZSAmJiBkYXkgPCBvcHRzLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0cy5tYXhEYXRlICYmIGRheSA+IG9wdHMubWF4RGF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVXZWVrZW5kcyAmJiBpc1dlZWtlbmQoZGF5KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRzLmRpc2FibGVEYXlGbiAmJiBvcHRzLmRpc2FibGVEYXlGbihkYXkpKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlzSW5QcmV2aW91c01vbnRoICsgZGF5TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBwcmV2aW91c01vbnRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZlByZXZpb3VzTW9udGg7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXlOdW1iZXIgPSBkYXlOdW1iZXIgLSBkYXlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOdW1iZXIgPSBuZXh0TW9udGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck9mTmV4dE1vbnRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRheUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRheTogZGF5TnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGg6IG1vbnRoTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhcjogeWVhck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0V2ZW50OiBoYXNFdmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5OiBpc1RvZGF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1N0YXJ0UmFuZ2U6IGlzU3RhcnRSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kUmFuZ2U6IGlzRW5kUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0luUmFuZ2U6IGlzSW5SYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczogb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHNcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRzLnBpY2tXaG9sZVdlZWsgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93LnB1c2gocmVuZGVyRGF5KGRheUNvbmZpZykpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCsrciA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LnVuc2hpZnQocmVuZGVyV2VlayhpIC0gYmVmb3JlLCBtb250aCwgeWVhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZW5kZXJSb3cocm93LCBvcHRzLmlzUlRMLCBvcHRzLnBpY2tXaG9sZVdlZWssIGlzV2Vla1NlbGVjdGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIHJvdyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgICAgICAgfSxcblxuICAgICAgICBpc1Zpc2libGU6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Y7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2hvdzogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXcoKTtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAnaXMtaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX28uYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRXZlbnQoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbk9wZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgaGlkZTogZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgdiA9IHRoaXMuX3Y7XG4gICAgICAgICAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5fb25DbGljayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSAnc3RhdGljJzsgLy8gcmVzZXRcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5lbCwgJ2lzLWhpZGRlbicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3YgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB0aGlzLl9vLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBHQU1FIE9WRVJcbiAgICAgICAgICovXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLl9vO1xuXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAndG91Y2hlbmQnLCB0aGlzLl9vbk1vdXNlRG93biwgdHJ1ZSk7XG4gICAgICAgICAgICByZW1vdmVFdmVudCh0aGlzLmVsLCAnY2hhbmdlJywgdGhpcy5fb25DaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG9wdHMua2V5Ym9hcmRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX29uS2V5Q2hhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy5maWVsZCwgJ2NoYW5nZScsIHRoaXMuX29uSW5wdXRDaGFuZ2UpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCAnZm9jdXMnLCB0aGlzLl9vbklucHV0Rm9jdXMpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsICdibHVyJywgdGhpcy5fb25JbnB1dEJsdXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH07XG5cbiAgICByZXR1cm4gUGlrYWRheTtcbn0pKTtcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93LkF1dG9saW5rZXI7IiwiLyogZXNsaW50IGtleS1zcGFjaW5nOiAwICovXG4vKiBlc2xpbnQgcXVvdGUtcHJvcHM6IDAgKi9cblxuY29uc3QgTWltZSA9IHtcblx0J2VtbCc6ICdtZXNzYWdlL3JmYzgyMicsXG5cdCdtaW1lJzogJ21lc3NhZ2UvcmZjODIyJyxcblx0J3R4dCc6ICd0ZXh0L3BsYWluJyxcblx0J3RleHQnOiAndGV4dC9wbGFpbicsXG5cdCdkZWYnOiAndGV4dC9wbGFpbicsXG5cdCdsaXN0JzogJ3RleHQvcGxhaW4nLFxuXHQnaW4nOiAndGV4dC9wbGFpbicsXG5cdCdpbmknOiAndGV4dC9wbGFpbicsXG5cdCdsb2cnOiAndGV4dC9wbGFpbicsXG5cdCdzcWwnOiAndGV4dC9wbGFpbicsXG5cdCdjZmcnOiAndGV4dC9wbGFpbicsXG5cdCdjb25mJzogJ3RleHQvcGxhaW4nLFxuXHQnYXNjJzogJ3RleHQvcGxhaW4nLFxuXHQncnR4JzogJ3RleHQvcmljaHRleHQnLFxuXHQndmNhcmQnOiAndGV4dC92Y2FyZCcsXG5cdCd2Y2YnOiAndGV4dC92Y2FyZCcsXG5cdCdodG0nOiAndGV4dC9odG1sJyxcblx0J2h0bWwnOiAndGV4dC9odG1sJyxcblx0J2Nzdic6ICd0ZXh0L2NzdicsXG5cdCdpY3MnOiAndGV4dC9jYWxlbmRhcicsXG5cdCdpZmInOiAndGV4dC9jYWxlbmRhcicsXG5cdCd4bWwnOiAndGV4dC94bWwnLFxuXHQnanNvbic6ICdhcHBsaWNhdGlvbi9qc29uJyxcblx0J3N3Zic6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsXG5cdCdobHAnOiAnYXBwbGljYXRpb24vd2luaGxwJyxcblx0J3dndCc6ICdhcHBsaWNhdGlvbi93aWRnZXQnLFxuXHQnY2htJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCcsXG5cdCdwMTAnOiAnYXBwbGljYXRpb24vcGtjczEwJyxcblx0J3A3Yyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3bSc6ICdhcHBsaWNhdGlvbi9wa2NzNy1taW1lJyxcblx0J3A3cyc6ICdhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUnLFxuXHQndG9ycmVudCc6ICdhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnQnLFxuXG5cdC8vIHNjcmlwdHNcblx0J2pzJzogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnLFxuXHQncGwnOiAndGV4dC9wZXJsJyxcblx0J2Nzcyc6ICd0ZXh0L2NzcycsXG5cdCdhc3AnOiAndGV4dC9hc3AnLFxuXHQncGhwJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BocDMnOiAnYXBwbGljYXRpb24veC1odHRwZC1waHAnLFxuXHQncGhwNCc6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsXG5cdCdwaHA1JzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblx0J3BodG1sJzogJ2FwcGxpY2F0aW9uL3gtaHR0cGQtcGhwJyxcblxuXHQvLyBpbWFnZXNcblx0J3BuZyc6ICdpbWFnZS9wbmcnLFxuXHQnanBnJzogJ2ltYWdlL2pwZWcnLFxuXHQnanBlZyc6ICdpbWFnZS9qcGVnJyxcblx0J2pwZSc6ICdpbWFnZS9qcGVnJyxcblx0J2pmaWYnOiAnaW1hZ2UvanBlZycsXG5cdCdnaWYnOiAnaW1hZ2UvZ2lmJyxcblx0J2JtcCc6ICdpbWFnZS9ibXAnLFxuXHQnY2dtJzogJ2ltYWdlL2NnbScsXG5cdCdpZWYnOiAnaW1hZ2UvaWVmJyxcblx0J2ljbyc6ICdpbWFnZS94LWljb24nLFxuXHQndGlmJzogJ2ltYWdlL3RpZmYnLFxuXHQndGlmZic6ICdpbWFnZS90aWZmJyxcblx0J3N2Zyc6ICdpbWFnZS9zdmcreG1sJyxcblx0J3N2Z3onOiAnaW1hZ2Uvc3ZnK3htbCcsXG5cdCdkanYnOiAnaW1hZ2Uvdm5kLmRqdnUnLFxuXHQnZGp2dSc6ICdpbWFnZS92bmQuZGp2dScsXG5cdCd3ZWJwJzogJ2ltYWdlL3dlYnAnLFxuXG5cdC8vIGFyY2hpdmVzXG5cdCd6aXAnOiAnYXBwbGljYXRpb24vemlwJyxcblx0Jzd6JzogJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCcsXG5cdCdyYXInOiAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCcsXG5cdCdleGUnOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2RsbCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnc2NyJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjb20nOiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJyxcblx0J2JhdCc6ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnLFxuXHQnbXNpJzogJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsXG5cdCdjYWInOiAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJyxcblx0J2d6JzogJ2FwcGxpY2F0aW9uL3gtZ3ppcCcsXG5cdCd0Z3onOiAnYXBwbGljYXRpb24veC1nemlwJyxcblx0J2J6JzogJ2FwcGxpY2F0aW9uL3gtYnppcCcsXG5cdCdiejInOiAnYXBwbGljYXRpb24veC1iemlwMicsXG5cdCdkZWInOiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsXG5cblx0Ly8gZm9udHNcblx0J3BzZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtbGludXgtcHNmJyxcblx0J290Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtb3RmJyxcblx0J3BjZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtcGNmJyxcblx0J3NuZic6ICdhcHBsaWNhdGlvbi94LWZvbnQtc25mJyxcblx0J3R0Zic6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblx0J3R0Yyc6ICdhcHBsaWNhdGlvbi94LWZvbnQtdHRmJyxcblxuXHQvLyBhdWRpb1xuXHQnbXAzJzogJ2F1ZGlvL21wZWcnLFxuXHQnYW1yJzogJ2F1ZGlvL2FtcicsXG5cdCdhYWMnOiAnYXVkaW8veC1hYWMnLFxuXHQnYWlmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZjJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCdhaWZmJzogJ2F1ZGlvL3gtYWlmZicsXG5cdCd3YXYnOiAnYXVkaW8veC13YXYnLFxuXHQnd21hJzogJ2F1ZGlvL3gtbXMtd21hJyxcblx0J3dheCc6ICdhdWRpby94LW1zLXdheCcsXG5cdCdtaWRpJzogJ2F1ZGlvL21pZGknLFxuXHQnbXA0YSc6ICdhdWRpby9tcDQnLFxuXHQnb2dnJzogJ2F1ZGlvL29nZycsXG5cdCd3ZWJhJzogJ2F1ZGlvL3dlYm0nLFxuXHQncmEnOiAnYXVkaW8veC1wbi1yZWFsYXVkaW8nLFxuXHQncmFtJzogJ2F1ZGlvL3gtcG4tcmVhbGF1ZGlvJyxcblx0J3JtcCc6ICdhdWRpby94LXBuLXJlYWxhdWRpby1wbHVnaW4nLFxuXHQnbTN1JzogJ2F1ZGlvL3gtbXBlZ3VybCcsXG5cblx0Ly8gdmlkZW9cblx0J2Zsdic6ICd2aWRlby94LWZsdicsXG5cdCdxdCc6ICd2aWRlby9xdWlja3RpbWUnLFxuXHQnbW92JzogJ3ZpZGVvL3F1aWNrdGltZScsXG5cdCd3bXYnOiAndmlkZW8vd2luZG93cy1tZWRpYScsXG5cdCdhdmknOiAndmlkZW8veC1tc3ZpZGVvJyxcblx0J21wZyc6ICd2aWRlby9tcGVnJyxcblx0J21wZWcnOiAndmlkZW8vbXBlZycsXG5cdCdtcGUnOiAndmlkZW8vbXBlZycsXG5cdCdtMXYnOiAndmlkZW8vbXBlZycsXG5cdCdtMnYnOiAndmlkZW8vbXBlZycsXG5cdCczZ3AnOiAndmlkZW8vM2dwcCcsXG5cdCczZzInOiAndmlkZW8vM2dwcDInLFxuXHQnaDI2MSc6ICd2aWRlby9oMjYxJyxcblx0J2gyNjMnOiAndmlkZW8vaDI2MycsXG5cdCdoMjY0JzogJ3ZpZGVvL2gyNjQnLFxuXHQnanBndic6ICd2aWRlby9qcGd2Jyxcblx0J21wNCc6ICd2aWRlby9tcDQnLFxuXHQnbXA0dic6ICd2aWRlby9tcDQnLFxuXHQnbXBnNCc6ICd2aWRlby9tcDQnLFxuXHQnb2d2JzogJ3ZpZGVvL29nZycsXG5cdCd3ZWJtJzogJ3ZpZGVvL3dlYm0nLFxuXHQnbTR2JzogJ3ZpZGVvL3gtbTR2Jyxcblx0J2FzZic6ICd2aWRlby94LW1zLWFzZicsXG5cdCdhc3gnOiAndmlkZW8veC1tcy1hc2YnLFxuXHQnd20nOiAndmlkZW8veC1tcy13bScsXG5cdCd3bXgnOiAndmlkZW8veC1tcy13bXgnLFxuXHQnd3Z4JzogJ3ZpZGVvL3gtbXMtd3Z4Jyxcblx0J21vdmllJzogJ3ZpZGVvL3gtc2dpLW1vdmllJyxcblxuXHQvLyBhZG9iZVxuXHQncGRmJzogJ2FwcGxpY2F0aW9uL3BkZicsXG5cdCdwc2QnOiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCcsXG5cdCdhaSc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J2Vwcyc6ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0Jyxcblx0J3BzJzogJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLFxuXG5cdC8vIG1zIG9mZmljZVxuXHQnZG9jJzogJ2FwcGxpY2F0aW9uL21zd29yZCcsXG5cdCdkb3QnOiAnYXBwbGljYXRpb24vbXN3b3JkJyxcblx0J3J0Zic6ICdhcHBsaWNhdGlvbi9ydGYnLFxuXHQneGxzJzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG5cdCdwcHQnOiAnYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQnLFxuXHQnZG9jeCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG5cdCd4bHN4JzogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Jyxcblx0J2RvdHgnOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUnLFxuXHQncHB0eCc6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJyxcblxuXHQvLyBvcGVuIG9mZmljZVxuXHQnb2R0JzogJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCcsXG5cdCdvZHMnOiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbn07XG5cbmV4cG9ydCB7IE1pbWUsIE1pbWUgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yKTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInJlcXVpcmUoJy4vZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBET01JdGVyYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlICYmIGNsYXNzb2YoQ29sbGVjdGlvblByb3RvdHlwZSkgIT09IFRPX1NUUklOR19UQUcpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgQ09MTEVDVElPTl9OQU1FKTtcbiAgfVxuICBJdGVyYXRvcnNbQ09MTEVDVElPTl9OQU1FXSA9IEl0ZXJhdG9ycy5BcnJheTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc0Z1bmMgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0FzaycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNBc2snXG59KVxuY2xhc3MgQXNrUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmFza0Rlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnllc0J1dHRvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMubm9CdXR0b24gPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMueWVzRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLm5vRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSB0cnVlO1xuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLlBvcHVwQXNrO1xuXHR9XG5cblx0Y2xlYXJQb3B1cCgpIHtcblx0XHR0aGlzLmFza0Rlc2MoJycpO1xuXHRcdHRoaXMueWVzQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX1lFUycpKTtcblx0XHR0aGlzLm5vQnV0dG9uKGkxOG4oJ1BPUFVQU19BU0svQlVUVE9OX05PJykpO1xuXG5cdFx0dGhpcy55ZXNGb2N1cyhmYWxzZSk7XG5cdFx0dGhpcy5ub0ZvY3VzKGZhbHNlKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBudWxsO1xuXHR9XG5cblx0eWVzQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZlllc0FjdGlvbikpIHtcblx0XHRcdHRoaXMuZlllc0FjdGlvbi5jYWxsKG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdG5vQ2xpY2soKSB7XG5cdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cblx0XHRpZiAoaXNGdW5jKHRoaXMuZk5vQWN0aW9uKSkge1xuXHRcdFx0dGhpcy5mTm9BY3Rpb24uY2FsbChudWxsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNBc2tEZXNjXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmWWVzRnVuY1xuXHQgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZk5vRnVuY1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IHNZZXNCdXR0b25cblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzTm9CdXR0b25cblx0ICogQHBhcmFtIHtib29sZWFuPX0gYkZvY3VzWWVzT25TaG93ID0gdHJ1ZVxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdG9uU2hvdyhhc2tEZXNjLCBmWWVzRnVuYyA9IG51bGwsIGZOb0Z1bmMgPSBudWxsLCB5ZXNCdXR0b24gPSAnJywgbm9CdXR0b24gPSAnJywgaXNGb2N1c1llc09uU2hvdyA9IHRydWUpIHtcblx0XHR0aGlzLmNsZWFyUG9wdXAoKTtcblxuXHRcdHRoaXMuZlllc0FjdGlvbiA9IGZZZXNGdW5jIHx8IG51bGw7XG5cdFx0dGhpcy5mTm9BY3Rpb24gPSBmTm9GdW5jIHx8IG51bGw7XG5cblx0XHR0aGlzLmFza0Rlc2MoYXNrRGVzYyB8fCAnJyk7XG5cblx0XHRpZiAoeWVzQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnllc0J1dHRvbih5ZXNCdXR0b24pO1xuXHRcdH1cblxuXHRcdGlmIChub0J1dHRvbikge1xuXHRcdFx0dGhpcy5ub0J1dHRvbihub0J1dHRvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5iRm9jdXNZZXNPblNob3cgPSAhIWlzRm9jdXNZZXNPblNob3c7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKHRoaXMuYkZvY3VzWWVzT25TaG93KSB7XG5cdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCd0YWIsIHNoaWZ0K3RhYiwgcmlnaHQsIGxlZnQnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMueWVzRm9jdXMoKSkge1xuXHRcdFx0XHR0aGlzLm5vRm9jdXModHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnllc0ZvY3VzKHRydWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5Qb3B1cEFzaywgKCkgPT4ge1xuXHRcdFx0dGhpcy5ub0NsaWNrKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQXNrUG9wdXBWaWV3LCBBc2tQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgUHJvcGVydGllc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjYWNoZSA9IHt9O1xuXG52YXIgdGhyb3dlciA9IGZ1bmN0aW9uIChpdCkgeyB0aHJvdyBpdDsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIG9wdGlvbnMpIHtcbiAgaWYgKGhhcyhjYWNoZSwgTUVUSE9EX05BTUUpKSByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdO1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgdmFyIEFDQ0VTU09SUyA9IGhhcyhvcHRpb25zLCAnQUNDRVNTT1JTJykgPyBvcHRpb25zLkFDQ0VTU09SUyA6IGZhbHNlO1xuICB2YXIgYXJndW1lbnQwID0gaGFzKG9wdGlvbnMsIDApID8gb3B0aW9uc1swXSA6IHRocm93ZXI7XG4gIHZhciBhcmd1bWVudDEgPSBoYXMob3B0aW9ucywgMSkgPyBvcHRpb25zWzFdIDogdW5kZWZpbmVkO1xuXG4gIHJldHVybiBjYWNoZVtNRVRIT0RfTkFNRV0gPSAhIW1ldGhvZCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIGlmIChBQ0NFU1NPUlMgJiYgIURFU0NSSVBUT1JTKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgTyA9IHsgbGVuZ3RoOiAtMSB9O1xuXG4gICAgaWYgKEFDQ0VTU09SUykgZGVmaW5lUHJvcGVydHkoTywgMSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IHRocm93ZXIgfSk7XG4gICAgZWxzZSBPWzFdID0gMTtcblxuICAgIG1ldGhvZC5jYWxsKE8sIGFyZ3VtZW50MCwgYXJndW1lbnQxKTtcbiAgfSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgQXJyYXlJdGVyYXRvck1ldGhvZHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JNZXRob2RzLnZhbHVlcztcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdO1xuICB2YXIgQ29sbGVjdGlvblByb3RvdHlwZSA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICAgIH1cbiAgICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIGZvciAodmFyIE1FVEhPRF9OQU1FIGluIEFycmF5SXRlcmF0b3JNZXRob2RzKSB7XG4gICAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSAhPT0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKSB0cnkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgTUVUSE9EX05BTUUsIEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSA9IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yLFxuLy8gc28gd2UgdXNlIGFuIGludGVybWVkaWF0ZSBmdW5jdGlvbi5cbmZ1bmN0aW9uIFJFKHMsIGYpIHtcbiAgcmV0dXJuIFJlZ0V4cChzLCBmKTtcbn1cblxuZXhwb3J0cy5VTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxuICB2YXIgcmUgPSBSRSgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG5leHBvcnRzLkJST0tFTl9DQVJFVCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9IFJFKCdecicsICdneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnc3RyJykgIT0gbnVsbDtcbn0pO1xuIiwidmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmVkdWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJlZHVjZTtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnJlZHVjZSkgPyByZWR1Y2UgOiBvd247XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIXByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY3JlYXRlRWxlbWVudCgnZGl2JyksICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfVxuICB9KS5hICE9IDc7XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWZ1bmN0aW9uJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCJ2YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy44LjInLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnICsgU3RyaW5nKGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXkpICsgJylfJyArICgrK2lkICsgcG9zdGZpeCkudG9TdHJpbmcoMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxuaWYgKEl0ZXJhdG9yUHJvdG90eXBlID09IHVuZGVmaW5lZCkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbmlmICghSVNfUFVSRSAmJiAhaGFzKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUikpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHJldHVybiAhU3RyaW5nKFN5bWJvbCgpKTtcbn0pO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0ICovXG4gICAgYWN0aXZlWERvY3VtZW50ID0gZG9jdW1lbnQuZG9tYWluICYmIG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSBhY3RpdmVYRG9jdW1lbnQgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKTtcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsInZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQywgU0VUX01FVEhPRCkge1xuICBpZiAoaXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGU7XG4gICAgaWYgKCFoYXModGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgICB9XG4gICAgaWYgKFNFVF9NRVRIT0QgJiYgIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldCwgJ3RvU3RyaW5nJywgdG9TdHJpbmcpO1xuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsQXJyYXkpKSB7XG4gICAgQyA9IG9yaWdpbmFsQXJyYXkuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gbmV3IChDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEMpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsIi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3InKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIE5vZGVMaXN0OiB0cnVlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZm9yRWFjaDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZvckVhY2gpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyBmb3JFYWNoIDogb3duO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgY29udmVydExhbmdOYW1lIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuLy8gaW1wb3J0IHt2aWV3LCBWaWV3VHlwZX0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0xhbmd1YWdlcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNMYW5ndWFnZXMnXG59KVxuY2xhc3MgTGFuZ3VhZ2VzUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sYW5ncyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZXJMYW5ndWFnZSA9IHRoaXMudXNlckxhbmd1YWdlKCk7XG5cdFx0XHRyZXR1cm4gXy5tYXAodGhpcy5sYW5ncygpLCAobGFuZ3VhZ2UpID0+ICh7XG5cdFx0XHRcdGtleTogbGFuZ3VhZ2UsXG5cdFx0XHRcdHVzZXI6IGxhbmd1YWdlID09PSB1c2VyTGFuZ3VhZ2UsXG5cdFx0XHRcdHNlbGVjdGVkOiBrby5vYnNlcnZhYmxlKGZhbHNlKSxcblx0XHRcdFx0ZnVsbE5hbWU6IGNvbnZlcnRMYW5nTmFtZShsYW5ndWFnZSlcblx0XHRcdH0pKTtcblx0XHR9KTtcblxuXHRcdHRoaXMubGFuZ3Muc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2V0TGFuZ3VhZ2VTZWxlY3Rpb24oKTtcblx0XHR9KTtcblx0fVxuXG5cdGxhbmd1YWdlVG9vbHRpcE5hbWUobGFuZ3VhZ2UpIHtcblx0XHRjb25zdCByZXN1bHQgPSBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIHRydWUpO1xuXHRcdHJldHVybiBjb252ZXJ0TGFuZ05hbWUobGFuZ3VhZ2UsIGZhbHNlKSA9PT0gcmVzdWx0ID8gJycgOiByZXN1bHQ7XG5cdH1cblxuXHRzZXRMYW5ndWFnZVNlbGVjdGlvbigpIHtcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMuZkxhbmcgPyBrby51bndyYXAodGhpcy5mTGFuZykgOiAnJztcblx0XHRfLmVhY2godGhpcy5sYW5ndWFnZXMoKSwgKGl0ZW0pID0+IHtcblx0XHRcdGl0ZW0uc2VsZWN0ZWQoaXRlbS5rZXkgPT09IGN1cnJlbnRMYW5nKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQmVmb3JlU2hvdygpIHtcblx0XHR0aGlzLmZMYW5nID0gbnVsbDtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZSgnJyk7XG5cblx0XHR0aGlzLmxhbmdzKFtdKTtcblx0fVxuXG5cdG9uU2hvdyhmTGFuZ3VhZ2UsIGxhbmdzLCB1c2VyTGFuZ3VhZ2UpIHtcblx0XHR0aGlzLmZMYW5nID0gZkxhbmd1YWdlO1xuXHRcdHRoaXMudXNlckxhbmd1YWdlKHVzZXJMYW5ndWFnZSB8fCAnJyk7XG5cblx0XHR0aGlzLmxhbmdzKGxhbmdzKTtcblx0fVxuXG5cdGNoYW5nZUxhbmd1YWdlKGxhbmcpIHtcblx0XHRpZiAodGhpcy5mTGFuZykge1xuXHRcdFx0dGhpcy5mTGFuZyhsYW5nKTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbmNlbENvbW1hbmQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBMYW5ndWFnZXNQb3B1cFZpZXcsIExhbmd1YWdlc1BvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBraWxsQ3RybEFDdHJsUywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCBjcmVhdGVDb21tYW5kTGVnYWN5LCBkb21SZWFkeSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyAkd2luLCAkaHRtbCwgZGF0YSBhcyBHbG9iYWxzRGF0YSwgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCAqIGFzIEVudW1zIGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgKiBhcyBQbHVnaW5zIGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBFbWFpbE1vZGVsIH0gZnJvbSAnTW9kZWwvRW1haWwnO1xuXG5leHBvcnQgZGVmYXVsdCAoQXBwKSA9PiB7XG5cdEdsb2JhbHNEYXRhLl9fQVBQX18gPSBBcHA7XG5cblx0JHdpbi5vbigna2V5ZG93bicsIGtpbGxDdHJsQUN0cmxTKS5vbigndW5sb2FkJywgKCkgPT4ge1xuXHRcdEdsb2JhbHNEYXRhLmJVbmxvYWQgPSB0cnVlO1xuXHR9KTtcblxuXHQkaHRtbC5hZGRDbGFzcyhiTW9iaWxlRGV2aWNlID8gJ21vYmlsZScgOiAnbm8tbW9iaWxlJykub24oJ2NsaWNrLmRyb3Bkb3duLmRhdGEtYXBpJywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KTtcblxuXHRjb25zdCBybCA9IHdpbmRvdy5ybCB8fCB7fTtcblxuXHRybC5pMThuID0gaTE4bjtcblx0cmwuY3JlYXRlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmRMZWdhY3k7XG5cblx0cmwuYWRkU2V0dGluZ3NWaWV3TW9kZWwgPSBQbHVnaW5zLmFkZFNldHRpbmdzVmlld01vZGVsO1xuXHRybC5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluID0gUGx1Z2lucy5hZGRTZXR0aW5nc1ZpZXdNb2RlbEZvckFkbWluO1xuXG5cdHJsLmFkZEhvb2sgPSBQbHVnaW5zLmFkZEhvb2s7XG5cdHJsLnNldHRpbmdzR2V0ID0gUGx1Z2lucy5tYWluU2V0dGluZ3NHZXQ7XG5cdHJsLnBsdWdpblNldHRpbmdzR2V0ID0gUGx1Z2lucy5zZXR0aW5nc0dldDtcblx0cmwucGx1Z2luUmVtb3RlUmVxdWVzdCA9IFBsdWdpbnMucmVtb3RlUmVxdWVzdDtcblxuXHRybC5FbWFpbE1vZGVsID0gRW1haWxNb2RlbDtcblx0cmwuRW51bXMgPSBFbnVtcztcblxuXHR3aW5kb3cucmwgPSBybDtcblxuXHRjb25zdCBzdGFydCA9ICgpID0+IHtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnbm8tanMgcmwtYm9vdGVkLXRyaWdnZXInKS5hZGRDbGFzcygncmwtYm9vdGVkJyk7XG5cblx0XHRcdEFwcC5ib290c3RhcnQoKTtcblx0XHR9LCBFbnVtcy5NYWdpY3MuVGltZTEwbXMpO1xuXHR9O1xuXG5cdHdpbmRvdy5fX0FQUF9CT09UID0gKGZFcnJvckNhbGxiYWNrKSA9PiB7XG5cdFx0ZG9tUmVhZHkoKCkgPT4ge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpZiAod2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWlubG9vcC10ZW1wbGF0ZXMtaWQnKSkge1xuXHRcdFx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAod2luZG93LnJhaW5sb29wVEVNUExBVEVTICYmIHdpbmRvdy5yYWlubG9vcFRFTVBMQVRFU1swXSkge1xuXHRcdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmwtdGVtcGxhdGVzJykuaW5uZXJIVE1MID0gd2luZG93LnJhaW5sb29wVEVNUExBVEVTWzBdO1xuXHRcdFx0XHRcdHN0YXJ0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZkVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHdpbmRvdy5fX0FQUF9CT09UID0gbnVsbDtcblx0XHRcdH0sIEVudW1zLk1hZ2ljcy5UaW1lMTBtcyk7XG5cdFx0fSk7XG5cdH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9jcmVhdGVcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7ICRodG1sLCBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEFic3RyYWN0QXBwU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuXHRcdHRoaXMuaW50ZXJmYWNlQW5pbWF0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IGFuaW0gPSBiTW9iaWxlRGV2aWNlIHx8ICF2YWx1ZTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1hbmltJywgIWFuaW0pLnRvZ2dsZUNsYXNzKCduby1ybC1hbmltJywgYW5pbSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdHRoaXMucHJlbSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25Mb2dpbicpKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnKSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnTmV3TW92ZVRvRm9sZGVyJykpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnSW50ZXJmYWNlQW5pbWF0aW9uJykpO1xuXG5cdFx0dGhpcy5wcmVtKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1ByZW1UeXBlJykpO1xuXHRcdHRoaXMuY29tbXVuaXR5KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbW11bml0eScpKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlLCBBYnN0cmFjdEFwcFN0b3JlIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9zbGljZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmVkdWNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3Qva2V5c1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2hcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQsIERFRkFVTFRfQUpBWF9USU1FT1VUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGluQXJyYXksIHBJbnQsIHBTdHJpbmcsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVHlwZVxuXHQgKiBAcGFyYW0gez9BamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqIEBwYXJhbSB7Kj19IG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHQgKi9cblx0ZGVmYXVsdFJlc3BvbnNlKGZDYWxsYmFjaywgc1JlcXVlc3RBY3Rpb24sIHNUeXBlLCBvRGF0YSwgYkNhY2hlZCwgb1JlcXVlc3RQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgZkNhbGwgPSAoKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gc1R5cGUgJiYgR2xvYmFsc0RhdGEuYlVubG9hZCkge1xuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0LTEgPFxuXHRcdFx0XHRcdFx0aW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YS5DbGVhckF1dGggfHwgb0RhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cblx0XHRcdFx0XHRcdGlmICghb0RhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgPSAwO1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdF0pO1xuXG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjayhcblx0XHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKHNUeXBlKSB7XG5cdFx0XHRjYXNlICdzdWNjZXNzJzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Fib3J0Jzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3IgPT09IHNUeXBlKSB7XG5cdFx0XHRfLmRlbGF5KGZDYWxsLCAzMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmQ2FsbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZlJlc3VsdENhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZU91dCA9IDIwMDAwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICogQHJldHVybnMge2pRdWVyeS5qcVhIUn1cblx0ICovXG5cdGFqYXhSZXF1ZXN0KGZSZXN1bHRDYWxsYmFjaywgcGFyYW1zLCBpVGltZU91dCA9IDIwMDAwLCBzR2V0QWRkID0gJycsIGFib3J0QWN0aW9ucyA9IFtdKSB7XG5cdFx0Y29uc3QgaXNQb3N0ID0gJycgPT09IHNHZXRBZGQsXG5cdFx0XHRoZWFkZXJzID0ge30sXG5cdFx0XHRzdGFydCA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCBhY3Rpb24gPSAnJztcblxuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRhY3Rpb24gPSBwYXJhbXMuQWN0aW9uIHx8ICcnO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGFib3J0QWN0aW9ucywgKGFjdGlvblRvQWJvcnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0cGFyYW1zLlhUb2tlbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0b2tlbicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EZWZBamF4ID0gJC5hamF4KHtcblx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0dXJsOiBhamF4KHNHZXRBZGQpLFxuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIDoge30sXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0dGltZW91dDogaVRpbWVPdXQsXG5cdFx0XHRnbG9iYWw6IHRydWVcblx0XHR9KTtcblxuXHRcdG9EZWZBamF4LmFsd2F5cygob0RhdGEsIHNUeXBlKSA9PiB7XG5cdFx0XHRsZXQgY2FjaGVkID0gZmFsc2U7XG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVGltZSkge1xuXHRcdFx0XHRjYWNoZWQgPSBwSW50KG9EYXRhLlRpbWUpID4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKG9EYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uICYmIHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSAnYWJvcnQnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVmYXVsdFJlc3BvbnNlKGZSZXN1bHRDYWxsYmFjaywgYWN0aW9uLCBzVHlwZSwgb0RhdGEsIGNhY2hlZCwgcGFyYW1zKTtcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGFjdGlvbiwgYWJvcnRBY3Rpb25zKSkge1xuXHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9EZWZBamF4O1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdFx0b0RlZkFqYXguY2F0Y2goY29uc29sZS5sb2cpO1xuXHRcdHJldHVybiBvRGVmQWpheDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVvdXRcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKi9cblx0ZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCBzQWN0aW9uLCBvUGFyYW1ldGVycywgaVRpbWVvdXQsIHNHZXRBZGQsIGFBYm9ydEFjdGlvbnMpIHtcblx0XHRvUGFyYW1ldGVycyA9IG9QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdG9QYXJhbWV0ZXJzLkFjdGlvbiA9IHNBY3Rpb247XG5cblx0XHRzR2V0QWRkID0gcFN0cmluZyhzR2V0QWRkKTtcblxuXHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXF1ZXN0JywgW3NBY3Rpb24sIG9QYXJhbWV0ZXJzLCBzR2V0QWRkXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdG9QYXJhbWV0ZXJzLFxuXHRcdFx0aXNVbmQoaVRpbWVvdXQpID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBwSW50KGlUaW1lb3V0KSxcblx0XHRcdHNHZXRBZGQsXG5cdFx0XHRhQWJvcnRBY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRub29wKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTm9vcCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbJ3tzdWJuYW1lfS8nLCBydWxlc10sXG5cdFx0XHRbJ3tzdWJuYW1lfScsIHJ1bGVzXSxcblx0XHRcdFsnJywgcnVsZXNdXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuLCBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IHNzbSBmcm9tICdzc20nO1xuXG5pbXBvcnQge1xuXHQkd2luLFxuXHQkaHRtbCxcblx0JGRvYyxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc05vcm1hbCwgcFN0cmluZywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcm9vdCwgcm9vdEFkbWluLCByb290VXNlciwgcG9wdWxhdGVBdXRoU3VmZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IHJvdXRlT2ZmLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RCb290IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RCb290JztcblxuY2xhc3MgQWJzdHJhY3RBcHAgZXh0ZW5kcyBBYnN0cmFjdEJvb3Qge1xuXHQvKipcblx0ICogQHBhcmFtIHtSZW1vdGVTdG9yYWdlfEFkbWluUmVtb3RlU3RvcmFnZX0gUmVtb3RlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPSBudWxsO1xuXHRcdHRoaXMuaXNMb2NhbEF1dG9jb21wbGV0ZSA9IHRydWU7XG5cdFx0dGhpcy5pZnJhbWUgPSBudWxsO1xuXHRcdHRoaXMubGFzdEVycm9yVGltZSA9IDA7XG5cblx0XHR0aGlzLmlmcmFtZSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJpbnRlcm5hbC1oaWRkZGVuXCIgLz4nKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZScpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpSCA9ICR3aW4uaGVpZ2h0KCksXG5cdFx0XHRcdFx0aVcgPSAkd2luLmhlaWdodCgpO1xuXG5cdFx0XHRcdGlmICgkd2luLl9fc2l6ZXNbMF0gIT09IGlIIHx8ICR3aW4uX19zaXplc1sxXSAhPT0gaVcpIHtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMF0gPSBpSDtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMV0gPSBpVztcblxuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdC8vIERFQlVHXG5cdFx0Ly9cdFx0RXZlbnRzLnN1Yih7XG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZSc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUnKTtcblx0XHQvL1x0XHRcdH0sXG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZS5yZWFsJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0Ly9cdFx0XHR9XG5cdFx0Ly9cdFx0fSk7XG5cblx0XHQkZG9jXG5cdFx0XHQub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdCRkb2Mub24oXG5cdFx0XHQnbW91c2Vtb3ZlIGtleXByZXNzIGNsaWNrJyxcblx0XHRcdF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTVzKVxuXHRcdCk7XG5cblx0XHRrZXkoJ2VzYywgZW50ZXInLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbihuYW1lLCBkZWZhdWx0Xykge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbltuYW1lXSB8fCBkZWZhdWx0Xztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGRvd25sb2FkKGxpbmspIHtcblx0XHRpZiAoc1VzZXJBZ2VudCAmJiAoLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpIHx8IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSkpIHtcblx0XHRcdGNvbnN0IG9MaW5rID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdG9MaW5rLmhyZWYgPSBsaW5rO1xuXG5cdFx0XHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudCkge1xuXHRcdFx0XHRjb25zdCBvRSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudC5Nb3VzZUV2ZW50cztcblx0XHRcdFx0aWYgKG9FICYmIG9FLmluaXRFdmVudCAmJiBvTGluay5kaXNwYXRjaEV2ZW50KSB7XG5cdFx0XHRcdFx0b0UuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdG9MaW5rLmRpc3BhdGNoRXZlbnQob0UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHdpbmRvdy5vcGVuKGxpbmssICdfc2VsZicpO1xuXHRcdFx0d2luZG93LmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWZyYW1lLmF0dHIoJ3NyYycsIGxpbmspO1xuXHRcdFx0Ly8gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Z29vZ2xlUHJldmlld1N1cHBvcnRlZCgpIHtcblx0XHRpZiAobnVsbCA9PT0gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUpIHtcblx0XHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID1cblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdCAqL1xuXHRzZXRXaW5kb3dUaXRsZSh0aXRsZSkge1xuXHRcdHRpdGxlID0gaXNOb3JtYWwodGl0bGUpICYmIDAgPCB0aXRsZS5sZW5ndGggPyAnJyArIHRpdGxlIDogJyc7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpKSB7XG5cdFx0XHR0aXRsZSArPSAodGl0bGUgPyAnIC0gJyA6ICcnKSArIFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlICsgJyAuLi4nO1xuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHR9XG5cblx0cmVkaXJlY3RUb0FkbWluUGFuZWwoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvb3RBZG1pbigpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHR9XG5cblx0Y2xlYXJDbGllbnRTaWRlVG9rZW4oKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfY2xlYXIpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfY2xlYXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqL1xuXHRzZXRDbGllbnRTaWRlVG9rZW4odG9rZW4pIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9zZXQpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfc2V0KHRva2VuKTtcblxuXHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0F1dGhBY2NvdW50SGFzaCcsIHRva2VuKTtcblx0XHRcdHBvcHVsYXRlQXV0aFN1ZmZpeCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBhZG1pbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxvZ291dCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNsb3NlID0gZmFsc2Vcblx0ICovXG5cdGxvZ2luQW5kTG9nb3V0UmVsb2FkKGFkbWluID0gZmFsc2UsIGxvZ291dCA9IGZhbHNlLCBjbG9zZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5JZnJhbWUgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpO1xuXHRcdGxldCBjdXN0b21Mb2dvdXRMaW5rID0gcFN0cmluZyhTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnY3VzdG9tTG9nb3V0TGluaycpKTtcblxuXHRcdGlmIChsb2dvdXQpIHtcblx0XHRcdHRoaXMuY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblx0XHR9XG5cblx0XHRpZiAobG9nb3V0ICYmIGNsb3NlICYmIHdpbmRvdy5jbG9zZSkge1xuXHRcdFx0d2luZG93LmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0Y3VzdG9tTG9nb3V0TGluayA9IGN1c3RvbUxvZ291dExpbmsgfHwgKGFkbWluID8gcm9vdEFkbWluKCkgOiByb290VXNlcigpKTtcblxuXHRcdGlmIChsb2dvdXQgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGN1c3RvbUxvZ291dExpbmspIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRoaXN0b3J5QmFjaygpIHtcblx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0Ly8gbG9nKCdQcycgKyAnc3MsIGhhYycgKyAna2VycyEgVGhlJyArICdyZVxcJ3Mgbm90JyArICdoaW5nIGludGUnICsgJ3Jlc3RpbmcgOicgKyAnKScpO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0Jyk7XG5cblx0XHRjb25zdCBtb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTYXZlVHJpZ2dlcicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TYXZlVHJpZ2dlcicpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0lucHV0JywgcmVxdWlyZSgnQ29tcG9uZW50L0lucHV0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2VsZWN0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NlbGVjdCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1JhZGlvJywgcmVxdWlyZSgnQ29tcG9uZW50L1JhZGlvJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignVGV4dEFyZWEnLCByZXF1aXJlKCdDb21wb25lbnQvVGV4dEFyZWEnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdEYXRlJywgcmVxdWlyZSgnQ29tcG9uZW50L0RhdGUnKS5kZWZhdWx0KTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3gtc2NyaXB0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NjcmlwdCcpLmRlZmF1bHQpO1xuXHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N2Zy1pY29uJywgcmVxdWlyZSgnQ29tcG9uZW50L1N2Z0ljb24nKS5kZWZhdWx0KTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbWF0ZXJpYWxEZXNpZ24nKSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fVxuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKTtcblxuXHRcdF8uZGVsYXkod2luZG93UmVzaXplQ2FsbGJhY2ssIE1hZ2ljcy5UaW1lMXMpO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1lbnRlcicsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1sZWF2ZScsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdGlmICghbW9iaWxlKSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtZGVza3RvcCcpO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ21vYmlsZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1heC13aWR0aDogNzY3cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWxlYXZlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ3RhYmxldCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDE0MDBweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcC1sYXJnZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTQwMXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKS5hZGRDbGFzcygncmwtbW9iaWxlJyk7XG5cdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWRpc2FibGVkJywgYlZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWVuYWJsZWQnLCAhYlZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbFR5cGUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLW5vbmUnLCAnbm9uZScgPT09IHNWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1zaG9ydCcsICdzaG9ydCcgPT09IHNWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdExhbmd1YWdlU3RvcmUucG9wdWxhdGUoKTtcblx0XHRUaGVtZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0U29jaWFsU3RvcmUucG9wdWxhdGUoKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcCwgQWJzdHJhY3RBcHAgYXMgZGVmYXVsdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0Qm9vdCB7XG5cdGJvb3RzdGFydCgpIHtcblx0XHQvKiBuby1lbXB0eSAqL1xuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0UmFkaW8gZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cblx0XHRpZiAocGFyYW1zLnZhbHVlcykge1xuXHRcdFx0dGhpcy52YWx1ZXMoXy5tYXAocGFyYW1zLnZhbHVlcywgKGxhYmVsLCB2YWx1ZSkgPT4gKHsgbGFiZWw6IGxhYmVsLCB2YWx1ZTogdmFsdWUgfSkpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrID0gXy5iaW5kKHRoaXMuY2xpY2ssIHRoaXMpO1xuXHR9XG5cblx0Y2xpY2sodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdmFsdWUpIHtcblx0XHRcdHRoaXMudmFsdWUodmFsdWUudmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJhZGlvLCBBYnN0cmFjdFJhZGlvIGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcbi8vIEVkZ2UgMTQtIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIHNlYXJjaGVyICE9PSB1bmRlZmluZWQgPyBzZWFyY2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbFxuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNyZWF0ZWh0bWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5yZWR1Y2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgncmVkdWNlJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgncmVkdWNlJywgeyAxOiAwIH0pO1xuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIIHx8IENIUk9NRV9CVUcgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICFuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHsgMTogMiB9LCAxKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnByb3BlcnR5aXNlbnVtZXJhYmxlXG5leHBvcnRzLmYgPSBOQVNIT1JOX0JVRyA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywgVik7XG4gIHJldHVybiAhIWRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlO1xufSA6IG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogdHlwZW9mIGRldGVjdGlvbiA9PSAnZnVuY3Rpb24nID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ25hdmlnYXRvcicsICd1c2VyQWdlbnQnKSB8fCAnJztcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09ICdwcm9jZXNzJztcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvcicpO1xudmFyIHZhbHVlcyA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgTm9kZUxpc3Q6IHRydWVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC52YWx1ZXM7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS52YWx1ZXMpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgIHx8IERPTUl0ZXJhYmxlcy5oYXNPd25Qcm9wZXJ0eShjbGFzc29mKGl0KSkgPyB2YWx1ZXMgOiBvd247XG59O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIG9iamVjdEhhcyhpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBvYmplY3RIYXMoaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KGluc3BlY3RTb3VyY2UoV2Vha01hcCkpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKHR5cGVvZiBzdG9yZS5pbnNwZWN0U291cmNlICE9ICdmdW5jdGlvbicpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWwsIGtleSwgdmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IpO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsInZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAmJiAhU3ltYm9sLnNoYW1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSAhaGFzKGhpZGRlbktleXMsIGtleSkgJiYgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgJiYgaXQgIT09IG51bGwpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoaXQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvdmFsdWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnZhbHVlcztcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9jb25jYXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgY29uY2F0ID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9jb25jYXQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuY29uY2F0O1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuY29uY2F0KSA/IGNvbmNhdCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmNvbmNhdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gdG9MZW5ndGgoRS5sZW5ndGgpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9pbmRleC1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5pbmRleE9mO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuaW5kZXhPZikgPyBpbmRleE9mIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5pbmRleE9mO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgbmF0aXZlSW5kZXhPZiA9IFtdLmluZGV4T2Y7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnaW5kZXhPZicsIHsgQUNDRVNTT1JTOiB0cnVlLCAxOiAwIH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCAhU1RSSUNUX01FVEhPRCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gbmF0aXZlSW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9maW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGZpbmQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbmQnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuZmluZDtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbmQpID8gZmluZCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZpbmQnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKEZJTkQpO1xuXG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEZJTkQgaW4gW10pIEFycmF5KDEpW0ZJTkRdKGZ1bmN0aW9uICgpIHsgU0tJUFNfSE9MRVMgPSBmYWxzZTsgfSk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvbGFzdC1pbmRleC1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBsYXN0SW5kZXhPZiA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvbGFzdC1pbmRleC1vZicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5sYXN0SW5kZXhPZjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmxhc3RJbmRleE9mKSA/IGxhc3RJbmRleE9mIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubGFzdC1pbmRleC1vZicpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLmxhc3RJbmRleE9mO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbGFzdC1pbmRleC1vZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBsYXN0SW5kZXhPZiAhPT0gW10ubGFzdEluZGV4T2YgfSwge1xuICBsYXN0SW5kZXhPZjogbGFzdEluZGV4T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBuYXRpdmVMYXN0SW5kZXhPZiA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnbGFzdEluZGV4T2YnKTtcbi8vIEZvciBwcmV2ZW50aW5nIHBvc3NpYmxlIGFsbW9zdCBpbmZpbml0ZSBsb29wIGluIG5vbi1zdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMsIHRlc3QgdGhlIGZvcndhcmQgdmVyc2lvbiBvZiB0aGUgbWV0aG9kXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnaW5kZXhPZicsIHsgQUNDRVNTT1JTOiB0cnVlLCAxOiAwIH0pO1xudmFyIEZPUkNFRCA9IE5FR0FUSVZFX1pFUk8gfHwgIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgLy8gY29udmVydCAtMCB0byArMFxuICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuIG5hdGl2ZUxhc3RJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBtaW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8gJiYgT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICByZXR1cm4gLTE7XG59IDogbmF0aXZlTGFzdEluZGV4T2Y7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vZnVuY3Rpb24vdmlydHVhbC9iaW5kJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmJpbmQ7XG4gIHJldHVybiBpdCA9PT0gRnVuY3Rpb25Qcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb3duID09PSBGdW5jdGlvblByb3RvdHlwZS5iaW5kKSA/IGJpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0Z1bmN0aW9uJykuYmluZDtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghKGFyZ3NMZW5ndGggaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIGxpc3QgPSBbXSwgaSA9IDA7IGkgPCBhcmdzTGVuZ3RoOyBpKyspIGxpc3RbaV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbYXJnc0xlbmd0aF0gPSBGdW5jdGlvbignQyxhJywgJ3JldHVybiBuZXcgQygnICsgbGlzdC5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZEZ1bmN0aW9uID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kRnVuY3Rpb24ucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmRGdW5jdGlvbjtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvdHJpbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciB0cmltID0gcmVxdWlyZSgnLi4vc3RyaW5nL3ZpcnR1YWwvdHJpbScpO1xuXG52YXIgU3RyaW5nUHJvdG90eXBlID0gU3RyaW5nLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnRyaW07XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdzdHJpbmcnIHx8IGl0ID09PSBTdHJpbmdQcm90b3R5cGVcbiAgICB8fCAoaXQgaW5zdGFuY2VvZiBTdHJpbmcgJiYgb3duID09PSBTdHJpbmdQcm90b3R5cGUudHJpbSkgPyB0cmltIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0nKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnU3RyaW5nJykudHJpbTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIG5vbiA9ICdcXHUyMDBCXFx1MDA4NVxcdTE4MEUnO1xuXG4vLyBjaGVjayB0aGF0IGEgbWV0aG9kIHdvcmtzIHdpdGggdGhlIGNvcnJlY3QgbGlzdFxuLy8gb2Ygd2hpdGVzcGFjZXMgYW5kIGhhcyBhIGNvcnJlY3QgbmFtZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISF3aGl0ZXNwYWNlc1tNRVRIT0RfTkFNRV0oKSB8fCBub25bTUVUSE9EX05BTUVdKCkgIT0gbm9uIHx8IHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRTtcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL21hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBtYXAgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL21hcCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5tYXA7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5tYXApID8gbWFwIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkubWFwJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykubWFwO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuLy8gRkY0OS0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkuc2hhbSkgZGVmaW5lUHJvcGVydHkuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG9iamVjdERlZmluZVByb3BlcnR5TW9kaWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIURFU0NSSVBUT1JTLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUuZlxufSk7XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ3JlYXRlKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHRhcmdldDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4gIGZpbHRlcjogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAgZmluZDogY3JlYXRlTWV0aG9kKDUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNilcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIG5ldyAoQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc2FycmF5XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uLy4uL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2ZvckVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbm1vZHVsZS5leHBvcnRzID0gKCFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSCkgPyBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgXCI8aHRtbD5cXG48aGVhZD5cXG5cXHQ8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwidXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlXFxcIiBjb250ZW50PVxcXCJ5ZXNcXFwiIC8+XFxuXFx0PG1ldGEgbmFtZT1cXFwicm9ib3RzXFxcIiBjb250ZW50PVxcXCJub2luZGV4LCBub2ZvbGxvdywgbm9vZHBcXFwiIC8+XFxuXFx0PHRpdGxlPnt7dGl0bGV9fTwvdGl0bGU+XFxuXFx0PHN0eWxlPlxcbmh0bWwsIGJvZHkge1xcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuXFx0Zm9udC1zaXplOiAxM3B4O1xcblxcdGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjtcXG5cXHRtYXJnaW46IDA7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuYSB7Y29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfVxcbmE6dmlzaXRlZCB7Y29sb3I6ICM2MDl9XFxuYTphY3RpdmUge2NvbG9yOiByZWR9XFxuYmxvY2txdW90ZSB7Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBibGFjazsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwcHggMTBweH1cXG5cXG5wcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmJvZHktd3JwIHtcXG5cXHRwYWRkaW5nOiAxMHB4O1xcbn1cXG5cXG4uYm9keS13cnAuaHRtbCBwcmUge1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogbm9ybWFsO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4ge1xcblxcdHBhZGRpbmc6IDE1cHg7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gcHJlIHtcXG5cXHRtYXJnaW46IDBweDtcXG5cXHRwYWRkaW5nOiAwcHg7XFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXG5cXHRib3JkZXI6IG5vbmU7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIHtcXG5cXHRib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsdWU7XFxuXFx0Y29sb3I6IGJsdWU7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JlZW47XFxuXFx0Y29sb3I6IGdyZWVuO1xcbn1cXG5cXG4uYm9keS13cnAucGxhaW4gYmxvY2txdW90ZSBibG9ja3F1b3RlIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgcmVkO1xcblxcdGNvbG9yOiByZWQ7XFxufVxcbi5ybC1wcmV2aWV3LXN1YmplY3Qge1xcblxcdGZvbnQtc2l6ZTogMTZweDtcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXG5cXHRwYWRkaW5nOiAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1jcmVkcy1mcm9tLCAucmwtcHJldmlldy1jcmVkcy10bywgLnJsLXByZXZpZXctY3JlZHMtY2Mge1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiA1cHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctZGF0ZSB7XFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcblxcdGZvbnQtc2l6ZTogMTJweDtcXG5cXHRwYWRkaW5nOiAxMHB4IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LXNlY3Rpb24ge1xcblxcdHBhZGRpbmc6IDA7XFxuXFx0bWFyZ2luOiAwO1xcblxcdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucmwtcHJldmlldy1oaWRlIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXHQ8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc3ViamVjdFxcXCI+e3tzdWJqZWN0fX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LXNlY3Rpb25cXFwiPlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctZGF0ZVxcXCI+e3tkYXRlfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWZyb21cXFwiPnt7ZnJvbUNyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLXRvXFxcIj57e3RvTGFiZWx9fToge3t0b0NyZWRzfX08L2Rpdj5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJybC1wcmV2aWV3LWNyZWRzLWNjIHt7Y2NDbGFzc319XFxcIj57e2NjTGFiZWx9fToge3tjY0NyZWRzfX08L2Rpdj5cXG5cXHQ8L2Rpdj5cXG5cXHQ8ZGl2IGNsYXNzPVxcXCJib2R5LXdycCB7e2JvZHlDbGFzc319XFxcIj57e2h0bWx9fTwvZGl2PlxcbjwvYm9keT5cXG48L2h0bWw+XCI7IiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2ZpbHRlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBmaWx0ZXIgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2ZpbHRlcicpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5maWx0ZXI7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maWx0ZXIpID8gZmlsdGVyIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmlsdGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuLy8gRWRnZSAxNC0gaXNzdWVcbnZhciBVU0VTX1RPX0xFTkdUSCA9IGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoKCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9jcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKSB7XG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFAsIEQpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxudmFyIE9iamVjdCA9IHBhdGguT2JqZWN0O1xuXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbn07XG5cbmlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLnNoYW0pIGdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xudmFyIEZPUkNFRCA9ICFERVNDUklQVE9SUyB8fCBGQUlMU19PTl9QUklNSVRJVkVTO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2Uvc2xpY2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgc2xpY2UgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL3NsaWNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnNsaWNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUuc2xpY2UpID8gc2xpY2UgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5zbGljZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnNsaWNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ3NsaWNlJywgeyBBQ0NFU1NPUlM6IHRydWUsIDA6IDAsIDE6IDIgfSk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgbmF0aXZlU2xpY2UgPSBbXS5zbGljZTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBrID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgLy8gaW5saW5lIGBBcnJheVNwZWNpZXNDcmVhdGVgIGZvciB1c2FnZSBuYXRpdmUgYEFycmF5I3NsaWNlYCB3aGVyZSBpdCdzIHBvc3NpYmxlXG4gICAgdmFyIENvbnN0cnVjdG9yLCByZXN1bHQsIG47XG4gICAgaWYgKGlzQXJyYXkoTykpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gTy5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgICBpZiAodHlwZW9mIENvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU2xpY2UuY2FsbChPLCBrLCBmaW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQgPSBuZXcgKENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQgPyBBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JldmVyc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgcmV2ZXJzZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5yZXZlcnNlO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUucmV2ZXJzZSkgPyByZXZlcnNlIDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLnJldmVyc2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbnZhciBuYXRpdmVSZXZlcnNlID0gW10ucmV2ZXJzZTtcbnZhciB0ZXN0ID0gWzEsIDJdO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmV2ZXJzZVxuLy8gZml4IGZvciBTYWZhcmkgMTIuMCBidWdcbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg3OTRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFN0cmluZyh0ZXN0KSA9PT0gU3RyaW5nKHRlc3QucmV2ZXJzZSgpKSB9LCB7XG4gIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtYXNzaWduXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UuY2FsbCh0aGlzKTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmVkdWNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Qua2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmtleXM7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJpbXBvcnQgeyBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNhdmVUcmlnZ2VyQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWxlbWVudCA9IHBhcmFtcy5lbGVtZW50IHx8IG51bGw7XG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZSAmJiBwYXJhbXMudmFsdWUuc3Vic2NyaWJlID8gcGFyYW1zLnZhbHVlIDogbnVsbDtcblxuXHRcdGlmICh0aGlzLmVsZW1lbnQpIHtcblx0XHRcdGlmICh0aGlzLnZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnaW5saW5lLWJsb2NrJyk7XG5cblx0XHRcdFx0aWYgKHBhcmFtcy52ZXJ0aWNhbEFsaWduKSB7XG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmNzcygndmVydGljYWwtYWxpZ24nLCBwYXJhbXMudmVydGljYWxBbGlnbik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLnNldFN0YXRlKHRoaXMudmFsdWUoKSk7XG5cblx0XHRcdFx0dGhpcy5kaXNwb3NhYmxlLnB1c2godGhpcy52YWx1ZS5zdWJzY3JpYmUodGhpcy5zZXRTdGF0ZSwgdGhpcykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5lbGVtZW50LmhpZGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRzZXRTdGF0ZSh2YWx1ZSkge1xuXHRcdHN3aXRjaCAocEludCh2YWx1ZSkpIHtcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5zdWNjZXNzJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkZhbHNlUmVzdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGU6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuZXJyb3IsLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZTpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuZWxlbWVudFxuXHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTYXZlVHJpZ2dlckNvbXBvbmVudCwgJ1NhdmVUcmlnZ2VyQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgSW5wdXRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihJbnB1dENvbXBvbmVudCwgJ0lucHV0Q29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyB8fCAnJztcblxuXHRcdHRoaXMub3B0aW9uc1RleHQgPSBwYXJhbXMub3B0aW9uc1RleHQgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNWYWx1ZSA9IHBhcmFtcy5vcHRpb25zVmFsdWUgfHwgbnVsbDtcblx0XHR0aGlzLm9wdGlvbnNDYXB0aW9uID0gcGFyYW1zLm9wdGlvbnNDYXB0aW9uIHx8IG51bGw7XG5cblx0XHRpZiAodGhpcy5vcHRpb25zQ2FwdGlvbikge1xuXHRcdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IGkxOG4odGhpcy5vcHRpb25zQ2FwdGlvbik7XG5cdFx0fVxuXG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNlbGVjdENvbXBvbmVudCwgJ1NlbGVjdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0UmFkaW8gfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RSYWRpbyc7XG5cbmNsYXNzIFJhZGlvQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RSYWRpbyB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoUmFkaW9Db21wb25lbnQsICdSYWRpb0NvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNvbnN0IERFRkFVTFRfUk9XUyA9IDU7XG5cbmNsYXNzIFRleHRBcmVhQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5yb3dzID0gcGFyYW1zLnJvd3MgfHwgREVGQVVMVF9ST1dTO1xuXHRcdHRoaXMuc3BlbGxjaGVjayA9IGlzVW5kKHBhcmFtcy5zcGVsbGNoZWNrKSA/IGZhbHNlIDogISFwYXJhbXMuc3BlbGxjaGVjaztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoVGV4dEFyZWFDb21wb25lbnQsICdUZXh0QXJlYUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIERhdGVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdElucHV0IHt9XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihEYXRlQ29tcG9uZW50LCAnRGF0ZUNvbXBvbmVudCcpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCwgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcblxuY2xhc3MgU2NyaXB0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdHBhcmFtcy5jb21wb25lbnQgJiZcblx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2RlcyAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnQgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50WzBdICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUxcblx0XHQpIHtcblx0XHRcdGxldCBzY3JpcHQgPSBwYXJhbXMuZWxlbWVudFswXS5vdXRlckhUTUw7XG5cdFx0XHRzY3JpcHQgPSAhc2NyaXB0ID8gJycgOiBzY3JpcHQucmVwbGFjZSgvPHgtc2NyaXB0L2ksICc8c2NyaXB0JykucmVwbGFjZSgvPGI+PFxcL2I+PFxcL3gtc2NyaXB0Pi9pLCAnPC9zY3JpcHQ+Jyk7XG5cblx0XHRcdGlmIChzY3JpcHQpIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQudGV4dCgnJyk7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnJlcGxhY2VXaXRoKFxuXHRcdFx0XHRcdCQoc2NyaXB0KS50ZXh0KFxuXHRcdFx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdICYmIHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXS5ub2RlVmFsdWVcblx0XHRcdFx0XHRcdFx0PyBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdDogJydcblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZW1vdmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFNjcmlwdENvbXBvbmVudCwgJ1NjcmlwdENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0Q2hlY2tib3ggfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RDaGVja2JveCc7XG5cbmNsYXNzIENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdENoZWNrYm94IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKHBhcmFtcyk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveCA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAyMDAgfSk7XG5cblx0XHR0aGlzLmFuaW1hdGlvbkJveFNldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlLCB0aGlzKTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUgPSBfLmJpbmQodGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlLCB0aGlzKTtcblxuXHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKFxuXHRcdFx0dGhpcy52YWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMudHJpZ2dlckFuaW1hdGlvbih2YWx1ZSk7XG5cdFx0XHR9LCB0aGlzKVxuXHRcdCk7XG5cdH1cblxuXHRhbmltYXRpb25Cb3hTZXRUcnVlKCkge1xuXHRcdHRoaXMuYW5pbWF0aW9uQm94KHRydWUpO1xuXHR9XG5cblx0YW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayh0cnVlKTtcblx0fVxuXG5cdHRyaWdnZXJBbmltYXRpb24oYm94KSB7XG5cdFx0aWYgKGJveCkge1xuXHRcdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgMjAwKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlKCk7XG5cdFx0XHRfLmRlbGF5KHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgMjAwKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKENoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQsICdDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50Jyk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgcHJvZ3Jlc3NKcyBmcm9tICdwcm9ncmVzc0pzJztcblxuaW1wb3J0IHsgcm9vdCB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHBJbnQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5LCBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBMaWNlbnNlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0xpY2Vuc2UnO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgQ29yZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Db3JlJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBTZXR0aW5nc0FkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL1NldHRpbmdzJztcbmltcG9ydCB7IExvZ2luQWRtaW5TY3JlZW4gfSBmcm9tICdTY3JlZW4vQWRtaW4vTG9naW4nO1xuXG5pbXBvcnQgeyBoaWRlTG9hZGluZywgcm91dGVPZmYsIHNldEhhc2gsIHN0YXJ0U2NyZWVucyB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0QXBwIH0gZnJvbSAnQXBwL0Fic3RyYWN0JztcblxuY2xhc3MgQWRtaW5BcHAgZXh0ZW5kcyBBYnN0cmFjdEFwcCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFJlbW90ZSk7XG5cdH1cblxuXHRyZW1vdGUoKSB7XG5cdFx0cmV0dXJuIFJlbW90ZTtcblx0fVxuXG5cdHJlbG9hZERvbWFpbkxpc3QoKSB7XG5cdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5kb21haW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKFtlbmFibGVkLCBhbGlhc10sIG5hbWUpID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBuYW1lLFxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IGtvLm9ic2VydmFibGUoIWVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0XHRcdFx0ZGVsZXRlQWNjZXNzOiBrby5vYnNlcnZhYmxlKGZhbHNlKVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmVsb2FkUGx1Z2luTGlzdCgpIHtcblx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UmVtb3RlLnBsdWdpbkxpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQbHVnaW5TdG9yZS5wbHVnaW5zKFxuXHRcdFx0XHRcdF8ubWFwKGRhdGEuUmVzdWx0LCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uTmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFpdGVtLkVuYWJsZWQpLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJlZDoga28ub2JzZXJ2YWJsZSghIWl0ZW0uQ29uZmlndXJlZClcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBhY2thZ2VzTGlzdCgpIHtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXMubG9hZGluZyh0cnVlKTtcblx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5wYWNrYWdlc0xpc3QoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZSghIWRhdGEuUmVzdWx0Lk1haW5VcGRhdGFibGUpO1xuXG5cdFx0XHRcdGxldCBsaXN0ID0gW107XG5cdFx0XHRcdGNvbnN0IGxvYWRpbmcgPSB7fTtcblxuXHRcdFx0XHRfLmVhY2goUGFja2FnZVN0b3JlLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGl0ZW0gJiYgaXRlbS5sb2FkaW5nKCkpIHtcblx0XHRcdFx0XHRcdGxvYWRpbmdbaXRlbS5maWxlXSA9IGl0ZW07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoaXNBcnJheShkYXRhLlJlc3VsdC5MaXN0KSkge1xuXHRcdFx0XHRcdGxpc3QgPSBfLmNvbXBhY3QoXG5cdFx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdC5MaXN0LCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoaXRlbSkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0ubG9hZGluZyA9IGtvLm9ic2VydmFibGUoIWlzVW5kKGxvYWRpbmdbaXRlbS5maWxlXSkpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAnY29yZScgPT09IGl0ZW0udHlwZSAmJiAhaXRlbS5jYW5CZUluc3RhbGxlZCA/IG51bGwgOiBpdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzKGxpc3QpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHR1cGRhdGVDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKHRydWUpO1xuXHRcdFJlbW90ZS51cGRhdGVDb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0aW5nKGZhbHNlKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbignJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUoLTIpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZENvcmVEYXRhKCkge1xuXHRcdENvcmVTdG9yZS5jb3JlQ2hlY2tpbmcodHJ1ZSk7XG5cdFx0Q29yZVN0b3JlLmNvcmVSZWFsKHRydWUpO1xuXHRcdFJlbW90ZS5jb3JlRGF0YSgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoISFkYXRhLlJlc3VsdC5SZWFsKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKGRhdGEuUmVzdWx0LkNoYW5uZWwgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoZGF0YS5SZXN1bHQuVHlwZSB8fCAnc3RhYmxlJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlKCEhZGF0YS5SZXN1bHQuVXBkYXRhYmxlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVBY2Nlc3MoISFkYXRhLlJlc3VsdC5BY2Nlc3MpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoISFkYXRhLlJlc3VsdC5XYXJuaW5nKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKGRhdGEuUmVzdWx0LlZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oZGF0YS5SZXN1bHQuUmVtb3RlVmVyc2lvbiB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZShkYXRhLlJlc3VsdC5SZW1vdGVSZWxlYXNlIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZShwSW50KGRhdGEuUmVzdWx0LlZlcnNpb25Db21wYXJlKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZUNoYW5uZWwoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVR5cGUoJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVdhcm5pbmcoZmFsc2UpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb24oJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBmb3JjZSA9IGZhbHNlXG5cdCAqL1xuXHRyZWxvYWRMaWNlbnNpbmcoZm9yY2UgPSBmYWxzZSkge1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmdQcm9jZXNzKHRydWUpO1xuXHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoJycpO1xuXHRcdFJlbW90ZS5saWNlbnNpbmcoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZ1Byb2Nlc3MoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGlzTm9ybWFsKGRhdGEuUmVzdWx0LkV4cGlyZWQpKSB7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlVmFsaWQodHJ1ZSk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXhwaXJlZChwSW50KGRhdGEuUmVzdWx0LkV4cGlyZWQpKTtcblx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcignJyk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcodHJ1ZSk7XG5cdFx0XHRcdEFwcFN0b3JlLnByZW0odHJ1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZGF0YSAmJlxuXHRcdFx0XHRcdGRhdGEuRXJyb3JDb2RlICYmXG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KHBJbnQoZGF0YS5FcnJvckNvZGUpLCBbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUsIE5vdGlmaWNhdGlvbi5MaWNlbnNpbmdFeHBpcmVkXSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcihnZXROb3RpZmljYXRpb24ocEludChkYXRhLkVycm9yQ29kZSkpKTtcblx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nKHRydWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydCA9PT0gcmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSkpO1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyhmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSwgZm9yY2UpO1xuXHR9XG5cblx0Ym9vdGVuZChib290ZW5kQ2FsbGJhY2sgPSBudWxsKSB7XG5cdFx0aWYgKHByb2dyZXNzSnMpIHtcblx0XHRcdHByb2dyZXNzSnMuZW5kKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGJvb3RlbmRDYWxsYmFjaykge1xuXHRcdFx0Ym9vdGVuZENhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0Ym9vdHN0YXJ0KCkge1xuXHRcdHN1cGVyLmJvb3RzdGFydCgpO1xuXG5cdFx0QXBwU3RvcmUucG9wdWxhdGUoKTtcblx0XHRDYXBhU3RvcmUucG9wdWxhdGUoKTtcblxuXHRcdGhpZGVMb2FkaW5nKCk7XG5cblx0XHRpZiAoIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdhbGxvd0FkbWluUGFuZWwnKSkge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVmZXIoKCkgPT4ge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvJztcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGgnKSkge1xuXHRcdFx0XHRzdGFydFNjcmVlbnMoW1NldHRpbmdzQWRtaW5TY3JlZW5dKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YXJ0U2NyZWVucyhbTG9naW5BZG1pblNjcmVlbl0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuYm9vdGVuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBZG1pbkFwcCgpO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgU2VydmVyU2VjdXJlLCBQb3J0cywgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IElNQVBfREVGQVVMVF9QT1JULCBTSUVWRV9ERUZBVUxUX1BPUlQsIFNNVFBfREVGQVVMVF9QT1JUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgdHJpbSwgcEludCwgcFN0cmluZyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRG9tYWluJyxcblx0dGVtcGxhdGVJRDogJ1BvcHVwc0RvbWFpbidcbn0pXG5jbGFzcyBEb21haW5Qb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZWRpdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucGFnZSA9IGtvLm9ic2VydmFibGUoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMudGVzdGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICghdmFsdWUpIHtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYygnJyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cFNlcnZlckZvY3VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5pbWFwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5pbWFwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlU2lldmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlQWxsb3dSYXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgU0lFVkVfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNpZXZlU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2VydmVyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5zbXRwUG9ydCA9IGtvLm9ic2VydmFibGUoJycgKyBTTVRQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zbXRwU2VjdXJlID0ga28ub2JzZXJ2YWJsZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc210cEF1dGggPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRcdHRoaXMuc210cFBocE1haWwgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLndoaXRlTGlzdCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWxpYXNOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxsb3dTaWV2ZSA9IGtvLmNvbXB1dGVkKCgpID0+IENhcGFBZG1pblN0b3JlLmZpbHRlcnMoKSAmJiBDYXBhQWRtaW5TdG9yZS5zaWV2ZSgpKTtcblxuXHRcdHRoaXMuaGVhZGVyVGV4dCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB0aGlzLm5hbWUoKSxcblx0XHRcdFx0YWxpYXNOYW1lID0gdGhpcy5hbGlhc05hbWUoKTtcblxuXHRcdFx0bGV0IHJlc3VsdCA9ICcnO1xuXG5cdFx0XHRpZiAodGhpcy5lZGl0KCkpIHtcblx0XHRcdFx0cmVzdWx0ID0gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9FRElUX0RPTUFJTicsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0XHRpZiAoYWxpYXNOYW1lKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9ICcg4oaQICcgKyBhbGlhc05hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0JycgPT09IG5hbWVcblx0XHRcdFx0XHRcdD8gaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOJylcblx0XHRcdFx0XHRcdDogaTE4bignUE9QVVBTX0RPTUFJTi9USVRMRV9BRERfRE9NQUlOX1dJVEhfTkFNRScsIHsgJ05BTUUnOiBuYW1lIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5kb21haW5EZXNjID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgbmFtZSA9IHRoaXMubmFtZSgpO1xuXHRcdFx0cmV0dXJuICF0aGlzLmVkaXQoKSAmJiBuYW1lID8gaTE4bignUE9QVVBTX0RPTUFJTi9ORVdfRE9NQUlOX0RFU0MnLCB7ICdOQU1FJzogJypAJyArIG5hbWUgfSkgOiAnJztcblx0XHR9KTtcblxuXHRcdHRoaXMuZG9tYWluSXNDb21wdXRlZCA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHVzZVBocE1haWwgPSB0aGlzLnNtdHBQaHBNYWlsKCksXG5cdFx0XHRcdGFsbG93U2lldmUgPSB0aGlzLmFsbG93U2lldmUoKSxcblx0XHRcdFx0dXNlU2lldmUgPSB0aGlzLnVzZVNpZXZlKCk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdCcnICE9PSB0aGlzLm5hbWUoKSAmJlxuXHRcdFx0XHQnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiZcblx0XHRcdFx0JycgIT09IHRoaXMuaW1hcFBvcnQoKSAmJlxuXHRcdFx0XHQoYWxsb3dTaWV2ZSAmJiB1c2VTaWV2ZSA/ICcnICE9PSB0aGlzLnNpZXZlU2VydmVyKCkgJiYgJycgIT09IHRoaXMuc2lldmVQb3J0KCkgOiB0cnVlKSAmJlxuXHRcdFx0XHQoKCcnICE9PSB0aGlzLnNtdHBTZXJ2ZXIoKSAmJiAnJyAhPT0gdGhpcy5zbXRwUG9ydCgpKSB8fCB1c2VQaHBNYWlsKVxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FuQmVUZXN0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy50ZXN0aW5nKCkgJiYgdGhpcy5kb21haW5Jc0NvbXB1dGVkKCkpO1xuXHRcdHRoaXMuY2FuQmVTYXZlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNhdmluZygpICYmIHRoaXMuZG9tYWluSXNDb21wdXRlZCgpKTtcblxuXHRcdHRoaXMucGFnZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdC8vIHNtYXJ0IGZvcm0gaW1wcm92ZW1lbnRzXG5cdFx0dGhpcy5pbWFwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLm5hbWUoKSAmJiAnJyA9PT0gdGhpcy5pbWFwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5pbWFwU2VydmVyKHRoaXMubmFtZSgpLnJlcGxhY2UoL1suXT9bKl1bLl0/L2csICcnKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNpZXZlU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zaWV2ZVNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodGhpcy5pbWFwU2VydmVyKCkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyRm9jdXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHZhbHVlICYmICcnICE9PSB0aGlzLmltYXBTZXJ2ZXIoKSAmJiAnJyA9PT0gdGhpcy5zbXRwU2VydmVyKCkpIHtcblx0XHRcdFx0dGhpcy5zbXRwU2VydmVyKHRoaXMuaW1hcFNlcnZlcigpLnJlcGxhY2UoL2ltYXAvZ2ksICdzbXRwJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbWFwU2VjdXJlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoKSkge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gcEludCh0aGlzLmltYXBQb3J0KCkpO1xuXHRcdFx0XHRzd2l0Y2ggKHBTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0Y2FzZSAnMic6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuSW1hcCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltYXBQb3J0KHBTdHJpbmcoUG9ydHMuSW1hcFNzbCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNtdHBTZWN1cmUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZW5hYmxlU21hcnRQb3J0cygpKSB7XG5cdFx0XHRcdGNvbnN0IHBvcnQgPSBwSW50KHRoaXMuc210cFBvcnQoKSk7XG5cdFx0XHRcdHN3aXRjaCAocFN0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwU3NsID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTdGFydFRscyA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3RhcnRUbHMgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHBTc2wpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHAgPT09IHBvcnQgfHwgUG9ydHMuU210cFNzbCA9PT0gcG9ydCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNtdHBQb3J0KHBTdHJpbmcoUG9ydHMuU210cFN0YXJ0VGxzKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2F2ZWQoKSlcblx0Y3JlYXRlT3JBZGRDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVPclVwZGF0ZURvbWFpbihcblx0XHRcdF8uYmluZCh0aGlzLm9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpLFxuXHRcdFx0IXRoaXMuZWRpdCgpLFxuXHRcdFx0dGhpcy5uYW1lKCksXG5cblx0XHRcdHRoaXMuaW1hcFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLmltYXBQb3J0KCkpLFxuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKCksXG5cdFx0XHR0aGlzLmltYXBTaG9ydExvZ2luKCksXG5cblx0XHRcdHRoaXMudXNlU2lldmUoKSxcblx0XHRcdHRoaXMuc2lldmVBbGxvd1JhdygpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNpZXZlUG9ydCgpKSxcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy5zbXRwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc210cFBvcnQoKSksXG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUoKSxcblx0XHRcdHRoaXMuc210cFNob3J0TG9naW4oKSxcblx0XHRcdHRoaXMuc210cEF1dGgoKSxcblx0XHRcdHRoaXMuc210cFBocE1haWwoKSxcblxuXHRcdFx0dGhpcy53aGl0ZUxpc3QoKVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVRlc3RlZCgpKVxuXHR0ZXN0Q29ubmVjdGlvbkNvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cblx0XHR0aGlzLnRlc3RpbmdEb25lKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb25uZWN0aW9uRm9yRG9tYWluKFxuXHRcdFx0Xy5iaW5kKHRoaXMub25UZXN0Q29ubmVjdGlvblJlc3BvbnNlLCB0aGlzKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5pbWFwUG9ydCgpKSxcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnVzZVNpZXZlKCksXG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc2lldmVQb3J0KCkpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSgpLFxuXG5cdFx0XHR0aGlzLnNtdHBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zbXRwUG9ydCgpKSxcblx0XHRcdHRoaXMuc210cFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5zbXRwQXV0aCgpLFxuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCgpXG5cdFx0KTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0d2hpdGVMaXN0Q29tbWFuZCgpIHtcblx0XHR0aGlzLnBhZ2UoJ3doaXRlLWxpc3QnKTtcblx0fVxuXG5cdEBjb21tYW5kKClcblx0YmFja0NvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHNpZXZlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoIXRoaXMuc2lldmVTZXR0aW5ncygpKTtcblx0XHR0aGlzLmNsZWFyVGVzdGluZygpO1xuXHR9XG5cblx0b25UZXN0Q29ubmVjdGlvblJlc3BvbnNlKHNSZXN1bHQsIG9EYXRhKSB7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdGxldCBiSW1hcCA9IGZhbHNlLFxuXHRcdFx0XHRiU2lldmUgPSBmYWxzZTtcblxuXHRcdFx0dGhpcy50ZXN0aW5nRG9uZSh0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5TaWV2ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LlNtdHApO1xuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nSW1hcEVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LkltYXApIHtcblx0XHRcdFx0YkltYXAgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYyhvRGF0YS5SZXN1bHQuSW1hcCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKCkgJiYgb0RhdGEuUmVzdWx0LlNpZXZlKSB7XG5cdFx0XHRcdGJTaWV2ZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvckRlc2Mob0RhdGEuUmVzdWx0LlNpZXZlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ1NtdHBFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5TbXRwKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MoJycpO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5TbXRwKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2lldmVTZXR0aW5ncygpKSB7XG5cdFx0XHRcdGlmICghYlNpZXZlICYmIGJJbWFwKSB7XG5cdFx0XHRcdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChiU2lldmUgJiYgIWJJbWFwKSB7XG5cdFx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyh0cnVlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKHRydWUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0b25Eb21haW5DcmVhdGVPclNhdmVSZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSkge1xuXHRcdFx0aWYgKG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2VDb21tYW5kKCk7XG5cdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzID09PSBvRGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvRE9NQUlOX0FMUkVBRFlfRVhJU1RTJykpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9VTktOT1dOX0VSUk9SJykpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyVGVzdGluZygpIHtcblx0XHR0aGlzLnRlc3RpbmcoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0RvbmUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKGZhbHNlKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHR9XG5cblx0b25TaG93KG9Eb21haW4pIHtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5jbGVhclRlc3RpbmcoKTtcblxuXHRcdHRoaXMuY2xlYXJGb3JtKCk7XG5cdFx0aWYgKG9Eb21haW4pIHtcblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyhmYWxzZSk7XG5cblx0XHRcdHRoaXMuZWRpdCh0cnVlKTtcblxuXHRcdFx0dGhpcy5uYW1lKHRyaW0ob0RvbWFpbi5OYW1lKSk7XG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIodHJpbShvRG9tYWluLkluY0hvc3QpKTtcblx0XHRcdHRoaXMuaW1hcFBvcnQoJycgKyBwSW50KG9Eb21haW4uSW5jUG9ydCkpO1xuXHRcdFx0dGhpcy5pbWFwU2VjdXJlKHRyaW0ob0RvbWFpbi5JbmNTZWN1cmUpKTtcblx0XHRcdHRoaXMuaW1hcFNob3J0TG9naW4oISFvRG9tYWluLkluY1Nob3J0TG9naW4pO1xuXHRcdFx0dGhpcy51c2VTaWV2ZSghIW9Eb21haW4uVXNlU2lldmUpO1xuXHRcdFx0dGhpcy5zaWV2ZUFsbG93UmF3KCEhb0RvbWFpbi5TaWV2ZUFsbG93UmF3KTtcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIodHJpbShvRG9tYWluLlNpZXZlSG9zdCkpO1xuXHRcdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBwSW50KG9Eb21haW4uU2lldmVQb3J0KSk7XG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKHRyaW0ob0RvbWFpbi5TaWV2ZVNlY3VyZSkpO1xuXHRcdFx0dGhpcy5zbXRwU2VydmVyKHRyaW0ob0RvbWFpbi5PdXRIb3N0KSk7XG5cdFx0XHR0aGlzLnNtdHBQb3J0KCcnICsgcEludChvRG9tYWluLk91dFBvcnQpKTtcblx0XHRcdHRoaXMuc210cFNlY3VyZSh0cmltKG9Eb21haW4uT3V0U2VjdXJlKSk7XG5cdFx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKCEhb0RvbWFpbi5PdXRTaG9ydExvZ2luKTtcblx0XHRcdHRoaXMuc210cEF1dGgoISFvRG9tYWluLk91dEF1dGgpO1xuXHRcdFx0dGhpcy5zbXRwUGhwTWFpbCghIW9Eb21haW4uT3V0VXNlUGhwTWFpbCk7XG5cdFx0XHR0aGlzLndoaXRlTGlzdCh0cmltKG9Eb21haW4uV2hpdGVMaXN0KSk7XG5cdFx0XHR0aGlzLmFsaWFzTmFtZSh0cmltKG9Eb21haW4uQWxpYXNOYW1lKSk7XG5cblx0XHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJGb3JtKCkge1xuXHRcdHRoaXMuZWRpdChmYWxzZSk7XG5cblx0XHR0aGlzLnBhZ2UoJ21haW4nKTtcblx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKGZhbHNlKTtcblxuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmltYXBTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuaW1hcFBvcnQoJycgKyBJTUFQX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5pbWFwU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblx0XHR0aGlzLmltYXBTaG9ydExvZ2luKGZhbHNlKTtcblxuXHRcdHRoaXMudXNlU2lldmUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVBbGxvd1JhdyhmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlcignJyk7XG5cdFx0dGhpcy5zaWV2ZVBvcnQoJycgKyBTSUVWRV9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc2lldmVTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXG5cdFx0dGhpcy5zbXRwU2VydmVyKCcnKTtcblx0XHR0aGlzLnNtdHBQb3J0KCcnICsgU01UUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc210cFNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5zbXRwU2hvcnRMb2dpbihmYWxzZSk7XG5cdFx0dGhpcy5zbXRwQXV0aCh0cnVlKTtcblx0XHR0aGlzLnNtdHBQaHBNYWlsKGZhbHNlKTtcblxuXHRcdHRoaXMud2hpdGVMaXN0KCcnKTtcblx0XHR0aGlzLmFsaWFzTmFtZSgnJyk7XG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzKHRydWUpO1xuXHR9XG59XG5cbmV4cG9ydCB7IERvbWFpblBvcHVwVmlldywgRG9tYWluUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IGFkZFNldHRpbmdzVmlld01vZGVsIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgcnVuU2V0dGluZ3NWaWV3TW9kZWxIb29rcyB9IGZyb20gJ0NvbW1vbi9QbHVnaW5zJztcblxuaW1wb3J0IHsgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB9IGZyb20gJ1NjcmVlbi9BYnN0cmFjdFNldHRpbmdzJztcblxuaW1wb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9HZW5lcmFsJztcbmltcG9ydCB7IERvbWFpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vRG9tYWlucyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Mb2dpbic7XG5pbXBvcnQgeyBDb250YWN0c0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9Db250YWN0cyc7XG5pbXBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9TZWN1cml0eSc7XG5pbXBvcnQgeyBTb2NpYWxBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vU29jaWFsJztcbmltcG9ydCB7IFBsdWdpbnNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vUGx1Z2lucyc7XG5pbXBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9QYWNrYWdlcyc7XG5pbXBvcnQgeyBBYm91dEFkbWluU2V0dGluZ3MgfSBmcm9tICdTZXR0aW5ncy9BZG1pbi9BYm91dCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTWVudVNldHRpbmdzQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9TZXR0aW5ncy9NZW51JztcbmltcG9ydCB7IFBhbmVTZXR0aW5nc0FkbWluVmlldyB9IGZyb20gJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZSc7XG5cbmNsYXNzIFNldHRpbmdzQWRtaW5TY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoW01lbnVTZXR0aW5nc0FkbWluVmlldywgUGFuZVNldHRpbmdzQWRtaW5WaWV3XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtGdW5jdGlvbj19IGZDYWxsYmFjayA9IG51bGxcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGxldCBicmFuZGluZyA9IG51bGwsXG5cdFx0XHRsaWNlbnNpbmcgPSBudWxsO1xuXG5cdFx0aWYgKFJMX0NPTU1VTklUWSkge1xuXHRcdFx0YnJhbmRpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyYW5kaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vUHJlbS9CcmFuZGluZycpLmRlZmF1bHQ7XG5cdFx0XHRsaWNlbnNpbmcgPSByZXF1aXJlKCdTZXR0aW5ncy9BZG1pbi9QcmVtL0xpY2Vuc2luZycpLmRlZmF1bHQ7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRHZW5lcmFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzR2VuZXJhbCcsXG5cdFx0XHQnVEFCU19MQUJFTFMvTEFCRUxfR0VORVJBTF9OQU1FJyxcblx0XHRcdCdnZW5lcmFsJyxcblx0XHRcdHRydWVcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoRG9tYWluc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzRG9tYWlucycsICdUQUJTX0xBQkVMUy9MQUJFTF9ET01BSU5TX05BTUUnLCAnZG9tYWlucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoTG9naW5BZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0xvZ2luJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xPR0lOX05BTUUnLCAnbG9naW4nKTtcblxuXHRcdGlmIChicmFuZGluZykge1xuXHRcdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoYnJhbmRpbmcsICdBZG1pblNldHRpbmdzQnJhbmRpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfQlJBTkRJTkdfTkFNRScsICdicmFuZGluZycpO1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKENvbnRhY3RzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NDb250YWN0cycsICdUQUJTX0xBQkVMUy9MQUJFTF9DT05UQUNUU19OQU1FJywgJ2NvbnRhY3RzJyk7XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZWN1cml0eUFkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzU2VjdXJpdHknLCAnVEFCU19MQUJFTFMvTEFCRUxfU0VDVVJJVFlfTkFNRScsICdzZWN1cml0eScpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoXG5cdFx0XHRTb2NpYWxBZG1pblNldHRpbmdzLFxuXHRcdFx0J0FkbWluU2V0dGluZ3NTb2NpYWwnLFxuXHRcdFx0J1RBQlNfTEFCRUxTL0xBQkVMX0lOVEVHUkFUSU9OX05BTUUnLFxuXHRcdFx0J2ludGVncmF0aW9ucydcblx0XHQpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGx1Z2luc0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzUGx1Z2lucycsICdUQUJTX0xBQkVMUy9MQUJFTF9QTFVHSU5TX05BTUUnLCAncGx1Z2lucycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoUGFja2FnZXNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BhY2thZ2VzJywgJ1RBQlNfTEFCRUxTL0xBQkVMX1BBQ0tBR0VTX05BTUUnLCAncGFja2FnZXMnKTtcblxuXHRcdGlmIChsaWNlbnNpbmcpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKGxpY2Vuc2luZywgJ0FkbWluU2V0dGluZ3NMaWNlbnNpbmcnLCAnVEFCU19MQUJFTFMvTEFCRUxfTElDRU5TSU5HX05BTUUnLCAnbGljZW5zaW5nJyk7XG5cdFx0fVxuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoQWJvdXRBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0Fib3V0JywgJ1RBQlNfTEFCRUxTL0xBQkVMX0FCT1VUX05BTUUnLCAnYWJvdXQnKTtcblxuXHRcdHJ1blNldHRpbmdzVmlld01vZGVsSG9va3ModHJ1ZSk7XG5cblx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRmQ2FsbGJhY2soKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNldHRpbmdzQWRtaW5TY3JlZW4sIFNldHRpbmdzQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQge1xuXHR0cmltLFxuXHRwSW50LFxuXHRib29sVG9BamF4LFxuXHRzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbixcblx0Y2hhbmdlVGhlbWUsXG5cdGNvbnZlcnRUaGVtZU5hbWUsXG5cdGNvbnZlcnRMYW5nTmFtZVxufSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcmVsb2FkIGFzIHRyYW5zbGF0b3JSZWxvYWQgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgTGFuZ3VhZ2VTdG9yZSBmcm9tICdTdG9yZXMvTGFuZ3VhZ2UnO1xuaW1wb3J0IEFwcEFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5jbGFzcyBHZW5lcmFsQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFuZ3VhZ2UgPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlO1xuXHRcdHRoaXMubGFuZ3VhZ2VzID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXM7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZUFkbWluO1xuXHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4gPSBMYW5ndWFnZVN0b3JlLmxhbmd1YWdlc0FkbWluO1xuXG5cdFx0dGhpcy50aGVtZSA9IFRoZW1lU3RvcmUudGhlbWU7XG5cdFx0dGhpcy50aGVtZXMgPSBUaGVtZVN0b3JlLnRoZW1lcztcblxuXHRcdHRoaXMuY2FwYVRoZW1lcyA9IENhcGFBZG1pblN0b3JlLnRoZW1lcztcblx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZCA9IENhcGFBZG1pblN0b3JlLnVzZXJCYWNrZ3JvdW5kO1xuXHRcdHRoaXMuY2FwYUdyYXZhdGFyID0gQ2FwYUFkbWluU3RvcmUuZ3JhdmF0YXI7XG5cdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzID0gQ2FwYUFkbWluU3RvcmUuYWRkaXRpb25hbEFjY291bnRzO1xuXHRcdHRoaXMuY2FwYUlkZW50aXRpZXMgPSBDYXBhQWRtaW5TdG9yZS5pZGVudGl0aWVzO1xuXHRcdHRoaXMuY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzID0gQ2FwYUFkbWluU3RvcmUuYXR0YWNobWVudFRodW1ibmFpbHM7XG5cdFx0dGhpcy5jYXBhVGVtcGxhdGVzID0gQ2FwYUFkbWluU3RvcmUudGVtcGxhdGVzO1xuXG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MgPSBBcHBBZG1pblN0b3JlLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncztcblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IEFwcEFkbWluU3RvcmUud2Vha1Bhc3N3b3JkO1xuXHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyID0gQXBwQWRtaW5TdG9yZS5uZXdNb3ZlVG9Gb2xkZXI7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBBcHBBZG1pblN0b3JlLmRhdGFGb2xkZXJBY2Nlc3M7XG5cblx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQgPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUocEludChzZXR0aW5nc0dldCgnQXR0YWNobWVudExpbWl0JykpIC8gKE1hZ2ljcy5CaXRMZW5ndGgxMDI0ICogTWFnaWNzLkJpdExlbmd0aDEwMjQpKVxuXHRcdFx0LmV4dGVuZCh7IHBvc0ludGVyZXI6IDI1IH0pO1xuXG5cdFx0dGhpcy51cGxvYWREYXRhID0gc2V0dGluZ3NHZXQoJ1BocFVwbG9hZFNpemVzJyk7XG5cdFx0dGhpcy51cGxvYWREYXRhRGVzYyA9XG5cdFx0XHR0aGlzLnVwbG9hZERhdGEgJiYgKHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplIHx8IHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplKVxuXHRcdFx0XHQ/IFtcblx0XHRcdFx0XHRcdHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplXG5cdFx0XHRcdFx0XHRcdD8gJ3VwbG9hZF9tYXhfZmlsZXNpemUgPSAnICsgdGhpcy51cGxvYWREYXRhLnVwbG9hZF9tYXhfZmlsZXNpemUgKyAnOyAnXG5cdFx0XHRcdFx0XHRcdDogJycsXG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSA/ICdwb3N0X21heF9zaXplID0gJyArIHRoaXMudXBsb2FkRGF0YS5wb3N0X21heF9zaXplIDogJydcblx0XHRcdFx0ICBdLmpvaW4oJycpXG5cdFx0XHRcdDogJyc7XG5cblx0XHR0aGlzLnRoZW1lc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy50aGVtZXMoKSwgKHRoZW1lKSA9PiAoeyBvcHRWYWx1ZTogdGhlbWUsIG9wdFRleHQ6IGNvbnZlcnRUaGVtZU5hbWUodGhlbWUpIH0pKVxuXHRcdCk7XG5cblx0XHR0aGlzLmxhbmd1YWdlRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZSgpKSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluRnVsbE5hbWUgPSBrby5jb21wdXRlZCgoKSA9PiBjb252ZXJ0TGFuZ05hbWUodGhpcy5sYW5ndWFnZUFkbWluKCkpKTtcblxuXHRcdHRoaXMuYXR0YWNobWVudExpbWl0VHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpLmV4dGVuZCh7IHRocm90dGxlOiBNYWdpY3MuVGltZTEwMG1zIH0pO1xuXHRcdHRoaXMudGhlbWVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5hdHRhY2htZW50TGltaXRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxhbmd1YWdlVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50aGVtZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIgPSAoc2F2ZVNldHRpbmdzU3RlcCkgPT4gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoc2F2ZVNldHRpbmdzU3RlcCk7XG5cdFx0XHRcdFx0Xy5kZWxheSgoKSA9PiB0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSksIE1hZ2ljcy5UaW1lMXMpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHR0aGlzLm1haW5BdHRhY2htZW50TGltaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0F0dGFjaG1lbnRMaW1pdCc6IHBJbnQodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xhbmd1YWdlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLkFuaW1hdGUpO1xuXHRcdFx0XHR0cmFuc2xhdG9yUmVsb2FkKHRydWUsIHZhbHVlKVxuXHRcdFx0XHRcdC50aGVuKGZSZWxvYWRMYW5ndWFnZUhlbHBlcihTYXZlU2V0dGluZ3NTdGVwLlRydWVSZXN1bHQpLCBmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdCkpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0XHRcdCdMYW5ndWFnZUFkbWluJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMudGhlbWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRjaGFuZ2VUaGVtZSh2YWx1ZSwgdGhpcy50aGVtZVRyaWdnZXIpO1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J1RoZW1lJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhQWRkaXRpb25hbEFjY291bnRzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFBZGRpdGlvbmFsQWNjb3VudHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFJZGVudGl0aWVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFJZGVudGl0aWVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVGVtcGxhdGVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFUZW1wbGF0ZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFHcmF2YXRhci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhR3JhdmF0YXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFBdHRhY2htZW50VGh1bWJuYWlscy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhQXR0YWNobWVudFRodW1ibmFpbHMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFUaGVtZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYVRoZW1lcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVVzZXJCYWNrZ3JvdW5kLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFVc2VyQmFja2dyb3VuZCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0FsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubmV3TW92ZVRvRm9sZGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J05ld01vdmVUb0ZvbGRlcic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0xhbmd1YWdlcycpLCBbdGhpcy5sYW5ndWFnZSwgdGhpcy5sYW5ndWFnZXMoKSwgTGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2UoKV0pO1xuXHR9XG5cblx0c2VsZWN0TGFuZ3VhZ2VBZG1pbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW1xuXHRcdFx0dGhpcy5sYW5ndWFnZUFkbWluLFxuXHRcdFx0dGhpcy5sYW5ndWFnZXNBZG1pbigpLFxuXHRcdFx0TGFuZ3VhZ2VTdG9yZS51c2VyTGFuZ3VhZ2VBZG1pbigpXG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHBocEluZm9MaW5rKCkge1xuXHRcdHJldHVybiBwaHBJbmZvKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgR2VuZXJhbEFkbWluU2V0dGluZ3MsIEdlbmVyYWxBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBEb21haW5zQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZG9tYWlucyA9IERvbWFpblN0b3JlLmRvbWFpbnM7XG5cblx0XHR0aGlzLnZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAodGhpcy5kb21haW5zLmxvYWRpbmcoKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSk7XG5cblx0XHR0aGlzLmRvbWFpbkZvckRlbGV0aW9uID0ga28ub2JzZXJ2YWJsZShudWxsKS5kZWxldGVBY2Nlc3NIZWxwZXIoKTtcblxuXHRcdHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25Eb21haW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uRG9tYWluTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0Y3JlYXRlRG9tYWluKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbicpKTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbkFsaWFzKCkge1xuXHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbkFsaWFzJykpO1xuXHR9XG5cblx0ZGVsZXRlRG9tYWluKGRvbWFpbikge1xuXHRcdHRoaXMuZG9tYWlucy5yZW1vdmUoZG9tYWluKTtcblx0XHRSZW1vdGUuZG9tYWluRGVsZXRlKHRoaXMub25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCwgZG9tYWluLm5hbWUpO1xuXHR9XG5cblx0ZGlzYWJsZURvbWFpbihkb21haW4pIHtcblx0XHRkb21haW4uZGlzYWJsZWQoIWRvbWFpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUuZG9tYWluRGlzYWJsZSh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIGRvbWFpbi5uYW1lLCBkb21haW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblx0XHRvRG9tLm9uKCdjbGljaycsICcuYi1hZG1pbi1kb21haW5zLWxpc3QtdGFibGUgLmUtaXRlbSAuZS1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRjb25zdCBkb21haW5JdGVtID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdGlmIChkb21haW5JdGVtKSB7XG5cdFx0XHRcdFJlbW90ZS5kb21haW4oc2VsZi5vbkRvbWFpbkxvYWRSZXF1ZXN0LCBkb21haW5JdGVtLm5hbWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHR9XG5cblx0b25Eb21haW5Mb2FkUmVxdWVzdChzUmVzdWx0LCBvRGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzUmVzdWx0ICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvRG9tYWluJyksIFtvRGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0KCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5zQWRtaW5TZXR0aW5ncywgRG9tYWluc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgYm9vbFRvQWpheCwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5jbGFzcyBMb2dpbkFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSA9IEFwcFN0b3JlLmRldGVybWluZVVzZXJMYW5ndWFnZTtcblx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4gPSBBcHBTdG9yZS5kZXRlcm1pbmVVc2VyRG9tYWluO1xuXG5cdFx0dGhpcy5kZWZhdWx0RG9tYWluID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5EZWZhdWx0RG9tYWluJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4gPSBBcHBTdG9yZS5hbGxvd0xhbmd1YWdlc09uTG9naW47XG5cblx0XHR0aGlzLmR1bW15ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmRlZmF1bHREb21haW4udHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0RldGVybWluZVVzZXJMYW5ndWFnZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGV0ZXJtaW5lVXNlckRvbWFpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdEZXRlcm1pbmVVc2VyRG9tYWluJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5hbGxvd0xhbmd1YWdlc09uTG9naW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQWxsb3dMYW5ndWFnZXNPbkxvZ2luJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5kZWZhdWx0RG9tYWluLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdMb2dpbkRlZmF1bHREb21haW4nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIDUwKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluU2V0dGluZ3MsIExvZ2luQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uLCBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIsIGluQXJyYXksIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBTdG9yYWdlUmVzdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGkxOG4gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBDb250YWN0c0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciA9IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlcjtcblx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb250YWN0c0VuYWJsZScpKTtcblx0XHR0aGlzLmNvbnRhY3RzU3luYyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQ29udGFjdHNTeW5jJykpO1xuXG5cdFx0Y29uc3Qgc3VwcG9ydGVkVHlwZXMgPSBbXSxcblx0XHRcdHR5cGVzID0gWydzcWxpdGUnLCAnbXlzcWwnLCAncGdzcWwnXSxcblx0XHRcdGdldFR5cGVOYW1lID0gKG5hbWUpID0+IHtcblx0XHRcdFx0c3dpdGNoIChuYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSAnc3FsaXRlJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnU1FMaXRlJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ215c3FsJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnTXlTUUwnO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAncGdzcWwnOlxuXHRcdFx0XHRcdFx0bmFtZSA9ICdQb3N0Z3JlU1FMJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBuYW1lO1xuXHRcdFx0fTtcblxuXHRcdGlmIChzZXR0aW5nc0dldCgnU1FMaXRlSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgnc3FsaXRlJyk7XG5cdFx0fVxuXHRcdGlmIChzZXR0aW5nc0dldCgnTXlTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdteXNxbCcpO1xuXHRcdH1cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ1Bvc3RncmVTcWxJc1N1cHBvcnRlZCcpKSB7XG5cdFx0XHRzdXBwb3J0ZWRUeXBlcy5wdXNoKCdwZ3NxbCcpO1xuXHRcdH1cblxuXHRcdHRoaXMuY29udGFjdHNTdXBwb3J0ZWQgPSAwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKHRoaXMuY29udGFjdHNUeXBlcygpLCAodmFsdWUpID0+IHtcblx0XHRcdFx0Y29uc3QgZGlzYWJsZWQgPSAtMSA9PT0gaW5BcnJheSh2YWx1ZSwgc3VwcG9ydGVkVHlwZXMpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdCdpZCc6IHZhbHVlLFxuXHRcdFx0XHRcdCduYW1lJzogZ2V0VHlwZU5hbWUodmFsdWUpICsgKGRpc2FibGVkID8gJyAoJyArIGkxOG4oJ0hJTlRTL05PVF9TVVBQT1JURUQnKSArICcpJyA6ICcnKSxcblx0XHRcdFx0XHQnZGlzYWJsZWQnOiBkaXNhYmxlZFxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGVzKHR5cGVzKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5tYWluQ29udGFjdHNUeXBlID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRoaXMuY29udGFjdHNUeXBlLFxuXHRcdFx0XHR3cml0ZTogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlICE9PSB0aGlzLmNvbnRhY3RzVHlwZSgpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBpbkFycmF5KHZhbHVlLCBzdXBwb3J0ZWRUeXBlcykpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUodmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgwIDwgc3VwcG9ydGVkVHlwZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlKCcnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5jb250YWN0c1R5cGUudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmV4dGVuZCh7IG5vdGlmeTogJ2Fsd2F5cycgfSk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wZG9Ec24gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb0RzbicpKTtcblx0XHR0aGlzLnBkb1VzZXIgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1VzZXInKSk7XG5cdFx0dGhpcy5wZG9QYXNzd29yZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvUGFzc3dvcmQnKSk7XG5cblx0XHR0aGlzLnBkb0RzblRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5wZG9Vc2VyVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnBkb1Bhc3N3b3JkVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmNvbnRhY3RzVHlwZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLnRlc3RpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1R5cGUnKSk7XG5cblx0XHR0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gc2VsZi5wZG9Ec24oKSAmJiAnJyAhPT0gc2VsZi5wZG9Vc2VyKCkpXG5cdHRlc3RDb250YWN0c0NvbW1hbmQoKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0dGhpcy50ZXN0aW5nKHRydWUpO1xuXG5cdFx0UmVtb3RlLnRlc3RDb250YWN0cyh0aGlzLm9uVGVzdENvbnRhY3RzUmVzcG9uc2UsIHtcblx0XHRcdCdDb250YWN0c1Bkb1R5cGUnOiB0aGlzLmNvbnRhY3RzVHlwZSgpLFxuXHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdGhpcy5wZG9Ec24oKSxcblx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0aGlzLnBkb1VzZXIoKSxcblx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdGhpcy5wZG9QYXNzd29yZCgpXG5cdFx0fSk7XG5cdH1cblxuXHRvblRlc3RDb250YWN0c1Jlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlc3VsdCkge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKHRydWUpO1xuXHRcdFx0aWYgKGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoZGF0YS5SZXN1bHQuTWVzc2FnZSB8fCAnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvRHNuVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9Vc2VyVHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGY0ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5wZG9QYXNzd29yZFRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuY29udGFjdHNUeXBlVHJpZ2dlciwgdGhpcyk7XG5cblx0XHRcdHRoaXMuZW5hYmxlQ29udGFjdHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNFbmFibGUnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzU3luYy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1N5bmMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNvbnRhY3RzVHlwZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjUsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9UeXBlJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Ec24uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvRHNuJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9Vc2VyLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1VzZXInOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnBkb1Bhc3N3b3JkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmNCwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb1Bhc3N3b3JkJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1R5cGUoc2V0dGluZ3NHZXQoJ0NvbnRhY3RzUGRvVHlwZScpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IENvbnRhY3RzQWRtaW5TZXR0aW5ncywgQ29udGFjdHNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBwaHBJbmZvIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDYXBhQWRtaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5jbGFzcyBTZWN1cml0eUFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyA9IEFwcEFkbWluU3RvcmUudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzO1xuXG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBBcHBBZG1pblN0b3JlLndlYWtQYXNzd29yZDtcblxuXHRcdHRoaXMuY2FwYU9wZW5QR1AgPSBDYXBhQWRtaW5TdG9yZS5vcGVuUEdQO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aCA9IENhcGFBZG1pblN0b3JlLnR3b0ZhY3RvckF1dGg7XG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlID0gQ2FwYUFkbWluU3RvcmUudHdvRmFjdG9yQXV0aEZvcmNlO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZlcmlmeVNzbENlcnRpZmljYXRlID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdWZXJpZnlTc2xDZXJ0aWZpY2F0ZScpKTtcblx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZCA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQWxsb3dTZWxmU2lnbmVkJykpO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93biA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0FkbWluTG9naW4nKSk7XG5cdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5Mb2dpbi5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3RXJyb3IoZmFsc2UpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAnJyAhPT0gdHJpbShzZWxmLmFkbWluTG9naW4oKSkgJiYgJycgIT09IHNlbGYuYWRtaW5QYXNzd29yZCgpKVxuXHRzYXZlTmV3QWRtaW5QYXNzd29yZENvbW1hbmQoKSB7XG5cdFx0aWYgKCcnID09PSB0cmltKHRoaXMuYWRtaW5Mb2dpbigpKSkge1xuXHRcdFx0dGhpcy5hZG1pbkxvZ2luRXJyb3IodHJ1ZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYWRtaW5QYXNzd29yZE5ldygpICE9PSB0aGlzLmFkbWluUGFzc3dvcmROZXcyKCkpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblxuXHRcdFJlbW90ZS5zYXZlTmV3QWRtaW5QYXNzd29yZCh0aGlzLm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlLCB7XG5cdFx0XHQnTG9naW4nOiB0aGlzLmFkbWluTG9naW4oKSxcblx0XHRcdCdQYXNzd29yZCc6IHRoaXMuYWRtaW5QYXNzd29yZCgpLFxuXHRcdFx0J05ld1Bhc3N3b3JkJzogdGhpcy5hZG1pblBhc3N3b3JkTmV3KClcblx0XHR9KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0c2hvd1R3b0ZhY3RvckRyb3BwZXIoKSB7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bih0cnVlKTtcblxuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKHRydWUpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRvbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZCgnJyk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MignJyk7XG5cblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3ModHJ1ZSk7XG5cblx0XHRcdHRoaXMud2Vha1Bhc3N3b3JkKCEhZGF0YS5SZXN1bHQuV2Vhayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZUVycm9yKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dGhpcy5jYXBhT3BlblBHUC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFPcGVuUEdQJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFUd29GYWN0b3JBdXRoJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jYXBhVHdvRmFjdG9yQXV0aEZvcmNlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQ2FwYVR3b0ZhY3RvckF1dGhGb3JjZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J1ZlcmlmeVNzbENlcnRpZmljYXRlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdBbGxvd1NlbGZTaWduZWQnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkKCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoJycpO1xuXG5cdFx0dGhpcy5pc1R3b0ZhY3RvckRyb3BwZXJTaG93bihmYWxzZSk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlcignJyk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkKGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0cGhwSW5mb0xpbmsoKSB7XG5cdFx0cmV0dXJuIHBocEluZm8oKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZWN1cml0eUFkbWluU2V0dGluZ3MsIFNlY3VyaXR5QWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSwgYm9vbFRvQWpheCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCBTb2NpYWxTdG9yZSBmcm9tICdTdG9yZXMvU29jaWFsJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmNsYXNzIFNvY2lhbEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5lbmFibGVkO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmF1dGg7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoR21haWw7XG5cdFx0dGhpcy5nb29nbGVFbmFibGVEcml2ZSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLmRyaXZlO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jYXBhLnByZXZpZXc7XG5cblx0XHR0aGlzLmdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlUmVxdWlyZUFwaUtleSA9IFNvY2lhbFN0b3JlLmdvb2dsZS5yZXF1aXJlLmFwaUtleVNldHRpbmdzO1xuXG5cdFx0dGhpcy5nb29nbGVDbGllbnRJRCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRJRDtcblx0XHR0aGlzLmdvb2dsZUNsaWVudFNlY3JldCA9IFNvY2lhbFN0b3JlLmdvb2dsZS5jbGllbnRTZWNyZXQ7XG5cdFx0dGhpcy5nb29nbGVBcGlLZXkgPSBTb2NpYWxTdG9yZS5nb29nbGUuYXBpS2V5O1xuXG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjMgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLmZhY2Vib29rU3VwcG9ydGVkID0gU29jaWFsU3RvcmUuZmFjZWJvb2suc3VwcG9ydGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tFbmFibGUgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5lbmFibGVkO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBJRCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLmFwcElEO1xuXHRcdHRoaXMuZmFjZWJvb2tBcHBTZWNyZXQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5hcHBTZWNyZXQ7XG5cblx0XHR0aGlzLmZhY2Vib29rVHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5mYWNlYm9va1RyaWdnZXIyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy50d2l0dGVyRW5hYmxlID0gU29jaWFsU3RvcmUudHdpdHRlci5lbmFibGVkO1xuXHRcdHRoaXMudHdpdHRlckNvbnN1bWVyS2V5ID0gU29jaWFsU3RvcmUudHdpdHRlci5jb25zdW1lcktleTtcblx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lclNlY3JldCA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuY29uc3VtZXJTZWNyZXQ7XG5cblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLnR3aXR0ZXJUcmlnZ2VyMiA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMuZHJvcGJveEVuYWJsZSA9IFNvY2lhbFN0b3JlLmRyb3Bib3guZW5hYmxlZDtcblx0XHR0aGlzLmRyb3Bib3hBcGlLZXkgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmFwaUtleTtcblxuXHRcdHRoaXMuZHJvcGJveFRyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYWNlYm9va1RyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmZhY2Vib29rVHJpZ2dlcjIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudHdpdHRlclRyaWdnZXIxLCB0aGlzKSxcblx0XHRcdFx0ZjQgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnR3aXR0ZXJUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY1ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMSwgdGhpcyksXG5cdFx0XHRcdGY2ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMiwgdGhpcyksXG5cdFx0XHRcdGY3ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5nb29nbGVUcmlnZ2VyMywgdGhpcyksXG5cdFx0XHRcdGY4ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5kcm9wYm94VHJpZ2dlcjEsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rRW5hYmxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rRW5hYmxlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmFjZWJvb2tBcHBJRC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZhY2Vib29rU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYxLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tBcHBJRCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rQXBwU2VjcmV0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZmFjZWJvb2tTdXBwb3J0ZWQoKSkge1xuXHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjIsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0FwcFNlY3JldCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnR3aXR0ZXJFbmFibGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJFbmFibGUnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lcktleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckNvbnN1bWVyS2V5JywgdHJpbSwgZjMpKTtcblx0XHRcdHRoaXMudHdpdHRlckNvbnN1bWVyU2VjcmV0LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyQ29uc3VtZXJTZWNyZXQnLCB0cmltLCBmNCkpO1xuXG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVBdXRoJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVBdXRoR21haWwuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZUF1dGhHbWFpbCcsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlRHJpdmUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZURyaXZlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVFbmFibGVQcmV2aWV3LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVQcmV2aWV3JywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRJRC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQ2xpZW50SUQnLCB0cmltLCBmNSkpO1xuXHRcdFx0dGhpcy5nb29nbGVDbGllbnRTZWNyZXQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUNsaWVudFNlY3JldCcsIHRyaW0sIGY2KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUFwaUtleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlQXBpS2V5JywgdHJpbSwgZjcpKTtcblxuXHRcdFx0dGhpcy5kcm9wYm94RW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94RW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy5kcm9wYm94QXBpS2V5LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdEcm9wYm94QXBpS2V5JywgdHJpbSwgZjgpKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNvY2lhbEFkbWluU2V0dGluZ3MsIFNvY2lhbEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgUGx1Z2luU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BsdWdpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIFBsdWdpbnNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5lbmFibGVkUGx1Z2lucyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnRW5hYmxlZFBsdWdpbnMnKSk7XG5cblx0XHR0aGlzLnBsdWdpbnMgPSBQbHVnaW5TdG9yZS5wbHVnaW5zO1xuXHRcdHRoaXMucGx1Z2luc0Vycm9yID0gUGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcjtcblxuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZIHx8IEFwcFN0b3JlLmNvbW11bml0eSgpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblxuXHRcdHRoaXMub25QbHVnaW5Mb2FkUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHRoaXMpO1xuXHRcdHRoaXMub25QbHVnaW5EaXNhYmxlUmVxdWVzdCA9IF8uYmluZCh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHRoaXMpO1xuXHR9XG5cblx0ZGlzYWJsZVBsdWdpbihwbHVnaW4pIHtcblx0XHRwbHVnaW4uZGlzYWJsZWQoIXBsdWdpbi5kaXNhYmxlZCgpKTtcblx0XHRSZW1vdGUucGx1Z2luRGlzYWJsZSh0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QsIHBsdWdpbi5uYW1lLCBwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdH1cblxuXHRjb25maWd1cmVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0UmVtb3RlLnBsdWdpbih0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QsIHBsdWdpbi5uYW1lKTtcblx0fVxuXG5cdG9uQnVpbGQob0RvbSkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0b0RvbVxuXHRcdFx0Lm9uKCdjbGljaycsICcuZS1pdGVtIC5jb25maWd1cmUtcGx1Z2luLWFjdGlvbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5jb25maWd1cmVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuZGlzYWJsZWQtcGx1Z2luJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcHJlZmVyLWFycm93LWNhbGxiYWNrXG5cdFx0XHRcdGNvbnN0IHBsdWdpbiA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRcdGlmIChwbHVnaW4pIHtcblx0XHRcdFx0XHRzZWxmLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLmVuYWJsZWRQbHVnaW5zLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnRW5hYmxlZFBsdWdpbnMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcignJyk7XG5cdFx0Z2V0QXBwKCkucmVsb2FkUGx1Z2luTGlzdCgpO1xuXHR9XG5cblx0b25QbHVnaW5Mb2FkUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL1BsdWdpbicpLCBbZGF0YS5SZXN1bHRdKTtcblx0XHR9XG5cdH1cblxuXHRvblBsdWdpbkRpc2FibGVSZXF1ZXN0KHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKCFkYXRhLlJlc3VsdCAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRpZiAoTm90aWZpY2F0aW9uLlVuc3VwcG9ydGVkUGx1Z2luUGFja2FnZSA9PT0gZGF0YS5FcnJvckNvZGUgJiYgZGF0YS5FcnJvck1lc3NhZ2UgJiYgJycgIT09IGRhdGEuRXJyb3JNZXNzYWdlKSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihkYXRhLkVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5lcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncywgUGx1Z2luc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQYWNrYWdlc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMucGFja2FnZXMgPSBQYWNrYWdlU3RvcmUucGFja2FnZXM7XG5cdFx0dGhpcy5wYWNrYWdlc1JlYWwgPSBQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsO1xuXHRcdHRoaXMucGFja2FnZXNNYWluVXBkYXRhYmxlID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzTWFpblVwZGF0YWJsZTtcblxuXHRcdHRoaXMucGFja2FnZXNDdXJyZW50ID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICFpdGVtLmNvbXBhcmUpXG5cdFx0KTtcblx0XHR0aGlzLnBhY2thZ2VzQXZhaWxhYmxlRm9yVXBkYXRlID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8uZmlsdGVyKHRoaXMucGFja2FnZXMoKSwgKGl0ZW0pID0+IGl0ZW0gJiYgJycgIT09IGl0ZW0uaW5zdGFsbGVkICYmICEhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvckluc3RhbGxhdGlvbiA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnID09PSBpdGVtLmluc3RhbGxlZClcblx0XHQpO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMucGFja2FnZXNFcnJvcignJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGdldEFwcCgpLnJlbG9hZFBhY2thZ2VzTGlzdCgpO1xuXHR9XG5cblx0cmVxdWVzdEhlbHBlcihwYWNrYWdlVG9SZXF1ZXN0LCBpbnN0YWxsKSB7XG5cdFx0cmV0dXJuIChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzICE9PSByZXN1bHQgfHwgIWRhdGEgfHwgIWRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWNrYWdlc0Vycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihcblx0XHRcdFx0XHRcdGdldE5vdGlmaWNhdGlvbihpbnN0YWxsID8gTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSA6IE5vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdF8uZWFjaCh0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdGlmIChpdGVtICYmIHBhY2thZ2VUb1JlcXVlc3QgJiYgaXRlbS5sb2FkaW5nICYmIGl0ZW0ubG9hZGluZygpICYmIHBhY2thZ2VUb1JlcXVlc3QuZmlsZSA9PT0gaXRlbS5maWxlKSB7XG5cdFx0XHRcdFx0cGFja2FnZVRvUmVxdWVzdC5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0XHRpdGVtLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0ICYmIGRhdGEuUmVzdWx0LlJlbG9hZCkge1xuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZGVsZXRlUGFja2FnZShwYWNrYWdlVG9EZWxldGUpIHtcblx0XHRpZiAocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0XHRwYWNrYWdlVG9EZWxldGUubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlRGVsZXRlKHRoaXMucmVxdWVzdEhlbHBlcihwYWNrYWdlVG9EZWxldGUsIGZhbHNlKSwgcGFja2FnZVRvRGVsZXRlKTtcblx0XHR9XG5cdH1cblxuXHRpbnN0YWxsUGFja2FnZShwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0luc3RhbGwpIHtcblx0XHRcdHBhY2thZ2VUb0luc3RhbGwubG9hZGluZyh0cnVlKTtcblx0XHRcdFJlbW90ZS5wYWNrYWdlSW5zdGFsbCh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvSW5zdGFsbCwgdHJ1ZSksIHBhY2thZ2VUb0luc3RhbGwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBQYWNrYWdlc0FkbWluU2V0dGluZ3MsIFBhY2thZ2VzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgYXBwU2V0dGluZ3NHZXQsIHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcbmltcG9ydCBDb3JlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NvcmUnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmNsYXNzIEFib3V0QWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cdFx0dGhpcy5hY2Nlc3MgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvcmVBY2Nlc3MnKSk7XG5cdFx0dGhpcy5lcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29yZVJlYWwgPSBDb3JlU3RvcmUuY29yZVJlYWw7XG5cdFx0dGhpcy5jb3JlQ2hhbm5lbCA9IENvcmVTdG9yZS5jb3JlQ2hhbm5lbDtcblx0XHR0aGlzLmNvcmVUeXBlID0gQ29yZVN0b3JlLmNvcmVUeXBlO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IENvcmVTdG9yZS5jb3JlVXBkYXRhYmxlO1xuXHRcdHRoaXMuY29yZUFjY2VzcyA9IENvcmVTdG9yZS5jb3JlQWNjZXNzO1xuXHRcdHRoaXMuY29yZUNoZWNraW5nID0gQ29yZVN0b3JlLmNvcmVDaGVja2luZztcblx0XHR0aGlzLmNvcmVVcGRhdGluZyA9IENvcmVTdG9yZS5jb3JlVXBkYXRpbmc7XG5cdFx0dGhpcy5jb3JlV2FybmluZyA9IENvcmVTdG9yZS5jb3JlV2FybmluZztcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb24gPSBDb3JlU3RvcmUuY29yZVJlbW90ZVZlcnNpb247XG5cdFx0dGhpcy5jb3JlUmVtb3RlUmVsZWFzZSA9IENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmU7XG5cblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWSB8fCBBcHBTdG9yZS5jb21tdW5pdHkoKTtcblxuXHRcdHRoaXMuY29yZVJlbW90ZVZlcnNpb25IdG1sRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gaTE4bignVEFCX0FCT1VUL0hUTUxfTkVXX1ZFUlNJT04nLCB7ICdWRVJTSU9OJzogdGhpcy5jb3JlUmVtb3RlVmVyc2lvbigpIH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5zdGF0dXNUeXBlID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0bGV0IHR5cGUgPSAnJztcblx0XHRcdGNvbnN0IHZlcnNpb25Ub0NvbXBhcmUgPSB0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSgpLFxuXHRcdFx0XHRpc0NoZWNraW5nID0gdGhpcy5jb3JlQ2hlY2tpbmcoKSxcblx0XHRcdFx0aXNVcGRhdGluZyA9IHRoaXMuY29yZVVwZGF0aW5nKCksXG5cdFx0XHRcdGlzUmVhbCA9IHRoaXMuY29yZVJlYWwoKTtcblxuXHRcdFx0aWYgKGlzQ2hlY2tpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICdjaGVja2luZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzVXBkYXRpbmcpIHtcblx0XHRcdFx0dHlwZSA9ICd1cGRhdGluZyc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAwID09PSB2ZXJzaW9uVG9Db21wYXJlKSB7XG5cdFx0XHRcdHR5cGUgPSAndXAtdG8tZGF0ZSc7XG5cdFx0XHR9IGVsc2UgaWYgKGlzUmVhbCAmJiAtMSA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ2F2YWlsYWJsZSc7XG5cdFx0XHR9IGVsc2UgaWYgKCFpc1JlYWwpIHtcblx0XHRcdFx0dHlwZSA9ICdlcnJvcic7XG5cdFx0XHRcdHRoaXMuZXJyb3JEZXNjKCdDYW5ub3QgYWNjZXNzIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBtb21lbnQuJyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0eXBlO1xuXHRcdH0pO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRpZiAodGhpcy5hY2Nlc3MoKSAmJiAhdGhpcy5jb21tdW5pdHkpIHtcblx0XHRcdGdldEFwcCgpLnJlbG9hZENvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0aWYgKCF0aGlzLmNvcmVVcGRhdGluZygpICYmICF0aGlzLmNvbW11bml0eSkge1xuXHRcdFx0Z2V0QXBwKCkudXBkYXRlQ29yZURhdGEoKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgQWJvdXRBZG1pblNldHRpbmdzLCBBYm91dEFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5cbmltcG9ydCB7IGxlZnRQYW5lbERpc2FibGVkIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5pbXBvcnQgeyB2aWV3LCBWaWV3VHlwZSwgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudScsXG5cdHR5cGU6IFZpZXdUeXBlLkxlZnQsXG5cdHRlbXBsYXRlSUQ6ICdBZG1pbk1lbnUnXG59KVxuY2xhc3MgTWVudVNldHRpbmdzQWRtaW5WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0gez99IHNjcmVlblxuXHQgKi9cblx0Y29uc3RydWN0b3Ioc2NyZWVuKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubGVmdFBhbmVsRGlzYWJsZWQgPSBsZWZ0UGFuZWxEaXNhYmxlZDtcblxuXHRcdHRoaXMubWVudSA9IHNjcmVlbi5tZW51O1xuXHR9XG5cblx0bGluayhyb3V0ZSkge1xuXHRcdHJldHVybiAnIy8nICsgcm91dGU7XG5cdH1cblxuXHRvbkJ1aWxkKGRvbSkge1xuXHRcdGtleSgndXAsIGRvd24nLCBLZXlTdGF0ZS5TZXR0aW5ncywgc2V0dGluZ3NNZW51S2V5c0hhbmRsZXIoJCgnLmItYWRtaW4tbWVudSAuZS1pdGVtJywgZG9tKSkpO1xuXHR9XG59XG5cbmV4cG9ydCB7IE1lbnVTZXR0aW5nc0FkbWluVmlldywgTWVudVNldHRpbmdzQWRtaW5WaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuaW1wb3J0IFBsdWdpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9QbHVnaW4nO1xuaW1wb3J0IFBhY2thZ2VTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGFja2FnZSc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvUGFuZScsXG5cdHR5cGU6IFZpZXdUeXBlLlJpZ2h0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5QYW5lJ1xufSlcbmNsYXNzIFBhbmVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5hZG1pbkRvbWFpbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FkbWluRG9tYWluJykpO1xuXHRcdHRoaXMudmVyc2lvbiA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3ZlcnNpb24nKSk7XG5cblx0XHR0aGlzLmNhcGEgPSAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdQcmVtVHlwZScpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZO1xuXG5cdFx0dGhpcy5hZG1pbk1hbkxvYWRpbmcgPSBrby5jb21wdXRlZChcblx0XHRcdCgpID0+XG5cdFx0XHRcdCcwMDAnICE9PVxuXHRcdFx0XHRbXG5cdFx0XHRcdFx0RG9tYWluU3RvcmUuZG9tYWlucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKCkgPyAnMScgOiAnMCcsXG5cdFx0XHRcdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcoKSA/ICcxJyA6ICcwJ1xuXHRcdFx0XHRdLmpvaW4oJycpXG5cdFx0KTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nVmlzaWJpbGl0eSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoKCkgPT4gKHRoaXMuYWRtaW5NYW5Mb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpXG5cdFx0XHQuZXh0ZW5kKHsgcmF0ZUxpbWl0OiAzMDAgfSk7XG5cdH1cblxuXHRsb2dvdXRDbGljaygpIHtcblx0XHRSZW1vdGUuYWRtaW5Mb2dvdXQoKCkgPT4ge1xuXHRcdFx0Z2V0QXBwKCkubG9naW5BbmRMb2dvdXRSZWxvYWQodHJ1ZSwgdHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFuZVNldHRpbmdzQWRtaW5WaWV3LCBQYW5lU2V0dGluZ3NBZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgQWJzdHJhY3RTY3JlZW4gfSBmcm9tICdLbm9pbi9BYnN0cmFjdFNjcmVlbic7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgTG9naW5BZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL0xvZ2luJztcblxuY2xhc3MgTG9naW5BZG1pblNjcmVlbiBleHRlbmRzIEFic3RyYWN0U2NyZWVuIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoJ2xvZ2luJywgW0xvZ2luQWRtaW5WaWV3XSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0Z2V0QXBwKCkuc2V0V2luZG93VGl0bGUoJycpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5TY3JlZW4sIExvZ2luQWRtaW5TY3JlZW4gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBfIGZyb20gJ18nO1xuXG5pbXBvcnQgeyB0cmltLCB0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgJHdpbiB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcblxuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIGNvbW1hbmQsIFZpZXdUeXBlLCByb3V0ZU9mZiB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHZpZXcoe1xuXHRuYW1lOiAnVmlldy9BZG1pbi9Mb2dpbicsXG5cdHR5cGU6IFZpZXdUeXBlLkNlbnRlcixcblx0dGVtcGxhdGVJRDogJ0FkbWluTG9naW4nXG59KVxuY2xhc3MgTG9naW5BZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMubW9iaWxlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cdFx0dGhpcy5tb2JpbGVEZXZpY2UgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdtb2JpbGVEZXZpY2UnKTtcblxuXHRcdHRoaXMuaGlkZVN1Ym1pdEJ1dHRvbiA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2hpZGVTdWJtaXRCdXR0b24nKTtcblxuXHRcdHRoaXMubG9naW4gPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMubG9naW5FcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgJ2ZhbHNlVGltZW91dCc6IDUwMCB9KTtcblxuXHRcdHRoaXMubG9naW5Gb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtSGlkZGVuID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmZvcm1FcnJvciA9IGtvLmNvbXB1dGVkKCgpID0+IHRoaXMubG9naW5FcnJvckFuaW1hdGlvbigpIHx8IHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbigpKTtcblxuXHRcdHRoaXMubG9naW4uc3Vic2NyaWJlKCgpID0+IHRoaXMubG9naW5FcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5wYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYXNzd29yZEVycm9yKGZhbHNlKSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oISF2KSk7XG5cblx0XHR0aGlzLnBhc3N3b3JkRXJyb3Iuc3Vic2NyaWJlKCh2KSA9PiB7XG5cdFx0XHR0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oISF2KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc3VibWl0RXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiAhc2VsZi5zdWJtaXRSZXF1ZXN0KCkpXG5cdHN1Ym1pdENvbW1hbmQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKCk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3IoJycgPT09IHRyaW0odGhpcy5sb2dpbigpKSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yKCcnID09PSB0cmltKHRoaXMucGFzc3dvcmQoKSkpO1xuXG5cdFx0aWYgKHRoaXMubG9naW5FcnJvcigpIHx8IHRoaXMucGFzc3dvcmRFcnJvcigpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KHRydWUpO1xuXHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXG5cdFx0UmVtb3RlLmFkbWluTG9naW4oXG5cdFx0XHQoc1Jlc3VsdCwgb0RhdGEpID0+IHtcblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuYWN0aXZhdGUnKTtcblxuXHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiAnQWRtaW5Mb2dpbicgPT09IG9EYXRhLkFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAob0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24ob0RhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0UmVxdWVzdChmYWxzZSk7XG5cdFx0XHRcdFx0dGhpcy5zdWJtaXRFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLlVua25vd25FcnJvcikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5sb2dpbigpLFxuXHRcdFx0dGhpcy5wYXNzd29yZCgpXG5cdFx0KTtcblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMubG9naW5Gb2N1cyh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0fVxuXG5cdG9uSGlkZSgpIHtcblx0XHR0aGlzLmxvZ2luRm9jdXMoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHR0cmlnZ2VyQXV0b2NvbXBsZXRlSW5wdXRDaGFuZ2UodHJ1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKCkge1xuXHRcdHRoaXMuc3VibWl0Q29tbWFuZCgpO1xuXHR9XG59XG5cbmV4cG9ydCB7IExvZ2luQWRtaW5WaWV3LCBMb2dpbkFkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgYm9vdHN0cmFwIGZyb20gJ2Jvb3RzdHJhcCc7XG5pbXBvcnQgQXBwIGZyb20gJ0FwcC9BZG1pbic7XG5cbmJvb3RzdHJhcChBcHApO1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGJNb2JpbGVEZXZpY2UgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW5BbGlhcydcbn0pXG5jbGFzcyBEb21haW5BbGlhc1BvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5zYXZpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLm5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcyA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5kb21haW5zID0gRG9tYWluU3RvcmUuZG9tYWluc1dpdGhvdXRBbGlhc2VzO1xuXG5cdFx0dGhpcy5kb21haW5zT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmRvbWFpbnMoKSwgKGl0ZW0pID0+ICh7IG9wdFZhbHVlOiBpdGVtLm5hbWUsIG9wdFRleHQ6IGl0ZW0ubmFtZSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5jYW5CZVNhdmVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMuc2F2aW5nKCkgJiYgJycgIT09IHRoaXMubmFtZSgpICYmICcnICE9PSB0aGlzLmFsaWFzKCkpO1xuXG5cdFx0dGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVTYXZlZCgpKVxuXHRjcmVhdGVDb21tYW5kKCkge1xuXHRcdHRoaXMuc2F2aW5nKHRydWUpO1xuXHRcdFJlbW90ZS5jcmVhdGVEb21haW5BbGlhcyh0aGlzLm9uRG9tYWluQWxpYXNDcmVhdGVPclNhdmVSZXNwb25zZSwgdGhpcy5uYW1lKCksIHRoaXMuYWxpYXMoKSk7XG5cdH1cblxuXHRvbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSkge1xuXHRcdFx0aWYgKGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0XHRcdFx0dGhpcy5jbG9zZUNvbW1hbmQoKTtcblx0XHRcdH0gZWxzZSBpZiAoTm90aWZpY2F0aW9uLkRvbWFpbkFscmVhZHlFeGlzdHMgPT09IGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy5jbGVhckZvcm0oKTtcblx0fVxuXG5cdG9uU2hvd1dpdGhEZWxheSgpIHtcblx0XHRpZiAoJycgPT09IHRoaXMubmFtZSgpICYmICFiTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHR0aGlzLm5hbWUuZm9jdXNlZCh0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhckZvcm0oKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IoJycpO1xuXG5cdFx0dGhpcy5uYW1lKCcnKTtcblx0XHR0aGlzLm5hbWUuZm9jdXNlZChmYWxzZSk7XG5cblx0XHR0aGlzLmFsaWFzKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5BbGlhc1BvcHVwVmlldywgRG9tYWluQWxpYXNQb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBLZXlTdGF0ZSwgTWFnaWNzLCBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGlzTm9uRW1wdHlBcnJheSwgZGVsZWdhdGVSdW4gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uLCBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQsIGlzUG9wdXBWaXNpYmxlLCBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL1BsdWdpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNQbHVnaW4nXG59KVxuY2xhc3MgUGx1Z2luUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSA9IF8uYmluZCh0aGlzLm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSwgdGhpcyk7XG5cblx0XHR0aGlzLnNhdmVFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5yZWFkbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY29uZmlndXJlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmhhc1JlYWRtZSA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnJlYWRtZSgpKTtcblx0XHR0aGlzLmhhc0NvbmZpZ3VyYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgdGhpcy5jb25maWd1cmVzKCkubGVuZ3RoKTtcblxuXHRcdHRoaXMucmVhZG1lUG9wb3ZlckNvbmYgPSB7XG5cdFx0XHQncGxhY2VtZW50JzogJ3JpZ2h0Jyxcblx0XHRcdCd0cmlnZ2VyJzogJ2hvdmVyJyxcblx0XHRcdCd0aXRsZSc6IGkxOG4oJ1BPUFVQU19QTFVHSU4vVE9PTFRJUF9BQk9VVF9USVRMRScpLFxuXHRcdFx0J2NvbnRhaW5lcic6ICdib2R5Jyxcblx0XHRcdCdodG1sJzogdHJ1ZSxcblx0XHRcdCdjb250ZW50JzogKCkgPT4gYDxwcmU+JHt0aGlzLnJlYWRtZSgpfTwvcHJlPmBcblx0XHR9O1xuXG5cdFx0dGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyA9IHRydWU7XG5cdFx0dGhpcy5zRGVmYXVsdEtleVNjb3BlID0gS2V5U3RhdGUuQWxsO1xuXG5cdFx0dGhpcy50cnlUb0Nsb3NlUG9wdXAgPSBfLmRlYm91bmNlKF8uYmluZCh0aGlzLnRyeVRvQ2xvc2VQb3B1cCwgdGhpcyksIE1hZ2ljcy5UaW1lMjAwbXMpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuaGFzQ29uZmlndXJhdGlvbigpKVxuXHRzYXZlQ29tbWFuZCgpIHtcblx0XHRjb25zdCBsaXN0ID0ge307XG5cdFx0bGlzdC5OYW1lID0gdGhpcy5uYW1lKCk7XG5cblx0XHRfLmVhY2godGhpcy5jb25maWd1cmVzKCksIChvSXRlbSkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gb0l0ZW0udmFsdWUoKTtcblx0XHRcdGlmIChmYWxzZSA9PT0gdmFsdWUgfHwgdHJ1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA/ICcxJyA6ICcwJztcblx0XHRcdH1cblx0XHRcdGxpc3RbJ18nICsgb0l0ZW0uTmFtZV0gPSB2YWx1ZTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRSZW1vdGUucGx1Z2luU2V0dGluZ3NVcGRhdGUodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIGxpc3QpO1xuXHR9XG5cblx0b25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0dGhpcy5jYW5jZWxDb21tYW5kKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2ZUVycm9yKCcnKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihkYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zYXZlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KG9QbHVnaW4pIHtcblx0XHR0aGlzLm5hbWUoKTtcblx0XHR0aGlzLnJlYWRtZSgpO1xuXHRcdHRoaXMuY29uZmlndXJlcyhbXSk7XG5cblx0XHRpZiAob1BsdWdpbikge1xuXHRcdFx0dGhpcy5uYW1lKG9QbHVnaW4uTmFtZSk7XG5cdFx0XHR0aGlzLnJlYWRtZShvUGx1Z2luLlJlYWRtZSk7XG5cblx0XHRcdGNvbnN0IGNvbmZpZyA9IG9QbHVnaW4uQ29uZmlnO1xuXHRcdFx0aWYgKGlzTm9uRW1wdHlBcnJheShjb25maWcpKSB7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJlcyhcblx0XHRcdFx0XHRfLm1hcChjb25maWcsIChpdGVtKSA9PiAoe1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoga28ub2JzZXJ2YWJsZShpdGVtWzBdKSxcblx0XHRcdFx0XHRcdCdwbGFjZWhvbGRlcic6IGtvLm9ic2VydmFibGUoaXRlbVs2XSksXG5cdFx0XHRcdFx0XHQnTmFtZSc6IGl0ZW1bMV0sXG5cdFx0XHRcdFx0XHQnVHlwZSc6IGl0ZW1bMl0sXG5cdFx0XHRcdFx0XHQnTGFiZWwnOiBpdGVtWzNdLFxuXHRcdFx0XHRcdFx0J0RlZmF1bHQnOiBpdGVtWzRdLFxuXHRcdFx0XHRcdFx0J0Rlc2MnOiBpdGVtWzVdXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dHJ5VG9DbG9zZVBvcHVwKCkge1xuXHRcdGNvbnN0IFBvcHVwc0Fza1ZpZXdNb2RlbCA9IHJlcXVpcmUoJ1ZpZXcvUG9wdXAvQXNrJyk7XG5cdFx0aWYgKCFpc1BvcHVwVmlzaWJsZShQb3B1cHNBc2tWaWV3TW9kZWwpKSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAoUG9wdXBzQXNrVmlld01vZGVsLCBbXG5cdFx0XHRcdGkxOG4oJ1BPUFVQU19BU0svREVTQ19XQU5UX0NMT1NFX1RISVNfV0lORE9XJyksXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdF0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0a2V5KCdlc2MnLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwKCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBQbHVnaW5Qb3B1cFZpZXcsIFBsdWdpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgdHJpbSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuLCB0cmlnZ2VyIGFzIHRyYW5zbGF0b3JUcmlnZ2VyIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcbmltcG9ydCBBcHBTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQXBwJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY2xhc3MgQnJhbmRpbmdBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jYXBhID0gQXBwU3RvcmUucHJlbTtcblxuXHRcdHRoaXMudGl0bGUgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdUaXRsZScpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9hZGluZ0Rlc2MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2FkaW5nRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmZhdmljb25VcmwgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdGYXZpY29uVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkxvZ28nKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luQmFja2dyb3VuZCcpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ28gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyTG9nbycpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ29NZXNzYWdlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29NZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VySWZyYW1lTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJJZnJhbWVNZXNzYWdlJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyTG9nb1RpdGxlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ29UaXRsZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5EZXNjcmlwdGlvbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luRGVzY3JpcHRpb24nKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luQ3NzID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5Dc3MnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJDc3MgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VyQ3NzJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZVVybCA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1dlbGNvbWVQYWdlVXJsJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZURpc3BsYXkgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdXZWxjb21lUGFnZURpc3BsYXknKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLndlbGNvbWVQYWdlRGlzcGxheS5vcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0dHJhbnNsYXRvclRyaWdnZXIoKTtcblx0XHRcdHJldHVybiBbXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdub25lJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9OT05FJykgfSxcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ29uY2UnLCBvcHRUZXh0OiBpMThuKCdUQUJfQlJBTkRJTkcvT1BUSU9OX1dFTENPTUVfUEFHRV9ESVNQTEFZX09OQ0UnKSB9LFxuXHRcdFx0XHR7IG9wdFZhbHVlOiAnYWx3YXlzJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9BTFdBWVMnKSB9XG5cdFx0XHRdO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5jb21tdW5pdHkgPSBSTF9DT01NVU5JVFkgfHwgQXBwU3RvcmUuY29tbXVuaXR5KCk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnRpdGxlLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMubG9hZGluZ0Rlc2MudHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYzID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYXZpY29uVXJsLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLnRpdGxlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdUaXRsZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubG9hZGluZ0Rlc2Muc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0J0xvYWRpbmdEZXNjcmlwdGlvbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZmF2aWNvblVybC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnRmF2aWNvblVybCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBCcmFuZGluZ0FkbWluU2V0dGluZ3MsIEJyYW5kaW5nQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iXSwic291cmNlUm9vdCI6IiJ9 diff --git a/app/rainloop/v/1.15.0/static/js/boot.js b/app/rainloop/v/1.15.0/static/js/boot.js deleted file mode 100644 index feb6c7d085431fda41bac6fc062bd41745546093..0000000000000000000000000000000000000000 --- a/app/rainloop/v/1.15.0/static/js/boot.js +++ /dev/null @@ -1,8421 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = "rainloop/v/0.0.0/static/js/"; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 496); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */, -/* 1 */, -/* 2 */, -/* 3 */, -/* 4 */ -/*!*************************!*\ - !*** external "window" ***! - \*************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports) { - -module.exports = window; - -/***/ }), -/* 5 */, -/* 6 */, -/* 7 */, -/* 8 */, -/* 9 */, -/* 10 */, -/* 11 */, -/* 12 */, -/* 13 */, -/* 14 */, -/* 15 */, -/* 16 */, -/* 17 */, -/* 18 */, -/* 19 */, -/* 20 */, -/* 21 */, -/* 22 */, -/* 23 */, -/* 24 */, -/* 25 */, -/* 26 */, -/* 27 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { - return it && it.Math == Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == 'object' && globalThis) || - check(typeof window == 'object' && window) || - check(typeof self == 'object' && self) || - check(typeof global == 'object' && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) - -/***/ }), -/* 28 */, -/* 29 */, -/* 30 */, -/* 31 */, -/* 32 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/well-known-symbol.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var shared = __webpack_require__(/*! ../internals/shared */ 128); -var has = __webpack_require__(/*! ../internals/has */ 42); -var uid = __webpack_require__(/*! ../internals/uid */ 129); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); -var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 185); - -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]; -}; - - -/***/ }), -/* 33 */, -/* 34 */, -/* 35 */, -/* 36 */ -/*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - -/***/ }), -/* 37 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/an-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -module.exports = function (it) { - if (!isObject(it)) { - throw TypeError(String(it) + ' is not an object'); - } return it; -}; - - -/***/ }), -/* 38 */, -/* 39 */, -/* 40 */, -/* 41 */, -/* 42 */ -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/has.js ***! - \***********************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; - -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 43 */, -/* 44 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), -/* 45 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 50); -var exec = __webpack_require__(/*! ../internals/regexp-exec */ 110); - -$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { - exec: exec -}); - - -/***/ }), -/* 46 */, -/* 47 */ -/*!*******************************************************!*\ - !*** ./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 */ 36); - -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; -}); - - -/***/ }), -/* 48 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); - -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 49 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 50 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/export.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 181); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); - -/* - 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); - } -}; - - -/***/ }), -/* 51 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/modules/es.function.name.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 52).f; - -var FunctionPrototype = Function.prototype; -var FunctionPrototypeToString = FunctionPrototype.toString; -var nameRE = /^\s*function ([^ (]*)/; -var NAME = 'name'; - -// Function instances `.name` property -// https://tc39.github.io/ecma262/#sec-function-instances-name -if (DESCRIPTORS && !(NAME in FunctionPrototype)) { - defineProperty(FunctionPrototype, NAME, { - configurable: true, - get: function () { - try { - return FunctionPrototypeToString.call(this).match(nameRE)[1]; - } catch (error) { - return ''; - } - } - }); -} - - -/***/ }), -/* 52 */ -/*!******************************************************************!*\ - !*** ./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 */ 47); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); - -var nativeDefineProperty = Object.defineProperty; - -// `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty -exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), -/* 53 */ -/*!****************************************************!*\ - !*** ./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 */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); -var has = __webpack_require__(/*! ../internals/has */ 42); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); - -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; - if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); - enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); - } - if (O === global) { - if (simple) O[key] = value; - else setGlobal(key, value); - return; - } else if (!unsafe) { - delete O[key]; - } else if (!noTargetGet && O[key]) { - simple = true; - } - if (simple) O[key] = value; - else 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); -}); - - -/***/ }), -/* 54 */, -/* 55 */, -/* 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.github.io/ecma262/#sec-requireobjectcoercible -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), -/* 57 */ -/*!***********************************************************!*\ - !*** ./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 */ 135); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var toObject = __webpack_require__(/*! ../internals/to-object */ 120); -var toLength = __webpack_require__(/*! ../internals/to-length */ 73); -var toInteger = __webpack_require__(/*! ../internals/to-integer */ 81); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); -var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 154); -var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 136); - -var max = Math.max; -var min = Math.min; -var floor = Math.floor; -var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; -var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; - -var maybeToString = function (it) { - return it === undefined ? it : String(it); -}; - -// @@replace logic -fixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) { - var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE; - var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0; - var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; - - return [ - // `String.prototype.replace` method - // https://tc39.github.io/ecma262/#sec-string.prototype.replace - function replace(searchValue, replaceValue) { - var O = requireObjectCoercible(this); - var replacer = searchValue == undefined ? undefined : searchValue[REPLACE]; - return replacer !== undefined - ? replacer.call(searchValue, O, replaceValue) - : nativeReplace.call(String(O), searchValue, replaceValue); - }, - // `RegExp.prototype[@@replace]` method - // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace - function (regexp, replaceValue) { - 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); - } - ]; - - // https://tc39.github.io/ecma262/#sec-getsubstitution - function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { - var tailPos = position + matched.length; - var m = captures.length; - var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; - if (namedCaptures !== undefined) { - namedCaptures = toObject(namedCaptures); - symbols = SUBSTITUTION_SYMBOLS; - } - return nativeReplace.call(replacement, symbols, function (match, ch) { - var capture; - switch (ch.charAt(0)) { - case '$': return '$'; - case '&': return matched; - case '`': return str.slice(0, position); - case "'": return str.slice(tailPos); - case '<': - capture = namedCaptures[ch.slice(1, -1)]; - break; - default: // \d\d? - var n = +ch; - if (n === 0) return match; - if (n > m) { - var f = floor(n / 10); - if (f === 0) return match; - if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); - return match; - } - capture = captures[n - 1]; - } - return capture === undefined ? '' : capture; - }); - } -}); - - -/***/ }), -/* 58 */, -/* 59 */ -/*!********************************************************!*\ - !*** ./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 */ 150); -var global = __webpack_require__(/*! ../internals/global */ 27); - -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]; -}; - - -/***/ }), -/* 60 */, -/* 61 */, -/* 62 */, -/* 63 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.object.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 95); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var toString = __webpack_require__(/*! ../internals/object-to-string */ 186); - -// `Object.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -if (!TO_STRING_TAG_SUPPORT) { - redefine(Object.prototype, 'toString', toString, { unsafe: true }); -} - - -/***/ }), -/* 64 */, -/* 65 */, -/* 66 */, -/* 67 */ -/*!******************************************************!*\ - !*** ./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; -}; - - -/***/ }), -/* 68 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/web.timers.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ 50); -var global = __webpack_require__(/*! ../internals/global */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); - -var slice = [].slice; -var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check - -var wrap = function (scheduler) { - return function (handler, timeout /* , ...arguments */) { - var boundArgs = arguments.length > 2; - var args = boundArgs ? slice.call(arguments, 2) : undefined; - return scheduler(boundArgs ? function () { - // eslint-disable-next-line no-new-func - (typeof handler == 'function' ? handler : Function(handler)).apply(this, args); - } : handler, timeout); - }; -}; - -// ie9- setTimeout & setInterval additional parameters fix -// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers -$({ global: true, bind: true, forced: MSIE }, { - // `setTimeout` method - // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout - setTimeout: wrap(global.setTimeout), - // `setInterval` method - // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval - setInterval: wrap(global.setInterval) -}); - - -/***/ }), -/* 69 */, -/* 70 */, -/* 71 */, -/* 72 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-indexed-object.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 119); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); - -module.exports = function (it) { - return IndexedObject(requireObjectCoercible(it)); -}; - - -/***/ }), -/* 73 */ -/*!*****************************************************!*\ - !*** ./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 */ 81); - -var min = Math.min; - -// `ToLength` abstract operation -// https://tc39.github.io/ecma262/#sec-tolength -module.exports = function (argument) { - return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - - -/***/ }), -/* 74 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/iterators.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 75 */, -/* 76 */, -/* 77 */, -/* 78 */, -/* 79 */, -/* 80 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), -/* 81 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/to-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var ceil = Math.ceil; -var floor = Math.floor; - -// `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger -module.exports = function (argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); -}; - - -/***/ }), -/* 82 */, -/* 83 */, -/* 84 */, -/* 85 */, -/* 86 */, -/* 87 */, -/* 88 */ -/*!**********************************************************!*\ - !*** ./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 */ 180); -var global = __webpack_require__(/*! ../internals/global */ 27); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); -var objectHas = __webpack_require__(/*! ../internals/has */ 42); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 107); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); - -var WeakMap = global.WeakMap; -var set, get, has; - -var enforce = function (it) { - return has(it) ? get(it) : set(it, {}); -}; - -var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject(it) || (state = get(it)).type !== TYPE) { - throw TypeError('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; -}; - -if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; - set = function (it, metadata) { - wmset.call(store, it, metadata); - return metadata; - }; - get = function (it) { - return wmget.call(store, it) || {}; - }; - has = function (it) { - return wmhas.call(store, it); - }; -} else { - var STATE = sharedKey('state'); - hiddenKeys[STATE] = true; - set = function (it, metadata) { - 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 -}; - - -/***/ }), -/* 89 */, -/* 90 */, -/* 91 */ -/*!******************************************************************************!*\ - !*** ./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 */ 47); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 167); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 92); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 125); -var has = __webpack_require__(/*! ../internals/has */ 42); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 126); - -var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor -exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 92 */ -/*!**********************************************************************!*\ - !*** ./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 - }; -}; - - -/***/ }), -/* 93 */ -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); - -module.exports = function (key, value) { - try { - createNonEnumerableProperty(global, key, value); - } catch (error) { - global[key] = value; - } return value; -}; - - -/***/ }), -/* 94 */ -/*!**********************************************************!*\ - !*** ./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 */ 127); - -var functionToString = Function.toString; - -// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper -if (typeof store.inspectSource != 'function') { - store.inspectSource = function (it) { - return functionToString.call(it); - }; -} - -module.exports = store.inspectSource; - - -/***/ }), -/* 95 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; - -module.exports = String(test) === '[object z]'; - - -/***/ }), -/* 96 */, -/* 97 */, -/* 98 */, -/* 99 */ -/*!************************************!*\ - !*** external "window.progressJs" ***! - \************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports) { - -module.exports = window.progressJs; - -/***/ }), -/* 100 */, -/* 101 */, -/* 102 */ -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/document-create-element.js ***! - \*******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -var document = global.document; -// typeof document.createElement is 'object' in old IE -var EXISTS = isObject(document) && isObject(document.createElement); - -module.exports = function (it) { - return EXISTS ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 103 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/hidden-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), -/* 104 */ -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/function-bind-context.js ***! - \*****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); - -// optional / simple context binding -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 0: return function () { - return fn.call(that); - }; - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 105 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/engine-user-agent.js ***! - \*************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); - -module.exports = getBuiltIn('navigator', 'userAgent') || ''; - - -/***/ }), -/* 106 */ -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/new-promise-capability.js ***! - \******************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); - -var PromiseCapability = function (C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction(resolve); - this.reject = aFunction(reject); -}; - -// 25.4.1.5 NewPromiseCapability(C) -module.exports.f = function (C) { - return new PromiseCapability(C); -}; - - -/***/ }), -/* 107 */ -/*!******************************************************!*\ - !*** ./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 */ 128); -var uid = __webpack_require__(/*! ../internals/uid */ 129); - -var keys = shared('keys'); - -module.exports = function (key) { - return keys[key] || (keys[key] = uid(key)); -}; - - -/***/ }), -/* 108 */ -/*!*********************************************************!*\ - !*** ./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' -]; - - -/***/ }), -/* 109 */ -/*!*************************************************************!*\ - !*** ./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 */ 52).f; -var has = __webpack_require__(/*! ../internals/has */ 42); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - -module.exports = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } -}; - - -/***/ }), -/* 110 */ -/*!*******************************************************!*\ - !*** ./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 */ 173); -var stickyHelpers = __webpack_require__(/*! ./regexp-sticky-helpers */ 236); - -var nativeExec = RegExp.prototype.exec; -// This always refers to the native implementation, because the -// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, -// which loads this file before patching the method. -var nativeReplace = String.prototype.replace; - -var patchedExec = nativeExec; - -var UPDATES_LAST_INDEX_WRONG = (function () { - var re1 = /a/; - var re2 = /b*/g; - nativeExec.call(re1, 'a'); - nativeExec.call(re2, 'a'); - return re1.lastIndex !== 0 || re2.lastIndex !== 0; -})(); - -var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET; - -// nonparticipating capturing group, copied from es5-shim's String#split patch. -var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - -var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || 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; - - -/***/ }), -/* 111 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var flags = __webpack_require__(/*! ../internals/regexp-flags */ 173); - -var TO_STRING = 'toString'; -var RegExpPrototype = RegExp.prototype; -var nativeToString = RegExpPrototype[TO_STRING]; - -var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; }); -// FF44- RegExp#toString has a wrong name -var INCORRECT_NAME = nativeToString.name != TO_STRING; - -// `RegExp.prototype.toString` method -// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring -if (NOT_GENERIC || INCORRECT_NAME) { - redefine(RegExp.prototype, TO_STRING, function toString() { - var R = anObject(this); - var p = String(R.source); - var rf = R.flags; - var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf); - return '/' + p + '/' + f; - }, { unsafe: true }); -} - - -/***/ }), -/* 112 */, -/* 113 */ -/*!*****************************!*\ - !*** ./dev/Common/Jassl.js ***! - \*****************************/ -/*! exports provided: jassl */ -/*! exports used: jassl */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return jassl; }); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.promise */ 121); -/* harmony import */ var core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); - - - // let rainloopCaches = window.caches && window.caches.open ? window.caches : null; - -/** - * @param {src} src - * @param {boolean} async = false - * @returns {Promise} - */ - -function jassl(src, async) { - if (async === void 0) { - async = false; - } - - if (!window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise || !window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise.all) { - throw new Error('Promises are not available your environment.'); - } - - if (!src) { - throw new Error('src should not be empty.'); - } - - return new window__WEBPACK_IMPORTED_MODULE_2___default.a.Promise(function (resolve, reject) { - var element = window__WEBPACK_IMPORTED_MODULE_2___default.a.document.createElement('script'); - - element.onload = function () { - resolve(src); - }; - - element.onerror = function () { - reject(new Error(src)); - }; - - element.async = true === async; - element.src = src; - window__WEBPACK_IMPORTED_MODULE_2___default.a.document.body.appendChild(element); - }) - /* .then((s) => { - const found = s && rainloopCaches ? s.match(/rainloop\/v\/([^\/]+)\/static\//) : null; - if (found && found[1]) - { - rainloopCaches.open('rainloop-offline-' + found[1]).then( - (cache) => cache.add(s) - ).catch(() => { - rainloopCaches = null; - }); - } - return s; - })*/ - ; -} - -/***/ }), -/* 114 */, -/* 115 */, -/* 116 */, -/* 117 */, -/* 118 */, -/* 119 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/indexed-object.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); - -var split = ''.split; - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -module.exports = fails(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins - return !Object('z').propertyIsEnumerable(0); -}) ? function (it) { - return classof(it) == 'String' ? split.call(it, '') : Object(it); -} : Object; - - -/***/ }), -/* 120 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 56); - -// `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject -module.exports = function (argument) { - return Object(requireObjectCoercible(argument)); -}; - - -/***/ }), -/* 121 */ -/*!****************************************************!*\ - !*** ./node_modules/core-js/modules/es.promise.js ***! - \****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ 50); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 80); -var global = __webpack_require__(/*! ../internals/global */ 27); -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var NativePromise = __webpack_require__(/*! ../internals/native-promise-constructor */ 171); -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ 189); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 109); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ 190); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ 191); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); -var iterate = __webpack_require__(/*! ../internals/iterate */ 143); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 195); -var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 144); -var task = __webpack_require__(/*! ../internals/task */ 133).set; -var microtask = __webpack_require__(/*! ../internals/microtask */ 196); -var promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ 172); -var hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ 197); -var newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ 106); -var perform = __webpack_require__(/*! ../internals/perform */ 145); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 88); -var isForced = __webpack_require__(/*! ../internals/is-forced */ 130); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ 153); - -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 IS_NODE = classof(process) == 'process'; -var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent); -var UNHANDLED_REJECTION = 'unhandledrejection'; -var REJECTION_HANDLED = 'rejectionhandled'; -var PENDING = 0; -var FULFILLED = 1; -var REJECTED = 2; -var HANDLED = 1; -var UNHANDLED = 2; -var Internal, OwnPromiseCapability, PromiseWrapper, 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 && typeof PromiseRejectionEvent != 'function') return true; - } - // We need Promise#finally in the pure version for preventing prototype pollution - if (IS_PURE && !PromiseConstructor.prototype['finally']) return true; - // We can't use @@species feature detection in V8 since it causes - // deoptimization and performance degradation - // https://github.com/zloirock/core-js/issues/679 - if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false; - // Detect correctness of subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var FakePromise = function (exec) { - exec(function () { /* empty */ }, function () { /* empty */ }); - }; - var constructor = promise.constructor = {}; - constructor[SPECIES] = FakePromise; - return !(promise.then(function () { /* empty */ }) instanceof FakePromise); -}); - -var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { - PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); -}); - -// helpers -var isThenable = function (it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; -}; - -var notify = function (promise, state, isReject) { - if (state.notified) return; - state.notified = true; - var chain = state.reactions; - microtask(function () { - var value = state.value; - var ok = state.state == FULFILLED; - var index = 0; - // variable length - can't use forEach - while (chain.length > index) { - var reaction = chain[index++]; - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - try { - if (handler) { - if (!ok) { - if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); - state.rejection = HANDLED; - } - if (handler === true) result = value; - else { - if (domain) domain.enter(); - result = handler(value); // can throw - if (domain) { - domain.exit(); - exited = true; - } - } - if (result === reaction.promise) { - reject(TypeError('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (error) { - if (domain && !exited) domain.exit(); - reject(error); - } - } - state.reactions = []; - state.notified = false; - if (isReject && !state.rejection) onUnhandled(promise, state); - }); -}; - -var dispatchEvent = function (name, promise, reason) { - var event, handler; - if (DISPATCH_EVENT) { - event = document.createEvent('Event'); - event.promise = promise; - event.reason = reason; - event.initEvent(name, false, true); - global.dispatchEvent(event); - } else event = { promise: promise, reason: reason }; - if (handler = global['on' + name]) handler(event); - else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); -}; - -var onUnhandled = function (promise, state) { - task.call(global, function () { - var value = state.value; - var IS_UNHANDLED = isUnhandled(state); - var result; - if (IS_UNHANDLED) { - result = perform(function () { - if (IS_NODE) { - process.emit('unhandledRejection', value, promise); - } else dispatchEvent(UNHANDLED_REJECTION, promise, value); - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED; - if (result.error) throw result.value; - } - }); -}; - -var isUnhandled = function (state) { - return state.rejection !== HANDLED && !state.parent; -}; - -var onHandleUnhandled = function (promise, state) { - task.call(global, function () { - if (IS_NODE) { - process.emit('rejectionHandled', promise); - } else dispatchEvent(REJECTION_HANDLED, promise, state.value); - }); -}; - -var bind = function (fn, promise, state, unwrap) { - return function (value) { - fn(promise, state, value, unwrap); - }; -}; - -var internalReject = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - state.value = value; - state.state = REJECTED; - notify(promise, state, true); -}; - -var internalResolve = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - try { - if (promise === value) throw TypeError("Promise can't be resolved itself"); - var then = isThenable(value); - if (then) { - microtask(function () { - var wrapper = { done: false }; - try { - then.call(value, - bind(internalResolve, promise, wrapper, state), - bind(internalReject, promise, wrapper, state) - ); - } catch (error) { - internalReject(promise, wrapper, error, state); - } - }); - } else { - state.value = value; - state.state = FULFILLED; - notify(promise, state, false); - } - } catch (error) { - internalReject(promise, { done: false }, error, state); - } -}; - -// constructor polyfill -if (FORCED) { - // 25.4.3.1 Promise(executor) - PromiseConstructor = function Promise(executor) { - anInstance(this, PromiseConstructor, PROMISE); - aFunction(executor); - Internal.call(this); - var state = getInternalState(this); - try { - executor(bind(internalResolve, this, state), bind(internalReject, this, state)); - } catch (error) { - internalReject(this, state, error); - } - }; - // eslint-disable-next-line no-unused-vars - Internal = function Promise(executor) { - setInternalState(this, { - type: PROMISE, - done: false, - notified: false, - parent: false, - reactions: [], - rejection: false, - state: PENDING, - value: undefined - }); - }; - Internal.prototype = redefineAll(PromiseConstructor.prototype, { - // `Promise.prototype.then` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.then - then: function then(onFulfilled, onRejected) { - var state = getInternalPromiseState(this); - var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE ? process.domain : undefined; - state.parent = true; - state.reactions.push(reaction); - if (state.state != PENDING) notify(this, state, false); - return reaction.promise; - }, - // `Promise.prototype.catch` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.catch - 'catch': function (onRejected) { - return this.then(undefined, onRejected); - } - }); - OwnPromiseCapability = function () { - var promise = new Internal(); - var state = getInternalState(promise); - this.promise = promise; - this.resolve = bind(internalResolve, promise, state); - this.reject = bind(internalReject, promise, state); - }; - newPromiseCapabilityModule.f = newPromiseCapability = function (C) { - return C === PromiseConstructor || C === PromiseWrapper - ? new OwnPromiseCapability(C) - : newGenericPromiseCapability(C); - }; - - 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.github.io/ecma262/#sec-promise.reject - reject: function reject(r) { - var capability = newPromiseCapability(this); - capability.reject.call(undefined, r); - return capability.promise; - } -}); - -$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, { - // `Promise.resolve` method - // https://tc39.github.io/ecma262/#sec-promise.resolve - resolve: function resolve(x) { - return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x); - } -}); - -$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { - // `Promise.all` method - // https://tc39.github.io/ecma262/#sec-promise.all - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - var values = []; - var counter = 0; - var remaining = 1; - iterate(iterable, function (promise) { - var index = counter++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - $promiseResolve.call(C, promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.error) reject(result.value); - return capability.promise; - }, - // `Promise.race` method - // https://tc39.github.io/ecma262/#sec-promise.race - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability(C); - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction(C.resolve); - iterate(iterable, function (promise) { - $promiseResolve.call(C, promise).then(capability.resolve, reject); - }); - }); - if (result.error) reject(result.value); - return capability.promise; - } -}); - - -/***/ }), -/* 122 */, -/* 123 */, -/* 124 */ -/*!***********************************!*\ - !*** (webpack)/buildin/global.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || new Function("return this")(); -} catch (e) { - // This works if the window reference is available - if (typeof window === "object") g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; - - -/***/ }), -/* 125 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/to-primitive.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); - -// `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (input, PREFERRED_STRING) { - if (!isObject(input)) return input; - var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 126 */ -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! - \**********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); - -// Thank's IE8 for his funny defineProperty -module.exports = !DESCRIPTORS && !fails(function () { - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; -}); - - -/***/ }), -/* 127 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/shared-store.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ 93); - -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); - -module.exports = store; - - -/***/ }), -/* 128 */ -/*!**************************************************!*\ - !*** ./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 */ 80); -var store = __webpack_require__(/*! ../internals/shared-store */ 127); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.6.4', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), -/* 129 */ -/*!***********************************************!*\ - !*** ./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); -}; - - -/***/ }), -/* 130 */ -/*!*****************************************************!*\ - !*** ./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 */ 36); - -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; - - -/***/ }), -/* 131 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/native-symbol.js ***! - \*********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ 36); - -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion - // eslint-disable-next-line no-undef - return !String(Symbol()); -}); - - -/***/ }), -/* 132 */ -/*!***************************************************!*\ - !*** ./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 */ 95); -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 49); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = 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; -}; - - -/***/ }), -/* 133 */ -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/task.js ***! - \************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); -var html = __webpack_require__(/*! ../internals/html */ 142); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ 102); -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); - -var location = global.location; -var set = global.setImmediate; -var clear = global.clearImmediate; -var process = global.process; -var MessageChannel = global.MessageChannel; -var Dispatch = global.Dispatch; -var counter = 0; -var queue = {}; -var ONREADYSTATECHANGE = 'onreadystatechange'; -var defer, channel, port; - -var run = function (id) { - // eslint-disable-next-line no-prototype-builtins - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } -}; - -var runner = function (id) { - return function () { - run(id); - }; -}; - -var listener = function (event) { - run(event.data); -}; - -var post = function (id) { - // old engines have not location.origin - global.postMessage(id + '', location.protocol + '//' + location.host); -}; - -// Node.js 0.9+ & IE10+ has setImmediate, otherwise: -if (!set || !clear) { - set = function setImmediate(fn) { - var args = []; - var i = 1; - while (arguments.length > i) args.push(arguments[i++]); - queue[++counter] = function () { - // eslint-disable-next-line no-new-func - (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); - }; - defer(counter); - return counter; - }; - clear = function clearImmediate(id) { - delete queue[id]; - }; - // Node.js 0.8- - if (classof(process) == 'process') { - defer = function (id) { - process.nextTick(runner(id)); - }; - // Sphere (JS game engine) Dispatch API - } else if (Dispatch && Dispatch.now) { - defer = function (id) { - Dispatch.now(runner(id)); - }; - // Browsers with MessageChannel, includes WebWorkers - // 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 && !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 -}; - - -/***/ }), -/* 134 */ -/*!*********************************************************!*\ - !*** ./node_modules/core-js/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 */ 105); - -module.exports = /(iphone|ipod|ipad).*applewebkit/i.test(userAgent); - - -/***/ }), -/* 135 */ -/*!******************************************************************************!*\ - !*** ./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 */ 53); -var fails = __webpack_require__(/*! ../internals/fails */ 36); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 110); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 48); - -var SPECIES = wellKnownSymbol('species'); - -var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { - // #replace needs built-in support for named groups. - // #match works fine because it just return the exec results, even if it has - // a "grops" property. - var re = /./; - re.exec = function () { - var result = []; - result.groups = { a: '7' }; - return result; - }; - return ''.replace(re, '$') !== '7'; -}); - -// 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 () { - 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 () { - 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 === regexpExec) { - if (DELEGATES_TO_SYMBOL && !forceStringMethod) { - // The native String method already delegates to @@method (this - // polyfilled function), leasing to infinite recursion. - // We avoid it by directly calling the native @@method method. - return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; - } - return { done: true, value: nativeMethod.call(str, regexp, arg2) }; - } - return { done: false }; - }, { - 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); -}; - - -/***/ }), -/* 136 */ -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! - \****************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ./classof-raw */ 49); -var regexpExec = __webpack_require__(/*! ./regexp-exec */ 110); - -// `RegExpExec` abstract operation -// https://tc39.github.io/ecma262/#sec-regexpexec -module.exports = function (R, S) { - var exec = R.exec; - if (typeof exec === 'function') { - var result = exec.call(R, S); - if (typeof result !== 'object') { - throw TypeError('RegExp exec method returned something other than an Object or null'); - } - return result; - } - - if (classof(R) !== 'RegExp') { - throw TypeError('RegExp#exec called on incompatible receiver'); - } - - return regexpExec.call(R, S); -}; - - - -/***/ }), -/* 137 */, -/* 138 */, -/* 139 */, -/* 140 */, -/* 141 */ -/*!****************************************************************!*\ - !*** ./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 */ 42); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 72); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ 168).indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 103); - -module.exports = function (object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key; - for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), -/* 142 */ -/*!************************************************!*\ - !*** ./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 */ 59); - -module.exports = getBuiltIn('document', 'documentElement'); - - -/***/ }), -/* 143 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/iterate.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 192); -var toLength = __webpack_require__(/*! ../internals/to-length */ 73); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ 104); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 193); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 194); - -var Result = function (stopped, result) { - this.stopped = stopped; - this.result = result; -}; - -var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, next, step; - - if (IS_ITERATOR) { - iterator = iterable; - } else { - iterFn = getIteratorMethod(iterable); - if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); - // optimisation for array iterators - if (isArrayIteratorMethod(iterFn)) { - for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = AS_ENTRIES - ? boundFunction(anObject(step = iterable[index])[0], step[1]) - : boundFunction(iterable[index]); - if (result && result instanceof Result) return result; - } return new Result(false); - } - iterator = iterFn.call(iterable); - } - - next = iterator.next; - while (!(step = next.call(iterator)).done) { - result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); - if (typeof result == 'object' && result && result instanceof Result) return result; - } return new Result(false); -}; - -iterate.stop = function (result) { - return new Result(true, result); -}; - - -/***/ }), -/* 144 */ -/*!***************************************************************!*\ - !*** ./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 */ 37); -var aFunction = __webpack_require__(/*! ../internals/a-function */ 67); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var SPECIES = wellKnownSymbol('species'); - -// `SpeciesConstructor` abstract operation -// https://tc39.github.io/ecma262/#sec-speciesconstructor -module.exports = function (O, defaultConstructor) { - var C = anObject(O).constructor; - var S; - return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S); -}; - - -/***/ }), -/* 145 */ -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/perform.js ***! - \***************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return { error: false, value: exec() }; - } catch (error) { - return { error: true, value: error }; - } -}; - - -/***/ }), -/* 146 */, -/* 147 */, -/* 148 */ -/*!*********************************!*\ - !*** ./dev/Storage/RainLoop.js ***! - \*********************************/ -/*! exports provided: isStorageSupported, getHash, setHash, clearHash, checkTimestamp */ -/*! exports used: checkTimestamp, clearHash, getHash, isStorageSupported, setHash */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isStorageSupported; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return getHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return setHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return clearHash; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return checkTimestamp; }); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__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__); - - - - - -var STORAGE_KEY = '__rlA'; -var TIME_KEY = '__rlT'; -/** - * @param {string} storageName - * @returns {boolean} - */ - -function isStorageSupported(storageName) { - var storageIsAvailable = false; - - try { - // at: window[storageName] firefox throws SecurityError: The operation is insecure. when in iframe - storageIsAvailable = storageName in window__WEBPACK_IMPORTED_MODULE_4___default.a && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName] && window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName].setItem; - } catch (e) {} // eslint-disable-line no-empty - - - if (storageIsAvailable) { - var s = window__WEBPACK_IMPORTED_MODULE_4___default.a[storageName], - key = 'testLocalStorage_' + window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.random(); - - try { - s.setItem(key, key); - - if (key === s.getItem(key)) { - s.removeItem(key); - return true; - } - } catch (e) {} // eslint-disable-line no-empty - - } - - return false; -} -var SESS_STORAGE = isStorageSupported('sessionStorage') ? window__WEBPACK_IMPORTED_MODULE_4___default.a.sessionStorage || null : null; -var WIN_STORAGE = window__WEBPACK_IMPORTED_MODULE_4___default.a.top || window__WEBPACK_IMPORTED_MODULE_4___default.a || null; - -var __get = function __get(key) { - var result = null; - - if (SESS_STORAGE) { - result = SESS_STORAGE.getItem(key) || null; - } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) { - var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; - result = data ? data[key] || null : null; - } - - return result; -}; - -var __set = function __set(key, value) { - if (SESS_STORAGE) { - SESS_STORAGE.setItem(key, value); - } else if (WIN_STORAGE && window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON) { - var data = WIN_STORAGE.name && '{' === WIN_STORAGE.name.toString().substr(0, 1) ? window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.parse(WIN_STORAGE.name.toString()) : null; - data = data || {}; - data[key] = value; - WIN_STORAGE.name = window__WEBPACK_IMPORTED_MODULE_4___default.a.JSON.stringify(data); - } -}; - -var timestamp = function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_4___default.a.Math.round(new window__WEBPACK_IMPORTED_MODULE_4___default.a.Date().getTime() / 1000); -}; - -var setTimestamp = function setTimestamp() { - return __set(TIME_KEY, timestamp()); -}; - -var getTimestamp = function getTimestamp() { - var time = __get(TIME_KEY, 0); - - return time ? window__WEBPACK_IMPORTED_MODULE_4___default.a.parseInt(time, 10) || 0 : 0; -}; -/** - * @returns {string} - */ - - -function getHash() { - return __get(STORAGE_KEY); -} -/** - * @returns {void} - */ - -function setHash() { - var key = 'AuthAccountHash', - appData = window__WEBPACK_IMPORTED_MODULE_4___default.a.__rlah_data(); - - __set(STORAGE_KEY, appData && appData[key] ? appData[key] : ''); - - setTimestamp(); -} -/** - * @returns {void} - */ - -function clearHash() { - __set(STORAGE_KEY, ''); - - setTimestamp(); -} -/** - * @returns {boolean} - */ - -function checkTimestamp() { - if (timestamp() > getTimestamp() + 1000 * 60 * 60) { - // 60m - clearHash(); - return true; - } - - return false; -} // init section - -window__WEBPACK_IMPORTED_MODULE_4___default.a.setInterval(setTimestamp, 1000 * 60); // 1m - -/***/ }), -/* 149 */, -/* 150 */ -/*!************************************************!*\ - !*** ./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 */ 27); - -module.exports = global; - - -/***/ }), -/* 151 */, -/* 152 */, -/* 153 */ -/*!*************************************************************!*\ - !*** ./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 */ 27); -var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ 105); - -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; - - -/***/ }), -/* 154 */ -/*!****************************************************************!*\ - !*** ./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 */ 187).charAt; - -// `AdvanceStringIndex` abstract operation -// https://tc39.github.io/ecma262/#sec-advancestringindex -module.exports = function (S, index, unicode) { - return index + (unicode ? charAt(S, index).length : 1); -}; - - -/***/ }), -/* 155 */, -/* 156 */, -/* 157 */, -/* 158 */, -/* 159 */, -/* 160 */, -/* 161 */, -/* 162 */, -/* 163 */, -/* 164 */, -/* 165 */, -/* 166 */, -/* 167 */ -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! - \*************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var nativePropertyIsEnumerable = {}.propertyIsEnumerable; -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// Nashorn ~ JDK8 bug -var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - -// `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable -exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; -} : nativePropertyIsEnumerable; - - -/***/ }), -/* 168 */ -/*!**********************************************************!*\ - !*** ./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 */ 72); -var toLength = __webpack_require__(/*! ../internals/to-length */ 73); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 184); - -// `Array.prototype.{ indexOf, includes }` methods implementation -var createMethod = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -module.exports = { - // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) -}; - - -/***/ }), -/* 169 */ -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! - \***************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), -/* 170 */, -/* 171 */ -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/native-promise-constructor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = global.Promise; - - -/***/ }), -/* 172 */ -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/promise-resolve.js ***! - \***********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); -var newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ 106); - -module.exports = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; -}; - - -/***/ }), -/* 173 */ -/*!********************************************************!*\ - !*** ./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 */ 37); - -// `RegExp.prototype.flags` getter implementation -// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags -module.exports = function () { - var that = anObject(this); - var result = ''; - if (that.global) result += 'g'; - if (that.ignoreCase) result += 'i'; - if (that.multiline) result += 'm'; - if (that.dotAll) result += 's'; - if (that.unicode) result += 'u'; - if (that.sticky) result += 'y'; - return result; -}; - - -/***/ }), -/* 174 */, -/* 175 */, -/* 176 */, -/* 177 */, -/* 178 */, -/* 179 */, -/* 180 */ -/*!***********************************************************!*\ - !*** ./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 */ 27); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 94); - -var WeakMap = global.WeakMap; - -module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); - - -/***/ }), -/* 181 */ -/*!***********************************************************************!*\ - !*** ./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 */ 42); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 182); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); - -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)); - } -}; - - -/***/ }), -/* 182 */ -/*!****************************************************!*\ - !*** ./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 */ 59); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 183); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 169); -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// 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; -}; - - -/***/ }), -/* 183 */ -/*!*************************************************************************!*\ - !*** ./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 */ 141); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 108); - -var hiddenKeys = enumBugKeys.concat('length', 'prototype'); - -// `Object.getOwnPropertyNames` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertynames -exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys(O, hiddenKeys); -}; - - -/***/ }), -/* 184 */ -/*!*************************************************************!*\ - !*** ./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 */ 81); - -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); -}; - - -/***/ }), -/* 185 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/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 */ 131); - -module.exports = NATIVE_SYMBOL - // eslint-disable-next-line no-undef - && !Symbol.sham - // eslint-disable-next-line no-undef - && typeof Symbol.iterator == 'symbol'; - - -/***/ }), -/* 186 */ -/*!************************************************************!*\ - !*** ./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 */ 95); -var classof = __webpack_require__(/*! ../internals/classof */ 132); - -// `Object.prototype.toString` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.tostring -module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { - return '[object ' + classof(this) + ']'; -}; - - -/***/ }), -/* 187 */ -/*!************************************************************!*\ - !*** ./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 */ 81); -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.github.io/ecma262/#sec-string.prototype.codepointat - codeAt: createMethod(false), - // `String.prototype.at` method - // https://github.com/mathiasbynens/String.prototype.at - charAt: createMethod(true) -}; - - -/***/ }), -/* 188 */, -/* 189 */ -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/redefine-all.js ***! - \********************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ 53); - -module.exports = function (target, src, options) { - for (var key in src) redefine(target, key, src[key], options); - return target; -}; - - -/***/ }), -/* 190 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/set-species.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 59); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 52); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 47); - -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; } - }); - } -}; - - -/***/ }), -/* 191 */ -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/an-instance.js ***! - \*******************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name) { - if (!(it instanceof Constructor)) { - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); - } return it; -}; - - -/***/ }), -/* 192 */ -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! - \********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); - -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); -}; - - -/***/ }), -/* 193 */ -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/get-iterator-method.js ***! - \***************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof */ 132); -var Iterators = __webpack_require__(/*! ../internals/iterators */ 74); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); - -module.exports = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), -/* 194 */ -/*!****************************************************************************!*\ - !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! - \****************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ 37); - -// call something on iterator step with safe closing on error -module.exports = function (iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (error) { - var returnMethod = iterator['return']; - if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); - throw error; - } -}; - - -/***/ }), -/* 195 */ -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! - \**************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 32); - -var ITERATOR = wellKnownSymbol('iterator'); -var SAFE_CLOSING = false; - -try { - var called = 0; - var iteratorWithReturn = { - next: function () { - return { done: !!called++ }; - }, - 'return': function () { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR] = function () { - return this; - }; - // eslint-disable-next-line no-throw-literal - Array.from(iteratorWithReturn, function () { throw 2; }); -} catch (error) { /* empty */ } - -module.exports = function (exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR] = function () { - return { - next: function () { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { /* empty */ } - return ITERATION_SUPPORT; -}; - - -/***/ }), -/* 196 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/microtask.js ***! - \*****************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 91).f; -var classof = __webpack_require__(/*! ../internals/classof-raw */ 49); -var macrotask = __webpack_require__(/*! ../internals/task */ 133).set; -var IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ 134); - -var MutationObserver = global.MutationObserver || global.WebKitMutationObserver; -var process = global.process; -var Promise = global.Promise; -var IS_NODE = classof(process) == 'process'; -// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` -var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask'); -var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; - -var flush, head, last, notify, toggle, node, promise, 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(); - }; - - // Node.js - if (IS_NODE) { - notify = function () { - process.nextTick(flush); - }; - // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver && !IS_IOS) { - 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); - }; - // 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; -}; - - -/***/ }), -/* 197 */ -/*!**************************************************************!*\ - !*** ./node_modules/core-js/internals/host-report-errors.js ***! - \**************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ 27); - -module.exports = function (a, b) { - var console = global.console; - if (console && console.error) { - arguments.length === 1 ? console.error(a) : console.error(a, b); - } -}; - - -/***/ }), -/* 198 */, -/* 199 */, -/* 200 */, -/* 201 */, -/* 202 */, -/* 203 */, -/* 204 */, -/* 205 */, -/* 206 */, -/* 207 */, -/* 208 */, -/* 209 */, -/* 210 */, -/* 211 */, -/* 212 */, -/* 213 */, -/* 214 */, -/* 215 */, -/* 216 */, -/* 217 */, -/* 218 */, -/* 219 */, -/* 220 */, -/* 221 */, -/* 222 */, -/* 223 */, -/* 224 */, -/* 225 */, -/* 226 */, -/* 227 */, -/* 228 */, -/* 229 */, -/* 230 */, -/* 231 */, -/* 232 */, -/* 233 */, -/* 234 */, -/* 235 */ -/*!*****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_descriptors.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// Thank's IE8 for his funny defineProperty -module.exports = !__webpack_require__(/*! ./_fails */ 286)(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 236 */ -/*!*****************************************************************!*\ - !*** ./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 */ 36); - -// 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; -}); - - -/***/ }), -/* 237 */, -/* 238 */, -/* 239 */, -/* 240 */, -/* 241 */, -/* 242 */, -/* 243 */, -/* 244 */, -/* 245 */, -/* 246 */, -/* 247 */, -/* 248 */, -/* 249 */, -/* 250 */, -/* 251 */, -/* 252 */, -/* 253 */, -/* 254 */, -/* 255 */, -/* 256 */, -/* 257 */, -/* 258 */, -/* 259 */, -/* 260 */, -/* 261 */, -/* 262 */, -/* 263 */, -/* 264 */, -/* 265 */, -/* 266 */, -/* 267 */, -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */, -/* 272 */, -/* 273 */, -/* 274 */, -/* 275 */, -/* 276 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_core.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var core = module.exports = { version: '2.6.12' }; -if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - - -/***/ }), -/* 277 */, -/* 278 */, -/* 279 */, -/* 280 */, -/* 281 */, -/* 282 */, -/* 283 */, -/* 284 */, -/* 285 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_is-object.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), -/* 286 */ -/*!***********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_fails.js ***! - \***********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } -}; - - -/***/ }), -/* 287 */, -/* 288 */, -/* 289 */, -/* 290 */, -/* 291 */, -/* 292 */, -/* 293 */, -/* 294 */, -/* 295 */, -/* 296 */, -/* 297 */, -/* 298 */, -/* 299 */, -/* 300 */, -/* 301 */, -/* 302 */, -/* 303 */, -/* 304 */, -/* 305 */, -/* 306 */, -/* 307 */, -/* 308 */, -/* 309 */, -/* 310 */, -/* 311 */, -/* 312 */, -/* 313 */, -/* 314 */, -/* 315 */, -/* 316 */, -/* 317 */, -/* 318 */, -/* 319 */, -/* 320 */, -/* 321 */, -/* 322 */, -/* 323 */, -/* 324 */, -/* 325 */, -/* 326 */, -/* 327 */, -/* 328 */, -/* 329 */, -/* 330 */, -/* 331 */, -/* 332 */, -/* 333 */, -/* 334 */, -/* 335 */, -/* 336 */, -/* 337 */, -/* 338 */, -/* 339 */, -/* 340 */, -/* 341 */, -/* 342 */, -/* 343 */, -/* 344 */, -/* 345 */, -/* 346 */, -/* 347 */, -/* 348 */, -/* 349 */, -/* 350 */, -/* 351 */, -/* 352 */, -/* 353 */, -/* 354 */, -/* 355 */, -/* 356 */, -/* 357 */, -/* 358 */, -/* 359 */, -/* 360 */, -/* 361 */, -/* 362 */, -/* 363 */, -/* 364 */, -/* 365 */, -/* 366 */, -/* 367 */, -/* 368 */, -/* 369 */, -/* 370 */, -/* 371 */, -/* 372 */, -/* 373 */, -/* 374 */, -/* 375 */, -/* 376 */, -/* 377 */, -/* 378 */, -/* 379 */, -/* 380 */, -/* 381 */, -/* 382 */, -/* 383 */, -/* 384 */, -/* 385 */, -/* 386 */, -/* 387 */, -/* 388 */, -/* 389 */, -/* 390 */, -/* 391 */, -/* 392 */, -/* 393 */, -/* 394 */, -/* 395 */, -/* 396 */, -/* 397 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/get-own-property-descriptor */ 504), __esModule: true }; - -/***/ }), -/* 398 */, -/* 399 */, -/* 400 */, -/* 401 */, -/* 402 */, -/* 403 */, -/* 404 */, -/* 405 */ -/*!************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_export.js ***! - \************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ./_global */ 406); -var core = __webpack_require__(/*! ./_core */ 276); -var ctx = __webpack_require__(/*! ./_ctx */ 499); -var hide = __webpack_require__(/*! ./_hide */ 501); -var has = __webpack_require__(/*! ./_has */ 411); -var PROTOTYPE = 'prototype'; - -var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var IS_WRAP = type & $export.W; - var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); - var expProto = exports[PROTOTYPE]; - var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; - var key, own, out; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - if (own && has(exports, key)) continue; - // export native or passed - out = own ? target[key] : source[key]; - // prevent global pollution for namespaces - exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] - // bind timers to global for call from export context - : IS_BIND && own ? ctx(out, global) - // wrap global constructors for prevent change them in library - : IS_WRAP && target[key] == out ? (function (C) { - var F = function (a, b, c) { - if (this instanceof C) { - switch (arguments.length) { - case 0: return new C(); - case 1: return new C(a); - case 2: return new C(a, b); - } return new C(a, b, c); - } return C.apply(this, arguments); - }; - F[PROTOTYPE] = C[PROTOTYPE]; - return F; - // make static versions for prototype methods - })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; - // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% - if (IS_PROTO) { - (exports.virtual || (exports.virtual = {}))[key] = out; - // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% - if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); - } - } -}; -// type bitmap -$export.F = 1; // forced -$export.G = 2; // global -$export.S = 4; // static -$export.P = 8; // proto -$export.B = 16; // bind -$export.W = 32; // wrap -$export.U = 64; // safe -$export.R = 128; // real proto method for `library` -module.exports = $export; - - -/***/ }), -/* 406 */ -/*!************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_global.js ***! - \************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); -if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - - -/***/ }), -/* 407 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-dp.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ./_an-object */ 502); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 408); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 409); -var dP = Object.defineProperty; - -exports.f = __webpack_require__(/*! ./_descriptors */ 235) ? Object.defineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), -/* 408 */ -/*!********************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ie8-dom-define.js ***! - \********************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = !__webpack_require__(/*! ./_descriptors */ 235) && !__webpack_require__(/*! ./_fails */ 286)(function () { - return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ 503)('div'), 'a', { get: function () { return 7; } }).a != 7; -}); - - -/***/ }), -/* 409 */ -/*!******************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-primitive.js ***! - \******************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// 7.1.1 ToPrimitive(input [, PreferredType]) -var isObject = __webpack_require__(/*! ./_is-object */ 285); -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (it, S) { - if (!isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), -/* 410 */ -/*!*******************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_property-desc.js ***! - \*******************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), -/* 411 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_has.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), -/* 412 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_to-iobject.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// to indexed object, toObject with fallback for non-array-like ES3 strings -var IObject = __webpack_require__(/*! ./_iobject */ 506); -var defined = __webpack_require__(/*! ./_defined */ 508); -module.exports = function (it) { - return IObject(defined(it)); -}; - - -/***/ }), -/* 413 */, -/* 414 */, -/* 415 */, -/* 416 */, -/* 417 */, -/* 418 */, -/* 419 */, -/* 420 */ -/*!**************************************************************!*\ - !*** ./node_modules/element-dataset/lib/browser/index.es.js ***! - \**************************************************************/ -/*! exports provided: default */ -/*! exports used: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/define-property */ 421); -/* harmony import */ var babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/core-js/object/get-own-property-descriptor */ 397); -/* harmony import */ var babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1__); - -// -// element-dataset 2.2.6 -// -// element-dataset is released under the terms of the BSD-3-Clause license. -// (c) 2015 - 2017 Mark Milstein -// -// For all details and documentation: https://github.com/epiloque/element-dataset -// - - - - -/* eslint-env browser */ - -function elementDatasetPolyfill() { - if (!document.documentElement.dataset && (!babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset') || !babel_runtime_core_js_object_get_own_property_descriptor__WEBPACK_IMPORTED_MODULE_1___default()(HTMLElement.prototype, 'dataset').get)) { - var descriptor = {}; - - descriptor.enumerable = true; - - descriptor.get = function get() { - var element = this; - var map = {}; - var attributes = this.attributes; - - function toUpperCase(n0) { - return n0.charAt(1).toUpperCase(); - } - - function getter() { - return this.value; - } - - function setter(name, value) { - if (typeof value !== 'undefined') { - this.setAttribute(name, value); - } else { - this.removeAttribute(name); - } - } - - for (var i = 0; i < attributes.length; i += 1) { - var attribute = attributes[i]; - - // This test really should allow any XML Name without - // colons (and non-uppercase for XHTML) - - if (attribute && attribute.name && /^data-\w[\w-]*$/.test(attribute.name)) { - var name = attribute.name; - var value = attribute.value; - - // Change to CamelCase - - var propName = name.substr(5).replace(/-./g, toUpperCase); - - babel_runtime_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(map, propName, { - enumerable: descriptor.enumerable, - get: getter.bind({ value: value || '' }), - set: setter.bind(element, name) - }); - } - } - return map; - }; - - Object.defineProperty(HTMLElement.prototype, 'dataset', descriptor); - } -} - -/* harmony default export */ __webpack_exports__["a"] = (elementDatasetPolyfill); - - -/***/ }), -/* 421 */ -/*!**********************************************************************!*\ - !*** ./node_modules/babel-runtime/core-js/object/define-property.js ***! - \**********************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/define-property */ 497), __esModule: true }; - -/***/ }), -/* 422 */ -/*!*********************************************!*\ - !*** ./vendors/Progress.js/src/progress.js ***! - \*********************************************/ -/*! no static exports found */ -/*! exports used: progressJs */ -/***/ (function(module, exports, __webpack_require__) { - -/** - * Progress.js v0.1.0 - * https://github.com/usablica/progress.js - * MIT licensed - * - * Copyright (C) 2013 usabli.ca - Afshin Mehrabani (@afshinmeh) - */ - -(function (root, factory) { - if (true) { - // CommonJS - factory(exports); - } else {} -} (this, function (exports) { - //Default config/variables - var VERSION = '0.1.0'; - - /** - * ProgressJs main class - * - * @class ProgressJs - */ - function ProgressJs(obj) { - - if (typeof obj.length != 'undefined') { - this._targetElement = obj; - } else { - this._targetElement = [obj]; - } - - if (typeof window._progressjsId === 'undefined') - window._progressjsId = 1; - - if (typeof window._progressjsIntervals === 'undefined') - window._progressjsIntervals = {}; - - this._options = { - //progress bar theme - theme: 'blue', - //overlay mode makes an overlay layer in the target element - overlayMode: false, - //to consider CSS3 transitions in events - considerTransition: true - }; - } - - /** - * Start progress for specific element(s) - * - * @api private - * @method _createContainer - */ - function _startProgress() { - - //call onBeforeStart callback - if (typeof this._onBeforeStartCallback != 'undefined') { - this._onBeforeStartCallback.call(this); - } - - //create the container for progress bar - _createContainer.call(this); - - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - _setProgress.call(this, this._targetElement[i]); - } - } - - /** - * Set progress bar for specific element - * - * @api private - * @method _setProgress - * @param {Object} targetElement - */ - function _setProgress(targetElement) { - - //if the target element already as `data-progressjs`, ignore the init - if (targetElement.hasAttribute("data-progressjs")) - return; - - //get target element position - var targetElementOffset = _getOffset.call(this, targetElement); - - targetElement.setAttribute("data-progressjs", window._progressjsId); - - var progressElementContainer = document.createElement('div'); - progressElementContainer.className = 'progressjs-progress progressjs-theme-' + this._options.theme; - - - //set the position percent elements, it depends on targetElement tag - if (targetElement.tagName.toLowerCase() === 'body') { - progressElementContainer.style.position = 'fixed'; - } else { - progressElementContainer.style.position = 'absolute'; - } - - progressElementContainer.setAttribute("data-progressjs", window._progressjsId); - var progressElement = document.createElement("div"); - progressElement.className = "progressjs-inner"; - - //create an element for current percent of progress bar - var progressPercentElement = document.createElement('div'); - progressPercentElement.className = "progressjs-percent"; - progressPercentElement.innerHTML = "1%"; - - progressElement.appendChild(progressPercentElement); - - if (this._options.overlayMode && targetElement.tagName.toLowerCase() === 'body') { - //if we have `body` for target element and also overlay mode is enable, we should use a different - //position for progress bar container element - progressElementContainer.style.left = 0; - progressElementContainer.style.right = 0; - progressElementContainer.style.top = 0; - progressElementContainer.style.bottom = 0; - } else { - //set progress bar container size and offset - progressElementContainer.style.left = targetElementOffset.left + 'px'; - progressElementContainer.style.top = targetElementOffset.top + 'px'; - progressElementContainer.style.width = targetElementOffset.width + 'px'; - - if (this._options.overlayMode) { - progressElementContainer.style.height = targetElementOffset.height + 'px'; - } - } - - progressElementContainer.appendChild(progressElement); - - //append the element to container - var container = document.querySelector('.progressjs-container'); - container.appendChild(progressElementContainer); - - _setPercentFor(targetElement, 1); - - //and increase the progressId - ++window._progressjsId; - } - - /** - * Set percent for all elements - * - * @api private - * @method _setPercent - * @param {Number} percent - */ - function _setPercent(percent) { - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - _setPercentFor.call(this, this._targetElement[i], percent); - } - } - - /** - * Set percent for specific element - * - * @api private - * @method _setPercentFor - * @param {Object} targetElement - * @param {Number} percent - */ - function _setPercentFor(targetElement, percent) { - var self = this; - - //prevent overflow! - if (percent >= 100) - percent = 100; - - if (targetElement.hasAttribute("data-progressjs")) { - //setTimeout for better CSS3 animation applying in some cases - setTimeout(function() { - - //call the onprogress callback - if (typeof self._onProgressCallback != 'undefined') { - self._onProgressCallback.call(self, targetElement, percent); - } - - var percentElement = _getPercentElement(targetElement); - percentElement.style.width = parseInt(percent) + '%'; - - var percentElement = percentElement.querySelector(".progressjs-percent"); - var existingPercent = parseInt(percentElement.innerHTML.replace('%', '')); - - //start increase/decrease the percent element with animation - (function(percentElement, existingPercent, currentPercent) { - - var increasement = true; - if (existingPercent > currentPercent) { - increasement = false; - } - - var intervalIn = 10; - function changePercentTimer(percentElement, existingPercent, currentPercent) { - //calculate the distance between two percents - var distance = Math.abs(existingPercent - currentPercent); - if (distance < 3) { - intervalIn = 30; - } else if (distance < 20) { - intervalIn = 20; - } else { - intervanIn = 1; - } - - if ((existingPercent - currentPercent) != 0) { - //set the percent - percentElement.innerHTML = (increasement ? (++existingPercent) : (--existingPercent)) + '%'; - setTimeout(function() { changePercentTimer(percentElement, existingPercent, currentPercent); }, intervalIn); - } - } - - changePercentTimer(percentElement, existingPercent, currentPercent); - - })(percentElement, existingPercent, parseInt(percent)); - - }, 50); - } - } - - /** - * Get the progress bar element - * - * @api private - * @method _getPercentElement - * @param {Object} targetElement - */ - function _getPercentElement(targetElement) { - var progressjsId = parseInt(targetElement.getAttribute('data-progressjs')); - return document.querySelector('.progressjs-container > .progressjs-progress[data-progressjs="' + progressjsId + '"] > .progressjs-inner'); - } - - /** - * Auto increase the progress bar every X milliseconds - * - * @api private - * @method _autoIncrease - * @param {Number} size - * @param {Number} millisecond - */ - function _autoIncrease(size, millisecond) { - var self = this; - - var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); - - if (typeof window._progressjsIntervals[progressjsId] != 'undefined') { - clearInterval(window._progressjsIntervals[progressjsId]); - } - window._progressjsIntervals[progressjsId] = setInterval(function() { - _increasePercent.call(self, size); - }, millisecond); - } - - /** - * Increase the size of progress bar - * - * @api private - * @method _increasePercent - * @param {Number} size - */ - function _increasePercent(size) { - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - var currentElement = this._targetElement[i]; - if (currentElement.hasAttribute('data-progressjs')) { - var percentElement = _getPercentElement(currentElement); - var existingPercent = parseInt(percentElement.style.width.replace('%', '')); - if (existingPercent) { - _setPercentFor.call(this, currentElement, existingPercent + (size || 1)); - } - } - } - } - - /** - * Close and remove progress bar - * - * @api private - * @method _end - */ - function _end() { - - //call onBeforeEnd callback - if (typeof this._onBeforeEndCallback != 'undefined') { - if (this._options.considerTransition === true) { - //we can safety assume that all layers would be the same, so `this._targetElement[0]` is the same as `this._targetElement[1]` - _getPercentElement(this._targetElement[0]).addEventListener(whichTransitionEvent(), this._onBeforeEndCallback, false); - } else { - this._onBeforeEndCallback.call(this); - } - } - - var progressjsId = parseInt(this._targetElement[0].getAttribute('data-progressjs')); - - for (var i = 0, elmsLength = this._targetElement.length; i < elmsLength; i++) { - var currentElement = this._targetElement[i]; - var percentElement = _getPercentElement(currentElement); - - if (!percentElement) - return; - - var existingPercent = parseInt(percentElement.style.width.replace('%', '')); - - var timeoutSec = 1; - if (existingPercent < 100) { - _setPercentFor.call(this, currentElement, 100); - timeoutSec = 500; - } - - //I believe I should handle this situation with eventListener and `transitionend` event but I'm not sure - //about compatibility with IEs. Should be fixed in further versions. - (function(percentElement, currentElement) { - setTimeout(function() { - percentElement.parentNode.className += " progressjs-end"; - - setTimeout(function() { - //remove the percent element from page - percentElement.parentNode.parentNode.removeChild(percentElement.parentNode); - //and remove the attribute - currentElement.removeAttribute("data-progressjs"); - }, 1000); - }, timeoutSec); - })(percentElement, currentElement); - } - - //clean the setInterval for autoIncrease function - if (window._progressjsIntervals[progressjsId]) { - //`delete` keyword has some problems in IE - try { - clearInterval(window._progressjsIntervals[progressjsId]); - window._progressjsIntervals[progressjsId] = null; - delete window._progressjsIntervals[progressjsId]; - } catch(ex) { } - } - } - - /** - * Create the progress bar container - * - * @api private - * @method _createContainer - */ - function _createContainer() { - //first check if we have an container already, we don't need to create it again - if (!document.querySelector(".progressjs-container")) { - var containerElement = document.createElement("div"); - containerElement.className = "progressjs-container"; - document.body.appendChild(containerElement); - } - } - - /** - * Get an element position on the page - * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966 - * - * @api private - * @method _getOffset - * @param {Object} element - * @returns Element's position info - */ - function _getOffset(element) { - var elementPosition = {}; - - if (element.tagName.toLowerCase() === 'body') { - //set width - elementPosition.width = element.clientWidth; - //set height - elementPosition.height = element.clientHeight; - } else { - //set width - elementPosition.width = element.offsetWidth; - //set height - elementPosition.height = element.offsetHeight; - } - - //calculate element top and left - var _x = 0; - var _y = 0; - while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) { - _x += element.offsetLeft; - _y += element.offsetTop; - element = element.offsetParent; - } - //set top - elementPosition.top = _y; - //set left - elementPosition.left = _x; - - return elementPosition; - } - - /** - * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1 - * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically - * - * @param obj1 - * @param obj2 - * @returns obj3 a new object based on obj1 and obj2 - */ - function _mergeOptions(obj1, obj2) { - var obj3 = {}; - for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; } - for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; } - return obj3; - } - - var progressJs = function (targetElm) { - if (typeof (targetElm) === 'object') { - //Ok, create a new instance - return new ProgressJs(targetElm); - - } else if (typeof (targetElm) === 'string') { - //select the target element with query selector - var targetElement = document.querySelectorAll(targetElm); - - if (targetElement) { - return new ProgressJs(targetElement); - } else { - throw new Error('There is no element with given selector.'); - } - } else { - return new ProgressJs(document.body); - } - }; - - /** - * Get correct transition callback - * Thanks @webinista: http://stackoverflow.com/a/9090128/375966 - * - * @returns transition name - */ - function whichTransitionEvent() { - var t; - var el = document.createElement('fakeelement'); - var transitions = { - 'transition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'MozTransition': 'transitionend', - 'WebkitTransition': 'webkitTransitionEnd' - } - - for (t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - } - - /** - * Current ProgressJs version - * - * @property version - * @type String - */ - progressJs.version = VERSION; - - //Prototype - progressJs.fn = ProgressJs.prototype = { - clone: function () { - return new ProgressJs(this); - }, - setOption: function(option, value) { - this._options[option] = value; - return this; - }, - setOptions: function(options) { - this._options = _mergeOptions(this._options, options); - return this; - }, - start: function() { - _startProgress.call(this); - return this; - }, - set: function(percent) { - _setPercent.call(this, percent); - return this; - }, - increase: function(size) { - _increasePercent.call(this, size); - return this; - }, - autoIncrease: function(size, millisecond) { - _autoIncrease.call(this, size, millisecond); - return this; - }, - end: function() { - _end.call(this); - return this; - }, - onbeforeend: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onBeforeEndCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforeend was not a function'); - } - return this; - }, - onbeforestart: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onBeforeStartCallback = providedCallback; - } else { - throw new Error('Provided callback for onbeforestart was not a function'); - } - return this; - }, - onprogress: function(providedCallback) { - if (typeof (providedCallback) === 'function') { - this._onProgressCallback = providedCallback; - } else { - throw new Error('Provided callback for onprogress was not a function'); - } - return this; - } - }; - - exports.progressJs = progressJs; - return progressJs; -})); - - -/***/ }), -/* 423 */, -/* 424 */, -/* 425 */, -/* 426 */, -/* 427 */, -/* 428 */, -/* 429 */, -/* 430 */, -/* 431 */, -/* 432 */, -/* 433 */, -/* 434 */, -/* 435 */, -/* 436 */, -/* 437 */, -/* 438 */, -/* 439 */, -/* 440 */, -/* 441 */, -/* 442 */, -/* 443 */, -/* 444 */, -/* 445 */, -/* 446 */, -/* 447 */, -/* 448 */, -/* 449 */, -/* 450 */, -/* 451 */, -/* 452 */, -/* 453 */, -/* 454 */, -/* 455 */, -/* 456 */, -/* 457 */, -/* 458 */, -/* 459 */, -/* 460 */, -/* 461 */, -/* 462 */, -/* 463 */, -/* 464 */, -/* 465 */, -/* 466 */, -/* 467 */, -/* 468 */, -/* 469 */, -/* 470 */, -/* 471 */, -/* 472 */, -/* 473 */, -/* 474 */, -/* 475 */, -/* 476 */, -/* 477 */, -/* 478 */, -/* 479 */, -/* 480 */, -/* 481 */, -/* 482 */, -/* 483 */, -/* 484 */, -/* 485 */, -/* 486 */, -/* 487 */, -/* 488 */, -/* 489 */, -/* 490 */, -/* 491 */, -/* 492 */, -/* 493 */, -/* 494 */, -/* 495 */, -/* 496 */ -/*!*********************!*\ - !*** ./dev/boot.js ***! - \*********************/ -/*! no exports provided */ -/*! all exports used */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var element_dataset__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-dataset */ 420); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../vendors/Progress.js/src/progress.js */ 422); -/* harmony import */ var _vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__); - - -Object(element_dataset__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(); - -__webpack_require__(/*! json3 */ 512); - -__webpack_require__(/*! intersection-observer */ 515); - - - -window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs = window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs || Object(_vendors_Progress_js_src_progress_js__WEBPACK_IMPORTED_MODULE_3__["progressJs"])(); -window__WEBPACK_IMPORTED_MODULE_2___default.a.progressJs.onbeforeend(function () { - var _$ = window__WEBPACK_IMPORTED_MODULE_2___default.a.$; - - if (_$) { - try { - _$('.progressjs-container').hide(); - - window__WEBPACK_IMPORTED_MODULE_2___default.a.setTimeout(function () { - _$('.progressjs-container').remove(); - }, 200); // eslint-disable-line no-magic-numbers - } catch (e) {} // eslint-disable-line no-empty - - } -}); - -__webpack_require__(/*! ../vendors/modernizr/modernizr-custom.js */ 516); - -__webpack_require__(/*! Common/Booter */ 517); - -if (window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot) { - window__WEBPACK_IMPORTED_MODULE_2___default.a.__runBoot(); -} - -/***/ }), -/* 497 */ -/*!**********************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/define-property.js ***! - \**********************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es6.object.define-property */ 498); -var $Object = __webpack_require__(/*! ../../modules/_core */ 276).Object; -module.exports = function defineProperty(it, key, desc) { - return $Object.defineProperty(it, key, desc); -}; - - -/***/ }), -/* 498 */ -/*!*******************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.define-property.js ***! - \*******************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var $export = __webpack_require__(/*! ./_export */ 405); -// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) -$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ 235), 'Object', { defineProperty: __webpack_require__(/*! ./_object-dp */ 407).f }); - - -/***/ }), -/* 499 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_ctx.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// optional / simple context binding -var aFunction = __webpack_require__(/*! ./_a-function */ 500); -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), -/* 500 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_a-function.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; -}; - - -/***/ }), -/* 501 */ -/*!**********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_hide.js ***! - \**********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var dP = __webpack_require__(/*! ./_object-dp */ 407); -var createDesc = __webpack_require__(/*! ./_property-desc */ 410); -module.exports = __webpack_require__(/*! ./_descriptors */ 235) ? function (object, key, value) { - return dP.f(object, key, createDesc(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), -/* 502 */ -/*!***************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_an-object.js ***! - \***************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ 285); -module.exports = function (it) { - if (!isObject(it)) throw TypeError(it + ' is not an object!'); - return it; -}; - - -/***/ }), -/* 503 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_dom-create.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ./_is-object */ 285); -var document = __webpack_require__(/*! ./_global */ 406).document; -// typeof document.createElement is 'object' in old IE -var is = isObject(document) && isObject(document.createElement); -module.exports = function (it) { - return is ? document.createElement(it) : {}; -}; - - -/***/ }), -/* 504 */ -/*!**********************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/fn/object/get-own-property-descriptor.js ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../../modules/es6.object.get-own-property-descriptor */ 505); -var $Object = __webpack_require__(/*! ../../modules/_core */ 276).Object; -module.exports = function getOwnPropertyDescriptor(it, key) { - return $Object.getOwnPropertyDescriptor(it, key); -}; - - -/***/ }), -/* 505 */ -/*!*******************************************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js ***! - \*******************************************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) -var toIObject = __webpack_require__(/*! ./_to-iobject */ 412); -var $getOwnPropertyDescriptor = __webpack_require__(/*! ./_object-gopd */ 509).f; - -__webpack_require__(/*! ./_object-sap */ 511)('getOwnPropertyDescriptor', function () { - return function getOwnPropertyDescriptor(it, key) { - return $getOwnPropertyDescriptor(toIObject(it), key); - }; -}); - - -/***/ }), -/* 506 */ -/*!*************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_iobject.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -var cof = __webpack_require__(/*! ./_cof */ 507); -// eslint-disable-next-line no-prototype-builtins -module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { - return cof(it) == 'String' ? it.split('') : Object(it); -}; - - -/***/ }), -/* 507 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_cof.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), -/* 508 */ -/*!*************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_defined.js ***! - \*************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -// 7.2.1 RequireObjectCoercible(argument) -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), -/* 509 */ -/*!*****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-gopd.js ***! - \*****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -var pIE = __webpack_require__(/*! ./_object-pie */ 510); -var createDesc = __webpack_require__(/*! ./_property-desc */ 410); -var toIObject = __webpack_require__(/*! ./_to-iobject */ 412); -var toPrimitive = __webpack_require__(/*! ./_to-primitive */ 409); -var has = __webpack_require__(/*! ./_has */ 411); -var IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ 408); -var gOPD = Object.getOwnPropertyDescriptor; - -exports.f = __webpack_require__(/*! ./_descriptors */ 235) ? gOPD : function getOwnPropertyDescriptor(O, P) { - O = toIObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return gOPD(O, P); - } catch (e) { /* empty */ } - if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); -}; - - -/***/ }), -/* 510 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-pie.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -exports.f = {}.propertyIsEnumerable; - - -/***/ }), -/* 511 */ -/*!****************************************************************************************!*\ - !*** ./node_modules/babel-runtime/node_modules/core-js/library/modules/_object-sap.js ***! - \****************************************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -// most Object methods by ES6 should accept primitives -var $export = __webpack_require__(/*! ./_export */ 405); -var core = __webpack_require__(/*! ./_core */ 276); -var fails = __webpack_require__(/*! ./_fails */ 286); -module.exports = function (KEY, exec) { - var fn = (core.Object || {})[KEY] || Object[KEY]; - var exp = {}; - exp[KEY] = exec(fn); - $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); -}; - - -/***/ }), -/* 512 */ -/*!*****************************************!*\ - !*** ./node_modules/json3/lib/json3.js ***! - \*****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! JSON v3.3.2 | https://bestiejs.github.io/json3 | Copyright 2012-2015, Kit Cambridge, Benjamin Tan | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = true && __webpack_require__(/*! !webpack amd options */ 514); - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root.Object()); - exports || (exports = root.Object()); - - // Native constructor aliases. - var Number = context.Number || root.Number, - String = context.String || root.String, - Object = context.Object || root.Object, - Date = context.Date || root.Date, - SyntaxError = context.SyntaxError || root.SyntaxError, - TypeError = context.TypeError || root.TypeError, - Math = context.Math || root.Math, - nativeJSON = context.JSON || root.JSON; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty = objectProto.hasOwnProperty, - undefined; - - // Internal: Contains `try...catch` logic used by other functions. - // This prevents other functions from being deoptimized. - function attempt(func, errorFunc) { - try { - func(); - } catch (exception) { - if (errorFunc) { - errorFunc(); - } - } - } - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - attempt(function () { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - }); - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] != null) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("date-serialization") && has("json-parse"); - } else if (name == "date-serialization") { - // Indicates whether `Date`s can be serialized accurately by `JSON.stringify`. - isSupported = has("json-stringify") && isExtended; - if (isSupported) { - var stringify = exports.stringify; - attempt(function () { - isSupported = - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - }); - } - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function"; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - attempt(function () { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undefined && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undefined) === undefined && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undefined && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undefined]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undefined, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]"; - }, function () { - stringifySupported = false; - }); - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse, parseSupported; - if (typeof parse == "function") { - attempt(function () { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - attempt(function () { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - }); - if (parseSupported) { - attempt(function () { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - }); - } - if (parseSupported) { - attempt(function () { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - }); - } - } - } - }, function () { - parseSupported = false; - }); - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - has["bug-string-char-index"] = has["date-serialization"] = has["json"] = has["json-stringify"] = has["json-parse"] = null; - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - var forOwn = function (object, callback) { - var size = 0, Properties, dontEnums, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - dontEnums = new Properties(); - for (property in dontEnums) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(dontEnums, property)) { - size++; - } - } - Properties = dontEnums = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - dontEnums = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forOwn = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = dontEnums.length; property = dontEnums[--length];) { - if (hasProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forOwn = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forOwn(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify") && !has("date-serialization")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Serializes a date object. - var serializeDate = function (value) { - var getData, year, month, date, time, hours, minutes, seconds, milliseconds; - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - getData = function (value) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - }; - } else { - getData = function (value) { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - }; - } - serializeDate = function (value) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - getData(value); - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - year = month = date = hours = minutes = seconds = milliseconds = null; - } else { - value = null; - } - return value; - }; - return serializeDate(value); - }; - - // For environments with `JSON.stringify` but buggy date serialization, - // we override the native `Date#toJSON` implementation with a - // spec-compliant one. - if (has("json-stringify") && !has("date-serialization")) { - // Internal: the `Date#toJSON` implementation used to override the native one. - function dateToJSON (key) { - return serializeDate(this); - } - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - var nativeStringify = exports.stringify; - exports.stringify = function (source, filter, width) { - var nativeToJSON = Date.prototype.toJSON; - Date.prototype.toJSON = dateToJSON; - var result = nativeStringify(source, filter, width); - Date.prototype.toJSON = nativeToJSON; - return result; - } - } else { - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var escapeChar = function (character) { - var charCode = character.charCodeAt(0), escaped = Escapes[charCode]; - if (escaped) { - return escaped; - } - return unicodePrefix + toPaddedString(2, charCode.toString(16)); - }; - var reEscape = /[\x00-\x1f\x22\x5c]/g; - var quote = function (value) { - reEscape.lastIndex = 0; - return '"' + - ( - reEscape.test(value) - ? value.replace(reEscape, escapeChar) - : value - ) + - '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, type, className, results, element, index, length, prefix, result; - attempt(function () { - // Necessary for host object support. - value = object[property]; - }); - if (typeof value == "object" && value) { - if (value.getUTCFullYear && getClass.call(value) == dateClass && value.toJSON === Date.prototype.toJSON) { - value = serializeDate(value); - } else if (typeof value.toJSON == "function") { - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - // Exit early if value is `undefined` or `null`. - if (value == undefined) { - return value === undefined ? value : "null"; - } - type = typeof value; - // Only call `getClass` if the value is an object. - if (type == "object") { - className = getClass.call(value); - } - switch (className || type) { - case "boolean": - case booleanClass: - // Booleans are represented literally. - return "" + value; - case "number": - case numberClass: - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - case "string": - case stringClass: - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undefined ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forOwn(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undefined) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - className = getClass.call(filter); - if (className == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length;) { - value = filter[index++]; - className = getClass.call(value); - if (className == "[object String]" || className == "[object Number]") { - properties[value] = 1; - } - } - } - } - if (width) { - className = getClass.call(width); - if (className == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - if (width > 10) { - width = 10; - } - for (whitespace = ""; whitespace.length < width;) { - whitespace += " "; - } - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length; position++) { - charCode = source.charCodeAt(position); - if (charCode < 48 || charCode > 57) { - break; - } - } - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length; position++) { - charCode = source.charCodeAt(position); - if (charCode < 48 || charCode > 57) { - break; - } - } - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - var temp = source.slice(Index, Index + 4); - if (temp == "true") { - Index += 4; - return true; - } else if (temp == "fals" && source.charCodeAt(Index + 4 ) == 101) { - Index += 5; - return false; - } else if (temp == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;;) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } else { - hasMembers = true; - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;;) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } else { - hasMembers = true; - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undefined) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forOwn` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(getClass, forOwn, value, length, callback); - } - } else { - forOwn(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports.runInContext = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root.JSON3, - isRestored = false; - - var JSON3 = runInContext(root, (root.JSON3 = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root.JSON3 = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { - return JSON3; - }).call(exports, __webpack_require__, exports, module), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } -}).call(this); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ 513)(module), __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) - -/***/ }), -/* 513 */ -/*!***********************************!*\ - !*** (webpack)/buildin/module.js ***! - \***********************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function(module) { - if (!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if (!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; - - -/***/ }), -/* 514 */ -/*!****************************************!*\ - !*** (webpack)/buildin/amd-options.js ***! - \****************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */ -module.exports = __webpack_amd_options__; - -/* WEBPACK VAR INJECTION */}.call(this, {})) - -/***/ }), -/* 515 */ -/*!*********************************************************************!*\ - !*** ./node_modules/intersection-observer/intersection-observer.js ***! - \*********************************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -/** - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE. - * - * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document - * - */ -(function() { -'use strict'; - -// Exit early if we're not running in a browser. -if (typeof window !== 'object') { - return; -} - -// Exit early if all IntersectionObserver and IntersectionObserverEntry -// features are natively supported. -if ('IntersectionObserver' in window && - 'IntersectionObserverEntry' in window && - 'intersectionRatio' in window.IntersectionObserverEntry.prototype) { - - // Minimal polyfill for Edge 15's lack of `isIntersecting` - // See: https://github.com/w3c/IntersectionObserver/issues/211 - if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) { - Object.defineProperty(window.IntersectionObserverEntry.prototype, - 'isIntersecting', { - get: function () { - return this.intersectionRatio > 0; - } - }); - } - return; -} - - -/** - * A local reference to the document. - */ -var document = window.document; - - -/** - * An IntersectionObserver registry. This registry exists to hold a strong - * reference to IntersectionObserver instances currently observing a target - * element. Without this registry, instances without another reference may be - * garbage collected. - */ -var registry = []; - - -/** - * Creates the global IntersectionObserverEntry constructor. - * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry - * @param {Object} entry A dictionary of instance properties. - * @constructor - */ -function IntersectionObserverEntry(entry) { - this.time = entry.time; - this.target = entry.target; - this.rootBounds = entry.rootBounds; - this.boundingClientRect = entry.boundingClientRect; - this.intersectionRect = entry.intersectionRect || getEmptyRect(); - this.isIntersecting = !!entry.intersectionRect; - - // Calculates the intersection ratio. - var targetRect = this.boundingClientRect; - var targetArea = targetRect.width * targetRect.height; - var intersectionRect = this.intersectionRect; - var intersectionArea = intersectionRect.width * intersectionRect.height; - - // Sets intersection ratio. - if (targetArea) { - // Round the intersection ratio to avoid floating point math issues: - // https://github.com/w3c/IntersectionObserver/issues/324 - this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4)); - } else { - // If area is zero and is intersecting, sets to 1, otherwise to 0 - this.intersectionRatio = this.isIntersecting ? 1 : 0; - } -} - - -/** - * Creates the global IntersectionObserver constructor. - * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface - * @param {Function} callback The function to be invoked after intersection - * changes have queued. The function is not invoked if the queue has - * been emptied by calling the `takeRecords` method. - * @param {Object=} opt_options Optional configuration options. - * @constructor - */ -function IntersectionObserver(callback, opt_options) { - - var options = opt_options || {}; - - if (typeof callback != 'function') { - throw new Error('callback must be a function'); - } - - if (options.root && options.root.nodeType != 1) { - throw new Error('root must be an Element'); - } - - // Binds and throttles `this._checkForIntersections`. - this._checkForIntersections = throttle( - this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT); - - // Private properties. - this._callback = callback; - this._observationTargets = []; - this._queuedEntries = []; - this._rootMarginValues = this._parseRootMargin(options.rootMargin); - - // Public properties. - this.thresholds = this._initThresholds(options.threshold); - this.root = options.root || null; - this.rootMargin = this._rootMarginValues.map(function(margin) { - return margin.value + margin.unit; - }).join(' '); -} - - -/** - * The minimum interval within which the document will be checked for - * intersection changes. - */ -IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100; - - -/** - * The frequency in which the polyfill polls for intersection changes. - * this can be updated on a per instance basis and must be set prior to - * calling `observe` on the first target. - */ -IntersectionObserver.prototype.POLL_INTERVAL = null; - -/** - * Use a mutation observer on the root element - * to detect intersection changes. - */ -IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true; - - -/** - * Starts observing a target element for intersection changes based on - * the thresholds values. - * @param {Element} target The DOM element to observe. - */ -IntersectionObserver.prototype.observe = function(target) { - var isTargetAlreadyObserved = this._observationTargets.some(function(item) { - return item.element == target; - }); - - if (isTargetAlreadyObserved) { - return; - } - - if (!(target && target.nodeType == 1)) { - throw new Error('target must be an Element'); - } - - this._registerInstance(); - this._observationTargets.push({element: target, entry: null}); - this._monitorIntersections(); - this._checkForIntersections(); -}; - - -/** - * Stops observing a target element for intersection changes. - * @param {Element} target The DOM element to observe. - */ -IntersectionObserver.prototype.unobserve = function(target) { - this._observationTargets = - this._observationTargets.filter(function(item) { - - return item.element != target; - }); - if (!this._observationTargets.length) { - this._unmonitorIntersections(); - this._unregisterInstance(); - } -}; - - -/** - * Stops observing all target elements for intersection changes. - */ -IntersectionObserver.prototype.disconnect = function() { - this._observationTargets = []; - this._unmonitorIntersections(); - this._unregisterInstance(); -}; - - -/** - * Returns any queue entries that have not yet been reported to the - * callback and clears the queue. This can be used in conjunction with the - * callback to obtain the absolute most up-to-date intersection information. - * @return {Array} The currently queued entries. - */ -IntersectionObserver.prototype.takeRecords = function() { - var records = this._queuedEntries.slice(); - this._queuedEntries = []; - return records; -}; - - -/** - * Accepts the threshold value from the user configuration object and - * returns a sorted array of unique threshold values. If a value is not - * between 0 and 1 and error is thrown. - * @private - * @param {Array|number=} opt_threshold An optional threshold value or - * a list of threshold values, defaulting to [0]. - * @return {Array} A sorted list of unique and valid threshold values. - */ -IntersectionObserver.prototype._initThresholds = function(opt_threshold) { - var threshold = opt_threshold || [0]; - if (!Array.isArray(threshold)) threshold = [threshold]; - - return threshold.sort().filter(function(t, i, a) { - if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) { - throw new Error('threshold must be a number between 0 and 1 inclusively'); - } - return t !== a[i - 1]; - }); -}; - - -/** - * Accepts the rootMargin value from the user configuration object - * and returns an array of the four margin values as an object containing - * the value and unit properties. If any of the values are not properly - * formatted or use a unit other than px or %, and error is thrown. - * @private - * @param {string=} opt_rootMargin An optional rootMargin value, - * defaulting to '0px'. - * @return {Array
" + _this.readme() + ""; + } + }; + _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 */ 239); + + 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); + + +/***/ }), +/* 564 */ +/*!****************************************!*\ + !*** ./dev/Settings/Admin/Branding.js ***! + \****************************************/ +/*! exports provided: BrandingAdminSettings, default */ +/*! all exports used */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrandingAdminSettings", function() { return BrandingAdminSettings; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return BrandingAdminSettings; }); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3); +/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); +/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Enums */ 0); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Translator */ 9); +/* harmony import */ var Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Remote/Admin/Ajax */ 22); +/* harmony import */ var Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/Admin/App */ 78); +/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Storage/Settings */ 5); + + + + + + + + + +var BrandingAdminSettings = /*#__PURE__*/function () { + function BrandingAdminSettings() { + this.capa = Stores_Admin_App__WEBPACK_IMPORTED_MODULE_6__[/* default */ "a"].prem; + this.title = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('Title')).idleTrigger(); + this.loadingDesc = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoadingDescription')).idleTrigger(); + this.faviconUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('FaviconUrl')).idleTrigger(); + this.loginLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginLogo') || '').idleTrigger(); + this.loginBackground = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginBackground') || '').idleTrigger(); + this.userLogo = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogo') || '').idleTrigger(); + this.userLogoMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoMessage') || '').idleTrigger(); + this.userIframeMessage = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserIframeMessage') || '').idleTrigger(); + this.userLogoTitle = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserLogoTitle') || '').idleTrigger(); + this.loginDescription = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginDescription')).idleTrigger(); + this.loginCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('LoginCss')).idleTrigger(); + this.userCss = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('UserCss')).idleTrigger(); + this.welcomePageUrl = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageUrl')).idleTrigger(); + this.welcomePageDisplay = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(Object(Storage_Settings__WEBPACK_IMPORTED_MODULE_7__["settingsGet"])('WelcomePageDisplay')).idleTrigger(); + this.welcomePageDisplay.options = ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].computed(function () { + Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["trigger"])(); + return [{ + optValue: 'none', + optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_NONE') + }, { + optValue: 'once', + optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ONCE') + }, { + optValue: 'always', + optText: Object(Common_Translator__WEBPACK_IMPORTED_MODULE_4__["i18n"])('TAB_BRANDING/OPTION_WELCOME_PAGE_DISPLAY_ALWAYS') + }]; + }); + this.community = true || false; + } + + var _proto = BrandingAdminSettings.prototype; + + _proto.onBuild = function onBuild() { + var _this = this; + + ___WEBPACK_IMPORTED_MODULE_0___default.a.delay(function () { + var f1 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.title.trigger, _this), + f2 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.loadingDesc.trigger, _this), + f3 = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["settingsSaveHelperSimpleFunction"])(_this.faviconUrl.trigger, _this); + + _this.title.subscribe(function (value) { + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f1, { + 'Title': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) + }); + }); + + _this.loadingDesc.subscribe(function (value) { + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f2, { + 'LoadingDescription': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) + }); + }); + + _this.faviconUrl.subscribe(function (value) { + Remote_Admin_Ajax__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].saveAdminConfig(f3, { + 'FaviconUrl': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_3__["trim"])(value) + }); + }); + }, Common_Enums__WEBPACK_IMPORTED_MODULE_2__["Magics"].Time50ms); + }; + + return BrandingAdminSettings; +}(); + + + +/***/ }) +/******/ ]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9FbnVtcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvRXh0ZXJuYWwva28uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9VdGlscy5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuX1wiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvd1wiIiwid2VicGFjazovLy8uL2Rldi9TdG9yYWdlL1NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vR2xvYmFscy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vS25vaW4uanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmpRdWVyeVwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vVHJhbnNsYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbW1vbi9MaW5rcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMtc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LmtleVwiIiwid2VicGFjazovLy8uL2Rldi9SZW1vdGUvQWRtaW4vQWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tbW9uL0NvbnN0cy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RWaWV3TmV4dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL1NvY2lhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZXhwb3J0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vUGx1Z2lucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vQ29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oYXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvc2V0LWludGVydmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTW9tZW50b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuaGFzaGVyXCIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSGVscGVyL0FwcHMvQWRtaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW50cnktdmlydHVhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0xhbmd1YWdlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9BcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL2Rldi9Nb2RlbC9FbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pcy1wdXJlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RJbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL0NhcGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU3RvcmVzL0FkbWluL1BhY2thZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cubW9tZW50XCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwid2luZG93LnByb2dyZXNzSnNcIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSmFzc2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvdmFsdWVzLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvVGhlbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9QbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1N0b3Jlcy9BZG1pbi9MaWNlbnNlLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL2Rldi9Lbm9pbi9BYnN0cmFjdFNjcmVlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS90cmltLmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5zc21cIiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWRtaW4vRG9tYWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wYXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy1zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbmRvdy5jcm9zc3JvYWRzXCIiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9BYnN0cmFjdENoZWNrYm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbWFpbGpzLWFkZHJlc3NwYXJzZXIvZGlzdC9hZGRyZXNzcGFyc2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvbmF0aXZlLXByb21pc2UtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L0NoZWNrYm94LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vSHRtbEVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzLXN0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0V4dGVybmFsL09wZW50aXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Bpa2FkYXkvcGlrYWRheS5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJ3aW5kb3cuQXV0b2xpbmtlclwiIiwid2VicGFjazovLy8uL2Rldi9Db21tb24vTWltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0Fzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvc2V0LXRpbWVvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL3Byb21pc2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFnZ3JlZ2F0ZS1lcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL3NldC1pbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0xhbmd1YWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL2Rldi9TdG9yZXMvQWJzdHJhY3RBcHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvUmVtb3RlL0Fic3RyYWN0QWpheC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2NyZWVuL0Fic3RyYWN0U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvS25vaW4vQWJzdHJhY3RCb290LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvQWJzdHJhY3RSYWRpby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1odG1sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL3RyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9zdHJpbmcvdmlydHVhbC90cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvY29uY2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvYXJyYXkvdmlydHVhbC9jb25jYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9pbnN0YW5jZS9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2luc3RhbmNlL2ZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9vYmplY3QvY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L2NyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9zdGFibGUvYXJyYXkvdmlydHVhbC9mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9yZXZlcnNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2UvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2VzL2FycmF5L3ZpcnR1YWwvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvZXMvaW5zdGFuY2Uvc2xpY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9hcnJheS92aXJ0dWFsL3NsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvc3RhYmxlL29iamVjdC9nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZS9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzLXB1cmUvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2F2ZVRyaWdnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9JbnB1dC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1NlbGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvQ29tcG9uZW50L1JhZGlvLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvVGV4dEFyZWEuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0NvbXBvbmVudC9EYXRlLmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvU2NyaXB0LmpzIiwid2VicGFjazovLy8uL2Rldi9Db21wb25lbnQvTWF0ZXJpYWxEZXNpZ24vQ2hlY2tib3guanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L0FwcC9BZG1pbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9Qb3B1cC9Eb21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NjcmVlbi9BZG1pbi9TZXR0aW5ncy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vR2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vRG9tYWlucy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1NldHRpbmdzL0FkbWluL0NvbnRhY3RzLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9TZWN1cml0eS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vU29jaWFsLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QbHVnaW5zLmpzIiwid2VicGFjazovLy8uL2Rldi9TZXR0aW5ncy9BZG1pbi9QYWNrYWdlcy5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQWJvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudS5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvVmlldy9BZG1pbi9TZXR0aW5ncy9QYW5lLmpzIiwid2VicGFjazovLy8uL2Rldi9TY3JlZW4vQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L1ZpZXcvQWRtaW4vTG9naW4uanMiLCJ3ZWJwYWNrOi8vLy4vZGV2L2FkbWluLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL0RvbWFpbkFsaWFzLmpzIiwid2VicGFjazovLy8uL2Rldi9WaWV3L1BvcHVwL1BsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9kZXYvU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcuanMiXSwibmFtZXMiOlsiRmlsZVR5cGUiLCJTdG9yYWdlUmVzdWx0VHlwZSIsIkZvY3VzZWQiLCJTdGF0ZSIsIlN0YXRlVHlwZSIsIkNhcGEiLCJLZXlTdGF0ZSIsIkZvbGRlclR5cGUiLCJTZXJ2ZXJGb2xkZXJUeXBlIiwiTG9naW5TaWduTWVUeXBlQXNTdHJpbmciLCJMb2dpblNpZ25NZVR5cGUiLCJDb21wb3NlVHlwZSIsIlVwbG9hZEVycm9yQ29kZSIsIlNldFN5c3RlbUZvbGRlcnNOb3RpZmljYXRpb24iLCJDbGllbnRTaWRlS2V5TmFtZSIsIkV2ZW50S2V5Q29kZSIsIk1lc3NhZ2VTZXRBY3Rpb24iLCJNZXNzYWdlU2VsZWN0QWN0aW9uIiwiRGVza3RvcE5vdGlmaWNhdGlvbiIsIk1lc3NhZ2VQcmlvcml0eSIsIkVkaXRvckRlZmF1bHRUeXBlIiwiU2VydmVyU2VjdXJlIiwiU2VhcmNoRGF0ZVR5cGUiLCJTYXZlU2V0dGluZ3NTdGVwIiwiTGF5b3V0IiwiRmlsdGVyQ29uZGl0aW9uRmllbGQiLCJGaWx0ZXJDb25kaXRpb25UeXBlIiwiRmlsdGVyc0FjdGlvbiIsIkZpbHRlclJ1bGVzVHlwZSIsIlNpZ25lZFZlcmlmeVN0YXR1cyIsIkNvbnRhY3RQcm9wZXJ0eVR5cGUiLCJNYWdpY3MiLCJQb3J0cyIsIk5vdGlmaWNhdGlvbiIsImtvIiwid2luZG93IiwiJHdpbiIsIiQiLCJmRGlzcG9zYWxUb29sdGlwSGVscGVyIiwiZWxlbWVudCIsInV0aWxzIiwiZG9tTm9kZURpc3Bvc2FsIiwiYWRkRGlzcG9zZUNhbGxiYWNrIiwiX19vcGVudGlwIiwiZGVhY3RpdmF0ZSIsImJpbmRpbmdIYW5kbGVycyIsInVwZGF0ZVdpZHRoIiwiaW5pdCIsImZWYWx1ZUFjY2Vzc29yIiwiJGVsIiwiZlZhbHVlIiwiZkluaXQiLCJ3aWR0aCIsIlRpbWU1MDBtcyIsIm9uIiwib2ZmIiwiZWRpdG9yIiwiSHRtbEVkaXRvciIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZlVwZGF0ZUVkaXRvclZhbHVlIiwiX19lZGl0b3IiLCJzZXRIdG1sT3JQbGFpbiIsImZVcGRhdGVLb1ZhbHVlIiwiZ2V0RGF0YVdpdGhIdG1sTWFyayIsImZPblJlYWR5IiwiaXNPYnNlcnZhYmxlIiwiX19mZXRjaEVkaXRvclZhbHVlIiwic3Vic2NyaWJlIiwianNvbiIsInRleHQiLCJKU09OIiwic3RyaW5naWZ5IiwidW53cmFwIiwidXBkYXRlIiwic2Nyb2xsZXJTaGFkb3dzIiwibGltaXQiLCJjb250IiwiZkZ1bmMiLCJfIiwidGhyb3R0bGUiLCJ0b2dnbGVDbGFzcyIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsInBpa2FkYXkiLCJmQWxsQmluZGluZ3NBY2Nlc3NvciIsInZpZXdNb2RlbCIsImJpbmRpbmdDb250ZXh0IiwidGV4dElucHV0IiwiUGlrYWRheSIsIl9fcGlrYWRheSIsImZpZWxkIiwidmlzaWJsZUFuaW1hdGVkIiwiYWRkQ2xhc3MiLCJzaG93IiwiaGlkZSIsImRlbGF5IiwicmVtb3ZlQ2xhc3MiLCJ0b29sdGlwIiwiaXNNb2JpbGUiLCJkYXRhIiwiaXNJMThOIiwiR2xvYmFscyIsImJNb2JpbGVEZXZpY2UiLCJzVmFsdWUiLCJpc0Z1bmN0aW9uIiwiT3BlbnRpcCIsImRyb3Bkb3duVmlzaWJpbGl0eSIsInYiLCJzZXRDb250ZW50IiwiYWN0aXZhdGUiLCJUcmFuc2xhdG9yIiwiaTE4biIsInRyaWdnZXIiLCJ0b29sdGlwRXJyb3JUaXAiLCJzdHlsZSIsImhpZGVPbiIsInRpcEpvaW50IiwiZG9jdW1lbnQiLCJ2YWx1ZSIsIm9wZW5UaXBzIiwiaXMiLCJUaW1lMTAwbXMiLCJyZWdpc3RyYXRlQm9vdHN0cmFwRHJvcGRvd24iLCJhQm9vdHN0cmFwRHJvcGRvd25zIiwicHVzaCIsImNsaWNrIiwiZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5Iiwib3BlbkRyb3Bkb3duVHJpZ2dlciIsImhhc0NsYXNzIiwiZHJvcGRvd24iLCJmb2N1cyIsImRyb3Bkb3duQ2xvc2VyIiwiY2xvc2VzdCIsInBvcG92ZXIiLCJjc3N0ZXh0Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJyZXNpemVjcm9wIiwib25LZXlEb3duIiwiZXZlbnQiLCJjYWxsIiwib25FbnRlciIsInBhcnNlSW50Iiwia2V5Q29kZSIsIm9uU3BhY2UiLCJvblRhYiIsInNoaWZ0S2V5Iiwib25Fc2MiLCJjbGlja09uVHJ1ZSIsIm1vZGFsIiwiVXRpbHMiLCJ3aW5kb3dSZXNpemVDYWxsYmFjayIsIiRodG1sIiwibW9tZW50IiwibW9tZW50VG9Ob2RlIiwiaTE4bkluaXQiLCJpMThuVG9Ob2RlcyIsInRyYW5zbGF0b3JJbml0IiwiaTE4blVwZGF0ZSIsImxpbmsiLCJhdHRyIiwidGl0bGUiLCJ0ZXh0RiIsImluaXREb20iLCJpbml0Rml4ZWRUcmlnZ2VyIiwidmFsdWVzIiwidG9wIiwiJGNvbnRhaW5lciIsInJlc2l6ZSIsIm9mZnNldCIsImNzcyIsImluaXRSZXNpemVUcmlnZ2VyIiwib0VsZW1lbnQiLCJwSW50Iiwic2l6ZSIsImhlaWdodCIsImFwcGVuZERvbSIsImVtcHR5IiwiYXBwZW5kIiwiZHJhZ2dhYmxlIiwidHJpZ2dlclpvbmUiLCJzY3JvbGxTcGVlZCIsImZBbGxWYWx1ZUZ1bmMiLCJkcm9wcGFibGVTZWxlY3RvciIsImNvbmYiLCJkaXN0YW5jZSIsImhhbmRsZSIsImN1cnNvckF0IiwibGVmdCIsInJlZnJlc2hQb3NpdGlvbnMiLCJzY3JvbGwiLCJkcmFnIiwic3RvcCIsImhlbHBlciIsImVhY2giLCIkdGhpcyIsImJvdHRvbVBvcyIsImNsZWFySW50ZXJ2YWwiLCJwYWdlWCIsInBhZ2VZIiwibW92ZVVwIiwid2luZG93UmVzaXplIiwibW92ZURvd24iLCJ0YXJnZXQiLCJkYXRhRm9yIiwicmVtb3ZlSW5Gb2N1cyIsImRyb3BwYWJsZSIsImZWYWx1ZUZ1bmMiLCJmT3ZlckNhbGxiYWNrIiwiZHJvcHBhYmxlT3ZlciIsImZPdXRDYWxsYmFjayIsImRyb3BwYWJsZU91dCIsInRvbGVyYW5jZSIsImhvdmVyQ2xhc3MiLCJkcm9wIiwib3ZlciIsIm91dCIsInVpIiwibmFubyIsIlNldHRpbmdzIiwiYkRpc2FibGVOYW5vU2Nyb2xsIiwiYXBwU2V0dGluZ3NHZXQiLCJuYW5vU2Nyb2xsZXIiLCJpT1NOYXRpdmVTY3JvbGxpbmciLCJwcmV2ZW50UGFnZVNjcm9sbGluZyIsInNhdmVUcmlnZ2VyIiwidG9TdHJpbmciLCJlbmQiLCJlbWFpbHNUYWdzIiwiRW1haWxNb2RlbCIsImZBbGxCaW5kaW5ncyIsImZBdXRvQ29tcGxldGVTb3VyY2UiLCJhdXRvQ29tcGxldGVTb3VyY2UiLCJpbnB1dERlbGltaXRlcnMiLCJmRm9jdXNDYWxsYmFjayIsImZvY3VzZWQiLCJpbnB1dG9zYXVydXMiLCJwYXJzZU9uQmx1ciIsImFsbG93RHJhZ0FuZERyb3AiLCJmb2N1c0NhbGxiYWNrIiwic3BsaXRIb29rIiwiaW5kZXhPZiIsInN1YnN0ciIsInNwbGl0RW1haWxMaW5lIiwicGFyc2VIb29rIiwiaW5wdXQiLCJmbGF0dGVuIiwiaW5wdXRWYWx1ZSIsInBhcnNlRW1haWxMaW5lIiwibGVuZ3RoIiwiaXRlbSIsImlzT2JqZWN0IiwidG9MaW5lIiwiY2hhbmdlIiwiJG9FbCIsInZhbCIsImNvbW1hbmQiLCJqcUVsZW1lbnQiLCJpc0NvbW1hbmQiLCJFcnJvciIsImVuYWJsZWQiLCJvYnNlcnZhYmxlIiwiY2FuRXhlY3V0ZSIsIl9fcmVhbENhbkV4ZWN1dGUiLCJjb21wdXRlZCIsInJlc3VsdCIsInByb3AiLCJleHRlbmRlcnMiLCJ0cmltbWVyIiwicmVhZCIsIndyaXRlIiwibmV3VmFsdWUiLCJwb3NJbnRlcmVyIiwiZGVmYXVsdFZhbCIsImxpbWl0ZWRMaXN0IiwiY3VycmVudFZhbHVlIiwibGlzdCIsImlzTm9uRW1wdHlBcnJheSIsImluQXJyYXkiLCJleHRlbmQiLCJub3RpZnkiLCJ2YWx1ZUhhc011dGF0ZWQiLCJyZXZlcnNpYmxlIiwiY29tbWl0IiwicmV2ZXJzZSIsImNvbW1pdGVkVmFsdWUiLCJ0b2dnbGVTdWJzY3JpYmUiLCJvcHRpb25zIiwidG9nZ2xlU3Vic2NyaWJlUHJvcGVydHkiLCJwcmV2IiwibmV4dCIsImZhbHNlVGltZW91dCIsIm9wdGlvbiIsImlGYWxzZVRpbWVvdXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Iiwic3BlY2lhbFRocm90dGxlIiwiaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXRWYWx1ZSIsImlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0IiwidmFsdWVGb3JSZWFkIiwiYlZhbHVlIiwiaWRsZVRyaWdnZXIiLCJJZGxlIiwiZm4iLCJ2YWxpZGF0ZU5vbmUiLCJoYXNFcnJvciIsInZhbGlkYXRlRW1haWwiLCJ0ZXN0IiwidmFsaWRhdGVTaW1wbGVFbWFpbCIsImRlbGV0ZUFjY2Vzc0hlbHBlciIsInZhbGlkYXRlRnVuYyIsImhhc0Z1bmNFcnJvciIsInRyaW0iLCJpc0FycmF5IiwiaXNGdW5jIiwiaXNVbmQiLCJpc1VuZGVmaW5lZCIsImlzTnVsbCIsImhhcyIsImJpbmQiLCJub29wIiwibm9vcFRydWUiLCJub29wRmFsc2UiLCJzaWxlbnRUcnlDYXRjaCIsImZ1bmMiLCJlIiwiaXNOb3JtYWwiLCJpc1Bvc051bWVyaWMiLCJpbmNsdWRlWmVybyIsImRlZmF1bHRWYWx1ciIsImlzTmFOIiwicFN0cmluZyIsInBCb29sIiwiYm9vbFRvQWpheCIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvbXBvbmVudCIsImRlY29kZVVSSUNvbXBvbmVudCIsImRlY29kZVVSSSIsInVybCIsImVuY29kZVVSSSIsInNpbXBsZVF1ZXJ5UGFyc2VyIiwicXVlcnlTdHJpbmciLCJpbmRleCIsImxlbiIsInRlbXAiLCJxdWVyaWVzIiwic3BsaXQiLCJwYXJhbXMiLCJmYWtlTWQ1IiwibGluZSIsImxpbmVMZW4iLCJNYXRoIiwicm91bmQiLCJyYW5kb20iLCJlbmNvZGVIdG1sIiwiZXNjYXBlIiwic3BsaXRQbGFpblRleHQiLCJwcmVmaXgiLCJzdWJUZXh0Iiwic3BhY2VQb3MiLCJuZXdMaW5lUG9zIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJ0aW1lT3V0QWN0aW9uIiwidGltZU91dHMiLCJhY3Rpb24iLCJmRnVuY3Rpb24iLCJ0aW1lT3V0IiwidGltZU91dEFjdGlvblNlY29uZCIsImRlTW9kdWxlIiwibSIsImluRm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiX19pbkZvY3VzQ2FjaGUiLCJmb3JjZSIsImJsdXIiLCJhY3RpdmVFbCIsInJlbW92ZVNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInNlbCIsInJlbW92ZUFsbFJhbmdlcyIsInNlbGVjdGlvbiIsInJlcGx5U3ViamVjdEFkZCIsInN1YmplY3QiLCJ0b1VwcGVyQ2FzZSIsInJlcGxhY2UiLCJyZSIsImZ3ZCIsInBhcnRzIiwicHJlZml4SXNSZSIsInBhcnQiLCJ0cmltbWVkUGFydCIsImpvaW4iLCJyb3VuZE51bWJlciIsIm51bSIsImRlYyIsInBvdyIsImZyaWVuZGx5U2l6ZSIsInNpemVJbkJ5dGVzIiwibG9nIiwiZGVzYyIsImNvbnNvbGUiLCJkZWxlZ2F0ZVJ1biIsIm9iamVjdCIsIm1ldGhvZE5hbWUiLCJraWxsQ3RybEFDdHJsUyIsImN0cmxLZXkiLCJhbHRLZXkiLCJrZXkiLCJ3aGljaCIsIlMiLCJwcmV2ZW50RGVmYXVsdCIsIkEiLCJzZW5kZXIiLCJzcmNFbGVtZW50IiwiY29udGVudEVkaXRhYmxlIiwidGFnTmFtZSIsIm1hdGNoIiwiY2xlYXIiLCJjcmVhdGVDb21tYW5kTGVnYWN5IiwiY29udGV4dCIsImZFeGVjdXRlIiwiZkNhbkV4ZWN1dGUiLCJmUmVzdWx0IiwiZk5vbkVtcHR5IiwiYXJncyIsImFwcGx5IiwiY29udmVydFRoZW1lTmFtZSIsIm1lbW9pemUiLCJ0aGVtZSIsInF1b3RlTmFtZSIsIm5hbWUiLCJtaWNyb3RpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVzdGFtcCIsImNvbnZlcnRMYW5nTmFtZSIsImxhbmd1YWdlIiwiaXNFbmciLCJkcmFnZ2FibGVQbGFjZSIsImFwcGVuZFRvIiwiZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyIiwiZG9tSXRlbSIsImRpc2FibGVkIiwiY2xlYXJCcVN3aXRjaGVyIiwiYm9keSIsInJlbW92ZSIsInJlbW92ZUF0dHIiLCJwcmV2aWV3TWVzc2FnZSIsImlzSHRtbCIsInByaW50IiwiZGF0ZSIsImZyb21DcmVkcyIsInRvQ3JlZHMiLCJ0b0xhYmVsIiwiY2NDbGFzcyIsImNjQ3JlZHMiLCJjY0xhYmVsIiwid2luIiwib3BlbiIsImRvYyIsImJvZHlDbG9uZSIsImNsb25lIiwiYm9keUNsYXNzIiwiaHRtbCIsImNsb3NlIiwic2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24iLCJmQ2FsbGJhY2siLCJrb1RyaWdnZXIiLCJ0aW1lciIsInR5cGUiLCJjYWNoZWQiLCJyZXF1ZXN0QWN0aW9uIiwicmVxdWVzdFBhcmFtZXRlcnMiLCJSZXN1bHQiLCJUcnVlUmVzdWx0IiwiRmFsc2VSZXN1bHQiLCJzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiIsInNldHRpbmdzU2F2ZUhlbHBlclN1YnNjcmliZUZ1bmN0aW9uIiwicmVtb3RlIiwic2V0dGluZ05hbWUiLCJmVHJpZ2dlckZ1bmN0aW9uIiwic2F2ZUFkbWluQ29uZmlnIiwic2F2ZVNldHRpbmdzIiwiZmluZEVtYWlsQW5kTGlua3MiLCJBdXRvbGlua2VyIiwibmV3V2luZG93Iiwic3RyaXBQcmVmaXgiLCJ1cmxzIiwiZW1haWwiLCJtZW50aW9uIiwicGhvbmUiLCJoYXNodGFnIiwicmVwbGFjZUZuIiwiZ2V0VHlwZSIsIm1hdGNoZWRUZXh0IiwiaHRtbFRvUGxhaW4iLCJwb3MiLCJpUDEiLCJpUDIiLCJpUDMiLCJjb252ZXJ0QmxvY2txdW90ZSIsImJsb2NrcXVvdGVUZXh0IiwiY29udmVydERpdnMiLCJkaXZUZXh0IiwiY29udmVydFByZSIsImZpeEF0dGlidXRlVmFsdWUiLCJjb252ZXJ0TGlua3MiLCIkZGl2IiwicGxhaW5Ub0h0bWwiLCJwbGFpbiIsImZpbmRFbWFpbEFuZExpbmtzSW5UZXh0IiwiYkluIiwiYkRvIiwiYlN0YXJ0IiwiYU5leHRUZXh0Iiwic0xpbmUiLCJpSW5kZXgiLCJhVGV4dCIsImZvbGRlckxpc3RPcHRpb25zQnVpbGRlciIsImFTeXN0ZW0iLCJhTGlzdCIsImFEaXNhYmxlZCIsImFIZWFkZXJMaW5lcyIsImlVbkRlZXAiLCJmRGlzYWJsZUNhbGxiYWNrIiwiZlZpc2libGVDYWxsYmFjayIsImZSZW5hbWVDYWxsYmFjayIsImJTeXN0ZW0iLCJiQnVpbGRVbnZpc2libGUiLCJvSXRlbSIsImJTZXAiLCJpTGVuIiwiYVJlc3VsdCIsInNEZWVwUHJlZml4IiwiaWQiLCJzeXN0ZW0iLCJzZXBvcmF0b3IiLCJmdWxsTmFtZVJhdyIsInNlbGVjdGFibGUiLCJzdWJTY3JpYmVkIiwiZXhpc3RlbiIsImhhc1N1YlNjcmliZWRTdWJmb2xkZXJzIiwiVXNlciIsIkFycmF5IiwiZGVlcCIsInN1YkZvbGRlcnMiLCJzZWxlY3RFbGVtZW50IiwicmFuZ2UiLCJjcmVhdGVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsImFkZFJhbmdlIiwiY3JlYXRlVGV4dFJhbmdlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZWxlY3QiLCJkZWJvdW5jZSIsIkdsb2JhbHNEYXRhIiwidHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIiwiY29uZmlndXJhdGlvblNjcmlwdFRhZ0NhY2hlIiwiZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWciLCJjb25maWd1cmF0aW9uIiwicGFyc2UiLCJkaXNwb3NlT25lIiwicHJvcE9yVmFsdWUiLCJkaXNwb3NhYmxlIiwiZGlzcG9zZSIsImRpc3Bvc2VPYmplY3QiLCJkaXNwb3NhYmxlcyIsIm9iamVjdEZvckVhY2giLCJkZWxlZ2F0ZVJ1bk9uRGVzdHJveSIsIm9iamVjdE9yT2JqZWN0cyIsIm9uRGVzdHJveSIsImFwcGVuZFN0eWxlcyIsIiRzdHlsZVRhZyIsIl9fdGhlbWVUaW1lciIsIl9fdGhlbWVBamF4IiwiY2hhbmdlVGhlbWUiLCJ0aGVtZVRyaWdnZXIiLCJ0aGVtZUxpbmsiLCJjbGVhclRpbWVyIiwidGhlbWVTdHlsZSIsIkFuaW1hdGUiLCJhYm9ydCIsImFqYXgiLCJkYXRhVHlwZSIsInRoZW4iLCJhZnRlciIsImNvbXB1dGVkUGFnZW5hdG9ySGVscGVyIiwia29DdXJyZW50UGFnZSIsImtvUGFnZUNvdW50IiwiY3VycmVudFBhZ2UiLCJwYWdlQ291bnQiLCJmQWRkIiwiY3VzdG9tTmFtZSIsImN1cnJlbnQiLCJjdXN0b20iLCJ1bnNoaWZ0IiwiZ2V0RmlsZUV4dGVuc2lvbiIsImZpbGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwb3AiLCJtaW1lQ29udGVudFR5cGUiLCJleHQiLCJNaW1lIiwiaXNUcmFuc3BhcmVudCIsImNvbG9yIiwiZ2V0UmVhbEhlaWdodCIsIiRoY29udCIsInJlc2l6ZUFuZENyb3AiLCJpbWciLCJJbWFnZSIsIm9ubG9hZCIsImRpZmYiLCJjYW52YXMiLCJjcmVhdGVFbGVtZW50IiwiY3R4IiwiZ2V0Q29udGV4dCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiZHJhd0ltYWdlIiwidG9EYXRhVVJMIiwic3JjIiwibWFpbFRvSGVscGVyIiwibWFpbFRvVXJsIiwiUG9wdXBDb21wb3NlVmlld01vZGVsIiwidG8iLCJjYyIsImJjYyIsInF1ZXJ5Iiwic2hvd1NjcmVlblBvcHVwIiwiRW1wdHkiLCJkb21SZWFkeSIsInRpbWVvdXQiLCJTdHJpbmciLCJzdHIiLCJzdGFydCIsIlNFVFRJTkdTIiwiX19ybGFoX2RhdGEiLCJBUFBfU0VUVElOR1MiLCJTeXN0ZW0iLCJzZXR0aW5nc0dldCIsInNldHRpbmdzU2V0IiwiY2FwYSIsIl9fc2l6ZXMiLCIkZG9jIiwiJGJvZHkiLCJwb3NpdGlvbiIsInN0YXJ0TWljcm90aW1lIiwiY29tbXVuaXR5IiwiUkxfQ09NTVVOSVRZIiwicmF0ZUxpbWl0IiwidXNlS2V5Ym9hcmRTaG9ydGN1dHMiLCJzVXNlckFnZW50IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYklFIiwiYkNocm9tZSIsImJTYWZhcmkiLCJiQW5pbWF0aW9uU3VwcG9ydGVkIiwiYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkIiwiWE1MSHR0cFJlcXVlc3QiLCJiSXNIdHRwcyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJodG1sRWRpdG9yRGVmYXVsdENvbmZpZyIsImdyb3VwcyIsImh0bWxFZGl0b3JMYW5nc01hcCIsImJBbGxvd1BkZlByZXZpZXciLCJtaW1lVHlwZXMiLCJWSUVXX01PREVMUyIsInNldHRpbmdzIiwibW92ZUFjdGlvbiIsImxlZnRQYW5lbERpc2FibGVkIiwibGVmdFBhbmVsVHlwZSIsImxlZnRQYW5lbFdpZHRoIiwicG9wdXBWaXNpYmlsaXR5TmFtZXMiLCJvYnNlcnZhYmxlQXJyYXkiLCJwb3B1cFZpc2liaWxpdHkiLCJrZXlTY29wZVJlYWwiLCJBbGwiLCJrZXlTY29wZUZha2UiLCJrZXlTY29wZSIsIk1lbnUiLCJDb21wb3NlIiwiZmlsdGVyIiwiZWwiLCJjbGFzc05hbWUiLCJzZXRTY29wZSIsImdldFNjb3BlIiwiX19BUFBfXyIsImlBamF4RXJyb3JDb3VudCIsImlUb2tlbkVycm9yQ291bnQiLCJpTWVzc2FnZUJvZHlDYWNoZUNvdW50IiwiYlVubG9hZCIsImN1cnJlbnRTY3JlZW4iLCJkZWZhdWx0U2NyZWVuTmFtZSIsIlNDUkVFTlMiLCJWaWV3VHlwZSIsIlBvcHVwIiwiTGVmdCIsIlJpZ2h0IiwiQ2VudGVyIiwiaGlkZUxvYWRpbmciLCJjcmVhdGVDb21tYW5kIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWwiLCJTZXR0aW5nc1ZpZXdNb2RlbENsYXNzIiwidGVtcGxhdGUiLCJsYWJlbE5hbWUiLCJyb3V0ZSIsImlzRGVmYXVsdCIsIl9fcmxTZXR0aW5nc0RhdGEiLCJMYWJlbCIsIlRlbXBsYXRlIiwiUm91dGUiLCJJc0RlZmF1bHQiLCJyZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsImRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbCIsInJvdXRlT2ZmIiwiaGFzaGVyIiwiY2hhbmdlZCIsImFjdGl2ZSIsInJvdXRlT24iLCJzY3JlZW4iLCJzY3JlZW5OYW1lIiwiZ2V0U2NyZWVuUG9wdXAiLCJQb3B1Vmlld01vZGVsQ2xhc3MiLCJoaWRlU2NyZWVuUG9wdXAiLCJWaWV3TW9kZWxDbGFzc1RvSGlkZSIsIk1vZGFsVmlldyIsIl9fdm0iLCJfX2RvbSIsIm1vZGFsVmlzaWJpbGl0eSIsInZtUnVuSG9vayIsImhvb2tOYW1lIiwiVmlld01vZGVsQ2xhc3MiLCJfX25hbWVzIiwicnVuSG9vayIsImJ1aWxkVmlld01vZGVsIiwidm1TY3JlZW4iLCJfX2J1aWxkZWQiLCJ2bURvbSIsInZtIiwiX190eXBlIiwidm1QbGFjZSIsIm9uU2hvd1RyaWdnZXIiLCJvbkhpZGVUcmlnZ2VyIiwidmlld01vZGVsTmFtZSIsIl9fbmFtZSIsInZpZXdNb2RlbE5hbWVzIiwidmlld01vZGVsVGVtcGxhdGVJRCIsIl9fdGVtcGxhdGVJRCIsInZpZXdNb2RlbFBvc2l0aW9uIiwidmlld01vZGVsRG9tIiwiY2FuY2VsQ29tbWFuZCIsImNsb3NlQ29tbWFuZCIsInN0b3JlQW5kU2V0S2V5U2NvcGUiLCJyZXN0b3JlS2V5U2NvcGUiLCJhcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUiLCJyZWdpc3RlclBvcHVwS2V5RG93biIsIlZpZXdNb2RlbENsYXNzVG9TaG93Iiwid2FybVVwU2NyZWVuUG9wdXAiLCJpc1BvcHVwVmlzaWJsZSIsInNjcmVlbk9uUm91dGUiLCJzdWJQYXJ0IiwiaXNTYW1lU2NyZWVuIiwiY3Jvc3MiLCJfX3N0YXJ0ZWQiLCJ2aWV3TW9kZWxzIiwiZGVmZXIiLCJ2aWV3TW9kZWxWaXNpYmlsaXR5IiwiX19jcm9zcyIsInN0YXJ0U2NyZWVucyIsInNjcmVlbnNDbGFzc2VzIiwiQ1NjcmVlbiIsIl9fc3RhcnQiLCJjcm9zc3JvYWRzIiwiY3JlYXRlIiwiYWRkUm91dGUiLCJpbml0aWFsaXplZCIsImFkZCIsInNldEhhc2giLCJoYXNoIiwic2lsZW5jZSIsImNtZCIsInZpZXdEZWNvcmF0b3IiLCJ0ZW1wbGF0ZUlEIiwicG9wdXBEZWNvcmF0b3IiLCJjb21tYW5kRGVjb3JhdG9yIiwiZGVzY3JpcHRvciIsImluaXRpYWxpemVyIiwibm9ybUNhbkV4ZWN1dGUiLCJzZXR0aW5nc01lbnVLZXlzSGFuZGxlciIsIiRpdGVtcyIsImhhbmRsZXIiLCJ1cCIsInNob3J0Y3V0IiwicmVzdWx0SGFzaCIsImVxIiwiVGltZTIwMG1zIiwiSTE4Tl9EQVRBIiwicmFpbmxvb3BJMThOIiwiSTE4Tl9OT1RJRklDQVRJT05fREFUQSIsIkkxOE5fTk9USUZJQ0FUSU9OX01BUCIsIkludmFsaWRUb2tlbiIsIkF1dGhFcnJvciIsIkFjY2Vzc0Vycm9yIiwiQ29ubmVjdGlvbkVycm9yIiwiQ2FwdGNoYUVycm9yIiwiU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUiLCJTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlIiwiU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlIiwiRG9tYWluTm90QWxsb3dlZCIsIkFjY291bnROb3RBbGxvd2VkIiwiQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCIsIkFjY291bnRUd29GYWN0b3JBdXRoRXJyb3IiLCJDb3VsZE5vdFNhdmVOZXdQYXNzd29yZCIsIkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCIsIk5ld1Bhc3N3b3JkU2hvcnQiLCJOZXdQYXNzd29yZFdlYWsiLCJOZXdQYXNzd29yZEZvcmJpZGRlbiIsIkNvbnRhY3RzU3luY0Vycm9yIiwiQ2FudEdldE1lc3NhZ2VMaXN0IiwiQ2FudEdldE1lc3NhZ2UiLCJDYW50RGVsZXRlTWVzc2FnZSIsIkNhbnRNb3ZlTWVzc2FnZSIsIkNhbnRDb3B5TWVzc2FnZSIsIkNhbnRTYXZlTWVzc2FnZSIsIkNhbnRTZW5kTWVzc2FnZSIsIkludmFsaWRSZWNpcGllbnRzIiwiQ2FudFNhdmVGaWx0ZXJzIiwiQ2FudEdldEZpbHRlcnMiLCJGaWx0ZXJzQXJlTm90Q29ycmVjdCIsIkNhbnRDcmVhdGVGb2xkZXIiLCJDYW50UmVuYW1lRm9sZGVyIiwiQ2FudERlbGV0ZUZvbGRlciIsIkNhbnREZWxldGVOb25FbXB0eUZvbGRlciIsIkNhbnRTdWJzY3JpYmVGb2xkZXIiLCJDYW50VW5zdWJzY3JpYmVGb2xkZXIiLCJDYW50U2F2ZVNldHRpbmdzIiwiQ2FudFNhdmVQbHVnaW5TZXR0aW5ncyIsIkRvbWFpbkFscmVhZHlFeGlzdHMiLCJDYW50SW5zdGFsbFBhY2thZ2UiLCJDYW50RGVsZXRlUGFja2FnZSIsIkludmFsaWRQbHVnaW5QYWNrYWdlIiwiVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlIiwiTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSIsIkxpY2Vuc2luZ0V4cGlyZWQiLCJMaWNlbnNpbmdCYW5uZWQiLCJEZW1vU2VuZE1lc3NhZ2VFcnJvciIsIkRlbW9BY2NvdW50RXJyb3IiLCJBY2NvdW50QWxyZWFkeUV4aXN0cyIsIkFjY291bnREb2VzTm90RXhpc3QiLCJNYWlsU2VydmVyRXJyb3IiLCJJbnZhbGlkSW5wdXRBcmd1bWVudCIsIlVua25vd25Ob3RpZmljYXRpb24iLCJVbmtub3duRXJyb3IiLCJ2YWx1ZUxpc3QiLCJkZWZhdWxWYWx1ZSIsInZhbHVlTmFtZSIsImkxOG5Ub05vZGUiLCJlbGVtZW50cyIsImFuaW1hdGUiLCJsZXR0ZXJmeCIsInJlbG9hZERhdGEiLCJtb21lbnRvclJlbG9hZCIsImluaXROb3RpZmljYXRpb25MYW5ndWFnZSIsImZvckVhY2giLCJpbml0T25TdGFydE9yTGFuZ0NoYW5nZSIsInN0YXJ0Q2FsbGJhY2siLCJsYW5nQ2FsbGJhY2siLCJnZXROb3RpZmljYXRpb24iLCJjb2RlIiwibWVzc2FnZSIsImRlZkNvZGUiLCJDbGllbnRWaWV3RXJyb3IiLCJnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UiLCJyZXNwb25zZSIsIkVycm9yQ29kZSIsIkVycm9yTWVzc2FnZSIsImdldFVwbG9hZEVycm9yRGVzY0J5Q29kZSIsIkZpbGVJc1Rvb0JpZyIsIkZpbGVQYXJ0aWFsbHlVcGxvYWRlZCIsIkZpbGVOb1VwbG9hZGVkIiwiTWlzc2luZ1RlbXBGb2xkZXIiLCJGaWxlT25TYXZlaW5nRXJyb3IiLCJyZWxvYWQiLCJhZG1pbiIsInJlc29sdmUiLCJyZWplY3QiLCJsYW5nTGluayIsImNhY2hlIiwiaXNSdGwiLCJST09UIiwiSEFTSF9QUkVGSVgiLCJTRVJWRVJfUFJFRklYIiwiU1VCX1FVRVJZX1BSRUZJWCIsIlZFUlNJT04iLCJXRUJfUFJFRklYIiwiVkVSU0lPTl9QUkVGSVgiLCJTVEFUSUNfUFJFRklYIiwiQURNSU5fSE9TVF9VU0UiLCJBRE1JTl9QQVRIIiwiQVVUSF9QUkVGSVgiLCJwb3B1bGF0ZUF1dGhTdWZmaXgiLCJzdWJRdWVyeVByZWZpeCIsInJvb3QiLCJzdGFydHVwVXJsIiwicm9vdEFkbWluIiwicm9vdFVzZXIiLCJhdHRhY2htZW50UmF3IiwiZG93bmxvYWQiLCJjdXN0b21TcGVjU3VmZml4IiwiYXR0YWNobWVudERvd25sb2FkIiwiYXR0YWNobWVudFByZXZpZXciLCJhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyIsImF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbiIsImF0dGFjaG1lbnRGcmFtZWQiLCJzZXJ2ZXJSZXF1ZXN0IiwidXBsb2FkIiwidXBsb2FkQ29udGFjdHMiLCJ1cGxvYWRCYWNrZ3JvdW5kIiwibWVzc2FnZVZpZXdMaW5rIiwicmVxdWVzdEhhc2giLCJtZXNzYWdlRG93bmxvYWRMaW5rIiwiYXZhdGFyTGluayIsInB1YmxpY0xpbmsiLCJ1c2VyQmFja2dyb3VuZCIsInBocEluZm8iLCJsYW5nIiwiaXNBZG1pbiIsImV4cG9ydENvbnRhY3RzVmNmIiwiZXhwb3J0Q29udGFjdHNDc3YiLCJzb2NpYWxHb29nbGUiLCJ4YXV0aCIsInNvY2lhbFR3aXR0ZXIiLCJzb2NpYWxGYWNlYm9vayIsInN0YXRpY1ByZWZpeCIsInBhdGgiLCJlbXB0eUNvbnRhY3RQaWMiLCJzb3VuZCIsIm5vdGlmaWNhdGlvbk1haWxJY29uIiwib3BlblBncEpzIiwib3BlblBncFdvcmtlckpzIiwib3BlblBncFdvcmtlclBhdGgiLCJ0aGVtZVByZXZpZXdMaW5rIiwiaW5ib3giLCJpbmJveEZvbGRlck5hbWUiLCJhYm91dCIsIm1haWxCb3giLCJmb2xkZXIiLCJwYWdlIiwic2VhcmNoIiwidGhyZWFkVWlkIiwicmVzdWx0VGhyZWFkVWlkIiwiUmVtb3RlQWRtaW5BamF4Iiwib1JlcXVlc3RzIiwiYWRtaW5Mb2dpbiIsInNMb2dpbiIsInNQYXNzd29yZCIsImRlZmF1bHRSZXF1ZXN0IiwiYWRtaW5Mb2dvdXQiLCJvRGF0YSIsInNhdmVBZG1pbkNvbmZpZ0hlbHBlciIsInZhbHVlRm4iLCJkb21haW5MaXN0IiwiYkluY2x1ZGVBbGlhc2VzIiwicGx1Z2luTGlzdCIsInBhY2thZ2VzTGlzdCIsImNvcmVEYXRhIiwidXBkYXRlQ29yZURhdGEiLCJwYWNrYWdlSW5zdGFsbCIsIm9QYWNrYWdlIiwiZmlsZSIsInBhY2thZ2VEZWxldGUiLCJkb21haW4iLCJzTmFtZSIsInBsdWdpbiIsImRvbWFpbkRlbGV0ZSIsImRvbWFpbkRpc2FibGUiLCJiRGlzYWJsZWQiLCJOYW1lIiwiRGlzYWJsZWQiLCJwbHVnaW5TZXR0aW5nc1VwZGF0ZSIsIm9Db25maWciLCJsaWNlbnNpbmciLCJiRm9yY2UiLCJGb3JjZSIsImxpY2Vuc2luZ0FjdGl2YXRlIiwic0RvbWFpbiIsInNLZXkiLCJEb21haW4iLCJLZXkiLCJwbHVnaW5EaXNhYmxlIiwiY3JlYXRlRG9tYWluQWxpYXMiLCJzQWxpYXMiLCJBbGlhcyIsImNyZWF0ZU9yVXBkYXRlRG9tYWluIiwiYkNyZWF0ZSIsInNJbmNIb3N0IiwiaUluY1BvcnQiLCJzSW5jU2VjdXJlIiwiYkluY1Nob3J0TG9naW4iLCJiVXNlU2lldmUiLCJzU2lldmVBbGxvd1JhdyIsInNTaWV2ZUhvc3QiLCJpU2lldmVQb3J0Iiwic1NpZXZlU2VjdXJlIiwic091dEhvc3QiLCJpT3V0UG9ydCIsInNPdXRTZWN1cmUiLCJiT3V0U2hvcnRMb2dpbiIsImJPdXRBdXRoIiwiYk91dFBocE1haWwiLCJzV2hpdGVMaXN0IiwidGVzdENvbm5lY3Rpb25Gb3JEb21haW4iLCJ0ZXN0Q29udGFjdHMiLCJzYXZlTmV3QWRtaW5QYXNzd29yZCIsImFkbWluUGluZyIsIkFic3RyYWN0QWpheFJlbW90ZSIsIlNVQlMiLCJzdWIiLCJzdWJGdW5jIiwic3ViTmFtZSIsInB1YiIsIlBsdWdpbnMiLCJpdGVtcyIsIk1FU1NBR0VTX1BFUl9QQUdFIiwiTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTIiwiQ09OVEFDVFNfUEVSX1BBR0UiLCJERUZBVUxUX0FKQVhfVElNRU9VVCIsIlNFQVJDSF9BSkFYX1RJTUVPVVQiLCJTRU5EX01FU1NBR0VfQUpBWF9USU1FT1VUIiwiU0FWRV9NRVNTQUdFX0FKQVhfVElNRU9VVCIsIkNPTlRBQ1RTX1NZTkNfQUpBWF9USU1FT1VUIiwiVU5VU0VEX09QVElPTl9WQUxVRSIsIkNMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSIsIklNQVBfREVGQVVMVF9QT1JUIiwiSU1BUF9ERUZBVUxUX1NFQ1VSRV9QT1JUIiwiU01UUF9ERUZBVUxUX1BPUlQiLCJTTVRQX0RFRkFVTFRfU0VDVVJFX1BPUlQiLCJTSUVWRV9ERUZBVUxUX1BPUlQiLCJNRVNTQUdFX0JPRFlfQ0FDSEVfTElNSVQiLCJBSkFYX0VSUk9SX0xJTUlUIiwiVE9LRU5fRVJST1JfTElNSVQiLCJSQUlOTE9PUF9UUklBTF9LRVkiLCJEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyIsIkRBVEFfSU1BR0VfVFJBTlNQX1BJQyIsIkRBVEFfSU1BR0VfTEFaWV9QTEFDRUhPTERFUl9QSUMiLCJBYnN0cmFjdFZpZXdOZXh0IiwiYkRpc2FiZUNsb3NlT25Fc2MiLCJzRGVmYXVsdEtleVNjb3BlIiwiTm9uZSIsInNDdXJyZW50S2V5U2NvcGUiLCJFc2MiLCJCYWNrc3BhY2UiLCJTb2NpYWxTdG9yZSIsImdvb2dsZSIsInR3aXR0ZXIiLCJmYWNlYm9vayIsImRyb3Bib3giLCJjbGllbnRJRCIsImNsaWVudFNlY3JldCIsImFwaUtleSIsImxvYWRpbmciLCJ1c2VyTmFtZSIsImxvZ2dpbmVkIiwiYXV0aCIsImF1dGhHbWFpbCIsImRyaXZlIiwicHJldmlldyIsImNsaWVudFNldHRpbmdzIiwiYXBpS2V5U2V0dGluZ3MiLCJhcHBJRCIsImFwcFNlY3JldCIsInN1cHBvcnRlZCIsImNvbnN1bWVyS2V5IiwiY29uc3VtZXJTZWNyZXQiLCJwb3B1bGF0ZSIsImFwcGVuZERyb3Bib3giLCJEcm9wYm94IiwiZ2V0RWxlbWVudEJ5SWQiLCJzY3JpcHQiLCJhcHBlbmRDaGlsZCIsIkFic3RyYWN0Q29tcG9uZW50IiwiZnVuY1RvRGlzcG9zZSIsImNvbXBvbmVudEV4cG9ydEhlbHBlciIsIkNsYXNzT2JqZWN0IiwiY3JlYXRlVmlld01vZGVsIiwiY29tcG9uZW50SW5mbyIsImlubGluZSIsIlNJTVBMRV9IT09LUyIsIlVTRVJfVklFV19NT0RFTFNfSE9PS1MiLCJBRE1JTl9WSUVXX01PREVMU19IT09LUyIsImFkZEhvb2siLCJjYWxsYmFjayIsIm1haW5TZXR0aW5nc0dldCIsInJlbW90ZVJlcXVlc3QiLCJwYXJhbWV0ZXJzIiwiYWRkU2V0dGluZ3NWaWV3TW9kZWxGb3JBZG1pbiIsInJ1blNldHRpbmdzVmlld01vZGVsSG9va3MiLCJLbm9pbiIsInZpZXciLCJwbHVnaW5TZWN0aW9uIiwicGx1Z2lucyIsIkNvcmVBZG1pblN0b3JlIiwiY29yZVJlYWwiLCJjb3JlQ2hhbm5lbCIsImNvcmVUeXBlIiwiY29yZVVwZGF0YWJsZSIsImNvcmVBY2Nlc3MiLCJjb3JlV2FybmluZyIsImNvcmVDaGVja2luZyIsImNvcmVVcGRhdGluZyIsImNvcmVWZXJzaW9uIiwiY29yZVJlbW90ZVZlcnNpb24iLCJjb3JlUmVtb3RlUmVsZWFzZSIsImNvcmVWZXJzaW9uQ29tcGFyZSIsIl9tb21lbnQiLCJfbW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93IiwidXBkYXRlTW9tZW50Tm93VW5peCIsInVuaXgiLCJtb21lbnROb3ciLCJtb21lbnROb3dVbml4Iiwic2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyIiwic3VidHJhY3QiLCJmb3JtYXQiLCJmb3JtYXRDdXN0b21TaG9ydERhdGUiLCJub3ciLCJmcm9tTm93IiwiVElNRSIsInllYXIiLCJ0aW1lU3RhbXBJblVUQyIsImZvcm1hdFN0ciIsInRpbWUiLCJnZXRBcHAiLCJMYW5ndWFnZVN0b3JlIiwibGFuZ3VhZ2VzIiwibGFuZ3VhZ2VzQWRtaW4iLCJsYW5ndWFnZUFkbWluIiwidXNlckxhbmd1YWdlIiwidXNlckxhbmd1YWdlQWRtaW4iLCJhTGFuZ3VhZ2VzIiwiYUxhbmd1YWdlc0FkbWluIiwiQXBwQWRtaW5TdG9yZSIsImRldGVybWluZVVzZXJMYW5ndWFnZSIsImRldGVybWluZVVzZXJEb21haW4iLCJ3ZWFrUGFzc3dvcmQiLCJ1c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMiLCJkYXRhRm9sZGVyQWNjZXNzIiwiZ2V0IiwiQWJzdHJhY3RBcHBTdG9yZSIsImRraW1TdGF0dXMiLCJka2ltVmFsdWUiLCJjbGVhckR1cGxpY2F0ZU5hbWUiLCJuZXdJbnN0YW5jZUZyb21Kc29uIiwiaW5pdEJ5SnNvbiIsInZhbGlkYXRlIiwid2l0aG91dE5hbWUiLCJFbWFpbCIsIkRraW1TdGF0dXMiLCJEa2ltVmFsdWUiLCJmcmllbmRseVZpZXciLCJ3cmFwV2l0aExpbmsiLCJ1c2VFbmNvZGVIdG1sIiwicGFyc2VkUmVzdWx0IiwiYWRkcmVzc3BhcnNlciIsImV4aXN0cyIsImFkZHJlc3MiLCJjb21wYWN0IiwiZW1haWxBZGRyZXNzIiwiQWJzdHJhY3RJbnB1dCIsImxhYmVsIiwicHJlTGFiZWwiLCJlbmFibGUiLCJwbGFjZWhvbGRlciIsImxhYmVsZWQiLCJwcmVMYWJlbGVkIiwidHJpZ2dlcmVkIiwiY2xhc3NGb3JUcmlnZ2VyIiwic3VmZml4VmFsdWUiLCJzZXRUcmlnZ2VyU3RhdGUiLCJDYXBhQWRtaW5TdG9yZSIsImFkZGl0aW9uYWxBY2NvdW50cyIsImlkZW50aXRpZXMiLCJncmF2YXRhciIsImF0dGFjaG1lbnRUaHVtYm5haWxzIiwic2lldmUiLCJmaWx0ZXJzIiwidGhlbWVzIiwib3BlblBHUCIsInR3b0ZhY3RvckF1dGgiLCJ0d29GYWN0b3JBdXRoRm9yY2UiLCJ0ZW1wbGF0ZXMiLCJBZGRpdGlvbmFsQWNjb3VudHMiLCJJZGVudGl0aWVzIiwiR3JhdmF0YXIiLCJBdHRhY2htZW50VGh1bWJuYWlscyIsIlNpZXZlIiwiRmlsdGVycyIsIlRoZW1lcyIsIlVzZXJCYWNrZ3JvdW5kIiwiT3BlblBHUCIsIlR3b0ZhY3RvciIsIlR3b0ZhY3RvckZvcmNlIiwiVGVtcGxhdGVzIiwiUGFja2FnZUFkbWluU3RvcmUiLCJwYWNrYWdlcyIsInBhY2thZ2VzUmVhbCIsInBhY2thZ2VzTWFpblVwZGF0YWJsZSIsImphc3NsIiwiYXN5bmMiLCJhbGwiLCJvbmVycm9yIiwiVGhlbWVTdG9yZSIsInRoZW1lQmFja2dyb3VuZE5hbWUiLCJ0aGVtZUJhY2tncm91bmRIYXNoIiwiUGx1Z2luQWRtaW5TdG9yZSIsImVycm9yIiwiTGljZW5zZUFkbWluU3RvcmUiLCJsaWNlbnNpbmdQcm9jZXNzIiwibGljZW5zZVZhbGlkIiwibGljZW5zZUV4cGlyZWQiLCJsaWNlbnNlRXJyb3IiLCJsaWNlbnNlVHJpZ2dlciIsIkFic3RyYWN0U2NyZWVuIiwib0Nyb3NzIiwic1NjcmVlbk5hbWUiLCJhVmlld01vZGVscyIsInJvdXRlcyIsImZNYXRjaGVyIiwib25Sb3V0ZSIsInJ1bGVzIiwiRG9tYWluQWRtaW5TdG9yZSIsImRvbWFpbnMiLCJkb21haW5zV2l0aG91dEFsaWFzZXMiLCJhbGlhcyIsIkFic3RyYWN0Q2hlY2tib3giLCJkaXNhYmxlIiwicmVhZE9ubHkiLCJpbnZlcnRlZCIsImxhYmVsQW5pbWF0ZWQiLCJDaGVja2JveENvbXBvbmVudCIsIm9uQmx1ciIsIm9uUmVhZHkiLCJvbk1vZGVDaGFuZ2UiLCJibHVyVGltZXIiLCJfX3Jlc2l6YWJsZSIsIl9faW5pdGVkIiwiJGVsZW1lbnQiLCJyZXNpemVFZGl0b3IiLCJydW5PbkJsdXIiLCJibHVyVHJpZ2dlciIsImZvY3VzVHJpZ2dlciIsIm1vZGUiLCJjbGVhckNhY2hlZFNpZ25hdHVyZSIsImV4ZWNDb21tYW5kIiwiY2xlYXJDYWNoZSIsInNldFNpZ25hdHVyZSIsInNpZ25hdHVyZSIsImluc2VydEJlZm9yZSIsImNoZWNrRGlydHkiLCJyZXNldERpcnR5IiwiZ2V0RGF0YSIsIndyYXBJc0h0bWwiLCJfX3BsYWluIiwiZ2V0UmF3RGF0YSIsIm1vZGVUb2dnbGUiLCJzZXRNb2RlIiwic2V0SHRtbCIsInNldFBsYWluIiwic2V0RGF0YSIsInJlcGxhY2VIdG1sIiwiZmluZCIsInNldFJhd0RhdGEiLCJpbml0RnVuYyIsImNvbmZpZyIsImFsbG93U291cmNlIiwiYml0aSIsInRvb2xiYXJHcm91cHMiLCJfX2NmZ0luaXRlZCIsInJlbW92ZUJ1dHRvbnMiLCJyZW1vdmVQbHVnaW5zIiwiZW50ZXJNb2RlIiwiQ0tFRElUT1IiLCJFTlRFUl9CUiIsInNoaWZ0RW50ZXJNb2RlIiwiRU5URVJfUCIsImVudiIsImlzQ29tcGF0aWJsZSIsIlRhYiIsIkZpbGVSZWFkZXIiLCJkYXRhVHJhbnNmZXIiLCJnZXRGaWxlc0NvdW50IiwiZ2V0RmlsZSIsImltYWdlSWQiLCJyZWFkZXIiLCJvbmxvYWRlbmQiLCJyZWFkQXNEYXRhVVJMIiwicmVtb3ZlTWVudUl0ZW0iLCJfX2luaXRFZGl0b3IiLCJoYXNGb2N1cyIsImZvY3VzTWFuYWdlciIsImlubmVySGVpZ2h0Iiwic2V0UmVhZE9ubHkiLCJzdHlsZXMiLCJyYWlubG9vcCIsInJhaW5sb29wVGlwIiwicmFpbmxvb3BFcnJvclRpcCIsIkFza1BvcHVwVmlldyIsInBvcHVwIiwiYXNrRGVzYyIsInllc0J1dHRvbiIsIm5vQnV0dG9uIiwieWVzRm9jdXMiLCJub0ZvY3VzIiwiZlllc0FjdGlvbiIsImZOb0FjdGlvbiIsImJGb2N1c1llc09uU2hvdyIsIlBvcHVwQXNrIiwiY2xlYXJQb3B1cCIsInllc0NsaWNrIiwibm9DbGljayIsIm9uU2hvdyIsImZZZXNGdW5jIiwiZk5vRnVuYyIsImlzRm9jdXNZZXNPblNob3ciLCJvblNob3dXaXRoRGVsYXkiLCJvbkJ1aWxkIiwiTGFuZ3VhZ2VzUG9wdXBWaWV3IiwiZkxhbmciLCJsYW5ncyIsInVzZXIiLCJzZWxlY3RlZCIsImZ1bGxOYW1lIiwic2V0TGFuZ3VhZ2VTZWxlY3Rpb24iLCJsYW5ndWFnZVRvb2x0aXBOYW1lIiwiY3VycmVudExhbmciLCJvbkJlZm9yZVNob3ciLCJmTGFuZ3VhZ2UiLCJjaGFuZ2VMYW5ndWFnZSIsIkFwcCIsInJsIiwicGx1Z2luU2V0dGluZ3NHZXQiLCJwbHVnaW5SZW1vdGVSZXF1ZXN0IiwiRW51bXMiLCJib290c3RhcnQiLCJUaW1lMTBtcyIsIl9fQVBQX0JPT1QiLCJmRXJyb3JDYWxsYmFjayIsInJhaW5sb29wVEVNUExBVEVTIiwiaW5uZXJIVE1MIiwiYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzIiwiYWxsb3dMYW5ndWFnZXNPbkxvZ2luIiwibmV3TW92ZVRvRm9sZGVyIiwiaW50ZXJmYWNlQW5pbWF0aW9uIiwiYW5pbSIsInByZW0iLCJkZWZhdWx0UmVzcG9uc2UiLCJzUmVxdWVzdEFjdGlvbiIsInNUeXBlIiwiYkNhY2hlZCIsIm9SZXF1ZXN0UGFyYW1ldGVycyIsImZDYWxsIiwiU3VjY2VzcyIsIlVubG9hZCIsImxvZ2luQW5kTG9nb3V0UmVsb2FkIiwiQ2xlYXJBdXRoIiwiTG9nb3V0IiwiY2xlYXJDbGllbnRTaWRlVG9rZW4iLCJBYm9ydCIsImFqYXhSZXF1ZXN0IiwiZlJlc3VsdENhbGxiYWNrIiwiaVRpbWVPdXQiLCJzR2V0QWRkIiwiYWJvcnRBY3Rpb25zIiwiaXNQb3N0IiwiaGVhZGVycyIsIkFjdGlvbiIsImFjdGlvblRvQWJvcnQiLCJfX2Fib3J0ZWQiLCJYVG9rZW4iLCJvRGVmQWpheCIsImdsb2JhbCIsImFsd2F5cyIsIlRpbWUiLCJVcGRhdGVUb2tlbiIsInNldENsaWVudFNpZGVUb2tlbiIsImNhdGNoIiwic0FjdGlvbiIsIm9QYXJhbWV0ZXJzIiwiaVRpbWVvdXQiLCJhQWJvcnRBY3Rpb25zIiwiZ2V0UHVibGljS2V5IiwianNWZXJzaW9uIiwic1ZlcnNpb24iLCJBYnN0cmFjdFNldHRpbmdzU2NyZWVuIiwibWVudSIsIm9DdXJyZW50U3ViU2NyZWVuIiwib1ZpZXdNb2RlbFBsYWNlIiwic2V0dXBTZXR0aW5ncyIsInNldHRpbmdzU2NyZWVuIiwiUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwiLCJ2aWV3TW9kZWxQbGFjZSIsIlNldHRpbmdzVmlld01vZGVsIiwiRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCIsInRtcGwiLCJvbkhpZGUiLCJSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCIsIkRlZmF1bHRWaWV3TW9kZWwiLCJkZWZhdWx0Um91dGUiLCJzdWJuYW1lIiwibm9ybWFsaXplXyIsInJxdWVzdCIsInZhbHMiLCJBYnN0cmFjdEFwcCIsImdvb2dsZVByZXZpZXdTdXBwb3J0ZWRDYWNoZSIsImlzTG9jYWxBdXRvY29tcGxldGUiLCJpZnJhbWUiLCJsYXN0RXJyb3JUaW1lIiwiRXZlbnRzIiwiaUgiLCJpVyIsIlRpbWU1MG1zIiwiVGltZTVzIiwiZ2V0QXBwbGljYXRpb25Db25maWd1cmF0aW9uIiwiZGVmYXVsdF8iLCJhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24iLCJvTGluayIsImhyZWYiLCJjcmVhdGVFdmVudCIsIm9FIiwiTW91c2VFdmVudHMiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZ29vZ2xlUHJldmlld1N1cHBvcnRlZCIsInNldFdpbmRvd1RpdGxlIiwicmVkaXJlY3RUb0FkbWluUGFuZWwiLCJfX3JsYWhfY2xlYXIiLCJ0b2tlbiIsIl9fcmxhaF9zZXQiLCJsb2dvdXQiLCJpbklmcmFtZSIsImN1c3RvbUxvZ291dExpbmsiLCJwYXJlbnQiLCJoaXN0b3J5QmFjayIsImhpc3RvcnkiLCJiYWNrIiwibW9iaWxlIiwiY29tcG9uZW50cyIsInJlZ2lzdGVyIiwiVGltZTFzIiwic3NtIiwiYWRkU3RhdGUiLCJvbkxlYXZlIiwiQWJzdHJhY3RCb290IiwiQWJzdHJhY3RSYWRpbyIsIlNhdmVUcmlnZ2VyQ29tcG9uZW50IiwidmVydGljYWxBbGlnbiIsInNldFN0YXRlIiwiSW5wdXRDb21wb25lbnQiLCJTZWxlY3RDb21wb25lbnQiLCJvcHRpb25zVGV4dCIsIm9wdGlvbnNWYWx1ZSIsIm9wdGlvbnNDYXB0aW9uIiwiUmFkaW9Db21wb25lbnQiLCJERUZBVUxUX1JPV1MiLCJUZXh0QXJlYUNvbXBvbmVudCIsInJvd3MiLCJzcGVsbGNoZWNrIiwiRGF0ZUNvbXBvbmVudCIsIlNjcmlwdENvbXBvbmVudCIsInRlbXBsYXRlTm9kZXMiLCJvdXRlckhUTUwiLCJyZXBsYWNlV2l0aCIsIm5vZGVWYWx1ZSIsIkNoZWNrYm94TWF0ZXJpYWxEZXNpZ25Db21wb25lbnQiLCJhbmltYXRpb25Cb3giLCJhbmltYXRpb25DaGVja21hcmsiLCJhbmltYXRpb25Cb3hTZXRUcnVlIiwiYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSIsInRyaWdnZXJBbmltYXRpb24iLCJib3giLCJBZG1pbkFwcCIsIlJlbW90ZSIsInJlbG9hZERvbWFpbkxpc3QiLCJEb21haW5TdG9yZSIsImRlbGV0ZUFjY2VzcyIsInJlbG9hZFBsdWdpbkxpc3QiLCJQbHVnaW5TdG9yZSIsIkVuYWJsZWQiLCJjb25maWd1cmVkIiwiQ29uZmlndXJlZCIsInJlbG9hZFBhY2thZ2VzTGlzdCIsIlBhY2thZ2VTdG9yZSIsIlJlYWwiLCJNYWluVXBkYXRhYmxlIiwiTGlzdCIsImNhbkJlSW5zdGFsbGVkIiwiQ29yZVN0b3JlIiwicmVsb2FkQ29yZURhdGEiLCJDaGFubmVsIiwiVHlwZSIsIlVwZGF0YWJsZSIsIkFjY2VzcyIsIldhcm5pbmciLCJWZXJzaW9uIiwiUmVtb3RlVmVyc2lvbiIsIlJlbW90ZVJlbGVhc2UiLCJWZXJzaW9uQ29tcGFyZSIsInJlbG9hZExpY2Vuc2luZyIsIkxpY2Vuc2VTdG9yZSIsIkV4cGlyZWQiLCJBcHBTdG9yZSIsImJvb3RlbmQiLCJib290ZW5kQ2FsbGJhY2siLCJwcm9ncmVzc0pzIiwiQ2FwYVN0b3JlIiwiU2V0dGluZ3NBZG1pblNjcmVlbiIsIkxvZ2luQWRtaW5TY3JlZW4iLCJEb21haW5Qb3B1cFZpZXciLCJzZWxmIiwiY2FuQmVTYXZlZCIsImNhbkJlVGVzdGVkIiwiZWRpdCIsInNhdmluZyIsInNhdmluZ0Vycm9yIiwic2lldmVTZXR0aW5ncyIsInRlc3RpbmciLCJ0ZXN0aW5nRG9uZSIsInRlc3RpbmdJbWFwRXJyb3IiLCJ0ZXN0aW5nU2lldmVFcnJvciIsInRlc3RpbmdTbXRwRXJyb3IiLCJ0ZXN0aW5nSW1hcEVycm9yRGVzYyIsInRlc3RpbmdTaWV2ZUVycm9yRGVzYyIsInRlc3RpbmdTbXRwRXJyb3JEZXNjIiwiaW1hcFNlcnZlckZvY3VzIiwic2lldmVTZXJ2ZXJGb2N1cyIsInNtdHBTZXJ2ZXJGb2N1cyIsImltYXBTZXJ2ZXIiLCJpbWFwUG9ydCIsImltYXBTZWN1cmUiLCJpbWFwU2hvcnRMb2dpbiIsInVzZVNpZXZlIiwic2lldmVBbGxvd1JhdyIsInNpZXZlU2VydmVyIiwic2lldmVQb3J0Iiwic2lldmVTZWN1cmUiLCJzbXRwU2VydmVyIiwic210cFBvcnQiLCJzbXRwU2VjdXJlIiwic210cFNob3J0TG9naW4iLCJzbXRwQXV0aCIsInNtdHBQaHBNYWlsIiwid2hpdGVMaXN0IiwiYWxpYXNOYW1lIiwiZW5hYmxlU21hcnRQb3J0cyIsImFsbG93U2lldmUiLCJoZWFkZXJUZXh0IiwiZG9tYWluRGVzYyIsImRvbWFpbklzQ29tcHV0ZWQiLCJ1c2VQaHBNYWlsIiwicG9ydCIsIkltYXBTc2wiLCJJbWFwIiwiU210cFNzbCIsIlNtdHBTdGFydFRscyIsIlNtdHAiLCJjcmVhdGVPckFkZENvbW1hbmQiLCJvbkRvbWFpbkNyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwidGVzdENvbm5lY3Rpb25Db21tYW5kIiwib25UZXN0Q29ubmVjdGlvblJlc3BvbnNlIiwid2hpdGVMaXN0Q29tbWFuZCIsImJhY2tDb21tYW5kIiwic2lldmVDb21tYW5kIiwiY2xlYXJUZXN0aW5nIiwic1Jlc3VsdCIsImJJbWFwIiwiYlNpZXZlIiwib0RvbWFpbiIsImNsZWFyRm9ybSIsIkluY0hvc3QiLCJJbmNQb3J0IiwiSW5jU2VjdXJlIiwiSW5jU2hvcnRMb2dpbiIsIlVzZVNpZXZlIiwiU2lldmVBbGxvd1JhdyIsIlNpZXZlSG9zdCIsIlNpZXZlUG9ydCIsIlNpZXZlU2VjdXJlIiwiT3V0SG9zdCIsIk91dFBvcnQiLCJPdXRTZWN1cmUiLCJPdXRTaG9ydExvZ2luIiwiT3V0QXV0aCIsIk91dFVzZVBocE1haWwiLCJXaGl0ZUxpc3QiLCJBbGlhc05hbWUiLCJNZW51U2V0dGluZ3NBZG1pblZpZXciLCJQYW5lU2V0dGluZ3NBZG1pblZpZXciLCJicmFuZGluZyIsIkdlbmVyYWxBZG1pblNldHRpbmdzIiwiRG9tYWluc0FkbWluU2V0dGluZ3MiLCJMb2dpbkFkbWluU2V0dGluZ3MiLCJDb250YWN0c0FkbWluU2V0dGluZ3MiLCJTZWN1cml0eUFkbWluU2V0dGluZ3MiLCJTb2NpYWxBZG1pblNldHRpbmdzIiwiUGx1Z2luc0FkbWluU2V0dGluZ3MiLCJQYWNrYWdlc0FkbWluU2V0dGluZ3MiLCJBYm91dEFkbWluU2V0dGluZ3MiLCJjYXBhVGhlbWVzIiwiY2FwYVVzZXJCYWNrZ3JvdW5kIiwiY2FwYUdyYXZhdGFyIiwiY2FwYUFkZGl0aW9uYWxBY2NvdW50cyIsImNhcGFJZGVudGl0aWVzIiwiY2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzIiwiY2FwYVRlbXBsYXRlcyIsIm1haW5BdHRhY2htZW50TGltaXQiLCJCaXRMZW5ndGgxMDI0IiwidXBsb2FkRGF0YSIsInVwbG9hZERhdGFEZXNjIiwidXBsb2FkX21heF9maWxlc2l6ZSIsInBvc3RfbWF4X3NpemUiLCJ0aGVtZXNPcHRpb25zIiwib3B0VmFsdWUiLCJvcHRUZXh0IiwibGFuZ3VhZ2VGdWxsTmFtZSIsImxhbmd1YWdlQWRtaW5GdWxsTmFtZSIsImF0dGFjaG1lbnRMaW1pdFRyaWdnZXIiLCJsYW5ndWFnZVRyaWdnZXIiLCJsYW5ndWFnZUFkbWluVHJpZ2dlciIsImYxIiwiZjIiLCJmMyIsImZSZWxvYWRMYW5ndWFnZUhlbHBlciIsInNhdmVTZXR0aW5nc1N0ZXAiLCJ0cmFuc2xhdG9yUmVsb2FkIiwic2VsZWN0TGFuZ3VhZ2UiLCJzZWxlY3RMYW5ndWFnZUFkbWluIiwicGhwSW5mb0xpbmsiLCJ2aXNpYmlsaXR5IiwiZG9tYWluRm9yRGVsZXRpb24iLCJvbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0Iiwib25Eb21haW5Mb2FkUmVxdWVzdCIsImNyZWF0ZURvbWFpbiIsImRlbGV0ZURvbWFpbiIsImRpc2FibGVEb21haW4iLCJvRG9tIiwiZG9tYWluSXRlbSIsImRlZmF1bHREb21haW4iLCJkdW1teSIsInBkb0RzbiIsInBkb1VzZXIiLCJlbmFibGVDb250YWN0cyIsImNvbnRhY3RzU3luYyIsInN1cHBvcnRlZFR5cGVzIiwidHlwZXMiLCJnZXRUeXBlTmFtZSIsImNvbnRhY3RzU3VwcG9ydGVkIiwiY29udGFjdHNUeXBlcyIsImNvbnRhY3RzVHlwZXNPcHRpb25zIiwiY29udGFjdHNUeXBlIiwibWFpbkNvbnRhY3RzVHlwZSIsInRlc3RDb250YWN0c1N1Y2Nlc3MiLCJ0ZXN0Q29udGFjdHNFcnJvciIsInRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSIsInBkb1Bhc3N3b3JkIiwicGRvRHNuVHJpZ2dlciIsInBkb1VzZXJUcmlnZ2VyIiwicGRvUGFzc3dvcmRUcmlnZ2VyIiwiY29udGFjdHNUeXBlVHJpZ2dlciIsIm9uVGVzdENvbnRhY3RzUmVzcG9uc2UiLCJ0ZXN0Q29udGFjdHNDb21tYW5kIiwiTWVzc2FnZSIsImY0IiwiZjUiLCJhZG1pblBhc3N3b3JkIiwiY2FwYU9wZW5QR1AiLCJjYXBhVHdvRmFjdG9yQXV0aCIsImNhcGFUd29GYWN0b3JBdXRoRm9yY2UiLCJ2ZXJpZnlTc2xDZXJ0aWZpY2F0ZSIsImFsbG93U2VsZlNpZ25lZCIsImlzVHdvRmFjdG9yRHJvcHBlclNob3duIiwidHdvRmFjdG9yRHJvcHBlclVzZXIiLCJhZG1pbkxvZ2luRXJyb3IiLCJhZG1pblBhc3N3b3JkTmV3IiwiYWRtaW5QYXNzd29yZE5ldzIiLCJhZG1pblBhc3N3b3JkTmV3RXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IiLCJhZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyIsIm9uTmV3QWRtaW5QYXNzd29yZFJlc3BvbnNlIiwic2F2ZU5ld0FkbWluUGFzc3dvcmRDb21tYW5kIiwic2hvd1R3b0ZhY3RvckRyb3BwZXIiLCJXZWFrIiwiZ29vZ2xlRW5hYmxlIiwiZ29vZ2xlRW5hYmxlQXV0aCIsImdvb2dsZUVuYWJsZUF1dGhHbWFpbCIsImdvb2dsZUVuYWJsZURyaXZlIiwiZ29vZ2xlRW5hYmxlUHJldmlldyIsImdvb2dsZUVuYWJsZVJlcXVpcmVDbGllbnRTZXR0aW5ncyIsImdvb2dsZUVuYWJsZVJlcXVpcmVBcGlLZXkiLCJnb29nbGVDbGllbnRJRCIsImdvb2dsZUNsaWVudFNlY3JldCIsImdvb2dsZUFwaUtleSIsImdvb2dsZVRyaWdnZXIxIiwiZ29vZ2xlVHJpZ2dlcjIiLCJnb29nbGVUcmlnZ2VyMyIsImZhY2Vib29rU3VwcG9ydGVkIiwiZmFjZWJvb2tFbmFibGUiLCJmYWNlYm9va0FwcElEIiwiZmFjZWJvb2tBcHBTZWNyZXQiLCJmYWNlYm9va1RyaWdnZXIxIiwiZmFjZWJvb2tUcmlnZ2VyMiIsInR3aXR0ZXJFbmFibGUiLCJ0d2l0dGVyQ29uc3VtZXJLZXkiLCJ0d2l0dGVyQ29uc3VtZXJTZWNyZXQiLCJ0d2l0dGVyVHJpZ2dlcjEiLCJ0d2l0dGVyVHJpZ2dlcjIiLCJkcm9wYm94RW5hYmxlIiwiZHJvcGJveEFwaUtleSIsImRyb3Bib3hUcmlnZ2VyMSIsImY2IiwiZjciLCJmOCIsImVuYWJsZWRQbHVnaW5zIiwicGx1Z2luc0Vycm9yIiwib25QbHVnaW5Mb2FkUmVxdWVzdCIsIm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QiLCJkaXNhYmxlUGx1Z2luIiwiY29uZmlndXJlUGx1Z2luIiwicGFja2FnZXNFcnJvciIsInBhY2thZ2VzQ3VycmVudCIsImluc3RhbGxlZCIsImNvbXBhcmUiLCJwYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSIsInBhY2thZ2VzQXZhaWxhYmxlRm9ySW5zdGFsbGF0aW9uIiwicmVxdWVzdEhlbHBlciIsInBhY2thZ2VUb1JlcXVlc3QiLCJpbnN0YWxsIiwiUmVsb2FkIiwiZGVsZXRlUGFja2FnZSIsInBhY2thZ2VUb0RlbGV0ZSIsImluc3RhbGxQYWNrYWdlIiwicGFja2FnZVRvSW5zdGFsbCIsInZlcnNpb24iLCJhY2Nlc3MiLCJlcnJvckRlc2MiLCJjb3JlUmVtb3RlVmVyc2lvbkh0bWxEZXNjIiwidHJhbnNsYXRvclRyaWdnZXIiLCJzdGF0dXNUeXBlIiwidmVyc2lvblRvQ29tcGFyZSIsImlzQ2hlY2tpbmciLCJpc1VwZGF0aW5nIiwiaXNSZWFsIiwiZG9tIiwiYWRtaW5Eb21haW4iLCJhZG1pbk1hbkxvYWRpbmciLCJhZG1pbk1hbkxvYWRpbmdWaXNpYmlsaXR5IiwibG9nb3V0Q2xpY2siLCJMb2dpbkFkbWluVmlldyIsInN1Ym1pdFJlcXVlc3QiLCJtb2JpbGVEZXZpY2UiLCJoaWRlU3VibWl0QnV0dG9uIiwibG9naW4iLCJwYXNzd29yZCIsImxvZ2luRXJyb3IiLCJwYXNzd29yZEVycm9yIiwibG9naW5FcnJvckFuaW1hdGlvbiIsInBhc3N3b3JkRXJyb3JBbmltYXRpb24iLCJsb2dpbkZvY3VzIiwiZm9ybUhpZGRlbiIsImZvcm1FcnJvciIsInN1Ym1pdEVycm9yIiwic3VibWl0Q29tbWFuZCIsInN1Ym1pdEZvcm0iLCJib290c3RyYXAiLCJEb21haW5BbGlhc1BvcHVwVmlldyIsImRvbWFpbnNPcHRpb25zIiwib25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlIiwiUGx1Z2luUG9wdXBWaWV3IiwiaGFzQ29uZmlndXJhdGlvbiIsIm9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZSIsInNhdmVFcnJvciIsInJlYWRtZSIsImNvbmZpZ3VyZXMiLCJoYXNSZWFkbWUiLCJyZWFkbWVQb3BvdmVyQ29uZiIsInRyeVRvQ2xvc2VQb3B1cCIsInNhdmVDb21tYW5kIiwib1BsdWdpbiIsIlJlYWRtZSIsIkNvbmZpZyIsIlBvcHVwc0Fza1ZpZXdNb2RlbCIsIkJyYW5kaW5nQWRtaW5TZXR0aW5ncyIsImxvYWRpbmdEZXNjIiwiZmF2aWNvblVybCIsImxvZ2luTG9nbyIsImxvZ2luQmFja2dyb3VuZCIsInVzZXJMb2dvIiwidXNlckxvZ29NZXNzYWdlIiwidXNlcklmcmFtZU1lc3NhZ2UiLCJ1c2VyTG9nb1RpdGxlIiwibG9naW5EZXNjcmlwdGlvbiIsImxvZ2luQ3NzIiwidXNlckNzcyIsIndlbGNvbWVQYWdlVXJsIiwid2VsY29tZVBhZ2VEaXNwbGF5Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7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O0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLDhDQUE4Qzs7QUFFMUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZCQUE2QixRQUFRO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsNEJBQTRCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx3REFBd0QsZ0JBQWdCO0FBQ3hFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0QsZ0JBQWdCO0FBQ3BFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLDJCQUEyQiw0QkFBNEI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLHlCQUF5QjtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFdBQVc7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q2cvQyxFQUFFLEdBQUdwb0MscUZBQWdDLENBQUMsS0FBSSxDQUFDc3lDLFVBQUwsQ0FBZ0JscEQsT0FBakIsRUFBMEIsS0FBMUIsQ0FGdEM7O0FBSUEsV0FBSSxDQUFDaUQsS0FBTCxDQUFXL0YsU0FBWCxDQUFxQixVQUFDb0QsS0FBRCxFQUFXO0FBQy9CcTFDLHlFQUFNLENBQUMxK0IsZUFBUCxDQUF1QjZuQyxFQUF2QixFQUEyQjtBQUMxQixtQkFBU3Z5Qyx5REFBSSxDQUFDak0sS0FBRDtBQURhLFNBQTNCO0FBR0EsT0FKRDs7QUFNQSxXQUFJLENBQUMyb0QsV0FBTCxDQUFpQi9yRCxTQUFqQixDQUEyQixVQUFDb0QsS0FBRCxFQUFXO0FBQ3JDcTFDLHlFQUFNLENBQUMxK0IsZUFBUCxDQUF1QjhuQyxFQUF2QixFQUEyQjtBQUMxQixnQ0FBc0J4eUMseURBQUksQ0FBQ2pNLEtBQUQ7QUFEQSxTQUEzQjtBQUdBLE9BSkQ7O0FBTUEsV0FBSSxDQUFDNG9ELFVBQUwsQ0FBZ0Joc0QsU0FBaEIsQ0FBMEIsVUFBQ29ELEtBQUQsRUFBVztBQUNwQ3ExQyx5RUFBTSxDQUFDMStCLGVBQVAsQ0FBdUIrbkMsRUFBdkIsRUFBMkI7QUFDMUIsd0JBQWN6eUMseURBQUksQ0FBQ2pNLEtBQUQ7QUFEUSxTQUEzQjtBQUdBLE9BSkQ7QUFLQSxLQXRCRCxFQXNCR3pGLG1EQUFNLENBQUNpM0MsUUF0QlY7QUF1QkEsRyIsImZpbGUiOiJqcy9hZG1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwicmFpbmxvb3Avdi8wLjAuMC9zdGF0aWMvanMvXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA1NjEpO1xuIiwiLyogZXNsaW50IHF1b3RlLXByb3BzOiAwICovXG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVUeXBlID0ge1xuXHQnVW5rbm93bic6ICd1bmtub3duJyxcblx0J1RleHQnOiAndGV4dCcsXG5cdCdIdG1sJzogJ2h0bWwnLFxuXHQnQ29kZSc6ICdjb2RlJyxcblx0J0VtbCc6ICdlbWwnLFxuXHQnV29yZFRleHQnOiAnd29yZC10ZXh0Jyxcblx0J1BkZic6ICdwZGYnLFxuXHQnSW1hZ2UnOiAnaW1hZ2UnLFxuXHQnQXVkaW8nOiAnYXVkaW8nLFxuXHQnVmlkZW8nOiAndmlkZW8nLFxuXHQnU2hlZXQnOiAnc2hlZXQnLFxuXHQnUHJlc2VudGF0aW9uJzogJ3ByZXNlbnRhdGlvbicsXG5cdCdDZXJ0aWZpY2F0ZSc6ICdjZXJ0aWZpY2F0ZScsXG5cdCdDZXJ0aWZpY2F0ZUJpbic6ICdjZXJ0aWZpY2F0ZS1iaW4nLFxuXHQnQXJjaGl2ZSc6ICdhcmNoaXZlJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgU3RvcmFnZVJlc3VsdFR5cGUgPSB7XG5cdCdTdWNjZXNzJzogJ3N1Y2Nlc3MnLFxuXHQnQWJvcnQnOiAnYWJvcnQnLFxuXHQnRXJyb3InOiAnZXJyb3InLFxuXHQnVW5sb2FkJzogJ3VubG9hZCdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZvY3VzZWQgPSB7XG5cdCdOb25lJzogJ25vbmUnLFxuXHQnTWVzc2FnZUxpc3QnOiAnbWVzc2FnZS1saXN0Jyxcblx0J01lc3NhZ2VWaWV3JzogJ21lc3NhZ2UtdmlldycsXG5cdCdGb2xkZXJMaXN0JzogJ2ZvbGRlci1saXN0J1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU3RhdGUgPSB7XG5cdCdFbXB0eSc6IDEwLFxuXHQnTG9naW4nOiAyMCxcblx0J0F1dGgnOiAzMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU3RhdGVUeXBlID0ge1xuXHQnV2VibWFpbCc6IDAsXG5cdCdBZG1pbic6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IENhcGEgPSB7XG5cdCdUd29GYWN0b3InOiAnVFdPX0ZBQ1RPUicsXG5cdCdUd29GYWN0b3JGb3JjZSc6ICdUV09fRkFDVE9SX0ZPUkNFJyxcblx0J09wZW5QR1AnOiAnT1BFTl9QR1AnLFxuXHQnUHJlZmV0Y2gnOiAnUFJFRkVUQ0gnLFxuXHQnR3JhdmF0YXInOiAnR1JBVkFUQVInLFxuXHQnRm9sZGVycyc6ICdGT0xERVJTJyxcblx0J0NvbXBvc2VyJzogJ0NPTVBPU0VSJyxcblx0J0NvbnRhY3RzJzogJ0NPTlRBQ1RTJyxcblx0J1JlbG9hZCc6ICdSRUxPQUQnLFxuXHQnU2VhcmNoJzogJ1NFQVJDSCcsXG5cdCdTZWFyY2hBZHYnOiAnU0VBUkNIX0FEVicsXG5cdCdNZXNzYWdlQWN0aW9ucyc6ICdNRVNTQUdFX0FDVElPTlMnLFxuXHQnTWVzc2FnZUxpc3RBY3Rpb25zJzogJ01FU1NBR0VMSVNUX0FDVElPTlMnLFxuXHQnQXR0YWNobWVudHNBY3Rpb25zJzogJ0FUVEFDSE1FTlRTX0FDVElPTlMnLFxuXHQnRGFuZ2Vyb3VzQWN0aW9ucyc6ICdEQU5HRVJPVVNfQUNUSU9OUycsXG5cdCdTZXR0aW5ncyc6ICdTRVRUSU5HUycsXG5cdCdIZWxwJzogJ0hFTFAnLFxuXHQnVGhlbWVzJzogJ1RIRU1FUycsXG5cdCdVc2VyQmFja2dyb3VuZCc6ICdVU0VSX0JBQ0tHUk9VTkQnLFxuXHQnU2lldmUnOiAnU0lFVkUnLFxuXHQnRmlsdGVycyc6ICdGSUxURVJTJyxcblx0J0F0dGFjaG1lbnRUaHVtYm5haWxzJzogJ0FUVEFDSE1FTlRfVEhVTUJOQUlMUycsXG5cdCdUZW1wbGF0ZXMnOiAnVEVNUExBVEVTJyxcblx0J0F1dG9Mb2dvdXQnOiAnQVVUT0xPR09VVCcsXG5cdCdBZGRpdGlvbmFsQWNjb3VudHMnOiAnQURESVRJT05BTF9BQ0NPVU5UUycsXG5cdCdJZGVudGl0aWVzJzogJ0lERU5USVRJRVMnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBLZXlTdGF0ZSA9IHtcblx0J0FsbCc6ICdhbGwnLFxuXHQnTm9uZSc6ICdub25lJyxcblx0J0NvbnRhY3RMaXN0JzogJ2NvbnRhY3QtbGlzdCcsXG5cdCdNZXNzYWdlTGlzdCc6ICdtZXNzYWdlLWxpc3QnLFxuXHQnRm9sZGVyTGlzdCc6ICdmb2xkZXItbGlzdCcsXG5cdCdNZXNzYWdlVmlldyc6ICdtZXNzYWdlLXZpZXcnLFxuXHQnQ29tcG9zZSc6ICdjb21wb3NlJyxcblx0J1NldHRpbmdzJzogJ3NldHRpbmdzJyxcblx0J01lbnUnOiAnbWVudScsXG5cdCdQb3B1cENvbXBvc2VPcGVuUEdQJzogJ2NvbXBvc2Utb3Blbi1wZ3AnLFxuXHQnUG9wdXBNZXNzYWdlT3BlblBHUCc6ICdtZXNzYWdlLW9wZW4tcGdwJyxcblx0J1BvcHVwVmlld09wZW5QR1AnOiAndmlldy1vcGVuLXBncCcsXG5cdCdQb3B1cEtleWJvYXJkU2hvcnRjdXRzSGVscCc6ICdwb3B1cC1rZXlib2FyZC1zaG9ydGN1dHMtaGVscCcsXG5cdCdQb3B1cEFzayc6ICdwb3B1cC1hc2snXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBGb2xkZXJUeXBlID0ge1xuXHQnSW5ib3gnOiAxMCxcblx0J1NlbnRJdGVtcyc6IDExLFxuXHQnRHJhZnQnOiAxMixcblx0J1RyYXNoJzogMTMsXG5cdCdTcGFtJzogMTQsXG5cdCdBcmNoaXZlJzogMTUsXG5cdCdOb3RTcGFtJzogODAsXG5cdCdVc2VyJzogOTlcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZlckZvbGRlclR5cGUgPSB7XG5cdCdVU0VSJzogMCxcblx0J0lOQk9YJzogMSxcblx0J1NFTlQnOiAyLFxuXHQnRFJBRlRTJzogMyxcblx0J0pVTksnOiA0LFxuXHQnVFJBU0gnOiA1LFxuXHQnSU1QT1JUQU5UJzogMTAsXG5cdCdGTEFHR0VEJzogMTEsXG5cdCdBTEwnOiAxMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgTG9naW5TaWduTWVUeXBlQXNTdHJpbmcgPSB7XG5cdCdEZWZhdWx0T2ZmJzogJ2RlZmF1bHRvZmYnLFxuXHQnRGVmYXVsdE9uJzogJ2RlZmF1bHRvbicsXG5cdCdVbnVzZWQnOiAndW51c2VkJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTG9naW5TaWduTWVUeXBlID0ge1xuXHQnRGVmYXVsdE9mZic6IDAsXG5cdCdEZWZhdWx0T24nOiAxLFxuXHQnVW51c2VkJzogMlxufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgQ29tcG9zZVR5cGUgPSB7XG5cdCdFbXB0eSc6ICdlbXB0eScsXG5cdCdSZXBseSc6ICdyZXBseScsXG5cdCdSZXBseUFsbCc6ICdyZXBseWFsbCcsXG5cdCdGb3J3YXJkJzogJ2ZvcndhcmQnLFxuXHQnRm9yd2FyZEFzQXR0YWNobWVudCc6ICdmb3J3YXJkLWFzLWF0dGFjaG1lbnQnLFxuXHQnRHJhZnQnOiAnZHJhZnQnLFxuXHQnRWRpdEFzTmV3JzogJ2VkaXRhc25ldydcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFVwbG9hZEVycm9yQ29kZSA9IHtcblx0J05vcm1hbCc6IDAsXG5cdCdGaWxlSXNUb29CaWcnOiAxLFxuXHQnRmlsZVBhcnRpYWxseVVwbG9hZGVkJzogMixcblx0J0ZpbGVOb1VwbG9hZGVkJzogMyxcblx0J01pc3NpbmdUZW1wRm9sZGVyJzogNCxcblx0J0ZpbGVPblNhdmVpbmdFcnJvcic6IDUsXG5cdCdGaWxlVHlwZSc6IDk4LFxuXHQnVW5rbm93bic6IDk5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXRTeXN0ZW1Gb2xkZXJzTm90aWZpY2F0aW9uID0ge1xuXHQnTm9uZSc6IDAsXG5cdCdTZW50JzogMSxcblx0J0RyYWZ0JzogMixcblx0J1NwYW0nOiAzLFxuXHQnVHJhc2gnOiA0LFxuXHQnQXJjaGl2ZSc6IDVcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IENsaWVudFNpZGVLZXlOYW1lID0ge1xuXHQnRm9sZGVyc0xhc2hIYXNoJzogMCxcblx0J01lc3NhZ2VzSW5ib3hMYXN0SGFzaCc6IDEsXG5cdCdNYWlsQm94TGlzdFNpemUnOiAyLFxuXHQnRXhwYW5kZWRGb2xkZXJzJzogMyxcblx0J0ZvbGRlckxpc3RTaXplJzogNCxcblx0J01lc3NhZ2VMaXN0U2l6ZSc6IDUsXG5cdCdMYXN0UmVwbHlBY3Rpb24nOiA2LFxuXHQnTGFzdFNpZ25NZSc6IDcsXG5cdCdDb21wb3NlTGFzdElkZW50aXR5SUQnOiA4LFxuXHQnTWVzc2FnZUhlYWRlckZ1bGxJbmZvJzogOSxcblx0J01lc3NhZ2VBdHRhY2htbmV0Q29udHJvbHMnOiAxMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgRXZlbnRLZXlDb2RlID0ge1xuXHQnQmFja3NwYWNlJzogOCxcblx0J1RhYic6IDksXG5cdCdFbnRlcic6IDEzLFxuXHQnRXNjJzogMjcsXG5cdCdQYWdlVXAnOiAzMyxcblx0J1BhZ2VEb3duJzogMzQsXG5cdCdMZWZ0JzogMzcsXG5cdCdSaWdodCc6IDM5LFxuXHQnVXAnOiAzOCxcblx0J0Rvd24nOiA0MCxcblx0J0VuZCc6IDM1LFxuXHQnSG9tZSc6IDM2LFxuXHQnU3BhY2UnOiAzMixcblx0J0luc2VydCc6IDQ1LFxuXHQnRGVsZXRlJzogNDYsXG5cdCdBJzogNjUsXG5cdCdTJzogODNcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VTZXRBY3Rpb24gPSB7XG5cdCdTZXRTZWVuJzogMCxcblx0J1Vuc2V0U2Vlbic6IDEsXG5cdCdTZXRGbGFnJzogMixcblx0J1Vuc2V0RmxhZyc6IDNcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VTZWxlY3RBY3Rpb24gPSB7XG5cdCdBbGwnOiAwLFxuXHQnTm9uZSc6IDEsXG5cdCdJbnZlcnQnOiAyLFxuXHQnVW5zZWVuJzogMyxcblx0J1NlZW4nOiA0LFxuXHQnRmxhZ2dlZCc6IDUsXG5cdCdVbmZsYWdnZWQnOiA2XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBEZXNrdG9wTm90aWZpY2F0aW9uID0ge1xuXHQnQWxsb3dlZCc6IDAsXG5cdCdOb3RBbGxvd2VkJzogMSxcblx0J0RlbmllZCc6IDIsXG5cdCdOb3RTdXBwb3J0ZWQnOiA5XG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlUHJpb3JpdHkgPSB7XG5cdCdMb3cnOiA1LFxuXHQnTm9ybWFsJzogMyxcblx0J0hpZ2gnOiAxXG59O1xuXG4vKipcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBFZGl0b3JEZWZhdWx0VHlwZSA9IHtcblx0J0h0bWwnOiAnSHRtbCcsXG5cdCdQbGFpbic6ICdQbGFpbicsXG5cdCdIdG1sRm9yY2VkJzogJ0h0bWxGb3JjZWQnLFxuXHQnUGxhaW5Gb3JjZWQnOiAnUGxhaW5Gb3JjZWQnXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZWN1cmUgPSB7XG5cdCdOb25lJzogMCxcblx0J1NTTCc6IDEsXG5cdCdUTFMnOiAyXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBTZWFyY2hEYXRlVHlwZSA9IHtcblx0J0FsbCc6IC0xLFxuXHQnRGF5czMnOiAzLFxuXHQnRGF5czcnOiA3LFxuXHQnTW9udGgnOiAzMFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgU2F2ZVNldHRpbmdzU3RlcCA9IHtcblx0J0FuaW1hdGUnOiAtMixcblx0J0lkbGUnOiAtMSxcblx0J1RydWVSZXN1bHQnOiAxLFxuXHQnRmFsc2VSZXN1bHQnOiAwXG59O1xuXG4vKipcbiAqIEBlbnVtIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBMYXlvdXQgPSB7XG5cdCdOb1ByZXZpZXcnOiAwLFxuXHQnU2lkZVByZXZpZXcnOiAxLFxuXHQnQm90dG9tUHJldmlldyc6IDJcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlckNvbmRpdGlvbkZpZWxkID0ge1xuXHQnRnJvbSc6ICdGcm9tJyxcblx0J1JlY2lwaWVudCc6ICdSZWNpcGllbnQnLFxuXHQnU3ViamVjdCc6ICdTdWJqZWN0Jyxcblx0J0hlYWRlcic6ICdIZWFkZXInLFxuXHQnU2l6ZSc6ICdTaXplJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyQ29uZGl0aW9uVHlwZSA9IHtcblx0J0NvbnRhaW5zJzogJ0NvbnRhaW5zJyxcblx0J05vdENvbnRhaW5zJzogJ05vdENvbnRhaW5zJyxcblx0J0VxdWFsVG8nOiAnRXF1YWxUbycsXG5cdCdOb3RFcXVhbFRvJzogJ05vdEVxdWFsVG8nLFxuXHQnUmVnZXgnOiAnUmVnZXgnLFxuXHQnT3Zlcic6ICdPdmVyJyxcblx0J1VuZGVyJzogJ1VuZGVyJ1xufTtcblxuLyoqXG4gKiBAZW51bSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgRmlsdGVyc0FjdGlvbiA9IHtcblx0J05vbmUnOiAnTm9uZScsXG5cdCdNb3ZlVG8nOiAnTW92ZVRvJyxcblx0J0Rpc2NhcmQnOiAnRGlzY2FyZCcsXG5cdCdWYWNhdGlvbic6ICdWYWNhdGlvbicsXG5cdCdSZWplY3QnOiAnUmVqZWN0Jyxcblx0J0ZvcndhcmQnOiAnRm9yd2FyZCdcbn07XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IEZpbHRlclJ1bGVzVHlwZSA9IHtcblx0J0FsbCc6ICdBbGwnLFxuXHQnQW55JzogJ0FueSdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IFNpZ25lZFZlcmlmeVN0YXR1cyA9IHtcblx0J1Vua25vd25QdWJsaWNLZXlzJzogLTQsXG5cdCdVbmtub3duUHJpdmF0ZUtleSc6IC0zLFxuXHQnVW52ZXJpZmllZCc6IC0yLFxuXHQnRXJyb3InOiAtMSxcblx0J05vbmUnOiAwLFxuXHQnU3VjY2Vzcyc6IDFcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IENvbnRhY3RQcm9wZXJ0eVR5cGUgPSB7XG5cdCdVbmtub3duJzogMCxcblxuXHQnRnVsbE5hbWUnOiAxMCxcblxuXHQnRmlyc3ROYW1lJzogMTUsXG5cdCdMYXN0TmFtZSc6IDE2LFxuXHQnTWlkZGxlTmFtZSc6IDE2LFxuXHQnTmljayc6IDE4LFxuXG5cdCdOYW1lUHJlZml4JzogMjAsXG5cdCdOYW1lU3VmZml4JzogMjEsXG5cblx0J0VtYWlsJzogMzAsXG5cdCdQaG9uZSc6IDMxLFxuXHQnV2ViJzogMzIsXG5cblx0J0JpcnRoZGF5JzogNDAsXG5cblx0J0ZhY2Vib29rJzogOTAsXG5cdCdTa3lwZSc6IDkxLFxuXHQnR2l0SHViJzogOTIsXG5cblx0J05vdGUnOiAxMTAsXG5cblx0J0N1c3RvbSc6IDI1MFxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgTWFnaWNzID0ge1xuXHQnRXZlbnRXaGljaE1vdXNlTWlkZGxlJzogMyxcblx0J2lmdmlzaWJsZUlkbGUxMHMnOiAxMCxcblxuXHQnQml0TGVuZ3RoMjA0OCc6IDIwNDgsXG5cdCdCaXRMZW5ndGgxMDI0JzogMTAyNCxcblxuXHQnU2l6ZTM1MHB4JzogMzUwLFxuXHQnU2l6ZTUwcHgnOiA1MCxcblx0J1NpemUyMHB4JzogMjAsXG5cdCdTaXplMXB4JzogMSxcblxuXHQnVGltZTMwbUluTWluJzogMzAsXG5cblx0J1RpbWU2MG0nOiA2MDAwMCAqIDYwLFxuXHQnVGltZTMwbSc6IDYwMDAwICogMzAsXG5cdCdUaW1lMjBtJzogNjAwMDAgKiAyMCxcblx0J1RpbWUxNW0nOiA2MDAwMCAqIDE1LFxuXHQnVGltZTEwbSc6IDYwMDAwICogMTAsXG5cdCdUaW1lNW0nOiA2MDAwMCAqIDUsXG5cdCdUaW1lM20nOiA2MDAwMCAqIDMsXG5cdCdUaW1lMm0nOiA2MDAwMCAqIDIsXG5cdCdUaW1lMW0nOiA2MDAwMCxcblx0J1RpbWUzMHMnOiAzMDAwMCxcblx0J1RpbWUxMHMnOiAxMDAwMCxcblx0J1RpbWU3cyc6IDcwMDAsXG5cdCdUaW1lNXMnOiA1MDAwLFxuXHQnVGltZTNzJzogMzAwMCxcblx0J1RpbWUxcyc6IDEwMDAsXG5cdCdUaW1lNTAwbXMnOiA1MDAsXG5cdCdUaW1lMzUwbXMnOiAzNTAsXG5cdCdUaW1lMjUwbXMnOiAyNTAsXG5cdCdUaW1lMjAwbXMnOiAyMDAsXG5cdCdUaW1lMTAwbXMnOiAxMDAsXG5cdCdUaW1lNTBtcyc6IDUwLFxuXHQnVGltZTIwbXMnOiAyMCxcblx0J1RpbWUxMG1zJzogMTAsXG5cdCdUaW1lMW1zJzogMVxufTtcblxuLyoqXG4gKiBAZW51bSB7bnVtYmVyfVxuICovXG5leHBvcnQgY29uc3QgUG9ydHMgPSB7XG5cdCdJbWFwJzogMTQzLFxuXHQnSW1hcFNzbCc6IDk5Myxcblx0J1NtdHAnOiAyNSxcblx0J1NtdHBTc2wnOiA0NjUsXG5cdCdTbXRwU3RhcnRUbHMnOiA1ODdcbn07XG5cbi8qKlxuICogQGVudW0ge251bWJlcn1cbiAqL1xuZXhwb3J0IGNvbnN0IE5vdGlmaWNhdGlvbiA9IHtcblx0J0ludmFsaWRUb2tlbic6IDEwMSxcblx0J0F1dGhFcnJvcic6IDEwMixcblx0J0FjY2Vzc0Vycm9yJzogMTAzLFxuXHQnQ29ubmVjdGlvbkVycm9yJzogMTA0LFxuXHQnQ2FwdGNoYUVycm9yJzogMTA1LFxuXHQnU29jaWFsRmFjZWJvb2tMb2dpbkFjY2Vzc0Rpc2FibGUnOiAxMDYsXG5cdCdTb2NpYWxUd2l0dGVyTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA3LFxuXHQnU29jaWFsR29vZ2xlTG9naW5BY2Nlc3NEaXNhYmxlJzogMTA4LFxuXHQnRG9tYWluTm90QWxsb3dlZCc6IDEwOSxcblx0J0FjY291bnROb3RBbGxvd2VkJzogMTEwLFxuXG5cdCdBY2NvdW50VHdvRmFjdG9yQXV0aFJlcXVpcmVkJzogMTIwLFxuXHQnQWNjb3VudFR3b0ZhY3RvckF1dGhFcnJvcic6IDEyMSxcblxuXHQnQ291bGROb3RTYXZlTmV3UGFzc3dvcmQnOiAxMzAsXG5cdCdDdXJyZW50UGFzc3dvcmRJbmNvcnJlY3QnOiAxMzEsXG5cdCdOZXdQYXNzd29yZFNob3J0JzogMTMyLFxuXHQnTmV3UGFzc3dvcmRXZWFrJzogMTMzLFxuXHQnTmV3UGFzc3dvcmRGb3JiaWRkZW4nOiAxMzQsXG5cblx0J0NvbnRhY3RzU3luY0Vycm9yJzogMTQwLFxuXG5cdCdDYW50R2V0TWVzc2FnZUxpc3QnOiAyMDEsXG5cdCdDYW50R2V0TWVzc2FnZSc6IDIwMixcblx0J0NhbnREZWxldGVNZXNzYWdlJzogMjAzLFxuXHQnQ2FudE1vdmVNZXNzYWdlJzogMjA0LFxuXHQnQ2FudENvcHlNZXNzYWdlJzogMjA1LFxuXG5cdCdDYW50U2F2ZU1lc3NhZ2UnOiAzMDEsXG5cdCdDYW50U2VuZE1lc3NhZ2UnOiAzMDIsXG5cdCdJbnZhbGlkUmVjaXBpZW50cyc6IDMwMyxcblxuXHQnQ2FudFNhdmVGaWx0ZXJzJzogMzUxLFxuXHQnQ2FudEdldEZpbHRlcnMnOiAzNTIsXG5cdCdGaWx0ZXJzQXJlTm90Q29ycmVjdCc6IDM1NSxcblxuXHQnQ2FudENyZWF0ZUZvbGRlcic6IDQwMCxcblx0J0NhbnRSZW5hbWVGb2xkZXInOiA0MDEsXG5cdCdDYW50RGVsZXRlRm9sZGVyJzogNDAyLFxuXHQnQ2FudFN1YnNjcmliZUZvbGRlcic6IDQwMyxcblx0J0NhbnRVbnN1YnNjcmliZUZvbGRlcic6IDQwNCxcblx0J0NhbnREZWxldGVOb25FbXB0eUZvbGRlcic6IDQwNSxcblxuXHQnQ2FudFNhdmVTZXR0aW5ncyc6IDUwMSxcblx0J0NhbnRTYXZlUGx1Z2luU2V0dGluZ3MnOiA1MDIsXG5cblx0J0RvbWFpbkFscmVhZHlFeGlzdHMnOiA2MDEsXG5cblx0J0NhbnRJbnN0YWxsUGFja2FnZSc6IDcwMSxcblx0J0NhbnREZWxldGVQYWNrYWdlJzogNzAyLFxuXHQnSW52YWxpZFBsdWdpblBhY2thZ2UnOiA3MDMsXG5cdCdVbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UnOiA3MDQsXG5cblx0J0xpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUnOiA3MTAsXG5cdCdMaWNlbnNpbmdFeHBpcmVkJzogNzExLFxuXHQnTGljZW5zaW5nQmFubmVkJzogNzEyLFxuXG5cdCdEZW1vU2VuZE1lc3NhZ2VFcnJvcic6IDc1MCxcblx0J0RlbW9BY2NvdW50RXJyb3InOiA3NTEsXG5cblx0J0FjY291bnRBbHJlYWR5RXhpc3RzJzogODAxLFxuXHQnQWNjb3VudERvZXNOb3RFeGlzdCc6IDgwMixcblxuXHQnTWFpbFNlcnZlckVycm9yJzogOTAxLFxuXHQnQ2xpZW50Vmlld0Vycm9yJzogOTAyLFxuXHQnSW52YWxpZElucHV0QXJndW1lbnQnOiA5MDMsXG5cblx0J0FqYXhGYWxzZSc6IDk1MCxcblx0J0FqYXhBYm9ydCc6IDk1MSxcblx0J0FqYXhQYXJzZSc6IDk1Mixcblx0J0FqYXhUaW1lb3V0JzogOTUzLFxuXG5cdCdVbmtub3duTm90aWZpY2F0aW9uJzogOTk5LFxuXHQnVW5rbm93bkVycm9yJzogOTk5XG59O1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBPcGVudGlwIGZyb20gJ09wZW50aXAnO1xuaW1wb3J0IFBpa2FkYXkgZnJvbSAncGlrYWRheSc7XG5cbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5cbmNvbnN0IGtvID0gd2luZG93LmtvLFxuXHQkd2luID0gJCh3aW5kb3cpLFxuXHRmRGlzcG9zYWxUb29sdGlwSGVscGVyID0gKGVsZW1lbnQpID0+IHtcblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxua28uYmluZGluZ0hhbmRsZXJzLnVwZGF0ZVdpZHRoID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGZJbml0ID0gKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWUoJGVsLndpZHRoKCkpO1xuXHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0ZlZhbHVlKCRlbC53aWR0aCgpKTtcblx0XHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0XHR9O1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgZkluaXQpO1xuXHRcdGZJbml0KCk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCR3aW4ub2ZmKCdyZXNpemUnLCBmSW5pdCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5lZGl0b3IgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGxldCBlZGl0b3IgPSBudWxsO1xuXG5cdFx0Y29uc3QgZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdEh0bWxFZGl0b3IgPSByZXF1aXJlKCdDb21tb24vSHRtbEVkaXRvcicpLmRlZmF1bHQsXG5cdFx0XHRmVXBkYXRlRWRpdG9yVmFsdWUgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLl9fZWRpdG9yKSB7XG5cdFx0XHRcdFx0ZlZhbHVlLl9fZWRpdG9yLnNldEh0bWxPclBsYWluKGZWYWx1ZSgpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZVcGRhdGVLb1ZhbHVlID0gKCkgPT4ge1xuXHRcdFx0XHRpZiAoZlZhbHVlICYmIGZWYWx1ZS5fX2VkaXRvcikge1xuXHRcdFx0XHRcdGZWYWx1ZShmVmFsdWUuX19lZGl0b3IuZ2V0RGF0YVdpdGhIdG1sTWFyaygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGZPblJlYWR5ID0gKCkgPT4ge1xuXHRcdFx0XHRmVmFsdWUuX19lZGl0b3IgPSBlZGl0b3I7XG5cdFx0XHRcdGZVcGRhdGVFZGl0b3JWYWx1ZSgpO1xuXHRcdFx0fTtcblxuXHRcdGlmIChrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBIdG1sRWRpdG9yKSB7XG5cdFx0XHRlZGl0b3IgPSBuZXcgSHRtbEVkaXRvcihlbGVtZW50LCBmVXBkYXRlS29WYWx1ZSwgZk9uUmVhZHksIGZVcGRhdGVLb1ZhbHVlKTtcblxuXHRcdFx0ZlZhbHVlLl9fZmV0Y2hFZGl0b3JWYWx1ZSA9IGZVcGRhdGVLb1ZhbHVlO1xuXG5cdFx0XHRmVmFsdWUuc3Vic2NyaWJlKGZVcGRhdGVFZGl0b3JWYWx1ZSk7XG5cblx0XHRcdC8vIGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0Ly8gfSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuanNvbiA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KS50ZXh0KHdpbmRvdy5KU09OLnN0cmluZ2lmeShrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHQkKGVsZW1lbnQpLnRleHQod2luZG93LkpTT04uc3RyaW5naWZ5KGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuc2Nyb2xsZXJTaGFkb3dzID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IGxpbWl0ID0gOCxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRjb250ID0gJGVsLmZpbmQoJ1tkYXRhLXNjcm9sbGVyLXNoYWRvd3MtY29udGVudF0nKVswXSB8fCBudWxsLFxuXHRcdFx0ZkZ1bmMgPSBfLnRocm90dGxlKCgpID0+IHtcblx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0LnRvZ2dsZUNsYXNzKCdzY3JvbGxlci1zaGFkb3ctdG9wJywgbGltaXQgPCBjb250LnNjcm9sbFRvcClcblx0XHRcdFx0XHQudG9nZ2xlQ2xhc3MoJ3Njcm9sbGVyLXNoYWRvdy1ib3R0b20nLCBjb250LnNjcm9sbFRvcCArIGxpbWl0IDwgY29udC5zY3JvbGxIZWlnaHQgLSBjb250LmNsaWVudEhlaWdodCk7XG5cdFx0XHR9LCAxMDApO1xuXG5cdFx0aWYgKGNvbnQpIHtcblx0XHRcdCQoY29udCkub24oJ3Njcm9sbCByZXNpemUnLCBmRnVuYyk7XG5cdFx0XHQkd2luLm9uKCdyZXNpemUnLCBmRnVuYyk7XG5cblx0XHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soY29udCwgKCkgPT4ge1xuXHRcdFx0XHQkKGNvbnQpLm9mZigpO1xuXHRcdFx0XHQkd2luLm9mZigncmVzaXplJywgZkZ1bmMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucGlrYWRheSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsLCBiaW5kaW5nQ29udGV4dCkgPT4ge1xuXHRcdGtvLmJpbmRpbmdIYW5kbGVycy50ZXh0SW5wdXQuaW5pdChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCwgYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKFBpa2FkYXkpIHtcblx0XHRcdGVsZW1lbnQuX19waWthZGF5ID0gbmV3IFBpa2FkYXkoe1xuXHRcdFx0XHRmaWVsZDogZWxlbWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudmlzaWJsZUFuaW1hdGVkID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpO1xuXHRcdCRlbC5hZGRDbGFzcygncmwtYW5pbWF0ZWQtaW5pdGVkJyk7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JGVsLnNob3coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLmhpZGUoKTtcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHRpZiAoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKSB7XG5cdFx0XHQkZWwuYWRkQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpLnNob3coKTtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHQkZWwucmVtb3ZlQ2xhc3MoJ3JsLWFuaW1hdGVkLWhpZGRlbicpO1xuXHRcdFx0fSwgMTApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkZWwuaGlkZSgpLnJlbW92ZUNsYXNzKCdybC1hbmltYXRlZC1oaWRkZW4nKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50b29sdGlwID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGlzTW9iaWxlID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLW1vYmlsZScpIHx8ICdvZmYnKSxcblx0XHRcdGlzSTE4TiA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1pMThuJykgfHwgJ29uJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlIHx8IGlzTW9iaWxlKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSAha28uaXNPYnNlcnZhYmxlKGZWYWx1ZSkgJiYgXy5pc0Z1bmN0aW9uKGZWYWx1ZSkgPyBmVmFsdWUoKSA6IGtvLnVud3JhcChmVmFsdWUpO1xuXG5cdFx0XHRlbGVtZW50Ll9fb3BlbnRpcCA9IG5ldyBPcGVudGlwKGVsZW1lbnQsIHtcblx0XHRcdFx0J3N0eWxlJzogJ3JhaW5sb29wVGlwJyxcblx0XHRcdFx0J2VsZW1lbnQnOiBlbGVtZW50LFxuXHRcdFx0XHQndGlwSm9pbnQnOiAkZWwuZGF0YSgndG9vbHRpcC1qb2luJykgfHwgJ2JvdHRvbSdcblx0XHRcdH0pO1xuXG5cdFx0XHRHbG9iYWxzLmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHYpID0+IHtcblx0XHRcdFx0aWYgKHYpIHtcblx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoJycgPT09IHNWYWx1ZSkge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudCgnJyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNJMThOKSB7XG5cdFx0XHRcdGNvbnN0IFRyYW5zbGF0b3IgPSByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpO1xuXG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXG5cdFx0XHRcdFRyYW5zbGF0b3IudHJpZ2dlci5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoVHJhbnNsYXRvci5pMThuKHNWYWx1ZSkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRHbG9iYWxzLmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5zZXRDb250ZW50KFRyYW5zbGF0b3IuaTE4bihzVmFsdWUpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuc2V0Q29udGVudChzVmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHQkd2luLm9uKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJywgKCkgPT4ge1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5oaWRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmRlYWN0aXZhdGUoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQkd2luLm9uKCdybC50b29sdGlwcy5hY3RpdmF0ZScsICgpID0+IHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuYWN0aXZhdGUoKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCAkZWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdGlzTW9iaWxlID0gJ29uJyA9PT0gKCRlbC5kYXRhKCd0b29sdGlwLW1vYmlsZScpIHx8ICdvZmYnKSxcblx0XHRcdGlzSTE4TiA9ICdvbicgPT09ICgkZWwuZGF0YSgndG9vbHRpcC1pMThuJykgfHwgJ29uJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdGlmICgoIUdsb2JhbHMuYk1vYmlsZURldmljZSB8fCBpc01vYmlsZSkgJiYgZWxlbWVudC5fX29wZW50aXApIHtcblx0XHRcdGNvbnN0IHNWYWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSk7XG5cdFx0XHRpZiAoc1ZhbHVlKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoaXNJMThOID8gcmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuKHNWYWx1ZSkgOiBzVmFsdWUpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5hY3RpdmF0ZSgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudC5fX29wZW50aXAuaGlkZSgpO1xuXHRcdFx0XHRlbGVtZW50Ll9fb3BlbnRpcC5kZWFjdGl2YXRlKCk7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLnNldENvbnRlbnQoJycpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRvb2x0aXBFcnJvclRpcCA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCkge1xuXHRcdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHRlbGVtZW50Ll9fb3BlbnRpcCA9IG5ldyBPcGVudGlwKGVsZW1lbnQsIHtcblx0XHRcdHN0eWxlOiAncmFpbmxvb3BFcnJvclRpcCcsXG5cdFx0XHRoaWRlT246ICdtb3VzZW91dCBjbGljaycsXG5cdFx0XHRlbGVtZW50OiBlbGVtZW50LFxuXHRcdFx0dGlwSm9pbnQ6ICRlbC5kYXRhKCd0b29sdGlwLWpvaW4nKSB8fCAndG9wJ1xuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5fX29wZW50aXAuZGVhY3RpdmF0ZSgpO1xuXG5cdFx0JCh3aW5kb3cuZG9jdW1lbnQpLm9uKCdjbGljaycsICgpID0+IHtcblx0XHRcdGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX19vcGVudGlwKSB7XG5cdFx0XHRcdGVsZW1lbnQuX19vcGVudGlwLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGZEaXNwb3NhbFRvb2x0aXBIZWxwZXIoZWxlbWVudCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRcdGZWYWx1ZSA9IGZWYWx1ZUFjY2Vzc29yKCksXG5cdFx0XHR2YWx1ZSA9ICFrby5pc09ic2VydmFibGUoZlZhbHVlKSAmJiBfLmlzRnVuY3Rpb24oZlZhbHVlKSA/IGZWYWx1ZSgpIDoga28udW53cmFwKGZWYWx1ZSksXG5cdFx0XHRvcGVuVGlwcyA9IGVsZW1lbnQuX19vcGVudGlwO1xuXG5cdFx0aWYgKG9wZW5UaXBzKSB7XG5cdFx0XHRpZiAoJycgPT09IHZhbHVlKSB7XG5cdFx0XHRcdG9wZW5UaXBzLmhpZGUoKTtcblx0XHRcdFx0b3BlblRpcHMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRvcGVuVGlwcy5zZXRDb250ZW50KCcnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRcdGlmICgkZWwuaXMoJzp2aXNpYmxlJykpIHtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNldENvbnRlbnQodmFsdWUpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuYWN0aXZhdGUoKTtcblx0XHRcdFx0XHRcdG9wZW5UaXBzLnNob3coKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuaGlkZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuZGVhY3RpdmF0ZSgpO1xuXHRcdFx0XHRcdFx0b3BlblRpcHMuc2V0Q29udGVudCgnJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5yZWdpc3RyYXRlQm9vdHN0cmFwRHJvcGRvd24gPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgR2xvYmFscyA9IHJlcXVpcmUoJ0NvbW1vbi9HbG9iYWxzJyk7XG5cdFx0aWYgKEdsb2JhbHMgJiYgR2xvYmFscy5kYXRhLmFCb290c3RyYXBEcm9wZG93bnMpIHtcblx0XHRcdEdsb2JhbHMuZGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zLnB1c2goJChlbGVtZW50KSk7XG5cblx0XHRcdCQoZWxlbWVudCkuY2xpY2soKCkgPT4ge1xuXHRcdFx0XHRyZXF1aXJlKCdDb21tb24vVXRpbHMnKS5kZXRlY3REcm9wZG93blZpc2liaWxpdHkoKTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdC8vIH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9wZW5Ecm9wZG93blRyaWdnZXIgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblx0XHRcdGlmICghJGVsLmhhc0NsYXNzKCdvcGVuJykpIHtcblx0XHRcdFx0JGVsLmZpbmQoJy5kcm9wZG93bi10b2dnbGUnKS5kcm9wZG93bigndG9nZ2xlJyk7XG5cdFx0XHR9XG5cblx0XHRcdCRlbC5maW5kKCcuZHJvcGRvd24tdG9nZ2xlJykuZm9jdXMoKTtcblxuXHRcdFx0cmVxdWlyZSgnQ29tbW9uL1V0aWxzJykuZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5KCk7XG5cdFx0XHRmVmFsdWVBY2Nlc3NvcigpKGZhbHNlKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5kcm9wZG93bkNsb3NlciA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuY2xvc2VzdCgnLmRyb3Bkb3duJylcblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbScsICgpID0+IHtcblx0XHRcdFx0JChlbGVtZW50KS5kcm9wZG93bigndG9nZ2xlJyk7XG5cdFx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnBvcG92ZXIgPSB7XG5cdGluaXQ6IGZ1bmN0aW9uKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSB7XG5cdFx0JChlbGVtZW50KS5wb3BvdmVyKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkucG9wb3ZlcignZGVzdHJveScpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY3NzdGV4dCA9IHt9O1xua28uYmluZGluZ0hhbmRsZXJzLmNzc3RleHQuaW5pdCA9IGtvLmJpbmRpbmdIYW5kbGVycy5jc3N0ZXh0LnVwZGF0ZSA9IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRpZiAoZWxlbWVudCAmJiBlbGVtZW50LnN0eWxlU2hlZXQgJiYgJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBlbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCkge1xuXHRcdGVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpO1xuXHR9IGVsc2Uge1xuXHRcdCQoZWxlbWVudCkudGV4dChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMucmVzaXplY3JvcCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQuYWRkQ2xhc3MoJ3Jlc2l6ZWNyb3AnKVxuXHRcdFx0LnJlc2l6ZWNyb3Aoe1xuXHRcdFx0XHQnd2lkdGgnOiAnMTAwJyxcblx0XHRcdFx0J2hlaWdodCc6ICcxMDAnLFxuXHRcdFx0XHQnd3JhcHBlckNTUyc6IHtcblx0XHRcdFx0XHQnYm9yZGVyLXJhZGl1cyc6ICcxMHB4J1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRmVmFsdWVBY2Nlc3NvcigpKCk7XG5cdFx0JChlbGVtZW50KS5yZXNpemVjcm9wKHtcblx0XHRcdCd3aWR0aCc6ICcxMDAnLFxuXHRcdFx0J2hlaWdodCc6ICcxMDAnXG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbktleURvd24gPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleWRvd24ua29PbktleURvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCkge1xuXHRcdFx0XHRyZXR1cm4gZlZhbHVlQWNjZXNzb3IoKS5jYWxsKHZpZXdNb2RlbCwgZXZlbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KS5vZmYoJ2tleWRvd24ua29PbktleURvd24nKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uRW50ZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IsIHZpZXdNb2RlbCkgPT4ge1xuXHRcdCQoZWxlbWVudCkub24oJ2tleXByZXNzLmtvT25FbnRlcicsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDEzID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdCQoZWxlbWVudCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5cHJlc3Mua29PbkVudGVyJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vblNwYWNlID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXl1cC5rb09uU3BhY2UnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiAzMiA9PT0gd2luZG93LnBhcnNlSW50KGV2ZW50LmtleUNvZGUsIDEwKSkge1xuXHRcdFx0XHRmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCBldmVudCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdCQoZWxlbWVudCkub2ZmKCdrZXl1cC5rb09uU3BhY2UnKTtcblx0XHR9KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm9uVGFiID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwpID0+IHtcblx0XHQkKGVsZW1lbnQpLm9uKCdrZXlkb3duLmtvT25UYWInLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiA5ID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdHJldHVybiBmVmFsdWVBY2Nlc3NvcigpLmNhbGwodmlld01vZGVsLCAhIWV2ZW50LnNoaWZ0S2V5KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5ZG93bi5rb09uVGFiJyk7XG5cdFx0fSk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5vbkVzYyA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3Nvciwgdmlld01vZGVsKSA9PiB7XG5cdFx0JChlbGVtZW50KS5vbigna2V5dXAua29PbkVzYycsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50ICYmIDI3ID09PSB3aW5kb3cucGFyc2VJbnQoZXZlbnQua2V5Q29kZSwgMTApKSB7XG5cdFx0XHRcdCQoZWxlbWVudCkudHJpZ2dlcignY2hhbmdlJyk7XG5cdFx0XHRcdGZWYWx1ZUFjY2Vzc29yKCkuY2FsbCh2aWV3TW9kZWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHQkKGVsZW1lbnQpLm9mZigna2V5dXAua29PbkVzYycpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuY2xpY2tPblRydWUgPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0aWYgKGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSkge1xuXHRcdFx0JChlbGVtZW50KS5jbGljaygpO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLm1vZGFsID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyk7XG5cblx0XHQkKGVsZW1lbnQpXG5cdFx0XHQudG9nZ2xlQ2xhc3MoJ2ZhZGUnLCAhR2xvYmFscy5iTW9iaWxlRGV2aWNlKVxuXHRcdFx0Lm1vZGFsKHtcblx0XHRcdFx0J2tleWJvYXJkJzogZmFsc2UsXG5cdFx0XHRcdCdzaG93Jzoga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdzaG93bi5rb01vZGFsJywgVXRpbHMud2luZG93UmVzaXplQ2FsbGJhY2spXG5cdFx0XHQuZmluZCgnLmNsb3NlJylcblx0XHRcdC5vbignY2xpY2sua29Nb2RhbCcsICgpID0+IHtcblx0XHRcdFx0ZlZhbHVlQWNjZXNzb3IoKShmYWxzZSk7XG5cdFx0XHR9KTtcblxuXHRcdGtvLnV0aWxzLmRvbU5vZGVEaXNwb3NhbC5hZGREaXNwb3NlQ2FsbGJhY2soZWxlbWVudCwgKCkgPT4ge1xuXHRcdFx0JChlbGVtZW50KVxuXHRcdFx0XHQub2ZmKCdzaG93bi5rb01vZGFsJylcblx0XHRcdFx0LmZpbmQoJy5jbG9zZScpXG5cdFx0XHRcdC5vZmYoJ2NsaWNrLmtvTW9kYWwnKTtcblx0XHR9KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKTtcblxuXHRcdCQoZWxlbWVudCkubW9kYWwoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpID8gJ3Nob3cnIDogJ2hpZGUnKTtcblxuXHRcdGlmIChHbG9iYWxzLiRodG1sLmhhc0NsYXNzKCdybC1hbmltJykpIHtcblx0XHRcdEdsb2JhbHMuJGh0bWwuYWRkQ2xhc3MoJ3JsLW1vZGFsLWFuaW1hdGlvbicpO1xuXHRcdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRcdEdsb2JhbHMuJGh0bWwucmVtb3ZlQ2xhc3MoJ3JsLW1vZGFsLWFuaW1hdGlvbicpO1xuXHRcdFx0fSwgTWFnaWNzLlRpbWU1MDBtcyk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMubW9tZW50ID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vTW9tZW50b3InKS5tb21lbnRUb05vZGUoXG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5hZGRDbGFzcygnbW9tZW50Jylcblx0XHRcdFx0LmRhdGEoJ21vbWVudC10aW1lJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKVxuXHRcdCk7XG5cdH0sXG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL01vbWVudG9yJykubW9tZW50VG9Ob2RlKCQoZWxlbWVudCkuZGF0YSgnbW9tZW50LXRpbWUnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmkxOG5Jbml0ID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdHJlcXVpcmUoJ0NvbW1vbi9UcmFuc2xhdG9yJykuaTE4blRvTm9kZXMoZWxlbWVudCk7XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy50cmFuc2xhdG9ySW5pdCA9IHtcblx0aW5pdDogKGVsZW1lbnQpID0+IHtcblx0XHRyZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG5Ub05vZGVzKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaTE4blVwZGF0ZSA9IHtcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdFx0cmVxdWlyZSgnQ29tbW9uL1RyYW5zbGF0b3InKS5pMThuVG9Ob2RlcyhlbGVtZW50KTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmxpbmsgPSB7XG5cdHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLmF0dHIoJ2hyZWYnLCBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMudGl0bGUgPSB7XG5cdHVwZGF0ZTogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHQkKGVsZW1lbnQpLmF0dHIoJ3RpdGxlJywga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLnRleHRGID0ge1xuXHRpbml0OiBmdW5jdGlvbihlbGVtZW50LCBmVmFsdWVBY2Nlc3Nvcikge1xuXHRcdCQoZWxlbWVudCkudGV4dChrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSkpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdERvbSA9IHtcblx0aW5pdDogZnVuY3Rpb24oZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpIHtcblx0XHRmVmFsdWVBY2Nlc3NvcigpKGVsZW1lbnQpO1xuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuaW5pdEZpeGVkVHJpZ2dlciA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWVzID0ga28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpLFxuXHRcdFx0JGVsID0gJChlbGVtZW50KSxcblx0XHRcdHRvcCA9IHZhbHVlc1sxXSB8fCAwO1xuXG5cdFx0bGV0ICRjb250YWluZXIgPSAkKHZhbHVlc1swXSB8fCBudWxsKTtcblx0XHQkY29udGFpbmVyID0gJGNvbnRhaW5lclswXSA/ICRjb250YWluZXIgOiBudWxsO1xuXHRcdGlmICgkY29udGFpbmVyKSB7XG5cdFx0XHQkd2luLnJlc2l6ZSgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9mZnNldCA9ICRjb250YWluZXIgPyAkY29udGFpbmVyLm9mZnNldCgpIDogbnVsbDtcblx0XHRcdFx0aWYgKG9mZnNldCAmJiBvZmZzZXQudG9wKSB7XG5cdFx0XHRcdFx0JGVsLmNzcygndG9wJywgb2Zmc2V0LnRvcCArIHRvcCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmluaXRSZXNpemVUcmlnZ2VyID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZXMgPSBrby51bndyYXAoZlZhbHVlQWNjZXNzb3IoKSk7XG5cdFx0JChlbGVtZW50KS5jc3Moe1xuXHRcdFx0J2hlaWdodCc6IHZhbHVlc1sxXSxcblx0XHRcdCdtaW4taGVpZ2h0JzogdmFsdWVzWzFdXG5cdFx0fSk7XG5cdH0sXG5cdHVwZGF0ZTogKG9FbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0XHRHbG9iYWxzID0gcmVxdWlyZSgnQ29tbW9uL0dsb2JhbHMnKSxcblx0XHRcdHZhbHVlcyA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKTtcblxuXHRcdGxldCB2YWx1ZSA9IFV0aWxzLnBJbnQodmFsdWVzWzFdKSxcblx0XHRcdHNpemUgPSAwLFxuXHRcdFx0b2Zmc2V0ID0gJChvRWxlbWVudCkub2Zmc2V0KCkudG9wO1xuXG5cdFx0aWYgKDAgPCBvZmZzZXQpIHtcblx0XHRcdG9mZnNldCArPSBVdGlscy5wSW50KHZhbHVlc1syXSk7XG5cdFx0XHRzaXplID0gR2xvYmFscy4kd2luLmhlaWdodCgpIC0gb2Zmc2V0O1xuXG5cdFx0XHRpZiAodmFsdWUgPCBzaXplKSB7XG5cdFx0XHRcdHZhbHVlID0gc2l6ZTtcblx0XHRcdH1cblxuXHRcdFx0JChvRWxlbWVudCkuY3NzKHtcblx0XHRcdFx0J2hlaWdodCc6IHZhbHVlLFxuXHRcdFx0XHQnbWluLWhlaWdodCc6IHZhbHVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5hcHBlbmREb20gPSB7XG5cdHVwZGF0ZTogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yKSA9PiB7XG5cdFx0JChlbGVtZW50KVxuXHRcdFx0LmhpZGUoKVxuXHRcdFx0LmVtcHR5KClcblx0XHRcdC5hcHBlbmQoa28udW53cmFwKGZWYWx1ZUFjY2Vzc29yKCkpKVxuXHRcdFx0LnNob3coKTtcblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyYWdnYWJsZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0VXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKTtcblxuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHRjb25zdCB0cmlnZ2VyWm9uZSA9IDEwMCxcblx0XHRcdFx0c2Nyb2xsU3BlZWQgPSAzLFxuXHRcdFx0XHRmQWxsVmFsdWVGdW5jID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdFx0ZHJvcHBhYmxlU2VsZWN0b3IgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlU2VsZWN0b3IgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZVNlbGVjdG9yIDogJycsXG5cdFx0XHRcdGNvbmYgPSB7XG5cdFx0XHRcdFx0ZGlzdGFuY2U6IDIwLFxuXHRcdFx0XHRcdGhhbmRsZTogJy5kcmFnSGFuZGxlJyxcblx0XHRcdFx0XHRjdXJzb3JBdDogeyB0b3A6IDIyLCBsZWZ0OiAzIH0sXG5cdFx0XHRcdFx0cmVmcmVzaFBvc2l0aW9uczogdHJ1ZSxcblx0XHRcdFx0XHRzY3JvbGw6IHRydWUsXG5cdFx0XHRcdFx0ZHJhZzogbnVsbCxcblx0XHRcdFx0XHRzdG9wOiBudWxsLFxuXHRcdFx0XHRcdGhlbHBlcjogbnVsbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoZHJvcHBhYmxlU2VsZWN0b3IpIHtcblx0XHRcdFx0Y29uZi5kcmFnID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0JChkcm9wcGFibGVTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRcdFx0b2Zmc2V0ID0gJHRoaXMub2Zmc2V0KCksXG5cdFx0XHRcdFx0XHRcdGJvdHRvbVBvcyA9IG9mZnNldC50b3AgKyAkdGhpcy5oZWlnaHQoKTtcblxuXHRcdFx0XHRcdFx0d2luZG93LmNsZWFySW50ZXJ2YWwoJHRoaXMuZGF0YSgndGltZXJTY3JvbGwnKSk7XG5cdFx0XHRcdFx0XHQkdGhpcy5kYXRhKCd0aW1lclNjcm9sbCcsIGZhbHNlKTtcblxuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LnBhZ2VYID49IG9mZnNldC5sZWZ0ICYmIGV2ZW50LnBhZ2VYIDw9IG9mZnNldC5sZWZ0ICsgJHRoaXMud2lkdGgoKSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoZXZlbnQucGFnZVkgPj0gYm90dG9tUG9zIC0gdHJpZ2dlclpvbmUgJiYgZXZlbnQucGFnZVkgPD0gYm90dG9tUG9zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbW92ZVVwID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2Nyb2xsVG9wKCR0aGlzLnNjcm9sbFRvcCgpICsgc2Nyb2xsU3BlZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VXRpbHMud2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgd2luZG93LnNldEludGVydmFsKG1vdmVVcCwgMTApKTtcblx0XHRcdFx0XHRcdFx0XHRtb3ZlVXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChldmVudC5wYWdlWSA+PSBvZmZzZXQudG9wICYmIGV2ZW50LnBhZ2VZIDw9IG9mZnNldC50b3AgKyB0cmlnZ2VyWm9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1vdmVEb3duID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0JHRoaXMuc2Nyb2xsVG9wKCR0aGlzLnNjcm9sbFRvcCgpIC0gc2Nyb2xsU3BlZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0VXRpbHMud2luZG93UmVzaXplKCk7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJywgd2luZG93LnNldEludGVydmFsKG1vdmVEb3duLCAxMCkpO1xuXHRcdFx0XHRcdFx0XHRcdG1vdmVEb3duKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25mLnN0b3AgPSAoKSA9PiB7XG5cdFx0XHRcdFx0JChkcm9wcGFibGVTZWxlY3RvcikuZWFjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGNvbnN0ICR0aGlzID0gJCh0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0XHRcdHdpbmRvdy5jbGVhckludGVydmFsKCR0aGlzLmRhdGEoJ3RpbWVyU2Nyb2xsJykpO1xuXHRcdFx0XHRcdFx0JHRoaXMuZGF0YSgndGltZXJTY3JvbGwnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGNvbmYuaGVscGVyID0gKGV2ZW50KSA9PiBmVmFsdWVBY2Nlc3NvcigpKGV2ZW50ICYmIGV2ZW50LnRhcmdldCA/IGtvLmRhdGFGb3IoZXZlbnQudGFyZ2V0KSA6IG51bGwpO1xuXG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5kcmFnZ2FibGUoY29uZilcblx0XHRcdFx0Lm9uKCdtb3VzZWRvd24ua29EcmFnZ2FibGUnLCAoKSA9PiB7XG5cdFx0XHRcdFx0VXRpbHMucmVtb3ZlSW5Gb2N1cygpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0a28udXRpbHMuZG9tTm9kZURpc3Bvc2FsLmFkZERpc3Bvc2VDYWxsYmFjayhlbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRcdCQoZWxlbWVudClcblx0XHRcdFx0XHQub2ZmKCdtb3VzZWRvd24ua29EcmFnZ2FibGUnKVxuXHRcdFx0XHRcdC5kcmFnZ2FibGUoJ2Rlc3Ryb3knKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmRyb3BwYWJsZSA9IHtcblx0aW5pdDogKGVsZW1lbnQsIGZWYWx1ZUFjY2Vzc29yLCBmQWxsQmluZGluZ3NBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpO1xuXHRcdGlmICghR2xvYmFscy5iTW9iaWxlRGV2aWNlKSB7XG5cdFx0XHRjb25zdCBmVmFsdWVGdW5jID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdFx0ZkFsbFZhbHVlRnVuYyA9IGZBbGxCaW5kaW5nc0FjY2Vzc29yKCksXG5cdFx0XHRcdGZPdmVyQ2FsbGJhY2sgPSBmQWxsVmFsdWVGdW5jICYmIGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3ZlciA/IGZBbGxWYWx1ZUZ1bmMuZHJvcHBhYmxlT3ZlciA6IG51bGwsXG5cdFx0XHRcdGZPdXRDYWxsYmFjayA9IGZBbGxWYWx1ZUZ1bmMgJiYgZkFsbFZhbHVlRnVuYy5kcm9wcGFibGVPdXQgPyBmQWxsVmFsdWVGdW5jLmRyb3BwYWJsZU91dCA6IG51bGwsXG5cdFx0XHRcdGNvbmYgPSB7XG5cdFx0XHRcdFx0dG9sZXJhbmNlOiAncG9pbnRlcicsXG5cdFx0XHRcdFx0aG92ZXJDbGFzczogJ2Ryb3BwYWJsZUhvdmVyJyxcblx0XHRcdFx0XHRkcm9wOiBudWxsLFxuXHRcdFx0XHRcdG92ZXI6IG51bGwsXG5cdFx0XHRcdFx0b3V0OiBudWxsXG5cdFx0XHRcdH07XG5cblx0XHRcdGlmIChmVmFsdWVGdW5jKSB7XG5cdFx0XHRcdGNvbmYuZHJvcCA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRmVmFsdWVGdW5jKGV2ZW50LCB1aSk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKGZPdmVyQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRjb25mLm92ZXIgPSAoZXZlbnQsIHVpKSA9PiB7XG5cdFx0XHRcdFx0XHRmT3ZlckNhbGxiYWNrKGV2ZW50LCB1aSk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmT3V0Q2FsbGJhY2spIHtcblx0XHRcdFx0XHRjb25mLm91dCA9IChldmVudCwgdWkpID0+IHtcblx0XHRcdFx0XHRcdGZPdXRDYWxsYmFjayhldmVudCwgdWkpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQkKGVsZW1lbnQpLmRyb3BwYWJsZShjb25mKTtcblxuXHRcdFx0XHRrby51dGlscy5kb21Ob2RlRGlzcG9zYWwuYWRkRGlzcG9zZUNhbGxiYWNrKGVsZW1lbnQsICgpID0+IHtcblx0XHRcdFx0XHQkKGVsZW1lbnQpLmRyb3BwYWJsZSgnZGVzdHJveScpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5uYW5vID0ge1xuXHRpbml0OiAoZWxlbWVudCkgPT4ge1xuXHRcdGNvbnN0IEdsb2JhbHMgPSByZXF1aXJlKCdDb21tb24vR2xvYmFscycpLFxuXHRcdFx0U2V0dGluZ3MgPSByZXF1aXJlKCdTdG9yYWdlL1NldHRpbmdzJyk7XG5cblx0XHRpZiAoIUdsb2JhbHMuYkRpc2FibGVOYW5vU2Nyb2xsICYmICFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgndXNlTmF0aXZlU2Nyb2xsYmFycycpKSB7XG5cdFx0XHQkKGVsZW1lbnQpXG5cdFx0XHRcdC5hZGRDbGFzcygnbmFubycpXG5cdFx0XHRcdC5uYW5vU2Nyb2xsZXIoe1xuXHRcdFx0XHRcdGlPU05hdGl2ZVNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0cHJldmVudFBhZ2VTY3JvbGxpbmc6IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59O1xuXG5rby5iaW5kaW5nSGFuZGxlcnMuc2F2ZVRyaWdnZXIgPSB7XG5cdGluaXQ6IChlbGVtZW50KSA9PiB7XG5cdFx0Y29uc3QgJGVsID0gJChlbGVtZW50KTtcblxuXHRcdCRlbC5kYXRhKFxuXHRcdFx0J3NhdmUtdHJpZ2dlci10eXBlJyxcblx0XHRcdCRlbC5pcygnaW5wdXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPWVtYWlsXSxpbnB1dFt0eXBlPXBhc3N3b3JkXSxzZWxlY3QsdGV4dGFyZWEnKSA/ICdpbnB1dCcgOiAnY3VzdG9tJ1xuXHRcdCk7XG5cblx0XHRpZiAoJ2N1c3RvbScgPT09ICRlbC5kYXRhKCdzYXZlLXRyaWdnZXItdHlwZScpKSB7XG5cdFx0XHQkZWxcblx0XHRcdFx0LmFwcGVuZChcblx0XHRcdFx0XHQnJm5ic3A7Jm5ic3A7JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLXNwaW5uZXIgYW5pbWF0ZWRcIj48L2k+JyArXG5cdFx0XHRcdFx0XHQnPGkgY2xhc3M9XCJpY29uLXJlbW92ZSBlcnJvclwiPjwvaT4nICtcblx0XHRcdFx0XHRcdCc8aSBjbGFzcz1cImljb24tb2sgc3VjY2Vzc1wiPjwvaT4nXG5cdFx0XHRcdClcblx0XHRcdFx0LmFkZENsYXNzKCdzZXR0aW5ncy1zYXZlZC10cmlnZ2VyJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdCRlbC5hZGRDbGFzcygnc2V0dGluZ3Mtc2F2ZWQtdHJpZ2dlci1pbnB1dCcpO1xuXHRcdH1cblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IGtvLnVud3JhcChmVmFsdWVBY2Nlc3NvcigpKSxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCk7XG5cblx0XHRpZiAoJ2N1c3RvbScgPT09ICRlbC5kYXRhKCdzYXZlLXRyaWdnZXItdHlwZScpKSB7XG5cdFx0XHRzd2l0Y2ggKHZhbHVlLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkLC5lcnJvcicpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLnN1Y2Nlc3MnKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdCRlbFxuXHRcdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yJylcblx0XHRcdFx0XHRcdC5zaG93KClcblx0XHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICctMic6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHRcdC5maW5kKCcuYW5pbWF0ZWQnKVxuXHRcdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0JGVsXG5cdFx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3dpdGNoICh2YWx1ZS50b1N0cmluZygpKSB7XG5cdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdCRlbC5hZGRDbGFzcygnc3VjY2VzcycpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcwJzpcblx0XHRcdFx0XHQkZWwuYWRkQ2xhc3MoJ2Vycm9yJykucmVtb3ZlQ2xhc3MoJ3N1Y2Nlc3MnKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLTInOlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdCRlbC5yZW1vdmVDbGFzcygnZXJyb3Igc3VjY2VzcycpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxua28uYmluZGluZ0hhbmRsZXJzLmVtYWlsc1RhZ3MgPSB7XG5cdGluaXQ6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvciwgZkFsbEJpbmRpbmdzQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBVdGlscyA9IHJlcXVpcmUoJ0NvbW1vbi9VdGlscycpLFxuXHRcdFx0RW1haWxNb2RlbCA9IHJlcXVpcmUoJ01vZGVsL0VtYWlsJykuZGVmYXVsdCxcblx0XHRcdCRlbCA9ICQoZWxlbWVudCksXG5cdFx0XHRmVmFsdWUgPSBmVmFsdWVBY2Nlc3NvcigpLFxuXHRcdFx0ZkFsbEJpbmRpbmdzID0gZkFsbEJpbmRpbmdzQWNjZXNzb3IoKSxcblx0XHRcdGZBdXRvQ29tcGxldGVTb3VyY2UgPSBmQWxsQmluZGluZ3MuYXV0b0NvbXBsZXRlU291cmNlIHx8IG51bGwsXG5cdFx0XHRpbnB1dERlbGltaXRlcnMgPSBbJywnLCAnOycsICdcXG4nXSxcblx0XHRcdGZGb2N1c0NhbGxiYWNrID0gKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmIChmVmFsdWUgJiYgZlZhbHVlLmZvY3VzZWQpIHtcblx0XHRcdFx0XHRmVmFsdWUuZm9jdXNlZCghIXZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdCRlbC5pbnB1dG9zYXVydXMoe1xuXHRcdFx0cGFyc2VPbkJsdXI6IHRydWUsXG5cdFx0XHRhbGxvd0RyYWdBbmREcm9wOiB0cnVlLFxuXHRcdFx0Zm9jdXNDYWxsYmFjazogZkZvY3VzQ2FsbGJhY2ssXG5cdFx0XHRpbnB1dERlbGltaXRlcnM6IGlucHV0RGVsaW1pdGVycyxcblx0XHRcdGF1dG9Db21wbGV0ZVNvdXJjZTogZkF1dG9Db21wbGV0ZVNvdXJjZSxcblx0XHRcdHNwbGl0SG9vazogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHYgPSBVdGlscy50cmltKHZhbHVlKTtcblx0XHRcdFx0aWYgKHYgJiYgLTEgPCBpbnB1dERlbGltaXRlcnMuaW5kZXhPZih2LnN1YnN0cigtMSkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIEVtYWlsTW9kZWwuc3BsaXRFbWFpbExpbmUodmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fSxcblx0XHRcdHBhcnNlSG9vazogKGlucHV0KSA9PlxuXHRcdFx0XHRfLm1hcChcblx0XHRcdFx0XHRfLmZsYXR0ZW4oXG5cdFx0XHRcdFx0XHRfLm1hcChpbnB1dCwgKGlucHV0VmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdmFsdWVzID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShpbnB1dFZhbHVlKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMgOiBpbnB1dFZhbHVlO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdChpdGVtKSA9PiAoXy5pc09iamVjdChpdGVtKSA/IFtpdGVtLnRvTGluZShmYWxzZSksIGl0ZW1dIDogW2l0ZW0sIG51bGxdKVxuXHRcdFx0XHQpLFxuXHRcdFx0Y2hhbmdlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0JGVsLmRhdGEoJ0VtYWlsc1RhZ3NWYWx1ZScsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cdFx0XHRcdGZWYWx1ZShldmVudC50YXJnZXQudmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKGZWYWx1ZSAmJiBmVmFsdWUuZm9jdXNlZCAmJiBmVmFsdWUuZm9jdXNlZC5zdWJzY3JpYmUpIHtcblx0XHRcdGZWYWx1ZS5mb2N1c2VkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0JGVsLmlucHV0b3NhdXJ1cyh2YWx1ZSA/ICdmb2N1cycgOiAnYmx1cicpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXHR1cGRhdGU6IChlbGVtZW50LCBmVmFsdWVBY2Nlc3NvcikgPT4ge1xuXHRcdGNvbnN0ICRvRWwgPSAkKGVsZW1lbnQpLFxuXHRcdFx0ZlZhbHVlID0gZlZhbHVlQWNjZXNzb3IoKSxcblx0XHRcdHZhbHVlID0ga28udW53cmFwKGZWYWx1ZSk7XG5cblx0XHRpZiAoJG9FbC5kYXRhKCdFbWFpbHNUYWdzVmFsdWUnKSAhPT0gdmFsdWUpIHtcblx0XHRcdCRvRWwudmFsKHZhbHVlKTtcblx0XHRcdCRvRWwuZGF0YSgnRW1haWxzVGFnc1ZhbHVlJywgdmFsdWUpO1xuXHRcdFx0JG9FbC5pbnB1dG9zYXVydXMoJ3JlZnJlc2gnKTtcblx0XHR9XG5cdH1cbn07XG5cbmtvLmJpbmRpbmdIYW5kbGVycy5jb21tYW5kID0ge1xuXHRpbml0OiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IsIGZBbGxCaW5kaW5nc0FjY2Vzc29yLCB2aWV3TW9kZWwsIGJpbmRpbmdDb250ZXh0KSA9PiB7XG5cdFx0Y29uc3QganFFbGVtZW50ID0gJChlbGVtZW50KSxcblx0XHRcdGNvbW1hbmQgPSBmVmFsdWVBY2Nlc3NvcigpO1xuXG5cdFx0aWYgKCFjb21tYW5kIHx8ICFjb21tYW5kLmlzQ29tbWFuZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBzaG91bGQgYmUgYSBjb21tYW5kJyk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21tYW5kLmVuYWJsZWQpIHtcblx0XHRcdGNvbW1hbmQuZW5hYmxlZCA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21tYW5kLmNhbkV4ZWN1dGUpIHtcblx0XHRcdGNvbnN0IF9fcmVhbENhbkV4ZWN1dGUgPSBjb21tYW5kLl9fcmVhbENhbkV4ZWN1dGU7XG5cdFx0XHRpZiAoXy5pc0Z1bmN0aW9uKF9fcmVhbENhbkV4ZWN1dGUpKSB7XG5cdFx0XHRcdGNvbW1hbmQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGNvbW1hbmQuZW5hYmxlZCgpICYmIF9fcmVhbENhbkV4ZWN1dGUuY2FsbCh2aWV3TW9kZWwsIHZpZXdNb2RlbCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29tbWFuZC5jYW5FeGVjdXRlID0ga28uY29tcHV0ZWQoKCkgPT4gY29tbWFuZC5lbmFibGVkKCkgJiYgISFfX3JlYWxDYW5FeGVjdXRlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRqcUVsZW1lbnQuYWRkQ2xhc3MoJ2NvbW1hbmQnKTtcblx0XHRrby5iaW5kaW5nSGFuZGxlcnNbanFFbGVtZW50LmlzKCdmb3JtJykgPyAnc3VibWl0JyA6ICdjbGljayddLmluaXQoXG5cdFx0XHRlbGVtZW50LFxuXHRcdFx0ZlZhbHVlQWNjZXNzb3IsXG5cdFx0XHRmQWxsQmluZGluZ3NBY2Nlc3Nvcixcblx0XHRcdHZpZXdNb2RlbCxcblx0XHRcdGJpbmRpbmdDb250ZXh0XG5cdFx0KTtcblx0fSxcblx0dXBkYXRlOiAoZWxlbWVudCwgZlZhbHVlQWNjZXNzb3IpID0+IHtcblx0XHRjb25zdCBqcUVsZW1lbnQgPSAkKGVsZW1lbnQpLFxuXHRcdFx0Y29tbWFuZCA9IGZWYWx1ZUFjY2Vzc29yKCk7XG5cblx0XHRsZXQgcmVzdWx0ID0gY29tbWFuZC5lbmFibGVkKCk7XG5cblx0XHRqcUVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2NvbW1hbmQtbm90LWVuYWJsZWQnLCAhcmVzdWx0KTtcblxuXHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdHJlc3VsdCA9IGNvbW1hbmQuY2FuRXhlY3V0ZSgpO1xuXHRcdFx0anFFbGVtZW50LnRvZ2dsZUNsYXNzKCdjb21tYW5kLWNhbi1ub3QtYmUtZXhlY3V0ZScsICFyZXN1bHQpO1xuXHRcdH1cblxuXHRcdGpxRWxlbWVudC50b2dnbGVDbGFzcygnY29tbWFuZC1kaXNhYmxlZCBkaXNhYmxlIGRpc2FibGVkJywgIXJlc3VsdCkudG9nZ2xlQ2xhc3MoJ25vLWRpc2FibGVkJywgISFyZXN1bHQpO1xuXG5cdFx0aWYgKGpxRWxlbWVudC5pcygnaW5wdXQnKSB8fCBqcUVsZW1lbnQuaXMoJ2J1dHRvbicpKSB7XG5cdFx0XHRqcUVsZW1lbnQucHJvcCgnZGlzYWJsZWQnLCAhcmVzdWx0KTtcblx0XHR9XG5cdH1cbn07XG5cbi8vIGV4dGVuZGVyc1xuXG5rby5leHRlbmRlcnMudHJpbW1lciA9ICh0YXJnZXQpID0+IHtcblx0Y29uc3QgVXRpbHMgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKSxcblx0XHRyZXN1bHQgPSBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQsXG5cdFx0XHR3cml0ZTogKG5ld1ZhbHVlKSA9PiB7XG5cdFx0XHRcdHRhcmdldChVdGlscy50cmltKG5ld1ZhbHVlLnRvU3RyaW5nKCkpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxua28uZXh0ZW5kZXJzLnBvc0ludGVyZXIgPSAodGFyZ2V0LCBkZWZhdWx0VmFsKSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga28uY29tcHV0ZWQoe1xuXHRcdFx0cmVhZDogdGFyZ2V0LFxuXHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHRsZXQgdmFsID0gVXRpbHMucEludChuZXdWYWx1ZS50b1N0cmluZygpLCBkZWZhdWx0VmFsKTtcblx0XHRcdFx0aWYgKDAgPj0gdmFsKSB7XG5cdFx0XHRcdFx0dmFsID0gZGVmYXVsdFZhbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWwgPT09IHRhcmdldCgpICYmICcnICsgdmFsICE9PSAnJyArIG5ld1ZhbHVlKSB7XG5cdFx0XHRcdFx0dGFyZ2V0KHZhbCArIDEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0KHZhbCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmVzdWx0KHRhcmdldCgpKTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmtvLmV4dGVuZGVycy5saW1pdGVkTGlzdCA9ICh0YXJnZXQsIGxpbWl0ZWRMaXN0KSA9PiB7XG5cdGNvbnN0IFV0aWxzID0gcmVxdWlyZSgnQ29tbW9uL1V0aWxzJyksXG5cdFx0cmVzdWx0ID0ga29cblx0XHRcdC5jb21wdXRlZCh7XG5cdFx0XHRcdHJlYWQ6IHRhcmdldCxcblx0XHRcdFx0d3JpdGU6IChuZXdWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGtvLnVud3JhcCh0YXJnZXQpLFxuXHRcdFx0XHRcdFx0bGlzdCA9IGtvLnVud3JhcChsaW1pdGVkTGlzdCk7XG5cblx0XHRcdFx0XHRpZiAoVXRpbHMuaXNOb25FbXB0eUFycmF5KGxpc3QpKSB7XG5cdFx0XHRcdFx0XHRpZiAoLTEgPCBVdGlscy5pbkFycmF5KG5ld1ZhbHVlLCBsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobmV3VmFsdWUpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICgtMSA8IFV0aWxzLmluQXJyYXkoY3VycmVudFZhbHVlLCBsaXN0KSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQoY3VycmVudFZhbHVlICsgJyAnKTtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0KGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQobGlzdFswXSArICcgJyk7XG5cdFx0XHRcdFx0XHRcdHRhcmdldChsaXN0WzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGFyZ2V0KCcnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZXh0ZW5kKHsgbm90aWZ5OiAnYWx3YXlzJyB9KTtcblxuXHRyZXN1bHQodGFyZ2V0KCkpO1xuXG5cdGlmICghcmVzdWx0LnZhbHVlSGFzTXV0YXRlZCkge1xuXHRcdHJlc3VsdC52YWx1ZUhhc011dGF0ZWQgPSAoKSA9PiB7XG5cdFx0XHR0YXJnZXQudmFsdWVIYXNNdXRhdGVkKCk7XG5cdFx0fTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5rby5leHRlbmRlcnMucmV2ZXJzaWJsZSA9ICh0YXJnZXQpID0+IHtcblx0bGV0IHZhbHVlID0gdGFyZ2V0KCk7XG5cblx0dGFyZ2V0LmNvbW1pdCA9ICgpID0+IHtcblx0XHR2YWx1ZSA9IHRhcmdldCgpO1xuXHR9O1xuXG5cdHRhcmdldC5yZXZlcnNlID0gKCkgPT4ge1xuXHRcdHRhcmdldCh2YWx1ZSk7XG5cdH07XG5cblx0dGFyZ2V0LmNvbW1pdGVkVmFsdWUgPSAoKSA9PiB2YWx1ZTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy50b2dnbGVTdWJzY3JpYmUgPSAodGFyZ2V0LCBvcHRpb25zKSA9PiB7XG5cdHRhcmdldC5zdWJzY3JpYmUob3B0aW9uc1sxXSwgb3B0aW9uc1swXSwgJ2JlZm9yZUNoYW5nZScpO1xuXHR0YXJnZXQuc3Vic2NyaWJlKG9wdGlvbnNbMl0sIG9wdGlvbnNbMF0pO1xuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLnRvZ2dsZVN1YnNjcmliZVByb3BlcnR5ID0gKHRhcmdldCwgb3B0aW9ucykgPT4ge1xuXHRjb25zdCBwcm9wID0gb3B0aW9uc1sxXTtcblx0aWYgKHByb3ApIHtcblx0XHR0YXJnZXQuc3Vic2NyaWJlKFxuXHRcdFx0KHByZXYpID0+IHtcblx0XHRcdFx0aWYgKHByZXYgJiYgcHJldltwcm9wXSkge1xuXHRcdFx0XHRcdHByZXZbcHJvcF0oZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b3B0aW9uc1swXSxcblx0XHRcdCdiZWZvcmVDaGFuZ2UnXG5cdFx0KTtcblxuXHRcdHRhcmdldC5zdWJzY3JpYmUoKG5leHQpID0+IHtcblx0XHRcdGlmIChuZXh0ICYmIG5leHRbcHJvcF0pIHtcblx0XHRcdFx0bmV4dFtwcm9wXSh0cnVlKTtcblx0XHRcdH1cblx0XHR9LCBvcHRpb25zWzBdKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5rby5leHRlbmRlcnMuZmFsc2VUaW1lb3V0ID0gKHRhcmdldCwgb3B0aW9uKSA9PiB7XG5cdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IDA7XG5cdHRhcmdldC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCk7XG5cdFx0XHR0YXJnZXQuaUZhbHNlVGltZW91dFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRhcmdldChmYWxzZSk7XG5cdFx0XHRcdHRhcmdldC5pRmFsc2VUaW1lb3V0VGltZW91dCA9IDA7XG5cdFx0XHR9LCByZXF1aXJlKCdDb21tb24vVXRpbHMnKS5wSW50KG9wdGlvbikpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmtvLmV4dGVuZGVycy5zcGVjaWFsVGhyb3R0bGUgPSAodGFyZ2V0LCBvcHRpb24pID0+IHtcblx0dGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUgPSByZXF1aXJlKCdDb21tb24vVXRpbHMnKS5wSW50KG9wdGlvbik7XG5cdGlmICgwIDwgdGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUpIHtcblx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSAwO1xuXHRcdHRhcmdldC52YWx1ZUZvclJlYWQgPSBrby5vYnNlcnZhYmxlKCEhdGFyZ2V0KCkpLmV4dGVuZCh7IHRocm90dGxlOiAxMCB9KTtcblxuXHRcdHJldHVybiBrby5jb21wdXRlZCh7XG5cdFx0XHRyZWFkOiB0YXJnZXQudmFsdWVGb3JSZWFkLFxuXHRcdFx0d3JpdGU6IChiVmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKGJWYWx1ZSkge1xuXHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoYlZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAodGFyZ2V0LnZhbHVlRm9yUmVhZCgpKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRhcmdldC5pU3BlY2lhbFRocm90dGxlVGltZW91dCk7XG5cdFx0XHRcdFx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC52YWx1ZUZvclJlYWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQuaVNwZWNpYWxUaHJvdHRsZVRpbWVvdXQgPSAwO1xuXHRcdFx0XHRcdFx0fSwgdGFyZ2V0LmlTcGVjaWFsVGhyb3R0bGVUaW1lb3V0VmFsdWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQudmFsdWVGb3JSZWFkKGJWYWx1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxua28uZXh0ZW5kZXJzLmlkbGVUcmlnZ2VyID0gKHRhcmdldCkgPT4ge1xuXHR0YXJnZXQudHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbi8vIGZ1bmN0aW9uc1xuXG5rby5vYnNlcnZhYmxlLmZuLmlkbGVUcmlnZ2VyID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmV4dGVuZCh7ICdpZGxlVHJpZ2dlcic6IHRydWUgfSk7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlTm9uZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmhhc0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdHJldHVybiB0aGlzO1xufTtcblxua28ub2JzZXJ2YWJsZS5mbi52YWxpZGF0ZUVtYWlsID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaGFzRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHR0aGlzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHR0aGlzLmhhc0Vycm9yKCcnICE9PSB2YWx1ZSAmJiAhL15bXkBcXHNdK0BbXkBcXHNdKyQvLnRlc3QodmFsdWUpKTtcblx0fSk7XG5cblx0dGhpcy52YWx1ZUhhc011dGF0ZWQoKTtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5rby5vYnNlcnZhYmxlLmZuLnZhbGlkYXRlU2ltcGxlRW1haWwgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5oYXNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdHRoaXMuaGFzRXJyb3IoJycgIT09IHZhbHVlICYmICEvXi4rQC4rJC8udGVzdCh2YWx1ZSkpO1xuXHR9KTtcblxuXHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4uZGVsZXRlQWNjZXNzSGVscGVyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuZXh0ZW5kKHsgZmFsc2VUaW1lb3V0OiAzMDAwIH0pLmV4dGVuZCh7IHRvZ2dsZVN1YnNjcmliZVByb3BlcnR5OiBbdGhpcywgJ2RlbGV0ZUFjY2VzcyddIH0pO1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbmtvLm9ic2VydmFibGUuZm4udmFsaWRhdGVGdW5jID0gZnVuY3Rpb24oZkZ1bmMpIHtcblx0dGhpcy5oYXNGdW5jRXJyb3IgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRpZiAoXy5pc0Z1bmN0aW9uKGZGdW5jKSkge1xuXHRcdHRoaXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0dGhpcy5oYXNGdW5jRXJyb3IoIWZGdW5jKHZhbHVlKSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBrbztcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IEF1dG9saW5rZXIgZnJvbSAnQXV0b2xpbmtlcic7XG5cbmltcG9ydCB7ICR3aW4sICRkaXYsICRoY29udCwgZHJvcGRvd25WaXNpYmlsaXR5LCBkYXRhIGFzIEdsb2JhbHNEYXRhIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgQ29tcG9zZVR5cGUsIEV2ZW50S2V5Q29kZSwgU2F2ZVNldHRpbmdzU3RlcCwgRm9sZGVyVHlwZSB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBNaW1lIH0gZnJvbSAnQ29tbW9uL01pbWUnO1xuaW1wb3J0IHsgamFzc2wgfSBmcm9tICdDb21tb24vSmFzc2wnO1xuXG5jb25zdCB0cmltID0gJC50cmltO1xuY29uc3QgaW5BcnJheSA9ICQuaW5BcnJheTtcbmNvbnN0IGlzQXJyYXkgPSBfLmlzQXJyYXk7XG5jb25zdCBpc09iamVjdCA9IF8uaXNPYmplY3Q7XG5jb25zdCBpc0Z1bmMgPSBfLmlzRnVuY3Rpb247XG5jb25zdCBpc1VuZCA9IF8uaXNVbmRlZmluZWQ7XG5jb25zdCBpc051bGwgPSBfLmlzTnVsbDtcbmNvbnN0IGhhcyA9IF8uaGFzO1xuY29uc3QgYmluZCA9IF8uYmluZDtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxuY29uc3Qgbm9vcFRydWUgPSAoKSA9PiB0cnVlO1xuY29uc3Qgbm9vcEZhbHNlID0gKCkgPT4gZmFsc2U7XG5cbmV4cG9ydCB7IHRyaW0sIGluQXJyYXksIGlzQXJyYXksIGlzT2JqZWN0LCBpc0Z1bmMsIGlzVW5kLCBpc051bGwsIGhhcywgYmluZCwgbm9vcCwgbm9vcFRydWUsIG5vb3BGYWxzZSwgamFzc2wgfTtcblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWxlbnRUcnlDYXRjaChmdW5jKSB7XG5cdHRyeSB7XG5cdFx0ZnVuYygpO1xuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vcm1hbCh2YWx1ZSkge1xuXHRyZXR1cm4gIWlzVW5kKHZhbHVlKSAmJiAhaXNOdWxsKHZhbHVlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbj19IGluY2x1ZGVaZXJvID0gdHJ1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Bvc051bWVyaWModmFsdWUsIGluY2x1ZGVaZXJvID0gdHJ1ZSkge1xuXHRyZXR1cm4gIWlzTm9ybWFsKHZhbHVlKVxuXHRcdD8gZmFsc2Vcblx0XHQ6IGluY2x1ZGVaZXJvXG5cdFx0PyAvXlswLTldKiQvLnRlc3QodmFsdWUudG9TdHJpbmcoKSlcblx0XHQ6IC9eWzEtOV0rWzAtOV0qJC8udGVzdCh2YWx1ZS50b1N0cmluZygpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcj19IGRlZmF1bHRWYWx1ciA9IDBcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwSW50KHZhbHVlLCBkZWZhdWx0VmFsdXIgPSAwKSB7XG5cdGNvbnN0IHJlc3VsdCA9IGlzTm9ybWFsKHZhbHVlKSAmJiAnJyAhPT0gdmFsdWUgPyB3aW5kb3cucGFyc2VJbnQodmFsdWUsIDEwKSA6IGRlZmF1bHRWYWx1cjtcblx0cmV0dXJuIHdpbmRvdy5pc05hTihyZXN1bHQpID8gZGVmYXVsdFZhbHVyIDogcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwU3RyaW5nKHZhbHVlKSB7XG5cdHJldHVybiBpc05vcm1hbCh2YWx1ZSkgPyAnJyArIHZhbHVlIDogJyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwQm9vbCh2YWx1ZSkge1xuXHRyZXR1cm4gISF2YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9vbFRvQWpheCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPyAnMScgOiAnMCc7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSB2YWx1ZXNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb25FbXB0eUFycmF5KHZhbHVlcykge1xuXHRyZXR1cm4gaXNBcnJheSh2YWx1ZXMpICYmIDAgPCB2YWx1ZXMubGVuZ3RoO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KSB7XG5cdHJldHVybiB3aW5kb3cuZW5jb2RlVVJJQ29tcG9uZW50KGNvbXBvbmVudCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVVSSUNvbXBvbmVudChjb21wb25lbnQpIHtcblx0cmV0dXJuIHdpbmRvdy5kZWNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlVVJJKHVybCkge1xuXHRyZXR1cm4gd2luZG93LmRlY29kZVVSSSh1cmwpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVVUkkodXJsKSB7XG5cdHJldHVybiB3aW5kb3cuZW5jb2RlVVJJKHVybCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyaW5nXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2ltcGxlUXVlcnlQYXJzZXIocXVlcnlTdHJpbmcpIHtcblx0bGV0IGluZGV4ID0gMCxcblx0XHRsZW4gPSAwLFxuXHRcdHRlbXAgPSBudWxsO1xuXG5cdGNvbnN0IHF1ZXJpZXMgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpLFxuXHRcdHBhcmFtcyA9IHt9O1xuXG5cdGZvciAobGVuID0gcXVlcmllcy5sZW5ndGg7IGluZGV4IDwgbGVuOyBpbmRleCsrKSB7XG5cdFx0dGVtcCA9IHF1ZXJpZXNbaW5kZXhdLnNwbGl0KCc9Jyk7XG5cdFx0cGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQodGVtcFsxXSk7XG5cdH1cblxuXHRyZXR1cm4gcGFyYW1zO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyPX0gbGVuID0gMzJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWtlTWQ1KGxlbiA9IDMyKSB7XG5cdGNvbnN0IGxpbmUgPSAnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jyxcblx0XHRsaW5lTGVuID0gbGluZS5sZW5ndGg7XG5cblx0bGVuID0gcEludChsZW4pO1xuXG5cdGxldCByZXN1bHQgPSAnJztcblx0d2hpbGUgKHJlc3VsdC5sZW5ndGggPCBsZW4pIHtcblx0XHRyZXN1bHQgKz0gbGluZS5zdWJzdHIod2luZG93Lk1hdGgucm91bmQod2luZG93Lk1hdGgucmFuZG9tKCkgKiBsaW5lTGVuKSwgMSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlSHRtbCh0ZXh0KSB7XG5cdHJldHVybiBpc05vcm1hbCh0ZXh0KSA/IF8uZXNjYXBlKHRleHQudG9TdHJpbmcoKSkgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtudW1iZXI9fSBsZW4gPSAxMDBcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFBsYWluVGV4dCh0ZXh0LCBsZW4gPSAxMDApIHtcblx0bGV0IHByZWZpeCA9ICcnLFxuXHRcdHN1YlRleHQgPSAnJyxcblx0XHRyZXN1bHQgPSB0ZXh0LFxuXHRcdHNwYWNlUG9zID0gMCxcblx0XHRuZXdMaW5lUG9zID0gMDtcblxuXHR3aGlsZSAocmVzdWx0Lmxlbmd0aCA+IGxlbikge1xuXHRcdHN1YlRleHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIGxlbik7XG5cdFx0c3BhY2VQb3MgPSBzdWJUZXh0Lmxhc3RJbmRleE9mKCcgJyk7XG5cdFx0bmV3TGluZVBvcyA9IHN1YlRleHQubGFzdEluZGV4T2YoJ1xcbicpO1xuXG5cdFx0aWYgKC0xICE9PSBuZXdMaW5lUG9zKSB7XG5cdFx0XHRzcGFjZVBvcyA9IG5ld0xpbmVQb3M7XG5cdFx0fVxuXG5cdFx0aWYgKC0xID09PSBzcGFjZVBvcykge1xuXHRcdFx0c3BhY2VQb3MgPSBsZW47XG5cdFx0fVxuXG5cdFx0cHJlZml4ICs9IHN1YlRleHQuc3Vic3RyaW5nKDAsIHNwYWNlUG9zKSArICdcXG4nO1xuXHRcdHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJpbmcoc3BhY2VQb3MgKyAxKTtcblx0fVxuXG5cdHJldHVybiBwcmVmaXggKyByZXN1bHQ7XG59XG5cbmNvbnN0IHRpbWVPdXRBY3Rpb24gPSAoZnVuY3Rpb24oKSB7XG5cdGNvbnN0IHRpbWVPdXRzID0ge307XG5cdHJldHVybiAoYWN0aW9uLCBmRnVuY3Rpb24sIHRpbWVPdXQpID0+IHtcblx0XHR0aW1lT3V0c1thY3Rpb25dID0gaXNVbmQodGltZU91dHNbYWN0aW9uXSkgPyAwIDogdGltZU91dHNbYWN0aW9uXTtcblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVPdXRzW2FjdGlvbl0pO1xuXHRcdHRpbWVPdXRzW2FjdGlvbl0gPSB3aW5kb3cuc2V0VGltZW91dChmRnVuY3Rpb24sIHRpbWVPdXQpO1xuXHR9O1xufSkoKTtcblxuY29uc3QgdGltZU91dEFjdGlvblNlY29uZCA9IChmdW5jdGlvbigpIHtcblx0Y29uc3QgdGltZU91dHMgPSB7fTtcblx0cmV0dXJuIChhY3Rpb24sIGZGdW5jdGlvbiwgdGltZU91dCkgPT4ge1xuXHRcdGlmICghdGltZU91dHNbYWN0aW9uXSkge1xuXHRcdFx0dGltZU91dHNbYWN0aW9uXSA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZkZ1bmN0aW9uKCk7XG5cdFx0XHRcdHRpbWVPdXRzW2FjdGlvbl0gPSAwO1xuXHRcdFx0fSwgdGltZU91dCk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuZXhwb3J0IHsgdGltZU91dEFjdGlvbiwgdGltZU91dEFjdGlvblNlY29uZCB9O1xuXG4vKipcbiAqIEBwYXJhbSB7YW55fSBtXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVNb2R1bGUobSkge1xuXHRyZXR1cm4gKG0gJiYgbS5kZWZhdWx0ID8gbS5kZWZhdWx0IDogbSkgfHwgJyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbkZvY3VzKCkge1xuXHR0cnkge1xuXHRcdGlmICh3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzVW5kKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50Ll9faW5Gb2N1c0NhY2hlKSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5fX2luRm9jdXNDYWNoZSA9ICQod2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmlzKFxuXHRcdFx0XHRcdCdpbnB1dCx0ZXh0YXJlYSxpZnJhbWUsLmNrZV9lZGl0YWJsZSdcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICEhd2luZG93LmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuX19pbkZvY3VzQ2FjaGU7XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW5Gb2N1cyhmb3JjZSkge1xuXHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYWN0aXZlRWwgPSAkKHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcblx0XHRcdGlmIChhY3RpdmVFbCAmJiBhY3RpdmVFbC5pcygnaW5wdXQsdGV4dGFyZWEnKSkge1xuXHRcdFx0XHR3aW5kb3cuZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGZvcmNlKSB7XG5cdFx0XHRcdHdpbmRvdy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG5cdH1cbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVNlbGVjdGlvbigpIHtcblx0dHJ5IHtcblx0XHRpZiAod2luZG93ICYmIHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRcdGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRcdGlmIChzZWwgJiYgc2VsLnJlbW92ZUFsbFJhbmdlcykge1xuXHRcdFx0XHRzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LnNlbGVjdGlvbiAmJiB3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KSB7XG5cdFx0XHR3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBseVN1YmplY3RBZGQocHJlZml4LCBzdWJqZWN0KSB7XG5cdHByZWZpeCA9IHRyaW0ocHJlZml4LnRvVXBwZXJDYXNlKCkpO1xuXHRzdWJqZWN0ID0gdHJpbShzdWJqZWN0LnJlcGxhY2UoL1tcXHNdKy9nLCAnICcpKTtcblxuXHRsZXQgZHJvcCA9IGZhbHNlLFxuXHRcdHJlID0gJ1JFJyA9PT0gcHJlZml4LFxuXHRcdGZ3ZCA9ICdGV0QnID09PSBwcmVmaXg7XG5cblx0Y29uc3QgcGFydHMgPSBbXSxcblx0XHRwcmVmaXhJc1JlID0gIWZ3ZDtcblxuXHRpZiAoJycgIT09IHN1YmplY3QpIHtcblx0XHRfLmVhY2goc3ViamVjdC5zcGxpdCgnOicpLCAocGFydCkgPT4ge1xuXHRcdFx0Y29uc3QgdHJpbW1lZFBhcnQgPSB0cmltKHBhcnQpO1xuXHRcdFx0aWYgKCFkcm9wICYmICgvXihSRXxGV0QpJC9pLnRlc3QodHJpbW1lZFBhcnQpIHx8IC9eKFJFfEZXRClbWyhdW1xcZF0rW1xcXSldJC9pLnRlc3QodHJpbW1lZFBhcnQpKSkge1xuXHRcdFx0XHRpZiAoIXJlKSB7XG5cdFx0XHRcdFx0cmUgPSAhIS9eUkUvaS50ZXN0KHRyaW1tZWRQYXJ0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghZndkKSB7XG5cdFx0XHRcdFx0ZndkID0gISEvXkZXRC9pLnRlc3QodHJpbW1lZFBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKHBhcnQpO1xuXHRcdFx0XHRkcm9wID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGlmIChwcmVmaXhJc1JlKSB7XG5cdFx0cmUgPSBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmd2QgPSBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cmltKChwcmVmaXhJc1JlID8gJ1JlOiAnIDogJ0Z3ZDogJykgKyAocmUgPyAnUmU6ICcgOiAnJykgKyAoZndkID8gJ0Z3ZDogJyA6ICcnKSArIHRyaW0ocGFydHMuam9pbignOicpKSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY1xuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kTnVtYmVyKG51bSwgZGVjKSB7XG5cdHJldHVybiB3aW5kb3cuTWF0aC5yb3VuZChudW0gKiB3aW5kb3cuTWF0aC5wb3coMTAsIGRlYykpIC8gd2luZG93Lk1hdGgucG93KDEwLCBkZWMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7KG51bWJlcnxzdHJpbmcpfSBzaXplSW5CeXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyaWVuZGx5U2l6ZShzaXplSW5CeXRlcykge1xuXHRzaXplSW5CeXRlcyA9IHBJbnQoc2l6ZUluQnl0ZXMpO1xuXG5cdHN3aXRjaCAodHJ1ZSkge1xuXHRcdGNhc2UgMTA3Mzc0MTgyNCA8PSBzaXplSW5CeXRlczpcblx0XHRcdHJldHVybiByb3VuZE51bWJlcihzaXplSW5CeXRlcyAvIDEwNzM3NDE4MjQsIDEpICsgJ0dCJztcblx0XHRjYXNlIDEwNDg1NzYgPD0gc2l6ZUluQnl0ZXM6XG5cdFx0XHRyZXR1cm4gcm91bmROdW1iZXIoc2l6ZUluQnl0ZXMgLyAxMDQ4NTc2LCAxKSArICdNQic7XG5cdFx0Y2FzZSAxMDI0IDw9IHNpemVJbkJ5dGVzOlxuXHRcdFx0cmV0dXJuIHJvdW5kTnVtYmVyKHNpemVJbkJ5dGVzIC8gMTAyNCwgMCkgKyAnS0InO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiBzaXplSW5CeXRlcyArICdCJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nKGRlc2MpIHtcblx0aWYgKHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZykge1xuXHRcdHdpbmRvdy5jb25zb2xlLmxvZyhkZXNjKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7P30gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZVxuICogQHBhcmFtIHtBcnJheT19IHBhcmFtc1xuICogQHBhcmFtIHtudW1iZXI9fSBkZWxheSA9IDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGVnYXRlUnVuKG9iamVjdCwgbWV0aG9kTmFtZSwgcGFyYW1zLCBkZWxheSA9IDApIHtcblx0aWYgKG9iamVjdCAmJiBvYmplY3RbbWV0aG9kTmFtZV0pIHtcblx0XHRkZWxheSA9IHBJbnQoZGVsYXkpO1xuXHRcdHBhcmFtcyA9IGlzQXJyYXkocGFyYW1zKSA/IHBhcmFtcyA6IFtdO1xuXG5cdFx0aWYgKDAgPj0gZGVsYXkpIHtcblx0XHRcdG9iamVjdFttZXRob2ROYW1lXSguLi5wYXJhbXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdFx0b2JqZWN0W21ldGhvZE5hbWVdKC4uLnBhcmFtcyk7XG5cdFx0XHR9LCBkZWxheSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHs/fSBldmVudFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2lsbEN0cmxBQ3RybFMoZXZlbnQpIHtcblx0ZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7XG5cdGlmIChldmVudCAmJiBldmVudC5jdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuYWx0S2V5KSB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcblx0XHRpZiAoa2V5ID09PSBFdmVudEtleUNvZGUuUykge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGVsc2UgaWYgKGtleSA9PT0gRXZlbnRLZXlDb2RlLkEpIHtcblx0XHRcdGNvbnN0IHNlbmRlciA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRzZW5kZXIgJiZcblx0XHRcdFx0KCd0cnVlJyA9PT0gJycgKyBzZW5kZXIuY29udGVudEVkaXRhYmxlIHx8IChzZW5kZXIudGFnTmFtZSAmJiBzZW5kZXIudGFnTmFtZS5tYXRjaCgvSU5QVVR8VEVYVEFSRUEvaSkpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcblx0XHRcdFx0d2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuXHRcdFx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uICYmIHdpbmRvdy5kb2N1bWVudC5zZWxlY3Rpb24uY2xlYXIpIHtcblx0XHRcdFx0d2luZG93LmRvY3VtZW50LnNlbGVjdGlvbi5jbGVhcigpO1xuXHRcdFx0fVxuXG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7KE9iamVjdHxudWxsfHVuZGVmaW5lZCl9IGNvbnRleHRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZFeGVjdXRlXG4gKiBAcGFyYW0geyhGdW5jdGlvbnxib29sZWFufG51bGwpPX0gZkNhbkV4ZWN1dGUgPSB0cnVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTGVnYWN5KGNvbnRleHQsIGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0bGV0IGZSZXN1bHQgPSBudWxsO1xuXHRjb25zdCBmTm9uRW1wdHkgPSAoLi4uYXJncykgPT4ge1xuXHRcdGlmIChmUmVzdWx0ICYmIGZSZXN1bHQuY2FuRXhlY3V0ZSAmJiBmUmVzdWx0LmNhbkV4ZWN1dGUoKSkge1xuXHRcdFx0ZkV4ZWN1dGUuYXBwbHkoY29udGV4dCwgYXJncyk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHRmUmVzdWx0ID0gZkV4ZWN1dGUgPyBmTm9uRW1wdHkgOiBub29wO1xuXHRmUmVzdWx0LmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKHRydWUpO1xuXHRmUmVzdWx0LmlzQ29tbWFuZCA9IHRydWU7XG5cblx0aWYgKGlzRnVuYyhmQ2FuRXhlY3V0ZSkpIHtcblx0XHRmUmVzdWx0LmNhbkV4ZWN1dGUgPSBrby5jb21wdXRlZCgoKSA9PiBmUmVzdWx0ICYmIGZSZXN1bHQuZW5hYmxlZCgpICYmIGZDYW5FeGVjdXRlLmNhbGwoY29udGV4dCkpO1xuXHR9IGVsc2Uge1xuXHRcdGZSZXN1bHQuY2FuRXhlY3V0ZSA9IGtvLmNvbXB1dGVkKCgpID0+IGZSZXN1bHQgJiYgZlJlc3VsdC5lbmFibGVkKCkgJiYgISFmQ2FuRXhlY3V0ZSk7XG5cdH1cblxuXHRyZXR1cm4gZlJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhlbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VGhlbWVOYW1lID0gXy5tZW1vaXplKCh0aGVtZSkgPT4ge1xuXHRpZiAoJ0BjdXN0b20nID09PSB0aGVtZS5zdWJzdHIoLTcpKSB7XG5cdFx0dGhlbWUgPSB0cmltKHRoZW1lLnN1YnN0cmluZygwLCB0aGVtZS5sZW5ndGggLSA3KSk7XG5cdH1cblxuXHRyZXR1cm4gdHJpbShcblx0XHR0aGVtZVxuXHRcdFx0LnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKVxuXHRcdFx0LnJlcGxhY2UoLyhbQS1aXSkvZywgJyAkMScpXG5cdFx0XHQucmVwbGFjZSgvW1xcc10rL2csICcgJylcblx0KTtcbn0pO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVOYW1lKG5hbWUpIHtcblx0cmV0dXJuIG5hbWUucmVwbGFjZSgvW1wiXS9nLCAnXFxcXFwiJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pY3JvdGltZSgpIHtcblx0cmV0dXJuIG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuXHRyZXR1cm4gd2luZG93Lk1hdGgucm91bmQobWljcm90aW1lKCkgLyAxMDAwKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0VuZyA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydExhbmdOYW1lKGxhbmd1YWdlLCBpc0VuZyA9IGZhbHNlKSB7XG5cdHJldHVybiByZXF1aXJlKCdDb21tb24vVHJhbnNsYXRvcicpLmkxOG4oXG5cdFx0J0xBTkdTX05BTUVTJyArICh0cnVlID09PSBpc0VuZyA/ICdfRU4nIDogJycpICsgJy9MQU5HXycgKyBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJ18nKSxcblx0XHRudWxsLFxuXHRcdGxhbmd1YWdlXG5cdCk7XG59XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWdnYWJsZVBsYWNlKCkge1xuXHRyZXR1cm4gJChcblx0XHQnPGRpdiBjbGFzcz1cImRyYWdnYWJsZVBsYWNlXCI+JyArXG5cdFx0XHQnPHNwYW4gY2xhc3M9XCJ0ZXh0XCI+PC9zcGFuPiZuYnNwOycgK1xuXHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1jb3B5IGljb24td2hpdGUgdmlzaWJsZS1vbi1jdHJsXCI+PC9pPicgK1xuXHRcdFx0JzxpIGNsYXNzPVwiaWNvbi1tYWlsIGljb24td2hpdGUgaGlkZGVuLW9uLWN0cmxcIj48L2k+JyArXG5cdFx0XHQnPC9kaXY+J1xuXHQpLmFwcGVuZFRvKCcjcmwtaGlkZGVuJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRvbU9wdGlvblxuICogQHBhcmFtIHtvYmplY3R9IGl0ZW1cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyKGRvbUl0ZW0sIGl0ZW0pIHtcblx0aWYgKGl0ZW0gJiYgIWlzVW5kKGl0ZW0uZGlzYWJsZWQpICYmIGRvbUl0ZW0pIHtcblx0XHQkKGRvbUl0ZW0pXG5cdFx0XHQudG9nZ2xlQ2xhc3MoJ2Rpc2FibGVkJywgaXRlbS5kaXNhYmxlZClcblx0XHRcdC5wcm9wKCdkaXNhYmxlZCcsIGl0ZW0uZGlzYWJsZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG4gKiBAcGFyYW0ge09iamVjdH0gYm9keVxuICogQHBhcmFtIHtib29sZWFufSBpc0h0bWxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJpbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQnFTd2l0Y2hlcihib2R5KSB7XG5cdGJvZHkuZmluZCgnYmxvY2txdW90ZS5ybC1icS1zd2l0Y2hlcicpLnJlbW92ZUNsYXNzKCdybC1icS1zd2l0Y2hlciBoaWRkZW4tYnEnKTtcblx0Ym9keVxuXHRcdC5maW5kKCcucmxCbG9ja3F1b3RlU3dpdGNoZXInKVxuXHRcdC5vZmYoJy5ybEJsb2NrcXVvdGVTd2l0Y2hlcicpXG5cdFx0LnJlbW92ZSgpO1xuXHRib2R5LmZpbmQoJ1tkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcl0nKS5yZW1vdmVBdHRyKCdkYXRhLWh0bWwtZWRpdG9yLWZvbnQtd3JhcHBlcicpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXNzYWdlRGF0YVxuICogQHBhcmFtIHtPYmplY3R9IGJvZHlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNIdG1sXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHByaW50XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXZpZXdNZXNzYWdlKFxuXHR7IHRpdGxlLCBzdWJqZWN0LCBkYXRlLCBmcm9tQ3JlZHMsIHRvQ3JlZHMsIHRvTGFiZWwsIGNjQ2xhc3MsIGNjQ3JlZHMsIGNjTGFiZWwgfSxcblx0Ym9keSxcblx0aXNIdG1sLFxuXHRwcmludFxuKSB7XG5cdGNvbnN0IHdpbiA9IHdpbmRvdy5vcGVuKCcnKSxcblx0XHRkb2MgPSB3aW4uZG9jdW1lbnQsXG5cdFx0Ym9keUNsb25lID0gYm9keS5jbG9uZSgpLFxuXHRcdGJvZHlDbGFzcyA9IGlzSHRtbCA/ICdodG1sJyA6ICdwbGFpbic7XG5cblx0Y2xlYXJCcVN3aXRjaGVyKGJvZHlDbG9uZSk7XG5cblx0Y29uc3QgaHRtbCA9IGJvZHlDbG9uZSA/IGJvZHlDbG9uZS5odG1sKCkgOiAnJztcblxuXHRkb2Mud3JpdGUoXG5cdFx0ZGVNb2R1bGUocmVxdWlyZSgnSHRtbC9QcmV2aWV3TWVzc2FnZS5odG1sJykpXG5cdFx0XHQucmVwbGFjZSgne3t0aXRsZX19JywgZW5jb2RlSHRtbCh0aXRsZSkpXG5cdFx0XHQucmVwbGFjZSgne3tzdWJqZWN0fX0nLCBlbmNvZGVIdG1sKHN1YmplY3QpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7ZGF0ZX19JywgZW5jb2RlSHRtbChkYXRlKSlcblx0XHRcdC5yZXBsYWNlKCd7e2Zyb21DcmVkc319JywgZW5jb2RlSHRtbChmcm9tQ3JlZHMpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7dG9DcmVkc319JywgZW5jb2RlSHRtbCh0b0NyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e3RvTGFiZWx9fScsIGVuY29kZUh0bWwodG9MYWJlbCkpXG5cdFx0XHQucmVwbGFjZSgne3tjY0NsYXNzfX0nLCBlbmNvZGVIdG1sKGNjQ2xhc3MpKVxuXHRcdFx0LnJlcGxhY2UoJ3t7Y2NDcmVkc319JywgZW5jb2RlSHRtbChjY0NyZWRzKSlcblx0XHRcdC5yZXBsYWNlKCd7e2NjTGFiZWx9fScsIGVuY29kZUh0bWwoY2NMYWJlbCkpXG5cdFx0XHQucmVwbGFjZSgne3tib2R5Q2xhc3N9fScsIGJvZHlDbGFzcylcblx0XHRcdC5yZXBsYWNlKCd7e2h0bWx9fScsIGh0bWwpXG5cdCk7XG5cblx0ZG9jLmNsb3NlKCk7XG5cblx0aWYgKHByaW50KSB7XG5cdFx0d2luZG93LnNldFRpbWVvdXQoKCkgPT4gd2luLnByaW50KCksIDEwMCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcbiAqIEBwYXJhbSB7P30ga29UcmlnZ2VyXG4gKiBAcGFyYW0gez99IGNvbnRleHQgPSBudWxsXG4gKiBAcGFyYW0ge251bWJlcj19IHRpbWVyID0gMTAwMFxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24oZkNhbGxiYWNrLCBrb1RyaWdnZXIsIGNvbnRleHQgPSBudWxsLCB0aW1lciA9IDEwMDApIHtcblx0dGltZXIgPSBwSW50KHRpbWVyKTtcblx0cmV0dXJuICh0eXBlLCBkYXRhLCBjYWNoZWQsIHJlcXVlc3RBY3Rpb24sIHJlcXVlc3RQYXJhbWV0ZXJzKSA9PiB7XG5cdFx0a29UcmlnZ2VyLmNhbGwoY29udGV4dCwgZGF0YSAmJiBkYXRhLlJlc3VsdCA/IFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdCA6IFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpO1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjay5jYWxsKGNvbnRleHQsIHR5cGUsIGRhdGEsIGNhY2hlZCwgcmVxdWVzdEFjdGlvbiwgcmVxdWVzdFBhcmFtZXRlcnMpO1xuXHRcdH1cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGtvVHJpZ2dlci5jYWxsKGNvbnRleHQsIFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0fSwgdGltZXIpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBrb1RyaWdnZXJcbiAqIEBwYXJhbSB7bWl4ZWR9IGNvbnRleHRcbiAqIEByZXR1cm5zIHttaXhlZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKGtvVHJpZ2dlciwgY29udGV4dCkge1xuXHRyZXR1cm4gc2V0dGluZ3NTYXZlSGVscGVyRnVuY3Rpb24obnVsbCwga29UcmlnZ2VyLCBjb250ZXh0LCAxMDAwKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVtb3RlXG4gKiBAcGFyYW0ge3N0cmluZ30gc2V0dGluZ05hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmVHJpZ2dlckZ1bmN0aW9uXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR0aW5nc1NhdmVIZWxwZXJTdWJzY3JpYmVGdW5jdGlvbihyZW1vdGUsIHNldHRpbmdOYW1lLCB0eXBlLCBmVHJpZ2dlckZ1bmN0aW9uKSB7XG5cdHJldHVybiAodmFsdWUpID0+IHtcblx0XHRpZiAocmVtb3RlKSB7XG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSAnYm9vbCc6XG5cdFx0XHRcdGNhc2UgJ2Jvb2xlYW4nOlxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUgPyAnMScgOiAnMCc7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2ludCc6XG5cdFx0XHRcdGNhc2UgJ2ludGVnZXInOlxuXHRcdFx0XHRjYXNlICdudW1iZXInOlxuXHRcdFx0XHRcdHZhbHVlID0gcEludCh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3RyaW0nOlxuXHRcdFx0XHRcdHZhbHVlID0gdHJpbSh2YWx1ZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dmFsdWUgPSBwU3RyaW5nKHZhbHVlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0ZGF0YVtzZXR0aW5nTmFtZV0gPSB2YWx1ZTtcblxuXHRcdFx0aWYgKHJlbW90ZS5zYXZlQWRtaW5Db25maWcpIHtcblx0XHRcdFx0cmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmVHJpZ2dlckZ1bmN0aW9uIHx8IG51bGwsIGRhdGEpO1xuXHRcdFx0fSBlbHNlIGlmIChyZW1vdGUuc2F2ZVNldHRpbmdzKSB7XG5cdFx0XHRcdHJlbW90ZS5zYXZlU2V0dGluZ3MoZlRyaWdnZXJGdW5jdGlvbiB8fCBudWxsLCBkYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRW1haWxBbmRMaW5rcyhodG1sKSB7XG5cdHJldHVybiBBdXRvbGlua2VyXG5cdFx0PyBBdXRvbGlua2VyLmxpbmsoaHRtbCwge1xuXHRcdFx0XHRuZXdXaW5kb3c6IHRydWUsXG5cdFx0XHRcdHN0cmlwUHJlZml4OiBmYWxzZSxcblx0XHRcdFx0dXJsczogdHJ1ZSxcblx0XHRcdFx0ZW1haWw6IHRydWUsXG5cdFx0XHRcdG1lbnRpb246IGZhbHNlLFxuXHRcdFx0XHRwaG9uZTogZmFsc2UsXG5cdFx0XHRcdGhhc2h0YWc6IGZhbHNlLFxuXHRcdFx0XHRyZXBsYWNlRm46IGZ1bmN0aW9uKG1hdGNoKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEobWF0Y2ggJiYgJ3VybCcgPT09IG1hdGNoLmdldFR5cGUoKSAmJiBtYXRjaC5tYXRjaGVkVGV4dCAmJiAwICE9PSBtYXRjaC5tYXRjaGVkVGV4dC5pbmRleE9mKCdodHRwJykpO1xuXHRcdFx0XHR9XG5cdFx0ICB9KVxuXHRcdDogaHRtbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxUb1BsYWluKGh0bWwpIHtcblx0bGV0IHBvcyA9IDAsXG5cdFx0bGltaXQgPSAwLFxuXHRcdGlQMSA9IDAsXG5cdFx0aVAyID0gMCxcblx0XHRpUDMgPSAwLFxuXHRcdHRleHQgPSAnJztcblxuXHRjb25zdCBjb252ZXJ0QmxvY2txdW90ZSA9IChibG9ja3F1b3RlVGV4dCkgPT4ge1xuXHRcdGJsb2NrcXVvdGVUZXh0ID0gJz4gJyArIHRyaW0oYmxvY2txdW90ZVRleHQpLnJlcGxhY2UoL1xcbi9nbSwgJ1xcbj4gJyk7XG5cdFx0cmV0dXJuIGJsb2NrcXVvdGVUZXh0LnJlcGxhY2UoLyhefFxcbikoWz4gXSspL2dtLCAoLi4uYXJncykgPT5cblx0XHRcdGFyZ3MgJiYgMiA8IGFyZ3MubGVuZ3RoID8gYXJnc1sxXSArIHRyaW0oYXJnc1syXS5yZXBsYWNlKC9bXFxzXS9nLCAnJykpICsgJyAnIDogJydcblx0XHQpO1xuXHR9O1xuXG5cdGNvbnN0IGNvbnZlcnREaXZzID0gKC4uLmFyZ3MpID0+IHtcblx0XHRpZiAoYXJncyAmJiAxIDwgYXJncy5sZW5ndGgpIHtcblx0XHRcdGxldCBkaXZUZXh0ID0gdHJpbShhcmdzWzFdKTtcblx0XHRcdGlmICgwIDwgZGl2VGV4dC5sZW5ndGgpIHtcblx0XHRcdFx0ZGl2VGV4dCA9IGRpdlRleHQucmVwbGFjZSgvPGRpdltePl0qPihbXFxzXFxTXFxyXFxuXSopPFxcL2Rpdj4vZ2ltLCBjb252ZXJ0RGl2cyk7XG5cdFx0XHRcdGRpdlRleHQgPSAnXFxuJyArIHRyaW0oZGl2VGV4dCkgKyAnXFxuJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpdlRleHQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuICcnO1xuXHR9O1xuXG5cdGNvbnN0IGNvbnZlcnRQcmUgPSAoLi4uYXJncykgPT5cblx0XHRcdGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoXG5cdFx0XHRcdD8gYXJnc1sxXVxuXHRcdFx0XHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9bXFxuXS9nbSwgJzxiciAvPicpXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvW1xccl0vZ20sICcnKVxuXHRcdFx0XHQ6ICcnLFxuXHRcdGZpeEF0dGlidXRlVmFsdWUgPSAoLi4uYXJncykgPT4gKGFyZ3MgJiYgMSA8IGFyZ3MubGVuZ3RoID8gJycgKyBhcmdzWzFdICsgXy5lc2NhcGUoYXJnc1syXSkgOiAnJyksXG5cdFx0Y29udmVydExpbmtzID0gKC4uLmFyZ3MpID0+IChhcmdzICYmIDEgPCBhcmdzLmxlbmd0aCA/IHRyaW0oYXJnc1sxXSkgOiAnJyk7XG5cblx0dGV4dCA9IGh0bWxcblx0XHQucmVwbGFjZSgvPHBbXj5dKj48XFwvcD4vZ2ksICcnKVxuXHRcdC5yZXBsYWNlKC88cHJlW14+XSo+KFtcXHNcXFNcXHJcXG5cXHRdKik8XFwvcHJlPi9naW0sIGNvbnZlcnRQcmUpXG5cdFx0LnJlcGxhY2UoL1tcXHNdKy9nbSwgJyAnKVxuXHRcdC5yZXBsYWNlKC8oKD86aHJlZnxkYXRhKVxccz89XFxzPykoXCJbXlwiXSs/XCJ8J1teJ10rPycpL2dpbSwgZml4QXR0aWJ1dGVWYWx1ZSlcblx0XHQucmVwbGFjZSgvPGJyW14+XSo+L2dpbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC9oW1xcZF0+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL3A+L2dpLCAnXFxuXFxuJylcblx0XHQucmVwbGFjZSgvPHVsW14+XSo+L2dpbSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC91bD4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88bGlbXj5dKj4vZ2ltLCAnICogJylcblx0XHQucmVwbGFjZSgvPFxcL2xpPi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLzxcXC90ZD4vZ2ksICdcXG4nKVxuXHRcdC5yZXBsYWNlKC88XFwvdHI+L2dpLCAnXFxuJylcblx0XHQucmVwbGFjZSgvPGhyW14+XSo+L2dpbSwgJ1xcbl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19cXG5cXG4nKVxuXHRcdC5yZXBsYWNlKC88ZGl2W14+XSo+KFtcXHNcXFNcXHJcXG5dKik8XFwvZGl2Pi9naW0sIGNvbnZlcnREaXZzKVxuXHRcdC5yZXBsYWNlKC88YmxvY2txdW90ZVtePl0qPi9naW0sICdcXG5fX2JxX19zdGFydF9fXFxuJylcblx0XHQucmVwbGFjZSgvPFxcL2Jsb2NrcXVvdGU+L2dpbSwgJ1xcbl9fYnFfX2VuZF9fXFxuJylcblx0XHQucmVwbGFjZSgvPGEgW14+XSo+KFtcXHNcXFNcXHJcXG5dKj8pPFxcL2E+L2dpbSwgY29udmVydExpbmtzKVxuXHRcdC5yZXBsYWNlKC88XFwvZGl2Pi9naSwgJ1xcbicpXG5cdFx0LnJlcGxhY2UoLyZuYnNwOy9naSwgJyAnKVxuXHRcdC5yZXBsYWNlKC8mcXVvdDsvZ2ksICdcIicpXG5cdFx0LnJlcGxhY2UoLzxbXj5dKj4vZ20sICcnKTtcblxuXHR0ZXh0ID0gJGRpdi5odG1sKHRleHQpLnRleHQoKTtcblxuXHR0ZXh0ID0gdGV4dFxuXHRcdC5yZXBsYWNlKC9cXG5bIFxcdF0rL2dtLCAnXFxuJylcblx0XHQucmVwbGFjZSgvW1xcbl17Myx9L2dtLCAnXFxuXFxuJylcblx0XHQucmVwbGFjZSgvJmd0Oy9naSwgJz4nKVxuXHRcdC5yZXBsYWNlKC8mbHQ7L2dpLCAnPCcpXG5cdFx0LnJlcGxhY2UoLyZhbXA7L2dpLCAnJicpO1xuXG5cdHRleHQgPSBzcGxpdFBsYWluVGV4dCh0ZXh0KTtcblxuXHRwb3MgPSAwO1xuXHRsaW1pdCA9IDgwMDtcblxuXHR3aGlsZSAoMCA8IGxpbWl0KSB7XG5cdFx0bGltaXQgLT0gMTtcblx0XHRpUDEgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX3N0YXJ0X18nLCBwb3MpO1xuXHRcdGlmICgtMSA8IGlQMSkge1xuXHRcdFx0aVAyID0gdGV4dC5pbmRleE9mKCdfX2JxX19zdGFydF9fJywgaVAxICsgNSk7XG5cdFx0XHRpUDMgPSB0ZXh0LmluZGV4T2YoJ19fYnFfX2VuZF9fJywgaVAxICsgNSk7XG5cblx0XHRcdGlmICgoLTEgPT09IGlQMiB8fCBpUDMgPCBpUDIpICYmIGlQMSA8IGlQMykge1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaVAxKSArIGNvbnZlcnRCbG9ja3F1b3RlKHRleHQuc3Vic3RyaW5nKGlQMSArIDEzLCBpUDMpKSArIHRleHQuc3Vic3RyaW5nKGlQMyArIDExKTtcblxuXHRcdFx0XHRwb3MgPSAwO1xuXHRcdFx0fSBlbHNlIGlmICgtMSA8IGlQMiAmJiBpUDIgPCBpUDMpIHtcblx0XHRcdFx0cG9zID0gaVAyIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBvcyA9IDA7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL19fYnFfX3N0YXJ0X18vZ20sICcnKS5yZXBsYWNlKC9fX2JxX19lbmRfXy9nbSwgJycpO1xuXG5cdHJldHVybiB0ZXh0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbGFpblxuICogQHBhcmFtIHtib29sZWFufSBmaW5kRW1haWxBbmRMaW5rc0luVGV4dCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGxhaW5Ub0h0bWwocGxhaW4sIGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID0gZmFsc2UpIHtcblx0cGxhaW4gPSBwbGFpbi50b1N0cmluZygpLnJlcGxhY2UoL1xcci9nLCAnJyk7XG5cdHBsYWluID0gcGxhaW4ucmVwbGFjZSgvXj5bPiBdPisvZ20sIChbbWF0Y2hdKSA9PiAobWF0Y2ggPyBtYXRjaC5yZXBsYWNlKC9bIF0rL2csICcnKSA6IG1hdGNoKSk7XG5cblx0bGV0IGJJbiA9IGZhbHNlLFxuXHRcdGJEbyA9IHRydWUsXG5cdFx0YlN0YXJ0ID0gdHJ1ZSxcblx0XHRhTmV4dFRleHQgPSBbXSxcblx0XHRzTGluZSA9ICcnLFxuXHRcdGlJbmRleCA9IDAsXG5cdFx0YVRleHQgPSBwbGFpbi5zcGxpdCgnXFxuJyk7XG5cblx0ZG8ge1xuXHRcdGJEbyA9IGZhbHNlO1xuXHRcdGFOZXh0VGV4dCA9IFtdO1xuXHRcdGZvciAoaUluZGV4ID0gMDsgaUluZGV4IDwgYVRleHQubGVuZ3RoOyBpSW5kZXgrKykge1xuXHRcdFx0c0xpbmUgPSBhVGV4dFtpSW5kZXhdO1xuXHRcdFx0YlN0YXJ0ID0gJz4nID09PSBzTGluZS5zdWJzdHIoMCwgMSk7XG5cdFx0XHRpZiAoYlN0YXJ0ICYmICFiSW4pIHtcblx0XHRcdFx0YkRvID0gdHJ1ZTtcblx0XHRcdFx0YkluID0gdHJ1ZTtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fmJsb2NrcXVvdGV+fn4nKTtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUuc3Vic3RyKDEpKTtcblx0XHRcdH0gZWxzZSBpZiAoIWJTdGFydCAmJiBiSW4pIHtcblx0XHRcdFx0aWYgKCcnICE9PSBzTGluZSkge1xuXHRcdFx0XHRcdGJJbiA9IGZhbHNlO1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKCd+fn4vYmxvY2txdW90ZX5+ficpO1xuXHRcdFx0XHRcdGFOZXh0VGV4dC5wdXNoKHNMaW5lKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYlN0YXJ0ICYmIGJJbikge1xuXHRcdFx0XHRhTmV4dFRleHQucHVzaChzTGluZS5zdWJzdHIoMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YU5leHRUZXh0LnB1c2goc0xpbmUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChiSW4pIHtcblx0XHRcdGJJbiA9IGZhbHNlO1xuXHRcdFx0YU5leHRUZXh0LnB1c2goJ35+fi9ibG9ja3F1b3Rlfn5+Jyk7XG5cdFx0fVxuXG5cdFx0YVRleHQgPSBhTmV4dFRleHQ7XG5cdH0gd2hpbGUgKGJEbyk7XG5cblx0cGxhaW4gPSBhVGV4dC5qb2luKCdcXG4nKTtcblxuXHRwbGFpbiA9IHBsYWluXG5cdFx0Ly8gLnJlcGxhY2UoL35+flxcL2Jsb2NrcXVvdGV+fn5cXG5+fn5ibG9ja3F1b3Rlfn5+L2csICdcXG4nKVxuXHRcdC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG5cdFx0LnJlcGxhY2UoLz4vZywgJyZndDsnKVxuXHRcdC5yZXBsYWNlKC88L2csICcmbHQ7Jylcblx0XHQucmVwbGFjZSgvfn5+YmxvY2txdW90ZX5+fltcXHNdKi9nLCAnPGJsb2NrcXVvdGU+Jylcblx0XHQucmVwbGFjZSgvW1xcc10qfn5+XFwvYmxvY2txdW90ZX5+fi9nLCAnPC9ibG9ja3F1b3RlPicpXG5cdFx0LnJlcGxhY2UoL1xcbi9nLCAnPGJyIC8+Jyk7XG5cblx0cmV0dXJuIGZpbmRFbWFpbEFuZExpbmtzSW5UZXh0ID8gZmluZEVtYWlsQW5kTGlua3MocGxhaW4pIDogcGxhaW47XG59XG5cbndpbmRvd1sncmFpbmxvb3BfVXRpbHNfaHRtbFRvUGxhaW4nXSA9IGh0bWxUb1BsYWluOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxud2luZG93WydyYWlubG9vcF9VdGlsc19wbGFpblRvSHRtbCddID0gcGxhaW5Ub0h0bWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gYVN5c3RlbVxuICogQHBhcmFtIHtBcnJheX0gYUxpc3RcbiAqIEBwYXJhbSB7QXJyYXk9fSBhRGlzYWJsZWRcbiAqIEBwYXJhbSB7QXJyYXk9fSBhSGVhZGVyTGluZXNcbiAqIEBwYXJhbSB7P251bWJlcj19IGlVbkRlZXBcbiAqIEBwYXJhbSB7RnVuY3Rpb249fSBmRGlzYWJsZUNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gZlZpc2libGVDYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbj19IGZSZW5hbWVDYWxsYmFja1xuICogQHBhcmFtIHtib29sZWFuPX0gYlN5c3RlbVxuICogQHBhcmFtIHtib29sZWFuPX0gYkJ1aWxkVW52aXNpYmxlXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkZXJMaXN0T3B0aW9uc0J1aWxkZXIoXG5cdGFTeXN0ZW0sXG5cdGFMaXN0LFxuXHRhRGlzYWJsZWQsXG5cdGFIZWFkZXJMaW5lcyxcblx0aVVuRGVlcCxcblx0ZkRpc2FibGVDYWxsYmFjayxcblx0ZlZpc2libGVDYWxsYmFjayxcblx0ZlJlbmFtZUNhbGxiYWNrLFxuXHRiU3lzdGVtLFxuXHRiQnVpbGRVbnZpc2libGVcbikge1xuXHRsZXQgLyoqXG5cdFx0ICogQHR5cGUgez9Gb2xkZXJNb2RlbH1cblx0XHQgKi9cblx0XHRvSXRlbSA9IG51bGwsXG5cdFx0YlNlcCA9IGZhbHNlLFxuXHRcdGlJbmRleCA9IDAsXG5cdFx0aUxlbiA9IDAsXG5cdFx0YVJlc3VsdCA9IFtdO1xuXG5cdGNvbnN0IHNEZWVwUHJlZml4ID0gJ1xcdTAwQTBcXHUwMEEwXFx1MDBBMCc7XG5cblx0YkJ1aWxkVW52aXNpYmxlID0gaXNVbmQoYkJ1aWxkVW52aXNpYmxlKSA/IGZhbHNlIDogISFiQnVpbGRVbnZpc2libGU7XG5cdGJTeXN0ZW0gPSAhaXNOb3JtYWwoYlN5c3RlbSkgPyAwIDwgYVN5c3RlbS5sZW5ndGggOiBiU3lzdGVtO1xuXHRpVW5EZWVwID0gIWlzTm9ybWFsKGlVbkRlZXApID8gMCA6IGlVbkRlZXA7XG5cdGZEaXNhYmxlQ2FsbGJhY2sgPSBpc05vcm1hbChmRGlzYWJsZUNhbGxiYWNrKSA/IGZEaXNhYmxlQ2FsbGJhY2sgOiBudWxsO1xuXHRmVmlzaWJsZUNhbGxiYWNrID0gaXNOb3JtYWwoZlZpc2libGVDYWxsYmFjaykgPyBmVmlzaWJsZUNhbGxiYWNrIDogbnVsbDtcblx0ZlJlbmFtZUNhbGxiYWNrID0gaXNOb3JtYWwoZlJlbmFtZUNhbGxiYWNrKSA/IGZSZW5hbWVDYWxsYmFjayA6IG51bGw7XG5cblx0aWYgKCFpc0FycmF5KGFEaXNhYmxlZCkpIHtcblx0XHRhRGlzYWJsZWQgPSBbXTtcblx0fVxuXG5cdGlmICghaXNBcnJheShhSGVhZGVyTGluZXMpKSB7XG5cdFx0YUhlYWRlckxpbmVzID0gW107XG5cdH1cblxuXHRmb3IgKGlJbmRleCA9IDAsIGlMZW4gPSBhSGVhZGVyTGluZXMubGVuZ3RoOyBpSW5kZXggPCBpTGVuOyBpSW5kZXgrKykge1xuXHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRpZDogYUhlYWRlckxpbmVzW2lJbmRleF1bMF0sXG5cdFx0XHRuYW1lOiBhSGVhZGVyTGluZXNbaUluZGV4XVsxXSxcblx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRzZXBvcmF0b3I6IGZhbHNlLFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblxuXHRiU2VwID0gdHJ1ZTtcblx0Zm9yIChpSW5kZXggPSAwLCBpTGVuID0gYVN5c3RlbS5sZW5ndGg7IGlJbmRleCA8IGlMZW47IGlJbmRleCsrKSB7XG5cdFx0b0l0ZW0gPSBhU3lzdGVtW2lJbmRleF07XG5cdFx0aWYgKGZWaXNpYmxlQ2FsbGJhY2sgPyBmVmlzaWJsZUNhbGxiYWNrKG9JdGVtKSA6IHRydWUpIHtcblx0XHRcdGlmIChiU2VwICYmIDAgPCBhUmVzdWx0Lmxlbmd0aCkge1xuXHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdGlkOiAnLS0tJyxcblx0XHRcdFx0XHRuYW1lOiAnLS0tJyxcblx0XHRcdFx0XHRzeXN0ZW06IGZhbHNlLFxuXHRcdFx0XHRcdHNlcG9yYXRvcjogdHJ1ZSxcblx0XHRcdFx0XHRkaXNhYmxlZDogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0YlNlcCA9IGZhbHNlO1xuXHRcdFx0YVJlc3VsdC5wdXNoKHtcblx0XHRcdFx0aWQ6IG9JdGVtLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRuYW1lOiBmUmVuYW1lQ2FsbGJhY2sgPyBmUmVuYW1lQ2FsbGJhY2sob0l0ZW0pIDogb0l0ZW0ubmFtZSgpLFxuXHRcdFx0XHRzeXN0ZW06IHRydWUsXG5cdFx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRcdGRpc2FibGVkOlxuXHRcdFx0XHRcdCFvSXRlbS5zZWxlY3RhYmxlIHx8XG5cdFx0XHRcdFx0LTEgPCBpbkFycmF5KG9JdGVtLmZ1bGxOYW1lUmF3LCBhRGlzYWJsZWQpIHx8XG5cdFx0XHRcdFx0KGZEaXNhYmxlQ2FsbGJhY2sgPyBmRGlzYWJsZUNhbGxiYWNrKG9JdGVtKSA6IGZhbHNlKVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YlNlcCA9IHRydWU7XG5cdGZvciAoaUluZGV4ID0gMCwgaUxlbiA9IGFMaXN0Lmxlbmd0aDsgaUluZGV4IDwgaUxlbjsgaUluZGV4KyspIHtcblx0XHRvSXRlbSA9IGFMaXN0W2lJbmRleF07XG5cdFx0Ly8gaWYgKG9JdGVtLnN1YlNjcmliZWQoKSB8fCAhb0l0ZW0uZXhpc3RlbiB8fCBiQnVpbGRVbnZpc2libGUpXG5cdFx0aWYgKFxuXHRcdFx0KG9JdGVtLnN1YlNjcmliZWQoKSB8fCAhb0l0ZW0uZXhpc3RlbiB8fCBiQnVpbGRVbnZpc2libGUpICYmXG5cdFx0XHQob0l0ZW0uc2VsZWN0YWJsZSB8fCBvSXRlbS5oYXNTdWJTY3JpYmVkU3ViZm9sZGVycygpKVxuXHRcdCkge1xuXHRcdFx0aWYgKGZWaXNpYmxlQ2FsbGJhY2sgPyBmVmlzaWJsZUNhbGxiYWNrKG9JdGVtKSA6IHRydWUpIHtcblx0XHRcdFx0aWYgKEZvbGRlclR5cGUuVXNlciA9PT0gb0l0ZW0udHlwZSgpIHx8ICFiU3lzdGVtIHx8IG9JdGVtLmhhc1N1YlNjcmliZWRTdWJmb2xkZXJzKCkpIHtcblx0XHRcdFx0XHRpZiAoYlNlcCAmJiAwIDwgYVJlc3VsdC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGFSZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0XHRcdGlkOiAnLS0tJyxcblx0XHRcdFx0XHRcdFx0bmFtZTogJy0tLScsXG5cdFx0XHRcdFx0XHRcdHN5c3RlbTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNlcG9yYXRvcjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IHRydWVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJTZXAgPSBmYWxzZTtcblx0XHRcdFx0XHRhUmVzdWx0LnB1c2goe1xuXHRcdFx0XHRcdFx0aWQ6IG9JdGVtLmZ1bGxOYW1lUmF3LFxuXHRcdFx0XHRcdFx0bmFtZTpcblx0XHRcdFx0XHRcdFx0bmV3IHdpbmRvdy5BcnJheShvSXRlbS5kZWVwICsgMSAtIGlVbkRlZXApLmpvaW4oc0RlZXBQcmVmaXgpICtcblx0XHRcdFx0XHRcdFx0KGZSZW5hbWVDYWxsYmFjayA/IGZSZW5hbWVDYWxsYmFjayhvSXRlbSkgOiBvSXRlbS5uYW1lKCkpLFxuXHRcdFx0XHRcdFx0c3lzdGVtOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNlcG9yYXRvcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDpcblx0XHRcdFx0XHRcdFx0IW9JdGVtLnNlbGVjdGFibGUgfHxcblx0XHRcdFx0XHRcdFx0LTEgPCBpbkFycmF5KG9JdGVtLmZ1bGxOYW1lUmF3LCBhRGlzYWJsZWQpIHx8XG5cdFx0XHRcdFx0XHRcdChmRGlzYWJsZUNhbGxiYWNrID8gZkRpc2FibGVDYWxsYmFjayhvSXRlbSkgOiBmYWxzZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvSXRlbS5zdWJTY3JpYmVkKCkgJiYgMCA8IG9JdGVtLnN1YkZvbGRlcnMoKS5sZW5ndGgpIHtcblx0XHRcdGFSZXN1bHQgPSBhUmVzdWx0LmNvbmNhdChcblx0XHRcdFx0Zm9sZGVyTGlzdE9wdGlvbnNCdWlsZGVyKFxuXHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdG9JdGVtLnN1YkZvbGRlcnMoKSxcblx0XHRcdFx0XHRhRGlzYWJsZWQsXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0aVVuRGVlcCxcblx0XHRcdFx0XHRmRGlzYWJsZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGZWaXNpYmxlQ2FsbGJhY2ssXG5cdFx0XHRcdFx0ZlJlbmFtZUNhbGxiYWNrLFxuXHRcdFx0XHRcdGJTeXN0ZW0sXG5cdFx0XHRcdFx0YkJ1aWxkVW52aXNpYmxlXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFSZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0RWxlbWVudChlbGVtZW50KSB7XG5cdGxldCBzZWwgPSBudWxsLFxuXHRcdHJhbmdlID0gbnVsbDtcblxuXHRpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuXHRcdHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblx0XHRzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cdFx0cmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblx0XHRyYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG5cdFx0c2VsLmFkZFJhbmdlKHJhbmdlKTtcblx0fSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG5cdFx0cmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTtcblx0XHRyYW5nZS5tb3ZlVG9FbGVtZW50VGV4dChlbGVtZW50KTtcblx0XHRyYW5nZS5zZWxlY3QoKTtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5ID0gXy5kZWJvdW5jZSgoKSA9PiB7XG5cdGRyb3Bkb3duVmlzaWJpbGl0eSghIV8uZmluZChHbG9iYWxzRGF0YS5hQm9vdHN0cmFwRHJvcGRvd25zLCAoaXRlbSkgPT4gaXRlbS5oYXNDbGFzcygnb3BlbicpKSk7XG59LCA1MCk7XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFuPX0gZGVsYXkgPSBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKGRlbGF5ID0gZmFsc2UpIHtcblx0Y29uc3QgZkZ1bmMgPSAoKSA9PiB7XG5cdFx0JCgnLmNoZWNrQXV0b2NvbXBsZXRlJykudHJpZ2dlcignY2hhbmdlJyk7XG5cdH07XG5cblx0aWYgKGRlbGF5KSB7XG5cdFx0Xy5kZWxheShmRnVuYywgMTAwKTtcblx0fSBlbHNlIHtcblx0XHRmRnVuYygpO1xuXHR9XG59XG5cbmNvbnN0IGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZSA9IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlndXJhdGlvbkZyb21TY3JpcHRUYWcoY29uZmlndXJhdGlvbikge1xuXHRpZiAoIWNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXSkge1xuXHRcdGNvbmZpZ3VyYXRpb25TY3JpcHRUYWdDYWNoZVtjb25maWd1cmF0aW9uXSA9ICQoXG5cdFx0XHQnc2NyaXB0W3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdW2RhdGEtY29uZmlndXJhdGlvbj1cIicgKyBjb25maWd1cmF0aW9uICsgJ1wiXSdcblx0XHQpO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShjb25maWd1cmF0aW9uU2NyaXB0VGFnQ2FjaGVbY29uZmlndXJhdGlvbl0udGV4dCgpKTtcblx0fSBjYXRjaCAoZSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge21peGVkfSBtUHJvcE9yVmFsdWVcbiAqIEBwYXJhbSB7bWl4ZWR9IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlT25lKHByb3BPclZhbHVlLCB2YWx1ZSkge1xuXHRjb25zdCBkaXNwb3NhYmxlID0gdmFsdWUgfHwgcHJvcE9yVmFsdWU7XG5cdGlmIChkaXNwb3NhYmxlICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBkaXNwb3NhYmxlLmRpc3Bvc2UpIHtcblx0XHRkaXNwb3NhYmxlLmRpc3Bvc2UoKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3Bvc2VPYmplY3Qob2JqZWN0KSB7XG5cdGlmIChvYmplY3QpIHtcblx0XHRpZiAoaXNBcnJheShvYmplY3QuZGlzcG9zYWJsZXMpKSB7XG5cdFx0XHRfLmVhY2gob2JqZWN0LmRpc3Bvc2FibGVzLCBkaXNwb3NlT25lKTtcblx0XHR9XG5cblx0XHRrby51dGlscy5vYmplY3RGb3JFYWNoKG9iamVjdCwgZGlzcG9zZU9uZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqZWN0T3JPYmplY3RzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGVnYXRlUnVuT25EZXN0cm95KG9iamVjdE9yT2JqZWN0cykge1xuXHRpZiAob2JqZWN0T3JPYmplY3RzKSB7XG5cdFx0aWYgKGlzQXJyYXkob2JqZWN0T3JPYmplY3RzKSkge1xuXHRcdFx0Xy5lYWNoKG9iamVjdE9yT2JqZWN0cywgKGl0ZW0pID0+IHtcblx0XHRcdFx0ZGVsZWdhdGVSdW5PbkRlc3Ryb3koaXRlbSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKG9iamVjdE9yT2JqZWN0cyAmJiBvYmplY3RPck9iamVjdHMub25EZXN0cm95KSB7XG5cdFx0XHRvYmplY3RPck9iamVjdHMub25EZXN0cm95KCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9ICRzdHlsZVRhZ1xuICogQHBhcmFtIHtzdHJpbmd9IGNzc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRTdHlsZXMoJHN0eWxlVGFnLCBjc3MpIHtcblx0aWYgKCRzdHlsZVRhZyAmJiAkc3R5bGVUYWdbMF0pIHtcblx0XHRpZiAoJHN0eWxlVGFnWzBdLnN0eWxlU2hlZXQgJiYgIWlzVW5kKCRzdHlsZVRhZ1swXS5zdHlsZVNoZWV0LmNzc1RleHQpKSB7XG5cdFx0XHQkc3R5bGVUYWdbMF0uc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQkc3R5bGVUYWcudGV4dChjc3MpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5sZXQgX190aGVtZVRpbWVyID0gMCxcblx0X190aGVtZUFqYXggPSBudWxsO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbj19IHRoZW1lVHJpZ2dlciA9IG5vb3BcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlVGhlbWUodmFsdWUsIHRoZW1lVHJpZ2dlciA9IG5vb3ApIHtcblx0Y29uc3QgdGhlbWVMaW5rID0gJCgnI2FwcC10aGVtZS1saW5rJyksXG5cdFx0Y2xlYXJUaW1lciA9ICgpID0+IHtcblx0XHRcdF9fdGhlbWVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoZW1lVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLklkbGUpLCAxMDAwKTtcblx0XHRcdF9fdGhlbWVBamF4ID0gbnVsbDtcblx0XHR9O1xuXG5cdGxldCB0aGVtZVN0eWxlID0gJCgnI2FwcC10aGVtZS1zdHlsZScpLFxuXHRcdHVybCA9IHRoZW1lTGluay5hdHRyKCdocmVmJyk7XG5cblx0aWYgKCF1cmwpIHtcblx0XHR1cmwgPSB0aGVtZVN0eWxlLmF0dHIoJ2RhdGEtaHJlZicpO1xuXHR9XG5cblx0aWYgKHVybCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpLnJlcGxhY2UoL1xcLy1cXC9bXi9dK1xcLy1cXC8vLCAnLy0vJyArIHZhbHVlICsgJy8tLycpO1xuXHRcdHVybCA9IHVybC5yZXBsYWNlKC9cXC9Dc3NcXC9bXi9dK1xcL1VzZXJcXC8vLCAnL0Nzcy8wL1VzZXIvJyk7XG5cdFx0dXJsID0gdXJsLnJlcGxhY2UoL1xcL0hhc2hcXC9bXi9dK1xcLy8sICcvSGFzaC8tLycpO1xuXG5cdFx0aWYgKCdKc29uLycgIT09IHVybC5zdWJzdHJpbmcodXJsLmxlbmd0aCAtIDUsIHVybC5sZW5ndGgpKSB7XG5cdFx0XHR1cmwgKz0gJ0pzb24vJztcblx0XHR9XG5cblx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KF9fdGhlbWVUaW1lcik7XG5cblx0XHR0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblxuXHRcdGlmIChfX3RoZW1lQWpheCAmJiBfX3RoZW1lQWpheC5hYm9ydCkge1xuXHRcdFx0X190aGVtZUFqYXguYWJvcnQoKTtcblx0XHR9XG5cblx0XHRfX3RoZW1lQWpheCA9ICQuYWpheCh7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdGRhdGFUeXBlOiAnanNvbidcblx0XHR9KVxuXHRcdFx0LnRoZW4oKGRhdGEpID0+IHtcblx0XHRcdFx0aWYgKGRhdGEgJiYgaXNBcnJheShkYXRhKSAmJiAyID09PSBkYXRhLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmICh0aGVtZUxpbmsgJiYgdGhlbWVMaW5rWzBdICYmICghdGhlbWVTdHlsZSB8fCAhdGhlbWVTdHlsZVswXSkpIHtcblx0XHRcdFx0XHRcdHRoZW1lU3R5bGUgPSAkKCc8c3R5bGUgaWQ9XCJhcHAtdGhlbWUtc3R5bGVcIj48L3N0eWxlPicpO1xuXHRcdFx0XHRcdFx0dGhlbWVMaW5rLmFmdGVyKHRoZW1lU3R5bGUpO1xuXHRcdFx0XHRcdFx0dGhlbWVMaW5rLnJlbW92ZSgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0aGVtZVN0eWxlICYmIHRoZW1lU3R5bGVbMF0pIHtcblx0XHRcdFx0XHRcdGlmIChhcHBlbmRTdHlsZXModGhlbWVTdHlsZSwgZGF0YVsxXSkpIHtcblx0XHRcdFx0XHRcdFx0dGhlbWVTdHlsZS5hdHRyKCdkYXRhLWhyZWYnLCB1cmwpLmF0dHIoJ2RhdGEtdGhlbWUnLCBkYXRhWzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGVtZVRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC50aGVuKGNsZWFyVGltZXIsIGNsZWFyVGltZXIpO1xuXHR9XG59XG5cbi8qKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWRQYWdlbmF0b3JIZWxwZXIoa29DdXJyZW50UGFnZSwga29QYWdlQ291bnQpIHtcblx0cmV0dXJuICgpID0+IHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IGtvQ3VycmVudFBhZ2UoKSxcblx0XHRcdHBhZ2VDb3VudCA9IGtvUGFnZUNvdW50KCksXG5cdFx0XHRyZXN1bHQgPSBbXSxcblx0XHRcdGZBZGQgPSAoaW5kZXgsIHB1c2ggPSB0cnVlLCBjdXN0b21OYW1lID0gJycpID0+IHtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcblx0XHRcdFx0XHRjdXJyZW50OiBpbmRleCA9PT0gY3VycmVudFBhZ2UsXG5cdFx0XHRcdFx0bmFtZTogJycgPT09IGN1c3RvbU5hbWUgPyBpbmRleC50b1N0cmluZygpIDogY3VzdG9tTmFtZS50b1N0cmluZygpLFxuXHRcdFx0XHRcdGN1c3RvbTogJycgIT09IGN1c3RvbU5hbWUsXG5cdFx0XHRcdFx0dGl0bGU6ICcnID09PSBjdXN0b21OYW1lID8gJycgOiBpbmRleC50b1N0cmluZygpLFxuXHRcdFx0XHRcdHZhbHVlOiBpbmRleC50b1N0cmluZygpXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHB1c2gpIHtcblx0XHRcdFx0XHRyZXN1bHQucHVzaChkYXRhKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXN1bHQudW5zaGlmdChkYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGxldCBwcmV2ID0gMCxcblx0XHRcdG5leHQgPSAwLFxuXHRcdFx0bGltaXQgPSAyO1xuXG5cdFx0aWYgKDEgPCBwYWdlQ291bnQgfHwgKDAgPCBwYWdlQ291bnQgJiYgcGFnZUNvdW50IDwgY3VycmVudFBhZ2UpKSB7XG5cdFx0XHRpZiAocGFnZUNvdW50IDwgY3VycmVudFBhZ2UpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQpO1xuXHRcdFx0XHRwcmV2ID0gcGFnZUNvdW50O1xuXHRcdFx0XHRuZXh0ID0gcGFnZUNvdW50O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKDMgPj0gY3VycmVudFBhZ2UgfHwgcGFnZUNvdW50IC0gMiA8PSBjdXJyZW50UGFnZSkge1xuXHRcdFx0XHRcdGxpbWl0ICs9IDI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmQWRkKGN1cnJlbnRQYWdlKTtcblx0XHRcdFx0cHJldiA9IGN1cnJlbnRQYWdlO1xuXHRcdFx0XHRuZXh0ID0gY3VycmVudFBhZ2U7XG5cdFx0XHR9XG5cblx0XHRcdHdoaWxlICgwIDwgbGltaXQpIHtcblx0XHRcdFx0cHJldiAtPSAxO1xuXHRcdFx0XHRuZXh0ICs9IDE7XG5cblx0XHRcdFx0aWYgKDAgPCBwcmV2KSB7XG5cdFx0XHRcdFx0ZkFkZChwcmV2LCBmYWxzZSk7XG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYWdlQ291bnQgPj0gbmV4dCkge1xuXHRcdFx0XHRcdGZBZGQobmV4dCwgdHJ1ZSk7XG5cdFx0XHRcdFx0bGltaXQgLT0gMTtcblx0XHRcdFx0fSBlbHNlIGlmICgwID49IHByZXYpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoMyA9PT0gcHJldikge1xuXHRcdFx0XHRmQWRkKDIsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSBpZiAoMyA8IHByZXYpIHtcblx0XHRcdFx0ZkFkZChNYXRoLnJvdW5kKChwcmV2IC0gMSkgLyAyKSwgZmFsc2UsICcuLi4nKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBhZ2VDb3VudCAtIDIgPT09IG5leHQpIHtcblx0XHRcdFx0ZkFkZChwYWdlQ291bnQgLSAxLCB0cnVlKTtcblx0XHRcdH0gZWxzZSBpZiAocGFnZUNvdW50IC0gMiA+IG5leHQpIHtcblx0XHRcdFx0ZkFkZChNYXRoLnJvdW5kKChwYWdlQ291bnQgKyBuZXh0KSAvIDIpLCB0cnVlLCAnLi4uJyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGZpcnN0IGFuZCBsYXN0XG5cdFx0XHRpZiAoMSA8IHByZXYpIHtcblx0XHRcdFx0ZkFkZCgxLCBmYWxzZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChwYWdlQ291bnQgPiBuZXh0KSB7XG5cdFx0XHRcdGZBZGQocGFnZUNvdW50LCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpIHtcblx0ZmlsZU5hbWUgPSB0cmltKGZpbGVOYW1lKS50b0xvd2VyQ2FzZSgpO1xuXG5cdGNvbnN0IHJlc3VsdCA9IGZpbGVOYW1lLnNwbGl0KCcuJykucG9wKCk7XG5cdHJldHVybiByZXN1bHQgPT09IGZpbGVOYW1lID8gJycgOiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWltZUNvbnRlbnRUeXBlKGZpbGVOYW1lKSB7XG5cdGxldCBleHQgPSAnJyxcblx0XHRyZXN1bHQgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcblxuXHRmaWxlTmFtZSA9IHRyaW0oZmlsZU5hbWUpLnRvTG93ZXJDYXNlKCk7XG5cblx0aWYgKCd3aW5tYWlsLmRhdCcgPT09IGZpbGVOYW1lKSB7XG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi9tcy10bmVmJztcblx0fVxuXG5cdGV4dCA9IGdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xuXHRpZiAoZXh0ICYmIDAgPCBleHQubGVuZ3RoICYmICFpc1VuZChNaW1lW2V4dF0pKSB7XG5cdFx0cmVzdWx0ID0gTWltZVtleHRdO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3JcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcmFuc3BhcmVudChjb2xvcikge1xuXHRyZXR1cm4gJ3JnYmEoMCwgMCwgMCwgMCknID09PSBjb2xvciB8fCAndHJhbnNwYXJlbnQnID09PSBjb2xvcjtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gJGVsXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVhbEhlaWdodCgkZWwpIHtcblx0JGVsXG5cdFx0LmNsb25lKClcblx0XHQuc2hvdygpXG5cdFx0LmFwcGVuZFRvKCRoY29udCk7XG5cdGNvbnN0IHJlc3VsdCA9ICRoY29udC5oZWlnaHQoKTtcblx0JGhjb250LmVtcHR5KCk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmQ2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUFuZENyb3AodXJsLCB2YWx1ZSwgZkNhbGxiYWNrKSB7XG5cdGNvbnN0IGltZyA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcblx0aW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRcdGxldCBkaWZmID0gWzAsIDBdO1xuXG5cdFx0Y29uc3QgY2FudmFzID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuXHRcdFx0Y3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cblx0XHRjYW52YXMud2lkdGggPSB2YWx1ZTtcblx0XHRjYW52YXMuaGVpZ2h0ID0gdmFsdWU7XG5cblx0XHRpZiAodGhpcy53aWR0aCA+IHRoaXMuaGVpZ2h0KSB7XG5cdFx0XHRkaWZmID0gW3RoaXMud2lkdGggLSB0aGlzLmhlaWdodCwgMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRpZmYgPSBbMCwgdGhpcy5oZWlnaHQgLSB0aGlzLndpZHRoXTtcblx0XHR9XG5cblx0XHRjdHguZmlsbFN0eWxlID0gJyNmZmYnO1xuXHRcdGN0eC5maWxsUmVjdCgwLCAwLCB2YWx1ZSwgdmFsdWUpO1xuXHRcdGN0eC5kcmF3SW1hZ2UodGhpcywgZGlmZlswXSAvIDIsIGRpZmZbMV0gLyAyLCB0aGlzLndpZHRoIC0gZGlmZlswXSwgdGhpcy5oZWlnaHQgLSBkaWZmWzFdLCAwLCAwLCB2YWx1ZSwgdmFsdWUpO1xuXG5cdFx0ZkNhbGxiYWNrKGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKSk7XG5cdH07XG5cblx0aW1nLnNyYyA9IHVybDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFpbFRvVXJsXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBQb3B1cENvbXBvc2VWaWV3TW9kZWxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpbFRvSGVscGVyKG1haWxUb1VybCwgUG9wdXBDb21wb3NlVmlld01vZGVsKSB7XG5cdGlmIChcblx0XHRtYWlsVG9VcmwgJiZcblx0XHQnbWFpbHRvOicgPT09XG5cdFx0XHRtYWlsVG9Vcmxcblx0XHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdFx0LnN1YnN0cigwLCA3KVxuXHRcdFx0XHQudG9Mb3dlckNhc2UoKVxuXHQpIHtcblx0XHRpZiAoIVBvcHVwQ29tcG9zZVZpZXdNb2RlbCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bWFpbFRvVXJsID0gbWFpbFRvVXJsLnRvU3RyaW5nKCkuc3Vic3RyKDcpO1xuXG5cdFx0bGV0IHRvID0gW10sXG5cdFx0XHRjYyA9IG51bGwsXG5cdFx0XHRiY2MgPSBudWxsLFxuXHRcdFx0cGFyYW1zID0ge307XG5cblx0XHRjb25zdCBlbWFpbCA9IG1haWxUb1VybC5yZXBsYWNlKC9cXD8uKyQvLCAnJyksXG5cdFx0XHRxdWVyeSA9IG1haWxUb1VybC5yZXBsYWNlKC9eW14/XSpcXD8vLCAnJyksXG5cdFx0XHRFbWFpbE1vZGVsID0gcmVxdWlyZSgnTW9kZWwvRW1haWwnKS5kZWZhdWx0O1xuXG5cdFx0cGFyYW1zID0gc2ltcGxlUXVlcnlQYXJzZXIocXVlcnkpO1xuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMudG8pKSB7XG5cdFx0XHR0byA9IEVtYWlsTW9kZWwucGFyc2VFbWFpbExpbmUoZGVjb2RlVVJJQ29tcG9uZW50KGVtYWlsICsgJywnICsgcGFyYW1zLnRvKSk7XG5cdFx0XHR0byA9IF8udmFsdWVzKFxuXHRcdFx0XHR0by5yZWR1Y2UoKHJlc3VsdCwgdmFsdWUpID0+IHtcblx0XHRcdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdGlmIChyZXN1bHRbdmFsdWUuZW1haWxdKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcmVzdWx0W3ZhbHVlLmVtYWlsXS5uYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0W3ZhbHVlLmVtYWlsXSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRbdmFsdWUuZW1haWxdID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdH0sIHt9KVxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dG8gPSBFbWFpbE1vZGVsLnBhcnNlRW1haWxMaW5lKGVtYWlsKTtcblx0XHR9XG5cblx0XHRpZiAoIWlzVW5kKHBhcmFtcy5jYykpIHtcblx0XHRcdGNjID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmNjKSk7XG5cdFx0fVxuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMuYmNjKSkge1xuXHRcdFx0YmNjID0gRW1haWxNb2RlbC5wYXJzZUVtYWlsTGluZShkZWNvZGVVUklDb21wb25lbnQocGFyYW1zLmJjYykpO1xuXHRcdH1cblxuXHRcdHJlcXVpcmUoJ0tub2luL0tub2luJykuc2hvd1NjcmVlblBvcHVwKFBvcHVwQ29tcG9zZVZpZXdNb2RlbCwgW1xuXHRcdFx0Q29tcG9zZVR5cGUuRW1wdHksXG5cdFx0XHRudWxsLFxuXHRcdFx0dG8sXG5cdFx0XHRjYyxcblx0XHRcdGJjYyxcblx0XHRcdGlzVW5kKHBhcmFtcy5zdWJqZWN0KSA/IG51bGwgOiBwU3RyaW5nKGRlY29kZVVSSUNvbXBvbmVudChwYXJhbXMuc3ViamVjdCkpLFxuXHRcdFx0aXNVbmQocGFyYW1zLmJvZHkpID8gbnVsbCA6IHBsYWluVG9IdG1sKHBTdHJpbmcoZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtcy5ib2R5KSkpXG5cdFx0XSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb21SZWFkeShmbikge1xuXHQkKCgpID0+IGZuKCkpO1xuXHQvL1xuXHQvL1x0aWYgKCdsb2FkaW5nJyAhPT0gd2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUpXG5cdC8vXHR7XG5cdC8vXHRcdGZuKCk7XG5cdC8vXHR9XG5cdC8vXHRlbHNlXG5cdC8vXHR7XG5cdC8vXHRcdHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZm4pO1xuXHQvL1x0fVxufVxuXG5leHBvcnQgY29uc3Qgd2luZG93UmVzaXplID0gXy5kZWJvdW5jZSgodGltZW91dCkgPT4ge1xuXHRpZiAoaXNVbmQodGltZW91dCkgfHwgaXNOdWxsKHRpbWVvdXQpKSB7XG5cdFx0JHdpbi5yZXNpemUoKTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHQkd2luLnJlc2l6ZSgpO1xuXHRcdH0sIHRpbWVvdXQpO1xuXHR9XG59LCA1MCk7XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dSZXNpemVDYWxsYmFjaygpIHtcblx0d2luZG93UmVzaXplKCk7XG59XG5cbmxldCBzdWJzdHIgPSB3aW5kb3cuU3RyaW5nLnN1YnN0cjtcbmlmICgnYicgIT09ICdhYicuc3Vic3RyKC0xKSkge1xuXHRzdWJzdHIgPSAoc3RyLCBzdGFydCwgbGVuZ3RoKSA9PiB7XG5cdFx0c3RhcnQgPSAwID4gc3RhcnQgPyBzdHIubGVuZ3RoICsgc3RhcnQgOiBzdGFydDtcblx0XHRyZXR1cm4gc3RyLnN1YnN0cihzdGFydCwgbGVuZ3RoKTtcblx0fTtcblxuXHR3aW5kb3cuU3RyaW5nLnN1YnN0ciA9IHN1YnN0cjtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Ll87IiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3c7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IHsgaXNVbmQsIGlzTm9ybWFsLCBpc0FycmF5LCBpbkFycmF5IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxubGV0IFNFVFRJTkdTID0gd2luZG93Ll9fcmxhaF9kYXRhKCkgfHwgbnVsbDtcblNFVFRJTkdTID0gaXNOb3JtYWwoU0VUVElOR1MpID8gU0VUVElOR1MgOiB7fTtcblxubGV0IEFQUF9TRVRUSU5HUyA9IFNFVFRJTkdTLlN5c3RlbSB8fCBudWxsO1xuQVBQX1NFVFRJTkdTID0gaXNOb3JtYWwoQVBQX1NFVFRJTkdTKSA/IEFQUF9TRVRUSU5HUyA6IHt9O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHRpbmdzR2V0KG5hbWUpIHtcblx0cmV0dXJuIGlzVW5kKFNFVFRJTkdTW25hbWVdKSA/IG51bGwgOiBTRVRUSU5HU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NTZXQobmFtZSwgdmFsdWUpIHtcblx0U0VUVElOR1NbbmFtZV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBTZXR0aW5nc0dldChuYW1lKSB7XG5cdHJldHVybiBpc1VuZChBUFBfU0VUVElOR1NbbmFtZV0pID8gbnVsbCA6IEFQUF9TRVRUSU5HU1tuYW1lXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXBhKG5hbWUpIHtcblx0Y29uc3QgdmFsdWVzID0gc2V0dGluZ3NHZXQoJ0NhcGEnKTtcblx0cmV0dXJuIGlzQXJyYXkodmFsdWVzKSAmJiBpc05vcm1hbChuYW1lKSAmJiAtMSA8IGluQXJyYXkobmFtZSwgdmFsdWVzKTtcbn1cbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga2V5IGZyb20gJ2tleSc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgS2V5U3RhdGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuXG5jb25zdCAkd2luID0gJCh3aW5kb3cpO1xuJHdpbi5fX3NpemVzID0gWzAsIDBdO1xuXG5leHBvcnQgeyAkd2luIH07XG5cbmV4cG9ydCBjb25zdCAkZG9jID0gJCh3aW5kb3cuZG9jdW1lbnQpO1xuXG5leHBvcnQgY29uc3QgJGh0bWwgPSAkKCdodG1sJyk7XG5cbmV4cG9ydCBjb25zdCAkYm9keSA9ICQoJ2JvZHknKTtcblxuZXhwb3J0IGNvbnN0ICRkaXYgPSAkKCc8ZGl2PjwvZGl2PicpO1xuXG5leHBvcnQgY29uc3QgJGhjb250ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiRoY29udFxuXHQuYXR0cignYXJlYScsICdoaWRkZW4nKVxuXHQuY3NzKHsgcG9zaXRpb246ICdhYnNvbHV0ZScsIGxlZnQ6IC01MDAwIH0pXG5cdC5hcHBlbmRUbygkYm9keSk7XG5cbmV4cG9ydCBjb25zdCBzdGFydE1pY3JvdGltZSA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbW11bml0eSA9IFJMX0NPTU1VTklUWTtcblxuLyoqXG4gKiBAdHlwZSB7P31cbiAqL1xuZXhwb3J0IGNvbnN0IGRyb3Bkb3duVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUtleWJvYXJkU2hvcnRjdXRzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3Qgc1VzZXJBZ2VudCA9XG5cdCgnbmF2aWdhdG9yJyBpbiB3aW5kb3cgJiYgJ3VzZXJBZ2VudCcgaW4gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSB8fCAnJztcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJJRSA9IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdtc2llJyk7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiQ2hyb21lID0gLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYlNhZmFyaSA9ICFiQ2hyb21lICYmIC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdzYWZhcmknKTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJNb2JpbGVEZXZpY2UgPVxuXHQoL2FuZHJvaWQvaSkudGVzdChzVXNlckFnZW50KSB8fFxuXHQoL2lwaG9uZS9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBvZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvaXBhZC9pKS50ZXN0KHNVc2VyQWdlbnQpIHx8XG5cdCgvYmxhY2tiZXJyeS9pKS50ZXN0KHNVc2VyQWdlbnQpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYkRpc2FibGVOYW5vU2Nyb2xsID0gYk1vYmlsZURldmljZTtcblxuLyoqXG4gKiBAdHlwZSB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IGJBbmltYXRpb25TdXBwb3J0ZWQgPVxuXHQhYk1vYmlsZURldmljZSAmJiAkaHRtbC5oYXNDbGFzcygnY3NzdHJhbnNpdGlvbnMnKSAmJiAkaHRtbC5oYXNDbGFzcygnY3NzYW5pbWF0aW9ucycpO1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgYlhNTEh0dHBSZXF1ZXN0U3VwcG9ydGVkID0gISF3aW5kb3cuWE1MSHR0cFJlcXVlc3Q7XG5cbi8qKlxuICogQHR5cGUge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCBiSXNIdHRwcyA9XG5cdHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24gPyAnaHR0cHM6JyA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sIDogZmFsc2U7XG5cbi8qKlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxFZGl0b3JEZWZhdWx0Q29uZmlnID0ge1xuXHQndGl0bGUnOiBmYWxzZSxcblx0J3N0eWxlc1NldCc6IGZhbHNlLFxuXHQnY3VzdG9tQ29uZmlnJzogJycsXG5cdCdjb250ZW50c0Nzcyc6ICcnLFxuXHQndG9vbGJhckdyb3Vwcyc6IFtcblx0XHR7IG5hbWU6ICdzcGVjJyB9LFxuXHRcdHsgbmFtZTogJ3N0eWxlcycgfSxcblx0XHR7IG5hbWU6ICdiYXNpY3N0eWxlcycsIGdyb3VwczogWydiYXNpY3N0eWxlcycsICdjbGVhbnVwJywgJ2JpZGknXSB9LFxuXHRcdHsgbmFtZTogJ2NvbG9ycycgfSxcblx0XHRiTW9iaWxlRGV2aWNlID8ge30gOiB7IG5hbWU6ICdwYXJhZ3JhcGgnLCBncm91cHM6IFsnbGlzdCcsICdpbmRlbnQnLCAnYmxvY2tzJywgJ2FsaWduJ10gfSxcblx0XHR7IG5hbWU6ICdsaW5rcycgfSxcblx0XHR7IG5hbWU6ICdpbnNlcnQnIH0sXG5cdFx0eyBuYW1lOiAnZG9jdW1lbnQnLCBncm91cHM6IFsnbW9kZScsICdkb2N1bWVudCcsICdkb2N0b29scyddIH0sXG5cdFx0eyBuYW1lOiAnb3RoZXJzJyB9XG5cdF0sXG5cblx0J3JlbW92ZVBsdWdpbnMnOiAnbGlzdHN0eWxlJyxcblx0J3JlbW92ZUJ1dHRvbnMnOiAnRm9ybWF0LFVuZG8sUmVkbyxDdXQsQ29weSxQYXN0ZSxBbmNob3IsU3RyaWtlLFN1YnNjcmlwdCxTdXBlcnNjcmlwdCxJbWFnZSxTZWxlY3RBbGwsU291cmNlJyxcblx0J3JlbW92ZURpYWxvZ1RhYnMnOiAnbGluazphZHZhbmNlZDtsaW5rOnRhcmdldDtpbWFnZTphZHZhbmNlZDtpbWFnZXM6YWR2YW5jZWQnLFxuXG5cdCdleHRyYVBsdWdpbnMnOiAncGxhaW4sc2lnbmF0dXJlJyxcblxuXHQnYWxsb3dlZENvbnRlbnQnOiB0cnVlLFxuXHQnZXh0cmFBbGxvd2VkQ29udGVudCc6IHRydWUsXG5cblx0J2ZpbGxFbXB0eUJsb2Nrcyc6IGZhbHNlLFxuXHQnaWdub3JlRW1wdHlQYXJhZ3JhcGgnOiB0cnVlLFxuXHQnZGlzYWJsZU5hdGl2ZVNwZWxsQ2hlY2tlcic6IGZhbHNlLFxuXG5cdCdjb2xvckJ1dHRvbl9lbmFibGVBdXRvbWF0aWMnOiBmYWxzZSxcblx0J2NvbG9yQnV0dG9uX2VuYWJsZU1vcmUnOiB0cnVlLFxuXG5cdCdmb250X2RlZmF1bHRMYWJlbCc6ICdBcmlhbCcsXG5cdCdmb250U2l6ZV9kZWZhdWx0TGFiZWwnOiAnMTMnLFxuXHQnZm9udFNpemVfc2l6ZXMnOiAnMTAvMTBweDsxMi8xMnB4OzEzLzEzcHg7MTQvMTRweDsxNi8xNnB4OzE4LzE4cHg7MjAvMjBweDsyNC8yNHB4OzI4LzI4cHg7MzYvMzZweDs0OC80OHB4J1xufTtcblxuLyoqXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnQgY29uc3QgaHRtbEVkaXRvckxhbmdzTWFwID0ge1xuXHQnYXJfc2EnOiAnYXItc2EnLFxuXHQnYmdfYmcnOiAnYmcnLFxuXHQnY3NfQ1onOiAnY3MnLFxuXHQnZGVfZGUnOiAnZGUnLFxuXHQnZWxfZ3InOiAnZWwnLFxuXHQnZXNfZXMnOiAnZXMnLFxuXHQnZXRfZWUnOiAnZXQnLFxuXHQnZnJfZnInOiAnZnInLFxuXHQnaHVfaHUnOiAnaHUnLFxuXHQnaXNfaXMnOiAnaXMnLFxuXHQnaXRfaXQnOiAnaXQnLFxuXHQnamFfanAnOiAnamEnLFxuXHQna29fa3InOiAna28nLFxuXHQnbHRfbHQnOiAnbHQnLFxuXHQnbHZfbHYnOiAnbHYnLFxuXHQnZmFfaXInOiAnZmEnLFxuXHQnbmJfbm8nOiAnbmInLFxuXHQnbmxfbmwnOiAnbmwnLFxuXHQncGxfcGwnOiAncGwnLFxuXHQncHRfYnInOiAncHQtYnInLFxuXHQncHRfcHQnOiAncHQnLFxuXHQncm9fcm8nOiAncm8nLFxuXHQncnVfcnUnOiAncnUnLFxuXHQnc2tfc2snOiAnc2snLFxuXHQnc2xfc2knOiAnc2wnLFxuXHQnc3Zfc2UnOiAnc3YnLFxuXHQndHJfdHInOiAndHInLFxuXHQndWtfdWEnOiAndWsnLFxuXHQnemhfY24nOiAnemgtY24nLFxuXHQnemhfdHcnOiAnemgnXG59O1xuXG4vKipcbiAqIEB0eXBlIHtib29sZWFufVxuICovXG5sZXQgYkFsbG93UGRmUHJldmlldyA9ICFiTW9iaWxlRGV2aWNlO1xuXG5pZiAoYkFsbG93UGRmUHJldmlldyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHdpbmRvdy5uYXZpZ2F0b3IubWltZVR5cGVzKSB7XG5cdGJBbGxvd1BkZlByZXZpZXcgPSAhIV8uZmluZCh3aW5kb3cubmF2aWdhdG9yLm1pbWVUeXBlcywgKHR5cGUpID0+IHR5cGUgJiYgJ2FwcGxpY2F0aW9uL3BkZicgPT09IHR5cGUudHlwZSk7XG5cblx0aWYgKCFiQWxsb3dQZGZQcmV2aWV3KSB7XG5cdFx0YkFsbG93UGRmUHJldmlldyA9ICd1bmRlZmluZWQnICE9PSB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvci5taW1lVHlwZXNbJ2FwcGxpY2F0aW9uL3BkZiddO1xuXHR9XG59XG5cbmV4cG9ydCB7IGJBbGxvd1BkZlByZXZpZXcgfTtcblxuZXhwb3J0IGNvbnN0IFZJRVdfTU9ERUxTID0ge1xuXHRzZXR0aW5nczogW10sXG5cdCdzZXR0aW5ncy1yZW1vdmVkJzogW10sXG5cdCdzZXR0aW5ncy1kaXNhYmxlZCc6IFtdXG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUFjdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbERpc2FibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5leHBvcnQgY29uc3QgbGVmdFBhbmVsVHlwZSA9IGtvLm9ic2VydmFibGUoJycpO1xuZXhwb3J0IGNvbnN0IGxlZnRQYW5lbFdpZHRoID0ga28ub2JzZXJ2YWJsZSgwKTtcblxubGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRpZiAodmFsdWUgJiYgbW92ZUFjdGlvbigpKSB7XG5cdFx0bW92ZUFjdGlvbihmYWxzZSk7XG5cdH1cbn0pO1xuXG5tb3ZlQWN0aW9uLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0aWYgKHZhbHVlICYmIGxlZnRQYW5lbERpc2FibGVkKCkpIHtcblx0XHRsZWZ0UGFuZWxEaXNhYmxlZChmYWxzZSk7XG5cdH1cbn0pO1xuXG4vLyBwb3B1cHNcbmV4cG9ydCBjb25zdCBwb3B1cFZpc2liaWxpdHlOYW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cbmV4cG9ydCBjb25zdCBwb3B1cFZpc2liaWxpdHkgPSBrby5jb21wdXRlZCgoKSA9PiAwIDwgcG9wdXBWaXNpYmlsaXR5TmFtZXMoKS5sZW5ndGgpO1xuXG5wb3B1cFZpc2liaWxpdHkuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0JGh0bWwudG9nZ2xlQ2xhc3MoJ3JsLW1vZGFsJywgYlZhbHVlKTtcbn0pO1xuXG4vLyBrZXlzXG5leHBvcnQgY29uc3Qga2V5U2NvcGVSZWFsID0ga28ub2JzZXJ2YWJsZShLZXlTdGF0ZS5BbGwpO1xuZXhwb3J0IGNvbnN0IGtleVNjb3BlRmFrZSA9IGtvLm9ic2VydmFibGUoS2V5U3RhdGUuQWxsKTtcblxuZXhwb3J0IGNvbnN0IGtleVNjb3BlID0ga28uY29tcHV0ZWQoe1xuXHRyZWFkOiAoKSA9PiBrZXlTY29wZUZha2UoKSxcblx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdGlmIChLZXlTdGF0ZS5NZW51ICE9PSB2YWx1ZSkge1xuXHRcdFx0aWYgKEtleVN0YXRlLkNvbXBvc2UgPT09IHZhbHVlKSB7XG5cdFx0XHRcdC8vIGRpc2FibGVLZXlGaWx0ZXJcblx0XHRcdFx0a2V5LmZpbHRlciA9ICgpID0+IHVzZUtleWJvYXJkU2hvcnRjdXRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyByZXN0b3JlS2V5RmlsdGVyXG5cdFx0XHRcdGtleS5maWx0ZXIgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRpZiAodXNlS2V5Ym9hcmRTaG9ydGN1dHMoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWwgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCxcblx0XHRcdFx0XHRcdFx0dGFnTmFtZSA9IGVsID8gZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpIDogJyc7XG5cblx0XHRcdFx0XHRcdHJldHVybiAhKFxuXHRcdFx0XHRcdFx0XHQnSU5QVVQnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdCdTRUxFQ1QnID09PSB0YWdOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdCdURVhUQVJFQScgPT09IHRhZ05hbWUgfHxcblx0XHRcdFx0XHRcdFx0KGVsICYmICdESVYnID09PSB0YWdOYW1lICYmICgnZWRpdG9ySHRtbEFyZWEnID09PSBlbC5jbGFzc05hbWUgfHwgJ3RydWUnID09PSAnJyArIGVsLmNvbnRlbnRFZGl0YWJsZSkpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0a2V5U2NvcGVGYWtlKHZhbHVlKTtcblx0XHRcdGlmIChkcm9wZG93blZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHR2YWx1ZSA9IEtleVN0YXRlLk1lbnU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0a2V5U2NvcGVSZWFsKHZhbHVlKTtcblx0fVxufSk7XG5cbmtleVNjb3BlUmVhbC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdC8vXHR3aW5kb3cuY29uc29sZS5sb2coJ2tleVNjb3BlPScgKyBzVmFsdWUpOyAvLyBERUJVR1xuXHRrZXkuc2V0U2NvcGUodmFsdWUpO1xufSk7XG5cbmRyb3Bkb3duVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdGlmICh2YWx1ZSkge1xuXHRcdGtleVNjb3BlKEtleVN0YXRlLk1lbnUpO1xuXHR9IGVsc2UgaWYgKEtleVN0YXRlLk1lbnUgPT09IGtleS5nZXRTY29wZSgpKSB7XG5cdFx0a2V5U2NvcGUoa2V5U2NvcGVGYWtlKCkpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBAdHlwZSB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGEgPSB7XG5cdF9fQVBQX186IG51bGwsXG5cdGlBamF4RXJyb3JDb3VudDogMCxcblx0aVRva2VuRXJyb3JDb3VudDogMCxcblx0YUJvb3RzdHJhcERyb3Bkb3duczogW10sXG5cdGlNZXNzYWdlQm9keUNhY2hlQ291bnQ6IDAsXG5cdGJVbmxvYWQ6IGZhbHNlXG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgaGFzaGVyIGZyb20gJ2hhc2hlcic7XG5pbXBvcnQgY3Jvc3Nyb2FkcyBmcm9tICdjcm9zc3JvYWRzJztcblxuaW1wb3J0IHsgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5pbXBvcnQgeyAkaHRtbCwgVklFV19NT0RFTFMsIHBvcHVwVmlzaWJpbGl0eU5hbWVzIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc1VuZCwgcFN0cmluZywgbG9nLCBpc0Z1bmMsIGNyZWF0ZUNvbW1hbmRMZWdhY3ksIGRlbGVnYXRlUnVuLCBpc05vbkVtcHR5QXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5sZXQgY3VycmVudFNjcmVlbiA9IG51bGwsXG5cdGRlZmF1bHRTY3JlZW5OYW1lID0gJyc7XG5cbmNvbnN0IFNDUkVFTlMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IFZpZXdUeXBlID0ge1xuXHRQb3B1cDogJ1BvcHVwcycsXG5cdExlZnQ6ICdMZWZ0Jyxcblx0UmlnaHQ6ICdSaWdodCcsXG5cdENlbnRlcjogJ0NlbnRlcidcbn07XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlTG9hZGluZygpIHtcblx0JCgnI3JsLWNvbnRlbnQnKS5hZGRDbGFzcygncmwtY29udGVudC1zaG93Jyk7XG5cdCQoJyNybC1sb2FkaW5nJylcblx0XHQuaGlkZSgpXG5cdFx0LnJlbW92ZSgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZFeGVjdXRlXG4gKiBAcGFyYW0geyhGdW5jdGlvbnxib29sZWFufG51bGwpPX0gZkNhbkV4ZWN1dGUgPSB0cnVlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb21tYW5kKGZFeGVjdXRlLCBmQ2FuRXhlY3V0ZSA9IHRydWUpIHtcblx0cmV0dXJuIGNyZWF0ZUNvbW1hbmRMZWdhY3kobnVsbCwgZkV4ZWN1dGUsIGZDYW5FeGVjdXRlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZVxuICogQHBhcmFtIHtib29sZWFuPX0gaXNEZWZhdWx0ID0gZmFsc2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU2V0dGluZ3NWaWV3TW9kZWwoU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUsIGlzRGVmYXVsdCA9IGZhbHNlKSB7XG5cdFNldHRpbmdzVmlld01vZGVsQ2xhc3MuX19ybFNldHRpbmdzRGF0YSA9IHtcblx0XHRMYWJlbDogbGFiZWxOYW1lLFxuXHRcdFRlbXBsYXRlOiB0ZW1wbGF0ZSxcblx0XHRSb3V0ZTogcm91dGUsXG5cdFx0SXNEZWZhdWx0OiAhIWlzRGVmYXVsdFxuXHR9O1xuXG5cdFZJRVdfTU9ERUxTLnNldHRpbmdzLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKSB7XG5cdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1yZW1vdmVkJ10ucHVzaChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBTZXR0aW5nc1ZpZXdNb2RlbENsYXNzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzKSB7XG5cdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLnB1c2goU2V0dGluZ3NWaWV3TW9kZWxDbGFzcyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZU9mZigpIHtcblx0aGFzaGVyLmNoYW5nZWQuYWN0aXZlID0gZmFsc2U7XG59XG5cbi8qKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb3V0ZU9uKCkge1xuXHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW5OYW1lXG4gKiBAcmV0dXJucyB7P09iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcmVlbihzY3JlZW5OYW1lKSB7XG5cdHJldHVybiAnJyAhPT0gc2NyZWVuTmFtZSAmJiAhaXNVbmQoU0NSRUVOU1tzY3JlZW5OYW1lXSkgPyBTQ1JFRU5TW3NjcmVlbk5hbWVdIDogbnVsbDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBWaWV3TW9kZWxDbGFzc1RvU2hvd1xuICogQHJldHVybnMge0Z1bmN0aW9ufG51bGx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JlZW5Qb3B1cChQb3B1Vmlld01vZGVsQ2xhc3MpIHtcblx0bGV0IHJlc3VsdCA9IG51bGw7XG5cdGlmIChQb3B1Vmlld01vZGVsQ2xhc3MpIHtcblx0XHRyZXN1bHQgPSBQb3B1Vmlld01vZGVsQ2xhc3M7XG5cdFx0aWYgKFBvcHVWaWV3TW9kZWxDbGFzcy5kZWZhdWx0KSB7XG5cdFx0XHRyZXN1bHQgPSBQb3B1Vmlld01vZGVsQ2xhc3MuZGVmYXVsdDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9IaWRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGVTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvSGlkZSkge1xuXHRjb25zdCBNb2RhbFZpZXcgPSBnZXRTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvSGlkZSk7XG5cdGlmIChNb2RhbFZpZXcgJiYgTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0TW9kYWxWaWV3Ll9fdm0ubW9kYWxWaXNpYmlsaXR5KGZhbHNlKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBob29rTmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7bWl4ZWQ9fSBwYXJhbXMgPSBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2bVJ1bkhvb2soaG9va05hbWUsIFZpZXdNb2RlbENsYXNzLCBwYXJhbXMgPSBudWxsKSB7XG5cdF8uZWFjaChWaWV3TW9kZWxDbGFzcy5fX25hbWVzLCAobmFtZSkgPT4ge1xuXHRcdHJ1bkhvb2soaG9va05hbWUsIFtuYW1lLCBWaWV3TW9kZWxDbGFzcy5fX3ZtLCBwYXJhbXNdKTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7T2JqZWN0PX0gdm1TY3JlZW5cbiAqIEByZXR1cm5zIHsqfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWaWV3TW9kZWwoVmlld01vZGVsQ2xhc3MsIHZtU2NyZWVuKSB7XG5cdGlmIChWaWV3TW9kZWxDbGFzcyAmJiAhVmlld01vZGVsQ2xhc3MuX19idWlsZGVkKSB7XG5cdFx0bGV0IHZtRG9tID0gbnVsbDtcblx0XHRjb25zdCB2bSA9IG5ldyBWaWV3TW9kZWxDbGFzcyh2bVNjcmVlbiksXG5cdFx0XHRwb3NpdGlvbiA9IFZpZXdNb2RlbENsYXNzLl9fdHlwZSB8fCAnJyxcblx0XHRcdHZtUGxhY2UgPSBwb3NpdGlvbiA/ICQoJyNybC1jb250ZW50ICNybC0nICsgcG9zaXRpb24udG9Mb3dlckNhc2UoKSkgOiBudWxsO1xuXG5cdFx0Vmlld01vZGVsQ2xhc3MuX19idWlsZGVkID0gdHJ1ZTtcblx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtID0gdm07XG5cblx0XHR2bS5vblNob3dUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dm0ub25IaWRlVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dm0udmlld01vZGVsTmFtZSA9IFZpZXdNb2RlbENsYXNzLl9fbmFtZTtcblx0XHR2bS52aWV3TW9kZWxOYW1lcyA9IFZpZXdNb2RlbENsYXNzLl9fbmFtZXM7XG5cdFx0dm0udmlld01vZGVsVGVtcGxhdGVJRCA9IFZpZXdNb2RlbENsYXNzLl9fdGVtcGxhdGVJRDtcblx0XHR2bS52aWV3TW9kZWxQb3NpdGlvbiA9IFZpZXdNb2RlbENsYXNzLl9fdHlwZTtcblxuXHRcdGlmICh2bVBsYWNlICYmIDEgPT09IHZtUGxhY2UubGVuZ3RoKSB7XG5cdFx0XHR2bURvbSA9ICQoJzxkaXY+PC9kaXY+Jylcblx0XHRcdFx0LmFkZENsYXNzKCdybC12aWV3LW1vZGVsJylcblx0XHRcdFx0LmFkZENsYXNzKCdSTC0nICsgdm0udmlld01vZGVsVGVtcGxhdGVJRClcblx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdHZtRG9tLmFwcGVuZFRvKHZtUGxhY2UpO1xuXG5cdFx0XHR2bS52aWV3TW9kZWxEb20gPSB2bURvbTtcblx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tID0gdm1Eb207XG5cblx0XHRcdGlmIChWaWV3VHlwZS5Qb3B1cCA9PT0gcG9zaXRpb24pIHtcblx0XHRcdFx0dm0uY2FuY2VsQ29tbWFuZCA9IHZtLmNsb3NlQ29tbWFuZCA9IGNyZWF0ZUNvbW1hbmQoKCkgPT4ge1xuXHRcdFx0XHRcdGhpZGVTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzcyk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZtLm1vZGFsVmlzaWJpbGl0eS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0XHR2bS52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0dm0uc3RvcmVBbmRTZXRLZXlTY29wZSgpO1xuXG5cdFx0XHRcdFx0XHRwb3B1cFZpc2liaWxpdHlOYW1lcy5wdXNoKHZtLnZpZXdNb2RlbE5hbWUpO1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLmNzcygnei1pbmRleCcsIDMwMDAgKyBwb3B1cFZpc2liaWxpdHlOYW1lcygpLmxlbmd0aCArIDEwKTtcblxuXHRcdFx0XHRcdFx0aWYgKHZtLm9uU2hvd1RyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0dm0ub25TaG93VHJpZ2dlcighdm0ub25TaG93VHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvblNob3dXaXRoRGVsYXknLCBbXSwgNTAwKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHZtLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRcdGlmICh2bS5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdHZtLm9uSGlkZVRyaWdnZXIoIXZtLm9uSGlkZVRyaWdnZXIoKSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZtLnJlc3RvcmVLZXlTY29wZSgpO1xuXG5cdFx0XHRcdFx0XHR2bVJ1bkhvb2soJ3ZpZXctbW9kZWwtb24taGlkZScsIFZpZXdNb2RlbENsYXNzKTtcblxuXHRcdFx0XHRcdFx0cG9wdXBWaXNpYmlsaXR5TmFtZXMucmVtb3ZlKHZtLnZpZXdNb2RlbE5hbWUpO1xuXHRcdFx0XHRcdFx0dm0udmlld01vZGVsRG9tLmNzcygnei1pbmRleCcsIDIwMDApO1xuXG5cdFx0XHRcdFx0XHRfLmRlbGF5KCgpID0+IHZtLnZpZXdNb2RlbERvbS5oaWRlKCksIDMwMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLXByZS1idWlsZCcsIFZpZXdNb2RlbENsYXNzLCB2bURvbSk7XG5cblx0XHRcdGtvLmFwcGx5QmluZGluZ0FjY2Vzc29yc1RvTm9kZShcblx0XHRcdFx0dm1Eb21bMF0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0cmFuc2xhdG9ySW5pdDogdHJ1ZSxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gKHsgbmFtZTogdm0udmlld01vZGVsVGVtcGxhdGVJRCB9KVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR2bVxuXHRcdFx0KTtcblxuXHRcdFx0ZGVsZWdhdGVSdW4odm0sICdvbkJ1aWxkJywgW3ZtRG9tXSk7XG5cdFx0XHRpZiAodm0gJiYgVmlld1R5cGUuUG9wdXAgPT09IHBvc2l0aW9uKSB7XG5cdFx0XHRcdHZtLnJlZ2lzdGVyUG9wdXBLZXlEb3duKCk7XG5cdFx0XHR9XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1wb3N0LWJ1aWxkJywgVmlld01vZGVsQ2xhc3MsIHZtRG9tKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bG9nKCdDYW5ub3QgZmluZCB2aWV3IG1vZGVsIHBvc2l0aW9uOiAnICsgcG9zaXRpb24pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBWaWV3TW9kZWxDbGFzcyA/IFZpZXdNb2RlbENsYXNzLl9fdm0gOiBudWxsO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcGFyYW0ge0FycmF5PX0gcGFyYW1zXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNob3dTY3JlZW5Qb3B1cChWaWV3TW9kZWxDbGFzc1RvU2hvdywgcGFyYW1zID0gW10pIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpO1xuXHRpZiAoTW9kYWxWaWV3KSB7XG5cdFx0YnVpbGRWaWV3TW9kZWwoTW9kYWxWaWV3KTtcblxuXHRcdGlmIChNb2RhbFZpZXcuX192bSAmJiBNb2RhbFZpZXcuX19kb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKE1vZGFsVmlldy5fX3ZtLCAnb25CZWZvcmVTaG93JywgcGFyYW1zIHx8IFtdKTtcblxuXHRcdFx0TW9kYWxWaWV3Ll9fdm0ubW9kYWxWaXNpYmlsaXR5KHRydWUpO1xuXG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uU2hvdycsIHBhcmFtcyB8fCBbXSk7XG5cblx0XHRcdHZtUnVuSG9vaygndmlldy1tb2RlbC1vbi1zaG93JywgTW9kYWxWaWV3LCBwYXJhbXMgfHwgW10pO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFZpZXdNb2RlbENsYXNzVG9TaG93XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhcm1VcFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KSB7XG5cdGNvbnN0IE1vZGFsVmlldyA9IGdldFNjcmVlblBvcHVwKFZpZXdNb2RlbENsYXNzVG9TaG93KTtcblx0aWYgKE1vZGFsVmlldykge1xuXHRcdGJ1aWxkVmlld01vZGVsKE1vZGFsVmlldyk7XG5cblx0XHRpZiAoTW9kYWxWaWV3Ll9fdm0gJiYgTW9kYWxWaWV3Ll9fZG9tKSB7XG5cdFx0XHRkZWxlZ2F0ZVJ1bihNb2RhbFZpZXcuX192bSwgJ29uV2FybVVwJyk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gVmlld01vZGVsQ2xhc3NUb1Nob3dcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQb3B1cFZpc2libGUoVmlld01vZGVsQ2xhc3NUb1Nob3cpIHtcblx0Y29uc3QgTW9kYWxWaWV3ID0gZ2V0U2NyZWVuUG9wdXAoVmlld01vZGVsQ2xhc3NUb1Nob3cpO1xuXHRyZXR1cm4gTW9kYWxWaWV3ICYmIE1vZGFsVmlldy5fX3ZtID8gTW9kYWxWaWV3Ll9fdm0ubW9kYWxWaXNpYmlsaXR5KCkgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyZWVuTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHN1YlBhcnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NyZWVuT25Sb3V0ZShzY3JlZW5OYW1lLCBzdWJQYXJ0KSB7XG5cdGxldCB2bVNjcmVlbiA9IG51bGwsXG5cdFx0aXNTYW1lU2NyZWVuID0gZmFsc2UsXG5cdFx0Y3Jvc3MgPSBudWxsO1xuXG5cdGlmICgnJyA9PT0gcFN0cmluZyhzY3JlZW5OYW1lKSkge1xuXHRcdHNjcmVlbk5hbWUgPSBkZWZhdWx0U2NyZWVuTmFtZTtcblx0fVxuXG5cdGlmICgnJyAhPT0gc2NyZWVuTmFtZSkge1xuXHRcdHZtU2NyZWVuID0gc2NyZWVuKHNjcmVlbk5hbWUpO1xuXHRcdGlmICghdm1TY3JlZW4pIHtcblx0XHRcdHZtU2NyZWVuID0gc2NyZWVuKGRlZmF1bHRTY3JlZW5OYW1lKTtcblx0XHRcdGlmICh2bVNjcmVlbikge1xuXHRcdFx0XHRzdWJQYXJ0ID0gc2NyZWVuTmFtZSArICcvJyArIHN1YlBhcnQ7XG5cdFx0XHRcdHNjcmVlbk5hbWUgPSBkZWZhdWx0U2NyZWVuTmFtZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodm1TY3JlZW4gJiYgdm1TY3JlZW4uX19zdGFydGVkKSB7XG5cdFx0XHRpc1NhbWVTY3JlZW4gPSBjdXJyZW50U2NyZWVuICYmIHZtU2NyZWVuID09PSBjdXJyZW50U2NyZWVuO1xuXG5cdFx0XHRpZiAoIXZtU2NyZWVuLl9fYnVpbGRlZCkge1xuXHRcdFx0XHR2bVNjcmVlbi5fX2J1aWxkZWQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkodm1TY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdF8uZWFjaCh2bVNjcmVlbi52aWV3TW9kZWxzKCksIChWaWV3TW9kZWxDbGFzcykgPT4ge1xuXHRcdFx0XHRcdFx0YnVpbGRWaWV3TW9kZWwoVmlld01vZGVsQ2xhc3MsIHZtU2NyZWVuKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGVnYXRlUnVuKHZtU2NyZWVuLCAnb25CdWlsZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0Ly8gaGlkZSBzY3JlZW5cblx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4gJiYgIWlzU2FtZVNjcmVlbikge1xuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKGN1cnJlbnRTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25IaWRlV2l0aERlbGF5JywgW10sIDUwMCk7XG5cblx0XHRcdFx0XHRpZiAoY3VycmVudFNjcmVlbi5vbkhpZGVUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50U2NyZWVuLm9uSGlkZVRyaWdnZXIoIWN1cnJlbnRTY3JlZW4ub25IaWRlVHJpZ2dlcigpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNOb25FbXB0eUFycmF5KGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpKSkge1xuXHRcdFx0XHRcdFx0Xy5lYWNoKGN1cnJlbnRTY3JlZW4udmlld01vZGVscygpLCAoVmlld01vZGVsQ2xhc3MpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0gJiZcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX2RvbSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdUeXBlLlBvcHVwICE9PSBWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFBvc2l0aW9uXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tLmhpZGUoKTtcblx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLnZpZXdNb2RlbFZpc2liaWxpdHkoZmFsc2UpO1xuXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uSGlkZScpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvbkhpZGVXaXRoRGVsYXknLCBbXSwgNTAwKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uSGlkZVRyaWdnZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0ub25IaWRlVHJpZ2dlcighVmlld01vZGVsQ2xhc3MuX192bS5vbkhpZGVUcmlnZ2VyKCkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIC0tXG5cblx0XHRcdFx0Y3VycmVudFNjcmVlbiA9IHZtU2NyZWVuO1xuXG5cdFx0XHRcdC8vIHNob3cgc2NyZWVuXG5cdFx0XHRcdGlmIChjdXJyZW50U2NyZWVuICYmICFpc1NhbWVTY3JlZW4pIHtcblx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihjdXJyZW50U2NyZWVuLCAnb25TaG93Jyk7XG5cdFx0XHRcdFx0aWYgKGN1cnJlbnRTY3JlZW4ub25TaG93VHJpZ2dlcikge1xuXHRcdFx0XHRcdFx0Y3VycmVudFNjcmVlbi5vblNob3dUcmlnZ2VyKCFjdXJyZW50U2NyZWVuLm9uU2hvd1RyaWdnZXIoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cnVuSG9vaygnc2NyZWVuLW9uLXNob3cnLCBbY3VycmVudFNjcmVlbi5zY3JlZW5OYW1lKCksIGN1cnJlbnRTY3JlZW5dKTtcblxuXHRcdFx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCkpKSB7XG5cdFx0XHRcdFx0XHRfLmVhY2goY3VycmVudFNjcmVlbi52aWV3TW9kZWxzKCksIChWaWV3TW9kZWxDbGFzcykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX192bSAmJlxuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fZG9tICYmXG5cdFx0XHRcdFx0XHRcdFx0Vmlld1R5cGUuUG9wdXAgIT09IFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsUG9zaXRpb25cblx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4oVmlld01vZGVsQ2xhc3MuX192bSwgJ29uQmVmb3JlU2hvdycpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Vmlld01vZGVsQ2xhc3MuX19kb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFZpZXdNb2RlbENsYXNzLl9fdm0udmlld01vZGVsVmlzaWJpbGl0eSh0cnVlKTtcblxuXHRcdFx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKFZpZXdNb2RlbENsYXNzLl9fdm0sICdvblNob3cnKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoVmlld01vZGVsQ2xhc3MuX192bS5vblNob3dUcmlnZ2VyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRWaWV3TW9kZWxDbGFzcy5fX3ZtLm9uU2hvd1RyaWdnZXIoIVZpZXdNb2RlbENsYXNzLl9fdm0ub25TaG93VHJpZ2dlcigpKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRkZWxlZ2F0ZVJ1bihWaWV3TW9kZWxDbGFzcy5fX3ZtLCAnb25TaG93V2l0aERlbGF5JywgW10sIDIwMCk7XG5cdFx0XHRcdFx0XHRcdFx0dm1SdW5Ib29rKCd2aWV3LW1vZGVsLW9uLXNob3cnLCBWaWV3TW9kZWxDbGFzcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdGNyb3NzID0gdm1TY3JlZW4gJiYgdm1TY3JlZW4uX19jcm9zcyA/IHZtU2NyZWVuLl9fY3Jvc3MoKSA6IG51bGw7XG5cdFx0XHRcdGlmIChjcm9zcykge1xuXHRcdFx0XHRcdGNyb3NzLnBhcnNlKHN1YlBhcnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBzY3JlZW5zQ2xhc3Nlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFNjcmVlbnMoc2NyZWVuc0NsYXNzZXMpIHtcblx0Xy5lYWNoKHNjcmVlbnNDbGFzc2VzLCAoQ1NjcmVlbikgPT4ge1xuXHRcdGlmIChDU2NyZWVuKSB7XG5cdFx0XHRjb25zdCB2bVNjcmVlbiA9IG5ldyBDU2NyZWVuKCksXG5cdFx0XHRcdHNjcmVlbk5hbWUgPSB2bVNjcmVlbiA/IHZtU2NyZWVuLnNjcmVlbk5hbWUoKSA6ICcnO1xuXG5cdFx0XHRpZiAodm1TY3JlZW4gJiYgJycgIT09IHNjcmVlbk5hbWUpIHtcblx0XHRcdFx0aWYgKCcnID09PSBkZWZhdWx0U2NyZWVuTmFtZSkge1xuXHRcdFx0XHRcdGRlZmF1bHRTY3JlZW5OYW1lID0gc2NyZWVuTmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFNDUkVFTlNbc2NyZWVuTmFtZV0gPSB2bVNjcmVlbjtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdF8uZWFjaChTQ1JFRU5TLCAodm1TY3JlZW4pID0+IHtcblx0XHRpZiAodm1TY3JlZW4gJiYgIXZtU2NyZWVuLl9fc3RhcnRlZCAmJiB2bVNjcmVlbi5fX3N0YXJ0KSB7XG5cdFx0XHR2bVNjcmVlbi5fX3N0YXJ0ZWQgPSB0cnVlO1xuXHRcdFx0dm1TY3JlZW4uX19zdGFydCgpO1xuXG5cdFx0XHRydW5Ib29rKCdzY3JlZW4tcHJlLXN0YXJ0JywgW3ZtU2NyZWVuLnNjcmVlbk5hbWUoKSwgdm1TY3JlZW5dKTtcblx0XHRcdGRlbGVnYXRlUnVuKHZtU2NyZWVuLCAnb25TdGFydCcpO1xuXHRcdFx0cnVuSG9vaygnc2NyZWVuLXBvc3Qtc3RhcnQnLCBbdm1TY3JlZW4uc2NyZWVuTmFtZSgpLCB2bVNjcmVlbl0pO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3QgY3Jvc3MgPSBjcm9zc3JvYWRzLmNyZWF0ZSgpO1xuXHRjcm9zcy5hZGRSb3V0ZSgvXihbYS16QS1aMC05LV0qKVxcLz8oLiopJC8sIHNjcmVlbk9uUm91dGUpO1xuXG5cdGhhc2hlci5pbml0aWFsaXplZC5hZGQoY3Jvc3MucGFyc2UsIGNyb3NzKTtcblx0aGFzaGVyLmNoYW5nZWQuYWRkKGNyb3NzLnBhcnNlLCBjcm9zcyk7XG5cdGhhc2hlci5pbml0KCk7XG5cblx0Xy5kZWxheSgoKSA9PiAkaHRtbC5yZW1vdmVDbGFzcygncmwtc3RhcnRlZC10cmlnZ2VyJykuYWRkQ2xhc3MoJ3JsLXN0YXJ0ZWQnKSwgMTAwKTtcblx0Xy5kZWxheSgoKSA9PiAkaHRtbC5hZGRDbGFzcygncmwtc3RhcnRlZC1kZWxheScpLCAyMDApO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzSGFzaFxuICogQHBhcmFtIHtib29sZWFuPX0gc2lsZW5jZSA9IGZhbHNlXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSByZXBsYWNlID0gZmFsc2VcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SGFzaChoYXNoLCBzaWxlbmNlID0gZmFsc2UsIHJlcGxhY2UgPSBmYWxzZSkge1xuXHRoYXNoID0gJyMnID09PSBoYXNoLnN1YnN0cigwLCAxKSA/IGhhc2guc3Vic3RyKDEpIDogaGFzaDtcblx0aGFzaCA9ICcvJyA9PT0gaGFzaC5zdWJzdHIoMCwgMSkgPyBoYXNoLnN1YnN0cigxKSA6IGhhc2g7XG5cblx0Y29uc3QgY21kID0gcmVwbGFjZSA/ICdyZXBsYWNlSGFzaCcgOiAnc2V0SGFzaCc7XG5cblx0aWYgKHNpbGVuY2UpIHtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSBmYWxzZTtcblx0XHRoYXNoZXJbY21kXShoYXNoKTtcblx0XHRoYXNoZXIuY2hhbmdlZC5hY3RpdmUgPSB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdGhhc2hlci5jaGFuZ2VkLmFjdGl2ZSA9IHRydWU7XG5cdFx0aGFzaGVyW2NtZF0oaGFzaCk7XG5cdFx0aGFzaGVyLnNldEhhc2goaGFzaCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHZpZXdEZWNvcmF0b3IoeyBuYW1lLCB0eXBlLCB0ZW1wbGF0ZUlEIH0pIHtcblx0cmV0dXJuICh0YXJnZXQpID0+IHtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRpZiAobmFtZSkge1xuXHRcdFx0XHRpZiAoaXNBcnJheShuYW1lKSkge1xuXHRcdFx0XHRcdHRhcmdldC5fX25hbWVzID0gbmFtZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0YXJnZXQuX19uYW1lcyA9IFtuYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldC5fX25hbWUgPSB0YXJnZXQuX19uYW1lc1swXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHR5cGUpIHtcblx0XHRcdFx0dGFyZ2V0Ll9fdHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0ZW1wbGF0ZUlEKSB7XG5cdFx0XHRcdHRhcmdldC5fX3RlbXBsYXRlSUQgPSB0ZW1wbGF0ZUlEO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHBvcHVwRGVjb3JhdG9yKHsgbmFtZSwgdGVtcGxhdGVJRCB9KSB7XG5cdHJldHVybiB2aWV3RGVjb3JhdG9yKHsgbmFtZSwgdHlwZTogVmlld1R5cGUuUG9wdXAsIHRlbXBsYXRlSUQgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FuRXhlY3V0ZVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBjb21tYW5kRGVjb3JhdG9yKGNhbkV4ZWN1dGUgPSB0cnVlKSB7XG5cdHJldHVybiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpID0+IHtcblx0XHRpZiAoIWtleSB8fCAha2V5Lm1hdGNoKC9Db21tYW5kJC8pKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYG5hbWUgXCIke2tleX1cIiBzaG91bGQgZW5kIHdpdGggQ29tbWFuZCBzdWZmaXhgKTtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWUgfHwgZGVzY3JpcHRvci5pbml0aWFsaXplcigpLFxuXHRcdFx0bm9ybUNhbkV4ZWN1dGUgPSBpc0Z1bmMoY2FuRXhlY3V0ZSkgPyBjYW5FeGVjdXRlIDogKCkgPT4gISFjYW5FeGVjdXRlO1xuXG5cdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0XHRcdGlmIChub3JtQ2FuRXhlY3V0ZS5jYWxsKHRoaXMsIHRoaXMpKSB7XG5cdFx0XHRcdHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHRcdGRlc2NyaXB0b3IudmFsdWUuX19yZWFsQ2FuRXhlY3V0ZSA9IG5vcm1DYW5FeGVjdXRlO1xuXHRcdGRlc2NyaXB0b3IudmFsdWUuaXNDb21tYW5kID0gdHJ1ZTtcblxuXHRcdHJldHVybiBkZXNjcmlwdG9yO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bWljZWR9ICRpdGVtc1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzZXR0aW5nc01lbnVLZXlzSGFuZGxlcigkaXRlbXMpIHtcblx0cmV0dXJuIF8udGhyb3R0bGUoKGV2ZW50LCBoYW5kbGVyKSA9PiB7XG5cdFx0Y29uc3QgdXAgPSBoYW5kbGVyICYmICd1cCcgPT09IGhhbmRsZXIuc2hvcnRjdXQ7XG5cblx0XHRpZiAoZXZlbnQgJiYgJGl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0bGV0IGluZGV4ID0gJGl0ZW1zLmluZGV4KCRpdGVtcy5maWx0ZXIoJy5zZWxlY3RlZCcpKTtcblx0XHRcdGlmICh1cCAmJiAwIDwgaW5kZXgpIHtcblx0XHRcdFx0aW5kZXggLT0gMTtcblx0XHRcdH0gZWxzZSBpZiAoIXVwICYmIGluZGV4IDwgJGl0ZW1zLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aW5kZXggKz0gMTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcmVzdWx0SGFzaCA9ICRpdGVtcy5lcShpbmRleCkuYXR0cignaHJlZicpO1xuXHRcdFx0aWYgKHJlc3VsdEhhc2gpIHtcblx0XHRcdFx0c2V0SGFzaChyZXN1bHRIYXNoLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCBNYWdpY3MuVGltZTIwMG1zKTtcbn1cblxuZXhwb3J0IHtcblx0Y29tbWFuZERlY29yYXRvcixcblx0Y29tbWFuZERlY29yYXRvciBhcyBjb21tYW5kLFxuXHR2aWV3RGVjb3JhdG9yLFxuXHR2aWV3RGVjb3JhdG9yIGFzIHZpZXcsXG5cdHZpZXdEZWNvcmF0b3IgYXMgdmlld01vZGVsLFxuXHRwb3B1cERlY29yYXRvcixcblx0cG9wdXBEZWNvcmF0b3IgYXMgcG9wdXAsXG5cdHNldHRpbmdzTWVudUtleXNIYW5kbGVyXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cualF1ZXJ5OyIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBVcGxvYWRFcnJvckNvZGUgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcEludCwgaXNVbmQsIGlzTnVsbCwgaGFzLCBtaWNyb3RpbWUsIGluQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgJGh0bWwsIGJBbmltYXRpb25TdXBwb3J0ZWQgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyByZWxvYWQgYXMgbW9tZW50b3JSZWxvYWQgfSBmcm9tICdDb21tb24vTW9tZW50b3InO1xuaW1wb3J0IHsgbGFuZ0xpbmsgfSBmcm9tICdDb21tb24vTGlua3MnO1xuXG5sZXQgSTE4Tl9EQVRBID0gd2luZG93LnJhaW5sb29wSTE4TiB8fCB7fTtcblxuY29uc3QgSTE4Tl9OT1RJRklDQVRJT05fREFUQSA9IHt9O1xuY29uc3QgSTE4Tl9OT1RJRklDQVRJT05fTUFQID0gW1xuXHRbTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9UT0tFTiddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiwgJ05PVElGSUNBVElPTlMvSU5WQUxJRF9UT0tFTiddLFxuXHRbTm90aWZpY2F0aW9uLkF1dGhFcnJvciwgJ05PVElGSUNBVElPTlMvQVVUSF9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLCAnTk9USUZJQ0FUSU9OUy9BQ0NFU1NfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Db25uZWN0aW9uRXJyb3IsICdOT1RJRklDQVRJT05TL0NPTk5FQ1RJT05fRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5DYXB0Y2hhRXJyb3IsICdOT1RJRklDQVRJT05TL0NBUFRDSEFfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxGYWNlYm9va0xvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX0ZBQ0VCT09LX0xPR0lOX0FDQ0VTU19ESVNBQkxFJ10sXG5cdFtOb3RpZmljYXRpb24uU29jaWFsVHdpdHRlckxvZ2luQWNjZXNzRGlzYWJsZSwgJ05PVElGSUNBVElPTlMvU09DSUFMX1RXSVRURVJfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Tb2NpYWxHb29nbGVMb2dpbkFjY2Vzc0Rpc2FibGUsICdOT1RJRklDQVRJT05TL1NPQ0lBTF9HT09HTEVfTE9HSU5fQUNDRVNTX0RJU0FCTEUnXSxcblx0W05vdGlmaWNhdGlvbi5Eb21haW5Ob3RBbGxvd2VkLCAnTk9USUZJQ0FUSU9OUy9ET01BSU5fTk9UX0FMTE9XRUQnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50Tm90QWxsb3dlZCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9OT1RfQUxMT1dFRCddLFxuXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudFR3b0ZhY3RvckF1dGhSZXF1aXJlZCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9UV09fRkFDVE9SX0FVVEhfUkVRVUlSRUQnXSxcblx0W05vdGlmaWNhdGlvbi5BY2NvdW50VHdvRmFjdG9yQXV0aEVycm9yLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX1RXT19GQUNUT1JfQVVUSF9FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ291bGROb3RTYXZlTmV3UGFzc3dvcmQsICdOT1RJRklDQVRJT05TL0NPVUxEX05PVF9TQVZFX05FV19QQVNTV09SRCddLFxuXHRbTm90aWZpY2F0aW9uLkN1cnJlbnRQYXNzd29yZEluY29ycmVjdCwgJ05PVElGSUNBVElPTlMvQ1VSUkVOVF9QQVNTV09SRF9JTkNPUlJFQ1QnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZFNob3J0LCAnTk9USUZJQ0FUSU9OUy9ORVdfUEFTU1dPUkRfU0hPUlQnXSxcblx0W05vdGlmaWNhdGlvbi5OZXdQYXNzd29yZFdlYWssICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9XRUFLJ10sXG5cdFtOb3RpZmljYXRpb24uTmV3UGFzc3dvcmRGb3JiaWRkZW4sICdOT1RJRklDQVRJT05TL05FV19QQVNTV09SRF9GT1JCSURERU5UJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Db250YWN0c1N5bmNFcnJvciwgJ05PVElGSUNBVElPTlMvQ09OVEFDVFNfU1lOQ19FUlJPUiddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudEdldE1lc3NhZ2VMaXN0LCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9NRVNTQUdFX0xJU1QnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50R2V0TWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9HRVRfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnREZWxldGVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uQ2FudE1vdmVNZXNzYWdlLCAnTk9USUZJQ0FUSU9OUy9DQU5UX01PVkVfTUVTU0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRDb3B5TWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9NT1ZFX01FU1NBR0UnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRTYXZlTWVzc2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9TQVZFX01FU1NBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U2VuZE1lc3NhZ2UsICdOT1RJRklDQVRJT05TL0NBTlRfU0VORF9NRVNTQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uSW52YWxpZFJlY2lwaWVudHMsICdOT1RJRklDQVRJT05TL0lOVkFMSURfUkVDSVBJRU5UUyddLFxuXG5cdFtOb3RpZmljYXRpb24uQ2FudFNhdmVGaWx0ZXJzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfRklMVEVSUyddLFxuXHRbTm90aWZpY2F0aW9uLkNhbnRHZXRGaWx0ZXJzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0dFVF9GSUxURVJTJ10sXG5cdFtOb3RpZmljYXRpb24uRmlsdGVyc0FyZU5vdENvcnJlY3QsICdOT1RJRklDQVRJT05TL0ZJTFRFUlNfQVJFX05PVF9DT1JSRUNUJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50Q3JlYXRlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0NSRUFURV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50UmVuYW1lRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1JFTkFNRV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX0RFTEVURV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlTm9uRW1wdHlGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfREVMRVRFX05PTl9FTVBUWV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U3Vic2NyaWJlRm9sZGVyLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NVQlNDUklCRV9GT0xERVInXSxcblx0W05vdGlmaWNhdGlvbi5DYW50VW5zdWJzY3JpYmVGb2xkZXIsICdOT1RJRklDQVRJT05TL0NBTlRfVU5TVUJTQ1JJQkVfRk9MREVSJ10sXG5cblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZVNldHRpbmdzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfU0VUVElOR1MnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50U2F2ZVBsdWdpblNldHRpbmdzLCAnTk9USUZJQ0FUSU9OUy9DQU5UX1NBVkVfUExVR0lOX1NFVFRJTkdTJ10sXG5cblx0W05vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzLCAnTk9USUZJQ0FUSU9OUy9ET01BSU5fQUxSRUFEWV9FWElTVFMnXSxcblxuXHRbTm90aWZpY2F0aW9uLkNhbnRJbnN0YWxsUGFja2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9JTlNUQUxMX1BBQ0tBR0UnXSxcblx0W05vdGlmaWNhdGlvbi5DYW50RGVsZXRlUGFja2FnZSwgJ05PVElGSUNBVElPTlMvQ0FOVF9ERUxFVEVfUEFDS0FHRSddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRQbHVnaW5QYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX1BMVUdJTl9QQUNLQUdFJ10sXG5cdFtOb3RpZmljYXRpb24uVW5zdXBwb3J0ZWRQbHVnaW5QYWNrYWdlLCAnTk9USUZJQ0FUSU9OUy9VTlNVUFBPUlRFRF9QTFVHSU5fUEFDS0FHRSddLFxuXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nU2VydmVySXNVbmF2YWlsYWJsZSwgJ05PVElGSUNBVElPTlMvTElDRU5TSU5HX1NFUlZFUl9JU19VTkFWQUlMQUJMRSddLFxuXHRbTm90aWZpY2F0aW9uLkxpY2Vuc2luZ0V4cGlyZWQsICdOT1RJRklDQVRJT05TL0xJQ0VOU0lOR19FWFBJUkVEJ10sXG5cdFtOb3RpZmljYXRpb24uTGljZW5zaW5nQmFubmVkLCAnTk9USUZJQ0FUSU9OUy9MSUNFTlNJTkdfQkFOTkVEJ10sXG5cblx0W05vdGlmaWNhdGlvbi5EZW1vU2VuZE1lc3NhZ2VFcnJvciwgJ05PVElGSUNBVElPTlMvREVNT19TRU5EX01FU1NBR0VfRVJST1InXSxcblx0W05vdGlmaWNhdGlvbi5EZW1vQWNjb3VudEVycm9yLCAnTk9USUZJQ0FUSU9OUy9ERU1PX0FDQ09VTlRfRVJST1InXSxcblxuXHRbTm90aWZpY2F0aW9uLkFjY291bnRBbHJlYWR5RXhpc3RzLCAnTk9USUZJQ0FUSU9OUy9BQ0NPVU5UX0FMUkVBRFlfRVhJU1RTJ10sXG5cdFtOb3RpZmljYXRpb24uQWNjb3VudERvZXNOb3RFeGlzdCwgJ05PVElGSUNBVElPTlMvQUNDT1VOVF9ET0VTX05PVF9FWElTVCddLFxuXG5cdFtOb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLCAnTk9USUZJQ0FUSU9OUy9NQUlMX1NFUlZFUl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLkludmFsaWRJbnB1dEFyZ3VtZW50LCAnTk9USUZJQ0FUSU9OUy9JTlZBTElEX0lOUFVUX0FSR1VNRU5UJ10sXG5cdFtOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbiwgJ05PVElGSUNBVElPTlMvVU5LTk9XTl9FUlJPUiddLFxuXHRbTm90aWZpY2F0aW9uLlVua25vd25FcnJvciwgJ05PVElGSUNBVElPTlMvVU5LTk9XTl9FUlJPUiddXG5dO1xuXG5leHBvcnQgY29uc3QgdHJpZ2dlciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7T2JqZWN0PX0gdmFsdWVMaXN0XG4gKiBAcGFyYW0ge3N0cmluZz19IGRlZmF1bFZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaTE4bihrZXksIHZhbHVlTGlzdCwgZGVmYXVsVmFsdWUpIHtcblx0bGV0IHZhbHVlTmFtZSA9ICcnLFxuXHRcdHJlc3VsdCA9IEkxOE5fREFUQVtrZXldO1xuXG5cdGlmIChpc1VuZChyZXN1bHQpKSB7XG5cdFx0cmVzdWx0ID0gaXNVbmQoZGVmYXVsVmFsdWUpID8ga2V5IDogZGVmYXVsVmFsdWU7XG5cdH1cblxuXHRpZiAoIWlzVW5kKHZhbHVlTGlzdCkgJiYgIWlzTnVsbCh2YWx1ZUxpc3QpKSB7XG5cdFx0Zm9yICh2YWx1ZU5hbWUgaW4gdmFsdWVMaXN0KSB7XG5cdFx0XHRpZiAoaGFzKHZhbHVlTGlzdCwgdmFsdWVOYW1lKSkge1xuXHRcdFx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgnJScgKyB2YWx1ZU5hbWUgKyAnJScsIHZhbHVlTGlzdFt2YWx1ZU5hbWVdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCBpMThuVG9Ob2RlID0gKGVsZW1lbnQpID0+IHtcblx0Y29uc3QgJGVsID0gJChlbGVtZW50KSxcblx0XHRrZXkgPSAkZWwuZGF0YSgnaTE4bicpO1xuXG5cdGlmIChrZXkpIHtcblx0XHRpZiAoJ1snID09PSBrZXkuc3Vic3RyKDAsIDEpKSB7XG5cdFx0XHRzd2l0Y2ggKGtleS5zdWJzdHIoMCwgNikpIHtcblx0XHRcdFx0Y2FzZSAnW2h0bWxdJzpcblx0XHRcdFx0XHQkZWwuaHRtbChpMThuKGtleS5zdWJzdHIoNikpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnW3BsYWNlJzpcblx0XHRcdFx0XHQkZWwuYXR0cigncGxhY2Vob2xkZXInLCBpMThuKGtleS5zdWJzdHIoMTMpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ1t0aXRsZSc6XG5cdFx0XHRcdFx0JGVsLmF0dHIoJ3RpdGxlJywgaTE4bihrZXkuc3Vic3RyKDcpKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0JGVsLnRleHQoaTE4bihrZXkpKTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRzXG4gKiBAcGFyYW0ge2Jvb2xlYW49fSBhbmltYXRlID0gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGkxOG5Ub05vZGVzKGVsZW1lbnRzLCBhbmltYXRlID0gZmFsc2UpIHtcblx0Xy5kZWZlcigoKSA9PiB7XG5cdFx0JCgnW2RhdGEtaTE4bl0nLCBlbGVtZW50cykuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcblx0XHRcdGkxOG5Ub05vZGUoaXRlbSk7XG5cdFx0fSk7XG5cblx0XHRpZiAoYW5pbWF0ZSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHQkKCcuaTE4bi1hbmltYXRpb25bZGF0YS1pMThuXScsIGVsZW1lbnRzKS5sZXR0ZXJmeCh7XG5cdFx0XHRcdCdmeCc6ICdmYWxsIGZhZGUnLFxuXHRcdFx0XHQnYmFja3dhcmRzJzogZmFsc2UsXG5cdFx0XHRcdCd0aW1pbmcnOiA1MCxcblx0XHRcdFx0J2Z4X2R1cmF0aW9uJzogJzUwbXMnLFxuXHRcdFx0XHQnbGV0dGVyX2VuZCc6ICdyZXN0b3JlJyxcblx0XHRcdFx0J2VsZW1lbnRfZW5kJzogJ3Jlc3RvcmUnXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCByZWxvYWREYXRhID0gKCkgPT4ge1xuXHRpZiAod2luZG93LnJhaW5sb29wSTE4Tikge1xuXHRcdEkxOE5fREFUQSA9IHdpbmRvdy5yYWlubG9vcEkxOE4gfHwge307XG5cblx0XHRpMThuVG9Ob2Rlcyh3aW5kb3cuZG9jdW1lbnQsIHRydWUpO1xuXG5cdFx0bW9tZW50b3JSZWxvYWQoKTtcblx0XHR0cmlnZ2VyKCF0cmlnZ2VyKCkpO1xuXHR9XG5cblx0d2luZG93LnJhaW5sb29wSTE4TiA9IG51bGw7XG59O1xuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKCkge1xuXHRJMThOX05PVElGSUNBVElPTl9NQVAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdEkxOE5fTk9USUZJQ0FUSU9OX0RBVEFbaXRlbVswXV0gPSBpMThuKGl0ZW1bMV0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdGFydENhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9uPX0gbGFuZ0NhbGxiYWNrID0gbnVsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE9uU3RhcnRPckxhbmdDaGFuZ2Uoc3RhcnRDYWxsYmFjaywgbGFuZ0NhbGxiYWNrID0gbnVsbCkge1xuXHRpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdHN0YXJ0Q2FsbGJhY2soKTtcblx0fVxuXG5cdGlmIChsYW5nQ2FsbGJhY2spIHtcblx0XHR0cmlnZ2VyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRpZiAoc3RhcnRDYWxsYmFjaykge1xuXHRcdFx0XHRzdGFydENhbGxiYWNrKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAobGFuZ0NhbGxiYWNrKSB7XG5cdFx0XHRcdGxhbmdDYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHN0YXJ0Q2FsbGJhY2spIHtcblx0XHR0cmlnZ2VyLnN1YnNjcmliZShzdGFydENhbGxiYWNrKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0geyo9fSBtZXNzYWdlID0gJydcbiAqIEBwYXJhbSB7Kj19IGRlZkNvZGUgPSBudWxsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uKGNvZGUsIG1lc3NhZ2UgPSAnJywgZGVmQ29kZSA9IG51bGwpIHtcblx0Y29kZSA9IHdpbmRvdy5wYXJzZUludChjb2RlLCAxMCkgfHwgMDtcblx0aWYgKE5vdGlmaWNhdGlvbi5DbGllbnRWaWV3RXJyb3IgPT09IGNvZGUgJiYgbWVzc2FnZSkge1xuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0ZGVmQ29kZSA9IGRlZkNvZGUgPyB3aW5kb3cucGFyc2VJbnQoZGVmQ29kZSwgMTApIHx8IDAgOiAwO1xuXHRyZXR1cm4gaXNVbmQoSTE4Tl9OT1RJRklDQVRJT05fREFUQVtjb2RlXSlcblx0XHQ/IGRlZkNvZGUgJiYgaXNVbmQoSTE4Tl9OT1RJRklDQVRJT05fREFUQVtkZWZDb2RlXSlcblx0XHRcdD8gSTE4Tl9OT1RJRklDQVRJT05fREFUQVtkZWZDb2RlXVxuXHRcdFx0OiAnJ1xuXHRcdDogSTE4Tl9OT1RJRklDQVRJT05fREFUQVtjb2RlXTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWZDb2RlID0gTm90aWZpY2F0aW9uLlVua25vd25Ob3RpZmljYXRpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsIGRlZkNvZGUgPSBOb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbikge1xuXHRyZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UuRXJyb3JDb2RlXG5cdFx0PyBnZXROb3RpZmljYXRpb24ocEludChyZXNwb25zZS5FcnJvckNvZGUpLCByZXNwb25zZS5FcnJvck1lc3NhZ2UgfHwgJycpXG5cdFx0OiBnZXROb3RpZmljYXRpb24oZGVmQ29kZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBjb2RlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBsb2FkRXJyb3JEZXNjQnlDb2RlKGNvZGUpIHtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRzd2l0Y2ggKHdpbmRvdy5wYXJzZUludChjb2RlLCAxMCkgfHwgMCkge1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVJc1Rvb0JpZzpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX0lTX1RPT19CSUcnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgVXBsb2FkRXJyb3JDb2RlLkZpbGVQYXJ0aWFsbHlVcGxvYWRlZDpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX1BBUlRJQUxMWV9VUExPQURFRCcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZU5vVXBsb2FkZWQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfTk9fRklMRV9VUExPQURFRCcpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuTWlzc2luZ1RlbXBGb2xkZXI6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfTUlTU0lOR19URU1QX0ZPTERFUicpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBVcGxvYWRFcnJvckNvZGUuRmlsZU9uU2F2ZWluZ0Vycm9yOlxuXHRcdFx0cmVzdWx0ID0gaTE4bignVVBMT0FEL0VSUk9SX09OX1NBVklOR19GSUxFJyk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFVwbG9hZEVycm9yQ29kZS5GaWxlVHlwZTpcblx0XHRcdHJlc3VsdCA9IGkxOG4oJ1VQTE9BRC9FUlJPUl9GSUxFX1RZUEUnKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXN1bHQgPSBpMThuKCdVUExPQUQvRVJST1JfVU5LTk9XTicpO1xuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRtaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKGFkbWluLCBsYW5ndWFnZSkge1xuXHRjb25zdCBzdGFydCA9IG1pY3JvdGltZSgpO1xuXG5cdCRodG1sLmFkZENsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpO1xuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdCQuYWpheCh7XG5cdFx0XHR1cmw6IGxhbmdMaW5rKGxhbmd1YWdlLCBhZG1pbiksXG5cdFx0XHRkYXRhVHlwZTogJ3NjcmlwdCcsXG5cdFx0XHRjYWNoZTogdHJ1ZVxuXHRcdH0pLnRoZW4oXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdF8uZGVsYXkoXG5cdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0cmVsb2FkRGF0YSgpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBpc1J0bCA9IC0xIDwgaW5BcnJheSgobGFuZ3VhZ2UgfHwgJycpLnRvTG93ZXJDYXNlKCksIFsnYXInLCAnYXJfc2EnLCAnaGUnLCAnaGVfaGUnLCAndXInLCAndXJfaXInXSk7XG5cblx0XHRcdFx0XHRcdCRodG1sXG5cdFx0XHRcdFx0XHRcdC5yZW1vdmVDbGFzcygncmwtY2hhbmdpbmctbGFuZ3VhZ2UnKVxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3JsLXJ0bCBybC1sdHInKVxuXHRcdFx0XHRcdFx0XHQvLyAuYXR0cignZGlyJywgaXNSdGwgPyAncnRsJyA6ICdsdHInKVxuXHRcdFx0XHRcdFx0XHQuYWRkQ2xhc3MoaXNSdGwgPyAncmwtcnRsJyA6ICdybC1sdHInKTtcblxuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0NTAwIDwgbWljcm90aW1lKCkgLSBzdGFydCA/IDEgOiA1MDBcblx0XHRcdFx0KTtcblx0XHRcdH0sXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdybC1jaGFuZ2luZy1sYW5ndWFnZScpO1xuXHRcdFx0XHR3aW5kb3cucmFpbmxvb3BJMThOID0gbnVsbDtcblx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0fSk7XG59XG5cbi8vIGluaXQgc2VjdGlvblxuJGh0bWwuYWRkQ2xhc3MoJ3JsLScgKyAoJGh0bWwuYXR0cignZGlyJykgfHwgJ2x0cicpKTtcbiIsImltcG9ydCBfT2JqZWN0JGNyZWF0ZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUtY29yZWpzMy9jb3JlLWpzL29iamVjdC9jcmVhdGVcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvaW5zdGFuY2UvZmluZFwiKTsiLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgeyBwU3RyaW5nLCBwSW50LCBpc1VuZCwgaXNOb3JtYWwsIHRyaW0sIGVuY29kZVVSSUNvbXBvbmVudCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY29uc3QgUk9PVCA9ICcuLycsXG5cdEhBU0hfUFJFRklYID0gJyMvJyxcblx0U0VSVkVSX1BSRUZJWCA9ICcuLz8nLFxuXHRTVUJfUVVFUllfUFJFRklYID0gJyZxW109Jyxcblx0VkVSU0lPTiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJyksXG5cdFdFQl9QUkVGSVggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnd2ViUGF0aCcpIHx8ICcnLFxuXHRWRVJTSU9OX1BSRUZJWCA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd3ZWJWZXJzaW9uUGF0aCcpIHx8ICdyYWlubG9vcC92LycgKyBWRVJTSU9OICsgJy8nLFxuXHRTVEFUSUNfUFJFRklYID0gVkVSU0lPTl9QUkVGSVggKyAnc3RhdGljLycsXG5cdEFETUlOX0hPU1RfVVNFID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWRtaW5Ib3N0VXNlJyksXG5cdEFETUlOX1BBVEggPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWRtaW5QYXRoJykgfHwgJ2FkbWluJztcblxubGV0IEFVVEhfUFJFRklYID0gU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0F1dGhBY2NvdW50SGFzaCcpIHx8ICcwJztcblxuLyoqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlQXV0aFN1ZmZpeCgpIHtcblx0QVVUSF9QUkVGSVggPSBTZXR0aW5ncy5zZXR0aW5nc0dldCgnQXV0aEFjY291bnRIYXNoJykgfHwgJzAnO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJRdWVyeVByZWZpeCgpIHtcblx0cmV0dXJuIFNVQl9RVUVSWV9QUkVGSVg7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmc9fSBzdGFydHVwVXJsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdChzdGFydHVwVXJsID0gJycpIHtcblx0cmV0dXJuIEhBU0hfUFJFRklYICsgcFN0cmluZyhzdGFydHVwVXJsKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdEFkbWluKCkge1xuXHRyZXR1cm4gQURNSU5fSE9TVF9VU0UgPyBST09UIDogU0VSVkVSX1BSRUZJWCArIEFETUlOX1BBVEg7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RVc2VyKCkge1xuXHRyZXR1cm4gUk9PVDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50UmF3KHR5cGUsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdGN1c3RvbVNwZWNTdWZmaXggPSBpc1VuZChjdXN0b21TcGVjU3VmZml4KSA/IEFVVEhfUFJFRklYIDogY3VzdG9tU3BlY1N1ZmZpeDtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICtcblx0XHQnL1Jhdy8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdGN1c3RvbVNwZWNTdWZmaXggK1xuXHRcdCcvJyArXG5cdFx0dHlwZSArXG5cdFx0Jy8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdGRvd25sb2FkXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50RG93bmxvYWQoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ0Rvd25sb2FkJywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3dubG9hZFxuICogQHBhcmFtIHtzdHJpbmc9fSBjdXN0b21TcGVjU3VmZml4XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNobWVudFByZXZpZXcoZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpIHtcblx0cmV0dXJuIGF0dGFjaG1lbnRSYXcoJ1ZpZXcnLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50VGh1bWJuYWlsUHJldmlldyhkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnVmlld1RodW1ibmFpbCcsIGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZG93bmxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nPX0gY3VzdG9tU3BlY1N1ZmZpeFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGFjaG1lbnRQcmV2aWV3QXNQbGFpbihkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCkge1xuXHRyZXR1cm4gYXR0YWNobWVudFJhdygnVmlld0FzUGxhaW4nLCBkb3dubG9hZCwgY3VzdG9tU3BlY1N1ZmZpeCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRvd25sb2FkXG4gKiBAcGFyYW0ge3N0cmluZz19IGN1c3RvbVNwZWNTdWZmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2htZW50RnJhbWVkKGRvd25sb2FkLCBjdXN0b21TcGVjU3VmZml4KSB7XG5cdHJldHVybiBhdHRhY2htZW50UmF3KCdGcmFtZWRWaWV3JywgZG93bmxvYWQsIGN1c3RvbVNwZWNTdWZmaXgpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmVyUmVxdWVzdCh0eXBlKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy8nICsgdHlwZSArICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJztcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnVXBsb2FkJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZENvbnRhY3RzKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnVXBsb2FkQ29udGFjdHMnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkQmFja2dyb3VuZCgpIHtcblx0cmV0dXJuIHNlcnZlclJlcXVlc3QoJ1VwbG9hZEJhY2tncm91bmQnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kKCkge1xuXHRyZXR1cm4gc2VydmVyUmVxdWVzdCgnQXBwZW5kJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlKGVtYWlsKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdDaGFuZ2UnKSArIGVuY29kZVVSSUNvbXBvbmVudChlbWFpbCkgKyAnLyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGFkZFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFqYXgoYWRkKSB7XG5cdHJldHVybiBzZXJ2ZXJSZXF1ZXN0KCdBamF4JykgKyBhZGQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RIYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVzc2FnZVZpZXdMaW5rKHJlcXVlc3RIYXNoKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArXG5cdFx0Jy9SYXcvJyArXG5cdFx0U1VCX1FVRVJZX1BSRUZJWCArXG5cdFx0Jy8nICtcblx0XHRBVVRIX1BSRUZJWCArXG5cdFx0Jy9WaWV3QXNQbGFpbi8nICtcblx0XHRTVUJfUVVFUllfUFJFRklYICtcblx0XHQnLycgK1xuXHRcdHJlcXVlc3RIYXNoXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RIYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVzc2FnZURvd25sb2FkTGluayhyZXF1ZXN0SGFzaCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnL1Jhdy8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIEFVVEhfUFJFRklYICsgJy9Eb3dubG9hZC8nICsgU1VCX1FVRVJZX1BSRUZJWCArICcvJyArIHJlcXVlc3RIYXNoXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXZhdGFyTGluayhlbWFpbCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LzAvQXZhdGFyLycgKyBlbmNvZGVVUklDb21wb25lbnQoZW1haWwpICsgJy8nO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGljTGluayhoYXNoKSB7XG5cdHJldHVybiBTRVJWRVJfUFJFRklYICsgJy9SYXcvMC9QdWJsaWMvJyArIGhhc2ggKyAnLyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VyQmFja2dyb3VuZChoYXNoKSB7XG5cdHJldHVybiAoXG5cdFx0U0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL1VzZXJCYWNrZ3JvdW5kLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgaGFzaFxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaHBJbmZvKCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvSW5mbyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNBZG1pblxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxhbmdMaW5rKGxhbmcsIGlzQWRtaW4pIHtcblx0cmV0dXJuIFNFUlZFUl9QUkVGSVggKyAnL0xhbmcvMC8nICsgKGlzQWRtaW4gPyAnQWRtaW4nIDogJ0FwcCcpICsgJy8nICsgd2luZG93LmVuY29kZVVSSShsYW5nKSArICcvJyArIFZFUlNJT04gKyAnLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENvbnRhY3RzVmNmKCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL0NvbnRhY3RzVmNmLyc7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENvbnRhY3RzQ3N2KCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICcvUmF3LycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnL0NvbnRhY3RzQ3N2Lyc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSB4YXV0aCA9IGZhbHNlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc29jaWFsR29vZ2xlKHhhdXRoID0gZmFsc2UpIHtcblx0cmV0dXJuIChcblx0XHRTRVJWRVJfUFJFRklYICtcblx0XHQnU29jaWFsR29vZ2xlJyArXG5cdFx0KCcnICE9PSBBVVRIX1BSRUZJWCA/ICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJyA6ICcnKSArXG5cdFx0KHhhdXRoID8gJyZ4YXV0aD0xJyA6ICcnKVxuXHQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb2NpYWxUd2l0dGVyKCkge1xuXHRyZXR1cm4gU0VSVkVSX1BSRUZJWCArICdTb2NpYWxUd2l0dGVyJyArICgnJyAhPT0gQVVUSF9QUkVGSVggPyAnLycgKyBTVUJfUVVFUllfUFJFRklYICsgJy8nICsgQVVUSF9QUkVGSVggKyAnLycgOiAnJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNvY2lhbEZhY2Vib29rKCkge1xuXHRyZXR1cm4gKFxuXHRcdFNFUlZFUl9QUkVGSVggKyAnU29jaWFsRmFjZWJvb2snICsgKCcnICE9PSBBVVRIX1BSRUZJWCA/ICcvJyArIFNVQl9RVUVSWV9QUkVGSVggKyAnLycgKyBBVVRIX1BSRUZJWCArICcvJyA6ICcnKVxuXHQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhdGljUHJlZml4KHBhdGgpIHtcblx0cmV0dXJuIFNUQVRJQ19QUkVGSVggKyBwYXRoO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eUNvbnRhY3RQaWMoKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2Nzcy9pbWFnZXMvZW1wdHktY29udGFjdC5wbmcnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZU5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzb3VuZChmaWxlTmFtZSkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdzb3VuZHMvJyArIGZpbGVOYW1lKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90aWZpY2F0aW9uTWFpbEljb24oKSB7XG5cdHJldHVybiBzdGF0aWNQcmVmaXgoJ2Nzcy9pbWFnZXMvaWNvbS1tZXNzYWdlLW5vdGlmaWNhdGlvbi5wbmcnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlblBncEpzKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdqcy9taW4vb3BlbnBncC5taW4uanMnKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlblBncFdvcmtlckpzKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdqcy9taW4vb3BlbnBncC53b3JrZXIubWluLmpzJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wZW5QZ3BXb3JrZXJQYXRoKCkge1xuXHRyZXR1cm4gc3RhdGljUHJlZml4KCdqcy9taW4vJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoZW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhlbWVQcmV2aWV3TGluayh0aGVtZSkge1xuXHRsZXQgcHJlZml4ID0gVkVSU0lPTl9QUkVGSVg7XG5cdGlmICgnQGN1c3RvbScgPT09IHRoZW1lLnN1YnN0cigtNykpIHtcblx0XHR0aGVtZSA9IHRyaW0odGhlbWUuc3Vic3RyaW5nKDAsIHRoZW1lLmxlbmd0aCAtIDcpKTtcblx0XHRwcmVmaXggPSBXRUJfUFJFRklYO1xuXHR9XG5cblx0cmV0dXJuIHByZWZpeCArICd0aGVtZXMvJyArIHdpbmRvdy5lbmNvZGVVUkkodGhlbWUpICsgJy9pbWFnZXMvcHJldmlldy5wbmcnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmJveEZvbGRlck5hbWUgPSAnSU5CT1gnXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5ib3goaW5ib3hGb2xkZXJOYW1lID0gJ0lOQk9YJykge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnbWFpbGJveC8nICsgaW5ib3hGb2xkZXJOYW1lO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nPX0gc2NyZWVuTmFtZSA9ICcnXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3Moc2NyZWVuTmFtZSA9ICcnKSB7XG5cdHJldHVybiBIQVNIX1BSRUZJWCArICdzZXR0aW5ncycgKyAoc2NyZWVuTmFtZSA/ICcvJyArIHNjcmVlbk5hbWUgOiAnJyk7XG59XG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFib3V0KCkge1xuXHRyZXR1cm4gSEFTSF9QUkVGSVggKyAnYWJvdXQnO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzY3JlZW5OYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRtaW4oc2NyZWVuTmFtZSkge1xuXHRsZXQgcmVzdWx0ID0gSEFTSF9QUkVGSVg7XG5cdHN3aXRjaCAoc2NyZWVuTmFtZSkge1xuXHRcdGNhc2UgJ0FkbWluRG9tYWlucyc6XG5cdFx0XHRyZXN1bHQgKz0gJ2RvbWFpbnMnO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnQWRtaW5TZWN1cml0eSc6XG5cdFx0XHRyZXN1bHQgKz0gJ3NlY3VyaXR5Jztcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgJ0FkbWluTGljZW5zaW5nJzpcblx0XHRcdHJlc3VsdCArPSAnbGljZW5zaW5nJztcblx0XHRcdGJyZWFrO1xuXHRcdC8vIG5vIGRlZmF1bHRcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvbGRlclxuICogQHBhcmFtIHtudW1iZXI9fSBwYWdlID0gMVxuICogQHBhcmFtIHtzdHJpbmc9fSBzZWFyY2ggPSAnJ1xuICogQHBhcmFtIHtzdHJpbmc9fSB0aHJlYWRVaWQgPSAnJ1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1haWxCb3goZm9sZGVyLCBwYWdlID0gMSwgc2VhcmNoID0gJycsIHRocmVhZFVpZCA9ICcnKSB7XG5cdHBhZ2UgPSBpc05vcm1hbChwYWdlKSA/IHBJbnQocGFnZSkgOiAxO1xuXHRzZWFyY2ggPSBwU3RyaW5nKHNlYXJjaCk7XG5cblx0bGV0IHJlc3VsdCA9IEhBU0hfUFJFRklYICsgJ21haWxib3gvJztcblxuXHRpZiAoJycgIT09IGZvbGRlcikge1xuXHRcdGNvbnN0IHJlc3VsdFRocmVhZFVpZCA9IHBJbnQodGhyZWFkVWlkKTtcblx0XHRyZXN1bHQgKz0gd2luZG93LmVuY29kZVVSSShmb2xkZXIpICsgKDAgPCByZXN1bHRUaHJlYWRVaWQgPyAnficgKyByZXN1bHRUaHJlYWRVaWQgOiAnJyk7XG5cdH1cblxuXHRpZiAoMSA8IHBhZ2UpIHtcblx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWy9dKyQvLCAnJyk7XG5cdFx0cmVzdWx0ICs9ICcvcCcgKyBwYWdlO1xuXHR9XG5cblx0aWYgKCcnICE9PSBzZWFyY2gpIHtcblx0XHRyZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvWy9dKyQvLCAnJyk7XG5cdFx0cmVzdWx0ICs9ICcvJyArIHdpbmRvdy5lbmNvZGVVUkkoc2VhcmNoKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL21hcFwiKTsiLCJpbXBvcnQgX2ZvckVhY2hJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvZm9yLWVhY2hcIjtcbmltcG9ydCBfT2JqZWN0JGtleXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3Qva2V5c1wiO1xuaW1wb3J0IF9yZWR1Y2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmVkdWNlXCI7XG5pbXBvcnQgX3JldmVyc2VJbnN0YW5jZVByb3BlcnR5IGZyb20gXCJAYmFiZWwvcnVudGltZS1jb3JlanMzL2NvcmUtanMvaW5zdGFuY2UvcmV2ZXJzZVwiO1xuaW1wb3J0IF9zbGljZUluc3RhbmNlUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9pbnN0YW5jZS9zbGljZVwiO1xuaW1wb3J0IF9PYmplY3QkZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lLWNvcmVqczMvY29yZS1qcy9vYmplY3QvZGVmaW5lLXByb3BlcnR5XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHksIGRlY29yYXRvcnMsIGRlc2NyaXB0b3IsIGNvbnRleHQpIHtcbiAgdmFyIF9jb250ZXh0LCBfY29udGV4dDIsIF9jb250ZXh0MztcblxuICB2YXIgZGVzYyA9IHt9O1xuXG4gIF9mb3JFYWNoSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dCA9IF9PYmplY3Qka2V5cyhkZXNjcmlwdG9yKSkuY2FsbChfY29udGV4dCwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlc2Nba2V5XSA9IGRlc2NyaXB0b3Jba2V5XTtcbiAgfSk7XG5cbiAgZGVzYy5lbnVtZXJhYmxlID0gISFkZXNjLmVudW1lcmFibGU7XG4gIGRlc2MuY29uZmlndXJhYmxlID0gISFkZXNjLmNvbmZpZ3VyYWJsZTtcblxuICBpZiAoJ3ZhbHVlJyBpbiBkZXNjIHx8IGRlc2MuaW5pdGlhbGl6ZXIpIHtcbiAgICBkZXNjLndyaXRhYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlc2MgPSBfcmVkdWNlSW5zdGFuY2VQcm9wZXJ0eShfY29udGV4dDIgPSBfcmV2ZXJzZUluc3RhbmNlUHJvcGVydHkoX2NvbnRleHQzID0gX3NsaWNlSW5zdGFuY2VQcm9wZXJ0eShkZWNvcmF0b3JzKS5jYWxsKGRlY29yYXRvcnMpKS5jYWxsKF9jb250ZXh0MykpLmNhbGwoX2NvbnRleHQyLCBmdW5jdGlvbiAoZGVzYywgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5LCBkZXNjKSB8fCBkZXNjO1xuICB9LCBkZXNjKTtcblxuICBpZiAoY29udGV4dCAmJiBkZXNjLmluaXRpYWxpemVyICE9PSB2b2lkIDApIHtcbiAgICBkZXNjLnZhbHVlID0gZGVzYy5pbml0aWFsaXplciA/IGRlc2MuaW5pdGlhbGl6ZXIuY2FsbChjb250ZXh0KSA6IHZvaWQgMDtcbiAgICBkZXNjLmluaXRpYWxpemVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGRlc2MuaW5pdGlhbGl6ZXIgPT09IHZvaWQgMCkge1xuICAgIF9PYmplY3QkZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSwgZGVzYyk7XG5cbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkZXNjO1xufSIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvb2JqZWN0L2dldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5rZXk7IiwiaW1wb3J0IHsgQWJzdHJhY3RBamF4UmVtb3RlIH0gZnJvbSAnUmVtb3RlL0Fic3RyYWN0QWpheCc7XG5cbmNsYXNzIFJlbW90ZUFkbWluQWpheCBleHRlbmRzIEFic3RyYWN0QWpheFJlbW90ZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNMb2dpblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Bhc3N3b3JkXG5cdCAqL1xuXHRhZG1pbkxvZ2luKGZDYWxsYmFjaywgc0xvZ2luLCBzUGFzc3dvcmQpIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTG9naW4nLCB7XG5cdFx0XHQnTG9naW4nOiBzTG9naW4sXG5cdFx0XHQnUGFzc3dvcmQnOiBzUGFzc3dvcmRcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRhZG1pbkxvZ291dChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTG9nb3V0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0gez99IG9EYXRhXG5cdCAqL1xuXHRzYXZlQWRtaW5Db25maWcoZkNhbGxiYWNrLCBvRGF0YSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5TZXR0aW5nc1VwZGF0ZScsIG9EYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSB2YWx1ZUZuXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmblxuXHQgKi9cblx0c2F2ZUFkbWluQ29uZmlnSGVscGVyKGtleSwgdmFsdWVGbiwgZm4pIHtcblx0XHRyZXR1cm4gKHZhbHVlKSA9PiB7XG5cdFx0XHRjb25zdCBkYXRhID0ge307XG5cdFx0XHRkYXRhW2tleV0gPSB2YWx1ZUZuID8gdmFsdWVGbih2YWx1ZSkgOiB2YWx1ZTtcblx0XHRcdHRoaXMuc2F2ZUFkbWluQ29uZmlnKGZuIHx8IG51bGwsIGRhdGEpO1xuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBiSW5jbHVkZUFsaWFzZXMgPSB0cnVlXG5cdCAqL1xuXHRkb21haW5MaXN0KGZDYWxsYmFjaywgYkluY2x1ZGVBbGlhc2VzID0gdHJ1ZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5MaXN0Jywge1xuXHRcdFx0J0luY2x1ZGVBbGlhc2VzJzogYkluY2x1ZGVBbGlhc2VzID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0cGx1Z2luTGlzdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGx1Z2luTGlzdCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdHBhY2thZ2VzTGlzdChmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGFja2FnZXNMaXN0Jyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0Y29yZURhdGEoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pbkNvcmVEYXRhJyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKi9cblx0dXBkYXRlQ29yZURhdGEoZkNhbGxiYWNrKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblVwZGF0ZUNvcmVEYXRhJywge30sIDkwMDAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFja2FnZVxuXHQgKi9cblx0cGFja2FnZUluc3RhbGwoZkNhbGxiYWNrLCBvUGFja2FnZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoXG5cdFx0XHRmQ2FsbGJhY2ssXG5cdFx0XHQnQWRtaW5QYWNrYWdlSW5zdGFsbCcsXG5cdFx0XHR7XG5cdFx0XHRcdCdJZCc6IG9QYWNrYWdlLmlkLFxuXHRcdFx0XHQnVHlwZSc6IG9QYWNrYWdlLnR5cGUsXG5cdFx0XHRcdCdGaWxlJzogb1BhY2thZ2UuZmlsZVxuXHRcdFx0fSxcblx0XHRcdDYwMDAwXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFja2FnZVxuXHQgKi9cblx0cGFja2FnZURlbGV0ZShmQ2FsbGJhY2ssIG9QYWNrYWdlKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBhY2thZ2VEZWxldGUnLCB7XG5cdFx0XHQnSWQnOiBvUGFja2FnZS5pZFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqL1xuXHRkb21haW4oZkNhbGxiYWNrLCBzTmFtZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5Mb2FkJywge1xuXHRcdFx0J05hbWUnOiBzTmFtZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqL1xuXHRwbHVnaW4oZkNhbGxiYWNrLCBzTmFtZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5Mb2FkJywge1xuXHRcdFx0J05hbWUnOiBzTmFtZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNOYW1lXG5cdCAqL1xuXHRkb21haW5EZWxldGUoZkNhbGxiYWNrLCBzTmFtZSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5EZWxldGUnLCB7XG5cdFx0XHQnTmFtZSc6IHNOYW1lXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc05hbWVcblx0ICogQHBhcmFtIHtib29sZWFufSBiRGlzYWJsZWRcblx0ICovXG5cdGRvbWFpbkRpc2FibGUoZkNhbGxiYWNrLCBzTmFtZSwgYkRpc2FibGVkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5EaXNhYmxlJywge1xuXHRcdFx0TmFtZTogc05hbWUsXG5cdFx0XHREaXNhYmxlZDogYkRpc2FibGVkID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0ge09iamVjdH0gb0NvbmZpZ1xuXHQgKi9cblx0cGx1Z2luU2V0dGluZ3NVcGRhdGUoZkNhbGxiYWNrLCBvQ29uZmlnKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5QbHVnaW5TZXR0aW5nc1VwZGF0ZScsIG9Db25maWcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtib29sZWFufSBiRm9yY2Vcblx0ICovXG5cdGxpY2Vuc2luZyhmQ2FsbGJhY2ssIGJGb3JjZSkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTGljZW5zaW5nJywge1xuXHRcdFx0Rm9yY2U6IGJGb3JjZSA/ICcxJyA6ICcwJ1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNEb21haW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IHNLZXlcblx0ICovXG5cdGxpY2Vuc2luZ0FjdGl2YXRlKGZDYWxsYmFjaywgc0RvbWFpbiwgc0tleSkge1xuXHRcdHJldHVybiB0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluTGljZW5zaW5nQWN0aXZhdGUnLCB7XG5cdFx0XHREb21haW46IHNEb21haW4sXG5cdFx0XHRLZXk6IHNLZXlcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzTmFtZVxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJEaXNhYmxlZFxuXHQgKi9cblx0cGx1Z2luRGlzYWJsZShmQ2FsbGJhY2ssIHNOYW1lLCBiRGlzYWJsZWQpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBsdWdpbkRpc2FibGUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdERpc2FibGVkOiBiRGlzYWJsZWQgPyAnMScgOiAnMCdcblx0XHR9KTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbkFsaWFzKGZDYWxsYmFjaywgc05hbWUsIHNBbGlhcykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5BbGlhc1NhdmUnLCB7XG5cdFx0XHROYW1lOiBzTmFtZSxcblx0XHRcdEFsaWFzOiBzQWxpYXNcblx0XHR9KTtcblx0fVxuXG5cdGNyZWF0ZU9yVXBkYXRlRG9tYWluKFxuXHRcdGZDYWxsYmFjayxcblx0XHRiQ3JlYXRlLFxuXHRcdHNOYW1lLFxuXHRcdHNJbmNIb3N0LFxuXHRcdGlJbmNQb3J0LFxuXHRcdHNJbmNTZWN1cmUsXG5cdFx0YkluY1Nob3J0TG9naW4sXG5cdFx0YlVzZVNpZXZlLFxuXHRcdHNTaWV2ZUFsbG93UmF3LFxuXHRcdHNTaWV2ZUhvc3QsXG5cdFx0aVNpZXZlUG9ydCxcblx0XHRzU2lldmVTZWN1cmUsXG5cdFx0c091dEhvc3QsXG5cdFx0aU91dFBvcnQsXG5cdFx0c091dFNlY3VyZSxcblx0XHRiT3V0U2hvcnRMb2dpbixcblx0XHRiT3V0QXV0aCxcblx0XHRiT3V0UGhwTWFpbCxcblx0XHRzV2hpdGVMaXN0XG5cdCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5TYXZlJywge1xuXHRcdFx0J0NyZWF0ZSc6IGJDcmVhdGUgPyAnMScgOiAnMCcsXG5cdFx0XHQnTmFtZSc6IHNOYW1lLFxuXG5cdFx0XHQnSW5jSG9zdCc6IHNJbmNIb3N0LFxuXHRcdFx0J0luY1BvcnQnOiBpSW5jUG9ydCxcblx0XHRcdCdJbmNTZWN1cmUnOiBzSW5jU2VjdXJlLFxuXHRcdFx0J0luY1Nob3J0TG9naW4nOiBiSW5jU2hvcnRMb2dpbiA/ICcxJyA6ICcwJyxcblxuXHRcdFx0J1VzZVNpZXZlJzogYlVzZVNpZXZlID8gJzEnIDogJzAnLFxuXHRcdFx0J1NpZXZlQWxsb3dSYXcnOiBzU2lldmVBbGxvd1JhdyA/ICcxJyA6ICcwJyxcblx0XHRcdCdTaWV2ZUhvc3QnOiBzU2lldmVIb3N0LFxuXHRcdFx0J1NpZXZlUG9ydCc6IGlTaWV2ZVBvcnQsXG5cdFx0XHQnU2lldmVTZWN1cmUnOiBzU2lldmVTZWN1cmUsXG5cblx0XHRcdCdPdXRIb3N0Jzogc091dEhvc3QsXG5cdFx0XHQnT3V0UG9ydCc6IGlPdXRQb3J0LFxuXHRcdFx0J091dFNlY3VyZSc6IHNPdXRTZWN1cmUsXG5cdFx0XHQnT3V0U2hvcnRMb2dpbic6IGJPdXRTaG9ydExvZ2luID8gJzEnIDogJzAnLFxuXHRcdFx0J091dEF1dGgnOiBiT3V0QXV0aCA/ICcxJyA6ICcwJyxcblx0XHRcdCdPdXRVc2VQaHBNYWlsJzogYk91dFBocE1haWwgPyAnMScgOiAnMCcsXG5cblx0XHRcdCdXaGl0ZUxpc3QnOiBzV2hpdGVMaXN0XG5cdFx0fSk7XG5cdH1cblxuXHR0ZXN0Q29ubmVjdGlvbkZvckRvbWFpbihcblx0XHRmQ2FsbGJhY2ssXG5cdFx0c05hbWUsXG5cdFx0c0luY0hvc3QsXG5cdFx0aUluY1BvcnQsXG5cdFx0c0luY1NlY3VyZSxcblx0XHRiVXNlU2lldmUsXG5cdFx0c1NpZXZlSG9zdCxcblx0XHRpU2lldmVQb3J0LFxuXHRcdHNTaWV2ZVNlY3VyZSxcblx0XHRzT3V0SG9zdCxcblx0XHRpT3V0UG9ydCxcblx0XHRzT3V0U2VjdXJlLFxuXHRcdGJPdXRBdXRoLFxuXHRcdGJPdXRQaHBNYWlsXG5cdCkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Eb21haW5UZXN0Jywge1xuXHRcdFx0J05hbWUnOiBzTmFtZSxcblx0XHRcdCdJbmNIb3N0Jzogc0luY0hvc3QsXG5cdFx0XHQnSW5jUG9ydCc6IGlJbmNQb3J0LFxuXHRcdFx0J0luY1NlY3VyZSc6IHNJbmNTZWN1cmUsXG5cdFx0XHQnVXNlU2lldmUnOiBiVXNlU2lldmUgPyAnMScgOiAnMCcsXG5cdFx0XHQnU2lldmVIb3N0Jzogc1NpZXZlSG9zdCxcblx0XHRcdCdTaWV2ZVBvcnQnOiBpU2lldmVQb3J0LFxuXHRcdFx0J1NpZXZlU2VjdXJlJzogc1NpZXZlU2VjdXJlLFxuXHRcdFx0J091dEhvc3QnOiBzT3V0SG9zdCxcblx0XHRcdCdPdXRQb3J0JzogaU91dFBvcnQsXG5cdFx0XHQnT3V0U2VjdXJlJzogc091dFNlY3VyZSxcblx0XHRcdCdPdXRBdXRoJzogYk91dEF1dGggPyAnMScgOiAnMCcsXG5cdFx0XHQnT3V0VXNlUGhwTWFpbCc6IGJPdXRQaHBNYWlsID8gJzEnIDogJzAnXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0gez99IG9EYXRhXG5cdCAqL1xuXHR0ZXN0Q29udGFjdHMoZkNhbGxiYWNrLCBvRGF0YSkge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnQWRtaW5Db250YWN0c1Rlc3QnLCBvRGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHs/RnVuY3Rpb259IGZDYWxsYmFja1xuXHQgKiBAcGFyYW0gez99IG9EYXRhXG5cdCAqL1xuXHRzYXZlTmV3QWRtaW5QYXNzd29yZChmQ2FsbGJhY2ssIG9EYXRhKSB7XG5cdFx0dGhpcy5kZWZhdWx0UmVxdWVzdChmQ2FsbGJhY2ssICdBZG1pblBhc3N3b3JkVXBkYXRlJywgb0RhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGFkbWluUGluZyhmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0FkbWluUGluZycpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBSZW1vdGVBZG1pbkFqYXgoKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCAqIGFzIFBsdWdpbnMgZnJvbSAnQ29tbW9uL1BsdWdpbnMnO1xuXG5jb25zdCBTVUJTID0ge307XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fSBuYW1lXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YihuYW1lLCBmdW5jLCBjb250ZXh0KSB7XG5cdGlmIChpc09iamVjdChuYW1lKSkge1xuXHRcdGNvbnRleHQgPSBmdW5jIHx8IG51bGw7XG5cdFx0ZnVuYyA9IG51bGw7XG5cblx0XHRfLmVhY2gobmFtZSwgKHN1YkZ1bmMsIHN1Yk5hbWUpID0+IHtcblx0XHRcdHN1YihzdWJOYW1lLCBzdWJGdW5jLCBjb250ZXh0KTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRpZiAoaXNVbmQoU1VCU1tuYW1lXSkpIHtcblx0XHRcdFNVQlNbbmFtZV0gPSBbXTtcblx0XHR9XG5cblx0XHRTVUJTW25hbWVdLnB1c2goW2Z1bmMsIGNvbnRleHRdKTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge0FycmF5PX0gYXJnc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHViKG5hbWUsIGFyZ3MpIHtcblx0UGx1Z2lucy5ydW5Ib29rKCdybC1wdWInLCBbbmFtZSwgYXJnc10pO1xuXG5cdGlmICghaXNVbmQoU1VCU1tuYW1lXSkpIHtcblx0XHRfLmVhY2goU1VCU1tuYW1lXSwgKGl0ZW1zKSA9PiB7XG5cdFx0XHRpZiAoaXRlbXNbMF0pIHtcblx0XHRcdFx0aXRlbXNbMF0uYXBwbHkoaXRlbXNbMV0gfHwgbnVsbCwgYXJncyB8fCBbXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsImV4cG9ydCBjb25zdCBNRVNTQUdFU19QRVJfUEFHRSA9IDIwO1xuXG5leHBvcnQgY29uc3QgTUVTU0FHRVNfUEVSX1BBR0VfVkFMVUVTID0gWzEwLCAyMCwgMzAsIDUwLCAxMDBdO1xuXG5leHBvcnQgY29uc3QgQ09OVEFDVFNfUEVSX1BBR0UgPSA1MDtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUpBWF9USU1FT1VUID0gMzAwMDA7XG5cbmV4cG9ydCBjb25zdCBTRUFSQ0hfQUpBWF9USU1FT1VUID0gMzAwMDAwO1xuXG5leHBvcnQgY29uc3QgU0VORF9NRVNTQUdFX0FKQVhfVElNRU9VVCA9IDMwMDAwMDtcblxuZXhwb3J0IGNvbnN0IFNBVkVfTUVTU0FHRV9BSkFYX1RJTUVPVVQgPSAyMDAwMDA7XG5cbmV4cG9ydCBjb25zdCBDT05UQUNUU19TWU5DX0FKQVhfVElNRU9VVCA9IDIwMDAwMDtcblxuZXhwb3J0IGNvbnN0IFVOVVNFRF9PUFRJT05fVkFMVUUgPSAnX19VTlVTRV9fJztcblxuZXhwb3J0IGNvbnN0IENMSUVOVF9TSURFX1NUT1JBR0VfSU5ERVhfTkFNRSA9ICdybGNzYyc7XG5cbmV4cG9ydCBjb25zdCBJTUFQX0RFRkFVTFRfUE9SVCA9IDE0MztcblxuZXhwb3J0IGNvbnN0IElNQVBfREVGQVVMVF9TRUNVUkVfUE9SVCA9IDk5MztcblxuZXhwb3J0IGNvbnN0IFNNVFBfREVGQVVMVF9QT1JUID0gMjU7XG5cbmV4cG9ydCBjb25zdCBTTVRQX0RFRkFVTFRfU0VDVVJFX1BPUlQgPSA0NjU7XG5cbmV4cG9ydCBjb25zdCBTSUVWRV9ERUZBVUxUX1BPUlQgPSA0MTkwO1xuXG5leHBvcnQgY29uc3QgTUVTU0FHRV9CT0RZX0NBQ0hFX0xJTUlUID0gMTU7XG5cbmV4cG9ydCBjb25zdCBBSkFYX0VSUk9SX0xJTUlUID0gNztcblxuZXhwb3J0IGNvbnN0IFRPS0VOX0VSUk9SX0xJTUlUID0gMTA7XG5cbmV4cG9ydCBjb25zdCBSQUlOTE9PUF9UUklBTF9LRVkgPSAnUkFJTkxPT1AtVFJJQUwtS0VZJztcblxuLyogZXNsaW50IG1heC1sZW46IDAgKi9cbmV4cG9ydCBjb25zdCBEQVRBX0lNQUdFX1VTRVJfRE9UX1BJQyA9XG5cdCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUM0QUFBQXVDQVlBQUFCWHVTczNBQUFISGtsRVFWUm9RN1ZaVzA4YlZ4Q2VYUnV3SWJUR1hJd050QkJhcWp3Z1ZVaVI4bERsYnphOXFlMURwVlo5YU5RLzBLcFBlYUpLMDdTcGN1RWVDRW1VQU9ibTIxYmZyTDlsT05qZXhTWXJXZmJ1bmozN3pYZG12cGt6OW9JZ0NLVEQwV2cweFBkOTRURFA4M1EwenZXYTUwdnprbFNyZGFuVmFucWY0L0Q4NEdCR3IrRitPcDNTOGZxb0p4TE9kblpnVHZzTy9uWWhlbkhBK1VDN0NXRjF1WHdrYjkrK2xkUFRVd1ZlclZiVnFGUXFwUjhZUGpRMEpDTWpJNUxORGlqb1JnUDNQUVZ1NSs1RW9yMlhHTGc3SVY0R2tJZEhKL0xtelJzNU9EaUl3TmJyZFIwTzBHQ2NxNFh6NGVGaG1aeWNsUDcrdERRYUlpay9CRzVYS1FuNFN3RzN6SlRMWlhuOStyVWNsSThVSEQ1WVZvREROOGJTelhoT053TDQ4ZkZ4R1I0ZWlsekZaVDF1RlJJQjV5VDhCcUNkblIzWjNkMFZQOVVuNlhSYXdZSnBnZ1ZyWkJ2MzhNRTRYS3RVS25MdDJqVXBsVW95MVBSL2wzVTdUNnNWU0FRY2dNQWtqOFBEUTluZTNwYWpveU1STDd6ZUtzWVpXSGdXWURHbXY3OC9tbWR3Y0ZBK21KbFNnemlIRFdyRVJyc2pFWERYZWdUaTF0WlcrREx4STJieElycUZOWVRYeUR5Q0Z3ZU1BSEN3YjhlNFJuVE51T3NxZTN0N3NyYTIxcFREMEtjdDY2NkU4WGxjWnl6dzkvUlVVWEs1bks1b1VpblVRSTZUUTNjeW5PL3Y3OHZxNnFyS1hDTndsVGlKSnB5TkdjM25aSHA2dXFWMmR3clFXT0N0WkJEQVYxWld3c1FrN2Ywd2lRbjVrZmZiQXUvMC9LV0JZeklDMStYdWtmR3gwUkdabXBwS2xDMnRJVjBCaDRhRGNaVzdIaGtmSDh1ckxMWkw3VDJwaWh2bGtNTm56NTZGaWFkSHhpY0w0MUlzRnBONDFia3hzWXhiUmRGbzlqd0I4S2RQbjE0SjhLblNwQlFLaFFzNjNuUG1iQ1ZSY0JVQVIyTHExVlZtcGtzeU1URnhBWGpjRXNReWJpZWdFU2lvbmp4NW9zQ1pPZU5lMU80K0VoQ0FYN2JRU2dRY3hSSFRNZ0FnY3o1Ky9EaXMvaEw0dUhVMy9CNFlHTkFTR0hJS3h1RXFsMGsrbDA1QWVJQUYxdlBuejVWeEZGbWREbGFKck10WklUSmVTc1hDT1RsTXVuS3hqTHRNWU9LTmpRMTU4ZUpGdUF1S2tVT2I1c0V3Z2ZmMTlTa0pVQlZrVGhaVWJuWFpydENLQlE2Z2JuV0lralpweW5lM2VqQVdvR25BN0ljejZpcnZCTGdiT01pY0NNNlRreFB4L0xBa2JYZmdXY3NhenVFMmtGUnNLRDVaK0NpcUR1bUtuY3BadmllV2NTNmREVkQ4eGlZQ05mbHBKZHdjZHdKT2Y5YWlyTG1WUTdEUHpNeElZV0xzWEdYb1ZxTHQ1azBNM0szSlVWUERaZGJXTnpzQ3A0OFRQRmR2ZG5aV1V6MzJuRGhhN2JKNjNrZ0FKUHpTZFJrczkvS2Y5eE1KQVExZ3EyTnBhVW15Mll6NHphcjRuUUMzeGI5OUFRd0NjR3pMQUF3dWhHOFlpV3ZjT0t0cytyNEdPZTVuTWhtNWVmT205bFVBM0UzdlNaSlJyS3ZFMGZuUHYvL0p5NWN2bzVjVEhJUFFiU2poT29xcTY5ZXZTMTlmNmx4REtLNCtzVmhpZ1pQdEtKcWJyUWVxeGQ1K1dSNCtmS2dxZ1QwazJYWDNuaGlQZ0VUV1hGaFlrRnp1UFoyeVZxMUdUU09YcEU0Ny9WamdObkQ0bTRHRzcvTGhzVHg2OUVpd0Q0VnIyTXdJSXhnYkFIMThmS3gxeWZ6OHZFb2dOdkd0V25DdWhMWmE5VVRBcmVWV0ZzSHkvYi8rVnJiZGw3RTVSRU1RRDJqRG9VYkJ5dHkrL1puVTY0R2tVMkh6eUpMaGt0VTFjTHY4bkFSZ2tZUzJkM2FqQWd3RzhxVTJvTG1EWjkyQ01hT2pvN0s0dUNpWmdiRFdhUldnblpoUHhMaHJNVUN2cjY5cml3S1prMUxIRjdYcXJXQU85aEp4SDZvek56Y25DeC9QcXp0Wmc5bWY2U1FNc2NDdG0yQzVrZTRCR01sSFdUVXAzNjAzNkFKYWpEVnJGTXpCcmhoV3NsUXNTckZZaU9xVnBNcmlOWUlncUZScTJqM0ZBYi96ZmZUNnp1eEZYeHNOenMzTlRYbjE2bFc0Z1lpVzk2dzFGeWVkRis4M3hHLzJGTkdDUnBVNE5qYW1Nc24rT1o5eEU1UlhxZGFEZFBwaWI2UldDenV3S0Y5UnhxSTJBVk5RQndRWUpvSzB3ZEJlam5xdEVpa1AzcGZQNTFYalVURVNsMTJGcUpFS3hzRW9yQVJZREQ0NE9OVGVJRDdZcHNFbnJSdlFmV0FJMmU4V2ZEYVRVU0l3SjBpQkNtRk90T1VBSHZWTVBwL1RQd3ZZRlZZRkl1UDhsK0RCZ3dkYWEyTWlxd2EwR2dZd2ZlTWx0b3ZiRGZoNmMxdklnTVljbGlTc0t2NElXRnI2VkRIeHZsZHZCQUgrMXNBK2NubDVXWU9QbW1yOWlyKzFsOUkwQ2d6MHlqaFhqZkpKMEpST25tZXpXYmwxNjVheXIvNWZxd2NCTnI3SWZoak1xS2N2RVNTTTRlUmNDYXNRM2JETk9ibUtQTGRHVUdwWnNOMjRjVU5MQm05emF6dTRkKytlNnFwTkJGYVR1VVMyNlU1ZHB1UjFDeHlBN0o5ZGRyTVJxbHo0cHdMTFlhd3ltUGQrKy8yUEFEdDJ1Z2NHd3E5Z0NDZGhROTZDNnhXd2E2ajFjZXVxK0kwRWhXMGk4TUFJVkpmZUwzZC9EVkQ4RUtpMTJQNi8yUzJqVi9FY2NWQjU0Ty9lanovOUhHQ3BvQkJNdGE1clhNWEx1NTNEMVhBd2poWHd2dnYraDRCQVhWZTRiT3UzTzNDaHhGMDhMaVpGRzNmZWwxOTlHOUNIM2ZMeXF2MjROY0I0NE1SaHBkSzc4OFUzQ3B5S3dzQ3c1OTB4bWZTcHpzQnQwRnFjM3VkM3Z0WmlneFdjVlpDa2xWcFNpTjB3M3E1RS9oOVRHTUlVdUEzK0VRQUFBQUJKUlU1RXJrSmdnZz09JztcblxuZXhwb3J0IGNvbnN0IERBVEFfSU1BR0VfVFJBTlNQX1BJQyA9XG5cdCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQzBsRVFWUUlXMk5rQUFJQUFBb0FBZ2dBOUdrQUFBQUFTVVZPUks1Q1lJST0nO1xuXG5leHBvcnQgY29uc3QgREFUQV9JTUFHRV9MQVpZX1BMQUNFSE9MREVSX1BJQyA9XG5cdCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVlBQUFBZkZjU0pBQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeGp3djhZUVVBQUFBSmNFaFpjd0FBRHNRQUFBN0VBWlVyRGhzQUFBQU5TVVJCVkJoWFl6aDgrUEIvQUFmZkEwbk5QdUNMQUFBQUFFbEZUa1N1UW1DQyc7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgaW5Gb2N1cyB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBLZXlTdGF0ZSwgRXZlbnRLZXlDb2RlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7ICR3aW4sIGtleVNjb3BlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGJEaXNhYmVDbG9zZU9uRXNjID0gZmFsc2U7XG5cdHNEZWZhdWx0S2V5U2NvcGUgPSBLZXlTdGF0ZS5Ob25lO1xuXHRzQ3VycmVudEtleVNjb3BlID0gS2V5U3RhdGUuTm9uZTtcblxuXHR2aWV3TW9kZWxWaXNpYmlsaXR5ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdG1vZGFsVmlzaWJpbGl0eSA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHJhdGVMaW1pdDogMCB9KTtcblxuXHR2aWV3TW9kZWxOYW1lID0gJyc7XG5cdHZpZXdNb2RlbE5hbWVzID0gW107XG5cdHZpZXdNb2RlbERvbSA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0c3RvcmVBbmRTZXRLZXlTY29wZSgpIHtcblx0XHR0aGlzLnNDdXJyZW50S2V5U2NvcGUgPSBrZXlTY29wZSgpO1xuXHRcdGtleVNjb3BlKHRoaXMuc0RlZmF1bHRLZXlTY29wZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRyZXN0b3JlS2V5U2NvcGUoKSB7XG5cdFx0a2V5U2NvcGUodGhpcy5zQ3VycmVudEtleVNjb3BlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdHJlZ2lzdGVyUG9wdXBLZXlEb3duKCkge1xuXHRcdCR3aW4ub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudCAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSAmJiB0aGlzLm1vZGFsVmlzaWJpbGl0eSgpKSB7XG5cdFx0XHRcdGlmICghdGhpcy5iRGlzYWJlQ2xvc2VPbkVzYyAmJiBFdmVudEtleUNvZGUuRXNjID09PSBldmVudC5rZXlDb2RlKSB7XG5cdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcywgJ2NhbmNlbENvbW1hbmQnKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSBpZiAoRXZlbnRLZXlDb2RlLkJhY2tzcGFjZSA9PT0gZXZlbnQua2V5Q29kZSAmJiAhaW5Gb2N1cygpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0pO1xuXHR9XG5cblx0Y2FuY2VsQ29tbWFuZCgpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cblx0Y2xvc2VDb21tYW5kKCkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdW5jdGlvblxufVxuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFNvY2lhbFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5nb29nbGUgPSB7fTtcblx0XHR0aGlzLnR3aXR0ZXIgPSB7fTtcblx0XHR0aGlzLmZhY2Vib29rID0ge307XG5cdFx0dGhpcy5kcm9wYm94ID0ge307XG5cblx0XHQvLyBHb29nbGVcblx0XHR0aGlzLmdvb2dsZS5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmdvb2dsZS5jbGllbnRJRCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZ29vZ2xlLmNsaWVudFNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZ29vZ2xlLmFwaUtleSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5nb29nbGUubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLnVzZXJOYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmdvb2dsZS5sb2dnaW5lZCA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLmdvb2dsZS51c2VyTmFtZSgpKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmNhcGEgPSB7fTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGggPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLmF1dGhHbWFpbCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdvb2dsZS5jYXBhLnByZXZpZXcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZ29vZ2xlLnJlcXVpcmUgPSB7fTtcblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlLmNsaWVudFNldHRpbmdzID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHR0aGlzLmdvb2dsZS5lbmFibGVkKCkgJiYgKHRoaXMuZ29vZ2xlLmNhcGEuYXV0aCgpIHx8IHRoaXMuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsKCkgfHwgdGhpcy5nb29nbGUuY2FwYS5kcml2ZSgpKVxuXHRcdCk7XG5cblx0XHR0aGlzLmdvb2dsZS5yZXF1aXJlLmFwaUtleVNldHRpbmdzID0ga28uY29tcHV0ZWQoKCkgPT4gdGhpcy5nb29nbGUuZW5hYmxlZCgpICYmIHRoaXMuZ29vZ2xlLmNhcGEuZHJpdmUoKSk7XG5cblx0XHQvLyBGYWNlYm9va1xuXHRcdHRoaXMuZmFjZWJvb2suZW5hYmxlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwSUQgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcFNlY3JldCA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuZmFjZWJvb2subG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuZmFjZWJvb2sudXNlck5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmZhY2Vib29rLnN1cHBvcnRlZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mYWNlYm9vay5sb2dnaW5lZCA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLmZhY2Vib29rLnVzZXJOYW1lKCkpO1xuXG5cdFx0Ly8gVHdpdHRlclxuXHRcdHRoaXMudHdpdHRlci5lbmFibGVkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyS2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyU2VjcmV0ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d2l0dGVyLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3aXR0ZXIudXNlck5hbWUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudHdpdHRlci5sb2dnaW5lZCA9IGtvLmNvbXB1dGVkKCgpID0+ICcnICE9PSB0aGlzLnR3aXR0ZXIudXNlck5hbWUoKSk7XG5cblx0XHQvLyBEcm9wYm94XG5cdFx0dGhpcy5kcm9wYm94LmVuYWJsZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmRyb3Bib3guYXBpS2V5ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHR0aGlzLmdvb2dsZS5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93R29vZ2xlU29jaWFsJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNsaWVudElEKFNldHRpbmdzLnNldHRpbmdzR2V0KCdHb29nbGVDbGllbnRJRCcpKTtcblx0XHR0aGlzLmdvb2dsZS5jbGllbnRTZWNyZXQoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUNsaWVudFNlY3JldCcpKTtcblx0XHR0aGlzLmdvb2dsZS5hcGlLZXkoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0dvb2dsZUFwaUtleScpKTtcblxuXHRcdHRoaXMuZ29vZ2xlLmNhcGEuYXV0aCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbEF1dGgnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5hdXRoR21haWwoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWxBdXRoR21haWwnKSk7XG5cdFx0dGhpcy5nb29nbGUuY2FwYS5kcml2ZSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbERyaXZlJykpO1xuXHRcdHRoaXMuZ29vZ2xlLmNhcGEucHJldmlldyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKSk7XG5cblx0XHR0aGlzLmZhY2Vib29rLmVuYWJsZWQoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dGYWNlYm9va1NvY2lhbCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLmFwcElEKFNldHRpbmdzLnNldHRpbmdzR2V0KCdGYWNlYm9va0FwcElEJykpO1xuXHRcdHRoaXMuZmFjZWJvb2suYXBwU2VjcmV0KFNldHRpbmdzLnNldHRpbmdzR2V0KCdGYWNlYm9va0FwcFNlY3JldCcpKTtcblx0XHR0aGlzLmZhY2Vib29rLnN1cHBvcnRlZCghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdTdXBwb3J0ZWRGYWNlYm9va1NvY2lhbCcpKTtcblxuXHRcdHRoaXMudHdpdHRlci5lbmFibGVkID0ga28ub2JzZXJ2YWJsZSghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd1R3aXR0ZXJTb2NpYWwnKSk7XG5cdFx0dGhpcy50d2l0dGVyLmNvbnN1bWVyS2V5ID0ga28ub2JzZXJ2YWJsZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVHdpdHRlckNvbnN1bWVyS2V5JykpO1xuXHRcdHRoaXMudHdpdHRlci5jb25zdW1lclNlY3JldCA9IGtvLm9ic2VydmFibGUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1R3aXR0ZXJDb25zdW1lclNlY3JldCcpKTtcblxuXHRcdHRoaXMuZHJvcGJveC5lbmFibGVkKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93RHJvcGJveFNvY2lhbCcpKTtcblx0XHR0aGlzLmRyb3Bib3guYXBpS2V5KFNldHRpbmdzLnNldHRpbmdzR2V0KCdEcm9wYm94QXBpS2V5JykpO1xuXHR9XG5cblx0YXBwZW5kRHJvcGJveCgpIHtcblx0XHRpZiAoIXdpbmRvdy5Ecm9wYm94ICYmIHRoaXMuZHJvcGJveC5lbmFibGVkKCkgJiYgdGhpcy5kcm9wYm94LmFwaUtleSgpKSB7XG5cdFx0XHRpZiAoIXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJvcGJveGpzJykpIHtcblx0XHRcdFx0Y29uc3Qgc2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXHRcdFx0XHRzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuXHRcdFx0XHRzY3JpcHQuc3JjID0gJ2h0dHBzOi8vd3d3LmRyb3Bib3guY29tL3N0YXRpYy9hcGkvMi9kcm9waW5zLmpzJztcblx0XHRcdFx0JChzY3JpcHQpXG5cdFx0XHRcdFx0LmF0dHIoJ2lkJywgJ2Ryb3Bib3hqcycpXG5cdFx0XHRcdFx0LmF0dHIoJ2RhdGEtYXBwLWtleScsIHRoaXMuZHJvcGJveC5hcGlLZXkoKSk7XG5cblx0XHRcdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFNvY2lhbFN0b3JlKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvc3RhYmxlL2luc3RhbmNlL2ZpbHRlclwiKTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwiaW1wb3J0ICQgZnJvbSAnJCc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBpMThuVG9Ob2RlcyB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuY2xhc3MgQWJzdHJhY3RDb21wb25lbnQge1xuXHRkaXNwb3NhYmxlID0gW107XG5cblx0ZGlzcG9zZSgpIHtcblx0XHR0aGlzLmRpc3Bvc2FibGUuZm9yRWFjaCgoZnVuY1RvRGlzcG9zZSkgPT4ge1xuXHRcdFx0aWYgKGZ1bmNUb0Rpc3Bvc2UgJiYgZnVuY1RvRGlzcG9zZS5kaXNwb3NlKSB7XG5cdFx0XHRcdGZ1bmNUb0Rpc3Bvc2UuZGlzcG9zZSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHsqfSBDbGFzc09iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlSUQgPSAnJ1xuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgY29tcG9uZW50RXhwb3J0SGVscGVyID0gKENsYXNzT2JqZWN0LCB0ZW1wbGF0ZUlEID0gJycpID0+ICh7XG5cdHRlbXBsYXRlOiB0ZW1wbGF0ZUlEID8geyBlbGVtZW50OiB0ZW1wbGF0ZUlEIH0gOiAnPGI+PC9iPicsXG5cdHZpZXdNb2RlbDoge1xuXHRcdGNyZWF0ZVZpZXdNb2RlbDogKHBhcmFtcywgY29tcG9uZW50SW5mbykgPT4ge1xuXHRcdFx0cGFyYW1zID0gcGFyYW1zIHx8IHt9O1xuXHRcdFx0cGFyYW1zLmVsZW1lbnQgPSBudWxsO1xuXG5cdFx0XHRpZiAoY29tcG9uZW50SW5mbyAmJiBjb21wb25lbnRJbmZvLmVsZW1lbnQpIHtcblx0XHRcdFx0cGFyYW1zLmNvbXBvbmVudCA9IGNvbXBvbmVudEluZm87XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50ID0gJChjb21wb25lbnRJbmZvLmVsZW1lbnQpO1xuXG5cdFx0XHRcdGkxOG5Ub05vZGVzKHBhcmFtcy5lbGVtZW50KTtcblxuXHRcdFx0XHRpZiAoIWlzVW5kKHBhcmFtcy5pbmxpbmUpICYmIGtvLnVud3JhcChwYXJhbXMuaW5saW5lKSkge1xuXHRcdFx0XHRcdHBhcmFtcy5lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUtYmxvY2snKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IENsYXNzT2JqZWN0KHBhcmFtcyk7XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtdGltZW91dFwiKTsiLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzJyk7XG5cbnZhciB3cmFwQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgdmFyIFdyYXBwZXIgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgTmF0aXZlQ29uc3RydWN0b3IpIHtcbiAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGEpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYik7XG4gICAgICB9IHJldHVybiBuZXcgTmF0aXZlQ29uc3RydWN0b3IoYSwgYiwgYyk7XG4gICAgfSByZXR1cm4gTmF0aXZlQ29uc3RydWN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgV3JhcHBlci5wcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBXcmFwcGVyO1xufTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBQUk9UTyA9IG9wdGlvbnMucHJvdG87XG5cbiAgdmFyIG5hdGl2ZVNvdXJjZSA9IEdMT0JBTCA/IGdsb2JhbCA6IFNUQVRJQyA/IGdsb2JhbFtUQVJHRVRdIDogKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG5cbiAgdmFyIHRhcmdldCA9IEdMT0JBTCA/IHBhdGggOiBwYXRoW1RBUkdFVF0gfHwgKHBhdGhbVEFSR0VUXSA9IHt9KTtcbiAgdmFyIHRhcmdldFByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG5cbiAgdmFyIEZPUkNFRCwgVVNFX05BVElWRSwgVklSVFVBTF9QUk9UT1RZUEU7XG4gIHZhciBrZXksIHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSwgbmF0aXZlUHJvcGVydHksIHJlc3VsdFByb3BlcnR5LCBkZXNjcmlwdG9yO1xuXG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgVVNFX05BVElWRSA9ICFGT1JDRUQgJiYgbmF0aXZlU291cmNlICYmIGhhcyhuYXRpdmVTb3VyY2UsIGtleSk7XG5cbiAgICB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuXG4gICAgaWYgKFVTRV9OQVRJVkUpIGlmIChvcHRpb25zLm5vVGFyZ2V0R2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5hdGl2ZVNvdXJjZSwga2V5KTtcbiAgICAgIG5hdGl2ZVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSBuYXRpdmVQcm9wZXJ0eSA9IG5hdGl2ZVNvdXJjZVtrZXldO1xuXG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBpbXBsZW1lbnRhdGlvblxuICAgIHNvdXJjZVByb3BlcnR5ID0gKFVTRV9OQVRJVkUgJiYgbmF0aXZlUHJvcGVydHkpID8gbmF0aXZlUHJvcGVydHkgOiBzb3VyY2Vba2V5XTtcblxuICAgIGlmIChVU0VfTkFUSVZFICYmIHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSA9PT0gdHlwZW9mIHNvdXJjZVByb3BlcnR5KSBjb250aW51ZTtcblxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgaWYgKG9wdGlvbnMuYmluZCAmJiBVU0VfTkFUSVZFKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoc291cmNlUHJvcGVydHksIGdsb2JhbCk7XG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5ncyBpbiB0aGlzIHZlcnNpb25cbiAgICBlbHNlIGlmIChvcHRpb25zLndyYXAgJiYgVVNFX05BVElWRSkgcmVzdWx0UHJvcGVydHkgPSB3cmFwQ29uc3RydWN0b3Ioc291cmNlUHJvcGVydHkpO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIGVsc2UgaWYgKFBST1RPICYmIHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSAnZnVuY3Rpb24nKSByZXN1bHRQcm9wZXJ0eSA9IGJpbmQoRnVuY3Rpb24uY2FsbCwgc291cmNlUHJvcGVydHkpO1xuICAgIC8vIGRlZmF1bHQgY2FzZVxuICAgIGVsc2UgcmVzdWx0UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eTtcblxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8IChzb3VyY2VQcm9wZXJ0eSAmJiBzb3VyY2VQcm9wZXJ0eS5zaGFtKSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHRQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0YXJnZXRba2V5XSA9IHJlc3VsdFByb3BlcnR5O1xuXG4gICAgaWYgKFBST1RPKSB7XG4gICAgICBWSVJUVUFMX1BST1RPVFlQRSA9IFRBUkdFVCArICdQcm90b3R5cGUnO1xuICAgICAgaWYgKCFoYXMocGF0aCwgVklSVFVBTF9QUk9UT1RZUEUpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShwYXRoLCBWSVJUVUFMX1BST1RPVFlQRSwge30pO1xuICAgICAgfVxuICAgICAgLy8gZXhwb3J0IHZpcnR1YWwgcHJvdG90eXBlIG1ldGhvZHNcbiAgICAgIHBhdGhbVklSVFVBTF9QUk9UT1RZUEVdW2tleV0gPSBzb3VyY2VQcm9wZXJ0eTtcbiAgICAgIC8vIGV4cG9ydCByZWFsIHByb3RvdHlwZSBtZXRob2RzXG4gICAgICBpZiAob3B0aW9ucy5yZWFsICYmIHRhcmdldFByb3RvdHlwZSAmJiAhdGFyZ2V0UHJvdG90eXBlW2tleV0pIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRhcmdldFByb3RvdHlwZSwga2V5LCBzb3VyY2VQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgeyBpc0Z1bmMsIGlzQXJyYXksIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuY29uc3QgU0lNUExFX0hPT0tTID0ge30sXG5cdFVTRVJfVklFV19NT0RFTFNfSE9PS1MgPSBbXSxcblx0QURNSU5fVklFV19NT0RFTFNfSE9PS1MgPSBbXTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEhvb2sobmFtZSwgY2FsbGJhY2spIHtcblx0aWYgKGlzRnVuYyhjYWxsYmFjaykpIHtcblx0XHRpZiAoIWlzQXJyYXkoU0lNUExFX0hPT0tTW25hbWVdKSkge1xuXHRcdFx0U0lNUExFX0hPT0tTW25hbWVdID0gW107XG5cdFx0fVxuXG5cdFx0U0lNUExFX0hPT0tTW25hbWVdLnB1c2goY2FsbGJhY2spO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7QXJyYXk9fSBhcmdzID0gW11cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkhvb2sobmFtZSwgYXJncyA9IFtdKSB7XG5cdGlmIChpc0FycmF5KFNJTVBMRV9IT09LU1tuYW1lXSkpIHtcblx0XHRfLmVhY2goU0lNUExFX0hPT0tTW25hbWVdLCAoY2FsbGJhY2spID0+IHtcblx0XHRcdGNhbGxiYWNrKC4uLmFyZ3MpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHs/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFpblNldHRpbmdzR2V0KG5hbWUpIHtcblx0cmV0dXJuIFNldHRpbmdzLnNldHRpbmdzR2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uXG4gKiBAcGFyYW0ge09iamVjdD19IHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7P251bWJlcj19IHRpbWVvdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW90ZVJlcXVlc3QoY2FsbGJhY2ssIGFjdGlvbiwgcGFyYW1ldGVycywgdGltZW91dCkge1xuXHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXykge1xuXHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ucmVtb3RlKCkuZGVmYXVsdFJlcXVlc3QoY2FsbGJhY2ssICdQbHVnaW4nICsgYWN0aW9uLCBwYXJhbWV0ZXJzLCB0aW1lb3V0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFNldHRpbmdzVmlld01vZGVsQ2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbE5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRTZXR0aW5nc1ZpZXdNb2RlbChTZXR0aW5nc1ZpZXdNb2RlbENsYXNzLCB0ZW1wbGF0ZSwgbGFiZWxOYW1lLCByb3V0ZSkge1xuXHRVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTLnB1c2goW1NldHRpbmdzVmlld01vZGVsQ2xhc3MsIHRlbXBsYXRlLCBsYWJlbE5hbWUsIHJvdXRlXSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gU2V0dGluZ3NWaWV3TW9kZWxDbGFzc1xuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsTmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcm91dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNldHRpbmdzVmlld01vZGVsRm9yQWRtaW4oU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGUpIHtcblx0QURNSU5fVklFV19NT0RFTFNfSE9PS1MucHVzaChbU2V0dGluZ3NWaWV3TW9kZWxDbGFzcywgdGVtcGxhdGUsIGxhYmVsTmFtZSwgcm91dGVdKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFkbWluXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzKGFkbWluKSB7XG5cdGNvbnN0IEtub2luID0gcmVxdWlyZSgnS25vaW4vS25vaW4nKTtcblx0Xy5lYWNoKGFkbWluID8gQURNSU5fVklFV19NT0RFTFNfSE9PS1MgOiBVU0VSX1ZJRVdfTU9ERUxTX0hPT0tTLCAodmlldykgPT4ge1xuXHRcdEtub2luLmFkZFNldHRpbmdzVmlld01vZGVsKHZpZXdbMF0sIHZpZXdbMV0sIHZpZXdbMl0sIHZpZXdbM10pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luU2VjdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHs/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dGluZ3NHZXQocGx1Z2luU2VjdGlvbiwgbmFtZSkge1xuXHRsZXQgcGx1Z2lucyA9IFNldHRpbmdzLnNldHRpbmdzR2V0KCdQbHVnaW5zJyk7XG5cdHBsdWdpbnMgPSBwbHVnaW5zICYmICFpc1VuZChwbHVnaW5zW3BsdWdpblNlY3Rpb25dKSA/IHBsdWdpbnNbcGx1Z2luU2VjdGlvbl0gOiBudWxsO1xuXHRyZXR1cm4gcGx1Z2lucyA/IChpc1VuZChwbHVnaW5zW25hbWVdKSA/IG51bGwgOiBwbHVnaW5zW25hbWVdKSA6IG51bGw7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhcyhXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpKSB7XG4gICAgaWYgKE5BVElWRV9TWU1CT0wgJiYgaGFzKFN5bWJvbCwgbmFtZSkpIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IFN5bWJvbFtuYW1lXTtcbiAgICBlbHNlIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXMoV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSB8fCAhKE5BVElWRV9TWU1CT0wgfHwgdHlwZW9mIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9PSAnc3RyaW5nJykpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXMoU3ltYm9sLCBuYW1lKSkge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gICAgfVxuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuY2xhc3MgQ29yZUFkbWluU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmNvcmVSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVDaGFubmVsID0ga28ub2JzZXJ2YWJsZSgnc3RhYmxlJyk7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IGtvLm9ic2VydmFibGUoJ3N0YWJsZScpO1xuXHRcdHRoaXMuY29yZVVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy5jb3JlQWNjZXNzID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLmNvcmVXYXJuaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5jb3JlQ2hlY2tpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyB0aHJvdHRsZTogMTAwIH0pO1xuXHRcdHRoaXMuY29yZVVwZGF0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5jb3JlUmVtb3RlVmVyc2lvbiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmNvcmVWZXJzaW9uQ29tcGFyZSA9IGtvLm9ic2VydmFibGUoLTIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlQWRtaW5TdG9yZSgpO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZyA9IEZ1bmN0aW9uUHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyBGdW5jdGlvbiBpbnN0YW5jZXMgYC5uYW1lYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi1pbnN0YW5jZXMtbmFtZVxuaWYgKERFU0NSSVBUT1JTICYmICEoTkFNRSBpbiBGdW5jdGlvblByb3RvdHlwZSkpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZy5jYWxsKHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9zZXQtaW50ZXJ2YWxcIik7IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXQpICsgJyBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChSRVBMQUNFLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUsIHJlYXNvbikge1xuICB2YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSByZWFzb24uUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkU7XG4gIHZhciBSRVBMQUNFX0tFRVBTXyQwID0gcmVhc29uLlJFUExBQ0VfS0VFUFNfJDA7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiByZXBsYWNlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgaWYgKFxuICAgICAgICAoIVJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFICYmIFJFUExBQ0VfS0VFUFNfJDApIHx8XG4gICAgICAgICh0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnc3RyaW5nJyAmJiByZXBsYWNlVmFsdWUuaW5kZXhPZihVTlNBRkVfU1VCU1RJVFVURSkgPT09IC0xKVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuXG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxubGV0IF9tb21lbnQgPSBudWxsO1xubGV0IF9tb21lbnROb3cgPSAwO1xuXG5jb25zdCB1cGRhdGVNb21lbnROb3cgPSBfLmRlYm91bmNlKFxuXHQoKSA9PiB7XG5cdFx0X21vbWVudCA9IG1vbWVudCgpO1xuXHR9LFxuXHQ1MDAsXG5cdHRydWVcbik7XG5cbmNvbnN0IHVwZGF0ZU1vbWVudE5vd1VuaXggPSBfLmRlYm91bmNlKFxuXHQoKSA9PiB7XG5cdFx0X21vbWVudE5vdyA9IG1vbWVudCgpLnVuaXgoKTtcblx0fSxcblx0NTAwLFxuXHR0cnVlXG4pO1xuXG4vKipcbiAqIEByZXR1cm5zIHttb21lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnROb3coKSB7XG5cdHVwZGF0ZU1vbWVudE5vdygpO1xuXHRyZXR1cm4gX21vbWVudCB8fCBtb21lbnQoKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9tZW50Tm93VW5peCgpIHtcblx0dXBkYXRlTW9tZW50Tm93VW5peCgpO1xuXHRyZXR1cm4gX21vbWVudE5vdyB8fCAwO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBkYXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoU3VidHJhY3RGb3JtYXREYXRlSGVscGVyKGRhdGUpIHtcblx0cmV0dXJuIG1vbWVudE5vdygpXG5cdFx0LmNsb25lKClcblx0XHQuc3VidHJhY3QoZGF0ZSwgJ2RheXMnKVxuXHRcdC5mb3JtYXQoJ1lZWVkuTU0uREQnKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gbVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0Q3VzdG9tU2hvcnREYXRlKG0pIHtcblx0Y29uc3Qgbm93ID0gbW9tZW50Tm93KCk7XG5cdGlmIChtICYmIG5vdykge1xuXHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0Y2FzZSA0ID49IG5vdy5kaWZmKG0sICdob3VycycpOlxuXHRcdFx0XHRyZXR1cm4gbS5mcm9tTm93KCk7XG5cdFx0XHRjYXNlIG5vdy5mb3JtYXQoJ0wnKSA9PT0gbS5mb3JtYXQoJ0wnKTpcblx0XHRcdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9UT0RBWV9BVCcsIHtcblx0XHRcdFx0XHRUSU1FOiBtLmZvcm1hdCgnTFQnKVxuXHRcdFx0XHR9KTtcblx0XHRcdGNhc2Ugbm93XG5cdFx0XHRcdC5jbG9uZSgpXG5cdFx0XHRcdC5zdWJ0cmFjdCgxLCAnZGF5cycpXG5cdFx0XHRcdC5mb3JtYXQoJ0wnKSA9PT0gbS5mb3JtYXQoJ0wnKTpcblx0XHRcdFx0cmV0dXJuIGkxOG4oJ01FU1NBR0VfTElTVC9ZRVNURVJEQVlfQVQnLCB7XG5cdFx0XHRcdFx0VElNRTogbS5mb3JtYXQoJ0xUJylcblx0XHRcdFx0fSk7XG5cdFx0XHRjYXNlIG5vdy55ZWFyKCkgPT09IG0ueWVhcigpOlxuXHRcdFx0XHRyZXR1cm4gbS5mb3JtYXQoJ0QgTU1NLicpO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtID8gbS5mb3JtYXQoJ0xMJykgOiAnJztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZVN0YW1wSW5VVENcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRTdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQodGltZVN0YW1wSW5VVEMsIGZvcm1hdFN0cikge1xuXHRsZXQgbSA9IG51bGwsXG5cdFx0cmVzdWx0ID0gJyc7XG5cblx0Y29uc3Qgbm93ID0gbW9tZW50Tm93VW5peCgpO1xuXG5cdHRpbWVTdGFtcEluVVRDID0gMCA8IHRpbWVTdGFtcEluVVRDID8gdGltZVN0YW1wSW5VVEMgOiAwID09PSB0aW1lU3RhbXBJblVUQyA/IG5vdyA6IDA7XG5cdHRpbWVTdGFtcEluVVRDID0gbm93IDwgdGltZVN0YW1wSW5VVEMgPyBub3cgOiB0aW1lU3RhbXBJblVUQztcblxuXHRtID0gMCA8IHRpbWVTdGFtcEluVVRDID8gbW9tZW50LnVuaXgodGltZVN0YW1wSW5VVEMpIDogbnVsbDtcblxuXHRpZiAobSAmJiAxOTcwID09PSBtLnllYXIoKSkge1xuXHRcdG0gPSBudWxsO1xuXHR9XG5cblx0aWYgKG0pIHtcblx0XHRzd2l0Y2ggKGZvcm1hdFN0cikge1xuXHRcdFx0Y2FzZSAnRlJPTU5PVyc6XG5cdFx0XHRcdHJlc3VsdCA9IG0uZnJvbU5vdygpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ1NIT1JUJzpcblx0XHRcdFx0cmVzdWx0ID0gZm9ybWF0Q3VzdG9tU2hvcnREYXRlKG0pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ0ZVTEwnOlxuXHRcdFx0XHRyZXN1bHQgPSBtLmZvcm1hdCgnTExMJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmVzdWx0ID0gbS5mb3JtYXQoZm9ybWF0U3RyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb21lbnRUb05vZGUoZWxlbWVudCkge1xuXHRsZXQga2V5ID0gJycsXG5cdFx0dGltZSA9IDA7XG5cdGNvbnN0ICRlbCA9ICQoZWxlbWVudCk7XG5cblx0dGltZSA9ICRlbC5kYXRhKCdtb21lbnQtdGltZScpO1xuXHRpZiAodGltZSkge1xuXHRcdGtleSA9ICRlbC5kYXRhKCdtb21lbnQtZm9ybWF0Jyk7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0JGVsLnRleHQoZm9ybWF0KHRpbWUsIGtleSkpO1xuXHRcdH1cblxuXHRcdGtleSA9ICRlbC5kYXRhKCdtb21lbnQtZm9ybWF0LXRpdGxlJyk7XG5cdFx0aWYgKGtleSkge1xuXHRcdFx0JGVsLmF0dHIoJ3RpdGxlJywgZm9ybWF0KHRpbWUsIGtleSkpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkKCkge1xuXHRfLmRlZmVyKCgpID0+IHtcblx0XHQkKCcubW9tZW50Jywgd2luZG93LmRvY3VtZW50KS5lYWNoKChpbmRleCwgaXRlbSkgPT4ge1xuXHRcdFx0bW9tZW50VG9Ob2RlKGl0ZW0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9zdGFibGUvcHJvbWlzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5oYXNoZXI7IiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xuXG4vKlxuICBvcHRpb25zLnRhcmdldCAgICAgIC0gbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdFxuICBvcHRpb25zLmdsb2JhbCAgICAgIC0gdGFyZ2V0IGlzIHRoZSBnbG9iYWwgb2JqZWN0XG4gIG9wdGlvbnMuc3RhdCAgICAgICAgLSBleHBvcnQgYXMgc3RhdGljIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucHJvdG8gICAgICAgLSBleHBvcnQgYXMgcHJvdG90eXBlIG1ldGhvZHMgb2YgdGFyZ2V0XG4gIG9wdGlvbnMucmVhbCAgICAgICAgLSByZWFsIHByb3RvdHlwZSBtZXRob2QgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLmZvcmNlZCAgICAgIC0gZXhwb3J0IGV2ZW4gaWYgdGhlIG5hdGl2ZSBmZWF0dXJlIGlzIGF2YWlsYWJsZVxuICBvcHRpb25zLmJpbmQgICAgICAgIC0gYmluZCBtZXRob2RzIHRvIHRoZSB0YXJnZXQsIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy53cmFwICAgICAgICAtIHdyYXAgY29uc3RydWN0b3JzIHRvIHByZXZlbnRpbmcgZ2xvYmFsIHBvbGx1dGlvbiwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLnVuc2FmZSAgICAgIC0gdXNlIHRoZSBzaW1wbGUgYXNzaWdubWVudCBvZiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGRlbGV0ZSArIGRlZmluZVByb3BlcnR5XG4gIG9wdGlvbnMuc2hhbSAgICAgICAgLSBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gIG9wdGlvbnMuZW51bWVyYWJsZSAgLSBleHBvcnQgYXMgZW51bWVyYWJsZSBwcm9wZXJ0eVxuICBvcHRpb25zLm5vVGFyZ2V0R2V0IC0gcHJldmVudCBjYWxsaW5nIGEgZ2V0dGVyIG9uIHRhcmdldFxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBzZXRHbG9iYWwoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiLyoqXG4gKiBAcmV0dXJucyB7QXBwQWRtaW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHAoKSB7XG5cdHJldHVybiByZXF1aXJlKCdBcHAvQWRtaW4nKS5kZWZhdWx0O1xufVxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHVuc2FmZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMudW5zYWZlIDogZmFsc2U7XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zID8gISFvcHRpb25zLmVudW1lcmFibGUgOiBmYWxzZTtcbiAgdmFyIG5vVGFyZ2V0R2V0ID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5ub1RhcmdldEdldCA6IGZhbHNlO1xuICB2YXIgc3RhdGU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmICh0eXBlb2Yga2V5ID09ICdzdHJpbmcnICYmICFoYXModmFsdWUsICduYW1lJykpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBrZXkpO1xuICAgIH1cbiAgICBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgICBpZiAoIXN0YXRlLnNvdXJjZSkge1xuICAgICAgc3RhdGUuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogJycpO1xuICAgIH1cbiAgfVxuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBzZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCF1bnNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICB9IGVsc2UgaWYgKCFub1RhcmdldEdldCAmJiBPW2tleV0pIHtcbiAgICBzaW1wbGUgPSB0cnVlO1xuICB9XG4gIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhpdCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1IpIHtcbiAgcmV0dXJuIHBhdGhbQ09OU1RSVUNUT1IgKyAnUHJvdG90eXBlJ107XG59O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIExhbmd1YWdlU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmxhbmd1YWdlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5sYW5ndWFnZXNBZG1pbiA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKCcnKVxuXHRcdFx0LmV4dGVuZCh7IGxpbWl0ZWRMaXN0OiB0aGlzLmxhbmd1YWdlcyB9KVxuXHRcdFx0LmV4dGVuZCh7IHJldmVyc2libGU6IHRydWUgfSk7XG5cblx0XHR0aGlzLmxhbmd1YWdlQWRtaW4gPSBrb1xuXHRcdFx0Lm9ic2VydmFibGUoJycpXG5cdFx0XHQuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMubGFuZ3VhZ2VzQWRtaW4gfSlcblx0XHRcdC5leHRlbmQoeyByZXZlcnNpYmxlOiB0cnVlIH0pO1xuXG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2UgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnVzZXJMYW5ndWFnZUFkbWluID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRwb3B1bGF0ZSgpIHtcblx0XHRjb25zdCBhTGFuZ3VhZ2VzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xhbmd1YWdlcycpLFxuXHRcdFx0YUxhbmd1YWdlc0FkbWluID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ2xhbmd1YWdlc0FkbWluJyk7XG5cblx0XHR0aGlzLmxhbmd1YWdlcyhpc0FycmF5KGFMYW5ndWFnZXMpID8gYUxhbmd1YWdlcyA6IFtdKTtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluKGlzQXJyYXkoYUxhbmd1YWdlc0FkbWluKSA/IGFMYW5ndWFnZXNBZG1pbiA6IFtdKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2UoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0xhbmd1YWdlJykpO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbihTZXR0aW5ncy5zZXR0aW5nc0dldCgnTGFuZ3VhZ2VBZG1pbicpKTtcblxuXHRcdHRoaXMudXNlckxhbmd1YWdlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdVc2VyTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy51c2VyTGFuZ3VhZ2VBZG1pbihTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckxhbmd1YWdlQWRtaW4nKSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExhbmd1YWdlU3RvcmUoKTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKHZhcmlhYmxlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFyaWFibGUgPT0gJ2Z1bmN0aW9uJyA/IHZhcmlhYmxlIDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKHBhdGhbbmFtZXNwYWNlXSkgfHwgYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKVxuICAgIDogcGF0aFtuYW1lc3BhY2VdICYmIHBhdGhbbmFtZXNwYWNlXVttZXRob2RdIHx8IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUpvaW4gPSBbXS5qb2luO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9IE9iamVjdDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnam9pbicsICcsJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCJpbXBvcnQgd2luZG93IGZyb20gJ3dpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICckJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBTdG9yZSB9IGZyb20gJ1N0b3Jlcy9BYnN0cmFjdEFwcCc7XG5cbmNsYXNzIEFwcEFkbWluU3RvcmUgZXh0ZW5kcyBBYnN0cmFjdEFwcFN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuZGV0ZXJtaW5lVXNlckxhbmd1YWdlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmRhdGFGb2xkZXJBY2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHN1cGVyLnBvcHVsYXRlKCk7XG5cblx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZSghIXNldHRpbmdzR2V0KCdEZXRlcm1pbmVVc2VyTGFuZ3VhZ2UnKSk7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluKCEhc2V0dGluZ3NHZXQoJ0RldGVybWluZVVzZXJEb21haW4nKSk7XG5cblx0XHR0aGlzLndlYWtQYXNzd29yZCghIXNldHRpbmdzR2V0KCdXZWFrUGFzc3dvcmQnKSk7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMoISFzZXR0aW5nc0dldCgnVXNlTG9jYWxQcm94eUZvckV4dGVybmFsSW1hZ2VzJykpO1xuXG5cdFx0aWYgKHNldHRpbmdzR2V0KCdBdXRoJykpIHtcblx0XHRcdCQuZ2V0KCcuL2RhdGEvVkVSU0lPTj8nICsgd2luZG93Lk1hdGgucmFuZG9tKCkpLnRoZW4oKCkgPT4gdGhpcy5kYXRhRm9sZGVyQWNjZXNzKHRydWUpKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEFwcEFkbWluU3RvcmUoKTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFyaWFibGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YXJpYWJsZSA9PSAnZnVuY3Rpb24nID8gdmFyaWFibGUgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24ocGF0aFtuYW1lc3BhY2VdKSB8fCBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pXG4gICAgOiBwYXRoW25hbWVzcGFjZV0gJiYgcGF0aFtuYW1lc3BhY2VdW21ldGhvZF0gfHwgZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJ2YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBUb0ludGVnZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc05hTihhcmd1bWVudCA9ICthcmd1bWVudCkgPyAwIDogKGFyZ3VtZW50ID4gMCA/IGZsb29yIDogY2VpbCkoYXJndW1lbnQpO1xufTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xuXG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gbmF0aXZlRGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGFkZHJlc3NwYXJzZXIgZnJvbSAnZW1haWxqcy1hZGRyZXNzcGFyc2VyJztcbmltcG9ydCB7IHRyaW0sIGVuY29kZUh0bWwsIGlzTm9uRW1wdHlBcnJheSB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmNsYXNzIEVtYWlsTW9kZWwge1xuXHRlbWFpbCA9ICcnO1xuXHRuYW1lID0gJyc7XG5cdGRraW1TdGF0dXMgPSAnJztcblx0ZGtpbVZhbHVlID0gJyc7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gZW1haWwgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IG5hbWUgPSAnJ1xuXHQgKiBAcGFyYW0ge3N0cmluZz19IGRraW1TdGF0dXMgPSAnbm9uZSdcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBka2ltVmFsdWUgPSAnJ1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZW1haWwgPSAnJywgbmFtZSA9ICcnLCBka2ltU3RhdHVzID0gJ25vbmUnLCBka2ltVmFsdWUgPSAnJykge1xuXHRcdHRoaXMuZW1haWwgPSBlbWFpbDtcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xuXHRcdHRoaXMuZGtpbVN0YXR1cyA9IGRraW1TdGF0dXM7XG5cdFx0dGhpcy5ka2ltVmFsdWUgPSBka2ltVmFsdWU7XG5cblx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHtBamF4SnNvbkVtYWlsfSBqc29uXG5cdCAqIEByZXR1cm5zIHs/RW1haWxNb2RlbH1cblx0ICovXG5cdHN0YXRpYyBuZXdJbnN0YW5jZUZyb21Kc29uKGpzb24pIHtcblx0XHRjb25zdCBlbWFpbCA9IG5ldyBFbWFpbE1vZGVsKCk7XG5cdFx0cmV0dXJuIGVtYWlsLmluaXRCeUpzb24oanNvbikgPyBlbWFpbCA6IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmVtYWlsID0gJyc7XG5cdFx0dGhpcy5uYW1lID0gJyc7XG5cblx0XHR0aGlzLmRraW1TdGF0dXMgPSAnbm9uZSc7XG5cdFx0dGhpcy5ka2ltVmFsdWUgPSAnJztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHZhbGlkYXRlKCkge1xuXHRcdHJldHVybiAnJyAhPT0gdGhpcy5uYW1lIHx8ICcnICE9PSB0aGlzLmVtYWlsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gd2l0aG91dE5hbWUgPSBmYWxzZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0aGFzaCh3aXRob3V0TmFtZSA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuICcjJyArICh3aXRob3V0TmFtZSA/ICcnIDogdGhpcy5uYW1lKSArICcjJyArIHRoaXMuZW1haWwgKyAnIyc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqL1xuXHRjbGVhckR1cGxpY2F0ZU5hbWUoKSB7XG5cdFx0aWYgKHRoaXMubmFtZSA9PT0gdGhpcy5lbWFpbCkge1xuXHRcdFx0dGhpcy5uYW1lID0gJyc7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHNlYXJjaChxdWVyeSkge1xuXHRcdHJldHVybiAtMSA8ICh0aGlzLm5hbWUgKyAnICcgKyB0aGlzLmVtYWlsKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YocXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtBamF4SnNvbkVtYWlsfSBvSnNvbkVtYWlsXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0aW5pdEJ5SnNvbihqc29uKSB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdGlmIChqc29uICYmICdPYmplY3QvRW1haWwnID09PSBqc29uWydAT2JqZWN0J10pIHtcblx0XHRcdHRoaXMubmFtZSA9IHRyaW0oanNvbi5OYW1lKTtcblx0XHRcdHRoaXMuZW1haWwgPSB0cmltKGpzb24uRW1haWwpO1xuXHRcdFx0dGhpcy5ka2ltU3RhdHVzID0gdHJpbShqc29uLkRraW1TdGF0dXMgfHwgJycpO1xuXHRcdFx0dGhpcy5ka2ltVmFsdWUgPSB0cmltKGpzb24uRGtpbVZhbHVlIHx8ICcnKTtcblxuXHRcdFx0cmVzdWx0ID0gJycgIT09IHRoaXMuZW1haWw7XG5cdFx0XHR0aGlzLmNsZWFyRHVwbGljYXRlTmFtZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFufSBmcmllbmRseVZpZXdcblx0ICogQHBhcmFtIHtib29sZWFuPX0gd3JhcFdpdGhMaW5rID0gZmFsc2Vcblx0ICogQHBhcmFtIHtib29sZWFuPX0gdXNlRW5jb2RlSHRtbCA9IGZhbHNlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHR0b0xpbmUoZnJpZW5kbHlWaWV3LCB3cmFwV2l0aExpbmsgPSBmYWxzZSwgdXNlRW5jb2RlSHRtbCA9IGZhbHNlKSB7XG5cdFx0bGV0IHJlc3VsdCA9ICcnO1xuXHRcdGlmICgnJyAhPT0gdGhpcy5lbWFpbCkge1xuXHRcdFx0aWYgKGZyaWVuZGx5VmlldyAmJiAnJyAhPT0gdGhpcy5uYW1lKSB7XG5cdFx0XHRcdHJlc3VsdCA9IHdyYXBXaXRoTGlua1xuXHRcdFx0XHRcdD8gJzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKHRoaXMuZW1haWwpICtcblx0XHRcdFx0XHQgICc/dG89JyArXG5cdFx0XHRcdFx0ICBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0ICAnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdCAgZW5jb2RlSHRtbCh0aGlzLm5hbWUpICtcblx0XHRcdFx0XHQgICc8L2E+J1xuXHRcdFx0XHRcdDogdXNlRW5jb2RlSHRtbFxuXHRcdFx0XHRcdD8gZW5jb2RlSHRtbCh0aGlzLm5hbWUpXG5cdFx0XHRcdFx0OiB0aGlzLm5hbWU7XG5cdFx0XHRcdC8vIHJlc3VsdCA9IHdyYXBXaXRoTGluayA/ICc8YSBocmVmPVwibWFpbHRvOicgKyBlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdC8vIFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICsgZW5jb2RlSHRtbCh0aGlzLm5hbWUpICsgJzwvYT4nIDogKHVzZUVuY29kZUh0bWwgPyBlbmNvZGVIdG1sKHRoaXMubmFtZSkgOiB0aGlzLm5hbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0ID0gdGhpcy5lbWFpbDtcblx0XHRcdFx0aWYgKCcnICE9PSB0aGlzLm5hbWUpIHtcblx0XHRcdFx0XHRpZiAod3JhcFdpdGhMaW5rKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcpICtcblx0XHRcdFx0XHRcdFx0JzxhIGhyZWY9XCJtYWlsdG86JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0XHQnP3RvPScgK1xuXHRcdFx0XHRcdFx0XHRlbmNvZGVIdG1sKCdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyB0aGlzLmVtYWlsICsgJz4nKSArXG5cdFx0XHRcdFx0XHRcdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIi0xXCI+JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwocmVzdWx0KSArXG5cdFx0XHRcdFx0XHRcdCc8L2E+JyArXG5cdFx0XHRcdFx0XHRcdGVuY29kZUh0bWwoJz4nKTtcblx0XHRcdFx0XHRcdC8vIHJlc3VsdCA9IGVuY29kZUh0bWwoJ1wiJyArIHRoaXMubmFtZSArICdcIiA8JykgKyAnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdC8vIFx0ZW5jb2RlSHRtbCgnXCInICsgdGhpcy5uYW1lICsgJ1wiIDwnICsgdGhpcy5lbWFpbCArICc+JykgK1xuXHRcdFx0XHRcdFx0Ly8gXHQnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCItMVwiPicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKHJlc3VsdCkgK1xuXHRcdFx0XHRcdFx0Ly8gXHQnPC9hPicgK1xuXHRcdFx0XHRcdFx0Ly8gXHRlbmNvZGVIdG1sKCc+Jyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9ICdcIicgKyB0aGlzLm5hbWUgKyAnXCIgPCcgKyByZXN1bHQgKyAnPic7XG5cdFx0XHRcdFx0XHRpZiAodXNlRW5jb2RlSHRtbCkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHQgPSBlbmNvZGVIdG1sKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKHdyYXBXaXRoTGluaykge1xuXHRcdFx0XHRcdHJlc3VsdCA9XG5cdFx0XHRcdFx0XHQnPGEgaHJlZj1cIm1haWx0bzonICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0J1wiIHRhcmdldD1cIl9ibGFua1wiIHRhYmluZGV4PVwiLTFcIj4nICtcblx0XHRcdFx0XHRcdGVuY29kZUh0bWwodGhpcy5lbWFpbCkgK1xuXHRcdFx0XHRcdFx0JzwvYT4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzcGxpdEVtYWlsTGluZShsaW5lKSB7XG5cdFx0Y29uc3QgcGFyc2VkUmVzdWx0ID0gYWRkcmVzc3BhcnNlcihsaW5lKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHBhcnNlZFJlc3VsdCkpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdFx0bGV0IGV4aXN0cyA9IGZhbHNlO1xuXHRcdFx0cGFyc2VkUmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0Y29uc3QgYWRkcmVzcyA9IGl0ZW0uYWRkcmVzc1xuXHRcdFx0XHRcdD8gbmV3IEVtYWlsTW9kZWwoaXRlbS5hZGRyZXNzLnJlcGxhY2UoL15bPF0rKC4qKVs+XSskL2csICckMScpLCBpdGVtLm5hbWUgfHwgJycpXG5cdFx0XHRcdFx0OiBudWxsO1xuXG5cdFx0XHRcdGlmIChhZGRyZXNzICYmIGFkZHJlc3MuZW1haWwpIHtcblx0XHRcdFx0XHRleGlzdHMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goYWRkcmVzcyA/IGFkZHJlc3MudG9MaW5lKGZhbHNlKSA6IGl0ZW0ubmFtZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIGV4aXN0cyA/IHJlc3VsdCA6IG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRzdGF0aWMgcGFyc2VFbWFpbExpbmUobGluZSkge1xuXHRcdGNvbnN0IHBhcnNlZFJlc3VsdCA9IGFkZHJlc3NwYXJzZXIobGluZSk7XG5cdFx0aWYgKGlzTm9uRW1wdHlBcnJheShwYXJzZWRSZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gXy5jb21wYWN0KFxuXHRcdFx0XHRfLm1hcChwYXJzZWRSZXN1bHQsIChpdGVtKSA9PlxuXHRcdFx0XHRcdGl0ZW0uYWRkcmVzcyA/IG5ldyBFbWFpbE1vZGVsKGl0ZW0uYWRkcmVzcy5yZXBsYWNlKC9eWzxdKyguKilbPl0rJC9nLCAnJDEnKSwgaXRlbS5uYW1lIHx8ICcnKSA6IG51bGxcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsQWRkcmVzc1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHBhcnNlKGVtYWlsQWRkcmVzcykge1xuXHRcdGVtYWlsQWRkcmVzcyA9IHRyaW0oZW1haWxBZGRyZXNzKTtcblx0XHRpZiAoJycgPT09IGVtYWlsQWRkcmVzcykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdCA9IGFkZHJlc3NwYXJzZXIoZW1haWxBZGRyZXNzKTtcblx0XHRpZiAoaXNOb25FbXB0eUFycmF5KHJlc3VsdCkgJiYgcmVzdWx0WzBdKSB7XG5cdFx0XHR0aGlzLm5hbWUgPSByZXN1bHRbMF0ubmFtZSB8fCAnJztcblx0XHRcdHRoaXMuZW1haWwgPSByZXN1bHRbMF0uYWRkcmVzcyB8fCAnJztcblx0XHRcdHRoaXMuY2xlYXJEdXBsaWNhdGVOYW1lKCk7XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgeyBFbWFpbE1vZGVsLCBFbWFpbE1vZGVsIGFzIGRlZmF1bHQgfTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgcmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzVW5kLCB0cmltLCBwSW50IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IFNhdmVTZXR0aW5nc1N0ZXAgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBBYnN0cmFjdElucHV0IGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWUgfHwgJyc7XG5cdFx0dGhpcy5zaXplID0gcGFyYW1zLnNpemUgfHwgMDtcblx0XHR0aGlzLmxhYmVsID0gcGFyYW1zLmxhYmVsIHx8ICcnO1xuXHRcdHRoaXMucHJlTGFiZWwgPSBwYXJhbXMucHJlTGFiZWwgfHwgJyc7XG5cdFx0dGhpcy5lbmFibGUgPSBpc1VuZChwYXJhbXMuZW5hYmxlKSA/IHRydWUgOiBwYXJhbXMuZW5hYmxlO1xuXHRcdHRoaXMudHJpZ2dlciA9IHBhcmFtcy50cmlnZ2VyICYmIHBhcmFtcy50cmlnZ2VyLnN1YnNjcmliZSA/IHBhcmFtcy50cmlnZ2VyIDogbnVsbDtcblx0XHR0aGlzLnBsYWNlaG9sZGVyID0gcGFyYW1zLnBsYWNlaG9sZGVyIHx8ICcnO1xuXG5cdFx0dGhpcy5sYWJlbGVkID0gIWlzVW5kKHBhcmFtcy5sYWJlbCk7XG5cdFx0dGhpcy5wcmVMYWJlbGVkID0gIWlzVW5kKHBhcmFtcy5wcmVMYWJlbCk7XG5cdFx0dGhpcy50cmlnZ2VyZWQgPSAhaXNVbmQocGFyYW1zLnRyaWdnZXIpICYmICEhdGhpcy50cmlnZ2VyO1xuXG5cdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuY2xhc3NOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgc2l6ZSA9IGtvLnVud3JhcCh0aGlzLnNpemUpLFxuXHRcdFx0XHRzdWZmaXhWYWx1ZSA9IHRoaXMudHJpZ2dlciA/ICcgJyArIHRyaW0oJ3NldHRpbmdzLXNhdmVkLXRyaWdnZXItaW5wdXQgJyArIHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCkpIDogJyc7XG5cdFx0XHRyZXR1cm4gKDAgPCBzaXplID8gJ3NwYW4nICsgc2l6ZSA6ICcnKSArIHN1ZmZpeFZhbHVlO1xuXHRcdH0pO1xuXG5cdFx0aWYgKCFpc1VuZChwYXJhbXMud2lkdGgpICYmIHBhcmFtcy5lbGVtZW50KSB7XG5cdFx0XHRwYXJhbXMuZWxlbWVudC5maW5kKCdpbnB1dCxzZWxlY3QsdGV4dGFyZWEnKS5jc3MoJ3dpZHRoJywgcGFyYW1zLndpZHRoKTtcblx0XHR9XG5cblx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaCh0aGlzLmNsYXNzTmFtZSk7XG5cblx0XHRpZiAodGhpcy50cmlnZ2VyKSB7XG5cdFx0XHR0aGlzLnNldFRyaWdnZXJTdGF0ZSh0aGlzLnRyaWdnZXIoKSk7XG5cblx0XHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMudHJpZ2dlci5zdWJzY3JpYmUodGhpcy5zZXRUcmlnZ2VyU3RhdGUsIHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRzZXRUcmlnZ2VyU3RhdGUodmFsdWUpIHtcblx0XHRzd2l0Y2ggKHBJbnQodmFsdWUpKSB7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5jbGFzc0ZvclRyaWdnZXIoJ3N1Y2Nlc3MnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQ6XG5cdFx0XHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCdlcnJvcicpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRoaXMuY2xhc3NGb3JUcmlnZ2VyKCcnKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFic3RyYWN0SW5wdXQsIEFic3RyYWN0SW5wdXQgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IENhcGEgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIENhcGFBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5hZGRpdGlvbmFsQWNjb3VudHMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmlkZW50aXRpZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmdyYXZhdGFyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hdHRhY2htZW50VGh1bWJuYWlscyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmUgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmZpbHRlcnMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdFx0dGhpcy51c2VyQmFja2dyb3VuZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMub3BlblBHUCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aEZvcmNlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZW1wbGF0ZXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWRkaXRpb25hbEFjY291bnRzKFNldHRpbmdzLmNhcGEoQ2FwYS5BZGRpdGlvbmFsQWNjb3VudHMpKTtcblx0XHR0aGlzLmlkZW50aXRpZXMoU2V0dGluZ3MuY2FwYShDYXBhLklkZW50aXRpZXMpKTtcblx0XHR0aGlzLmdyYXZhdGFyKFNldHRpbmdzLmNhcGEoQ2FwYS5HcmF2YXRhcikpO1xuXHRcdHRoaXMuYXR0YWNobWVudFRodW1ibmFpbHMoU2V0dGluZ3MuY2FwYShDYXBhLkF0dGFjaG1lbnRUaHVtYm5haWxzKSk7XG5cdFx0dGhpcy5zaWV2ZShTZXR0aW5ncy5jYXBhKENhcGEuU2lldmUpKTtcblx0XHR0aGlzLmZpbHRlcnMoU2V0dGluZ3MuY2FwYShDYXBhLkZpbHRlcnMpKTtcblx0XHR0aGlzLnRoZW1lcyhTZXR0aW5ncy5jYXBhKENhcGEuVGhlbWVzKSk7XG5cdFx0dGhpcy51c2VyQmFja2dyb3VuZChTZXR0aW5ncy5jYXBhKENhcGEuVXNlckJhY2tncm91bmQpKTtcblx0XHR0aGlzLm9wZW5QR1AoU2V0dGluZ3MuY2FwYShDYXBhLk9wZW5QR1ApKTtcblx0XHR0aGlzLnR3b0ZhY3RvckF1dGgoU2V0dGluZ3MuY2FwYShDYXBhLlR3b0ZhY3RvcikpO1xuXHRcdHRoaXMudHdvRmFjdG9yQXV0aEZvcmNlKFNldHRpbmdzLmNhcGEoQ2FwYS5Ud29GYWN0b3JGb3JjZSkpO1xuXHRcdHRoaXMudGVtcGxhdGVzKFNldHRpbmdzLmNhcGEoQ2FwYS5UZW1wbGF0ZXMpKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ2FwYUFkbWluU3RvcmUoKTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlcihhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIFBhY2thZ2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wYWNrYWdlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5wYWNrYWdlcy5sb2FkaW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSkuZXh0ZW5kKHsgdGhyb3R0bGU6IDEwMCB9KTtcblxuXHRcdHRoaXMucGFja2FnZXNSZWFsID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnBhY2thZ2VzTWFpblVwZGF0YWJsZSA9IGtvLm9ic2VydmFibGUodHJ1ZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBhY2thZ2VBZG1pblN0b3JlKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsLCBrZXksIHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIm1vZHVsZS5leHBvcnRzID0gd2luZG93Lm1vbWVudDsiLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5wcm9ncmVzc0pzOyIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjEyLjAnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCwgMSArIEFTX0VOVFJJRVMgKyBJTlRFUlJVUFRFRCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCJ2YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnVtZXJhYmxlKSB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgdmFsdWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1mdW5jdGlvbicpO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufTtcblxuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0KTtcbiAgICB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgY2FjaGUgPSB7fTtcblxudmFyIHRocm93ZXIgPSBmdW5jdGlvbiAoaXQpIHsgdGhyb3cgaXQ7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBvcHRpb25zKSB7XG4gIGlmIChoYXMoY2FjaGUsIE1FVEhPRF9OQU1FKSkgcmV0dXJuIGNhY2hlW01FVEhPRF9OQU1FXTtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHZhciBBQ0NFU1NPUlMgPSBoYXMob3B0aW9ucywgJ0FDQ0VTU09SUycpID8gb3B0aW9ucy5BQ0NFU1NPUlMgOiBmYWxzZTtcbiAgdmFyIGFyZ3VtZW50MCA9IGhhcyhvcHRpb25zLCAwKSA/IG9wdGlvbnNbMF0gOiB0aHJvd2VyO1xuICB2YXIgYXJndW1lbnQxID0gaGFzKG9wdGlvbnMsIDEpID8gb3B0aW9uc1sxXSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FjaGVbTUVUSE9EX05BTUVdID0gISFtZXRob2QgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoQUNDRVNTT1JTICYmICFERVNDUklQVE9SUykgcmV0dXJuIHRydWU7XG4gICAgdmFyIE8gPSB7IGxlbmd0aDogLTEgfTtcblxuICAgIGlmIChBQ0NFU1NPUlMpIGRlZmluZVByb3BlcnR5KE8sIDEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiB0aHJvd2VyIH0pO1xuICAgIGVsc2UgT1sxXSA9IDE7XG5cbiAgICBtZXRob2QuY2FsbChPLCBhcmd1bWVudDAsIGFyZ3VtZW50MSk7XG4gIH0pO1xufTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcblxuLy8gbGV0IHJhaW5sb29wQ2FjaGVzID0gd2luZG93LmNhY2hlcyAmJiB3aW5kb3cuY2FjaGVzLm9wZW4gPyB3aW5kb3cuY2FjaGVzIDogbnVsbDtcblxuLyoqXG4gKiBAcGFyYW0ge3NyY30gc3JjXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFzeW5jID0gZmFsc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gamFzc2woc3JjLCBhc3luYyA9IGZhbHNlKSB7XG5cdGlmICghd2luZG93LlByb21pc2UgfHwgIXdpbmRvdy5Qcm9taXNlLmFsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignUHJvbWlzZXMgYXJlIG5vdCBhdmFpbGFibGUgeW91ciBlbnZpcm9ubWVudC4nKTtcblx0fVxuXG5cdGlmICghc3JjKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdzcmMgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0fVxuXG5cdHJldHVybiBuZXcgd2luZG93LlByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG5cblx0XHRlbGVtZW50Lm9ubG9hZCA9ICgpID0+IHtcblx0XHRcdHJlc29sdmUoc3JjKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5vbmVycm9yID0gKCkgPT4ge1xuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihzcmMpKTtcblx0XHR9O1xuXG5cdFx0ZWxlbWVudC5hc3luYyA9IHRydWUgPT09IGFzeW5jO1xuXHRcdGVsZW1lbnQuc3JjID0gc3JjO1xuXG5cdFx0d2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cdH0pIC8qIC50aGVuKChzKSA9PiB7XG5cblx0XHRjb25zdCBmb3VuZCA9IHMgJiYgcmFpbmxvb3BDYWNoZXMgPyBzLm1hdGNoKC9yYWlubG9vcFxcL3ZcXC8oW15cXC9dKylcXC9zdGF0aWNcXC8vKSA6IG51bGw7XG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kWzFdKVxuXHRcdHtcblx0XHRcdHJhaW5sb29wQ2FjaGVzLm9wZW4oJ3JhaW5sb29wLW9mZmxpbmUtJyArIGZvdW5kWzFdKS50aGVuKFxuXHRcdFx0XHQoY2FjaGUpID0+IGNhY2hlLmFkZChzKVxuXHRcdFx0KS5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdHJhaW5sb29wQ2FjaGVzID0gbnVsbDtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiBzO1xuXHR9KSovO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL3N0YWJsZS9pbnN0YW5jZS92YWx1ZXNcIik7IiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0ICogYXMgU2V0dGluZ3MgZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIFRoZW1lU3RvcmUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnRoZW1lcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmROYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50aGVtZUJhY2tncm91bmRIYXNoID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnRoZW1lID0ga28ub2JzZXJ2YWJsZSgnJykuZXh0ZW5kKHsgbGltaXRlZExpc3Q6IHRoaXMudGhlbWVzIH0pO1xuXHR9XG5cblx0cG9wdWxhdGUoKSB7XG5cdFx0Y29uc3QgdGhlbWVzID0gU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ3RoZW1lcycpO1xuXG5cdFx0dGhpcy50aGVtZXMoaXNBcnJheSh0aGVtZXMpID8gdGhlbWVzIDogW10pO1xuXHRcdHRoaXMudGhlbWUoU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1RoZW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kTmFtZShTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmROYW1lJykpO1xuXHRcdHRoaXMudGhlbWVCYWNrZ3JvdW5kSGFzaChTZXR0aW5ncy5zZXR0aW5nc0dldCgnVXNlckJhY2tncm91bmRIYXNoJykpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBUaGVtZVN0b3JlKCk7XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5jbGFzcyBQbHVnaW5BZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wbHVnaW5zID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblx0XHR0aGlzLnBsdWdpbnMubG9hZGluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IHRocm90dGxlOiAxMDAgfSk7XG5cdFx0dGhpcy5wbHVnaW5zLmVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBsdWdpbkFkbWluU3RvcmUoKTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmNsYXNzIExpY2Vuc2VBZG1pblN0b3JlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5saWNlbnNpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2luZ1Byb2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLmxpY2Vuc2VWYWxpZCA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMubGljZW5zZUV4cGlyZWQgPSBrby5vYnNlcnZhYmxlKDApO1xuXHRcdHRoaXMubGljZW5zZUVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmxpY2Vuc2VUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExpY2Vuc2VBZG1pblN0b3JlKCk7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciBzcGxpdCA9ICcnLnNwbGl0O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/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+IHtcblx0XHRcdGNvbnN0IGFuaW0gPSBiTW9iaWxlRGV2aWNlIHx8ICF2YWx1ZTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1hbmltJywgIWFuaW0pLnRvZ2dsZUNsYXNzKCduby1ybC1hbmltJywgYW5pbSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmludGVyZmFjZUFuaW1hdGlvbi52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdHRoaXMucHJlbSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuY29tbXVuaXR5ID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0fVxuXG5cdHBvcHVsYXRlKCkge1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0FsbG93TGFuZ3VhZ2VzT25Mb2dpbicpKTtcblx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncyghIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnKSk7XG5cdFx0dGhpcy5uZXdNb3ZlVG9Gb2xkZXIoISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnTmV3TW92ZVRvRm9sZGVyJykpO1xuXG5cdFx0dGhpcy5pbnRlcmZhY2VBbmltYXRpb24oISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnSW50ZXJmYWNlQW5pbWF0aW9uJykpO1xuXG5cdFx0dGhpcy5wcmVtKCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ1ByZW1UeXBlJykpO1xuXHRcdHRoaXMuY29tbXVuaXR5KCEhU2V0dGluZ3Muc2V0dGluZ3NHZXQoJ0NvbW11bml0eScpKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcFN0b3JlLCBBYnN0cmFjdEFwcFN0b3JlIGFzIGRlZmF1bHQgfTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvcmUtanMtcHVyZS9mZWF0dXJlcy9pbnN0YW5jZS9mb3ItZWFjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvb2JqZWN0L2tleXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL2luc3RhbmNlL3JlZHVjZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2UvcmV2ZXJzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb3JlLWpzLXB1cmUvZmVhdHVyZXMvaW5zdGFuY2Uvc2xpY2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY29yZS1qcy1wdXJlL2ZlYXR1cmVzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7IiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQgJCBmcm9tICckJztcblxuaW1wb3J0IHsgVE9LRU5fRVJST1JfTElNSVQsIEFKQVhfRVJST1JfTElNSVQsIERFRkFVTFRfQUpBWF9USU1FT1VUIH0gZnJvbSAnQ29tbW9uL0NvbnN0cyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGluQXJyYXksIHBJbnQsIHBTdHJpbmcsIGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGRhdGEgYXMgR2xvYmFsc0RhdGEgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBhamF4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IHJ1bkhvb2sgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5jbGFzcyBBYnN0cmFjdEFqYXhSZW1vdGUge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLm9SZXF1ZXN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSZXF1ZXN0QWN0aW9uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzVHlwZVxuXHQgKiBAcGFyYW0gez9BamF4SnNvbkRlZmF1bHRSZXNwb25zZX0gb0RhdGFcblx0ICogQHBhcmFtIHtib29sZWFufSBiQ2FjaGVkXG5cdCAqIEBwYXJhbSB7Kj19IG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHQgKi9cblx0ZGVmYXVsdFJlc3BvbnNlKGZDYWxsYmFjaywgc1JlcXVlc3RBY3Rpb24sIHNUeXBlLCBvRGF0YSwgYkNhY2hlZCwgb1JlcXVlc3RQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgZkNhbGwgPSAoKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gc1R5cGUgJiYgR2xvYmFsc0RhdGEuYlVubG9hZCkge1xuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLlVubG9hZDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmICFvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9EYXRhICYmXG5cdFx0XHRcdFx0LTEgPFxuXHRcdFx0XHRcdFx0aW5BcnJheShvRGF0YS5FcnJvckNvZGUsIFtcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkF1dGhFcnJvcixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY2Vzc0Vycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uQ29ubmVjdGlvbkVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uRG9tYWluTm90QWxsb3dlZCxcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLkFjY291bnROb3RBbGxvd2VkLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uTWFpbFNlcnZlckVycm9yLFxuXHRcdFx0XHRcdFx0XHROb3RpZmljYXRpb24uVW5rbm93bk5vdGlmaWNhdGlvbixcblx0XHRcdFx0XHRcdFx0Tm90aWZpY2F0aW9uLlVua25vd25FcnJvclxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaUFqYXhFcnJvckNvdW50ICs9IDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0RhdGEgJiYgTm90aWZpY2F0aW9uLkludmFsaWRUb2tlbiA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdFx0R2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCArPSAxO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFRPS0VOX0VSUk9SX0xJTUlUIDwgR2xvYmFsc0RhdGEuaVRva2VuRXJyb3JDb3VudCkge1xuXHRcdFx0XHRcdGlmIChHbG9iYWxzRGF0YS5fX0FQUF9fICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQoZmFsc2UsIHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvRGF0YS5DbGVhckF1dGggfHwgb0RhdGEuTG9nb3V0IHx8IEFKQVhfRVJST1JfTElNSVQgPCBHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQpIHtcblx0XHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKSB7XG5cdFx0XHRcdFx0XHRHbG9iYWxzRGF0YS5fX0FQUF9fLmNsZWFyQ2xpZW50U2lkZVRva2VuKCk7XG5cblx0XHRcdFx0XHRcdGlmICghb0RhdGEuQ2xlYXJBdXRoICYmIEdsb2JhbHNEYXRhLl9fQVBQX18ubG9naW5BbmRMb2dvdXRSZWxvYWQpIHtcblx0XHRcdFx0XHRcdFx0R2xvYmFsc0RhdGEuX19BUFBfXy5sb2dpbkFuZExvZ291dFJlbG9hZChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNUeXBlICYmIG9EYXRhICYmIG9EYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pQWpheEVycm9yQ291bnQgPSAwO1xuXHRcdFx0XHRHbG9iYWxzRGF0YS5pVG9rZW5FcnJvckNvdW50ID0gMDtcblx0XHRcdH1cblxuXHRcdFx0cnVuSG9vaygnYWpheC1kZWZhdWx0LXJlc3BvbnNlJywgW1xuXHRcdFx0XHRzUmVxdWVzdEFjdGlvbixcblx0XHRcdFx0U3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1R5cGUgPyBvRGF0YSA6IG51bGwsXG5cdFx0XHRcdHNUeXBlLFxuXHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRvUmVxdWVzdFBhcmFtZXRlcnNcblx0XHRcdF0pO1xuXG5cdFx0XHRpZiAoZkNhbGxiYWNrKSB7XG5cdFx0XHRcdGZDYWxsYmFjayhcblx0XHRcdFx0XHRzVHlwZSxcblx0XHRcdFx0XHRTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSBzVHlwZSA/IG9EYXRhIDogbnVsbCxcblx0XHRcdFx0XHRiQ2FjaGVkLFxuXHRcdFx0XHRcdHNSZXF1ZXN0QWN0aW9uLFxuXHRcdFx0XHRcdG9SZXF1ZXN0UGFyYW1ldGVyc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKHNUeXBlKSB7XG5cdFx0XHRjYXNlICdzdWNjZXNzJzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJ2Fib3J0Jzpcblx0XHRcdFx0c1R5cGUgPSBTdG9yYWdlUmVzdWx0VHlwZS5BYm9ydDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRzVHlwZSA9IFN0b3JhZ2VSZXN1bHRUeXBlLkVycm9yO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuRXJyb3IgPT09IHNUeXBlKSB7XG5cdFx0XHRfLmRlbGF5KGZDYWxsLCAzMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmQ2FsbCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZlJlc3VsdENhbGxiYWNrXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gez9udW1iZXI9fSBpVGltZU91dCA9IDIwMDAwXG5cdCAqIEBwYXJhbSB7c3RyaW5nPX0gc0dldEFkZCA9ICcnXG5cdCAqIEBwYXJhbSB7QXJyYXk9fSBhQWJvcnRBY3Rpb25zID0gW11cblx0ICogQHJldHVybnMge2pRdWVyeS5qcVhIUn1cblx0ICovXG5cdGFqYXhSZXF1ZXN0KGZSZXN1bHRDYWxsYmFjaywgcGFyYW1zLCBpVGltZU91dCA9IDIwMDAwLCBzR2V0QWRkID0gJycsIGFib3J0QWN0aW9ucyA9IFtdKSB7XG5cdFx0Y29uc3QgaXNQb3N0ID0gJycgPT09IHNHZXRBZGQsXG5cdFx0XHRoZWFkZXJzID0ge30sXG5cdFx0XHRzdGFydCA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcblxuXHRcdGxldCBhY3Rpb24gPSAnJztcblxuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcblx0XHRhY3Rpb24gPSBwYXJhbXMuQWN0aW9uIHx8ICcnO1xuXG5cdFx0aWYgKGFjdGlvbiAmJiAwIDwgYWJvcnRBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0Xy5lYWNoKGFib3J0QWN0aW9ucywgKGFjdGlvblRvQWJvcnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdKSB7XG5cdFx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uX19hYm9ydGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uVG9BYm9ydF0uYWJvcnQpIHtcblx0XHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdLmFib3J0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvblRvQWJvcnRdID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUG9zdCkge1xuXHRcdFx0cGFyYW1zLlhUb2tlbiA9IFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd0b2tlbicpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9EZWZBamF4ID0gJC5hamF4KHtcblx0XHRcdHR5cGU6IGlzUG9zdCA/ICdQT1NUJyA6ICdHRVQnLFxuXHRcdFx0dXJsOiBhamF4KHNHZXRBZGQpLFxuXHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRkYXRhVHlwZTogJ2pzb24nLFxuXHRcdFx0ZGF0YTogaXNQb3N0ID8gcGFyYW1zIDoge30sXG5cdFx0XHRoZWFkZXJzOiBoZWFkZXJzLFxuXHRcdFx0dGltZW91dDogaVRpbWVPdXQsXG5cdFx0XHRnbG9iYWw6IHRydWVcblx0XHR9KTtcblxuXHRcdG9EZWZBamF4LmFsd2F5cygob0RhdGEsIHNUeXBlKSA9PiB7XG5cdFx0XHRsZXQgY2FjaGVkID0gZmFsc2U7XG5cdFx0XHRpZiAob0RhdGEgJiYgb0RhdGEuVGltZSkge1xuXHRcdFx0XHRjYWNoZWQgPSBwSW50KG9EYXRhLlRpbWUpID4gbmV3IHdpbmRvdy5EYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRGF0YSAmJiBvRGF0YS5VcGRhdGVUb2tlbikge1xuXHRcdFx0XHRpZiAoR2xvYmFsc0RhdGEuX19BUFBfXyAmJiBHbG9iYWxzRGF0YS5fX0FQUF9fLnNldENsaWVudFNpZGVUb2tlbikge1xuXHRcdFx0XHRcdEdsb2JhbHNEYXRhLl9fQVBQX18uc2V0Q2xpZW50U2lkZVRva2VuKG9EYXRhLlVwZGF0ZVRva2VuKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYWN0aW9uICYmIHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uX19hYm9ydGVkKSB7XG5cdFx0XHRcdFx0c1R5cGUgPSAnYWJvcnQnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuZGVmYXVsdFJlc3BvbnNlKGZSZXN1bHRDYWxsYmFjaywgYWN0aW9uLCBzVHlwZSwgb0RhdGEsIGNhY2hlZCwgcGFyYW1zKTtcblx0XHR9KTtcblxuXHRcdGlmIChhY3Rpb24gJiYgMCA8IGFib3J0QWN0aW9ucy5sZW5ndGggJiYgLTEgPCBpbkFycmF5KGFjdGlvbiwgYWJvcnRBY3Rpb25zKSkge1xuXHRcdFx0aWYgKHRoaXMub1JlcXVlc3RzW2FjdGlvbl0pIHtcblx0XHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5fX2Fib3J0ZWQgPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpcy5vUmVxdWVzdHNbYWN0aW9uXS5hYm9ydCkge1xuXHRcdFx0XHRcdHRoaXMub1JlcXVlc3RzW2FjdGlvbl0uYWJvcnQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLm9SZXF1ZXN0c1thY3Rpb25dID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5vUmVxdWVzdHNbYWN0aW9uXSA9IG9EZWZBamF4O1xuXHRcdH1cblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5cdFx0b0RlZkFqYXguY2F0Y2goY29uc29sZS5sb2cpO1xuXHRcdHJldHVybiBvRGVmQWpheDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzQWN0aW9uXG5cdCAqIEBwYXJhbSB7T2JqZWN0PX0gb1BhcmFtZXRlcnNcblx0ICogQHBhcmFtIHs/bnVtYmVyPX0gaVRpbWVvdXRcblx0ICogQHBhcmFtIHtzdHJpbmc9fSBzR2V0QWRkID0gJydcblx0ICogQHBhcmFtIHtBcnJheT19IGFBYm9ydEFjdGlvbnMgPSBbXVxuXHQgKi9cblx0ZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCBzQWN0aW9uLCBvUGFyYW1ldGVycywgaVRpbWVvdXQsIHNHZXRBZGQsIGFBYm9ydEFjdGlvbnMpIHtcblx0XHRvUGFyYW1ldGVycyA9IG9QYXJhbWV0ZXJzIHx8IHt9O1xuXHRcdG9QYXJhbWV0ZXJzLkFjdGlvbiA9IHNBY3Rpb247XG5cblx0XHRzR2V0QWRkID0gcFN0cmluZyhzR2V0QWRkKTtcblxuXHRcdHJ1bkhvb2soJ2FqYXgtZGVmYXVsdC1yZXF1ZXN0JywgW3NBY3Rpb24sIG9QYXJhbWV0ZXJzLCBzR2V0QWRkXSk7XG5cblx0XHRyZXR1cm4gdGhpcy5hamF4UmVxdWVzdChcblx0XHRcdGZDYWxsYmFjayxcblx0XHRcdG9QYXJhbWV0ZXJzLFxuXHRcdFx0aXNVbmQoaVRpbWVvdXQpID8gREVGQVVMVF9BSkFYX1RJTUVPVVQgOiBwSW50KGlUaW1lb3V0KSxcblx0XHRcdHNHZXRBZGQsXG5cdFx0XHRhQWJvcnRBY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0gez9GdW5jdGlvbn0gZkNhbGxiYWNrXG5cdCAqL1xuXHRub29wKGZDYWxsYmFjaykge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnTm9vcCcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICovXG5cdGdldFB1YmxpY0tleShmQ2FsbGJhY2spIHtcblx0XHR0aGlzLmRlZmF1bHRSZXF1ZXN0KGZDYWxsYmFjaywgJ0dldFB1YmxpY0tleScpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBmQ2FsbGJhY2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNWZXJzaW9uXG5cdCAqL1xuXHRqc1ZlcnNpb24oZkNhbGxiYWNrLCBzVmVyc2lvbikge1xuXHRcdHRoaXMuZGVmYXVsdFJlcXVlc3QoZkNhbGxiYWNrLCAnVmVyc2lvbicsIHtcblx0XHRcdCdWZXJzaW9uJzogc1ZlcnNpb25cblx0XHR9KTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFqYXhSZW1vdGUsIEFic3RyYWN0QWpheFJlbW90ZSBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgVklFV19NT0RFTFMgfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5pbXBvcnQgeyBkZWxlZ2F0ZVJ1biwgd2luZG93UmVzaXplLCBsb2csIGlzVW5kLCBwU3RyaW5nIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcblxuaW1wb3J0IHsgc2V0SGFzaCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5jbGFzcyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTY3JlZW4ge1xuXHQvKipcblx0ICogQHBhcmFtIHtBcnJheX0gdmlld01vZGVsc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iodmlld01vZGVscykge1xuXHRcdHN1cGVyKCdzZXR0aW5ncycsIHZpZXdNb2RlbHMpO1xuXG5cdFx0dGhpcy5tZW51ID0ga28ub2JzZXJ2YWJsZUFycmF5KFtdKTtcblxuXHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBudWxsO1xuXHRcdHRoaXMub1ZpZXdNb2RlbFBsYWNlID0gbnVsbDtcblxuXHRcdHRoaXMuc2V0dXBTZXR0aW5ncygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2tcblx0ICovXG5cdHNldHVwU2V0dGluZ3MoZkNhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChmQ2FsbGJhY2spIHtcblx0XHRcdGZDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdG9uUm91dGUoc3ViTmFtZSkge1xuXHRcdGxldCBzZXR0aW5nc1NjcmVlbiA9IG51bGwsXG5cdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxQbGFjZSA9IG51bGwsXG5cdFx0XHR2aWV3TW9kZWxEb20gPSBudWxsO1xuXG5cdFx0Um91dGVkU2V0dGluZ3NWaWV3TW9kZWwgPSBfLmZpbmQoXG5cdFx0XHRWSUVXX01PREVMUy5zZXR0aW5ncyxcblx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0U2V0dGluZ3NWaWV3TW9kZWwgJiYgU2V0dGluZ3NWaWV3TW9kZWwuX19ybFNldHRpbmdzRGF0YSAmJiBzdWJOYW1lID09PSBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhLlJvdXRlXG5cdFx0KTtcblxuXHRcdGlmIChSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLXJlbW92ZWQnXSxcblx0XHRcdFx0XHQoRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRcdERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gUm91dGVkU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCAmJlxuXHRcdFx0XHRfLmZpbmQoXG5cdFx0XHRcdFx0VklFV19NT0RFTFNbJ3NldHRpbmdzLWRpc2FibGVkJ10sXG5cdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+XG5cdFx0XHRcdFx0XHREaXNhYmxlZFNldHRpbmdzVmlld01vZGVsICYmIERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgPT09IFJvdXRlZFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbCA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFJvdXRlZFNldHRpbmdzVmlld01vZGVsKSB7XG5cdFx0XHRpZiAoUm91dGVkU2V0dGluZ3NWaWV3TW9kZWwuX19idWlsZGVkICYmIFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0pIHtcblx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gPSBSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX3ZtO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmlld01vZGVsUGxhY2UgPSB0aGlzLm9WaWV3TW9kZWxQbGFjZTtcblx0XHRcdFx0aWYgKHZpZXdNb2RlbFBsYWNlICYmIDEgPT09IHZpZXdNb2RlbFBsYWNlLmxlbmd0aCkge1xuXHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuID0gbmV3IFJvdXRlZFNldHRpbmdzVmlld01vZGVsKCk7XG5cblx0XHRcdFx0XHR2aWV3TW9kZWxEb20gPSAkKCc8ZGl2PjwvZGl2PicpXG5cdFx0XHRcdFx0XHQuYWRkQ2xhc3MoJ3JsLXNldHRpbmdzLXZpZXctbW9kZWwnKVxuXHRcdFx0XHRcdFx0LmhpZGUoKTtcblx0XHRcdFx0XHR2aWV3TW9kZWxEb20uYXBwZW5kVG8odmlld01vZGVsUGxhY2UpO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4udmlld01vZGVsRG9tID0gdmlld01vZGVsRG9tO1xuXG5cdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4uX19ybFNldHRpbmdzRGF0YSA9IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGE7XG5cblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2RvbSA9IHZpZXdNb2RlbERvbTtcblx0XHRcdFx0XHRSb3V0ZWRTZXR0aW5nc1ZpZXdNb2RlbC5fX2J1aWxkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fdm0gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdGNvbnN0IHRtcGwgPSB7IG5hbWU6IFJvdXRlZFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuVGVtcGxhdGUgfTtcblx0XHRcdFx0XHRrby5hcHBseUJpbmRpbmdBY2Nlc3NvcnNUb05vZGUoXG5cdFx0XHRcdFx0XHR2aWV3TW9kZWxEb21bMF0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0b3JJbml0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKCkgPT4gdG1wbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGRlbGVnYXRlUnVuKHNldHRpbmdzU2NyZWVuLCAnb25CdWlsZCcsIFt2aWV3TW9kZWxEb21dKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2coJ0Nhbm5vdCBmaW5kIHN1YiBzZXR0aW5ncyB2aWV3IG1vZGVsIHBvc2l0aW9uOiBTZXR0aW5nc1N1YlNjcmVlbicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZXR0aW5nc1NjcmVlbikge1xuXHRcdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0XHQvLyBoaWRlXG5cdFx0XHRcdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4pIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gLS1cblxuXHRcdFx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gPSBzZXR0aW5nc1NjcmVlbjtcblxuXHRcdFx0XHRcdC8vIHNob3dcblx0XHRcdFx0XHRpZiAodGhpcy5vQ3VycmVudFN1YlNjcmVlbikge1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uQmVmb3JlU2hvdycpO1xuXHRcdFx0XHRcdFx0dGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20uc2hvdygpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvdycpO1xuXHRcdFx0XHRcdFx0ZGVsZWdhdGVSdW4odGhpcy5vQ3VycmVudFN1YlNjcmVlbiwgJ29uU2hvd1dpdGhEZWxheScsIFtdLCAyMDApO1xuXG5cdFx0XHRcdFx0XHRfLmVhY2godGhpcy5tZW51KCksIChpdGVtKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGl0ZW0uc2VsZWN0ZWQoXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3NTY3JlZW4gJiZcblx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucm91dGUgPT09IHNldHRpbmdzU2NyZWVuLl9fcmxTZXR0aW5nc0RhdGEuUm91dGVcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQkKCcjcmwtY29udGVudCAuYi1zZXR0aW5ncyAuYi1jb250ZW50IC5jb250ZW50Jykuc2Nyb2xsVG9wKDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLVxuXG5cdFx0XHRcdFx0d2luZG93UmVzaXplKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZXRIYXNoKHNldHRpbmdzKCksIGZhbHNlLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0aWYgKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4gJiYgdGhpcy5vQ3VycmVudFN1YlNjcmVlbi52aWV3TW9kZWxEb20pIHtcblx0XHRcdGRlbGVnYXRlUnVuKHRoaXMub0N1cnJlbnRTdWJTY3JlZW4sICdvbkhpZGUnKTtcblx0XHRcdHRoaXMub0N1cnJlbnRTdWJTY3JlZW4udmlld01vZGVsRG9tLmhpZGUoKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZWFjaChWSUVXX01PREVMUy5zZXR0aW5ncywgKFNldHRpbmdzVmlld01vZGVsKSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsICYmXG5cdFx0XHRcdFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgJiZcblx0XHRcdFx0IV8uZmluZChcblx0XHRcdFx0XHRWSUVXX01PREVMU1snc2V0dGluZ3MtcmVtb3ZlZCddLFxuXHRcdFx0XHRcdChSZW1vdmVTZXR0aW5nc1ZpZXdNb2RlbCkgPT4gUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgJiYgUmVtb3ZlU2V0dGluZ3NWaWV3TW9kZWwgPT09IFNldHRpbmdzVmlld01vZGVsXG5cdFx0XHRcdClcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLm1lbnUucHVzaCh7XG5cdFx0XHRcdFx0cm91dGU6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUsXG5cdFx0XHRcdFx0bGFiZWw6IFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuTGFiZWwsXG5cdFx0XHRcdFx0c2VsZWN0ZWQ6IGtvLm9ic2VydmFibGUoZmFsc2UpLFxuXHRcdFx0XHRcdGRpc2FibGVkOiAhIV8uZmluZChcblx0XHRcdFx0XHRcdFZJRVdfTU9ERUxTWydzZXR0aW5ncy1kaXNhYmxlZCddLFxuXHRcdFx0XHRcdFx0KERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwpID0+IERpc2FibGVkU2V0dGluZ3NWaWV3TW9kZWwgJiYgRGlzYWJsZWRTZXR0aW5nc1ZpZXdNb2RlbCA9PT0gU2V0dGluZ3NWaWV3TW9kZWxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5vVmlld01vZGVsUGxhY2UgPSAkKCcjcmwtY29udGVudCAjcmwtc2V0dGluZ3Mtc3Vic2NyZWVuJyk7XG5cdH1cblxuXHRyb3V0ZXMoKSB7XG5cdFx0Y29uc3QgRGVmYXVsdFZpZXdNb2RlbCA9IF8uZmluZChcblx0XHRcdFx0VklFV19NT0RFTFMuc2V0dGluZ3MsXG5cdFx0XHRcdChTZXR0aW5nc1ZpZXdNb2RlbCkgPT5cblx0XHRcdFx0XHRTZXR0aW5nc1ZpZXdNb2RlbCAmJiBTZXR0aW5nc1ZpZXdNb2RlbC5fX3JsU2V0dGluZ3NEYXRhICYmIFNldHRpbmdzVmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuSXNEZWZhdWx0XG5cdFx0XHQpLFxuXHRcdFx0ZGVmYXVsdFJvdXRlID1cblx0XHRcdFx0RGVmYXVsdFZpZXdNb2RlbCAmJiBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEgPyBEZWZhdWx0Vmlld01vZGVsLl9fcmxTZXR0aW5nc0RhdGEuUm91dGUgOiAnZ2VuZXJhbCcsXG5cdFx0XHRydWxlcyA9IHtcblx0XHRcdFx0c3VibmFtZTogL14oLiopJC8sXG5cdFx0XHRcdG5vcm1hbGl6ZV86IChycXVlc3QsIHZhbHMpID0+IHtcblx0XHRcdFx0XHR2YWxzLnN1Ym5hbWUgPSBpc1VuZCh2YWxzLnN1Ym5hbWUpID8gZGVmYXVsdFJvdXRlIDogcFN0cmluZyh2YWxzLnN1Ym5hbWUpO1xuXHRcdFx0XHRcdHJldHVybiBbdmFscy5zdWJuYW1lXTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdHJldHVybiBbXG5cdFx0XHRbJ3tzdWJuYW1lfS8nLCBydWxlc10sXG5cdFx0XHRbJ3tzdWJuYW1lfScsIHJ1bGVzXSxcblx0XHRcdFsnJywgcnVsZXNdXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFNldHRpbmdzU2NyZWVuLCBBYnN0cmFjdFNldHRpbmdzU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuaW1wb3J0IHNzbSBmcm9tICdzc20nO1xuXG5pbXBvcnQge1xuXHQkd2luLFxuXHQkaHRtbCxcblx0JGRvYyxcblx0bGVmdFBhbmVsRGlzYWJsZWQsXG5cdGxlZnRQYW5lbFR5cGUsXG5cdHNVc2VyQWdlbnQsXG5cdGJNb2JpbGVEZXZpY2UsXG5cdGJBbmltYXRpb25TdXBwb3J0ZWRcbn0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuXG5pbXBvcnQgeyBpc05vcm1hbCwgcFN0cmluZywgZGV0ZWN0RHJvcGRvd25WaXNpYmlsaXR5LCB3aW5kb3dSZXNpemVDYWxsYmFjayB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5cbmltcG9ydCB7IEtleVN0YXRlLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgcm9vdCwgcm9vdEFkbWluLCByb290VXNlciwgcG9wdWxhdGVBdXRoU3VmZml4IH0gZnJvbSAnQ29tbW9uL0xpbmtzJztcbmltcG9ydCB7IGluaXRPblN0YXJ0T3JMYW5nQ2hhbmdlLCBpbml0Tm90aWZpY2F0aW9uTGFuZ3VhZ2UgfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAnQ29tbW9uL0V2ZW50cyc7XG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBUaGVtZVN0b3JlIGZyb20gJ1N0b3Jlcy9UaGVtZSc7XG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCB7IHJvdXRlT2ZmLCBzZXRIYXNoIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RCb290IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RCb290JztcblxuY2xhc3MgQWJzdHJhY3RBcHAgZXh0ZW5kcyBBYnN0cmFjdEJvb3Qge1xuXHQvKipcblx0ICogQHBhcmFtIHtSZW1vdGVTdG9yYWdlfEFkbWluUmVtb3RlU3RvcmFnZX0gUmVtb3RlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUgPSBudWxsO1xuXHRcdHRoaXMuaXNMb2NhbEF1dG9jb21wbGV0ZSA9IHRydWU7XG5cdFx0dGhpcy5pZnJhbWUgPSBudWxsO1xuXHRcdHRoaXMubGFzdEVycm9yVGltZSA9IDA7XG5cblx0XHR0aGlzLmlmcmFtZSA9ICQoJzxpZnJhbWUgY2xhc3M9XCJpbnRlcm5hbC1oaWRkZGVuXCIgLz4nKS5hcHBlbmRUbygnYm9keScpO1xuXG5cdFx0JHdpbi5vbigncmVzaXplJywgKCkgPT4ge1xuXHRcdFx0RXZlbnRzLnB1Yignd2luZG93LnJlc2l6ZScpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yihcblx0XHRcdCd3aW5kb3cucmVzaXplJyxcblx0XHRcdF8udGhyb3R0bGUoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBpSCA9ICR3aW4uaGVpZ2h0KCksXG5cdFx0XHRcdFx0aVcgPSAkd2luLmhlaWdodCgpO1xuXG5cdFx0XHRcdGlmICgkd2luLl9fc2l6ZXNbMF0gIT09IGlIIHx8ICR3aW4uX19zaXplc1sxXSAhPT0gaVcpIHtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMF0gPSBpSDtcblx0XHRcdFx0XHQkd2luLl9fc2l6ZXNbMV0gPSBpVztcblxuXHRcdFx0XHRcdEV2ZW50cy5wdWIoJ3dpbmRvdy5yZXNpemUucmVhbCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCBNYWdpY3MuVGltZTUwbXMpXG5cdFx0KTtcblxuXHRcdC8vIERFQlVHXG5cdFx0Ly9cdFx0RXZlbnRzLnN1Yih7XG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZSc6IGZ1bmN0aW9uKCkge1xuXHRcdC8vXHRcdFx0XHR3aW5kb3cuY29uc29sZS5sb2coJ3dpbmRvdy5yZXNpemUnKTtcblx0XHQvL1x0XHRcdH0sXG5cdFx0Ly9cdFx0XHQnd2luZG93LnJlc2l6ZS5yZWFsJzogZnVuY3Rpb24oKSB7XG5cdFx0Ly9cdFx0XHRcdHdpbmRvdy5jb25zb2xlLmxvZygnd2luZG93LnJlc2l6ZS5yZWFsJyk7XG5cdFx0Ly9cdFx0XHR9XG5cdFx0Ly9cdFx0fSk7XG5cblx0XHQkZG9jXG5cdFx0XHQub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50ICYmIGV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0Lm9uKCdrZXl1cCcsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQgJiYgIWV2ZW50LmN0cmxLZXkpIHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygncmwtY3RybC1rZXktcHJlc3NlZCcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdCRkb2Mub24oXG5cdFx0XHQnbW91c2Vtb3ZlIGtleXByZXNzIGNsaWNrJyxcblx0XHRcdF8uZGVib3VuY2UoKCkgPT4ge1xuXHRcdFx0XHRFdmVudHMucHViKCdybC5hdXRvLWxvZ291dC1yZWZyZXNoJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTVzKVxuXHRcdCk7XG5cblx0XHRrZXkoJ2VzYywgZW50ZXInLCBLZXlTdGF0ZS5BbGwsICgpID0+IHtcblx0XHRcdGRldGVjdERyb3Bkb3duVmlzaWJpbGl0eSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZGF0YSgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbihuYW1lLCBkZWZhdWx0Xykge1xuXHRcdHJldHVybiB0aGlzLmFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbltuYW1lXSB8fCBkZWZhdWx0Xztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGlua1xuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGRvd25sb2FkKGxpbmspIHtcblx0XHRpZiAoc1VzZXJBZ2VudCAmJiAoLTEgPCBzVXNlckFnZW50LmluZGV4T2YoJ2Nocm9tZScpIHx8IC0xIDwgc1VzZXJBZ2VudC5pbmRleE9mKCdjaHJvbWUnKSkpIHtcblx0XHRcdGNvbnN0IG9MaW5rID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRcdG9MaW5rLmhyZWYgPSBsaW5rO1xuXG5cdFx0XHRpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudCkge1xuXHRcdFx0XHRjb25zdCBvRSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudC5Nb3VzZUV2ZW50cztcblx0XHRcdFx0aWYgKG9FICYmIG9FLmluaXRFdmVudCAmJiBvTGluay5kaXNwYXRjaEV2ZW50KSB7XG5cdFx0XHRcdFx0b0UuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdG9MaW5rLmRpc3BhdGNoRXZlbnQob0UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHdpbmRvdy5vcGVuKGxpbmssICdfc2VsZicpO1xuXHRcdFx0d2luZG93LmZvY3VzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuaWZyYW1lLmF0dHIoJ3NyYycsIGxpbmspO1xuXHRcdFx0Ly8gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBsaW5rO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0Z29vZ2xlUHJldmlld1N1cHBvcnRlZCgpIHtcblx0XHRpZiAobnVsbCA9PT0gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGUpIHtcblx0XHRcdHRoaXMuZ29vZ2xlUHJldmlld1N1cHBvcnRlZENhY2hlID1cblx0XHRcdFx0ISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnQWxsb3dHb29nbGVTb2NpYWwnKSAmJiAhIVNldHRpbmdzLnNldHRpbmdzR2V0KCdBbGxvd0dvb2dsZVNvY2lhbFByZXZpZXcnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5nb29nbGVQcmV2aWV3U3VwcG9ydGVkQ2FjaGU7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG5cdCAqL1xuXHRzZXRXaW5kb3dUaXRsZSh0aXRsZSkge1xuXHRcdHRpdGxlID0gaXNOb3JtYWwodGl0bGUpICYmIDAgPCB0aXRsZS5sZW5ndGggPyAnJyArIHRpdGxlIDogJyc7XG5cdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpKSB7XG5cdFx0XHR0aXRsZSArPSAodGl0bGUgPyAnIC0gJyA6ICcnKSArIFNldHRpbmdzLnNldHRpbmdzR2V0KCdUaXRsZScpO1xuXHRcdH1cblxuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlICsgJyAuLi4nO1xuXHRcdHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlO1xuXHR9XG5cblx0cmVkaXJlY3RUb0FkbWluUGFuZWwoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJvb3RBZG1pbigpO1xuXHRcdH0sIE1hZ2ljcy5UaW1lMTAwbXMpO1xuXHR9XG5cblx0Y2xlYXJDbGllbnRTaWRlVG9rZW4oKSB7XG5cdFx0aWYgKHdpbmRvdy5fX3JsYWhfY2xlYXIpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfY2xlYXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqL1xuXHRzZXRDbGllbnRTaWRlVG9rZW4odG9rZW4pIHtcblx0XHRpZiAod2luZG93Ll9fcmxhaF9zZXQpIHtcblx0XHRcdHdpbmRvdy5fX3JsYWhfc2V0KHRva2VuKTtcblxuXHRcdFx0U2V0dGluZ3Muc2V0dGluZ3NTZXQoJ0F1dGhBY2NvdW50SGFzaCcsIHRva2VuKTtcblx0XHRcdHBvcHVsYXRlQXV0aFN1ZmZpeCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge2Jvb2xlYW49fSBhZG1pbiA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGxvZ291dCA9IGZhbHNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbj19IGNsb3NlID0gZmFsc2Vcblx0ICovXG5cdGxvZ2luQW5kTG9nb3V0UmVsb2FkKGFkbWluID0gZmFsc2UsIGxvZ291dCA9IGZhbHNlLCBjbG9zZSA9IGZhbHNlKSB7XG5cdFx0Y29uc3QgaW5JZnJhbWUgPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdpbklmcmFtZScpO1xuXHRcdGxldCBjdXN0b21Mb2dvdXRMaW5rID0gcFN0cmluZyhTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnY3VzdG9tTG9nb3V0TGluaycpKTtcblxuXHRcdGlmIChsb2dvdXQpIHtcblx0XHRcdHRoaXMuY2xlYXJDbGllbnRTaWRlVG9rZW4oKTtcblx0XHR9XG5cblx0XHRpZiAobG9nb3V0ICYmIGNsb3NlICYmIHdpbmRvdy5jbG9zZSkge1xuXHRcdFx0d2luZG93LmNsb3NlKCk7XG5cdFx0fVxuXG5cdFx0Y3VzdG9tTG9nb3V0TGluayA9IGN1c3RvbUxvZ291dExpbmsgfHwgKGFkbWluID8gcm9vdEFkbWluKCkgOiByb290VXNlcigpKTtcblxuXHRcdGlmIChsb2dvdXQgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgIT09IGN1c3RvbUxvZ291dExpbmspIHtcblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24uaHJlZiA9IGN1c3RvbUxvZ291dExpbms7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSBjdXN0b21Mb2dvdXRMaW5rO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm91dGVPZmYoKTtcblx0XHRcdHNldEhhc2gocm9vdCgpLCB0cnVlKTtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cblx0XHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0XHRpZiAoaW5JZnJhbWUgJiYgd2luZG93LnBhcmVudCkge1xuXHRcdFx0XHRcdHdpbmRvdy5wYXJlbnQubG9jYXRpb24ucmVsb2FkKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0JHdpbi50cmlnZ2VyKCdybC50b29sdGlwcy5kaWFjdGl2YXRlJyk7XG5cdFx0XHR9LCBNYWdpY3MuVGltZTEwMG1zKTtcblx0XHR9XG5cdH1cblxuXHRoaXN0b3J5QmFjaygpIHtcblx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdH1cblxuXHRib290c3RhcnQoKSB7XG5cdFx0Ly8gbG9nKCdQcycgKyAnc3MsIGhhYycgKyAna2VycyEgVGhlJyArICdyZVxcJ3Mgbm90JyArICdoaW5nIGludGUnICsgJ3Jlc3RpbmcgOicgKyAnKScpO1xuXG5cdFx0RXZlbnRzLnB1YigncmwuYm9vdHN0YXJ0Jyk7XG5cblx0XHRjb25zdCBtb2JpbGUgPSBTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlJyk7XG5cblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdTYXZlVHJpZ2dlcicsIHJlcXVpcmUoJ0NvbXBvbmVudC9TYXZlVHJpZ2dlcicpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0lucHV0JywgcmVxdWlyZSgnQ29tcG9uZW50L0lucHV0JykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignU2VsZWN0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NlbGVjdCcpLmRlZmF1bHQpO1xuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ1JhZGlvJywgcmVxdWlyZSgnQ29tcG9uZW50L1JhZGlvJykuZGVmYXVsdCk7XG5cdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignVGV4dEFyZWEnLCByZXF1aXJlKCdDb21wb25lbnQvVGV4dEFyZWEnKS5kZWZhdWx0KTtcblx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdEYXRlJywgcmVxdWlyZSgnQ29tcG9uZW50L0RhdGUnKS5kZWZhdWx0KTtcblxuXHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3gtc2NyaXB0JywgcmVxdWlyZSgnQ29tcG9uZW50L1NjcmlwdCcpLmRlZmF1bHQpO1xuXHRcdC8vIGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ3N2Zy1pY29uJywgcmVxdWlyZSgnQ29tcG9uZW50L1N2Z0ljb24nKS5kZWZhdWx0KTtcblxuXHRcdGlmIChTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbWF0ZXJpYWxEZXNpZ24nKSAmJiBiQW5pbWF0aW9uU3VwcG9ydGVkKSB7XG5cdFx0XHRrby5jb21wb25lbnRzLnJlZ2lzdGVyKCdDaGVja2JveCcsIHJlcXVpcmUoJ0NvbXBvbmVudC9NYXRlcmlhbERlc2lnbi9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0Ly8ga28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3hTaW1wbGUnLCByZXF1aXJlKCdDb21wb25lbnQvQ2xhc3NpYy9DaGVja2JveCcpLmRlZmF1bHQpO1xuXHRcdFx0a28uY29tcG9uZW50cy5yZWdpc3RlcignQ2hlY2tib3gnLCByZXF1aXJlKCdDb21wb25lbnQvQ2hlY2tib3gnKS5kZWZhdWx0KTtcblx0XHRcdGtvLmNvbXBvbmVudHMucmVnaXN0ZXIoJ0NoZWNrYm94U2ltcGxlJywgcmVxdWlyZSgnQ29tcG9uZW50L0NoZWNrYm94JykuZGVmYXVsdCk7XG5cdFx0fVxuXG5cdFx0aW5pdE9uU3RhcnRPckxhbmdDaGFuZ2UoaW5pdE5vdGlmaWNhdGlvbkxhbmd1YWdlKTtcblxuXHRcdF8uZGVsYXkod2luZG93UmVzaXplQ2FsbGJhY2ssIE1hZ2ljcy5UaW1lMXMpO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1lbnRlcicsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKHRydWUpO1xuXHRcdH0pO1xuXG5cdFx0RXZlbnRzLnN1Yignc3NtLm1vYmlsZS1sZWF2ZScsICgpID0+IHtcblx0XHRcdGxlZnRQYW5lbERpc2FibGVkKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdGlmICghbW9iaWxlKSB7XG5cdFx0XHQkaHRtbC5hZGRDbGFzcygncmwtZGVza3RvcCcpO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ21vYmlsZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1heC13aWR0aDogNzY3cHgpJyxcblx0XHRcdFx0b25FbnRlcjogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLmFkZENsYXNzKCdzc20tc3RhdGUtbW9iaWxlJyk7XG5cdFx0XHRcdFx0RXZlbnRzLnB1Yignc3NtLm1vYmlsZS1lbnRlcicpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRvbkxlYXZlOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwucmVtb3ZlQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKTtcblx0XHRcdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWxlYXZlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ3RhYmxldCcsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS10YWJsZXQnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtdGFibGV0Jyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRzc20uYWRkU3RhdGUoe1xuXHRcdFx0XHRpZDogJ2Rlc2t0b3AnLFxuXHRcdFx0XHRxdWVyeTogJyhtaW4td2lkdGg6IDEwMDBweCkgYW5kIChtYXgtd2lkdGg6IDE0MDBweCknLFxuXHRcdFx0XHRvbkVudGVyOiAoKSA9PiB7XG5cdFx0XHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1kZXNrdG9wJyk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTGVhdmU6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5yZW1vdmVDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHNzbS5hZGRTdGF0ZSh7XG5cdFx0XHRcdGlkOiAnZGVza3RvcC1sYXJnZScsXG5cdFx0XHRcdHF1ZXJ5OiAnKG1pbi13aWR0aDogMTQwMXB4KScsXG5cdFx0XHRcdG9uRW50ZXI6ICgpID0+IHtcblx0XHRcdFx0XHQkaHRtbC5hZGRDbGFzcygnc3NtLXN0YXRlLWRlc2t0b3AtbGFyZ2UnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0b25MZWF2ZTogKCkgPT4ge1xuXHRcdFx0XHRcdCRodG1sLnJlbW92ZUNsYXNzKCdzc20tc3RhdGUtZGVza3RvcC1sYXJnZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0JGh0bWwuYWRkQ2xhc3MoJ3NzbS1zdGF0ZS1tb2JpbGUnKS5hZGRDbGFzcygncmwtbW9iaWxlJyk7XG5cdFx0XHRFdmVudHMucHViKCdzc20ubW9iaWxlLWVudGVyJyk7XG5cdFx0fVxuXG5cdFx0bGVmdFBhbmVsRGlzYWJsZWQuc3Vic2NyaWJlKChiVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWRpc2FibGVkJywgYlZhbHVlKTtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLWVuYWJsZWQnLCAhYlZhbHVlKTtcblx0XHR9KTtcblxuXHRcdGxlZnRQYW5lbFR5cGUuc3Vic2NyaWJlKChzVmFsdWUpID0+IHtcblx0XHRcdCRodG1sLnRvZ2dsZUNsYXNzKCdybC1sZWZ0LXBhbmVsLW5vbmUnLCAnbm9uZScgPT09IHNWYWx1ZSk7XG5cdFx0XHQkaHRtbC50b2dnbGVDbGFzcygncmwtbGVmdC1wYW5lbC1zaG9ydCcsICdzaG9ydCcgPT09IHNWYWx1ZSk7XG5cdFx0fSk7XG5cblx0XHRsZWZ0UGFuZWxEaXNhYmxlZC52YWx1ZUhhc011dGF0ZWQoKTtcblxuXHRcdExhbmd1YWdlU3RvcmUucG9wdWxhdGUoKTtcblx0XHRUaGVtZVN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0U29jaWFsU3RvcmUucG9wdWxhdGUoKTtcblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdEFwcCwgQWJzdHJhY3RBcHAgYXMgZGVmYXVsdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEFic3RyYWN0Qm9vdCB7XG5cdGJvb3RzdGFydCgpIHtcblx0XHQvKiBuby1lbXB0eSAqL1xuXHR9XG59XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgeyBpc1VuZCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFic3RyYWN0UmFkaW8gZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy52YWx1ZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy52YWx1ZSA9IHBhcmFtcy52YWx1ZTtcblx0XHRpZiAoaXNVbmQodGhpcy52YWx1ZSkgfHwgIXRoaXMudmFsdWUuc3Vic2NyaWJlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5pbmxpbmUgPSBpc1VuZChwYXJhbXMuaW5saW5lKSA/IGZhbHNlIDogcGFyYW1zLmlubGluZTtcblx0XHR0aGlzLnJlYWRPbmx5ID0gaXNVbmQocGFyYW1zLnJlYWRPbmx5KSA/IGZhbHNlIDogISFwYXJhbXMucmVhZE9ubHk7XG5cblx0XHRpZiAocGFyYW1zLnZhbHVlcykge1xuXHRcdFx0dGhpcy52YWx1ZXMoXy5tYXAocGFyYW1zLnZhbHVlcywgKGxhYmVsLCB2YWx1ZSkgPT4gKHsgbGFiZWw6IGxhYmVsLCB2YWx1ZTogdmFsdWUgfSkpKTtcblx0XHR9XG5cblx0XHR0aGlzLmNsaWNrID0gXy5iaW5kKHRoaXMuY2xpY2ssIHRoaXMpO1xuXHR9XG5cblx0Y2xpY2sodmFsdWUpIHtcblx0XHRpZiAoIXRoaXMucmVhZE9ubHkgJiYgdmFsdWUpIHtcblx0XHRcdHRoaXMudmFsdWUodmFsdWUudmFsdWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgeyBBYnN0cmFjdFJhZGlvLCBBYnN0cmFjdFJhZGlvIGFzIGRlZmF1bHQgfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc2VhcmNoJywgMSwgZnVuY3Rpb24gKFNFQVJDSCwgbmF0aXZlU2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc2VhcmNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gc2VhcmNoZXIgIT09IHVuZGVmaW5lZCA/IHNlYXJjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlU2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG5cbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaHRtbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZShzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBtZXRob2QsIGxvd2VyY2FzZVxuLy8gb2YgYSB0YWcgYW5kIGVzY2FwaW5nIHF1b3RlcyBpbiBhcmd1bWVudHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tNRVRIT0RfTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pO1xufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS90cmltJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIHRyaW0gPSByZXF1aXJlKCcuLi9zdHJpbmcvdmlydHVhbC90cmltJyk7XG5cbnZhciBTdHJpbmdQcm90b3R5cGUgPSBTdHJpbmcucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQudHJpbTtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ3N0cmluZycgfHwgaXQgPT09IFN0cmluZ1Byb3RvdHlwZVxuICAgIHx8IChpdCBpbnN0YW5jZW9mIFN0cmluZyAmJiBvd24gPT09IFN0cmluZ1Byb3RvdHlwZS50cmltKSA/IHRyaW0gOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5zdHJpbmcudHJpbScpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdTdHJpbmcnKS50cmltO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgd2hpdGVzcGFjZSA9ICdbJyArIHdoaXRlc3BhY2VzICsgJ10nO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cCh3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPSBub24gfHwgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FO1xuICB9KTtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBmaW5kID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9maW5kJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbmQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5maW5kKSA/IGZpbmQgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maW5kJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuZmluZDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmQ7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEZJTkQgPSAnZmluZCc7XG52YXIgU0tJUFNfSE9MRVMgPSB0cnVlO1xuXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aChGSU5EKTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfHwgIVVTRVNfVE9fTEVOR1RIIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL2NvbmNhdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBjb25jYXQgPSByZXF1aXJlKCcuLi9hcnJheS92aXJ0dWFsL2NvbmNhdCcpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBvd24gPSBpdC5jb25jYXQ7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5jb25jYXQpID8gY29uY2F0IDogb3duO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0Jyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykuY29uY2F0O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcbnZhciBNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQgPSAnTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJztcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFTUEVDSUVTX1NVUFBPUlQ7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpLCBrLCBsZW5ndGgsIGxlbiwgRTtcbiAgICBmb3IgKGkgPSAtMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBFID0gaSA9PT0gLTEgPyBPIDogYXJndW1lbnRzW2ldO1xuICAgICAgaWYgKGlzQ29uY2F0U3ByZWFkYWJsZShFKSkge1xuICAgICAgICBsZW4gPSB0b0xlbmd0aChFLmxlbmd0aCk7XG4gICAgICAgIGlmIChuICsgbGVuID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID49IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgdmFsdWVzID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnZhbHVlcztcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLnZhbHVlcylcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgfHwgRE9NSXRlcmFibGVzLmhhc093blByb3BlcnR5KGNsYXNzb2YoaXQpKSA/IHZhbHVlcyA6IG93bjtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC92YWx1ZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL2luc3RhbmNlL3JlZHVjZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmVkdWNlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ3JlZHVjZScsIHsgMTogMCB9KTtcbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIHx8ICFVU0VTX1RPX0xFTkdUSCB8fCBDSFJPTUVfQlVHIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9tYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgbWFwID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9tYXAnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQubWFwO1xuICByZXR1cm4gaXQgPT09IEFycmF5UHJvdG90eXBlIHx8IChpdCBpbnN0YW5jZW9mIEFycmF5ICYmIG93biA9PT0gQXJyYXlQcm90b3R5cGUubWFwKSA/IG1hcCA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5Lm1hcCcpO1xudmFyIGVudHJ5VmlydHVhbCA9IHJlcXVpcmUoJy4uLy4uLy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZW50cnlWaXJ0dWFsKCdBcnJheScpLm1hcDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcbi8vIEZGNDktIGlzc3VlXG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIHx8ICFVU0VTX1RPX0xFTkdUSCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBuZXcgKEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQykobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBcIjxodG1sPlxcbjxoZWFkPlxcblxcdDxtZXRhIGNoYXJzZXQ9XFxcInV0Zi04XFxcIiAvPlxcblxcdDxtZXRhIG5hbWU9XFxcInZpZXdwb3J0XFxcIiBjb250ZW50PVxcXCJ1c2VyLXNjYWxhYmxlPW5vXFxcIiAvPlxcblxcdDxtZXRhIG5hbWU9XFxcImFwcGxlLW1vYmlsZS13ZWItYXBwLWNhcGFibGVcXFwiIGNvbnRlbnQ9XFxcInllc1xcXCIgLz5cXG5cXHQ8bWV0YSBuYW1lPVxcXCJyb2JvdHNcXFwiIGNvbnRlbnQ9XFxcIm5vaW5kZXgsIG5vZm9sbG93LCBub29kcFxcXCIgLz5cXG5cXHQ8dGl0bGU+e3t0aXRsZX19PC90aXRsZT5cXG5cXHQ8c3R5bGU+XFxuaHRtbCwgYm9keSB7XFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG5cXHRmb250LXNpemU6IDEzcHg7XFxuXFx0Zm9udC1mYW1pbHk6IGFyaWFsLCBzYW5zLXNlcmlmO1xcblxcdG1hcmdpbjogMDtcXG5cXHRwYWRkaW5nOiAwO1xcbn1cXG5cXG5hIHtjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmV9XFxuYTp2aXNpdGVkIHtjb2xvcjogIzYwOX1cXG5hOmFjdGl2ZSB7Y29sb3I6IHJlZH1cXG5ibG9ja3F1b3RlIHtib3JkZXItbGVmdDogMnB4IHNvbGlkIGJsYWNrOyBtYXJnaW46IDA7IHBhZGRpbmc6IDBweCAxMHB4fVxcblxcbnByZSB7XFxuXFx0bWFyZ2luOiAwcHg7XFxuXFx0cGFkZGluZzogMHB4O1xcblxcdGZvbnQtZmFtaWx5OiBNb25hY28sIE1lbmxvLCBDb25zb2xhcywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlO1xcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcXG5cXHR3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxuXFx0d29yZC1icmVhazogYnJlYWstYWxsO1xcbn1cXG5cXG4uYm9keS13cnAge1xcblxcdHBhZGRpbmc6IDEwcHg7XFxufVxcblxcbi5ib2R5LXdycC5odG1sIHByZSB7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxuXFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xcblxcdHdvcmQtd3JhcDogYnJlYWstd29yZDtcXG5cXHR3b3JkLWJyZWFrOiBub3JtYWw7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiB7XFxuXFx0cGFkZGluZzogMTVweDtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0Zm9udC1mYW1pbHk6IE1vbmFjbywgTWVubG8sIENvbnNvbGFzLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBwcmUge1xcblxcdG1hcmdpbjogMHB4O1xcblxcdHBhZGRpbmc6IDBweDtcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcblxcdGJvcmRlcjogbm9uZTtcXG5cXHRmb250LWZhbWlseTogTW9uYWNvLCBNZW5sbywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTtcXG5cXHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XFxuXFx0d29yZC13cmFwOiBicmVhay13b3JkO1xcblxcdHdvcmQtYnJlYWs6IG5vcm1hbDtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIGJsb2NrcXVvdGUge1xcblxcdGJvcmRlci1sZWZ0OiAycHggc29saWQgYmx1ZTtcXG5cXHRjb2xvcjogYmx1ZTtcXG59XFxuXFxuLmJvZHktd3JwLnBsYWluIGJsb2NrcXVvdGUgYmxvY2txdW90ZSB7XFxuXFx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmVlbjtcXG5cXHRjb2xvcjogZ3JlZW47XFxufVxcblxcbi5ib2R5LXdycC5wbGFpbiBibG9ja3F1b3RlIGJsb2NrcXVvdGUgYmxvY2txdW90ZSB7XFxuXFx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZWQ7XFxuXFx0Y29sb3I6IHJlZDtcXG59XFxuLnJsLXByZXZpZXctc3ViamVjdCB7XFxuXFx0Zm9udC1zaXplOiAxNnB4O1xcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcblxcdHBhZGRpbmc6IDE1cHg7XFxufVxcbi5ybC1wcmV2aWV3LWNyZWRzLWZyb20sIC5ybC1wcmV2aWV3LWNyZWRzLXRvLCAucmwtcHJldmlldy1jcmVkcy1jYyB7XFxuXFx0Zm9udC1zaXplOiAxMnB4O1xcblxcdHBhZGRpbmc6IDVweCAxNXB4O1xcbn1cXG4ucmwtcHJldmlldy1kYXRlIHtcXG5cXHRmbG9hdDogcmlnaHQ7XFxuXFx0Zm9udC1zaXplOiAxMnB4O1xcblxcdHBhZGRpbmc6IDEwcHggMTVweDtcXG59XFxuLnJsLXByZXZpZXctc2VjdGlvbiB7XFxuXFx0cGFkZGluZzogMDtcXG5cXHRtYXJnaW46IDA7XFxuXFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XFxufVxcbi5ybC1wcmV2aWV3LWhpZGUge1xcblxcdGRpc3BsYXk6IG5vbmU7XFxufVxcblxcdDwvc3R5bGU+XFxuPC9oZWFkPlxcbjxib2R5PlxcblxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc2VjdGlvblxcXCI+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1zdWJqZWN0XFxcIj57e3N1YmplY3R9fTwvZGl2PlxcblxcdDwvZGl2PlxcblxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctc2VjdGlvblxcXCI+XFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwicmwtcHJldmlldy1kYXRlXFxcIj57e2RhdGV9fTwvZGl2PlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctY3JlZHMtZnJvbVxcXCI+e3tmcm9tQ3JlZHN9fTwvZGl2PlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctY3JlZHMtdG9cXFwiPnt7dG9MYWJlbH19OiB7e3RvQ3JlZHN9fTwvZGl2PlxcblxcdFxcdDxkaXYgY2xhc3M9XFxcInJsLXByZXZpZXctY3JlZHMtY2Mge3tjY0NsYXNzfX1cXFwiPnt7Y2NMYWJlbH19OiB7e2NjQ3JlZHN9fTwvZGl2PlxcblxcdDwvZGl2PlxcblxcdDxkaXYgY2xhc3M9XFxcImJvZHktd3JwIHt7Ym9keUNsYXNzfX1cXFwiPnt7aHRtbH19PC9kaXY+XFxuPC9ib2R5PlxcbjwvaHRtbD5cIjsiLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvZmlsdGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGZpbHRlciA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZmlsdGVyJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZpbHRlcjtcbiAgcmV0dXJuIGl0ID09PSBBcnJheVByb3RvdHlwZSB8fCAoaXQgaW5zdGFuY2VvZiBBcnJheSAmJiBvd24gPT09IEFycmF5UHJvdG90eXBlLmZpbHRlcikgPyBmaWx0ZXIgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5maWx0ZXInKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5maWx0ZXI7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RVc2VzVG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLXVzZXMtdG8tbGVuZ3RoJyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG4vLyBFZGdlIDE0LSBpc3N1ZVxudmFyIFVTRVNfVE9fTEVOR1RIID0gYXJyYXlNZXRob2RVc2VzVG9MZW5ndGgoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3JlYXRlKFAsIEQpIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoUCwgRCk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBjcmVhdGU6IGNyZWF0ZVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzLm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0aC5PYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vc3RhYmxlL2luc3RhbmNlL2Zvci1lYWNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvZm9yLWVhY2gnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBOb2RlTGlzdDogdHJ1ZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LmZvckVhY2g7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5mb3JFYWNoKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICB8fCBET01JdGVyYWJsZXMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihpdCkpID8gZm9yRWFjaCA6IG93bjtcbn07XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vLi4vZXMvYXJyYXkvdmlydHVhbC9mb3ItZWFjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uLy4uL21vZHVsZXMvZXMuYXJyYXkuZm9yLWVhY2gnKTtcbnZhciBlbnRyeVZpcnR1YWwgPSByZXF1aXJlKCcuLi8uLi8uLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGVudHJ5VmlydHVhbCgnQXJyYXknKS5mb3JFYWNoO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogW10uZm9yRWFjaCAhPSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtdXNlcy10by1sZW5ndGgnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAoIVNUUklDVF9NRVRIT0QgfHwgIVVTRVNfVE9fTEVOR1RIKSA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0gOiBbXS5mb3JFYWNoO1xuIiwidmFyIHBhcmVudCA9IHJlcXVpcmUoJy4uLy4uL2VzL29iamVjdC9rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3Qua2V5cycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGguT2JqZWN0LmtleXM7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9yZWR1Y2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJlbnQ7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvaW5zdGFuY2UvcmV2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciByZXZlcnNlID0gcmVxdWlyZSgnLi4vYXJyYXkvdmlydHVhbC9yZXZlcnNlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIG93biA9IGl0LnJldmVyc2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5yZXZlcnNlKSA/IHJldmVyc2UgOiBvd247XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vLi4vbW9kdWxlcy9lcy5hcnJheS5yZXZlcnNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5JykucmV2ZXJzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSBbXS5yZXZlcnNlO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ25cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgdGhpcy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICByZXR1cm4gbmF0aXZlUmV2ZXJzZS5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9pbnN0YW5jZS9zbGljZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ZpcnR1YWwvc2xpY2UnKTtcblxudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgb3duID0gaXQuc2xpY2U7XG4gIHJldHVybiBpdCA9PT0gQXJyYXlQcm90b3R5cGUgfHwgKGl0IGluc3RhbmNlb2YgQXJyYXkgJiYgb3duID09PSBBcnJheVByb3RvdHlwZS5zbGljZSkgPyBzbGljZSA6IG93bjtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi8uLi9tb2R1bGVzL2VzLmFycmF5LnNsaWNlJyk7XG52YXIgZW50cnlWaXJ0dWFsID0gcmVxdWlyZSgnLi4vLi4vLi4vaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBlbnRyeVZpcnR1YWwoJ0FycmF5Jykuc2xpY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIGFycmF5TWV0aG9kVXNlc1RvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC11c2VzLXRvLWxlbmd0aCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG52YXIgVVNFU19UT19MRU5HVEggPSBhcnJheU1ldGhvZFVzZXNUb0xlbmd0aCgnc2xpY2UnLCB7IEFDQ0VTU09SUzogdHJ1ZSwgMDogMCwgMTogMiB9KTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBuYXRpdmVTbGljZSA9IFtdLnNsaWNlO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNsaWNlXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB8fCAhVVNFU19UT19MRU5HVEggfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmICh0eXBlb2YgQ29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZS5jYWxsKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCJ2YXIgcGFyZW50ID0gcmVxdWlyZSgnLi4vLi4vZXMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmVudDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi8uLi9pbnRlcm5hbHMvcGF0aCcpO1xuXG52YXIgT2JqZWN0ID0gcGF0aC5PYmplY3Q7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcblxuaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eS5zaGFtKSBkZWZpbmVQcm9wZXJ0eS5zaGFtID0gdHJ1ZTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZS5mXG59KTtcbiIsInZhciBwYXJlbnQgPSByZXF1aXJlKCcuLi8uLi9lcy9vYmplY3QvZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgcGF0aCA9IHJlcXVpcmUoJy4uLy4uL2ludGVybmFscy9wYXRoJyk7XG5cbnZhciBPYmplY3QgPSBwYXRoLk9iamVjdDtcblxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG59O1xuXG5pZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtKSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iuc2hhbSA9IHRydWU7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwiaW1wb3J0IHsgcEludCB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50LCBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuXG5jbGFzcyBTYXZlVHJpZ2dlckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmVsZW1lbnQgPSBwYXJhbXMuZWxlbWVudCB8fCBudWxsO1xuXHRcdHRoaXMudmFsdWUgPSBwYXJhbXMudmFsdWUgJiYgcGFyYW1zLnZhbHVlLnN1YnNjcmliZSA/IHBhcmFtcy52YWx1ZSA6IG51bGw7XG5cblx0XHRpZiAodGhpcy5lbGVtZW50KSB7XG5cdFx0XHRpZiAodGhpcy52YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmVsZW1lbnQuY3NzKCdkaXNwbGF5JywgJ2lubGluZS1ibG9jaycpO1xuXG5cdFx0XHRcdGlmIChwYXJhbXMudmVydGljYWxBbGlnbikge1xuXHRcdFx0XHRcdHRoaXMuZWxlbWVudC5jc3MoJ3ZlcnRpY2FsLWFsaWduJywgcGFyYW1zLnZlcnRpY2FsQWxpZ24pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5zZXRTdGF0ZSh0aGlzLnZhbHVlKCkpO1xuXG5cdFx0XHRcdHRoaXMuZGlzcG9zYWJsZS5wdXNoKHRoaXMudmFsdWUuc3Vic2NyaWJlKHRoaXMuc2V0U3RhdGUsIHRoaXMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZWxlbWVudC5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c2V0U3RhdGUodmFsdWUpIHtcblx0XHRzd2l0Y2ggKHBJbnQodmFsdWUpKSB7XG5cdFx0XHRjYXNlIFNhdmVTZXR0aW5nc1N0ZXAuVHJ1ZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuZXJyb3InKVxuXHRcdFx0XHRcdC5oaWRlKClcblx0XHRcdFx0XHQucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKVxuXHRcdFx0XHRcdC5lbmQoKVxuXHRcdFx0XHRcdC5maW5kKCcuc3VjY2VzcycpXG5cdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5GYWxzZVJlc3VsdDpcblx0XHRcdFx0dGhpcy5lbGVtZW50XG5cdFx0XHRcdFx0LmZpbmQoJy5hbmltYXRlZCwuc3VjY2VzcycpXG5cdFx0XHRcdFx0LmhpZGUoKVxuXHRcdFx0XHRcdC5yZW1vdmVDbGFzcygndmlzaWJsZScpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5lcnJvcicpXG5cdFx0XHRcdFx0LnNob3coKVxuXHRcdFx0XHRcdC5hZGRDbGFzcygndmlzaWJsZScpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlOlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmVycm9yLC5zdWNjZXNzJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJylcblx0XHRcdFx0XHQuZW5kKClcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHQuc2hvdygpXG5cdFx0XHRcdFx0LmFkZENsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBTYXZlU2V0dGluZ3NTdGVwLklkbGU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aGlzLmVsZW1lbnRcblx0XHRcdFx0XHQuZmluZCgnLmFuaW1hdGVkJylcblx0XHRcdFx0XHQuaGlkZSgpXG5cdFx0XHRcdFx0LmVuZCgpXG5cdFx0XHRcdFx0LmZpbmQoJy5lcnJvciwuc3VjY2VzcycpXG5cdFx0XHRcdFx0LnJlbW92ZUNsYXNzKCd2aXNpYmxlJyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoU2F2ZVRyaWdnZXJDb21wb25lbnQsICdTYXZlVHJpZ2dlckNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgY29tcG9uZW50RXhwb3J0SGVscGVyIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0JztcbmltcG9ydCB7IEFic3RyYWN0SW5wdXQgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3RJbnB1dCc7XG5cbmNsYXNzIElucHV0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoSW5wdXRDb21wb25lbnQsICdJbnB1dENvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGRlZmF1dE9wdGlvbnNBZnRlclJlbmRlciB9IGZyb20gJ0NvbW1vbi9VdGlscyc7XG5pbXBvcnQgeyBjb21wb25lbnRFeHBvcnRIZWxwZXIgfSBmcm9tICdDb21wb25lbnQvQWJzdHJhY3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbnB1dCB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdElucHV0JztcblxuY2xhc3MgU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5vcHRpb25zID0gcGFyYW1zLm9wdGlvbnMgfHwgJyc7XG5cblx0XHR0aGlzLm9wdGlvbnNUZXh0ID0gcGFyYW1zLm9wdGlvbnNUZXh0IHx8IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zVmFsdWUgPSBwYXJhbXMub3B0aW9uc1ZhbHVlIHx8IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zQ2FwdGlvbiA9IHBhcmFtcy5vcHRpb25zQ2FwdGlvbiB8fCBudWxsO1xuXG5cdFx0aWYgKHRoaXMub3B0aW9uc0NhcHRpb24pIHtcblx0XHRcdHRoaXMub3B0aW9uc0NhcHRpb24gPSBpMThuKHRoaXMub3B0aW9uc0NhcHRpb24pO1xuXHRcdH1cblxuXHRcdHRoaXMuZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyID0gZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTZWxlY3RDb21wb25lbnQsICdTZWxlY3RDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdFJhZGlvIH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0UmFkaW8nO1xuXG5jbGFzcyBSYWRpb0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0UmFkaW8ge31cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFJhZGlvQ29tcG9uZW50LCAnUmFkaW9Db21wb25lbnQnKTtcbiIsImltcG9ydCB7IGlzVW5kIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jb25zdCBERUZBVUxUX1JPV1MgPSA1O1xuXG5jbGFzcyBUZXh0QXJlYUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0SW5wdXQge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuXHQgKi9cblx0Y29uc3RydWN0b3IocGFyYW1zKSB7XG5cdFx0c3VwZXIocGFyYW1zKTtcblxuXHRcdHRoaXMucm93cyA9IHBhcmFtcy5yb3dzIHx8IERFRkFVTFRfUk9XUztcblx0XHR0aGlzLnNwZWxsY2hlY2sgPSBpc1VuZChwYXJhbXMuc3BlbGxjaGVjaykgPyBmYWxzZSA6ICEhcGFyYW1zLnNwZWxsY2hlY2s7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50RXhwb3J0SGVscGVyKFRleHRBcmVhQ29tcG9uZW50LCAnVGV4dEFyZWFDb21wb25lbnQnKTtcbiIsImltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdElucHV0IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0SW5wdXQnO1xuXG5jbGFzcyBEYXRlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RJbnB1dCB7fVxuXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnRFeHBvcnRIZWxwZXIoRGF0ZUNvbXBvbmVudCwgJ0RhdGVDb21wb25lbnQnKTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb21wb25lbnQsIGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5cbmNsYXNzIFNjcmlwdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Q29tcG9uZW50IHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHBhcmFtcykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHRwYXJhbXMuY29tcG9uZW50ICYmXG5cdFx0XHRwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXMgJiZcblx0XHRcdHBhcmFtcy5lbGVtZW50ICYmXG5cdFx0XHRwYXJhbXMuZWxlbWVudFswXSAmJlxuXHRcdFx0cGFyYW1zLmVsZW1lbnRbMF0ub3V0ZXJIVE1MXG5cdFx0KSB7XG5cdFx0XHRsZXQgc2NyaXB0ID0gcGFyYW1zLmVsZW1lbnRbMF0ub3V0ZXJIVE1MO1xuXHRcdFx0c2NyaXB0ID0gIXNjcmlwdCA/ICcnIDogc2NyaXB0LnJlcGxhY2UoLzx4LXNjcmlwdC9pLCAnPHNjcmlwdCcpLnJlcGxhY2UoLzxiPjxcXC9iPjxcXC94LXNjcmlwdD4vaSwgJzwvc2NyaXB0PicpO1xuXG5cdFx0XHRpZiAoc2NyaXB0KSB7XG5cdFx0XHRcdHBhcmFtcy5lbGVtZW50LnRleHQoJycpO1xuXHRcdFx0XHRwYXJhbXMuZWxlbWVudC5yZXBsYWNlV2l0aChcblx0XHRcdFx0XHQkKHNjcmlwdCkudGV4dChcblx0XHRcdFx0XHRcdHBhcmFtcy5jb21wb25lbnQudGVtcGxhdGVOb2Rlc1swXSAmJiBwYXJhbXMuY29tcG9uZW50LnRlbXBsYXRlTm9kZXNbMF0ubm9kZVZhbHVlXG5cdFx0XHRcdFx0XHRcdD8gcGFyYW1zLmNvbXBvbmVudC50ZW1wbGF0ZU5vZGVzWzBdLm5vZGVWYWx1ZVxuXHRcdFx0XHRcdFx0XHQ6ICcnXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFyYW1zLmVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihTY3JpcHRDb21wb25lbnQsICdTY3JpcHRDb21wb25lbnQnKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCB7IGNvbXBvbmVudEV4cG9ydEhlbHBlciB9IGZyb20gJ0NvbXBvbmVudC9BYnN0cmFjdCc7XG5pbXBvcnQgeyBBYnN0cmFjdENoZWNrYm94IH0gZnJvbSAnQ29tcG9uZW50L0Fic3RyYWN0Q2hlY2tib3gnO1xuXG5jbGFzcyBDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RDaGVja2JveCB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihwYXJhbXMpIHtcblx0XHRzdXBlcihwYXJhbXMpO1xuXG5cdFx0dGhpcy5hbmltYXRpb25Cb3ggPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyBmYWxzZVRpbWVvdXQ6IDIwMCB9KTtcblx0XHR0aGlzLmFuaW1hdGlvbkNoZWNrbWFyayA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7IGZhbHNlVGltZW91dDogMjAwIH0pO1xuXG5cdFx0dGhpcy5hbmltYXRpb25Cb3hTZXRUcnVlID0gXy5iaW5kKHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSwgdGhpcyk7XG5cdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmtTZXRUcnVlID0gXy5iaW5kKHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSwgdGhpcyk7XG5cblx0XHR0aGlzLmRpc3Bvc2FibGUucHVzaChcblx0XHRcdHRoaXMudmFsdWUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHR0aGlzLnRyaWdnZXJBbmltYXRpb24odmFsdWUpO1xuXHRcdFx0fSwgdGhpcylcblx0XHQpO1xuXHR9XG5cblx0YW5pbWF0aW9uQm94U2V0VHJ1ZSgpIHtcblx0XHR0aGlzLmFuaW1hdGlvbkJveCh0cnVlKTtcblx0fVxuXG5cdGFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUoKSB7XG5cdFx0dGhpcy5hbmltYXRpb25DaGVja21hcmsodHJ1ZSk7XG5cdH1cblxuXHR0cmlnZ2VyQW5pbWF0aW9uKGJveCkge1xuXHRcdGlmIChib3gpIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9uQm94U2V0VHJ1ZSgpO1xuXHRcdFx0Xy5kZWxheSh0aGlzLmFuaW1hdGlvbkNoZWNrbWFya1NldFRydWUsIDIwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYW5pbWF0aW9uQ2hlY2ttYXJrU2V0VHJ1ZSgpO1xuXHRcdFx0Xy5kZWxheSh0aGlzLmFuaW1hdGlvbkJveFNldFRydWUsIDIwMCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudEV4cG9ydEhlbHBlcihDaGVja2JveE1hdGVyaWFsRGVzaWduQ29tcG9uZW50LCAnQ2hlY2tib3hNYXRlcmlhbERlc2lnbkNvbXBvbmVudCcpO1xuIiwiaW1wb3J0IHdpbmRvdyBmcm9tICd3aW5kb3cnO1xuaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuaW1wb3J0IHByb2dyZXNzSnMgZnJvbSAncHJvZ3Jlc3NKcyc7XG5cbmltcG9ydCB7IHJvb3QgfSBmcm9tICdDb21tb24vTGlua3MnO1xuaW1wb3J0IHsgZ2V0Tm90aWZpY2F0aW9uIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBwSW50LCBpc05vcm1hbCwgaXNBcnJheSwgaW5BcnJheSwgaXNVbmQgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IENhcGFTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ2FwYSc7XG5pbXBvcnQgRG9tYWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0RvbWFpbic7XG5pbXBvcnQgUGx1Z2luU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BsdWdpbic7XG5pbXBvcnQgTGljZW5zZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9MaWNlbnNlJztcbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuaW1wb3J0IENvcmVTdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vQ29yZSc7XG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgU2V0dGluZ3NBZG1pblNjcmVlbiB9IGZyb20gJ1NjcmVlbi9BZG1pbi9TZXR0aW5ncyc7XG5pbXBvcnQgeyBMb2dpbkFkbWluU2NyZWVuIH0gZnJvbSAnU2NyZWVuL0FkbWluL0xvZ2luJztcblxuaW1wb3J0IHsgaGlkZUxvYWRpbmcsIHJvdXRlT2ZmLCBzZXRIYXNoLCBzdGFydFNjcmVlbnMgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcCB9IGZyb20gJ0FwcC9BYnN0cmFjdCc7XG5cbmNsYXNzIEFkbWluQXBwIGV4dGVuZHMgQWJzdHJhY3RBcHAge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcihSZW1vdGUpO1xuXHR9XG5cblx0cmVtb3RlKCkge1xuXHRcdHJldHVybiBSZW1vdGU7XG5cdH1cblxuXHRyZWxvYWREb21haW5MaXN0KCkge1xuXHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZyh0cnVlKTtcblx0XHRSZW1vdGUuZG9tYWluTGlzdCgocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHREb21haW5TdG9yZS5kb21haW5zLmxvYWRpbmcoZmFsc2UpO1xuXHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMoXG5cdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQsIChbZW5hYmxlZCwgYWxpYXNdLCBuYW1lKSA9PiAoe1xuXHRcdFx0XHRcdFx0bmFtZTogbmFtZSxcblx0XHRcdFx0XHRcdGRpc2FibGVkOiBrby5vYnNlcnZhYmxlKCFlbmFibGVkKSxcblx0XHRcdFx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdFx0XHRcdGRlbGV0ZUFjY2Vzczoga28ub2JzZXJ2YWJsZShmYWxzZSlcblx0XHRcdFx0XHR9KSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJlbG9hZFBsdWdpbkxpc3QoKSB7XG5cdFx0UGx1Z2luU3RvcmUucGx1Z2lucy5sb2FkaW5nKHRydWUpO1xuXHRcdFJlbW90ZS5wbHVnaW5MaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0UGx1Z2luU3RvcmUucGx1Z2lucyhcblx0XHRcdFx0XHRfLm1hcChkYXRhLlJlc3VsdCwgKGl0ZW0pID0+ICh7XG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLk5hbWUsXG5cdFx0XHRcdFx0XHRkaXNhYmxlZDoga28ub2JzZXJ2YWJsZSghaXRlbS5FbmFibGVkKSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyZWQ6IGtvLm9ic2VydmFibGUoISFpdGVtLkNvbmZpZ3VyZWQpXG5cdFx0XHRcdFx0fSkpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWxvYWRQYWNrYWdlc0xpc3QoKSB7XG5cdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzLmxvYWRpbmcodHJ1ZSk7XG5cdFx0UGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbCh0cnVlKTtcblx0XHRSZW1vdGUucGFja2FnZXNMaXN0KChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRQYWNrYWdlU3RvcmUucGFja2FnZXNSZWFsKCEhZGF0YS5SZXN1bHQuUmVhbCk7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc01haW5VcGRhdGFibGUoISFkYXRhLlJlc3VsdC5NYWluVXBkYXRhYmxlKTtcblxuXHRcdFx0XHRsZXQgbGlzdCA9IFtdO1xuXHRcdFx0XHRjb25zdCBsb2FkaW5nID0ge307XG5cblx0XHRcdFx0Xy5lYWNoKFBhY2thZ2VTdG9yZS5wYWNrYWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChpdGVtICYmIGl0ZW0ubG9hZGluZygpKSB7XG5cdFx0XHRcdFx0XHRsb2FkaW5nW2l0ZW0uZmlsZV0gPSBpdGVtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGlzQXJyYXkoZGF0YS5SZXN1bHQuTGlzdCkpIHtcblx0XHRcdFx0XHRsaXN0ID0gXy5jb21wYWN0KFxuXHRcdFx0XHRcdFx0Xy5tYXAoZGF0YS5SZXN1bHQuTGlzdCwgKGl0ZW0pID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGl0ZW0pIHtcblx0XHRcdFx0XHRcdFx0XHRpdGVtLmxvYWRpbmcgPSBrby5vYnNlcnZhYmxlKCFpc1VuZChsb2FkaW5nW2l0ZW0uZmlsZV0pKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gJ2NvcmUnID09PSBpdGVtLnR5cGUgJiYgIWl0ZW0uY2FuQmVJbnN0YWxsZWQgPyBudWxsIDogaXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcyhsaXN0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlc1JlYWwoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dXBkYXRlQ29yZURhdGEoKSB7XG5cdFx0Q29yZVN0b3JlLmNvcmVVcGRhdGluZyh0cnVlKTtcblx0XHRSZW1vdGUudXBkYXRlQ29yZURhdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVVcGRhdGluZyhmYWxzZSk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb24oJycpO1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKCcnKTtcblx0XHRcdENvcmVTdG9yZS5jb3JlUmVtb3RlUmVsZWFzZSgnJyk7XG5cdFx0XHRDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlKC0yKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlYWwodHJ1ZSk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlUmVhbChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZWxvYWRDb3JlRGF0YSgpIHtcblx0XHRDb3JlU3RvcmUuY29yZUNoZWNraW5nKHRydWUpO1xuXHRcdENvcmVTdG9yZS5jb3JlUmVhbCh0cnVlKTtcblx0XHRSZW1vdGUuY29yZURhdGEoKHJlc3VsdCwgZGF0YSkgPT4ge1xuXHRcdFx0Q29yZVN0b3JlLmNvcmVDaGVja2luZyhmYWxzZSk7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKCEhZGF0YS5SZXN1bHQuUmVhbCk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlQ2hhbm5lbChkYXRhLlJlc3VsdC5DaGFubmVsIHx8ICdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVUeXBlKGRhdGEuUmVzdWx0LlR5cGUgfHwgJ3N0YWJsZScpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVVwZGF0YWJsZSghIWRhdGEuUmVzdWx0LlVwZGF0YWJsZSk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlQWNjZXNzKCEhZGF0YS5SZXN1bHQuQWNjZXNzKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVXYXJuaW5nKCEhZGF0YS5SZXN1bHQuV2FybmluZyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbihkYXRhLlJlc3VsdC5WZXJzaW9uIHx8ICcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKGRhdGEuUmVzdWx0LlJlbW90ZVZlcnNpb24gfHwgJycpO1xuXHRcdFx0XHRDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2UoZGF0YS5SZXN1bHQuUmVtb3RlUmVsZWFzZSB8fCAnJyk7XG5cdFx0XHRcdENvcmVTdG9yZS5jb3JlVmVyc2lvbkNvbXBhcmUocEludChkYXRhLlJlc3VsdC5WZXJzaW9uQ29tcGFyZSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZWFsKGZhbHNlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVDaGFubmVsKCdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVUeXBlKCdzdGFibGUnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVXYXJuaW5nKGZhbHNlKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVSZW1vdGVSZWxlYXNlKCcnKTtcblx0XHRcdFx0Q29yZVN0b3JlLmNvcmVWZXJzaW9uQ29tcGFyZSgtMik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtib29sZWFuPX0gZm9yY2UgPSBmYWxzZVxuXHQgKi9cblx0cmVsb2FkTGljZW5zaW5nKGZvcmNlID0gZmFsc2UpIHtcblx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nUHJvY2Vzcyh0cnVlKTtcblx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUVycm9yKCcnKTtcblx0XHRSZW1vdGUubGljZW5zaW5nKChyZXN1bHQsIGRhdGEpID0+IHtcblx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmdQcm9jZXNzKGZhbHNlKTtcblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBpc05vcm1hbChkYXRhLlJlc3VsdC5FeHBpcmVkKSkge1xuXHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZVZhbGlkKHRydWUpO1xuXHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zZUV4cGlyZWQocEludChkYXRhLlJlc3VsdC5FeHBpcmVkKSk7XG5cdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoJycpO1xuXHRcdFx0XHRMaWNlbnNlU3RvcmUubGljZW5zaW5nKHRydWUpO1xuXHRcdFx0XHRBcHBTdG9yZS5wcmVtKHRydWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGRhdGEgJiZcblx0XHRcdFx0XHRkYXRhLkVycm9yQ29kZSAmJlxuXHRcdFx0XHRcdC0xIDwgaW5BcnJheShwSW50KGRhdGEuRXJyb3JDb2RlKSwgW05vdGlmaWNhdGlvbi5MaWNlbnNpbmdTZXJ2ZXJJc1VuYXZhaWxhYmxlLCBOb3RpZmljYXRpb24uTGljZW5zaW5nRXhwaXJlZF0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNlRXJyb3IoZ2V0Tm90aWZpY2F0aW9uKHBJbnQoZGF0YS5FcnJvckNvZGUpKSk7XG5cdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2luZyh0cnVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuQWJvcnQgPT09IHJlc3VsdCkge1xuXHRcdFx0XHRcdFx0TGljZW5zZVN0b3JlLmxpY2Vuc2VFcnJvcihnZXROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uLkxpY2Vuc2luZ1NlcnZlcklzVW5hdmFpbGFibGUpKTtcblx0XHRcdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcodHJ1ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdExpY2Vuc2VTdG9yZS5saWNlbnNpbmcoZmFsc2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sIGZvcmNlKTtcblx0fVxuXG5cdGJvb3RlbmQoYm9vdGVuZENhbGxiYWNrID0gbnVsbCkge1xuXHRcdGlmIChwcm9ncmVzc0pzKSB7XG5cdFx0XHRwcm9ncmVzc0pzLmVuZCgpO1xuXHRcdH1cblxuXHRcdGlmIChib290ZW5kQ2FsbGJhY2spIHtcblx0XHRcdGJvb3RlbmRDYWxsYmFjaygpO1xuXHRcdH1cblx0fVxuXG5cdGJvb3RzdGFydCgpIHtcblx0XHRzdXBlci5ib290c3RhcnQoKTtcblxuXHRcdEFwcFN0b3JlLnBvcHVsYXRlKCk7XG5cdFx0Q2FwYVN0b3JlLnBvcHVsYXRlKCk7XG5cblx0XHRoaWRlTG9hZGluZygpO1xuXG5cdFx0aWYgKCFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnYWxsb3dBZG1pblBhbmVsJykpIHtcblx0XHRcdHJvdXRlT2ZmKCk7XG5cdFx0XHRzZXRIYXNoKHJvb3QoKSwgdHJ1ZSk7XG5cdFx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0XHRfLmRlZmVyKCgpID0+IHtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLyc7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBdXRoJykpIHtcblx0XHRcdFx0c3RhcnRTY3JlZW5zKFtTZXR0aW5nc0FkbWluU2NyZWVuXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGFydFNjcmVlbnMoW0xvZ2luQWRtaW5TY3JlZW5dKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmJvb3RlbmQoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQWRtaW5BcHAoKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIFNlcnZlclNlY3VyZSwgUG9ydHMsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBJTUFQX0RFRkFVTFRfUE9SVCwgU0lFVkVfREVGQVVMVF9QT1JULCBTTVRQX0RFRkFVTFRfUE9SVCB9IGZyb20gJ0NvbW1vbi9Db25zdHMnO1xuaW1wb3J0IHsgYk1vYmlsZURldmljZSB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IHRyaW0sIHBJbnQsIHBTdHJpbmcgfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IENhcGFBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuaW1wb3J0IHsgcG9wdXAsIGNvbW1hbmQgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkBwb3B1cCh7XG5cdG5hbWU6ICdWaWV3L1BvcHVwL0RvbWFpbicsXG5cdHRlbXBsYXRlSUQ6ICdQb3B1cHNEb21haW4nXG59KVxuY2xhc3MgRG9tYWluUG9wdXBWaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmVkaXQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuc2F2aW5nRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnBhZ2UgPSBrby5vYnNlcnZhYmxlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLnRlc3RpbmcgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdEb25lID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yRGVzYyA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKCcnKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAoIXZhbHVlKSB7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvckRlc2MoJycpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlU2VydmVyRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNtdHBTZXJ2ZXJGb2N1cyA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuaW1hcFNlcnZlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuaW1hcFBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgSU1BUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuaW1hcFNlY3VyZSA9IGtvLm9ic2VydmFibGUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuaW1hcFNob3J0TG9naW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnVzZVNpZXZlID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZUFsbG93UmF3ID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zaWV2ZVNlcnZlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc2lldmVQb3J0ID0ga28ub2JzZXJ2YWJsZSgnJyArIFNJRVZFX0RFRkFVTFRfUE9SVCk7XG5cdFx0dGhpcy5zaWV2ZVNlY3VyZSA9IGtvLm9ic2VydmFibGUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuc210cFNlcnZlciA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuc210cFBvcnQgPSBrby5vYnNlcnZhYmxlKCcnICsgU01UUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuc210cFNlY3VyZSA9IGtvLm9ic2VydmFibGUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuc210cFNob3J0TG9naW4gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnNtdHBBdXRoID0ga28ub2JzZXJ2YWJsZSh0cnVlKTtcblx0XHR0aGlzLnNtdHBQaHBNYWlsID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy53aGl0ZUxpc3QgPSBrby5vYnNlcnZhYmxlKCcnKTtcblx0XHR0aGlzLmFsaWFzTmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5lbmFibGVTbWFydFBvcnRzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFsbG93U2lldmUgPSBrby5jb21wdXRlZCgoKSA9PiBDYXBhQWRtaW5TdG9yZS5maWx0ZXJzKCkgJiYgQ2FwYUFkbWluU3RvcmUuc2lldmUoKSk7XG5cblx0XHR0aGlzLmhlYWRlclRleHQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBuYW1lID0gdGhpcy5uYW1lKCksXG5cdFx0XHRcdGFsaWFzTmFtZSA9IHRoaXMuYWxpYXNOYW1lKCk7XG5cblx0XHRcdGxldCByZXN1bHQgPSAnJztcblxuXHRcdFx0aWYgKHRoaXMuZWRpdCgpKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGkxOG4oJ1BPUFVQU19ET01BSU4vVElUTEVfRURJVF9ET01BSU4nLCB7ICdOQU1FJzogbmFtZSB9KTtcblx0XHRcdFx0aWYgKGFsaWFzTmFtZSkge1xuXHRcdFx0XHRcdHJlc3VsdCArPSAnIOKGkCAnICsgYWxpYXNOYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPVxuXHRcdFx0XHRcdCcnID09PSBuYW1lXG5cdFx0XHRcdFx0XHQ/IGkxOG4oJ1BPUFVQU19ET01BSU4vVElUTEVfQUREX0RPTUFJTicpXG5cdFx0XHRcdFx0XHQ6IGkxOG4oJ1BPUFVQU19ET01BSU4vVElUTEVfQUREX0RPTUFJTl9XSVRIX05BTUUnLCB7ICdOQU1FJzogbmFtZSB9KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KTtcblxuXHRcdHRoaXMuZG9tYWluRGVzYyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IG5hbWUgPSB0aGlzLm5hbWUoKTtcblx0XHRcdHJldHVybiAhdGhpcy5lZGl0KCkgJiYgbmFtZSA/IGkxOG4oJ1BPUFVQU19ET01BSU4vTkVXX0RPTUFJTl9ERVNDJywgeyAnTkFNRSc6ICcqQCcgKyBuYW1lIH0pIDogJyc7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmRvbWFpbklzQ29tcHV0ZWQgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB1c2VQaHBNYWlsID0gdGhpcy5zbXRwUGhwTWFpbCgpLFxuXHRcdFx0XHRhbGxvd1NpZXZlID0gdGhpcy5hbGxvd1NpZXZlKCksXG5cdFx0XHRcdHVzZVNpZXZlID0gdGhpcy51c2VTaWV2ZSgpO1xuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQnJyAhPT0gdGhpcy5uYW1lKCkgJiZcblx0XHRcdFx0JycgIT09IHRoaXMuaW1hcFNlcnZlcigpICYmXG5cdFx0XHRcdCcnICE9PSB0aGlzLmltYXBQb3J0KCkgJiZcblx0XHRcdFx0KGFsbG93U2lldmUgJiYgdXNlU2lldmUgPyAnJyAhPT0gdGhpcy5zaWV2ZVNlcnZlcigpICYmICcnICE9PSB0aGlzLnNpZXZlUG9ydCgpIDogdHJ1ZSkgJiZcblx0XHRcdFx0KCgnJyAhPT0gdGhpcy5zbXRwU2VydmVyKCkgJiYgJycgIT09IHRoaXMuc210cFBvcnQoKSkgfHwgdXNlUGhwTWFpbClcblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmNhbkJlVGVzdGVkID0ga28uY29tcHV0ZWQoKCkgPT4gIXRoaXMudGVzdGluZygpICYmIHRoaXMuZG9tYWluSXNDb21wdXRlZCgpKTtcblx0XHR0aGlzLmNhbkJlU2F2ZWQgPSBrby5jb21wdXRlZCgoKSA9PiAhdGhpcy5zYXZpbmcoKSAmJiB0aGlzLmRvbWFpbklzQ29tcHV0ZWQoKSk7XG5cblx0XHR0aGlzLnBhZ2Uuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHQvLyBzbWFydCBmb3JtIGltcHJvdmVtZW50c1xuXHRcdHRoaXMuaW1hcFNlcnZlckZvY3VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiAnJyAhPT0gdGhpcy5uYW1lKCkgJiYgJycgPT09IHRoaXMuaW1hcFNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuaW1hcFNlcnZlcih0aGlzLm5hbWUoKS5yZXBsYWNlKC9bLl0/WypdWy5dPy9nLCAnJykpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zaWV2ZVNlcnZlckZvY3VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiAnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiYgJycgPT09IHRoaXMuc2lldmVTZXJ2ZXIoKSkge1xuXHRcdFx0XHR0aGlzLnNpZXZlU2VydmVyKHRoaXMuaW1hcFNlcnZlcigpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuc210cFNlcnZlckZvY3VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh2YWx1ZSAmJiAnJyAhPT0gdGhpcy5pbWFwU2VydmVyKCkgJiYgJycgPT09IHRoaXMuc210cFNlcnZlcigpKSB7XG5cdFx0XHRcdHRoaXMuc210cFNlcnZlcih0aGlzLmltYXBTZXJ2ZXIoKS5yZXBsYWNlKC9pbWFwL2dpLCAnc210cCcpKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaW1hcFNlY3VyZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5lbmFibGVTbWFydFBvcnRzKCkpIHtcblx0XHRcdFx0Y29uc3QgcG9ydCA9IHBJbnQodGhpcy5pbWFwUG9ydCgpKTtcblx0XHRcdFx0c3dpdGNoIChwU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNhc2UgJzAnOlxuXHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLkltYXBTc2wgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5pbWFwUG9ydChwU3RyaW5nKFBvcnRzLkltYXApKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLkltYXAgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5pbWFwUG9ydChwU3RyaW5nKFBvcnRzLkltYXBTc2wpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy5zbXRwU2VjdXJlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdGlmICh0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoKSkge1xuXHRcdFx0XHRjb25zdCBwb3J0ID0gcEludCh0aGlzLnNtdHBQb3J0KCkpO1xuXHRcdFx0XHRzd2l0Y2ggKHBTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdFx0XHRpZiAoUG9ydHMuU210cFNzbCA9PT0gcG9ydCB8fCBQb3J0cy5TbXRwU3RhcnRUbHMgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHApKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0aWYgKFBvcnRzLlNtdHAgPT09IHBvcnQgfHwgUG9ydHMuU210cFN0YXJ0VGxzID09PSBwb3J0KSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc210cFBvcnQocFN0cmluZyhQb3J0cy5TbXRwU3NsKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICcyJzpcblx0XHRcdFx0XHRcdGlmIChQb3J0cy5TbXRwID09PSBwb3J0IHx8IFBvcnRzLlNtdHBTc2wgPT09IHBvcnQpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zbXRwUG9ydChwU3RyaW5nKFBvcnRzLlNtdHBTdGFydFRscykpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gc2VsZi5jYW5CZVNhdmVkKCkpXG5cdGNyZWF0ZU9yQWRkQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNhdmluZyh0cnVlKTtcblx0XHRSZW1vdGUuY3JlYXRlT3JVcGRhdGVEb21haW4oXG5cdFx0XHRfLmJpbmQodGhpcy5vbkRvbWFpbkNyZWF0ZU9yU2F2ZVJlc3BvbnNlLCB0aGlzKSxcblx0XHRcdCF0aGlzLmVkaXQoKSxcblx0XHRcdHRoaXMubmFtZSgpLFxuXG5cdFx0XHR0aGlzLmltYXBTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5pbWFwUG9ydCgpKSxcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSgpLFxuXHRcdFx0dGhpcy5pbWFwU2hvcnRMb2dpbigpLFxuXG5cdFx0XHR0aGlzLnVzZVNpZXZlKCksXG5cdFx0XHR0aGlzLnNpZXZlQWxsb3dSYXcoKSxcblx0XHRcdHRoaXMuc2lldmVTZXJ2ZXIoKSxcblx0XHRcdHBJbnQodGhpcy5zaWV2ZVBvcnQoKSksXG5cdFx0XHR0aGlzLnNpZXZlU2VjdXJlKCksXG5cblx0XHRcdHRoaXMuc210cFNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNtdHBQb3J0KCkpLFxuXHRcdFx0dGhpcy5zbXRwU2VjdXJlKCksXG5cdFx0XHR0aGlzLnNtdHBTaG9ydExvZ2luKCksXG5cdFx0XHR0aGlzLnNtdHBBdXRoKCksXG5cdFx0XHR0aGlzLnNtdHBQaHBNYWlsKCksXG5cblx0XHRcdHRoaXMud2hpdGVMaXN0KClcblx0XHQpO1xuXHR9XG5cblx0QGNvbW1hbmQoKHNlbGYpID0+IHNlbGYuY2FuQmVUZXN0ZWQoKSlcblx0dGVzdENvbm5lY3Rpb25Db21tYW5kKCkge1xuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXG5cdFx0dGhpcy50ZXN0aW5nRG9uZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZXN0Q29ubmVjdGlvbkZvckRvbWFpbihcblx0XHRcdF8uYmluZCh0aGlzLm9uVGVzdENvbm5lY3Rpb25SZXNwb25zZSwgdGhpcyksXG5cdFx0XHR0aGlzLm5hbWUoKSxcblxuXHRcdFx0dGhpcy5pbWFwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuaW1hcFBvcnQoKSksXG5cdFx0XHR0aGlzLmltYXBTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy51c2VTaWV2ZSgpLFxuXHRcdFx0dGhpcy5zaWV2ZVNlcnZlcigpLFxuXHRcdFx0cEludCh0aGlzLnNpZXZlUG9ydCgpKSxcblx0XHRcdHRoaXMuc2lldmVTZWN1cmUoKSxcblxuXHRcdFx0dGhpcy5zbXRwU2VydmVyKCksXG5cdFx0XHRwSW50KHRoaXMuc210cFBvcnQoKSksXG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUoKSxcblx0XHRcdHRoaXMuc210cEF1dGgoKSxcblx0XHRcdHRoaXMuc210cFBocE1haWwoKVxuXHRcdCk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdHdoaXRlTGlzdENvbW1hbmQoKSB7XG5cdFx0dGhpcy5wYWdlKCd3aGl0ZS1saXN0Jyk7XG5cdH1cblxuXHRAY29tbWFuZCgpXG5cdGJhY2tDb21tYW5kKCkge1xuXHRcdHRoaXMucGFnZSgnbWFpbicpO1xuXHR9XG5cblx0QGNvbW1hbmQoKVxuXHRzaWV2ZUNvbW1hbmQoKSB7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKCF0aGlzLnNpZXZlU2V0dGluZ3MoKSk7XG5cdFx0dGhpcy5jbGVhclRlc3RpbmcoKTtcblx0fVxuXG5cdG9uVGVzdENvbm5lY3Rpb25SZXNwb25zZShzUmVzdWx0LCBvRGF0YSkge1xuXHRcdHRoaXMudGVzdGluZyhmYWxzZSk7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRsZXQgYkltYXAgPSBmYWxzZSxcblx0XHRcdFx0YlNpZXZlID0gZmFsc2U7XG5cblx0XHRcdHRoaXMudGVzdGluZ0RvbmUodHJ1ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IodHJ1ZSAhPT0gb0RhdGEuUmVzdWx0LkltYXApO1xuXHRcdFx0dGhpcy50ZXN0aW5nU2lldmVFcnJvcih0cnVlICE9PSBvRGF0YS5SZXN1bHQuU2lldmUpO1xuXHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yKHRydWUgIT09IG9EYXRhLlJlc3VsdC5TbXRwKTtcblxuXHRcdFx0aWYgKHRoaXMudGVzdGluZ0ltYXBFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5JbWFwKSB7XG5cdFx0XHRcdGJJbWFwID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nSW1hcEVycm9yRGVzYygnJyk7XG5cdFx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvckRlc2Mob0RhdGEuUmVzdWx0LkltYXApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy50ZXN0aW5nU2lldmVFcnJvcigpICYmIG9EYXRhLlJlc3VsdC5TaWV2ZSkge1xuXHRcdFx0XHRiU2lldmUgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTaWV2ZUVycm9yRGVzYygnJyk7XG5cdFx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3JEZXNjKG9EYXRhLlJlc3VsdC5TaWV2ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnRlc3RpbmdTbXRwRXJyb3IoKSAmJiBvRGF0YS5SZXN1bHQuU210cCkge1xuXHRcdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3JEZXNjKCcnKTtcblx0XHRcdFx0dGhpcy50ZXN0aW5nU210cEVycm9yRGVzYyhvRGF0YS5SZXN1bHQuU210cCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnNpZXZlU2V0dGluZ3MoKSkge1xuXHRcdFx0XHRpZiAoIWJTaWV2ZSAmJiBiSW1hcCkge1xuXHRcdFx0XHRcdHRoaXMuc2lldmVTZXR0aW5ncyhmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYlNpZXZlICYmICFiSW1hcCkge1xuXHRcdFx0XHR0aGlzLnNpZXZlU2V0dGluZ3ModHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGVzdGluZ0ltYXBFcnJvcih0cnVlKTtcblx0XHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLnRlc3RpbmdTbXRwRXJyb3IodHJ1ZSk7XG5cdFx0XHR0aGlzLnNpZXZlU2V0dGluZ3MoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdG9uRG9tYWluQ3JlYXRlT3JTYXZlUmVzcG9uc2Uoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHR0aGlzLnNhdmluZyhmYWxzZSk7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEpIHtcblx0XHRcdGlmIChvRGF0YS5SZXN1bHQpIHtcblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkRG9tYWluTGlzdCgpO1xuXHRcdFx0XHR0aGlzLmNsb3NlQ29tbWFuZCgpO1xuXHRcdFx0fSBlbHNlIGlmIChOb3RpZmljYXRpb24uRG9tYWluQWxyZWFkeUV4aXN0cyA9PT0gb0RhdGEuRXJyb3JDb2RlKSB7XG5cdFx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL0RPTUFJTl9BTFJFQURZX0VYSVNUUycpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zYXZpbmdFcnJvcihpMThuKCdFUlJPUlMvVU5LTk9XTl9FUlJPUicpKTtcblx0XHR9XG5cdH1cblxuXHRjbGVhclRlc3RpbmcoKSB7XG5cdFx0dGhpcy50ZXN0aW5nKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdEb25lKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RpbmdJbWFwRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NpZXZlRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdGluZ1NtdHBFcnJvcihmYWxzZSk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblx0fVxuXG5cdG9uU2hvdyhvRG9tYWluKSB7XG5cdFx0dGhpcy5zYXZpbmcoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblxuXHRcdHRoaXMuY2xlYXJUZXN0aW5nKCk7XG5cblx0XHR0aGlzLmNsZWFyRm9ybSgpO1xuXHRcdGlmIChvRG9tYWluKSB7XG5cdFx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHMoZmFsc2UpO1xuXG5cdFx0XHR0aGlzLmVkaXQodHJ1ZSk7XG5cblx0XHRcdHRoaXMubmFtZSh0cmltKG9Eb21haW4uTmFtZSkpO1xuXHRcdFx0dGhpcy5pbWFwU2VydmVyKHRyaW0ob0RvbWFpbi5JbmNIb3N0KSk7XG5cdFx0XHR0aGlzLmltYXBQb3J0KCcnICsgcEludChvRG9tYWluLkluY1BvcnQpKTtcblx0XHRcdHRoaXMuaW1hcFNlY3VyZSh0cmltKG9Eb21haW4uSW5jU2VjdXJlKSk7XG5cdFx0XHR0aGlzLmltYXBTaG9ydExvZ2luKCEhb0RvbWFpbi5JbmNTaG9ydExvZ2luKTtcblx0XHRcdHRoaXMudXNlU2lldmUoISFvRG9tYWluLlVzZVNpZXZlKTtcblx0XHRcdHRoaXMuc2lldmVBbGxvd1JhdyghIW9Eb21haW4uU2lldmVBbGxvd1Jhdyk7XG5cdFx0XHR0aGlzLnNpZXZlU2VydmVyKHRyaW0ob0RvbWFpbi5TaWV2ZUhvc3QpKTtcblx0XHRcdHRoaXMuc2lldmVQb3J0KCcnICsgcEludChvRG9tYWluLlNpZXZlUG9ydCkpO1xuXHRcdFx0dGhpcy5zaWV2ZVNlY3VyZSh0cmltKG9Eb21haW4uU2lldmVTZWN1cmUpKTtcblx0XHRcdHRoaXMuc210cFNlcnZlcih0cmltKG9Eb21haW4uT3V0SG9zdCkpO1xuXHRcdFx0dGhpcy5zbXRwUG9ydCgnJyArIHBJbnQob0RvbWFpbi5PdXRQb3J0KSk7XG5cdFx0XHR0aGlzLnNtdHBTZWN1cmUodHJpbShvRG9tYWluLk91dFNlY3VyZSkpO1xuXHRcdFx0dGhpcy5zbXRwU2hvcnRMb2dpbighIW9Eb21haW4uT3V0U2hvcnRMb2dpbik7XG5cdFx0XHR0aGlzLnNtdHBBdXRoKCEhb0RvbWFpbi5PdXRBdXRoKTtcblx0XHRcdHRoaXMuc210cFBocE1haWwoISFvRG9tYWluLk91dFVzZVBocE1haWwpO1xuXHRcdFx0dGhpcy53aGl0ZUxpc3QodHJpbShvRG9tYWluLldoaXRlTGlzdCkpO1xuXHRcdFx0dGhpcy5hbGlhc05hbWUodHJpbShvRG9tYWluLkFsaWFzTmFtZSkpO1xuXG5cdFx0XHR0aGlzLmVuYWJsZVNtYXJ0UG9ydHModHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93V2l0aERlbGF5KCkge1xuXHRcdGlmICgnJyA9PT0gdGhpcy5uYW1lKCkgJiYgIWJNb2JpbGVEZXZpY2UpIHtcblx0XHRcdHRoaXMubmFtZS5mb2N1c2VkKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdGNsZWFyRm9ybSgpIHtcblx0XHR0aGlzLmVkaXQoZmFsc2UpO1xuXG5cdFx0dGhpcy5wYWdlKCdtYWluJyk7XG5cdFx0dGhpcy5zaWV2ZVNldHRpbmdzKGZhbHNlKTtcblxuXHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyhmYWxzZSk7XG5cblx0XHR0aGlzLnNhdmluZ0Vycm9yKCcnKTtcblxuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQoZmFsc2UpO1xuXG5cdFx0dGhpcy5pbWFwU2VydmVyKCcnKTtcblx0XHR0aGlzLmltYXBQb3J0KCcnICsgSU1BUF9ERUZBVUxUX1BPUlQpO1xuXHRcdHRoaXMuaW1hcFNlY3VyZShTZXJ2ZXJTZWN1cmUuTm9uZSk7XG5cdFx0dGhpcy5pbWFwU2hvcnRMb2dpbihmYWxzZSk7XG5cblx0XHR0aGlzLnVzZVNpZXZlKGZhbHNlKTtcblx0XHR0aGlzLnNpZXZlQWxsb3dSYXcoZmFsc2UpO1xuXHRcdHRoaXMuc2lldmVTZXJ2ZXIoJycpO1xuXHRcdHRoaXMuc2lldmVQb3J0KCcnICsgU0lFVkVfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNpZXZlU2VjdXJlKFNlcnZlclNlY3VyZS5Ob25lKTtcblxuXHRcdHRoaXMuc210cFNlcnZlcignJyk7XG5cdFx0dGhpcy5zbXRwUG9ydCgnJyArIFNNVFBfREVGQVVMVF9QT1JUKTtcblx0XHR0aGlzLnNtdHBTZWN1cmUoU2VydmVyU2VjdXJlLk5vbmUpO1xuXHRcdHRoaXMuc210cFNob3J0TG9naW4oZmFsc2UpO1xuXHRcdHRoaXMuc210cEF1dGgodHJ1ZSk7XG5cdFx0dGhpcy5zbXRwUGhwTWFpbChmYWxzZSk7XG5cblx0XHR0aGlzLndoaXRlTGlzdCgnJyk7XG5cdFx0dGhpcy5hbGlhc05hbWUoJycpO1xuXHRcdHRoaXMuZW5hYmxlU21hcnRQb3J0cyh0cnVlKTtcblx0fVxufVxuXG5leHBvcnQgeyBEb21haW5Qb3B1cFZpZXcsIERvbWFpblBvcHVwVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgeyBhZGRTZXR0aW5nc1ZpZXdNb2RlbCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IHJ1blNldHRpbmdzVmlld01vZGVsSG9va3MgfSBmcm9tICdDb21tb24vUGx1Z2lucyc7XG5cbmltcG9ydCB7IEFic3RyYWN0U2V0dGluZ3NTY3JlZW4gfSBmcm9tICdTY3JlZW4vQWJzdHJhY3RTZXR0aW5ncyc7XG5cbmltcG9ydCB7IEdlbmVyYWxBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vR2VuZXJhbCc7XG5pbXBvcnQgeyBEb21haW5zQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL0RvbWFpbnMnO1xuaW1wb3J0IHsgTG9naW5BZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vTG9naW4nO1xuaW1wb3J0IHsgQ29udGFjdHNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vQ29udGFjdHMnO1xuaW1wb3J0IHsgU2VjdXJpdHlBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vU2VjdXJpdHknO1xuaW1wb3J0IHsgU29jaWFsQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL1NvY2lhbCc7XG5pbXBvcnQgeyBQbHVnaW5zQWRtaW5TZXR0aW5ncyB9IGZyb20gJ1NldHRpbmdzL0FkbWluL1BsdWdpbnMnO1xuaW1wb3J0IHsgUGFja2FnZXNBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vUGFja2FnZXMnO1xuaW1wb3J0IHsgQWJvdXRBZG1pblNldHRpbmdzIH0gZnJvbSAnU2V0dGluZ3MvQWRtaW4vQWJvdXQnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IE1lbnVTZXR0aW5nc0FkbWluVmlldyB9IGZyb20gJ1ZpZXcvQWRtaW4vU2V0dGluZ3MvTWVudSc7XG5pbXBvcnQgeyBQYW5lU2V0dGluZ3NBZG1pblZpZXcgfSBmcm9tICdWaWV3L0FkbWluL1NldHRpbmdzL1BhbmUnO1xuXG5jbGFzcyBTZXR0aW5nc0FkbWluU2NyZWVuIGV4dGVuZHMgQWJzdHJhY3RTZXR0aW5nc1NjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFtNZW51U2V0dGluZ3NBZG1pblZpZXcsIFBhbmVTZXR0aW5nc0FkbWluVmlld10pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb249fSBmQ2FsbGJhY2sgPSBudWxsXG5cdCAqL1xuXHRzZXR1cFNldHRpbmdzKGZDYWxsYmFjayA9IG51bGwpIHtcblx0XHRsZXQgYnJhbmRpbmcgPSBudWxsLFxuXHRcdFx0bGljZW5zaW5nID0gbnVsbDtcblxuXHRcdGlmIChSTF9DT01NVU5JVFkpIHtcblx0XHRcdGJyYW5kaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vQnJhbmRpbmcnKS5kZWZhdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmFuZGluZyA9IHJlcXVpcmUoJ1NldHRpbmdzL0FkbWluL1ByZW0vQnJhbmRpbmcnKS5kZWZhdWx0O1xuXHRcdFx0bGljZW5zaW5nID0gcmVxdWlyZSgnU2V0dGluZ3MvQWRtaW4vUHJlbS9MaWNlbnNpbmcnKS5kZWZhdWx0O1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0R2VuZXJhbEFkbWluU2V0dGluZ3MsXG5cdFx0XHQnQWRtaW5TZXR0aW5nc0dlbmVyYWwnLFxuXHRcdFx0J1RBQlNfTEFCRUxTL0xBQkVMX0dFTkVSQUxfTkFNRScsXG5cdFx0XHQnZ2VuZXJhbCcsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKERvbWFpbnNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc0RvbWFpbnMnLCAnVEFCU19MQUJFTFMvTEFCRUxfRE9NQUlOU19OQU1FJywgJ2RvbWFpbnMnKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKExvZ2luQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NMb2dpbicsICdUQUJTX0xBQkVMUy9MQUJFTF9MT0dJTl9OQU1FJywgJ2xvZ2luJyk7XG5cblx0XHRpZiAoYnJhbmRpbmcpIHtcblx0XHRcdGFkZFNldHRpbmdzVmlld01vZGVsKGJyYW5kaW5nLCAnQWRtaW5TZXR0aW5nc0JyYW5kaW5nJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0JSQU5ESU5HX05BTUUnLCAnYnJhbmRpbmcnKTtcblx0XHR9XG5cblx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChDb250YWN0c0FkbWluU2V0dGluZ3MsICdBZG1pblNldHRpbmdzQ29udGFjdHMnLCAnVEFCU19MQUJFTFMvTEFCRUxfQ09OVEFDVFNfTkFNRScsICdjb250YWN0cycpO1xuXG5cdFx0YWRkU2V0dGluZ3NWaWV3TW9kZWwoU2VjdXJpdHlBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1NlY3VyaXR5JywgJ1RBQlNfTEFCRUxTL0xBQkVMX1NFQ1VSSVRZX05BTUUnLCAnc2VjdXJpdHknKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFxuXHRcdFx0U29jaWFsQWRtaW5TZXR0aW5ncyxcblx0XHRcdCdBZG1pblNldHRpbmdzU29jaWFsJyxcblx0XHRcdCdUQUJTX0xBQkVMUy9MQUJFTF9JTlRFR1JBVElPTl9OQU1FJyxcblx0XHRcdCdpbnRlZ3JhdGlvbnMnXG5cdFx0KTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFBsdWdpbnNBZG1pblNldHRpbmdzLCAnQWRtaW5TZXR0aW5nc1BsdWdpbnMnLCAnVEFCU19MQUJFTFMvTEFCRUxfUExVR0lOU19OQU1FJywgJ3BsdWdpbnMnKTtcblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKFBhY2thZ2VzQWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NQYWNrYWdlcycsICdUQUJTX0xBQkVMUy9MQUJFTF9QQUNLQUdFU19OQU1FJywgJ3BhY2thZ2VzJyk7XG5cblx0XHRpZiAobGljZW5zaW5nKSB7XG5cdFx0XHRhZGRTZXR0aW5nc1ZpZXdNb2RlbChsaWNlbnNpbmcsICdBZG1pblNldHRpbmdzTGljZW5zaW5nJywgJ1RBQlNfTEFCRUxTL0xBQkVMX0xJQ0VOU0lOR19OQU1FJywgJ2xpY2Vuc2luZycpO1xuXHRcdH1cblxuXHRcdGFkZFNldHRpbmdzVmlld01vZGVsKEFib3V0QWRtaW5TZXR0aW5ncywgJ0FkbWluU2V0dGluZ3NBYm91dCcsICdUQUJTX0xBQkVMUy9MQUJFTF9BQk9VVF9OQU1FJywgJ2Fib3V0Jyk7XG5cblx0XHRydW5TZXR0aW5nc1ZpZXdNb2RlbEhvb2tzKHRydWUpO1xuXG5cdFx0aWYgKGZDYWxsYmFjaykge1xuXHRcdFx0ZkNhbGxiYWNrKCk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBTZXR0aW5nc0FkbWluU2NyZWVuLCBTZXR0aW5nc0FkbWluU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHtcblx0dHJpbSxcblx0cEludCxcblx0Ym9vbFRvQWpheCxcblx0c2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sXG5cdGNoYW5nZVRoZW1lLFxuXHRjb252ZXJ0VGhlbWVOYW1lLFxuXHRjb252ZXJ0TGFuZ05hbWVcbn0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHJlbG9hZCBhcyB0cmFuc2xhdG9yUmVsb2FkIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgcGhwSW5mbyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5pbXBvcnQgeyBzaG93U2NyZWVuUG9wdXAgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5pbXBvcnQgVGhlbWVTdG9yZSBmcm9tICdTdG9yZXMvVGhlbWUnO1xuaW1wb3J0IExhbmd1YWdlU3RvcmUgZnJvbSAnU3RvcmVzL0xhbmd1YWdlJztcbmltcG9ydCBBcHBBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IENhcGFBZG1pblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9DYXBhJztcblxuY2xhc3MgR2VuZXJhbEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmxhbmd1YWdlID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZTtcblx0XHR0aGlzLmxhbmd1YWdlcyA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2VzO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbiA9IExhbmd1YWdlU3RvcmUubGFuZ3VhZ2VBZG1pbjtcblx0XHR0aGlzLmxhbmd1YWdlc0FkbWluID0gTGFuZ3VhZ2VTdG9yZS5sYW5ndWFnZXNBZG1pbjtcblxuXHRcdHRoaXMudGhlbWUgPSBUaGVtZVN0b3JlLnRoZW1lO1xuXHRcdHRoaXMudGhlbWVzID0gVGhlbWVTdG9yZS50aGVtZXM7XG5cblx0XHR0aGlzLmNhcGFUaGVtZXMgPSBDYXBhQWRtaW5TdG9yZS50aGVtZXM7XG5cdFx0dGhpcy5jYXBhVXNlckJhY2tncm91bmQgPSBDYXBhQWRtaW5TdG9yZS51c2VyQmFja2dyb3VuZDtcblx0XHR0aGlzLmNhcGFHcmF2YXRhciA9IENhcGFBZG1pblN0b3JlLmdyYXZhdGFyO1xuXHRcdHRoaXMuY2FwYUFkZGl0aW9uYWxBY2NvdW50cyA9IENhcGFBZG1pblN0b3JlLmFkZGl0aW9uYWxBY2NvdW50cztcblx0XHR0aGlzLmNhcGFJZGVudGl0aWVzID0gQ2FwYUFkbWluU3RvcmUuaWRlbnRpdGllcztcblx0XHR0aGlzLmNhcGFBdHRhY2htZW50VGh1bWJuYWlscyA9IENhcGFBZG1pblN0b3JlLmF0dGFjaG1lbnRUaHVtYm5haWxzO1xuXHRcdHRoaXMuY2FwYVRlbXBsYXRlcyA9IENhcGFBZG1pblN0b3JlLnRlbXBsYXRlcztcblxuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPblNldHRpbmdzID0gQXBwQWRtaW5TdG9yZS5hbGxvd0xhbmd1YWdlc09uU2V0dGluZ3M7XG5cdFx0dGhpcy53ZWFrUGFzc3dvcmQgPSBBcHBBZG1pblN0b3JlLndlYWtQYXNzd29yZDtcblx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlciA9IEFwcEFkbWluU3RvcmUubmV3TW92ZVRvRm9sZGVyO1xuXG5cdFx0dGhpcy5kYXRhRm9sZGVyQWNjZXNzID0gQXBwQWRtaW5TdG9yZS5kYXRhRm9sZGVyQWNjZXNzO1xuXG5cdFx0dGhpcy5tYWluQXR0YWNobWVudExpbWl0ID0ga29cblx0XHRcdC5vYnNlcnZhYmxlKHBJbnQoc2V0dGluZ3NHZXQoJ0F0dGFjaG1lbnRMaW1pdCcpKSAvIChNYWdpY3MuQml0TGVuZ3RoMTAyNCAqIE1hZ2ljcy5CaXRMZW5ndGgxMDI0KSlcblx0XHRcdC5leHRlbmQoeyBwb3NJbnRlcmVyOiAyNSB9KTtcblxuXHRcdHRoaXMudXBsb2FkRGF0YSA9IHNldHRpbmdzR2V0KCdQaHBVcGxvYWRTaXplcycpO1xuXHRcdHRoaXMudXBsb2FkRGF0YURlc2MgPVxuXHRcdFx0dGhpcy51cGxvYWREYXRhICYmICh0aGlzLnVwbG9hZERhdGEudXBsb2FkX21heF9maWxlc2l6ZSB8fCB0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSlcblx0XHRcdFx0PyBbXG5cdFx0XHRcdFx0XHR0aGlzLnVwbG9hZERhdGEudXBsb2FkX21heF9maWxlc2l6ZVxuXHRcdFx0XHRcdFx0XHQ/ICd1cGxvYWRfbWF4X2ZpbGVzaXplID0gJyArIHRoaXMudXBsb2FkRGF0YS51cGxvYWRfbWF4X2ZpbGVzaXplICsgJzsgJ1xuXHRcdFx0XHRcdFx0XHQ6ICcnLFxuXHRcdFx0XHRcdFx0dGhpcy51cGxvYWREYXRhLnBvc3RfbWF4X3NpemUgPyAncG9zdF9tYXhfc2l6ZSA9ICcgKyB0aGlzLnVwbG9hZERhdGEucG9zdF9tYXhfc2l6ZSA6ICcnXG5cdFx0XHRcdCAgXS5qb2luKCcnKVxuXHRcdFx0XHQ6ICcnO1xuXG5cdFx0dGhpcy50aGVtZXNPcHRpb25zID0ga28uY29tcHV0ZWQoKCkgPT5cblx0XHRcdF8ubWFwKHRoaXMudGhlbWVzKCksICh0aGVtZSkgPT4gKHsgb3B0VmFsdWU6IHRoZW1lLCBvcHRUZXh0OiBjb252ZXJ0VGhlbWVOYW1lKHRoZW1lKSB9KSlcblx0XHQpO1xuXG5cdFx0dGhpcy5sYW5ndWFnZUZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2UoKSkpO1xuXHRcdHRoaXMubGFuZ3VhZ2VBZG1pbkZ1bGxOYW1lID0ga28uY29tcHV0ZWQoKCkgPT4gY29udmVydExhbmdOYW1lKHRoaXMubGFuZ3VhZ2VBZG1pbigpKSk7XG5cblx0XHR0aGlzLmF0dGFjaG1lbnRMaW1pdFRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5sYW5ndWFnZVRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKS5leHRlbmQoeyB0aHJvdHRsZTogTWFnaWNzLlRpbWUxMDBtcyB9KTtcblx0XHR0aGlzLnRoZW1lVHJpZ2dlciA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuYXR0YWNobWVudExpbWl0VHJpZ2dlciwgdGhpcyksXG5cdFx0XHRcdGYyID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5sYW5ndWFnZVRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMudGhlbWVUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZlJlbG9hZExhbmd1YWdlSGVscGVyID0gKHNhdmVTZXR0aW5nc1N0ZXApID0+ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmxhbmd1YWdlQWRtaW5UcmlnZ2VyKHNhdmVTZXR0aW5nc1N0ZXApO1xuXHRcdFx0XHRcdF8uZGVsYXkoKCkgPT4gdGhpcy5sYW5ndWFnZUFkbWluVHJpZ2dlcihTYXZlU2V0dGluZ3NTdGVwLklkbGUpLCBNYWdpY3MuVGltZTFzKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0dGhpcy5tYWluQXR0YWNobWVudExpbWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdBdHRhY2htZW50TGltaXQnOiBwSW50KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxhbmd1YWdlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMiwge1xuXHRcdFx0XHRcdCdMYW5ndWFnZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pblRyaWdnZXIoU2F2ZVNldHRpbmdzU3RlcC5BbmltYXRlKTtcblx0XHRcdFx0dHJhbnNsYXRvclJlbG9hZCh0cnVlLCB2YWx1ZSlcblx0XHRcdFx0XHQudGhlbihmUmVsb2FkTGFuZ3VhZ2VIZWxwZXIoU2F2ZVNldHRpbmdzU3RlcC5UcnVlUmVzdWx0KSwgZlJlbG9hZExhbmd1YWdlSGVscGVyKFNhdmVTZXR0aW5nc1N0ZXAuRmFsc2VSZXN1bHQpKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdFx0XHQnTGFuZ3VhZ2VBZG1pbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLnRoZW1lLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0Y2hhbmdlVGhlbWUodmFsdWUsIHRoaXMudGhlbWVUcmlnZ2VyKTtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMywge1xuXHRcdFx0XHRcdCdUaGVtZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYUFkZGl0aW9uYWxBY2NvdW50cy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhQWRkaXRpb25hbEFjY291bnRzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhSWRlbnRpdGllcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhSWRlbnRpdGllcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY2FwYVRlbXBsYXRlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhVGVtcGxhdGVzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhR3JhdmF0YXIuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYUdyYXZhdGFyJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhQXR0YWNobWVudFRodW1ibmFpbHMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ2FwYUF0dGFjaG1lbnRUaHVtYm5haWxzJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jYXBhVGhlbWVzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NhcGFUaGVtZXMnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmNhcGFVc2VyQmFja2dyb3VuZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdDYXBhVXNlckJhY2tncm91bmQnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmFsbG93TGFuZ3VhZ2VzT25TZXR0aW5ncy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdBbGxvd0xhbmd1YWdlc09uU2V0dGluZ3MnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm5ld01vdmVUb0ZvbGRlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdOZXdNb3ZlVG9Gb2xkZXInOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cblxuXHRzZWxlY3RMYW5ndWFnZSgpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9MYW5ndWFnZXMnKSwgW3RoaXMubGFuZ3VhZ2UsIHRoaXMubGFuZ3VhZ2VzKCksIExhbmd1YWdlU3RvcmUudXNlckxhbmd1YWdlKCldKTtcblx0fVxuXG5cdHNlbGVjdExhbmd1YWdlQWRtaW4oKSB7XG5cdFx0c2hvd1NjcmVlblBvcHVwKHJlcXVpcmUoJ1ZpZXcvUG9wdXAvTGFuZ3VhZ2VzJyksIFtcblx0XHRcdHRoaXMubGFuZ3VhZ2VBZG1pbixcblx0XHRcdHRoaXMubGFuZ3VhZ2VzQWRtaW4oKSxcblx0XHRcdExhbmd1YWdlU3RvcmUudXNlckxhbmd1YWdlQWRtaW4oKVxuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRwaHBJbmZvTGluaygpIHtcblx0XHRyZXR1cm4gcGhwSW5mbygpO1xuXHR9XG59XG5cbmV4cG9ydCB7IEdlbmVyYWxBZG1pblNldHRpbmdzLCBHZW5lcmFsQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IFN0b3JhZ2VSZXN1bHRUeXBlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuY2xhc3MgRG9tYWluc0FkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmRvbWFpbnMgPSBEb21haW5TdG9yZS5kb21haW5zO1xuXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0ga28uY29tcHV0ZWQoKCkgPT4gKHRoaXMuZG9tYWlucy5sb2FkaW5nKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJykpO1xuXG5cdFx0dGhpcy5kb21haW5Gb3JEZWxldGlvbiA9IGtvLm9ic2VydmFibGUobnVsbCkuZGVsZXRlQWNjZXNzSGVscGVyKCk7XG5cblx0XHR0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0LCB0aGlzKTtcblx0XHR0aGlzLm9uRG9tYWluTG9hZFJlcXVlc3QgPSBfLmJpbmQodGhpcy5vbkRvbWFpbkxvYWRSZXF1ZXN0LCB0aGlzKTtcblx0fVxuXG5cdGNyZWF0ZURvbWFpbigpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Eb21haW4nKSk7XG5cdH1cblxuXHRjcmVhdGVEb21haW5BbGlhcygpIHtcblx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9Eb21haW5BbGlhcycpKTtcblx0fVxuXG5cdGRlbGV0ZURvbWFpbihkb21haW4pIHtcblx0XHR0aGlzLmRvbWFpbnMucmVtb3ZlKGRvbWFpbik7XG5cdFx0UmVtb3RlLmRvbWFpbkRlbGV0ZSh0aGlzLm9uRG9tYWluTGlzdENoYW5nZVJlcXVlc3QsIGRvbWFpbi5uYW1lKTtcblx0fVxuXG5cdGRpc2FibGVEb21haW4oZG9tYWluKSB7XG5cdFx0ZG9tYWluLmRpc2FibGVkKCFkb21haW4uZGlzYWJsZWQoKSk7XG5cdFx0UmVtb3RlLmRvbWFpbkRpc2FibGUodGhpcy5vbkRvbWFpbkxpc3RDaGFuZ2VSZXF1ZXN0LCBkb21haW4ubmFtZSwgZG9tYWluLmRpc2FibGVkKCkpO1xuXHR9XG5cblx0b25CdWlsZChvRG9tKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0b0RvbS5vbignY2xpY2snLCAnLmItYWRtaW4tZG9tYWlucy1saXN0LXRhYmxlIC5lLWl0ZW0gLmUtYWN0aW9uJywgZnVuY3Rpb24oKSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0Y29uc3QgZG9tYWluSXRlbSA9IGtvLmRhdGFGb3IodGhpcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8taW52YWxpZC10aGlzXG5cdFx0XHRpZiAoZG9tYWluSXRlbSkge1xuXHRcdFx0XHRSZW1vdGUuZG9tYWluKHNlbGYub25Eb21haW5Mb2FkUmVxdWVzdCwgZG9tYWluSXRlbS5uYW1lKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGdldEFwcCgpLnJlbG9hZERvbWFpbkxpc3QoKTtcblx0fVxuXG5cdG9uRG9tYWluTG9hZFJlcXVlc3Qoc1Jlc3VsdCwgb0RhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gc1Jlc3VsdCAmJiBvRGF0YSAmJiBvRGF0YS5SZXN1bHQpIHtcblx0XHRcdHNob3dTY3JlZW5Qb3B1cChyZXF1aXJlKCdWaWV3L1BvcHVwL0RvbWFpbicpLCBbb0RhdGEuUmVzdWx0XSk7XG5cdFx0fVxuXHR9XG5cblx0b25Eb21haW5MaXN0Q2hhbmdlUmVxdWVzdCgpIHtcblx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRG9tYWluc0FkbWluU2V0dGluZ3MsIERvbWFpbnNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIGJvb2xUb0FqYXgsIHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuY2xhc3MgTG9naW5BZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2UgPSBBcHBTdG9yZS5kZXRlcm1pbmVVc2VyTGFuZ3VhZ2U7XG5cdFx0dGhpcy5kZXRlcm1pbmVVc2VyRG9tYWluID0gQXBwU3RvcmUuZGV0ZXJtaW5lVXNlckRvbWFpbjtcblxuXHRcdHRoaXMuZGVmYXVsdERvbWFpbiA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luRGVmYXVsdERvbWFpbicpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luID0gQXBwU3RvcmUuYWxsb3dMYW5ndWFnZXNPbkxvZ2luO1xuXG5cdFx0dGhpcy5kdW1teSA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5kZWZhdWx0RG9tYWluLnRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmRldGVybWluZVVzZXJMYW5ndWFnZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHRcdCdEZXRlcm1pbmVVc2VyTGFuZ3VhZ2UnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmRldGVybWluZVVzZXJEb21haW4uc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnRGV0ZXJtaW5lVXNlckRvbWFpbic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYWxsb3dMYW5ndWFnZXNPbkxvZ2luLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0FsbG93TGFuZ3VhZ2VzT25Mb2dpbic6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuZGVmYXVsdERvbWFpbi5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHQnTG9naW5EZWZhdWx0RG9tYWluJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9LCA1MCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgTG9naW5BZG1pblNldHRpbmdzLCBMb2dpbkFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbiwgZGVmYXV0T3B0aW9uc0FmdGVyUmVuZGVyLCBpbkFycmF5LCB0cmltLCBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgU2F2ZVNldHRpbmdzU3RlcCwgU3RvcmFnZVJlc3VsdFR5cGUsIE1hZ2ljcyB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSAnQ29tbW9uL1RyYW5zbGF0b3InO1xuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgQ29udGFjdHNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5kZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXIgPSBkZWZhdXRPcHRpb25zQWZ0ZXJSZW5kZXI7XG5cdFx0dGhpcy5lbmFibGVDb250YWN0cyA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnQ29udGFjdHNFbmFibGUnKSk7XG5cdFx0dGhpcy5jb250YWN0c1N5bmMgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0NvbnRhY3RzU3luYycpKTtcblxuXHRcdGNvbnN0IHN1cHBvcnRlZFR5cGVzID0gW10sXG5cdFx0XHR0eXBlcyA9IFsnc3FsaXRlJywgJ215c3FsJywgJ3Bnc3FsJ10sXG5cdFx0XHRnZXRUeXBlTmFtZSA9IChuYW1lKSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAobmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgJ3NxbGl0ZSc6XG5cdFx0XHRcdFx0XHRuYW1lID0gJ1NRTGl0ZSc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdteXNxbCc6XG5cdFx0XHRcdFx0XHRuYW1lID0gJ015U1FMJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3Bnc3FsJzpcblx0XHRcdFx0XHRcdG5hbWUgPSAnUG9zdGdyZVNRTCc7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdH07XG5cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ1NRTGl0ZUlzU3VwcG9ydGVkJykpIHtcblx0XHRcdHN1cHBvcnRlZFR5cGVzLnB1c2goJ3NxbGl0ZScpO1xuXHRcdH1cblx0XHRpZiAoc2V0dGluZ3NHZXQoJ015U3FsSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgnbXlzcWwnKTtcblx0XHR9XG5cdFx0aWYgKHNldHRpbmdzR2V0KCdQb3N0Z3JlU3FsSXNTdXBwb3J0ZWQnKSkge1xuXHRcdFx0c3VwcG9ydGVkVHlwZXMucHVzaCgncGdzcWwnKTtcblx0XHR9XG5cblx0XHR0aGlzLmNvbnRhY3RzU3VwcG9ydGVkID0gMCA8IHN1cHBvcnRlZFR5cGVzLmxlbmd0aDtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlcyA9IGtvLm9ic2VydmFibGVBcnJheShbXSk7XG5cdFx0dGhpcy5jb250YWN0c1R5cGVzT3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLm1hcCh0aGlzLmNvbnRhY3RzVHlwZXMoKSwgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRpc2FibGVkID0gLTEgPT09IGluQXJyYXkodmFsdWUsIHN1cHBvcnRlZFR5cGVzKTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQnaWQnOiB2YWx1ZSxcblx0XHRcdFx0XHQnbmFtZSc6IGdldFR5cGVOYW1lKHZhbHVlKSArIChkaXNhYmxlZCA/ICcgKCcgKyBpMThuKCdISU5UUy9OT1RfU1VQUE9SVEVEJykgKyAnKScgOiAnJyksXG5cdFx0XHRcdFx0J2Rpc2FibGVkJzogZGlzYWJsZWRcblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdHRoaXMuY29udGFjdHNUeXBlcyh0eXBlcyk7XG5cdFx0dGhpcy5jb250YWN0c1R5cGUgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubWFpbkNvbnRhY3RzVHlwZSA9IGtvXG5cdFx0XHQuY29tcHV0ZWQoe1xuXHRcdFx0XHRyZWFkOiB0aGlzLmNvbnRhY3RzVHlwZSxcblx0XHRcdFx0d3JpdGU6ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSAhPT0gdGhpcy5jb250YWN0c1R5cGUoKSkge1xuXHRcdFx0XHRcdFx0aWYgKC0xIDwgaW5BcnJheSh2YWx1ZSwgc3VwcG9ydGVkVHlwZXMpKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlKHZhbHVlKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoMCA8IHN1cHBvcnRlZFR5cGVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRhY3RzVHlwZSgnJyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuY29udGFjdHNUeXBlLnZhbHVlSGFzTXV0YXRlZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5leHRlbmQoeyBub3RpZnk6ICdhbHdheXMnIH0pO1xuXG5cdFx0dGhpcy5jb250YWN0c1R5cGUuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblx0XHR9KTtcblxuXHRcdHRoaXMucGRvRHNuID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9Ec24nKSk7XG5cdFx0dGhpcy5wZG9Vc2VyID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9Vc2VyJykpO1xuXHRcdHRoaXMucGRvUGFzc3dvcmQgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1Bhc3N3b3JkJykpO1xuXG5cdFx0dGhpcy5wZG9Ec25UcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMucGRvVXNlclRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5wZG9QYXNzd29yZFRyaWdnZXIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5jb250YWN0c1R5cGVUcmlnZ2VyID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy50ZXN0aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNvbnRhY3RzVHlwZShzZXR0aW5nc0dldCgnQ29udGFjdHNQZG9UeXBlJykpO1xuXG5cdFx0dGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlID0gXy5iaW5kKHRoaXMub25UZXN0Q29udGFjdHNSZXNwb25zZSwgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gJycgIT09IHNlbGYucGRvRHNuKCkgJiYgJycgIT09IHNlbGYucGRvVXNlcigpKVxuXHR0ZXN0Q29udGFjdHNDb21tYW5kKCkge1xuXHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2VzcyhmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdHRoaXMudGVzdGluZyh0cnVlKTtcblxuXHRcdFJlbW90ZS50ZXN0Q29udGFjdHModGhpcy5vblRlc3RDb250YWN0c1Jlc3BvbnNlLCB7XG5cdFx0XHQnQ29udGFjdHNQZG9UeXBlJzogdGhpcy5jb250YWN0c1R5cGUoKSxcblx0XHRcdCdDb250YWN0c1Bkb0Rzbic6IHRoaXMucGRvRHNuKCksXG5cdFx0XHQnQ29udGFjdHNQZG9Vc2VyJzogdGhpcy5wZG9Vc2VyKCksXG5cdFx0XHQnQ29udGFjdHNQZG9QYXNzd29yZCc6IHRoaXMucGRvUGFzc3dvcmQoKVxuXHRcdH0pO1xuXHR9XG5cblx0b25UZXN0Q29udGFjdHNSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHR0aGlzLnRlc3RDb250YWN0c1N1Y2Nlc3MoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3IoZmFsc2UpO1xuXHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKCcnKTtcblxuXHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5SZXN1bHQpIHtcblx0XHRcdHRoaXMudGVzdENvbnRhY3RzU3VjY2Vzcyh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvcih0cnVlKTtcblx0XHRcdGlmIChkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdHRoaXMudGVzdENvbnRhY3RzRXJyb3JNZXNzYWdlKGRhdGEuUmVzdWx0Lk1lc3NhZ2UgfHwgJycpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy50ZXN0Q29udGFjdHNFcnJvck1lc3NhZ2UoJycpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMudGVzdGluZyhmYWxzZSk7XG5cdH1cblxuXHRvblNob3coKSB7XG5cdFx0dGhpcy50ZXN0Q29udGFjdHNTdWNjZXNzKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yKGZhbHNlKTtcblx0XHR0aGlzLnRlc3RDb250YWN0c0Vycm9yTWVzc2FnZSgnJyk7XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdF8uZGVsYXkoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZjEgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnBkb0RzblRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvVXNlclRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmNCA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMucGRvUGFzc3dvcmRUcmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjUgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmNvbnRhY3RzVHlwZVRyaWdnZXIsIHRoaXMpO1xuXG5cdFx0XHR0aGlzLmVuYWJsZUNvbnRhY3RzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzRW5hYmxlJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1N5bmMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNTeW5jJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5jb250YWN0c1R5cGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGY1LCB7XG5cdFx0XHRcdFx0J0NvbnRhY3RzUGRvVHlwZSc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucGRvRHNuLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdCdDb250YWN0c1Bkb0Rzbic6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucGRvVXNlci5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjMsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9Vc2VyJzogdHJpbSh2YWx1ZSlcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wZG9QYXNzd29yZC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjQsIHtcblx0XHRcdFx0XHQnQ29udGFjdHNQZG9QYXNzd29yZCc6IHRyaW0odmFsdWUpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuY29udGFjdHNUeXBlKHNldHRpbmdzR2V0KCdDb250YWN0c1Bkb1R5cGUnKSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBDb250YWN0c0FkbWluU2V0dGluZ3MsIENvbnRhY3RzQWRtaW5TZXR0aW5ncyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQgXyBmcm9tICdfJztcbmltcG9ydCBrbyBmcm9tICdrbyc7XG5cbmltcG9ydCB7IHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgcGhwSW5mbyB9IGZyb20gJ0NvbW1vbi9MaW5rcyc7XG5pbXBvcnQgeyBTdG9yYWdlUmVzdWx0VHlwZSwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IEFwcEFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ2FwYUFkbWluU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0NhcGEnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcblxuY2xhc3MgU2VjdXJpdHlBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy51c2VMb2NhbFByb3h5Rm9yRXh0ZXJuYWxJbWFnZXMgPSBBcHBBZG1pblN0b3JlLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcztcblxuXHRcdHRoaXMud2Vha1Bhc3N3b3JkID0gQXBwQWRtaW5TdG9yZS53ZWFrUGFzc3dvcmQ7XG5cblx0XHR0aGlzLmNhcGFPcGVuUEdQID0gQ2FwYUFkbWluU3RvcmUub3BlblBHUDtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGggPSBDYXBhQWRtaW5TdG9yZS50d29GYWN0b3JBdXRoO1xuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZSA9IENhcGFBZG1pblN0b3JlLnR3b0ZhY3RvckF1dGhGb3JjZTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGguc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmNhcGFUd29GYWN0b3JBdXRoRm9yY2UoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dGhpcy52ZXJpZnlTc2xDZXJ0aWZpY2F0ZSA9IGtvLm9ic2VydmFibGUoISFzZXR0aW5nc0dldCgnVmVyaWZ5U3NsQ2VydGlmaWNhdGUnKSk7XG5cdFx0dGhpcy5hbGxvd1NlbGZTaWduZWQgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0FsbG93U2VsZlNpZ25lZCcpKTtcblxuXHRcdHRoaXMudmVyaWZ5U3NsQ2VydGlmaWNhdGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0aWYgKCF2YWx1ZSkge1xuXHRcdFx0XHR0aGlzLmFsbG93U2VsZlNpZ25lZCh0cnVlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRoaXMuaXNUd29GYWN0b3JEcm9wcGVyU2hvd24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnR3b0ZhY3RvckRyb3BwZXJVc2VyID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy50d29GYWN0b3JEcm9wcGVyVXNlci5mb2N1c2VkID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkbWluTG9naW4gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdBZG1pbkxvZ2luJykpO1xuXHRcdHRoaXMuYWRtaW5Mb2dpbkVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3ID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3MiA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvciA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZFVwZGF0ZVN1Y2Nlc3MgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkbWluTG9naW4uc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdHRoaXMuYWRtaW5Mb2dpbkVycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldy5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlRXJyb3IoZmFsc2UpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXdFcnJvcihmYWxzZSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKGZhbHNlKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ld0Vycm9yKGZhbHNlKTtcblx0XHR9KTtcblxuXHRcdHRoaXMub25OZXdBZG1pblBhc3N3b3JkUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSwgdGhpcyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gJycgIT09IHRyaW0oc2VsZi5hZG1pbkxvZ2luKCkpICYmICcnICE9PSBzZWxmLmFkbWluUGFzc3dvcmQoKSlcblx0c2F2ZU5ld0FkbWluUGFzc3dvcmRDb21tYW5kKCkge1xuXHRcdGlmICgnJyA9PT0gdHJpbSh0aGlzLmFkbWluTG9naW4oKSkpIHtcblx0XHRcdHRoaXMuYWRtaW5Mb2dpbkVycm9yKHRydWUpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmFkbWluUGFzc3dvcmROZXcoKSAhPT0gdGhpcy5hZG1pblBhc3N3b3JkTmV3MigpKSB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXdFcnJvcih0cnVlKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcihmYWxzZSk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkVXBkYXRlU3VjY2VzcyhmYWxzZSk7XG5cblx0XHRSZW1vdGUuc2F2ZU5ld0FkbWluUGFzc3dvcmQodGhpcy5vbk5ld0FkbWluUGFzc3dvcmRSZXNwb25zZSwge1xuXHRcdFx0J0xvZ2luJzogdGhpcy5hZG1pbkxvZ2luKCksXG5cdFx0XHQnUGFzc3dvcmQnOiB0aGlzLmFkbWluUGFzc3dvcmQoKSxcblx0XHRcdCdOZXdQYXNzd29yZCc6IHRoaXMuYWRtaW5QYXNzd29yZE5ldygpXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHNob3dUd29GYWN0b3JEcm9wcGVyKCkge1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIoJycpO1xuXHRcdHRoaXMuaXNUd29GYWN0b3JEcm9wcGVyU2hvd24odHJ1ZSk7XG5cblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIuZm9jdXNlZCh0cnVlKTtcblx0XHR9LCBNYWdpY3MuVGltZTUwbXMpO1xuXHR9XG5cblx0b25OZXdBZG1pblBhc3N3b3JkUmVzcG9uc2UocmVzdWx0LCBkYXRhKSB7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmQoJycpO1xuXHRcdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3KCcnKTtcblx0XHRcdHRoaXMuYWRtaW5QYXNzd29yZE5ldzIoJycpO1xuXG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVTdWNjZXNzKHRydWUpO1xuXG5cdFx0XHR0aGlzLndlYWtQYXNzd29yZCghIWRhdGEuUmVzdWx0LldlYWspO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkbWluUGFzc3dvcmRVcGRhdGVFcnJvcih0cnVlKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdHRoaXMuY2FwYU9wZW5QR1Auc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdDYXBhT3BlblBHUCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGguc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdDYXBhVHdvRmFjdG9yQXV0aCc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2FwYVR3b0ZhY3RvckF1dGhGb3JjZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0NhcGFUd29GYWN0b3JBdXRoRm9yY2UnOiBib29sVG9BamF4KHZhbHVlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnVzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J1VzZUxvY2FsUHJveHlGb3JFeHRlcm5hbEltYWdlcyc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMudmVyaWZ5U3NsQ2VydGlmaWNhdGUuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhudWxsLCB7XG5cdFx0XHRcdCdWZXJpZnlTc2xDZXJ0aWZpY2F0ZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuYWxsb3dTZWxmU2lnbmVkLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcobnVsbCwge1xuXHRcdFx0XHQnQWxsb3dTZWxmU2lnbmVkJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0b25IaWRlKCkge1xuXHRcdHRoaXMuYWRtaW5QYXNzd29yZCgnJyk7XG5cdFx0dGhpcy5hZG1pblBhc3N3b3JkTmV3KCcnKTtcblx0XHR0aGlzLmFkbWluUGFzc3dvcmROZXcyKCcnKTtcblxuXHRcdHRoaXMuaXNUd29GYWN0b3JEcm9wcGVyU2hvd24oZmFsc2UpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIoJycpO1xuXHRcdHRoaXMudHdvRmFjdG9yRHJvcHBlclVzZXIuZm9jdXNlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdHBocEluZm9MaW5rKCkge1xuXHRcdHJldHVybiBwaHBJbmZvKCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU2VjdXJpdHlBZG1pblNldHRpbmdzLCBTZWN1cml0eUFkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBTYXZlU2V0dGluZ3NTdGVwLCBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIHRyaW0sIGJvb2xUb0FqYXggfSBmcm9tICdDb21tb24vVXRpbHMnO1xuXG5pbXBvcnQgU29jaWFsU3RvcmUgZnJvbSAnU3RvcmVzL1NvY2lhbCc7XG5cbmltcG9ydCBSZW1vdGUgZnJvbSAnUmVtb3RlL0FkbWluL0FqYXgnO1xuXG5jbGFzcyBTb2NpYWxBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5nb29nbGVFbmFibGUgPSBTb2NpYWxTdG9yZS5nb29nbGUuZW5hYmxlZDtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZUF1dGggPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5hdXRoO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aEdtYWlsID0gU29jaWFsU3RvcmUuZ29vZ2xlLmNhcGEuYXV0aEdtYWlsO1xuXHRcdHRoaXMuZ29vZ2xlRW5hYmxlRHJpdmUgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5kcml2ZTtcblx0XHR0aGlzLmdvb2dsZUVuYWJsZVByZXZpZXcgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2FwYS5wcmV2aWV3O1xuXG5cdFx0dGhpcy5nb29nbGVFbmFibGVSZXF1aXJlQ2xpZW50U2V0dGluZ3MgPSBTb2NpYWxTdG9yZS5nb29nbGUucmVxdWlyZS5jbGllbnRTZXR0aW5ncztcblx0XHR0aGlzLmdvb2dsZUVuYWJsZVJlcXVpcmVBcGlLZXkgPSBTb2NpYWxTdG9yZS5nb29nbGUucmVxdWlyZS5hcGlLZXlTZXR0aW5ncztcblxuXHRcdHRoaXMuZ29vZ2xlQ2xpZW50SUQgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2xpZW50SUQ7XG5cdFx0dGhpcy5nb29nbGVDbGllbnRTZWNyZXQgPSBTb2NpYWxTdG9yZS5nb29nbGUuY2xpZW50U2VjcmV0O1xuXHRcdHRoaXMuZ29vZ2xlQXBpS2V5ID0gU29jaWFsU3RvcmUuZ29vZ2xlLmFwaUtleTtcblxuXHRcdHRoaXMuZ29vZ2xlVHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy5nb29nbGVUcmlnZ2VyMiA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0XHR0aGlzLmdvb2dsZVRyaWdnZXIzID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXG5cdFx0dGhpcy5mYWNlYm9va1N1cHBvcnRlZCA9IFNvY2lhbFN0b3JlLmZhY2Vib29rLnN1cHBvcnRlZDtcblx0XHR0aGlzLmZhY2Vib29rRW5hYmxlID0gU29jaWFsU3RvcmUuZmFjZWJvb2suZW5hYmxlZDtcblx0XHR0aGlzLmZhY2Vib29rQXBwSUQgPSBTb2NpYWxTdG9yZS5mYWNlYm9vay5hcHBJRDtcblx0XHR0aGlzLmZhY2Vib29rQXBwU2VjcmV0ID0gU29jaWFsU3RvcmUuZmFjZWJvb2suYXBwU2VjcmV0O1xuXG5cdFx0dGhpcy5mYWNlYm9va1RyaWdnZXIxID0ga28ub2JzZXJ2YWJsZShTYXZlU2V0dGluZ3NTdGVwLklkbGUpO1xuXHRcdHRoaXMuZmFjZWJvb2tUcmlnZ2VyMiA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblxuXHRcdHRoaXMudHdpdHRlckVuYWJsZSA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuZW5hYmxlZDtcblx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lcktleSA9IFNvY2lhbFN0b3JlLnR3aXR0ZXIuY29uc3VtZXJLZXk7XG5cdFx0dGhpcy50d2l0dGVyQ29uc3VtZXJTZWNyZXQgPSBTb2NpYWxTdG9yZS50d2l0dGVyLmNvbnN1bWVyU2VjcmV0O1xuXG5cdFx0dGhpcy50d2l0dGVyVHJpZ2dlcjEgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cdFx0dGhpcy50d2l0dGVyVHJpZ2dlcjIgPSBrby5vYnNlcnZhYmxlKFNhdmVTZXR0aW5nc1N0ZXAuSWRsZSk7XG5cblx0XHR0aGlzLmRyb3Bib3hFbmFibGUgPSBTb2NpYWxTdG9yZS5kcm9wYm94LmVuYWJsZWQ7XG5cdFx0dGhpcy5kcm9wYm94QXBpS2V5ID0gU29jaWFsU3RvcmUuZHJvcGJveC5hcGlLZXk7XG5cblx0XHR0aGlzLmRyb3Bib3hUcmlnZ2VyMSA9IGtvLm9ic2VydmFibGUoU2F2ZVNldHRpbmdzU3RlcC5JZGxlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHRjb25zdCBmMSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZmFjZWJvb2tUcmlnZ2VyMSwgdGhpcyksXG5cdFx0XHRcdGYyID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy5mYWNlYm9va1RyaWdnZXIyLCB0aGlzKSxcblx0XHRcdFx0ZjMgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLnR3aXR0ZXJUcmlnZ2VyMSwgdGhpcyksXG5cdFx0XHRcdGY0ID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50d2l0dGVyVHJpZ2dlcjIsIHRoaXMpLFxuXHRcdFx0XHRmNSA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZ29vZ2xlVHJpZ2dlcjEsIHRoaXMpLFxuXHRcdFx0XHRmNiA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZ29vZ2xlVHJpZ2dlcjIsIHRoaXMpLFxuXHRcdFx0XHRmNyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZ29vZ2xlVHJpZ2dlcjMsIHRoaXMpLFxuXHRcdFx0XHRmOCA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZHJvcGJveFRyaWdnZXIxLCB0aGlzKTtcblxuXHRcdFx0dGhpcy5mYWNlYm9va0VuYWJsZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZhY2Vib29rU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0XHRcdCdGYWNlYm9va0VuYWJsZSc6IGJvb2xUb0FqYXgodmFsdWUpXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhY2Vib29rQXBwSUQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5mYWNlYm9va1N1cHBvcnRlZCgpKSB7XG5cdFx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMSwge1xuXHRcdFx0XHRcdFx0J0ZhY2Vib29rQXBwSUQnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5mYWNlYm9va0FwcFNlY3JldC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmZhY2Vib29rU3VwcG9ydGVkKCkpIHtcblx0XHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYyLCB7XG5cdFx0XHRcdFx0XHQnRmFjZWJvb2tBcHBTZWNyZXQnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy50d2l0dGVyRW5hYmxlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdUd2l0dGVyRW5hYmxlJywgYm9vbFRvQWpheCkpO1xuXHRcdFx0dGhpcy50d2l0dGVyQ29uc3VtZXJLZXkuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ1R3aXR0ZXJDb25zdW1lcktleScsIHRyaW0sIGYzKSk7XG5cdFx0XHR0aGlzLnR3aXR0ZXJDb25zdW1lclNlY3JldC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignVHdpdHRlckNvbnN1bWVyU2VjcmV0JywgdHJpbSwgZjQpKTtcblxuXHRcdFx0dGhpcy5nb29nbGVFbmFibGUuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUVuYWJsZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aC5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlQXV0aCcsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlQXV0aEdtYWlsLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVBdXRoR21haWwnLCBib29sVG9BamF4KSk7XG5cdFx0XHR0aGlzLmdvb2dsZUVuYWJsZURyaXZlLnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVFbmFibGVEcml2ZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlRW5hYmxlUHJldmlldy5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignR29vZ2xlRW5hYmxlUHJldmlldycsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZ29vZ2xlQ2xpZW50SUQuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUNsaWVudElEJywgdHJpbSwgZjUpKTtcblx0XHRcdHRoaXMuZ29vZ2xlQ2xpZW50U2VjcmV0LnN1YnNjcmliZShSZW1vdGUuc2F2ZUFkbWluQ29uZmlnSGVscGVyKCdHb29nbGVDbGllbnRTZWNyZXQnLCB0cmltLCBmNikpO1xuXHRcdFx0dGhpcy5nb29nbGVBcGlLZXkuc3Vic2NyaWJlKFJlbW90ZS5zYXZlQWRtaW5Db25maWdIZWxwZXIoJ0dvb2dsZUFwaUtleScsIHRyaW0sIGY3KSk7XG5cblx0XHRcdHRoaXMuZHJvcGJveEVuYWJsZS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignRHJvcGJveEVuYWJsZScsIGJvb2xUb0FqYXgpKTtcblx0XHRcdHRoaXMuZHJvcGJveEFwaUtleS5zdWJzY3JpYmUoUmVtb3RlLnNhdmVBZG1pbkNvbmZpZ0hlbHBlcignRHJvcGJveEFwaUtleScsIHRyaW0sIGY4KSk7XG5cdFx0fSwgTWFnaWNzLlRpbWU1MG1zKTtcblx0fVxufVxuXG5leHBvcnQgeyBTb2NpYWxBZG1pblNldHRpbmdzLCBTb2NpYWxBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5pbXBvcnQgeyBib29sVG9BamF4IH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgc2V0dGluZ3NHZXQgfSBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcbmltcG9ydCB7IHNob3dTY3JlZW5Qb3B1cCB9IGZyb20gJ0tub2luL0tub2luJztcblxuaW1wb3J0IEFwcFN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9BcHAnO1xuaW1wb3J0IFBsdWdpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9QbHVnaW4nO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBQbHVnaW5zQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuZW5hYmxlZFBsdWdpbnMgPSBrby5vYnNlcnZhYmxlKCEhc2V0dGluZ3NHZXQoJ0VuYWJsZWRQbHVnaW5zJykpO1xuXG5cdFx0dGhpcy5wbHVnaW5zID0gUGx1Z2luU3RvcmUucGx1Z2lucztcblx0XHR0aGlzLnBsdWdpbnNFcnJvciA9IFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3I7XG5cblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWSB8fCBBcHBTdG9yZS5jb21tdW5pdHkoKTtcblxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IChQbHVnaW5TdG9yZS5wbHVnaW5zLmxvYWRpbmcoKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nKSk7XG5cblx0XHR0aGlzLm9uUGx1Z2luTG9hZFJlcXVlc3QgPSBfLmJpbmQodGhpcy5vblBsdWdpbkxvYWRSZXF1ZXN0LCB0aGlzKTtcblx0XHR0aGlzLm9uUGx1Z2luRGlzYWJsZVJlcXVlc3QgPSBfLmJpbmQodGhpcy5vblBsdWdpbkRpc2FibGVSZXF1ZXN0LCB0aGlzKTtcblx0fVxuXG5cdGRpc2FibGVQbHVnaW4ocGx1Z2luKSB7XG5cdFx0cGx1Z2luLmRpc2FibGVkKCFwbHVnaW4uZGlzYWJsZWQoKSk7XG5cdFx0UmVtb3RlLnBsdWdpbkRpc2FibGUodGhpcy5vblBsdWdpbkRpc2FibGVSZXF1ZXN0LCBwbHVnaW4ubmFtZSwgcGx1Z2luLmRpc2FibGVkKCkpO1xuXHR9XG5cblx0Y29uZmlndXJlUGx1Z2luKHBsdWdpbikge1xuXHRcdFJlbW90ZS5wbHVnaW4odGhpcy5vblBsdWdpbkxvYWRSZXF1ZXN0LCBwbHVnaW4ubmFtZSk7XG5cdH1cblxuXHRvbkJ1aWxkKG9Eb20pIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdG9Eb21cblx0XHRcdC5vbignY2xpY2snLCAnLmUtaXRlbSAuY29uZmlndXJlLXBsdWdpbi1hY3Rpb24nLCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItYXJyb3ctY2FsbGJhY2tcblx0XHRcdFx0Y29uc3QgcGx1Z2luID0ga28uZGF0YUZvcih0aGlzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbnZhbGlkLXRoaXNcblx0XHRcdFx0aWYgKHBsdWdpbikge1xuXHRcdFx0XHRcdHNlbGYuY29uZmlndXJlUGx1Z2luKHBsdWdpbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQub24oJ2NsaWNrJywgJy5lLWl0ZW0gLmRpc2FibGVkLXBsdWdpbicsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdFx0XHRjb25zdCBwbHVnaW4gPSBrby5kYXRhRm9yKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWludmFsaWQtdGhpc1xuXHRcdFx0XHRpZiAocGx1Z2luKSB7XG5cdFx0XHRcdFx0c2VsZi5kaXNhYmxlUGx1Z2luKHBsdWdpbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5lbmFibGVkUGx1Z2lucy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKG51bGwsIHtcblx0XHRcdFx0J0VuYWJsZWRQbHVnaW5zJzogYm9vbFRvQWpheCh2YWx1ZSlcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3IoJycpO1xuXHRcdGdldEFwcCgpLnJlbG9hZFBsdWdpbkxpc3QoKTtcblx0fVxuXG5cdG9uUGx1Z2luTG9hZFJlcXVlc3QocmVzdWx0LCBkYXRhKSB7XG5cdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHJlc3VsdCAmJiBkYXRhICYmIGRhdGEuUmVzdWx0KSB7XG5cdFx0XHRzaG93U2NyZWVuUG9wdXAocmVxdWlyZSgnVmlldy9Qb3B1cC9QbHVnaW4nKSwgW2RhdGEuUmVzdWx0XSk7XG5cdFx0fVxuXHR9XG5cblx0b25QbHVnaW5EaXNhYmxlUmVxdWVzdChyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdGlmICghZGF0YS5SZXN1bHQgJiYgZGF0YS5FcnJvckNvZGUpIHtcblx0XHRcdFx0aWYgKE5vdGlmaWNhdGlvbi5VbnN1cHBvcnRlZFBsdWdpblBhY2thZ2UgPT09IGRhdGEuRXJyb3JDb2RlICYmIGRhdGEuRXJyb3JNZXNzYWdlICYmICcnICE9PSBkYXRhLkVycm9yTWVzc2FnZSkge1xuXHRcdFx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3IoZGF0YS5FcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMuZXJyb3IoZ2V0Tm90aWZpY2F0aW9uKGRhdGEuRXJyb3JDb2RlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRnZXRBcHAoKS5yZWxvYWRQbHVnaW5MaXN0KCk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGx1Z2luc0FkbWluU2V0dGluZ3MsIFBsdWdpbnNBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB3aW5kb3cgZnJvbSAnd2luZG93JztcbmltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBnZXROb3RpZmljYXRpb24gfSBmcm9tICdDb21tb24vVHJhbnNsYXRvcic7XG5cbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IGdldEFwcCB9IGZyb20gJ0hlbHBlci9BcHBzL0FkbWluJztcblxuY2xhc3MgUGFja2FnZXNBZG1pblNldHRpbmdzIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5wYWNrYWdlc0Vycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLnBhY2thZ2VzID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzO1xuXHRcdHRoaXMucGFja2FnZXNSZWFsID0gUGFja2FnZVN0b3JlLnBhY2thZ2VzUmVhbDtcblx0XHR0aGlzLnBhY2thZ2VzTWFpblVwZGF0YWJsZSA9IFBhY2thZ2VTdG9yZS5wYWNrYWdlc01haW5VcGRhdGFibGU7XG5cblx0XHR0aGlzLnBhY2thZ2VzQ3VycmVudCA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnICE9PSBpdGVtLmluc3RhbGxlZCAmJiAhaXRlbS5jb21wYXJlKVxuXHRcdCk7XG5cdFx0dGhpcy5wYWNrYWdlc0F2YWlsYWJsZUZvclVwZGF0ZSA9IGtvLmNvbXB1dGVkKCgpID0+XG5cdFx0XHRfLmZpbHRlcih0aGlzLnBhY2thZ2VzKCksIChpdGVtKSA9PiBpdGVtICYmICcnICE9PSBpdGVtLmluc3RhbGxlZCAmJiAhIWl0ZW0uY29tcGFyZSlcblx0XHQpO1xuXHRcdHRoaXMucGFja2FnZXNBdmFpbGFibGVGb3JJbnN0YWxsYXRpb24gPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5maWx0ZXIodGhpcy5wYWNrYWdlcygpLCAoaXRlbSkgPT4gaXRlbSAmJiAnJyA9PT0gaXRlbS5pbnN0YWxsZWQpXG5cdFx0KTtcblxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGtvLmNvbXB1dGVkKCgpID0+IChQYWNrYWdlU3RvcmUucGFja2FnZXMubG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHR0aGlzLnBhY2thZ2VzRXJyb3IoJycpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRnZXRBcHAoKS5yZWxvYWRQYWNrYWdlc0xpc3QoKTtcblx0fVxuXG5cdHJlcXVlc3RIZWxwZXIocGFja2FnZVRvUmVxdWVzdCwgaW5zdGFsbCkge1xuXHRcdHJldHVybiAocmVzdWx0LCBkYXRhKSA9PiB7XG5cdFx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyAhPT0gcmVzdWx0IHx8ICFkYXRhIHx8ICFkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdHRoaXMucGFja2FnZXNFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnBhY2thZ2VzRXJyb3IoXG5cdFx0XHRcdFx0XHRnZXROb3RpZmljYXRpb24oaW5zdGFsbCA/IE5vdGlmaWNhdGlvbi5DYW50SW5zdGFsbFBhY2thZ2UgOiBOb3RpZmljYXRpb24uQ2FudERlbGV0ZVBhY2thZ2UpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRfLmVhY2godGhpcy5wYWNrYWdlcygpLCAoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAoaXRlbSAmJiBwYWNrYWdlVG9SZXF1ZXN0ICYmIGl0ZW0ubG9hZGluZyAmJiBpdGVtLmxvYWRpbmcoKSAmJiBwYWNrYWdlVG9SZXF1ZXN0LmZpbGUgPT09IGl0ZW0uZmlsZSkge1xuXHRcdFx0XHRcdHBhY2thZ2VUb1JlcXVlc3QubG9hZGluZyhmYWxzZSk7XG5cdFx0XHRcdFx0aXRlbS5sb2FkaW5nKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChTdG9yYWdlUmVzdWx0VHlwZS5TdWNjZXNzID09PSByZXN1bHQgJiYgZGF0YSAmJiBkYXRhLlJlc3VsdCAmJiBkYXRhLlJlc3VsdC5SZWxvYWQpIHtcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2V0QXBwKCkucmVsb2FkUGFja2FnZXNMaXN0KCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGRlbGV0ZVBhY2thZ2UocGFja2FnZVRvRGVsZXRlKSB7XG5cdFx0aWYgKHBhY2thZ2VUb0RlbGV0ZSkge1xuXHRcdFx0cGFja2FnZVRvRGVsZXRlLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRSZW1vdGUucGFja2FnZURlbGV0ZSh0aGlzLnJlcXVlc3RIZWxwZXIocGFja2FnZVRvRGVsZXRlLCBmYWxzZSksIHBhY2thZ2VUb0RlbGV0ZSk7XG5cdFx0fVxuXHR9XG5cblx0aW5zdGFsbFBhY2thZ2UocGFja2FnZVRvSW5zdGFsbCkge1xuXHRcdGlmIChwYWNrYWdlVG9JbnN0YWxsKSB7XG5cdFx0XHRwYWNrYWdlVG9JbnN0YWxsLmxvYWRpbmcodHJ1ZSk7XG5cdFx0XHRSZW1vdGUucGFja2FnZUluc3RhbGwodGhpcy5yZXF1ZXN0SGVscGVyKHBhY2thZ2VUb0luc3RhbGwsIHRydWUpLCBwYWNrYWdlVG9JbnN0YWxsKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHsgUGFja2FnZXNBZG1pblNldHRpbmdzLCBQYWNrYWdlc0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7IGFwcFNldHRpbmdzR2V0LCBzZXR0aW5nc0dldCB9IGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5pbXBvcnQgQ29yZVN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Db3JlJztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5jbGFzcyBBYm91dEFkbWluU2V0dGluZ3Mge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnZlcnNpb24gPSBrby5vYnNlcnZhYmxlKGFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJykpO1xuXHRcdHRoaXMuYWNjZXNzID0ga28ub2JzZXJ2YWJsZSghIXNldHRpbmdzR2V0KCdDb3JlQWNjZXNzJykpO1xuXHRcdHRoaXMuZXJyb3JEZXNjID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNvcmVSZWFsID0gQ29yZVN0b3JlLmNvcmVSZWFsO1xuXHRcdHRoaXMuY29yZUNoYW5uZWwgPSBDb3JlU3RvcmUuY29yZUNoYW5uZWw7XG5cdFx0dGhpcy5jb3JlVHlwZSA9IENvcmVTdG9yZS5jb3JlVHlwZTtcblx0XHR0aGlzLmNvcmVVcGRhdGFibGUgPSBDb3JlU3RvcmUuY29yZVVwZGF0YWJsZTtcblx0XHR0aGlzLmNvcmVBY2Nlc3MgPSBDb3JlU3RvcmUuY29yZUFjY2Vzcztcblx0XHR0aGlzLmNvcmVDaGVja2luZyA9IENvcmVTdG9yZS5jb3JlQ2hlY2tpbmc7XG5cdFx0dGhpcy5jb3JlVXBkYXRpbmcgPSBDb3JlU3RvcmUuY29yZVVwZGF0aW5nO1xuXHRcdHRoaXMuY29yZVdhcm5pbmcgPSBDb3JlU3RvcmUuY29yZVdhcm5pbmc7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbiA9IENvcmVTdG9yZS5jb3JlVmVyc2lvbjtcblx0XHR0aGlzLmNvcmVSZW1vdGVWZXJzaW9uID0gQ29yZVN0b3JlLmNvcmVSZW1vdGVWZXJzaW9uO1xuXHRcdHRoaXMuY29yZVJlbW90ZVJlbGVhc2UgPSBDb3JlU3RvcmUuY29yZVJlbW90ZVJlbGVhc2U7XG5cdFx0dGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUgPSBDb3JlU3RvcmUuY29yZVZlcnNpb25Db21wYXJlO1xuXG5cdFx0dGhpcy5jb21tdW5pdHkgPSBSTF9DT01NVU5JVFkgfHwgQXBwU3RvcmUuY29tbXVuaXR5KCk7XG5cblx0XHR0aGlzLmNvcmVSZW1vdGVWZXJzaW9uSHRtbERlc2MgPSBrby5jb21wdXRlZCgoKSA9PiB7XG5cdFx0XHR0cmFuc2xhdG9yVHJpZ2dlcigpO1xuXHRcdFx0cmV0dXJuIGkxOG4oJ1RBQl9BQk9VVC9IVE1MX05FV19WRVJTSU9OJywgeyAnVkVSU0lPTic6IHRoaXMuY29yZVJlbW90ZVZlcnNpb24oKSB9KTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc3RhdHVzVHlwZSA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGxldCB0eXBlID0gJyc7XG5cdFx0XHRjb25zdCB2ZXJzaW9uVG9Db21wYXJlID0gdGhpcy5jb3JlVmVyc2lvbkNvbXBhcmUoKSxcblx0XHRcdFx0aXNDaGVja2luZyA9IHRoaXMuY29yZUNoZWNraW5nKCksXG5cdFx0XHRcdGlzVXBkYXRpbmcgPSB0aGlzLmNvcmVVcGRhdGluZygpLFxuXHRcdFx0XHRpc1JlYWwgPSB0aGlzLmNvcmVSZWFsKCk7XG5cblx0XHRcdGlmIChpc0NoZWNraW5nKSB7XG5cdFx0XHRcdHR5cGUgPSAnY2hlY2tpbmcnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1VwZGF0aW5nKSB7XG5cdFx0XHRcdHR5cGUgPSAndXBkYXRpbmcnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1JlYWwgJiYgMCA9PT0gdmVyc2lvblRvQ29tcGFyZSkge1xuXHRcdFx0XHR0eXBlID0gJ3VwLXRvLWRhdGUnO1xuXHRcdFx0fSBlbHNlIGlmIChpc1JlYWwgJiYgLTEgPT09IHZlcnNpb25Ub0NvbXBhcmUpIHtcblx0XHRcdFx0dHlwZSA9ICdhdmFpbGFibGUnO1xuXHRcdFx0fSBlbHNlIGlmICghaXNSZWFsKSB7XG5cdFx0XHRcdHR5cGUgPSAnZXJyb3InO1xuXHRcdFx0XHR0aGlzLmVycm9yRGVzYygnQ2Fubm90IGFjY2VzcyB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgbW9tZW50LicpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHlwZTtcblx0XHR9KTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0aWYgKHRoaXMuYWNjZXNzKCkgJiYgIXRoaXMuY29tbXVuaXR5KSB7XG5cdFx0XHRnZXRBcHAoKS5yZWxvYWRDb3JlRGF0YSgpO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZUNvcmVEYXRhKCkge1xuXHRcdGlmICghdGhpcy5jb3JlVXBkYXRpbmcoKSAmJiAhdGhpcy5jb21tdW5pdHkpIHtcblx0XHRcdGdldEFwcCgpLnVwZGF0ZUNvcmVEYXRhKCk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB7IEFib3V0QWRtaW5TZXR0aW5ncywgQWJvdXRBZG1pblNldHRpbmdzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCAkIGZyb20gJyQnO1xuaW1wb3J0IGtleSBmcm9tICdrZXknO1xuXG5pbXBvcnQgeyBsZWZ0UGFuZWxEaXNhYmxlZCB9IGZyb20gJ0NvbW1vbi9HbG9iYWxzJztcbmltcG9ydCB7IEtleVN0YXRlIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcblxuaW1wb3J0IHsgdmlldywgVmlld1R5cGUsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L0FkbWluL1NldHRpbmdzL01lbnUnLFxuXHR0eXBlOiBWaWV3VHlwZS5MZWZ0LFxuXHR0ZW1wbGF0ZUlEOiAnQWRtaW5NZW51J1xufSlcbmNsYXNzIE1lbnVTZXR0aW5nc0FkbWluVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHQvKipcblx0ICogQHBhcmFtIHs/fSBzY3JlZW5cblx0ICovXG5cdGNvbnN0cnVjdG9yKHNjcmVlbikge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLmxlZnRQYW5lbERpc2FibGVkID0gbGVmdFBhbmVsRGlzYWJsZWQ7XG5cblx0XHR0aGlzLm1lbnUgPSBzY3JlZW4ubWVudTtcblx0fVxuXG5cdGxpbmsocm91dGUpIHtcblx0XHRyZXR1cm4gJyMvJyArIHJvdXRlO1xuXHR9XG5cblx0b25CdWlsZChkb20pIHtcblx0XHRrZXkoJ3VwLCBkb3duJywgS2V5U3RhdGUuU2V0dGluZ3MsIHNldHRpbmdzTWVudUtleXNIYW5kbGVyKCQoJy5iLWFkbWluLW1lbnUgLmUtaXRlbScsIGRvbSkpKTtcblx0fVxufVxuXG5leHBvcnQgeyBNZW51U2V0dGluZ3NBZG1pblZpZXcsIE1lbnVTZXR0aW5nc0FkbWluVmlldyBhcyBkZWZhdWx0IH07XG4iLCJpbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgKiBhcyBTZXR0aW5ncyBmcm9tICdTdG9yYWdlL1NldHRpbmdzJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCBEb21haW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vRG9tYWluJztcbmltcG9ydCBQbHVnaW5TdG9yZSBmcm9tICdTdG9yZXMvQWRtaW4vUGx1Z2luJztcbmltcG9ydCBQYWNrYWdlU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL1BhY2thZ2UnO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IHZpZXcsIFZpZXdUeXBlIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5Admlldyh7XG5cdG5hbWU6ICdWaWV3L0FkbWluL1NldHRpbmdzL1BhbmUnLFxuXHR0eXBlOiBWaWV3VHlwZS5SaWdodCxcblx0dGVtcGxhdGVJRDogJ0FkbWluUGFuZSdcbn0pXG5jbGFzcyBQYW5lU2V0dGluZ3NBZG1pblZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuYWRtaW5Eb21haW4gPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLnNldHRpbmdzR2V0KCdBZG1pbkRvbWFpbicpKTtcblx0XHR0aGlzLnZlcnNpb24gPSBrby5vYnNlcnZhYmxlKFNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCd2ZXJzaW9uJykpO1xuXG5cdFx0dGhpcy5jYXBhID0gISFTZXR0aW5ncy5zZXR0aW5nc0dldCgnUHJlbVR5cGUnKTtcblx0XHR0aGlzLmNvbW11bml0eSA9IFJMX0NPTU1VTklUWTtcblxuXHRcdHRoaXMuYWRtaW5NYW5Mb2FkaW5nID0ga28uY29tcHV0ZWQoXG5cdFx0XHQoKSA9PlxuXHRcdFx0XHQnMDAwJyAhPT1cblx0XHRcdFx0W1xuXHRcdFx0XHRcdERvbWFpblN0b3JlLmRvbWFpbnMubG9hZGluZygpID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdFBsdWdpblN0b3JlLnBsdWdpbnMubG9hZGluZygpID8gJzEnIDogJzAnLFxuXHRcdFx0XHRcdFBhY2thZ2VTdG9yZS5wYWNrYWdlcy5sb2FkaW5nKCkgPyAnMScgOiAnMCdcblx0XHRcdFx0XS5qb2luKCcnKVxuXHRcdCk7XG5cblx0XHR0aGlzLmFkbWluTWFuTG9hZGluZ1Zpc2liaWxpdHkgPSBrb1xuXHRcdFx0LmNvbXB1dGVkKCgpID0+ICh0aGlzLmFkbWluTWFuTG9hZGluZygpID8gJ3Zpc2libGUnIDogJ2hpZGRlbicpKVxuXHRcdFx0LmV4dGVuZCh7IHJhdGVMaW1pdDogMzAwIH0pO1xuXHR9XG5cblx0bG9nb3V0Q2xpY2soKSB7XG5cdFx0UmVtb3RlLmFkbWluTG9nb3V0KCgpID0+IHtcblx0XHRcdGdldEFwcCgpLmxvZ2luQW5kTG9nb3V0UmVsb2FkKHRydWUsIHRydWUpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCB7IFBhbmVTZXR0aW5nc0FkbWluVmlldywgUGFuZVNldHRpbmdzQWRtaW5WaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7IEFic3RyYWN0U2NyZWVuIH0gZnJvbSAnS25vaW4vQWJzdHJhY3RTY3JlZW4nO1xuXG5pbXBvcnQgeyBnZXRBcHAgfSBmcm9tICdIZWxwZXIvQXBwcy9BZG1pbic7XG5cbmltcG9ydCB7IExvZ2luQWRtaW5WaWV3IH0gZnJvbSAnVmlldy9BZG1pbi9Mb2dpbic7XG5cbmNsYXNzIExvZ2luQWRtaW5TY3JlZW4gZXh0ZW5kcyBBYnN0cmFjdFNjcmVlbiB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCdsb2dpbicsIFtMb2dpbkFkbWluVmlld10pO1xuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdGdldEFwcCgpLnNldFdpbmRvd1RpdGxlKCcnKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluU2NyZWVuLCBMb2dpbkFkbWluU2NyZWVuIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBrbyBmcm9tICdrbyc7XG5pbXBvcnQgXyBmcm9tICdfJztcblxuaW1wb3J0IHsgdHJpbSwgdHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiwgTWFnaWNzIH0gZnJvbSAnQ29tbW9uL0VudW1zJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcbmltcG9ydCB7ICR3aW4gfSBmcm9tICdDb21tb24vR2xvYmFscyc7XG5cbmltcG9ydCAqIGFzIFNldHRpbmdzIGZyb20gJ1N0b3JhZ2UvU2V0dGluZ3MnO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyB2aWV3LCBjb21tYW5kLCBWaWV3VHlwZSwgcm91dGVPZmYgfSBmcm9tICdLbm9pbi9Lbm9pbic7XG5pbXBvcnQgeyBBYnN0cmFjdFZpZXdOZXh0IH0gZnJvbSAnS25vaW4vQWJzdHJhY3RWaWV3TmV4dCc7XG5cbkB2aWV3KHtcblx0bmFtZTogJ1ZpZXcvQWRtaW4vTG9naW4nLFxuXHR0eXBlOiBWaWV3VHlwZS5DZW50ZXIsXG5cdHRlbXBsYXRlSUQ6ICdBZG1pbkxvZ2luJ1xufSlcbmNsYXNzIExvZ2luQWRtaW5WaWV3IGV4dGVuZHMgQWJzdHJhY3RWaWV3TmV4dCB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzLm1vYmlsZSA9ICEhU2V0dGluZ3MuYXBwU2V0dGluZ3NHZXQoJ21vYmlsZScpO1xuXHRcdHRoaXMubW9iaWxlRGV2aWNlID0gISFTZXR0aW5ncy5hcHBTZXR0aW5nc0dldCgnbW9iaWxlRGV2aWNlJyk7XG5cblx0XHR0aGlzLmhpZGVTdWJtaXRCdXR0b24gPSAhIVNldHRpbmdzLmFwcFNldHRpbmdzR2V0KCdoaWRlU3VibWl0QnV0dG9uJyk7XG5cblx0XHR0aGlzLmxvZ2luID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5wYXNzd29yZCA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5wYXNzd29yZEVycm9yID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cblx0XHR0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24gPSBrby5vYnNlcnZhYmxlKGZhbHNlKS5leHRlbmQoeyAnZmFsc2VUaW1lb3V0JzogNTAwIH0pO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvckFuaW1hdGlvbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpLmV4dGVuZCh7ICdmYWxzZVRpbWVvdXQnOiA1MDAgfSk7XG5cblx0XHR0aGlzLmxvZ2luRm9jdXMgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuZm9ybUhpZGRlbiA9IGtvLm9ic2VydmFibGUoZmFsc2UpO1xuXG5cdFx0dGhpcy5mb3JtRXJyb3IgPSBrby5jb21wdXRlZCgoKSA9PiB0aGlzLmxvZ2luRXJyb3JBbmltYXRpb24oKSB8fCB0aGlzLnBhc3N3b3JkRXJyb3JBbmltYXRpb24oKSk7XG5cblx0XHR0aGlzLmxvZ2luLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvZ2luRXJyb3IoZmFsc2UpKTtcblxuXHRcdHRoaXMucGFzc3dvcmQuc3Vic2NyaWJlKCgpID0+IHRoaXMucGFzc3dvcmRFcnJvcihmYWxzZSkpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yLnN1YnNjcmliZSgodikgPT4gdGhpcy5sb2dpbkVycm9yQW5pbWF0aW9uKCEhdikpO1xuXG5cdFx0dGhpcy5wYXNzd29yZEVycm9yLnN1YnNjcmliZSgodikgPT4ge1xuXHRcdFx0dGhpcy5wYXNzd29yZEVycm9yQW5pbWF0aW9uKCEhdik7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblx0XHR0aGlzLnN1Ym1pdEVycm9yID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdH1cblxuXHRAY29tbWFuZCgoc2VsZikgPT4gIXNlbGYuc3VibWl0UmVxdWVzdCgpKVxuXHRzdWJtaXRDb21tYW5kKCkge1xuXHRcdHRyaWdnZXJBdXRvY29tcGxldGVJbnB1dENoYW5nZSgpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yKGZhbHNlKTtcblx0XHR0aGlzLnBhc3N3b3JkRXJyb3IoZmFsc2UpO1xuXG5cdFx0dGhpcy5sb2dpbkVycm9yKCcnID09PSB0cmltKHRoaXMubG9naW4oKSkpO1xuXHRcdHRoaXMucGFzc3dvcmRFcnJvcignJyA9PT0gdHJpbSh0aGlzLnBhc3N3b3JkKCkpKTtcblxuXHRcdGlmICh0aGlzLmxvZ2luRXJyb3IoKSB8fCB0aGlzLnBhc3N3b3JkRXJyb3IoKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuc3VibWl0UmVxdWVzdCh0cnVlKTtcblx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmRpYWN0aXZhdGUnKTtcblxuXHRcdFJlbW90ZS5hZG1pbkxvZ2luKFxuXHRcdFx0KHNSZXN1bHQsIG9EYXRhKSA9PiB7XG5cdFx0XHRcdCR3aW4udHJpZ2dlcigncmwudG9vbHRpcHMuZGlhY3RpdmF0ZScpO1xuXHRcdFx0XHQkd2luLnRyaWdnZXIoJ3JsLnRvb2x0aXBzLmFjdGl2YXRlJyk7XG5cblx0XHRcdFx0aWYgKFN0b3JhZ2VSZXN1bHRUeXBlLlN1Y2Nlc3MgPT09IHNSZXN1bHQgJiYgb0RhdGEgJiYgJ0FkbWluTG9naW4nID09PSBvRGF0YS5BY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAob0RhdGEuUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRnZXRBcHAoKS5sb2dpbkFuZExvZ291dFJlbG9hZCh0cnVlKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9EYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5zdWJtaXRSZXF1ZXN0KGZhbHNlKTtcblx0XHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKG9EYXRhLkVycm9yQ29kZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnN1Ym1pdFJlcXVlc3QoZmFsc2UpO1xuXHRcdFx0XHRcdHRoaXMuc3VibWl0RXJyb3IoZ2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbi5Vbmtub3duRXJyb3IpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHRoaXMubG9naW4oKSxcblx0XHRcdHRoaXMucGFzc3dvcmQoKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdG9uU2hvdygpIHtcblx0XHRyb3V0ZU9mZigpO1xuXG5cdFx0Xy5kZWxheSgoKSA9PiB7XG5cdFx0XHR0aGlzLmxvZ2luRm9jdXModHJ1ZSk7XG5cdFx0fSwgTWFnaWNzLlRpbWUxMDBtcyk7XG5cdH1cblxuXHRvbkhpZGUoKSB7XG5cdFx0dGhpcy5sb2dpbkZvY3VzKGZhbHNlKTtcblx0fVxuXG5cdG9uQnVpbGQoKSB7XG5cdFx0dHJpZ2dlckF1dG9jb21wbGV0ZUlucHV0Q2hhbmdlKHRydWUpO1xuXHR9XG5cblx0c3VibWl0Rm9ybSgpIHtcblx0XHR0aGlzLnN1Ym1pdENvbW1hbmQoKTtcblx0fVxufVxuXG5leHBvcnQgeyBMb2dpbkFkbWluVmlldywgTG9naW5BZG1pblZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGJvb3RzdHJhcCBmcm9tICdib290c3RyYXAnO1xuaW1wb3J0IEFwcCBmcm9tICdBcHAvQWRtaW4nO1xuXG5ib290c3RyYXAoQXBwKTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcblxuaW1wb3J0IHsgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBiTW9iaWxlRGV2aWNlIH0gZnJvbSAnQ29tbW9uL0dsb2JhbHMnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IERvbWFpblN0b3JlIGZyb20gJ1N0b3Jlcy9BZG1pbi9Eb21haW4nO1xuXG5pbXBvcnQgUmVtb3RlIGZyb20gJ1JlbW90ZS9BZG1pbi9BamF4JztcblxuaW1wb3J0IHsgZ2V0QXBwIH0gZnJvbSAnSGVscGVyL0FwcHMvQWRtaW4nO1xuXG5pbXBvcnQgeyBwb3B1cCwgY29tbWFuZCB9IGZyb20gJ0tub2luL0tub2luJztcbmltcG9ydCB7IEFic3RyYWN0Vmlld05leHQgfSBmcm9tICdLbm9pbi9BYnN0cmFjdFZpZXdOZXh0JztcblxuQHBvcHVwKHtcblx0bmFtZTogJ1ZpZXcvUG9wdXAvRG9tYWluQWxpYXMnLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzRG9tYWluQWxpYXMnXG59KVxuY2xhc3MgRG9tYWluQWxpYXNQb3B1cFZpZXcgZXh0ZW5kcyBBYnN0cmFjdFZpZXdOZXh0IHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMuc2F2aW5nID0ga28ub2JzZXJ2YWJsZShmYWxzZSk7XG5cdFx0dGhpcy5zYXZpbmdFcnJvciA9IGtvLm9ic2VydmFibGUoJycpO1xuXG5cdFx0dGhpcy5uYW1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQgPSBrby5vYnNlcnZhYmxlKGZhbHNlKTtcblxuXHRcdHRoaXMuYWxpYXMgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMuZG9tYWlucyA9IERvbWFpblN0b3JlLmRvbWFpbnNXaXRob3V0QWxpYXNlcztcblxuXHRcdHRoaXMuZG9tYWluc09wdGlvbnMgPSBrby5jb21wdXRlZCgoKSA9PlxuXHRcdFx0Xy5tYXAodGhpcy5kb21haW5zKCksIChpdGVtKSA9PiAoeyBvcHRWYWx1ZTogaXRlbS5uYW1lLCBvcHRUZXh0OiBpdGVtLm5hbWUgfSkpXG5cdFx0KTtcblxuXHRcdHRoaXMuY2FuQmVTYXZlZCA9IGtvLmNvbXB1dGVkKCgpID0+ICF0aGlzLnNhdmluZygpICYmICcnICE9PSB0aGlzLm5hbWUoKSAmJiAnJyAhPT0gdGhpcy5hbGlhcygpKTtcblxuXHRcdHRoaXMub25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlID0gXy5iaW5kKHRoaXMub25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlLCB0aGlzKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmNhbkJlU2F2ZWQoKSlcblx0Y3JlYXRlQ29tbWFuZCgpIHtcblx0XHR0aGlzLnNhdmluZyh0cnVlKTtcblx0XHRSZW1vdGUuY3JlYXRlRG9tYWluQWxpYXModGhpcy5vbkRvbWFpbkFsaWFzQ3JlYXRlT3JTYXZlUmVzcG9uc2UsIHRoaXMubmFtZSgpLCB0aGlzLmFsaWFzKCkpO1xuXHR9XG5cblx0b25Eb21haW5BbGlhc0NyZWF0ZU9yU2F2ZVJlc3BvbnNlKHJlc3VsdCwgZGF0YSkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEpIHtcblx0XHRcdGlmIChkYXRhLlJlc3VsdCkge1xuXHRcdFx0XHRnZXRBcHAoKS5yZWxvYWREb21haW5MaXN0KCk7XG5cdFx0XHRcdHRoaXMuY2xvc2VDb21tYW5kKCk7XG5cdFx0XHR9IGVsc2UgaWYgKE5vdGlmaWNhdGlvbi5Eb21haW5BbHJlYWR5RXhpc3RzID09PSBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHR0aGlzLnNhdmluZ0Vycm9yKGkxOG4oJ0VSUk9SUy9ET01BSU5fQUxSRUFEWV9FWElTVFMnKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2F2aW5nRXJyb3IoaTE4bignRVJST1JTL1VOS05PV05fRVJST1InKSk7XG5cdFx0fVxuXHR9XG5cblx0b25TaG93KCkge1xuXHRcdHRoaXMuY2xlYXJGb3JtKCk7XG5cdH1cblxuXHRvblNob3dXaXRoRGVsYXkoKSB7XG5cdFx0aWYgKCcnID09PSB0aGlzLm5hbWUoKSAmJiAhYk1vYmlsZURldmljZSkge1xuXHRcdFx0dGhpcy5uYW1lLmZvY3VzZWQodHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y2xlYXJGb3JtKCkge1xuXHRcdHRoaXMuc2F2aW5nKGZhbHNlKTtcblx0XHR0aGlzLnNhdmluZ0Vycm9yKCcnKTtcblxuXHRcdHRoaXMubmFtZSgnJyk7XG5cdFx0dGhpcy5uYW1lLmZvY3VzZWQoZmFsc2UpO1xuXG5cdFx0dGhpcy5hbGlhcygnJyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgRG9tYWluQWxpYXNQb3B1cFZpZXcsIERvbWFpbkFsaWFzUG9wdXBWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBfIGZyb20gJ18nO1xuaW1wb3J0IGtvIGZyb20gJ2tvJztcbmltcG9ydCBrZXkgZnJvbSAna2V5JztcblxuaW1wb3J0IHsgS2V5U3RhdGUsIE1hZ2ljcywgU3RvcmFnZVJlc3VsdFR5cGUsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0NvbW1vbi9FbnVtcyc7XG5pbXBvcnQgeyBpc05vbkVtcHR5QXJyYXksIGRlbGVnYXRlUnVuIH0gZnJvbSAnQ29tbW9uL1V0aWxzJztcbmltcG9ydCB7IGdldE5vdGlmaWNhdGlvbiwgaTE4biB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5cbmltcG9ydCB7IHBvcHVwLCBjb21tYW5kLCBpc1BvcHVwVmlzaWJsZSwgc2hvd1NjcmVlblBvcHVwIH0gZnJvbSAnS25vaW4vS25vaW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RWaWV3TmV4dCB9IGZyb20gJ0tub2luL0Fic3RyYWN0Vmlld05leHQnO1xuXG5AcG9wdXAoe1xuXHRuYW1lOiAnVmlldy9Qb3B1cC9QbHVnaW4nLFxuXHR0ZW1wbGF0ZUlEOiAnUG9wdXBzUGx1Z2luJ1xufSlcbmNsYXNzIFBsdWdpblBvcHVwVmlldyBleHRlbmRzIEFic3RyYWN0Vmlld05leHQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UgPSBfLmJpbmQodGhpcy5vblBsdWdpblNldHRpbmdzVXBkYXRlUmVzcG9uc2UsIHRoaXMpO1xuXG5cdFx0dGhpcy5zYXZlRXJyb3IgPSBrby5vYnNlcnZhYmxlKCcnKTtcblxuXHRcdHRoaXMubmFtZSA9IGtvLm9ic2VydmFibGUoJycpO1xuXHRcdHRoaXMucmVhZG1lID0ga28ub2JzZXJ2YWJsZSgnJyk7XG5cblx0XHR0aGlzLmNvbmZpZ3VyZXMgPSBrby5vYnNlcnZhYmxlQXJyYXkoW10pO1xuXG5cdFx0dGhpcy5oYXNSZWFkbWUgPSBrby5jb21wdXRlZCgoKSA9PiAnJyAhPT0gdGhpcy5yZWFkbWUoKSk7XG5cdFx0dGhpcy5oYXNDb25maWd1cmF0aW9uID0ga28uY29tcHV0ZWQoKCkgPT4gMCA8IHRoaXMuY29uZmlndXJlcygpLmxlbmd0aCk7XG5cblx0XHR0aGlzLnJlYWRtZVBvcG92ZXJDb25mID0ge1xuXHRcdFx0J3BsYWNlbWVudCc6ICdyaWdodCcsXG5cdFx0XHQndHJpZ2dlcic6ICdob3ZlcicsXG5cdFx0XHQndGl0bGUnOiBpMThuKCdQT1BVUFNfUExVR0lOL1RPT0xUSVBfQUJPVVRfVElUTEUnKSxcblx0XHRcdCdjb250YWluZXInOiAnYm9keScsXG5cdFx0XHQnaHRtbCc6IHRydWUsXG5cdFx0XHQnY29udGVudCc6ICgpID0+IGA8cHJlPiR7dGhpcy5yZWFkbWUoKX08L3ByZT5gXG5cdFx0fTtcblxuXHRcdHRoaXMuYkRpc2FiZUNsb3NlT25Fc2MgPSB0cnVlO1xuXHRcdHRoaXMuc0RlZmF1bHRLZXlTY29wZSA9IEtleVN0YXRlLkFsbDtcblxuXHRcdHRoaXMudHJ5VG9DbG9zZVBvcHVwID0gXy5kZWJvdW5jZShfLmJpbmQodGhpcy50cnlUb0Nsb3NlUG9wdXAsIHRoaXMpLCBNYWdpY3MuVGltZTIwMG1zKTtcblx0fVxuXG5cdEBjb21tYW5kKChzZWxmKSA9PiBzZWxmLmhhc0NvbmZpZ3VyYXRpb24oKSlcblx0c2F2ZUNvbW1hbmQoKSB7XG5cdFx0Y29uc3QgbGlzdCA9IHt9O1xuXHRcdGxpc3QuTmFtZSA9IHRoaXMubmFtZSgpO1xuXG5cdFx0Xy5lYWNoKHRoaXMuY29uZmlndXJlcygpLCAob0l0ZW0pID0+IHtcblx0XHRcdGxldCB2YWx1ZSA9IG9JdGVtLnZhbHVlKCk7XG5cdFx0XHRpZiAoZmFsc2UgPT09IHZhbHVlIHx8IHRydWUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPyAnMScgOiAnMCc7XG5cdFx0XHR9XG5cdFx0XHRsaXN0WydfJyArIG9JdGVtLk5hbWVdID0gdmFsdWU7XG5cdFx0fSk7XG5cblx0XHR0aGlzLnNhdmVFcnJvcignJyk7XG5cdFx0UmVtb3RlLnBsdWdpblNldHRpbmdzVXBkYXRlKHRoaXMub25QbHVnaW5TZXR0aW5nc1VwZGF0ZVJlc3BvbnNlLCBsaXN0KTtcblx0fVxuXG5cdG9uUGx1Z2luU2V0dGluZ3NVcGRhdGVSZXNwb25zZShyZXN1bHQsIGRhdGEpIHtcblx0XHRpZiAoU3RvcmFnZVJlc3VsdFR5cGUuU3VjY2VzcyA9PT0gcmVzdWx0ICYmIGRhdGEgJiYgZGF0YS5SZXN1bHQpIHtcblx0XHRcdHRoaXMuY2FuY2VsQ29tbWFuZCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNhdmVFcnJvcignJyk7XG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLkVycm9yQ29kZSkge1xuXHRcdFx0XHR0aGlzLnNhdmVFcnJvcihnZXROb3RpZmljYXRpb24oZGF0YS5FcnJvckNvZGUpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2F2ZUVycm9yKGdldE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uQ2FudFNhdmVQbHVnaW5TZXR0aW5ncykpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uU2hvdyhvUGx1Z2luKSB7XG5cdFx0dGhpcy5uYW1lKCk7XG5cdFx0dGhpcy5yZWFkbWUoKTtcblx0XHR0aGlzLmNvbmZpZ3VyZXMoW10pO1xuXG5cdFx0aWYgKG9QbHVnaW4pIHtcblx0XHRcdHRoaXMubmFtZShvUGx1Z2luLk5hbWUpO1xuXHRcdFx0dGhpcy5yZWFkbWUob1BsdWdpbi5SZWFkbWUpO1xuXG5cdFx0XHRjb25zdCBjb25maWcgPSBvUGx1Z2luLkNvbmZpZztcblx0XHRcdGlmIChpc05vbkVtcHR5QXJyYXkoY29uZmlnKSkge1xuXHRcdFx0XHR0aGlzLmNvbmZpZ3VyZXMoXG5cdFx0XHRcdFx0Xy5tYXAoY29uZmlnLCAoaXRlbSkgPT4gKHtcblx0XHRcdFx0XHRcdCd2YWx1ZSc6IGtvLm9ic2VydmFibGUoaXRlbVswXSksXG5cdFx0XHRcdFx0XHQncGxhY2Vob2xkZXInOiBrby5vYnNlcnZhYmxlKGl0ZW1bNl0pLFxuXHRcdFx0XHRcdFx0J05hbWUnOiBpdGVtWzFdLFxuXHRcdFx0XHRcdFx0J1R5cGUnOiBpdGVtWzJdLFxuXHRcdFx0XHRcdFx0J0xhYmVsJzogaXRlbVszXSxcblx0XHRcdFx0XHRcdCdEZWZhdWx0JzogaXRlbVs0XSxcblx0XHRcdFx0XHRcdCdEZXNjJzogaXRlbVs1XVxuXHRcdFx0XHRcdH0pKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRyeVRvQ2xvc2VQb3B1cCgpIHtcblx0XHRjb25zdCBQb3B1cHNBc2tWaWV3TW9kZWwgPSByZXF1aXJlKCdWaWV3L1BvcHVwL0FzaycpO1xuXHRcdGlmICghaXNQb3B1cFZpc2libGUoUG9wdXBzQXNrVmlld01vZGVsKSkge1xuXHRcdFx0c2hvd1NjcmVlblBvcHVwKFBvcHVwc0Fza1ZpZXdNb2RlbCwgW1xuXHRcdFx0XHRpMThuKCdQT1BVUFNfQVNLL0RFU0NfV0FOVF9DTE9TRV9USElTX1dJTkRPVycpLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubW9kYWxWaXNpYmlsaXR5KCkpIHtcblx0XHRcdFx0XHRcdGRlbGVnYXRlUnVuKHRoaXMsICdjYW5jZWxDb21tYW5kJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdKTtcblx0XHR9XG5cdH1cblxuXHRvbkJ1aWxkKCkge1xuXHRcdGtleSgnZXNjJywgS2V5U3RhdGUuQWxsLCAoKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5tb2RhbFZpc2liaWxpdHkoKSkge1xuXHRcdFx0XHR0aGlzLnRyeVRvQ2xvc2VQb3B1cCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgUGx1Z2luUG9wdXBWaWV3LCBQbHVnaW5Qb3B1cFZpZXcgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IF8gZnJvbSAnXyc7XG5pbXBvcnQga28gZnJvbSAna28nO1xuXG5pbXBvcnQgeyBNYWdpY3MgfSBmcm9tICdDb21tb24vRW51bXMnO1xuaW1wb3J0IHsgc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24sIHRyaW0gfSBmcm9tICdDb21tb24vVXRpbHMnO1xuaW1wb3J0IHsgaTE4biwgdHJpZ2dlciBhcyB0cmFuc2xhdG9yVHJpZ2dlciB9IGZyb20gJ0NvbW1vbi9UcmFuc2xhdG9yJztcblxuaW1wb3J0IFJlbW90ZSBmcm9tICdSZW1vdGUvQWRtaW4vQWpheCc7XG5pbXBvcnQgQXBwU3RvcmUgZnJvbSAnU3RvcmVzL0FkbWluL0FwcCc7XG5cbmltcG9ydCB7IHNldHRpbmdzR2V0IH0gZnJvbSAnU3RvcmFnZS9TZXR0aW5ncyc7XG5cbmNsYXNzIEJyYW5kaW5nQWRtaW5TZXR0aW5ncyB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2FwYSA9IEFwcFN0b3JlLnByZW07XG5cblx0XHR0aGlzLnRpdGxlID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVGl0bGUnKSkuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvYWRpbmdEZXNjID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9hZGluZ0Rlc2NyaXB0aW9uJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5mYXZpY29uVXJsID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnRmF2aWNvblVybCcpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMubG9naW5Mb2dvID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnTG9naW5Mb2dvJykgfHwgJycpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkJhY2tncm91bmQgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkJhY2tncm91bmQnKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJMb2dvID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckxvZ28nKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLnVzZXJMb2dvTWVzc2FnZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJMb2dvTWVzc2FnZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlcklmcmFtZU1lc3NhZ2UgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdVc2VySWZyYW1lTWVzc2FnZScpIHx8ICcnKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMudXNlckxvZ29UaXRsZSA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ1VzZXJMb2dvVGl0bGUnKSB8fCAnJykuaWRsZVRyaWdnZXIoKTtcblx0XHR0aGlzLmxvZ2luRGVzY3JpcHRpb24gPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdMb2dpbkRlc2NyaXB0aW9uJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy5sb2dpbkNzcyA9IGtvLm9ic2VydmFibGUoc2V0dGluZ3NHZXQoJ0xvZ2luQ3NzJykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy51c2VyQ3NzID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnVXNlckNzcycpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMud2VsY29tZVBhZ2VVcmwgPSBrby5vYnNlcnZhYmxlKHNldHRpbmdzR2V0KCdXZWxjb21lUGFnZVVybCcpKS5pZGxlVHJpZ2dlcigpO1xuXHRcdHRoaXMud2VsY29tZVBhZ2VEaXNwbGF5ID0ga28ub2JzZXJ2YWJsZShzZXR0aW5nc0dldCgnV2VsY29tZVBhZ2VEaXNwbGF5JykpLmlkbGVUcmlnZ2VyKCk7XG5cdFx0dGhpcy53ZWxjb21lUGFnZURpc3BsYXkub3B0aW9ucyA9IGtvLmNvbXB1dGVkKCgpID0+IHtcblx0XHRcdHRyYW5zbGF0b3JUcmlnZ2VyKCk7XG5cdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHR7IG9wdFZhbHVlOiAnbm9uZScsIG9wdFRleHQ6IGkxOG4oJ1RBQl9CUkFORElORy9PUFRJT05fV0VMQ09NRV9QQUdFX0RJU1BMQVlfTk9ORScpIH0sXG5cdFx0XHRcdHsgb3B0VmFsdWU6ICdvbmNlJywgb3B0VGV4dDogaTE4bignVEFCX0JSQU5ESU5HL09QVElPTl9XRUxDT01FX1BBR0VfRElTUExBWV9PTkNFJykgfSxcblx0XHRcdFx0eyBvcHRWYWx1ZTogJ2Fsd2F5cycsIG9wdFRleHQ6IGkxOG4oJ1RBQl9CUkFORElORy9PUFRJT05fV0VMQ09NRV9QQUdFX0RJU1BMQVlfQUxXQVlTJykgfVxuXHRcdFx0XTtcblx0XHR9KTtcblxuXHRcdHRoaXMuY29tbXVuaXR5ID0gUkxfQ09NTVVOSVRZIHx8IEFwcFN0b3JlLmNvbW11bml0eSgpO1xuXHR9XG5cblx0b25CdWlsZCgpIHtcblx0XHRfLmRlbGF5KCgpID0+IHtcblx0XHRcdGNvbnN0IGYxID0gc2V0dGluZ3NTYXZlSGVscGVyU2ltcGxlRnVuY3Rpb24odGhpcy50aXRsZS50cmlnZ2VyLCB0aGlzKSxcblx0XHRcdFx0ZjIgPSBzZXR0aW5nc1NhdmVIZWxwZXJTaW1wbGVGdW5jdGlvbih0aGlzLmxvYWRpbmdEZXNjLnRyaWdnZXIsIHRoaXMpLFxuXHRcdFx0XHRmMyA9IHNldHRpbmdzU2F2ZUhlbHBlclNpbXBsZUZ1bmN0aW9uKHRoaXMuZmF2aWNvblVybC50cmlnZ2VyLCB0aGlzKTtcblxuXHRcdFx0dGhpcy50aXRsZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFJlbW90ZS5zYXZlQWRtaW5Db25maWcoZjEsIHtcblx0XHRcdFx0XHQnVGl0bGUnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmxvYWRpbmdEZXNjLnN1YnNjcmliZSgodmFsdWUpID0+IHtcblx0XHRcdFx0UmVtb3RlLnNhdmVBZG1pbkNvbmZpZyhmMiwge1xuXHRcdFx0XHRcdCdMb2FkaW5nRGVzY3JpcHRpb24nOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmZhdmljb25Vcmwuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRSZW1vdGUuc2F2ZUFkbWluQ29uZmlnKGYzLCB7XG5cdFx0XHRcdFx0J0Zhdmljb25VcmwnOiB0cmltKHZhbHVlKVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0sIE1hZ2ljcy5UaW1lNTBtcyk7XG5cdH1cbn1cblxuZXhwb3J0IHsgQnJhbmRpbmdBZG1pblNldHRpbmdzLCBCcmFuZGluZ0FkbWluU2V0dGluZ3MgYXMgZGVmYXVsdCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== diff --git a/app/rainloop/v/1.15.0/static/js/app.js b/app/rainloop/v/1.16.0/static/js/app.js similarity index 51% rename from app/rainloop/v/1.15.0/static/js/app.js rename to app/rainloop/v/1.16.0/static/js/app.js index dbbc0d3e88c21384b33e2cfe9f85a9c936c7d1da..2f89ddf0444743bac53e2a7cf6ae4714b2c0d8b8 100644 --- a/app/rainloop/v/1.15.0/static/js/app.js +++ b/app/rainloop/v/1.16.0/static/js/app.js @@ -82,7 +82,7 @@ /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 523); +/******/ return __webpack_require__(__webpack_require__.s = 548); /******/ }) /************************************************************************/ /******/ ([ @@ -661,30 +661,30 @@ var Notification = { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__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 */ 139); +/* harmony import */ var core_js_modules_es_string_link_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.string.link.js */ 205); +/* 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 */ 86); +/* 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 */ 154); /* 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_find__WEBPACK_IMPORTED_MODULE_7__ = __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_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7__); +/* 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__(/*! $ */ 8); /* 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 */ 213); -/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 214); +/* harmony import */ var Opentip__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Opentip */ 229); +/* harmony import */ var pikaday__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! pikaday */ 230); /* 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); @@ -718,7 +718,8 @@ ko.bindingHandlers.updateWidth = { fValue = fValueAccessor(), fInit = function fInit() { fValue($el.width()); - window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { + + _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); }; @@ -735,7 +736,7 @@ ko.bindingHandlers.editor = { var editor = null; var fValue = fValueAccessor(), - HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 210).default, + HtmlEditor = __webpack_require__(/*! Common/HtmlEditor */ 227).default, fUpdateEditorValue = function fUpdateEditorValue() { if (fValue && fValue.__editor) { fValue.__editor.setHtmlOrPlain(fValue()); @@ -771,7 +772,7 @@ 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_7___default()($el).call($el, '[data-scroller-shadows-content]')[0] || null, + 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); @@ -969,10 +970,10 @@ ko.bindingHandlers.openDropdownTrigger = { var $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element); if (!$el.hasClass('open')) { - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___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').dropdown('toggle'); } - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.dropdown-toggle').focus(); + _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(); @@ -1103,7 +1104,7 @@ ko.bindingHandlers.modal = { var Globals = __webpack_require__(/*! Common/Globals */ 6), Utils = __webpack_require__(/*! Common/Utils */ 2); - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context = $__WEBPACK_IMPORTED_MODULE_10___default()(element).toggleClass('fade', !Globals.bMobileDevice).modal({ + _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 () { @@ -1113,7 +1114,7 @@ ko.bindingHandlers.modal = { ko.utils.domNodeDisposal.addDisposeCallback(element, function () { var _context2; - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context2 = $__WEBPACK_IMPORTED_MODULE_10___default()(element).off('shown.koModal')).call(_context2, '.close').off('click.koModal'); + _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) { @@ -1132,10 +1133,10 @@ ko.bindingHandlers.modal = { }; ko.bindingHandlers.moment = { init: function init(element, fValueAccessor) { - __webpack_require__(/*! Common/Momentor */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).addClass('moment').data('moment-time', ko.unwrap(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 */ 60).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); + __webpack_require__(/*! Common/Momentor */ 61).momentToNode($__WEBPACK_IMPORTED_MODULE_10___default()(element).data('moment-time', ko.unwrap(fValueAccessor()))); } }; ko.bindingHandlers.i18nInit = { @@ -1272,7 +1273,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveUp, 10)); + $this.data('timerScroll', _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(moveUp, 10)); moveUp(); } @@ -1282,7 +1283,7 @@ ko.bindingHandlers.draggable = { Utils.windowResize(); }; - $this.data('timerScroll', window__WEBPACK_IMPORTED_MODULE_8___default.a.setInterval(moveDown, 10)); + $this.data('timerScroll', _babel_runtime_corejs3_core_js_stable_set_interval__WEBPACK_IMPORTED_MODULE_5___default()(moveDown, 10)); moveDown(); } } @@ -1387,22 +1388,22 @@ ko.bindingHandlers.saveTrigger = { if ('custom' === $el.data('save-trigger-type')) { switch (value.toString()) { case '1': - _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()(_context3 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated,.error').hide().removeClass('visible').end()).call(_context3, '.success').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_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_7___default()(_context4 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated,.success').hide().removeClass('visible').end()).call(_context4, '.error').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_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_7___default()(_context5 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.error,.success').hide().removeClass('visible').end()).call(_context5, '.animated').show().addClass('visible'); + _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_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_7___default()(_context6 = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_7___default()($el).call($el, '.animated').hide().end()).call(_context6, '.error,.success').removeClass('visible'); + _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; } @@ -1429,7 +1430,7 @@ ko.bindingHandlers.saveTrigger = { ko.bindingHandlers.emailsTags = { init: function init(element, fValueAccessor, fAllBindingsAccessor) { var Utils = __webpack_require__(/*! Common/Utils */ 2), - EmailModel = __webpack_require__(/*! Model/Email */ 82).default, + EmailModel = __webpack_require__(/*! Model/Email */ 83).default, $el = $__WEBPACK_IMPORTED_MODULE_10___default()(element), fValue = fValueAccessor(), fAllBindings = fAllBindingsAccessor(), @@ -1450,14 +1451,14 @@ ko.bindingHandlers.emailsTags = { 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 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_5___default()(inputDelimiters).call(inputDelimiters, v.substr(-1))) { + 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_4___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_4___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, input, function (inputValue) { + 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) { @@ -1658,7 +1659,7 @@ ko.extenders.falseTimeout = function (target, option) { target.subscribe(function (value) { if (value) { window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iFalseTimeoutTimeout); - target.iFalseTimeoutTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { + 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)); @@ -1683,7 +1684,7 @@ ko.extenders.specialThrottle = function (target, option) { } else { if (target.valueForRead()) { window__WEBPACK_IMPORTED_MODULE_8___default.a.clearTimeout(target.iSpecialThrottleTimeout); - target.iSpecialThrottleTimeout = window__WEBPACK_IMPORTED_MODULE_8___default.a.setTimeout(function () { + target.iSpecialThrottleTimeout = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_3___default()(function () { target.valueForRead(false); target.iSpecialThrottleTimeout = 0; }, target.iSpecialThrottleTimeoutValue); @@ -1850,57 +1851,50 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "domReady", function() { return domReady; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResize", function() { return windowResize; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowResizeCallback", function() { return windowResizeCallback; }); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.function.name */ 51); -/* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ 63); -/* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ 111); -/* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.match */ 198); -/* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_6__); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.string.split */ 174); -/* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.string.link */ 175); -/* harmony import */ var core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_link__WEBPACK_IMPORTED_MODULE_8__); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_9__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/reduce */ 211); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_reduce__WEBPACK_IMPORTED_MODULE_10__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/values */ 114); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_values__WEBPACK_IMPORTED_MODULE_11__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/concat */ 162); +/* 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 */ 86); +/* 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 */ 204); +/* 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 */ 225); +/* 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 */ 205); +/* 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 */ 154); +/* 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 */ 176); /* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_concat__WEBPACK_IMPORTED_MODULE_12__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/find */ 12); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_14__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/last-index-of */ 212); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/bind */ 26); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/trim */ 139); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17__); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! window */ 4); -/* harmony import */ var window__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(window__WEBPACK_IMPORTED_MODULE_18__); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_19__); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_20__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! Autolinker */ 215); -/* harmony import */ var Autolinker__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(Autolinker__WEBPACK_IMPORTED_MODULE_22__); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! Common/Globals */ 6); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Mime__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! Common/Mime */ 216); -/* harmony import */ var Common_Jassl__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! Common/Jassl */ 113); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "jassl", function() { return Common_Jassl__WEBPACK_IMPORTED_MODULE_26__["a"]; }); - +/* 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 */ 228); +/* 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__(/*! $ */ 8); +/* 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 */ 231); +/* 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 */ 232); +/* 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"]; }); @@ -1927,19 +1921,16 @@ __webpack_require__.r(__webpack_exports__); +var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_9___default()($__WEBPACK_IMPORTED_MODULE_16___default.a); - -var trim = _babel_runtime_corejs3_core_js_stable_instance_trim__WEBPACK_IMPORTED_MODULE_17___default()($__WEBPACK_IMPORTED_MODULE_19___default.a); - -var inArray = $__WEBPACK_IMPORTED_MODULE_19___default.a.inArray; -var isArray = ___WEBPACK_IMPORTED_MODULE_20___default.a.isArray; -var isObject = ___WEBPACK_IMPORTED_MODULE_20___default.a.isObject; -var isFunc = ___WEBPACK_IMPORTED_MODULE_20___default.a.isFunction; -var isUnd = ___WEBPACK_IMPORTED_MODULE_20___default.a.isUndefined; -var isNull = ___WEBPACK_IMPORTED_MODULE_20___default.a.isNull; -var has = ___WEBPACK_IMPORTED_MODULE_20___default.a.has; - -var bind = _babel_runtime_corejs3_core_js_stable_instance_bind__WEBPACK_IMPORTED_MODULE_16___default()(___WEBPACK_IMPORTED_MODULE_20___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 @@ -1995,8 +1986,8 @@ function pInt(value, defaultValur) { defaultValur = 0; } - var result = isNormal(value) && '' !== value ? window__WEBPACK_IMPORTED_MODULE_18___default.a.parseInt(value, 10) : defaultValur; - return window__WEBPACK_IMPORTED_MODULE_18___default.a.isNaN(result) ? defaultValur : result; + 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 @@ -2036,7 +2027,7 @@ function isNonEmptyArray(values) { */ function encodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.encodeURIComponent(component); + return window__WEBPACK_IMPORTED_MODULE_15___default.a.encodeURIComponent(component); } /** * @param {string} component @@ -2044,7 +2035,7 @@ function encodeURIComponent(component) { */ function decodeURIComponent(component) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.decodeURIComponent(component); + return window__WEBPACK_IMPORTED_MODULE_15___default.a.decodeURIComponent(component); } /** * @param {string} url @@ -2052,7 +2043,7 @@ function decodeURIComponent(component) { */ function decodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.decodeURI(url); + return window__WEBPACK_IMPORTED_MODULE_15___default.a.decodeURI(url); } /** * @param {string} url @@ -2060,7 +2051,7 @@ function decodeURI(url) { */ function encodeURI(url) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.encodeURI(url); + return window__WEBPACK_IMPORTED_MODULE_15___default.a.encodeURI(url); } /** * @param {string} queryString @@ -2097,7 +2088,7 @@ function fakeMd5(len) { var result = ''; while (result.length < len) { - result += line.substr(window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.random() * lineLen), 1); + 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; @@ -2108,7 +2099,7 @@ function fakeMd5(len) { */ function encodeHtml(text) { - return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_20___default.a.escape(text.toString()) : ''; + return isNormal(text) ? ___WEBPACK_IMPORTED_MODULE_17___default.a.escape(text.toString()) : ''; } /** * @param {string} text @@ -2129,8 +2120,8 @@ function splitPlainText(text, len) { while (result.length > len) { subText = result.substring(0, len); - spacePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default()(subText).call(subText, ' '); - newLinePos = _babel_runtime_corejs3_core_js_stable_instance_last_index_of__WEBPACK_IMPORTED_MODULE_15___default()(subText).call(subText, '\n'); + spacePos = subText.lastIndexOf(' '); + newLinePos = subText.lastIndexOf('\n'); if (-1 !== newLinePos) { spacePos = newLinePos; @@ -2151,8 +2142,8 @@ var timeOutAction = function () { var timeOuts = {}; return function (action, fFunction, timeOut) { timeOuts[action] = isUnd(timeOuts[action]) ? 0 : timeOuts[action]; - window__WEBPACK_IMPORTED_MODULE_18___default.a.clearTimeout(timeOuts[action]); - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(fFunction, timeOut); + 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); }; }(); @@ -2160,7 +2151,7 @@ var timeOutActionSecond = function () { var timeOuts = {}; return function (action, fFunction, timeOut) { if (!timeOuts[action]) { - timeOuts[action] = window__WEBPACK_IMPORTED_MODULE_18___default.a.setTimeout(function () { + timeOuts[action] = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_10___default()(function () { fFunction(); timeOuts[action] = 0; }, timeOut); @@ -2183,12 +2174,12 @@ function deModule(m) { function inFocus() { try { - if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement) { - if (isUnd(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache)) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.__inFocusCache = $__WEBPACK_IMPORTED_MODULE_19___default()(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement).is('input,textarea,iframe,.cke_editable'); + 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_18___default.a.document.activeElement.__inFocusCache; + return !!window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.__inFocusCache; } } catch (e) {} // eslint-disable-line no-empty @@ -2201,14 +2192,14 @@ function inFocus() { */ function removeInFocus(force) { - if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur) { + 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_19___default()(window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement); + 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_18___default.a.document.activeElement.blur(); + window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur(); } else if (force) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.activeElement.blur(); + window__WEBPACK_IMPORTED_MODULE_15___default.a.document.activeElement.blur(); } } catch (e) {} // eslint-disable-line no-empty @@ -2220,14 +2211,14 @@ function removeInFocus(force) { function removeSelection() { try { - if (window__WEBPACK_IMPORTED_MODULE_18___default.a && window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection) { - var sel = window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection(); + if (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_18___default.a.document && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.empty) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.empty(); + } 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 @@ -2248,7 +2239,7 @@ function replySubjectAdd(prefix, subject) { prefixIsRe = !fwd; if ('' !== subject) { - ___WEBPACK_IMPORTED_MODULE_20___default.a.each(subject.split(':'), function (part) { + ___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))) { @@ -2281,7 +2272,7 @@ function replySubjectAdd(prefix, subject) { */ function roundNumber(num, dec) { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(num * window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.pow(10, dec)) / window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.pow(10, dec); + 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 @@ -2310,8 +2301,8 @@ function friendlySize(sizeInBytes) { */ function log(desc) { - if (window__WEBPACK_IMPORTED_MODULE_18___default.a.console && window__WEBPACK_IMPORTED_MODULE_18___default.a.console.log) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.console.log(desc); + 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); } } /** @@ -2333,7 +2324,7 @@ function delegateRun(object, methodName, params, delay) { if (0 >= delay) { object[methodName].apply(object, params); } else { - ___WEBPACK_IMPORTED_MODULE_20___default.a.delay(function () { + ___WEBPACK_IMPORTED_MODULE_17___default.a.delay(function () { object[methodName].apply(object, params); }, delay); } @@ -2344,25 +2335,25 @@ function delegateRun(object, methodName, params, delay) { */ function killCtrlACtrlS(event) { - event = event || window__WEBPACK_IMPORTED_MODULE_18___default.a.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_24__["EventKeyCode"].S) { + if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_21__["EventKeyCode"].S) { event.preventDefault(); return; - } else if (key === Common_Enums__WEBPACK_IMPORTED_MODULE_24__["EventKeyCode"].A) { + } 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_18___default.a.getSelection) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.getSelection().removeAllRanges(); - } else if (window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection && window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.clear) { - window__WEBPACK_IMPORTED_MODULE_18___default.a.document.selection.clear(); + 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(); @@ -2396,15 +2387,15 @@ function createCommandLegacy(context, fExecute, fCanExecute) { }; fResult = fExecute ? fNonEmpty : noop; - fResult.enabled = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].observable(true); + fResult.enabled = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].observable(true); fResult.isCommand = true; if (isFunc(fCanExecute)) { - fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_21__[/* default */ "a"].computed(function () { + 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_21__[/* default */ "a"].computed(function () { + fResult.canExecute = ko__WEBPACK_IMPORTED_MODULE_18__[/* default */ "a"].computed(function () { return fResult && fResult.enabled() && !!fCanExecute; }); } @@ -2416,7 +2407,7 @@ function createCommandLegacy(context, fExecute, fCanExecute) { * @returns {string} */ -var convertThemeName = ___WEBPACK_IMPORTED_MODULE_20___default.a.memoize(function (theme) { +var convertThemeName = ___WEBPACK_IMPORTED_MODULE_17___default.a.memoize(function (theme) { if ('@custom' === theme.substr(-7)) { theme = trim(theme.substring(0, theme.length - 7)); } @@ -2436,14 +2427,14 @@ function quoteName(name) { */ function microtime() { - return new window__WEBPACK_IMPORTED_MODULE_18___default.a.Date().getTime(); + return new window__WEBPACK_IMPORTED_MODULE_15___default.a.Date().getTime(); } /** * @returns {number} */ function timestamp() { - return window__WEBPACK_IMPORTED_MODULE_18___default.a.Math.round(microtime() / 1000); + return window__WEBPACK_IMPORTED_MODULE_15___default.a.Math.round(microtime() / 1000); } /** * @@ -2464,7 +2455,7 @@ function convertLangName(language, isEng) { */ function draggablePlace() { - return $__WEBPACK_IMPORTED_MODULE_19___default()('
]*><\/p>/gi, '').replace(/
]*>([\s\S\r\n\t]*)<\/pre>/gim, convertPre).replace(/[\s]+/gm, ' ').replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gim, fixAttibuteValue).replace(/
]*>/gim, '\n').replace(/<\/h[\d]>/gi, '\n').replace(/<\/p>/gi, '\n\n').replace(/
]*>/gim, '\n__bq__start__\n').replace(/<\/blockquote>/gim, '\n__bq__end__\n').replace(/]*>([\s\S\r\n]*?)<\/a>/gim, convertLinks).replace(/<\/div>/gi, '\n').replace(/ /gi, ' ').replace(/"/gi, '"').replace(/<[^>]*>/gm, ''); - text = Common_Globals__WEBPACK_IMPORTED_MODULE_23__["$div"].html(text).text(); + 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(/>/gi, '>').replace(/</gi, '<').replace(/&/gi, '&'); text = splitPlainText(text); pos = 0; @@ -2701,11 +2690,11 @@ function htmlToPlain(html) { while (0 < limit) { limit -= 1; - iP1 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__start__', pos); + iP1 = text.indexOf('__bq__start__', pos); if (-1 < iP1) { - iP2 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__start__', iP1 + 5); - iP3 = _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_13___default()(text).call(text, '__bq__end__', iP1 + 5); + 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); @@ -2788,9 +2777,9 @@ function plainToHtml(plain, findEmailAndLinksInText) { .replace(/&/g, '&').replace(/>/g, '>').replace(/').replace(/[\s]*~~~\/blockquote~~~/g, '').replace(/\n/g, '
' + resultHtml + ''; } - Common_Globals__WEBPACK_IMPORTED_MODULE_17__["$div"].empty(); + Common_Globals__WEBPACK_IMPORTED_MODULE_16__["$div"].empty(); message.isPgpSigned(pgpSigned); message.isPgpEncrypted(isPgpEncrypted); } else { @@ -5567,10 +5545,10 @@ var MessageUserStore = /*#__PURE__*/function () { resultHtml = '
' + resultHtml + ''; } - Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount += 1; - body = $__WEBPACK_IMPORTED_MODULE_12___default()('').hide().addClass('rl-cache-class'); - body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount); - body.html(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["findEmailAndLinks"])(resultHtml)).addClass('b-text-part ' + (isHtml ? 'html' : 'plain')); + Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount += 1; + body = $__WEBPACK_IMPORTED_MODULE_11___default()('').hide().addClass('rl-cache-class'); + body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount); + body.html(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["findEmailAndLinks"])(resultHtml)).addClass('b-text-part ' + (isHtml ? 'html' : 'plain')); message.isHtml(!!isHtml); message.hasImages(!!data.Result.HasExternals); message.body = body; @@ -5585,7 +5563,7 @@ var MessageUserStore = /*#__PURE__*/function () { message.showInternalImages(true); } - if (message.hasImages() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].showImages()) { + if (message.hasImages() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].showImages()) { message.showExternalImages(true); } @@ -5594,8 +5572,8 @@ var MessageUserStore = /*#__PURE__*/function () { message.body = textBody; if (message.body) { - Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount += 1; - message.body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_17__["data"].iMessageBodyCacheCount); + Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount += 1; + message.body.data('rl-cache-count', Common_Globals__WEBPACK_IMPORTED_MODULE_16__["data"].iMessageBodyCacheCount); message.fetchDataFromDom(); } } @@ -5611,10 +5589,10 @@ var MessageUserStore = /*#__PURE__*/function () { message.body.show(); } - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* initMessageFlagsFromCache */ "n"])(message); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* initMessageFlagsFromCache */ "n"])(message); if (message.unseen() || message.hasUnseenSubMessage()) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().messageListAction(message.folderFullNameRaw, Common_Enums__WEBPACK_IMPORTED_MODULE_13__["MessageSetAction"].SetSeen, [message]); + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().messageListAction(message.folderFullNameRaw, Common_Enums__WEBPACK_IMPORTED_MODULE_12__["MessageSetAction"].SetSeen, [message]); } if (isNew) { @@ -5627,7 +5605,7 @@ var MessageUserStore = /*#__PURE__*/function () { this.selectorMessageFocused(null); } } else if (!selectedMessage && message) { - selectedMessage = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_6___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, this.messageList(), function (subMessage) { + selectedMessage = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, this.messageList(), function (subMessage) { return subMessage && subMessage.folderFullNameRaw === message.folderFullNameRaw && subMessage.uid === message.uid; }); @@ -5638,7 +5616,7 @@ var MessageUserStore = /*#__PURE__*/function () { } } - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["windowResize"])(); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["windowResize"])(); } } }; @@ -5665,7 +5643,7 @@ var MessageUserStore = /*#__PURE__*/function () { _proto.populateMessageBody = function populateMessageBody(oMessage) { if (oMessage) { - if (Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_31__[/* default */ "a"].message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid)) { + if (Remote_User_Ajax__WEBPACK_IMPORTED_MODULE_30__[/* default */ "a"].message(this.onMessageResponse, oMessage.folderFullNameRaw, oMessage.uid)) { this.messageCurrentLoading(true); } } @@ -5681,14 +5659,14 @@ var MessageUserStore = /*#__PURE__*/function () { this.hideMessageBodies(); this.messageCurrentLoading(false); - if (Common_Enums__WEBPACK_IMPORTED_MODULE_13__["StorageResultType"].Success === sResult && oData && oData.Result) { + if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["StorageResultType"].Success === sResult && oData && oData.Result) { this.setMessage(oData, bCached); - } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_13__["StorageResultType"].Unload === sResult) { + } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["StorageResultType"].Unload === sResult) { this.message(null); this.messageError(''); - } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_13__["StorageResultType"].Abort !== sResult) { + } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_12__["StorageResultType"].Abort !== sResult) { this.message(null); - this.messageError(oData && oData.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_19__["getNotification"])(oData.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_19__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Notification"].UnknownError)); + this.messageError(oData && oData.ErrorCode ? Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["getNotification"])(oData.ErrorCode) : Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["getNotification"])(Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Notification"].UnknownError)); } } /** @@ -5698,31 +5676,31 @@ var MessageUserStore = /*#__PURE__*/function () { ; _proto.calculateMessageListHash = function calculateMessageListHash(list) { - return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_5___default()(___WEBPACK_IMPORTED_MODULE_10___default.a).call(___WEBPACK_IMPORTED_MODULE_10___default.a, list, function (message) { + return _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_9___default.a).call(___WEBPACK_IMPORTED_MODULE_9___default.a, list, function (message) { return '' + message.hash + '_' + message.threadsLen() + '_' + message.flagHash(); }).join('|'); }; _proto.setMessageList = function setMessageList(data, cached) { - if (data && data.Result && 'Collection/MessageCollection' === data.Result['@Object'] && data.Result['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isArray"])(data.Result['@Collection'])) { + if (data && data.Result && 'Collection/MessageCollection' === data.Result['@Object'] && data.Result['@Collection'] && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isArray"])(data.Result['@Collection'])) { var newCount = 0, unreadCountChange = false; var list = [], - utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_20__["momentNowUnix"])(), - iCount = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(data.Result.MessageResultCount), - iOffset = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(data.Result.Offset); - var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* getFolderFromCacheList */ "e"])(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); + utc = Object(Common_Momentor__WEBPACK_IMPORTED_MODULE_19__["momentNowUnix"])(), + iCount = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.MessageResultCount), + iOffset = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.Offset); + var folder = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* getFolderFromCacheList */ "e"])(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); if (folder && !cached) { folder.interval = utc; - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* setFolderHash */ "q"])(data.Result.Folder, data.Result.FolderHash); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* setFolderHash */ "q"])(data.Result.Folder, data.Result.FolderHash); - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.MessageCount)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.MessageCount)) { folder.messageCountAll(data.Result.MessageCount); } - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.MessageUnseenCount)) { - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(folder.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pInt"])(data.Result.MessageUnseenCount)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.MessageUnseenCount)) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(folder.messageCountUnread()) !== Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pInt"])(data.Result.MessageUnseenCount)) { unreadCountChange = true; } @@ -5733,15 +5711,15 @@ var MessageUserStore = /*#__PURE__*/function () { } if (unreadCountChange && folder) { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folder.fullNameRaw); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* clearMessageFlagsFromCacheByFolder */ "c"])(folder.fullNameRaw); } - ___WEBPACK_IMPORTED_MODULE_10___default.a.each(data.Result['@Collection'], function (jsonMessage) { + ___WEBPACK_IMPORTED_MODULE_9___default.a.each(data.Result['@Collection'], function (jsonMessage) { if (jsonMessage && 'Object/Message' === jsonMessage['@Object']) { - var message = Model_Message__WEBPACK_IMPORTED_MODULE_22__[/* MessageModel */ "a"].newInstanceFromJson(jsonMessage); + var message = Model_Message__WEBPACK_IMPORTED_MODULE_21__[/* MessageModel */ "a"].newInstanceFromJson(jsonMessage); if (message) { - if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* hasNewMessageAndRemoveFromCache */ "l"])(message.folderFullNameRaw, message.uid) && 5 >= newCount) { + if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* hasNewMessageAndRemoveFromCache */ "l"])(message.folderFullNameRaw, message.uid) && 5 >= newCount) { newCount += 1; message.newForAnimation(true); } @@ -5749,9 +5727,9 @@ var MessageUserStore = /*#__PURE__*/function () { message.deleted(false); if (cached) { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* initMessageFlagsFromCache */ "n"])(message); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* initMessageFlagsFromCache */ "n"])(message); } else { - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* storeMessageFlagsToCache */ "u"])(message); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* storeMessageFlagsToCache */ "u"])(message); } list.push(message); @@ -5760,25 +5738,25 @@ var MessageUserStore = /*#__PURE__*/function () { }); this.messageListCount(iCount); - this.messageListSearch(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.Search) ? data.Result.Search : ''); - this.messageListPage(window__WEBPACK_IMPORTED_MODULE_9___default.a.Math.ceil(iOffset / Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].messagesPerPage() + 1)); - this.messageListThreadUid(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.ThreadUid) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["pString"])(data.Result.ThreadUid) : ''); - this.messageListEndFolder(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_14__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); + this.messageListSearch(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Search) ? data.Result.Search : ''); + this.messageListPage(window__WEBPACK_IMPORTED_MODULE_8___default.a.Math.ceil(iOffset / Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].messagesPerPage() + 1)); + this.messageListThreadUid(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.ThreadUid) ? Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["pString"])(data.Result.ThreadUid) : ''); + this.messageListEndFolder(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_13__["isNormal"])(data.Result.Folder) ? data.Result.Folder : ''); this.messageListEndSearch(this.messageListSearch()); this.messageListEndThreadUid(this.messageListThreadUid()); this.messageListEndPage(this.messageListPage()); this.messageListDisableAutoSelect(true); this.messageList(list); this.messageListIsNotCompleted(false); - Object(Common_Cache__WEBPACK_IMPORTED_MODULE_15__[/* clearNewMessageCache */ "d"])(); + Object(Common_Cache__WEBPACK_IMPORTED_MODULE_14__[/* clearNewMessageCache */ "d"])(); - if (folder && (cached || unreadCountChange || Stores_User_Settings__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"].useThreads())) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_30__[/* getApp */ "a"])().folderInformation(folder.fullNameRaw, list); + if (folder && (cached || unreadCountChange || Stores_User_Settings__WEBPACK_IMPORTED_MODULE_27__[/* default */ "a"].useThreads())) { + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_29__[/* getApp */ "a"])().folderInformation(folder.fullNameRaw, list); } } else { this.messageListCount(0); this.messageList([]); - this.messageListError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_19__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_13__["Notification"].CantGetMessageList)); + this.messageListError(Object(Common_Translator__WEBPACK_IMPORTED_MODULE_18__["getNotification"])(data && data.ErrorCode ? data.ErrorCode : Common_Enums__WEBPACK_IMPORTED_MODULE_12__["Notification"].CantGetMessageList)); } }; @@ -6191,10 +6169,10 @@ function storeMessageFlagsToCacheBySetAction(folder, uid, setAction) { /* unused harmony export about */ /* unused harmony export admin */ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return mailBox; }); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ 45); -/* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.replace */ 57); -/* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_modules_es_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); @@ -6634,26 +6612,23 @@ function mailBox(folder, page, search, threadUid) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); +/* harmony import */ var _babel_runtime_corejs3_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 _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__ = __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_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/inheritsLoose */ 10); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! _ */ 3); -/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Consts */ 25); -/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Cache */ 14); -/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Links */ 15); -/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Base64 */ 398); -/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/App */ 31); -/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Stores/User/Settings */ 38); -/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Helper/Apps/User */ 22); -/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! Remote/AbstractAjax */ 268); - +/* 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 Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Consts */ 24); +/* harmony import */ var Common_Cache__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Cache */ 14); +/* harmony import */ var Common_Links__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Links */ 15); +/* harmony import */ var Common_Base64__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Base64 */ 406); +/* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Storage/Settings */ 5); +/* harmony import */ var Stores_User_App__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/User/App */ 27); +/* harmony import */ var Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Stores/User/Settings */ 35); +/* harmony import */ var Helper_Apps_User__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! Helper/Apps/User */ 21); +/* harmony import */ var Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! Remote/AbstractAjax */ 304); @@ -6670,7 +6645,7 @@ function mailBox(folder, page, search, threadUid) { var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { - Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"])(RemoteUserAjax, _AbstractAjaxRemote); + Object(_babel_runtime_corejs3_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(RemoteUserAjax, _AbstractAjaxRemote); function RemoteUserAjax() { var _this; @@ -6688,11 +6663,11 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { _proto.folders = function folders(fCallback) { this.defaultRequest(fCallback, 'Folders', { - 'SentFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["settingsGet"]('SentFolder'), - 'DraftFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["settingsGet"]('DraftFolder'), - 'SpamFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["settingsGet"]('SpamFolder'), - 'TrashFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["settingsGet"]('TrashFolder'), - 'ArchiveFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_10__["settingsGet"]('ArchiveFolder') + 'SentFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('SentFolder'), + 'DraftFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('DraftFolder'), + 'SpamFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('SpamFolder'), + 'TrashFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('TrashFolder'), + 'ArchiveFolder': Storage_Settings__WEBPACK_IMPORTED_MODULE_9__["settingsGet"]('ArchiveFolder') }, null, '', ['Folders']); } /** @@ -6786,7 +6761,7 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { ; _proto.contactsSync = function contactsSync(fCallback) { - this.defaultRequest(fCallback, 'ContactsSync', null, Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* CONTACTS_SYNC_AJAX_TIMEOUT */ "d"]); + this.defaultRequest(fCallback, 'ContactsSync', null, Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* CONTACTS_SYNC_AJAX_TIMEOUT */ "d"]); } /** * @param {?Function} fCallback @@ -6909,8 +6884,8 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { _proto.filtersSave = function filtersSave(fCallback, filters, raw, isRawIsActive) { this.defaultRequest(fCallback, 'FiltersSave', { 'Raw': raw, - 'RawIsActive': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["boolToAjax"])(isRawIsActive), - 'Filters': _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_4___default.a).call(___WEBPACK_IMPORTED_MODULE_4___default.a, filters, function (item) { + 'RawIsActive': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["boolToAjax"])(isRawIsActive), + 'Filters': _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_3___default.a).call(___WEBPACK_IMPORTED_MODULE_3___default.a, filters, function (item) { return item.toJson(); }) }); @@ -7000,13 +6975,13 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { bSilent = false; } - sFolderFullNameRaw = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(sFolderFullNameRaw); - var folderHash = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderHash */ "g"])(sFolderFullNameRaw), - useThreads = Stores_User_App__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].threadsAllowed() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].useThreads(), - inboxUidNext = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderInboxName */ "h"])() === sFolderFullNameRaw ? Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderUidNext */ "i"])(sFolderFullNameRaw) : ''; + sFolderFullNameRaw = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(sFolderFullNameRaw); + var folderHash = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderHash */ "g"])(sFolderFullNameRaw), + useThreads = Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].threadsAllowed() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads(), + inboxUidNext = Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderInboxName */ "h"])() === sFolderFullNameRaw ? Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderUidNext */ "i"])(sFolderFullNameRaw) : ''; - if ('' !== folderHash && ('' === sSearch || -1 === _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_1___default()(sSearch).call(sSearch, 'is:'))) { - return this.defaultRequest(fCallback, 'MessageList', {}, '' === sSearch ? Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* SEARCH_AJAX_TIMEOUT */ "m"], 'MessageList/' + Object(Common_Links__WEBPACK_IMPORTED_MODULE_8__[/* subQueryPrefix */ "E"])() + '/' + Common_Base64__WEBPACK_IMPORTED_MODULE_9__[/* urlsafe_encode */ "a"]([sFolderFullNameRaw, iOffset, iLimit, sSearch, Stores_User_App__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].projectHash(), folderHash, inboxUidNext, useThreads ? '1' : '0', useThreads ? sThreadUid : ''].join(String.fromCharCode(0))), bSilent ? [] : ['MessageList']); + if ('' !== folderHash && ('' === sSearch || -1 === sSearch.indexOf('is:'))) { + return this.defaultRequest(fCallback, 'MessageList', {}, '' === sSearch ? Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SEARCH_AJAX_TIMEOUT */ "m"], 'MessageList/' + Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* subQueryPrefix */ "E"])() + '/' + Common_Base64__WEBPACK_IMPORTED_MODULE_8__[/* urlsafe_encode */ "a"]([sFolderFullNameRaw, iOffset, iLimit, sSearch, Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].projectHash(), folderHash, inboxUidNext, useThreads ? '1' : '0', useThreads ? sThreadUid : ''].join(String.fromCharCode(0))), bSilent ? [] : ['MessageList']); } return this.defaultRequest(fCallback, 'MessageList', { @@ -7017,7 +6992,7 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { UidNext: inboxUidNext, UseThreads: useThreads ? '1' : '0', ThreadUid: useThreads ? sThreadUid : '' - }, '' === sSearch ? Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* SEARCH_AJAX_TIMEOUT */ "m"], '', bSilent ? [] : ['MessageList']); + }, '' === sSearch ? Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* DEFAULT_AJAX_TIMEOUT */ "g"] : Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SEARCH_AJAX_TIMEOUT */ "m"], '', bSilent ? [] : ['MessageList']); } /** * @param {?Function} fCallback @@ -7039,11 +7014,11 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { ; _proto.message = function message(fCallback, sFolderFullNameRaw, iUid) { - sFolderFullNameRaw = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pString"])(sFolderFullNameRaw); - iUid = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["pInt"])(iUid); + sFolderFullNameRaw = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pString"])(sFolderFullNameRaw); + iUid = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["pInt"])(iUid); - if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw) && 0 < iUid) { - this.defaultRequest(fCallback, 'Message', {}, null, 'Message/' + Object(Common_Links__WEBPACK_IMPORTED_MODULE_8__[/* subQueryPrefix */ "E"])() + '/' + Common_Base64__WEBPACK_IMPORTED_MODULE_9__[/* urlsafe_encode */ "a"]([sFolderFullNameRaw, iUid, Stores_User_App__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].projectHash(), Stores_User_App__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].threadsAllowed() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].useThreads() ? '1' : '0'].join(String.fromCharCode(0))), ['Message']); + if (Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderFromCacheList */ "e"])(sFolderFullNameRaw) && 0 < iUid) { + this.defaultRequest(fCallback, 'Message', {}, null, 'Message/' + Object(Common_Links__WEBPACK_IMPORTED_MODULE_7__[/* subQueryPrefix */ "E"])() + '/' + Common_Base64__WEBPACK_IMPORTED_MODULE_8__[/* urlsafe_encode */ "a"]([sFolderFullNameRaw, iUid, Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].projectHash(), Stores_User_App__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].threadsAllowed() && Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads() ? '1' : '0'].join(String.fromCharCode(0))), ['Message']); return true; } @@ -7088,17 +7063,17 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { var request = true; var uids = []; - if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isArray"])(list) && 0 < list.length) { + if (Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isArray"])(list) && 0 < list.length) { request = false; - ___WEBPACK_IMPORTED_MODULE_4___default.a.each(list, function (messageListItem) { - if (!Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getMessageFlagsFromCache */ "j"])(messageListItem.folderFullNameRaw, messageListItem.uid)) { + ___WEBPACK_IMPORTED_MODULE_3___default.a.each(list, function (messageListItem) { + if (!Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getMessageFlagsFromCache */ "j"])(messageListItem.folderFullNameRaw, messageListItem.uid)) { uids.push(messageListItem.uid); } if (0 < messageListItem.threads().length) { - ___WEBPACK_IMPORTED_MODULE_4___default.a.each(messageListItem.threads(), function (uid) { - if (!Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getMessageFlagsFromCache */ "j"])(messageListItem.folderFullNameRaw, uid)) { + ___WEBPACK_IMPORTED_MODULE_3___default.a.each(messageListItem.threads(), function (uid) { + if (!Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getMessageFlagsFromCache */ "j"])(messageListItem.folderFullNameRaw, uid)) { uids.push(uid); } }); @@ -7113,11 +7088,11 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { if (request) { this.defaultRequest(fCallback, 'FolderInformation', { 'Folder': folder, - 'FlagsUids': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["isArray"])(uids) ? uids.join(',') : '', - 'UidNext': Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderInboxName */ "h"])() === folder ? Object(Common_Cache__WEBPACK_IMPORTED_MODULE_7__[/* getFolderUidNext */ "i"])(folder) : '' + 'FlagsUids': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["isArray"])(uids) ? uids.join(',') : '', + 'UidNext': Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderInboxName */ "h"])() === folder ? Object(Common_Cache__WEBPACK_IMPORTED_MODULE_6__[/* getFolderUidNext */ "i"])(folder) : '' }); - } else if (Stores_User_Settings__WEBPACK_IMPORTED_MODULE_12__[/* default */ "a"].useThreads()) { - Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_13__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache(); + } else if (Stores_User_Settings__WEBPACK_IMPORTED_MODULE_11__[/* default */ "a"].useThreads()) { + Object(Helper_Apps_User__WEBPACK_IMPORTED_MODULE_12__[/* getApp */ "a"])().reloadFlagsCurrentMessageListAndMessageFromCache(); } } /** @@ -7227,7 +7202,7 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { 'References': sReferences, 'MarkAsImportant': bMarkAsImportant ? '1' : '0', 'Attachments': aAttachments - }, Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* SAVE_MESSAGE_AJAX_TIMEOUT */ "l"]); + }, Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SAVE_MESSAGE_AJAX_TIMEOUT */ "l"]); } /** * @param {?Function} fCallback @@ -7291,7 +7266,7 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { 'ReadReceiptRequest': bRequestReadReceipt ? '1' : '0', 'MarkAsImportant': bMarkAsImportant ? '1' : '0', 'Attachments': aAttachments - }, Common_Consts__WEBPACK_IMPORTED_MODULE_6__[/* SEND_MESSAGE_AJAX_TIMEOUT */ "n"]); + }, Common_Consts__WEBPACK_IMPORTED_MODULE_5__[/* SEND_MESSAGE_AJAX_TIMEOUT */ "n"]); } /** * @param {?Function} fCallback @@ -7466,7 +7441,7 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { _proto.contactSave = function contactSave(fCallback, sRequestUid, sUid, aProperties) { this.defaultRequest(fCallback, 'ContactSave', { 'RequestUid': sRequestUid, - 'Uid': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_5__["trim"])(sUid), + 'Uid': Object(Common_Utils__WEBPACK_IMPORTED_MODULE_4__["trim"])(sUid), 'Properties': aProperties }); } @@ -7560,41 +7535,12 @@ var RemoteUserAjax = /*#__PURE__*/function (_AbstractAjaxRemote) { }; return RemoteUserAjax; -}(Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_14__[/* AbstractAjaxRemote */ "a"]); +}(Remote_AbstractAjax__WEBPACK_IMPORTED_MODULE_13__[/* AbstractAjaxRemote */ "a"]); /* harmony default export */ __webpack_exports__["a"] = (new RemoteUserAjax()); /***/ }), /* 17 */ -/*!***************************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/defineProperty.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 _defineProperty; }); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 163); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); - -function _defineProperty(obj, key, value) { - if (key in obj) { - _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -} - -/***/ }), -/* 18 */ /*!****************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/map.js ***! \****************************************************************************/ @@ -7602,21 +7548,10 @@ function _defineProperty(obj, key, value) { /*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 345); - -/***/ }), -/* 19 */ -/*!**************************************************************************************************!*\ - !*** ./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 */ 369); +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/map */ 349); /***/ }), -/* 20 */ +/* 18 */ /*!*************************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/applyDecoratedDescriptor.js ***! \*************************************************************************************/ @@ -7626,18 +7561,18 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/object/get-own-prop "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _applyDecoratedDescriptor; }); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core-js/object/define-property */ 163); -/* harmony import */ var _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core-js/instance/slice */ 263); -/* harmony import */ var _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core-js/instance/reverse */ 264); -/* harmony import */ var _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core-js/instance/reduce */ 265); -/* harmony import */ var _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core-js/object/keys */ 266); -/* harmony import */ var _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_core_js_object_keys__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../core-js/instance/for-each */ 267); -/* harmony import */ var _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5__); +/* 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 */ 298); +/* 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 */ 299); +/* 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 */ 300); +/* 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 */ 301); +/* 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 */ 302); +/* 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 */ 303); +/* 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__); @@ -7649,7 +7584,7 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con var desc = {}; - _core_js_instance_for_each__WEBPACK_IMPORTED_MODULE_5___default()(_context = _core_js_object_keys__WEBPACK_IMPORTED_MODULE_4___default()(descriptor)).call(_context, function (key) { + _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]; }); @@ -7660,7 +7595,7 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con desc.writable = true; } - desc = _core_js_instance_reduce__WEBPACK_IMPORTED_MODULE_3___default()(_context2 = _core_js_instance_reverse__WEBPACK_IMPORTED_MODULE_2___default()(_context3 = _core_js_instance_slice__WEBPACK_IMPORTED_MODULE_1___default()(decorators).call(decorators)).call(_context3)).call(_context2, function (desc, decorator) { + 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); @@ -7670,7 +7605,7 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con } if (desc.initializer === void 0) { - _core_js_object_define_property__WEBPACK_IMPORTED_MODULE_0___default()(target, property, desc); + _babel_runtime_corejs3_core_js_object_define_property__WEBPACK_IMPORTED_MODULE_5___default()(target, property, desc); desc = null; } @@ -7679,7 +7614,18 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con } /***/ }), -/* 21 */ +/* 19 */ +/*!**************************************************************************************************!*\ + !*** ./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 */ 390); + +/***/ }), +/* 20 */ /*!*****************************!*\ !*** external "window.key" ***! \*****************************/ @@ -7690,7 +7636,7 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con module.exports = window.key; /***/ }), -/* 22 */ +/* 21 */ /*!*********************************!*\ !*** ./dev/Helper/Apps/User.js ***! \*********************************/ @@ -7704,12 +7650,12 @@ module.exports = window.key; * @returns {AppUser} */ function getApp() { - return __webpack_require__(/*! App/User */ 395).default; + return __webpack_require__(/*! App/User */ 403).default; } /***/ }), -/* 23 */, -/* 24 */ +/* 22 */, +/* 23 */ /*!******************************!*\ !*** ./dev/Common/Events.js ***! \******************************/ @@ -7723,7 +7669,7 @@ function getApp() { /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! _ */ 3); /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(___WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 39); +/* harmony import */ var Common_Plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Plugins */ 36); @@ -7768,7 +7714,7 @@ function pub(name, args) { } /***/ }), -/* 25 */ +/* 24 */ /*!******************************!*\ !*** ./dev/Common/Consts.js ***! \******************************/ @@ -7825,43 +7771,7 @@ var DATA_IMAGE_TRANSP_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAA var DATA_IMAGE_LAZY_PLACEHOLDER_PIC = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC'; /***/ }), -/* 26 */ -/*!*****************************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/bind.js ***! - \*****************************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/bind */ 334); - -/***/ }), -/* 27 */ -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ -/*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {var check = function (it) { - return it && it.Math == Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == 'object' && globalThis) || - check(typeof window == 'object' && window) || - check(typeof self == 'object' && self) || - check(typeof global == 'object' && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 124))) - -/***/ }), -/* 28 */ +/* 25 */ /*!***************************************!*\ !*** ./dev/Knoin/AbstractViewNext.js ***! \***************************************/ @@ -7871,35 +7781,26 @@ module.exports = "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AbstractViewNext; }); -/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Enums__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Enums */ 0); -/* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Globals */ 6); - +/* 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() { - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "bDisabeCloseOnEsc", false); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "sDefaultKeyScope", Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].None); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "sCurrentKeyScope", Common_Enums__WEBPACK_IMPORTED_MODULE_3__["KeyState"].None); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelVisibility", ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false)); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "modalVisibility", ko__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].observable(false).extend({ + 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 - })); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelName", ''); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelNames", []); - - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(this, "viewModelDom", null); + }); + this.viewModelName = ''; + this.viewModelNames = []; + this.viewModelDom = null; } var _proto = AbstractViewNext.prototype; @@ -7908,8 +7809,8 @@ var AbstractViewNext = /*#__PURE__*/function () { * @returns {void} */ _proto.storeAndSetKeyScope = function storeAndSetKeyScope() { - this.sCurrentKeyScope = Object(Common_Globals__WEBPACK_IMPORTED_MODULE_4__["keyScope"])(); - Object(Common_Globals__WEBPACK_IMPORTED_MODULE_4__["keyScope"])(this.sDefaultKeyScope); + this.sCurrentKeyScope = Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(); + Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(this.sDefaultKeyScope); } /** * @returns {void} @@ -7917,7 +7818,7 @@ var AbstractViewNext = /*#__PURE__*/function () { ; _proto.restoreKeyScope = function restoreKeyScope() { - Object(Common_Globals__WEBPACK_IMPORTED_MODULE_4__["keyScope"])(this.sCurrentKeyScope); + Object(Common_Globals__WEBPACK_IMPORTED_MODULE_3__["keyScope"])(this.sCurrentKeyScope); } /** * @returns {void} @@ -7927,12 +7828,12 @@ var AbstractViewNext = /*#__PURE__*/function () { _proto.registerPopupKeyDown = function registerPopupKeyDown() { var _this = this; - Common_Globals__WEBPACK_IMPORTED_MODULE_4__["$win"].on('keydown', function (event) { + 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_3__["EventKeyCode"].Esc === event.keyCode) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["delegateRun"])(_this, 'cancelCommand'); + 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_3__["EventKeyCode"].Backspace === event.keyCode && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_2__["inFocus"])()) { + } else if (Common_Enums__WEBPACK_IMPORTED_MODULE_2__["EventKeyCode"].Backspace === event.keyCode && !Object(Common_Utils__WEBPACK_IMPORTED_MODULE_1__["inFocus"])()) { return false; } } @@ -7951,7 +7852,7 @@ var AbstractViewNext = /*#__PURE__*/function () { }(); /***/ }), -/* 29 */ +/* 26 */ /*!******************************!*\ !*** ./dev/Stores/Social.js ***! \******************************/ @@ -8065,18 +7966,7 @@ var SocialStore = /*#__PURE__*/function () { /* harmony default export */ __webpack_exports__["a"] = (new SocialStore()); /***/ }), -/* 30 */ -/*!*********************************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/index-of.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/*! exports used: default */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of */ 321); - -/***/ }), -/* 31 */ +/* 27 */ /*!********************************!*\ !*** ./dev/Stores/User/App.js ***! \********************************/ @@ -8091,7 +7981,7 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/index-of * /* harmony import */ var Common_Globals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! Common/Utils */ 2); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Storage/Settings */ 5); -/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 262); +/* harmony import */ var Stores_AbstractApp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Stores/AbstractApp */ 297); @@ -8178,35 +8068,18 @@ var AppUserStore = /*#__PURE__*/function (_AbstractAppStore) { /* harmony default export */ __webpack_exports__["a"] = (new AppUserStore()); /***/ }), -/* 32 */ -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/well-known-symbol.js ***! - \*************************************************************/ +/* 28 */ +/*!*******************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js ***! + \*******************************************************************************/ /*! no static exports found */ -/*! all exports used */ +/*! exports used: default */ /***/ (function(module, exports, __webpack_require__) { -var global = __webpack_require__(/*! ../internals/global */ 27); -var shared = __webpack_require__(/*! ../internals/shared */ 128); -var has = __webpack_require__(/*! ../internals/has */ 42); -var uid = __webpack_require__(/*! ../internals/uid */ 129); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 131); -var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 185); - -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]; -}; - +module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 359); /***/ }), -/* 33 */ +/* 29 */ /*!**********************************************************************************!*\ !*** ./node_modules/@babel/runtime-corejs3/helpers/esm/assertThisInitialized.js ***! \**********************************************************************************/ @@ -8225,18 +8098,58 @@ function _assertThisInitialized(self) { } /***/ }), -/* 34 */ -/*!*******************************************************************************!*\ - !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/instance/filter.js ***! - \*******************************************************************************/ +/* 30 */ +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/global.js ***! + \**************************************************/ /*! no static exports found */ -/*! exports used: default */ +/*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ 362); +/* 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 */ 127))) /***/ }), -/* 35 */ +/* 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 */ 127))) + +/***/ }), +/* 32 */ /*!***********************************!*\ !*** ./dev/Component/Abstract.js ***! \***********************************/ @@ -8247,15 +8160,13 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ "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 _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/for-each */ 70); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/helpers/esm/defineProperty */ 17); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ko */ 1); -/* 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 core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ 152); +/* 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__(/*! $ */ 8); +/* 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); @@ -8264,15 +8175,13 @@ module.exports = __webpack_require__(/*! core-js-pure/stable/instance/filter */ var AbstractComponent = /*#__PURE__*/function () { function AbstractComponent() { - Object(_babel_runtime_corejs3_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(this, "disposable", []); + this.disposable = []; } var _proto = AbstractComponent.prototype; _proto.dispose = function dispose() { - var _context; - - _babel_runtime_corejs3_core_js_stable_instance_for_each__WEBPACK_IMPORTED_MODULE_0___default()(_context = this.disposable).call(_context, function (funcToDispose) { + this.disposable.forEach(function (funcToDispose) { if (funcToDispose && funcToDispose.dispose) { funcToDispose.dispose(); } @@ -8304,10 +8213,10 @@ var componentExportHelper = function componentExportHelper(ClassObject, template if (componentInfo && componentInfo.element) { params.component = componentInfo; - params.element = $__WEBPACK_IMPORTED_MODULE_2___default()(componentInfo.element); - Object(Common_Translator__WEBPACK_IMPORTED_MODULE_5__["i18nToNodes"])(params.element); + 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_4__["isUnd"])(params.inline) && ko__WEBPACK_IMPORTED_MODULE_3__[/* default */ "a"].unwrap(params.inline)) { + 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'); } } @@ -8321,43 +8230,128 @@ var componentExportHelper = function componentExportHelper(ClassObject, template /***/ }), -/* 36 */ -/*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ +/* 33 */ +/*!***************************************************************************!*\ + !*** ./node_modules/@babel/runtime-corejs3/core-js-stable/set-timeout.js ***! + \***************************************************************************/ /*! no static exports found */ -/*! all exports used */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; +/*! exports used: default */ +/***/ (function(module, exports, __webpack_require__) { +module.exports = __webpack_require__(/*! core-js-pure/stable/set-timeout */ 249); /***/ }), -/* 37 */ -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/an-object.js ***! - \*****************************************************/ +/* 34 */ +/*!*******************************************************!*\ + !*** ./node_modules/core-js-pure/internals/export.js ***! + \*******************************************************/ /*! no static exports found */ /*! all exports used */ /***/ (function(module, exports, __webpack_require__) { -var isObject = __webpack_require__(/*! ../internals/is-object */ 44); +"use strict"; -module.exports = function (it) { - if (!isObject(it)) { - throw TypeError(String(it) + ' is not an object'); - } return it; +var global = __webpack_require__(/*! ../internals/global */ 31); +var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 158).f; +var isForced = __webpack_require__(/*! ../internals/is-forced */ 188); +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); + } + } + } }; /***/ }), -/* 38 */ +/* 35 */ /*!*************************************!*\ !*** ./dev/Stores/User/Settings.js ***! \*************************************/ @@ -8366,16 +8360,16 @@ module.exports = function (it) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/web.timers */ 68); -/* harmony import */ var core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_timers__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_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 ko__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ko */ 1); -/* harmony import */ var Common_Consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! Common/Consts */ 25); +/* harmony import */ var Common_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_Globals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! Common/Globals */ 6); /* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Events */ 24); +/* harmony import */ var Common_Events__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Events */ 23); /* harmony import */ var Storage_Settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Storage/Settings */ 5); @@ -8444,7 +8438,7 @@ var SettingsUserStore = /*#__PURE__*/function () { window__WEBPACK_IMPORTED_MODULE_1___default.a.clearTimeout(_this2.iAutoLogoutTimer); if (0 < _this2.autoLogout() && !Storage_Settings__WEBPACK_IMPORTED_MODULE_8__["settingsGet"]('AccountSignMe')) { - _this2.iAutoLogoutTimer = window__WEBPACK_IMPORTED_MODULE_1___default.a.setTimeout(function () { + _this2.iAutoLogoutTimer = _babel_runtime_corejs3_core_js_stable_set_timeout__WEBPACK_IMPORTED_MODULE_0___default()(function () { Common_Events__WEBPACK_IMPORTED_MODULE_7__[/* pub */ "a"]('rl.auto-logout'); }, _this2.autoLogout() * Common_Enums__WEBPACK_IMPORTED_MODULE_4__["Magics"].Time1m); } @@ -8458,7 +8452,7 @@ var SettingsUserStore = /*#__PURE__*/function () { /* harmony default export */ __webpack_exports__["a"] = (new SettingsUserStore()); /***/ }), -/* 39 */ +/* 36 */ /*!*******************************!*\ !*** ./dev/Common/Plugins.js ***! \*******************************/ @@ -8580,6 +8574,83 @@ function settingsGet(pluginSection, name) { 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 */ 189); +var has = __webpack_require__(/*! ../internals/has */ 54); +var uid = __webpack_require__(/*! ../internals/uid */ 190); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 193); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 262); + +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 */ 105); +var has = __webpack_require__(/*! ../internals/has */ 44); +var uid = __webpack_require__(/*! ../internals/uid */ 137); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ 138); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 214); + +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 */, /* 41 */ @@ -8591,26 +8662,23 @@ function settingsGet(pluginSection, name) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join */ 75); -/* harmony import */ var core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/map */ 18); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/index-of */ 30); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__ = __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_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime-corejs3/core-js-stable/instance/filter */ 34); -/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4__); -/* harmony import */ var ko__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ko */ 1); -/* 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 $__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! $ */ 8); -/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Translator */ 9); -/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Common/Utils */ 2); -/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Stores/User/Account */ 46); -/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! Knoin/Knoin */ 7); - +/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.join.js */ 77); +/* harmony import */ var core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_join_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__ = __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_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1__); +/* 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 _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 ko__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ko */ 1); +/* 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__(/*! $ */ 8); +/* harmony import */ var $__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n($__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var Common_Translator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! Common/Translator */ 9); +/* harmony import */ var Common_Utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! Common/Utils */ 2); +/* harmony import */ var Stores_User_Account__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! Stores/User/Account */ 46); +/* harmony import */ var Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! Knoin/Knoin */ 7); @@ -8627,17 +8695,17 @@ var PgpUserStore = /*#__PURE__*/function () { function PgpUserStore() { var _this = this; - this.capaOpenPGP = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observable(false); + this.capaOpenPGP = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observable(false); this.openpgp = null; - this.openpgpkeys = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].observableArray([]); + this.openpgpkeys = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].observableArray([]); this.openpgpKeyring = null; - this.openpgpkeysPublic = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, _this.openpgpkeys(), function (item) { + this.openpgpkeysPublic = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed(function () { + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, _this.openpgpkeys(), function (item) { return !!(item && !item.isPrivate); }); }); - this.openpgpkeysPrivate = ko__WEBPACK_IMPORTED_MODULE_5__[/* default */ "a"].computed(function () { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, _this.openpgpkeys(), function (item) { + this.openpgpkeysPrivate = ko__WEBPACK_IMPORTED_MODULE_4__[/* default */ "a"].computed(function () { + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, _this.openpgpkeys(), function (item) { return !!(item && item.isPrivate); }); }); @@ -8654,10 +8722,8 @@ var PgpUserStore = /*#__PURE__*/function () { }; _proto.findKeyByHex = function findKeyByHex(keys, hash) { - return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, keys, function (item) { - var _context; - - return hash && item && (hash === item.id || -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context = item.ids).call(_context, hash)); + return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keys, function (item) { + return hash && item && (hash === item.id || -1 < item.ids.indexOf(hash)); }); }; @@ -8670,10 +8736,8 @@ var PgpUserStore = /*#__PURE__*/function () { }; _proto.findPublicKeysByEmail = function findPublicKeysByEmail(email) { - return ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(___WEBPACK_IMPORTED_MODULE_6___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, this.openpgpkeysPublic(), function (item) { - var _context2; - - var key = item && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context2 = item.emails).call(_context2, email) ? item : null; + return ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPublic(), function (item) { + var key = item && -1 < item.emails.indexOf(email) ? item : null; return key ? key.getNativeKeys() : [null]; }), true)); }; @@ -8681,7 +8745,7 @@ var PgpUserStore = /*#__PURE__*/function () { _proto.findPublicKeysBySigningKeyIds = function findPublicKeysBySigningKeyIds(signingKeyIds) { var _this2 = this; - return ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(___WEBPACK_IMPORTED_MODULE_6___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, signingKeyIds, function (id) { + return ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, signingKeyIds, function (id) { var key = id && id.toHex ? _this2.findPublicKeyByHex(id.toHex()) : null; return key ? key.getNativeKeys() : [null]; }), true)); @@ -8690,15 +8754,15 @@ var PgpUserStore = /*#__PURE__*/function () { _proto.findPrivateKeysByEncryptionKeyIds = function findPrivateKeysByEncryptionKeyIds(encryptionKeyIds, recipients, returnWrapKeys) { var _this3 = this; - var result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isArray"])(encryptionKeyIds) ? ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(___WEBPACK_IMPORTED_MODULE_6___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, encryptionKeyIds, function (id) { + var result = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isArray"])(encryptionKeyIds) ? ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, encryptionKeyIds, function (id) { var key = id && id.toHex ? _this3.findPrivateKeyByHex(id.toHex()) : null; return key ? returnWrapKeys ? [key] : key.getNativeKeys() : [null]; }), true)) : []; - if (0 === result.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isNonEmptyArray"])(recipients)) { - result = ___WEBPACK_IMPORTED_MODULE_6___default.a.uniq(___WEBPACK_IMPORTED_MODULE_6___default.a.compact(___WEBPACK_IMPORTED_MODULE_6___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, recipients, function (sEmail) { + if (0 === result.length && Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(recipients)) { + result = ___WEBPACK_IMPORTED_MODULE_5___default.a.uniq(___WEBPACK_IMPORTED_MODULE_5___default.a.compact(___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, recipients, function (sEmail) { var keys = sEmail ? _this3.findAllPrivateKeysByEmailNotNative(sEmail) : null; - return keys ? returnWrapKeys ? keys : ___WEBPACK_IMPORTED_MODULE_6___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, keys, function (key) { + return keys ? returnWrapKeys ? keys : ___WEBPACK_IMPORTED_MODULE_5___default.a.flatten(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keys, function (key) { return key.getNativeKeys(); }), true) : [null]; }), true)), function (key) { @@ -8715,10 +8779,8 @@ var PgpUserStore = /*#__PURE__*/function () { ; _proto.findPublicKeyByEmailNotNative = function findPublicKeyByEmailNotNative(email) { - return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, this.openpgpkeysPublic(), function (item) { - var _context3; - - return item && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context3 = item.emails).call(_context3, email); + return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPublic(), function (item) { + return item && -1 < item.emails.indexOf(email); }) || null; } /** @@ -8728,10 +8790,8 @@ var PgpUserStore = /*#__PURE__*/function () { ; _proto.findPrivateKeyByEmailNotNative = function findPrivateKeyByEmailNotNative(email) { - return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, this.openpgpkeysPrivate(), function (item) { - var _context4; - - return item && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context4 = item.emails).call(_context4, email); + return _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPrivate(), function (item) { + return item && -1 < item.emails.indexOf(email); }) || null; } /** @@ -8741,10 +8801,8 @@ var PgpUserStore = /*#__PURE__*/function () { ; _proto.findAllPublicKeysByEmailNotNative = function findAllPublicKeysByEmailNotNative(email) { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, this.openpgpkeysPublic(), function (item) { - var _context5; - - return item && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context5 = item.emails).call(_context5, email); + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPublic(), function (item) { + return item && -1 < item.emails.indexOf(email); }) || null; } /** @@ -8754,10 +8812,8 @@ var PgpUserStore = /*#__PURE__*/function () { ; _proto.findAllPrivateKeysByEmailNotNative = function findAllPrivateKeysByEmailNotNative(email) { - return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_4___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, this.openpgpkeysPrivate(), function (item) { - var _context6; - - return item && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context6 = item.emails).call(_context6, email); + return _babel_runtime_corejs3_core_js_stable_instance_filter__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPrivate(), function (item) { + return item && -1 < item.emails.indexOf(email); }) || null; } /** @@ -8770,10 +8826,8 @@ var PgpUserStore = /*#__PURE__*/function () { _proto.findPrivateKeyByEmail = function findPrivateKeyByEmail(email, password) { var privateKey = null; - var key = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, this.openpgpkeysPrivate(), function (item) { - var _context7; - - return item && -1 < _babel_runtime_corejs3_core_js_stable_instance_index_of__WEBPACK_IMPORTED_MODULE_2___default()(_context7 = item.emails).call(_context7, email); + var key = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, this.openpgpkeysPrivate(), function (item) { + return item && -1 < item.emails.indexOf(email); }); if (key) { @@ -8781,7 +8835,7 @@ var PgpUserStore = /*#__PURE__*/function () { privateKey = key.getNativeKeys()[0] || null; if (privateKey) { - privateKey.decrypt(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["pString"])(password)); + privateKey.decrypt(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["pString"])(password)); } } catch (e) { privateKey = null; @@ -8797,7 +8851,7 @@ var PgpUserStore = /*#__PURE__*/function () { ; _proto.findSelfPrivateKey = function findSelfPrivateKey(password) { - return this.findPrivateKeyByEmail(Stores_User_Account__WEBPACK_IMPORTED_MODULE_10__[/* default */ "a"].email(), password); + return this.findPrivateKeyByEmail(Stores_User_Account__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"].email(), password); }; _proto.decryptMessage = function decryptMessage(message, recipients, fCallback) { @@ -8807,7 +8861,7 @@ var PgpUserStore = /*#__PURE__*/function () { var privateKeys = this.findPrivateKeysByEncryptionKeyIds(message.getEncryptionKeyIds(), recipients, true); if (privateKeys && 0 < privateKeys.length) { - Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_11__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 528), [function (decryptedKey) { + Object(Knoin_Knoin__WEBPACK_IMPORTED_MODULE_10__["showScreenPopup"])(__webpack_require__(/*! View/Popup/MessageOpenPgp */ 549), [function (decryptedKey) { if (decryptedKey) { message.decrypt(decryptedKey).then(function (decryptedMessage) { var privateKey = null; @@ -8850,7 +8904,7 @@ var PgpUserStore = /*#__PURE__*/function () { if (publicKeys && 0 < publicKeys.length) { try { var result = message.verify(publicKeys), - valid = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, ___WEBPACK_IMPORTED_MODULE_6___default.a.isArray(result) ? result : [], function (item) { + valid = _babel_runtime_corejs3_core_js_stable_instance_find__WEBPACK_IMPORTED_MODULE_2___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, ___WEBPACK_IMPORTED_MODULE_5___default.a.isArray(result) ? result : [], function (item) { return item && item.valid && item.keyid; }); @@ -8859,7 +8913,7 @@ var PgpUserStore = /*#__PURE__*/function () { return true; } } catch (e) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["log"])(e); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e); } } @@ -8881,15 +8935,15 @@ var PgpUserStore = /*#__PURE__*/function () { verControl.removeClass('success').addClass('error').attr('title', title); } - if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isUnd"])(text)) { - dom.text(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["trim"])(text)); + if (!Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isUnd"])(text)) { + dom.text(Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["trim"])(text)); } }; PgpUserStore.domControlEncryptedClickHelper = function domControlEncryptedClickHelper(store, dom, armoredMessage, recipients) { return function () { var message = null; - var $this = $__WEBPACK_IMPORTED_MODULE_7___default()(this); // eslint-disable-line no-invalid-this + var $this = $__WEBPACK_IMPORTED_MODULE_6___default()(this); // eslint-disable-line no-invalid-this if ($this.hasClass('success')) { return false; @@ -8898,33 +8952,33 @@ var PgpUserStore = /*#__PURE__*/function () { try { message = store.openpgp.message.readArmored(armoredMessage); } catch (e) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["log"])(e); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e); } if (message && message.getText && message.verify && message.decrypt) { store.decryptMessage(message, recipients, function (validPrivateKey, decryptedMessage, validPublicKey, signingKeyIds) { if (decryptedMessage) { if (validPublicKey) { - store.controlsHelper(dom, $this, true, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/GOOD_SIGNATURE', { + store.controlsHelper(dom, $this, true, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/GOOD_SIGNATURE', { 'USER': validPublicKey.user + ' (' + validPublicKey.id + ')' }), decryptedMessage.getText()); } else if (validPrivateKey) { - var keyIds = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isNonEmptyArray"])(signingKeyIds) ? signingKeyIds : null, - additional = keyIds ? ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, keyIds, function (item) { + var keyIds = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(signingKeyIds) ? signingKeyIds : null, + additional = keyIds ? ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keyIds, function (item) { return item && item.toHex ? item.toHex() : null; })).join(', ') : ''; - store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') + (additional ? ' (' + additional + ')' : ''), decryptedMessage.getText()); + store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') + (additional ? ' (' + additional + ')' : ''), decryptedMessage.getText()); } else { - store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); + store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); } } else { - store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); + store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); } }); return false; } - store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); + store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); return false; }; }; @@ -8932,7 +8986,7 @@ var PgpUserStore = /*#__PURE__*/function () { PgpUserStore.domControlSignedClickHelper = function domControlSignedClickHelper(store, dom, armoredMessage) { return function () { var message = null; - var $this = $__WEBPACK_IMPORTED_MODULE_7___default()(this); // eslint-disable-line no-invalid-this + var $this = $__WEBPACK_IMPORTED_MODULE_6___default()(this); // eslint-disable-line no-invalid-this if ($this.hasClass('success') || $this.hasClass('error')) { return false; @@ -8941,27 +8995,27 @@ var PgpUserStore = /*#__PURE__*/function () { try { message = store.openpgp.cleartext.readArmored(armoredMessage); } catch (e) { - Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["log"])(e); + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["log"])(e); } if (message && message.getText && message.verify) { store.verifyMessage(message, function (validKey, signingKeyIds) { if (validKey) { - store.controlsHelper(dom, $this, true, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/GOOD_SIGNATURE', { + store.controlsHelper(dom, $this, true, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/GOOD_SIGNATURE', { 'USER': validKey.user + ' (' + validKey.id + ')' }), message.getText()); } else { - var keyIds = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_9__["isNonEmptyArray"])(signingKeyIds) ? signingKeyIds : null, - additional = keyIds ? ___WEBPACK_IMPORTED_MODULE_6___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_1___default()(___WEBPACK_IMPORTED_MODULE_6___default.a).call(___WEBPACK_IMPORTED_MODULE_6___default.a, keyIds, function (item) { + var keyIds = Object(Common_Utils__WEBPACK_IMPORTED_MODULE_8__["isNonEmptyArray"])(signingKeyIds) ? signingKeyIds : null, + additional = keyIds ? ___WEBPACK_IMPORTED_MODULE_5___default.a.compact(_babel_runtime_corejs3_core_js_stable_instance_map__WEBPACK_IMPORTED_MODULE_3___default()(___WEBPACK_IMPORTED_MODULE_5___default.a).call(___WEBPACK_IMPORTED_MODULE_5___default.a, keyIds, function (item) { return item && item.toHex ? item.toHex() : null; })).join(', ') : ''; - store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') + (additional ? ' (' + additional + ')' : '')); + store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE') + (additional ? ' (' + additional + ')' : '')); } }); return false; } - store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_8__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); + store.controlsHelper(dom, $this, false, Object(Common_Translator__WEBPACK_IMPORTED_MODULE_7__["i18n"])('PGP_NOTIFICATIONS/DECRYPTION_ERROR')); return false; }; } @@ -8984,9 +9038,9 @@ var PgpUserStore = /*#__PURE__*/function () { dom.data('openpgp-original', domText); if (encrypted) { - verControl = $__WEBPACK_IMPORTED_MODULE_7___default()('
' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_25__["trim"])(sText) + ''; + sText = '
' + Object(Common_Utils__WEBPACK_IMPORTED_MODULE_24__["trim"])(sText) + ''; break; - case Common_Enums__WEBPACK_IMPORTED_MODULE_24__["ComposeType"].Forward: + case Common_Enums__WEBPACK_IMPORTED_MODULE_23__["ComposeType"].Forward: sFrom = message.fromToLine(false, true); sTo = message.toToLine(false, true); sCc = message.ccToLine(false, true); - sText = '