From e1b76c13fa0f5b8d4b24d2a19e6222dd627d0263 Mon Sep 17 00:00:00 2001 From: giannik Date: Tue, 17 Oct 2023 12:13:09 +0300 Subject: [PATCH 1/3] thumbnails for media app --- .../OrchardCore.Media/Assets.json | 1 + .../app/MediaApp/mediaItemsGridComponent.js | 5 +- .../app/MediaApp/mediaItemsTableComponent.js | 5 +- .../MediaField/mediaFieldThumbsContainer.js | 5 +- .../font-awesome-thumbnails.js | 68 +++++++++++++++++++ 5 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json index 80d16ffac43..c5b9dc9cc4b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json @@ -12,6 +12,7 @@ "./node_modules/blueimp-file-upload/js/jquery.fileupload.js", "./node_modules/blueimp-file-upload/js/jquery.iframe-transport.js", "Assets/js/helpers.js", + "Assets/js/fontawesome-icons-thumbnails/**/*.js", "Assets/js/app/**/*.js" ], "watch": [ diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js index cdc9b5fb09c..6b1a27b5893 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js @@ -14,7 +14,7 @@ Vue.component('media-items-grid', { :src="buildMediaUrl(media.url, thumbSize)" :data-mime="media.mime" :style="{maxHeight: thumbSize +'px', maxWidth: thumbSize +'px'}" /> - +
@@ -62,6 +62,9 @@ Vue.component('media-items-grid', { }, dragStart: function (media, e) { bus.$emit('mediaDragStartRequested', media, e); + }, + getfontAwesomeClassNameForFileName:function getfontAwesomeClassNameForFilename(filename, thumbsize){ + return getClassNameForFilename(filename) + ' ' + thumbsize; } } }); diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js index 1aac6bd323a..6017907438f 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsTableComponent.js @@ -37,7 +37,7 @@ Vue.component('media-items-table', {
- +
@@ -114,6 +114,9 @@ Vue.component('media-items-table', { printDateTime: function (datemillis){ var d = new Date(datemillis); return d.toLocaleString(); + }, + getfontAwesomeClassNameForFileName:function getfontAwesomeClassNameForFilename(filename, thumbsize){ + return getClassNameForFilename(filename) + ' ' + thumbsize; } } }); diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js index a365044857b..545d403125c 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaField/mediaFieldThumbsContainer.js @@ -21,7 +21,7 @@ Vue.component('mediaFieldThumbsContainer', { :src="buildMediaUrl(media.url, thumbSize)" \ :data-mime="media.mime"\ :style="{maxHeight: thumbSize + \'px\' , maxWidth: thumbSize + \'px\'}"/>\ - \ + \
\
\ >> 0) + 2) +} + + +function getClassNameForFilename(filename) { + return getClassNameForExtension(getExtensionForFilename(filename)) +} \ No newline at end of file From ae2e96f2299d7bd9d5e7b04b762c37def67dd399 Mon Sep 17 00:00:00 2001 From: giannik Date: Tue, 17 Oct 2023 20:28:50 +0300 Subject: [PATCH 2/3] review feedback --- .../OrchardCore.Media/Assets.json | 1 - .../MediaApp}/font-awesome-thumbnails.js | 71 ++++++++----------- .../app/MediaApp/mediaItemsGridComponent.js | 2 +- 3 files changed, 31 insertions(+), 43 deletions(-) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{fontawesome-icons-thumbnails => app/MediaApp}/font-awesome-thumbnails.js (50%) diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json index c5b9dc9cc4b..80d16ffac43 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json @@ -12,7 +12,6 @@ "./node_modules/blueimp-file-upload/js/jquery.fileupload.js", "./node_modules/blueimp-file-upload/js/jquery.iframe-transport.js", "Assets/js/helpers.js", - "Assets/js/fontawesome-icons-thumbnails/**/*.js", "Assets/js/app/**/*.js" ], "watch": [ diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/font-awesome-thumbnails.js similarity index 50% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/font-awesome-thumbnails.js index 48d25f82bde..102387300cf 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/font-awesome-thumbnails.js @@ -1,6 +1,6 @@ // https://github.com/spatie/font-awesome-filetypes -const fa_icons = { +const faIcons = { image: 'fa-regular fa-image', pdf: 'fa-regular fa-file-pdf', word: 'fa-regular fa-file-word', @@ -15,54 +15,43 @@ const fa_icons = { file: 'fa-regular fa-file' }; -const fa_thumbnails = { - gif: fa_icons.image, - jpeg: fa_icons.image, - jpg: fa_icons.image, - png: fa_icons.image, - - pdf: fa_icons.pdf, - - doc: fa_icons.word, - docx: fa_icons.word, - - ppt: fa_icons.powerpoint, - pptx: fa_icons.powerpoint, - - xls: fa_icons.excel, - xlsx: fa_icons.excel, - - csv: fa_icons.csv, - - aac: fa_icons.audio, - mp3: fa_icons.audio, - ogg: fa_icons.audio, - - avi: fa_icons.video, - flv: fa_icons.video, - mkv: fa_icons.video, - mp4: fa_icons.video, - webm: fa_icons.video, - - gz: fa_icons.archive, - zip: fa_icons.archive, - - css: fa_icons.code, - html: fa_icons.code, - js: fa_icons.code, - - txt: fa_icons.text +const faThumbnails = { + gif: faIcons.image, + jpeg: faIcons.image, + jpg: faIcons.image, + png: faIcons.image, + pdf: faIcons.pdf, + doc: faIcons.word, + docx: faIcons.word, + ppt: faIcons.powerpoint, + pptx: faIcons.powerpoint, + xls: faIcons.excel, + xlsx: faIcons.excel, + csv: faIcons.csv, + aac: faIcons.audio, + mp3: faIcons.audio, + ogg: faIcons.audio, + avi: faIcons.video, + flv: faIcons.video, + mkv: faIcons.video, + mp4: faIcons.video, + webm: faIcons.video, + gz: faIcons.archive, + zip: faIcons.archive, + css: faIcons.code, + html: faIcons.code, + js: faIcons.code, + txt: faIcons.text }; function getClassNameForExtension(extension) { - return fa_thumbnails[extension.toLowerCase()] || fa_icons.file + return faThumbnails[extension.toLowerCase()] || faIcons.file } function getExtensionForFilename(filename) { return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2) } - function getClassNameForFilename(filename) { return getClassNameForExtension(getExtensionForFilename(filename)) -} \ No newline at end of file +} diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js index 6b1a27b5893..4257e755cfb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js @@ -14,7 +14,7 @@ Vue.component('media-items-grid', { :src="buildMediaUrl(media.url, thumbSize)" :data-mime="media.mime" :style="{maxHeight: thumbSize +'px', maxWidth: thumbSize +'px'}" /> - +
From 9928160d2e5dc50cec1e665e0e2c8848788eff0b Mon Sep 17 00:00:00 2001 From: giannik Date: Tue, 17 Oct 2023 20:28:50 +0300 Subject: [PATCH 3/3] review feedback --- .../OrchardCore.Media/Assets.json | 1 - .../MediaApp}/font-awesome-thumbnails.js | 71 ++-- .../app/MediaApp/mediaItemsGridComponent.js | 2 +- .../wwwroot/Scripts/media.js | 388 ++++++++++-------- .../wwwroot/Scripts/media.min.js | 2 +- 5 files changed, 257 insertions(+), 207 deletions(-) rename src/OrchardCore.Modules/OrchardCore.Media/Assets/js/{fontawesome-icons-thumbnails => app/MediaApp}/font-awesome-thumbnails.js (50%) diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json index c5b9dc9cc4b..80d16ffac43 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets.json @@ -12,7 +12,6 @@ "./node_modules/blueimp-file-upload/js/jquery.fileupload.js", "./node_modules/blueimp-file-upload/js/jquery.iframe-transport.js", "Assets/js/helpers.js", - "Assets/js/fontawesome-icons-thumbnails/**/*.js", "Assets/js/app/**/*.js" ], "watch": [ diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/font-awesome-thumbnails.js similarity index 50% rename from src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js rename to src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/font-awesome-thumbnails.js index 48d25f82bde..102387300cf 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/fontawesome-icons-thumbnails/font-awesome-thumbnails.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/font-awesome-thumbnails.js @@ -1,6 +1,6 @@ // https://github.com/spatie/font-awesome-filetypes -const fa_icons = { +const faIcons = { image: 'fa-regular fa-image', pdf: 'fa-regular fa-file-pdf', word: 'fa-regular fa-file-word', @@ -15,54 +15,43 @@ const fa_icons = { file: 'fa-regular fa-file' }; -const fa_thumbnails = { - gif: fa_icons.image, - jpeg: fa_icons.image, - jpg: fa_icons.image, - png: fa_icons.image, - - pdf: fa_icons.pdf, - - doc: fa_icons.word, - docx: fa_icons.word, - - ppt: fa_icons.powerpoint, - pptx: fa_icons.powerpoint, - - xls: fa_icons.excel, - xlsx: fa_icons.excel, - - csv: fa_icons.csv, - - aac: fa_icons.audio, - mp3: fa_icons.audio, - ogg: fa_icons.audio, - - avi: fa_icons.video, - flv: fa_icons.video, - mkv: fa_icons.video, - mp4: fa_icons.video, - webm: fa_icons.video, - - gz: fa_icons.archive, - zip: fa_icons.archive, - - css: fa_icons.code, - html: fa_icons.code, - js: fa_icons.code, - - txt: fa_icons.text +const faThumbnails = { + gif: faIcons.image, + jpeg: faIcons.image, + jpg: faIcons.image, + png: faIcons.image, + pdf: faIcons.pdf, + doc: faIcons.word, + docx: faIcons.word, + ppt: faIcons.powerpoint, + pptx: faIcons.powerpoint, + xls: faIcons.excel, + xlsx: faIcons.excel, + csv: faIcons.csv, + aac: faIcons.audio, + mp3: faIcons.audio, + ogg: faIcons.audio, + avi: faIcons.video, + flv: faIcons.video, + mkv: faIcons.video, + mp4: faIcons.video, + webm: faIcons.video, + gz: faIcons.archive, + zip: faIcons.archive, + css: faIcons.code, + html: faIcons.code, + js: faIcons.code, + txt: faIcons.text }; function getClassNameForExtension(extension) { - return fa_thumbnails[extension.toLowerCase()] || fa_icons.file + return faThumbnails[extension.toLowerCase()] || faIcons.file } function getExtensionForFilename(filename) { return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2) } - function getClassNameForFilename(filename) { return getClassNameForExtension(getExtensionForFilename(filename)) -} \ No newline at end of file +} diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js index 6b1a27b5893..4257e755cfb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/Assets/js/app/MediaApp/mediaItemsGridComponent.js @@ -14,7 +14,7 @@ Vue.component('media-items-grid', { :src="buildMediaUrl(media.url, thumbSize)" :data-mime="media.mime" :style="{maxHeight: thumbSize +'px', maxWidth: thumbSize +'px'}" /> - +
diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js index f30b7944c1d..31c39e917c6 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js @@ -1566,6 +1566,166 @@ function randomUUID() { return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16); }); } +// component +Vue.component('upload', { + template: '\ +
\ + \ +

{{ model.name }}

\ +
\ + \ + Error: {{ model.errorMessage }} \ +
\ +
\ + ', + props: { + model: Object, + uploadInputId: String + }, + mounted: function mounted() { + var _self$uploadInputId; + var self = this; + var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); + $(uploadInput).bind('fileuploadprogress', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + self.model.percentage = parseInt(data.loaded / data.total * 100, 10); + }); + $(uploadInput).bind('fileuploaddone', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + if (data.result.files[0].error) { + self.handleFailure(data.files[0].name, data.result.files[0].error); + } else { + bus.$emit('removalRequest', self.model); + } + }); + $(uploadInput).bind('fileuploadfail', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + self.handleFailure(data.files[0].name, $('#t-error').val()); + }); + }, + methods: { + handleFailure: function handleFailure(fileName, message) { + if (fileName !== this.model.name) { + return; + } + this.model.errorMessage = message; + bus.$emit('ErrorOnUpload', this.model); + }, + dismissWarning: function dismissWarning() { + bus.$emit('removalRequest', this.model); + } + } +}); +// component +Vue.component('uploadList', { + template: '\ +
\ +
\ + {{ T.uploads }} \ + (Pending: {{ pendingCount }}) \ + ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} ) \ +
\ +
\ + \ +
\ +
\ + \ +
\ +
\ +
\ +
\ +
\ + \ +
\ +
\ +
\ + ', + data: function data() { + return { + files: [], + T: {}, + expanded: false, + pendingCount: 0, + errorCount: 0 + }; + }, + props: { + uploadInputId: String + }, + created: function created() { + var self = this; + // retrieving localized strings from view + self.T.uploads = $('#t-uploads').val(); + self.T.errors = $('#t-errors').val(); + self.T.clearErrors = $('#t-clear-errors').val(); + }, + computed: { + fileCount: function fileCount() { + return this.files.length; + } + }, + mounted: function mounted() { + var _self$uploadInputId; + var self = this; + var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); + $(uploadInput).bind('fileuploadadd', function (e, data) { + if (!data.files) { + return; + } + data.files.forEach(function (newFile) { + var alreadyInList = self.files.some(function (f) { + return f.name == newFile.name; + }); + if (!alreadyInList) { + self.files.push({ + name: newFile.name, + percentage: 0, + errorMessage: '' + }); + } else { + console.error('A file with the same name is already on the queue:' + newFile.name); + } + }); + }); + bus.$on('removalRequest', function (fileUpload) { + self.files.forEach(function (item, index, array) { + if (item.name == fileUpload.name) { + array.splice(index, 1); + } + }); + }); + bus.$on('ErrorOnUpload', function (fileUpload) { + self.updateCount(); + }); + }, + methods: { + updateCount: function updateCount() { + this.errorCount = this.files.filter(function (item) { + return item.errorMessage != ''; + }).length; + this.pendingCount = this.files.length - this.errorCount; + if (this.files.length < 1) { + this.expanded = false; + } + }, + clearErrors: function clearErrors() { + this.files = this.files.filter(function (item) { + return item.errorMessage == ''; + }); + } + }, + watch: { + files: function files() { + this.updateCount(); + } + } +}); function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } @@ -2260,9 +2420,62 @@ Vue.component('folder', { } } }); +// https://github.com/spatie/font-awesome-filetypes + +var faIcons = { + image: 'fa-regular fa-image', + pdf: 'fa-regular fa-file-pdf', + word: 'fa-regular fa-file-word', + powerpoint: 'fa-regular fa-file-powerpoint', + excel: 'fa-regular fa-file-excel', + csv: 'fa-regular fa-file', + audio: 'fa-regular fa-file-audio', + video: 'fa-regular fa-file-video', + archive: 'fa-regular fa-file-zipper', + code: 'fa-regular fa-file-code', + text: 'fa-regular fa-file-lines', + file: 'fa-regular fa-file' +}; +var faThumbnails = { + gif: faIcons.image, + jpeg: faIcons.image, + jpg: faIcons.image, + png: faIcons.image, + pdf: faIcons.pdf, + doc: faIcons.word, + docx: faIcons.word, + ppt: faIcons.powerpoint, + pptx: faIcons.powerpoint, + xls: faIcons.excel, + xlsx: faIcons.excel, + csv: faIcons.csv, + aac: faIcons.audio, + mp3: faIcons.audio, + ogg: faIcons.audio, + avi: faIcons.video, + flv: faIcons.video, + mkv: faIcons.video, + mp4: faIcons.video, + webm: faIcons.video, + gz: faIcons.archive, + zip: faIcons.archive, + css: faIcons.code, + html: faIcons.code, + js: faIcons.code, + txt: faIcons.text +}; +function getClassNameForExtension(extension) { + return faThumbnails[extension.toLowerCase()] || faIcons.file; +} +function getExtensionForFilename(filename) { + return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2); +} +function getClassNameForFilename(filename) { + return getClassNameForExtension(getExtensionForFilename(filename)); +} // component Vue.component('media-items-grid', { - template: "\n
    \n
  1. \n
    \n \n \n
    \n
    \n \n \n \n {{ media.name }}\n
    \n
  2. \n
\n ", + template: "\n
    \n
  1. \n
    \n \n \n
    \n
    \n \n \n \n {{ media.name }}\n
    \n
  2. \n
\n ", data: function data() { return { T: {} @@ -2300,12 +2513,15 @@ Vue.component('media-items-grid', { }, dragStart: function dragStart(media, e) { bus.$emit('mediaDragStartRequested', media, e); + }, + getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { + return getClassNameForFilename(filename) + ' ' + thumbsize; } } }); // component Vue.component('media-items-table', { - template: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
\n
\n \n \n
\n
\n \n \n
{{ printDateTime(media.lastModify) }}
\n
\n
{{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
\n
\n
{{ media.mime }}
\n
\n ", + template: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
{{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
\n
\n \n \n
\n
\n \n \n
{{ printDateTime(media.lastModify) }}
\n
\n
{{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
\n
\n
{{ media.mime }}
\n
\n ", data: function data() { return { T: {} @@ -2357,6 +2573,9 @@ Vue.component('media-items-table', { printDateTime: function printDateTime(datemillis) { var d = new Date(datemillis); return d.toLocaleString(); + }, + getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { + return getClassNameForFilename(filename) + ' ' + thumbsize; } } }); @@ -3143,7 +3362,7 @@ Vue.component('mediaFieldThumbsContainer', { :src="buildMediaUrl(media.url, thumbSize)" \ :data-mime="media.mime"\ :style="{maxHeight: thumbSize + \'px\' , maxWidth: thumbSize + \'px\'}"/>\ - \ + \
\
\ \ - \ -

{{ model.name }}

\ -
\ - \ - Error: {{ model.errorMessage }} \ -
\ -
\ - ', - props: { - model: Object, - uploadInputId: String - }, - mounted: function mounted() { - var _self$uploadInputId; - var self = this; - var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); - $(uploadInput).bind('fileuploadprogress', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - self.model.percentage = parseInt(data.loaded / data.total * 100, 10); - }); - $(uploadInput).bind('fileuploaddone', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - if (data.result.files[0].error) { - self.handleFailure(data.files[0].name, data.result.files[0].error); - } else { - bus.$emit('removalRequest', self.model); - } - }); - $(uploadInput).bind('fileuploadfail', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - self.handleFailure(data.files[0].name, $('#t-error').val()); - }); - }, - methods: { - handleFailure: function handleFailure(fileName, message) { - if (fileName !== this.model.name) { - return; - } - this.model.errorMessage = message; - bus.$emit('ErrorOnUpload', this.model); - }, - dismissWarning: function dismissWarning() { - bus.$emit('removalRequest', this.model); - } - } -}); -// component -Vue.component('uploadList', { - template: '\ -
\ - \ -
\ -
\ - \ -
\ -
\ -
\ - ', - data: function data() { - return { - files: [], - T: {}, - expanded: false, - pendingCount: 0, - errorCount: 0 - }; - }, - props: { - uploadInputId: String - }, - created: function created() { - var self = this; - // retrieving localized strings from view - self.T.uploads = $('#t-uploads').val(); - self.T.errors = $('#t-errors').val(); - self.T.clearErrors = $('#t-clear-errors').val(); - }, - computed: { - fileCount: function fileCount() { - return this.files.length; - } - }, - mounted: function mounted() { - var _self$uploadInputId; - var self = this; - var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); - $(uploadInput).bind('fileuploadadd', function (e, data) { - if (!data.files) { - return; - } - data.files.forEach(function (newFile) { - var alreadyInList = self.files.some(function (f) { - return f.name == newFile.name; - }); - if (!alreadyInList) { - self.files.push({ - name: newFile.name, - percentage: 0, - errorMessage: '' - }); - } else { - console.error('A file with the same name is already on the queue:' + newFile.name); - } - }); - }); - bus.$on('removalRequest', function (fileUpload) { - self.files.forEach(function (item, index, array) { - if (item.name == fileUpload.name) { - array.splice(index, 1); - } - }); - }); - bus.$on('ErrorOnUpload', function (fileUpload) { - self.updateCount(); - }); - }, - methods: { - updateCount: function updateCount() { - this.errorCount = this.files.filter(function (item) { - return item.errorMessage != ''; - }).length; - this.pendingCount = this.files.length - this.errorCount; - if (this.files.length < 1) { - this.expanded = false; - } }, - clearErrors: function clearErrors() { - this.files = this.files.filter(function (item) { - return item.errorMessage == ''; - }); - } - }, - watch: { - files: function files() { - this.updateCount(); + getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { + return getClassNameForFilename(filename) + ' ' + thumbsize; } } }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJoZWxwZXJzLmpzIiwiTWVkaWFBcHAvYXBwLmpzIiwiTWVkaWFBcHAvZmlsZXVwbG9hZC5qcyIsIk1lZGlhQXBwL2ZvbGRlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL21lZGlhSXRlbXNHcmlkQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc1RhYmxlQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvcGFnZXJDb21wb25lbnQuanMiLCJNZWRpYUFwcC9zb3J0SW5kaWNhdG9yQ29tcG9uZW50LmpzIiwiTWVkaWFGaWVsZC9hdHRhY2hlZE1lZGlhRmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGQuanMiLCJNZWRpYUZpZWxkL21lZGlhZmllbGRzQXBwc0FycmF5LmpzIiwiTWVkaWFGaWVsZC9tZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyLmpzIiwiU2hhcmVkL3VwbG9hZENvbXBvbmVudC5qcyIsIlNoYXJlZC91cGxvYWRMaXN0Q29tcG9uZW50LmpzIl0sIm5hbWVzIjpbImZhY3RvcnkiLCJkZWZpbmUiLCJhbWQiLCJleHBvcnRzIiwiX3R5cGVvZiIsInJlcXVpcmUiLCJ3aW5kb3ciLCJqUXVlcnkiLCIkIiwic3VwcG9ydCIsImZpbGVJbnB1dCIsIlJlZ0V4cCIsInRlc3QiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJwcm9wIiwieGhyRmlsZVVwbG9hZCIsIlByb2dyZXNzRXZlbnQiLCJGaWxlUmVhZGVyIiwieGhyRm9ybURhdGFGaWxlVXBsb2FkIiwiRm9ybURhdGEiLCJibG9iU2xpY2UiLCJCbG9iIiwicHJvdG90eXBlIiwic2xpY2UiLCJ3ZWJraXRTbGljZSIsIm1velNsaWNlIiwiZ2V0RHJhZ0hhbmRsZXIiLCJ0eXBlIiwiaXNEcmFnT3ZlciIsImUiLCJkYXRhVHJhbnNmZXIiLCJvcmlnaW5hbEV2ZW50IiwiaW5BcnJheSIsInR5cGVzIiwiX3RyaWdnZXIiLCJFdmVudCIsImRlbGVnYXRlZEV2ZW50IiwicHJldmVudERlZmF1bHQiLCJkcm9wRWZmZWN0Iiwid2lkZ2V0Iiwib3B0aW9ucyIsImRyb3Bab25lIiwiZG9jdW1lbnQiLCJwYXN0ZVpvbmUiLCJ1bmRlZmluZWQiLCJyZXBsYWNlRmlsZUlucHV0IiwicGFyYW1OYW1lIiwic2luZ2xlRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZHMiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUiLCJsaW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCIsInNlcXVlbnRpYWxVcGxvYWRzIiwibGltaXRDb25jdXJyZW50VXBsb2FkcyIsImZvcmNlSWZyYW1lVHJhbnNwb3J0IiwicmVkaXJlY3QiLCJyZWRpcmVjdFBhcmFtTmFtZSIsInBvc3RNZXNzYWdlIiwibXVsdGlwYXJ0IiwibWF4Q2h1bmtTaXplIiwidXBsb2FkZWRCeXRlcyIsInJlY2FsY3VsYXRlUHJvZ3Jlc3MiLCJwcm9ncmVzc0ludGVydmFsIiwiYml0cmF0ZUludGVydmFsIiwiYXV0b1VwbG9hZCIsInVuaXF1ZUZpbGVuYW1lcyIsIm1lc3NhZ2VzIiwiaTE4biIsIm1lc3NhZ2UiLCJjb250ZXh0IiwidG9TdHJpbmciLCJlYWNoIiwia2V5IiwidmFsdWUiLCJyZXBsYWNlIiwiZm9ybURhdGEiLCJmb3JtIiwic2VyaWFsaXplQXJyYXkiLCJhZGQiLCJkYXRhIiwiaXNEZWZhdWx0UHJldmVudGVkIiwiZmlsZXVwbG9hZCIsInByb2Nlc3MiLCJkb25lIiwic3VibWl0IiwicHJvY2Vzc0RhdGEiLCJjb250ZW50VHlwZSIsImNhY2hlIiwidGltZW91dCIsIl9wcm9taXNlUGlwZSIsInBhcnRzIiwiZm4iLCJqcXVlcnkiLCJzcGxpdCIsIk51bWJlciIsIl9zcGVjaWFsT3B0aW9ucyIsIl9ibG9iU2xpY2UiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9CaXRyYXRlVGltZXIiLCJ0aW1lc3RhbXAiLCJEYXRlIiwibm93IiwiZ2V0VGltZSIsImxvYWRlZCIsImJpdHJhdGUiLCJnZXRCaXRyYXRlIiwiaW50ZXJ2YWwiLCJ0aW1lRGlmZiIsIl9pc1hIUlVwbG9hZCIsIl9nZXRGb3JtRGF0YSIsImlzQXJyYXkiLCJuYW1lIiwicHVzaCIsIl9nZXRUb3RhbCIsImZpbGVzIiwidG90YWwiLCJpbmRleCIsImZpbGUiLCJzaXplIiwiX2luaXRQcm9ncmVzc09iamVjdCIsIm9iaiIsInByb2dyZXNzIiwiX3Byb2dyZXNzIiwiZXh0ZW5kIiwiX2luaXRSZXNwb25zZU9iamVjdCIsIl9yZXNwb25zZSIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9vblByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsIl90aW1lIiwiTWF0aCIsImZsb29yIiwiY2h1bmtTaXplIiwiX2JpdHJhdGVUaW1lciIsIl9pbml0UHJvZ3Jlc3NMaXN0ZW5lciIsInRoYXQiLCJ4aHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJvbiIsIm9lIiwiX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIiLCJvZmYiLCJfaXNJbnN0YW5jZU9mIiwiX2dldFVuaXF1ZUZpbGVuYW1lIiwibWFwIiwiU3RyaW5nIiwiXyIsInAxIiwicDIiLCJleHQiLCJfaW5pdFhIUkRhdGEiLCJoZWFkZXJzIiwiY29udGVudFJhbmdlIiwiYmxvYiIsImVuY29kZVVSSSIsInVwbG9hZE5hbWUiLCJmaWVsZCIsImFwcGVuZCIsImZpbGVOYW1lIiwiX2luaXRJZnJhbWVTZXR0aW5ncyIsInRhcmdldEhvc3QiLCJ1cmwiLCJkYXRhVHlwZSIsImxvY2F0aW9uIiwiaG9zdCIsIl9pbml0RGF0YVNldHRpbmdzIiwiX2NodW5rZWRVcGxvYWQiLCJfZ2V0UGFyYW1OYW1lIiwiaW5wdXQiLCJpIiwibGVuZ3RoIiwiX2luaXRGb3JtU2V0dGluZ3MiLCJocmVmIiwidG9VcHBlckNhc2UiLCJmb3JtQWNjZXB0Q2hhcnNldCIsImF0dHIiLCJfZ2V0QUpBWFNldHRpbmdzIiwiX2dldERlZmVycmVkU3RhdGUiLCJkZWZlcnJlZCIsInN0YXRlIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJfZW5oYW5jZVByb21pc2UiLCJwcm9taXNlIiwic3VjY2VzcyIsImVycm9yIiwiZmFpbCIsImNvbXBsZXRlIiwiYWx3YXlzIiwiX2dldFhIUlByb21pc2UiLCJyZXNvbHZlT3JSZWplY3QiLCJhcmdzIiwiZGZkIiwiRGVmZXJyZWQiLCJyZXNvbHZlV2l0aCIsInJlamVjdFdpdGgiLCJhYm9ydCIsIl9hZGRDb252ZW5pZW5jZU1ldGhvZHMiLCJnZXRQcm9taXNlIiwicmVzb2x2ZUZ1bmMiLCJyZWplY3RGdW5jIiwiX3Byb2Nlc3NRdWV1ZSIsImVycm9yVGhyb3duIiwianFYSFIiLCJfb25TZW5kIiwicHJvY2Vzc2luZyIsInJlc3BvbnNlIiwiX2dldFVwbG9hZGVkQnl0ZXMiLCJyYW5nZSIsImdldFJlc3BvbnNlSGVhZGVyIiwidXBwZXJCeXRlc1BvcyIsInBhcnNlSW50IiwidGVzdE9ubHkiLCJmcyIsInViIiwibWNzIiwibyIsImN1cnJlbnRMb2FkZWQiLCJhamF4IiwicmVzdWx0IiwidGV4dFN0YXR1cyIsIl9iZWZvcmVTZW5kIiwiX2FjdGl2ZSIsIl9vbkRvbmUiLCJfb25GYWlsIiwiX29uQWx3YXlzIiwianFYSFJvclJlc3VsdCIsImpxWEhSb3JFcnJvciIsImFib3J0ZWQiLCJzbG90IiwicGlwZSIsInNlbmQiLCJfc2VuZGluZyIsIm5leHRTbG90IiwiX3Nsb3RzIiwic2hpZnQiLCJyZXNvbHZlIiwiX3NlcXVlbmNlIiwiX29uQWRkIiwiZmlsZXNMZW5ndGgiLCJsaW1pdCIsImxpbWl0U2l6ZSIsIm92ZXJoZWFkIiwiYmF0Y2hTaXplIiwicGFyYW1OYW1lU2V0IiwicGFyYW1OYW1lU2xpY2UiLCJmaWxlU2V0IiwiaiIsIm9yaWdpbmFsRmlsZXMiLCJlbGVtZW50IiwibmV3RGF0YSIsIl9yZXBsYWNlRmlsZUlucHV0IiwiaW5wdXRDbG9uZSIsImNsb25lIiwicmVzdG9yZUZvY3VzIiwiaXMiLCJhY3RpdmVFbGVtZW50IiwiZmlsZUlucHV0Q2xvbmUiLCJyZXNldCIsImFmdGVyIiwiZGV0YWNoIiwidHJpZ2dlciIsImNsZWFuRGF0YSIsImVsIiwiX2hhbmRsZUZpbGVUcmVlRW50cnkiLCJlbnRyeSIsInBhdGgiLCJlbnRyaWVzIiwiZGlyUmVhZGVyIiwiZXJyb3JIYW5kbGVyIiwic3VjY2Vzc0hhbmRsZXIiLCJfaGFuZGxlRmlsZVRyZWVFbnRyaWVzIiwicmVhZEVudHJpZXMiLCJyZXN1bHRzIiwiY29uY2F0IiwiaXNGaWxlIiwiX2ZpbGUiLCJyZWxhdGl2ZVBhdGgiLCJpc0RpcmVjdG9yeSIsImNyZWF0ZVJlYWRlciIsIndoZW4iLCJBcnJheSIsIl9nZXREcm9wcGVkRmlsZXMiLCJpdGVtcyIsIndlYmtpdEdldEFzRW50cnkiLCJnZXRBc0VudHJ5IiwiaXRlbSIsImdldEFzRmlsZSIsIm1ha2VBcnJheSIsIl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyIsImZpbGVTaXplIiwiX2dldEZpbGVJbnB1dEZpbGVzIiwiX29uQ2hhbmdlIiwidGFyZ2V0IiwiX29uUGFzdGUiLCJjbGlwYm9hcmREYXRhIiwiX29uRHJvcCIsIl9vbkRyYWdPdmVyIiwiX29uRHJhZ0VudGVyIiwiX29uRHJhZ0xlYXZlIiwiX2luaXRFdmVudEhhbmRsZXJzIiwiX29uIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHJhZ2VudGVyIiwiZHJhZ2xlYXZlIiwicGFzdGUiLCJjaGFuZ2UiLCJfZGVzdHJveUV2ZW50SGFuZGxlcnMiLCJfb2ZmIiwiX2Rlc3Ryb3kiLCJfc2V0T3B0aW9uIiwicmVpbml0IiwiX3N1cGVyIiwiX2luaXRTcGVjaWFsT3B0aW9ucyIsImZpbmQiLCJfZ2V0UmVnRXhwIiwic3RyIiwibW9kaWZpZXJzIiwicG9wIiwiam9pbiIsIl9pc1JlZ0V4cE9wdGlvbiIsIl9pbml0RGF0YUF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwidG9Mb3dlckNhc2UiLCJjaGFyQXQiLCJfY3JlYXRlIiwiYWN0aXZlIiwiZGlzYWJsZWQiLCJyZWplY3QiLCJ0aGVuIiwiY291bnRlciIsImpzb25BUEkiLCJqc29uUGFyc2UiLCJKU09OIiwiYWpheFRyYW5zcG9ydCIsImFzeW5jIiwiaW5pdGlhbElmcmFtZVNyYyIsImlmcmFtZSIsImFkZFBhcmFtQ2hhciIsImNvbXBsZXRlQ2FsbGJhY2siLCJmaWxlSW5wdXRDbG9uZXMiLCJwYXJhbU5hbWVzIiwiY29udGVudHMiLCJmaXJzdENoaWxkIiwiRXJyb3IiLCJhcHBlbmRUbyIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJ2YWwiLCJyZW1vdmVBdHRyIiwicmVwbGFjZVdpdGgiLCJib2R5IiwiYWpheFNldHVwIiwiY29udmVydGVycyIsImlmcmFtZVRleHQiLCJ0ZXh0IiwiaWZyYW1lSnNvbiIsImlmcmFtZUh0bWwiLCJodG1sIiwiaWZyYW1lWG1sIiwieG1sRG9jIiwiaXNYTUxEb2MiLCJwYXJzZVhNTCIsIlhNTERvY3VtZW50IiwieG1sIiwiaWZyYW1lU2NyaXB0IiwiZ2xvYmFsRXZhbCIsInJhbmRvbVVVSUQiLCJjcnlwdG8iLCJjIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImluaXRpYWxpemVkIiwibWVkaWFBcHAiLCJidXMiLCJWdWUiLCJpbml0aWFsaXplTWVkaWFBcHBsaWNhdGlvbiIsImRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uIiwibWVkaWFBcHBsaWNhdGlvblVybCIsInBhdGhCYXNlIiwiY29uc29sZSIsIm1ldGhvZCIsImNvbnRlbnQiLCJyb290IiwiZm9sZGVyIiwic2VsZWN0ZWRGb2xkZXIiLCJtZWRpYUl0ZW1zIiwic2VsZWN0ZWRNZWRpYXMiLCJlcnJvcnMiLCJkcmFnRHJvcFRodW1ibmFpbCIsIkltYWdlIiwic21hbGxUaHVtYnMiLCJncmlkVmlldyIsIm1lZGlhRmlsdGVyIiwic29ydEJ5Iiwic29ydEFzYyIsIml0ZW1zSW5QYWdlIiwiY3JlYXRlZCIsInNlbGYiLCJzcmMiLCIkb24iLCJzZWxlY3RSb290Iiwic2VsZWN0ZWQiLCJlcnJvckluZm8iLCJsb2FkRm9sZGVyIiwibmV3TmFtZSIsIm5ld1BhdGgiLCJvbGRQYXRoIiwibWVkaWEiLCJmaWx0ZXIiLCJtZWRpYVBhdGgiLCJjcmVhdGVGb2xkZXIiLCJkZWxldGVGb2xkZXIiLCJuZXdTb3J0IiwiY2hhbmdlU29ydCIsInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEiLCJyZW5hbWVNZWRpYSIsImRlbGV0ZU1lZGlhSXRlbSIsImhhbmRsZURyYWdTdGFydCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJjdXJyZW50UHJlZnMiLCJwYXJzZSIsImNvbXB1dGVkIiwiaXNIb21lIiwicGFyZW50cyIsInAiLCJwYXJlbnRGb2xkZXIiLCJ1bnNoaWZ0IiwicGFyZW50IiwiZmlsdGVyZWRNZWRpYUl0ZW1zIiwiZmlsdGVyZWQiLCJpbmRleE9mIiwic29ydCIsImEiLCJiIiwibWltZSIsImxvY2FsZUNvbXBhcmUiLCJsYXN0TW9kaWZ5IiwiaGlkZGVuQ291bnQiLCJ0aHVtYlNpemUiLCJnZXQiLCJzZXQiLCJuZXdQcmVmcyIsIndhdGNoIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm5ld0ZvbGRlciIsIm1vdW50ZWQiLCIkcmVmcyIsInJvb3RGb2xkZXIiLCJ0b2dnbGUiLCJtZXRob2RzIiwidXBsb2FkVXJsIiwidXJsVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJtZWRpYVVybCIsImxvZyIsImZvckVhY2giLCJvcGVuIiwic2VsZWN0QWxsIiwidW5TZWxlY3RBbGwiLCJpbnZlcnRTZWxlY3Rpb24iLCJ0ZW1wIiwiaXNNZWRpYVNlbGVjdGVkIiwic3BsaWNlIiwic29tZSIsImFycmF5IiwibW9kZWwiLCJjb25maXJtRGlhbG9nIiwiX29iamVjdFNwcmVhZCIsImNhbGxiYWNrIiwicmVzcCIsIl9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuIiwiJGVtaXQiLCJyZXNwb25zZVRleHQiLCJlbXB0eSIsIm1vZGFsIiwiYm9vdHN0cmFwIiwiTW9kYWwiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwic2hvdyIsImZvY3VzIiwic2VsZWN0QW5kRGVsZXRlTWVkaWEiLCJkZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhTGlzdCIsIm1lZGlhTGlzdCIsInBhdGhzIiwibWVkaWFOYW1lcyIsInNldERhdGEiLCJzZXREcmFnSW1hZ2UiLCJlZmZlY3RBbGxvd2VkIiwiaGFuZGxlU2Nyb2xsV2hpbGVEcmFnIiwiY2xpZW50WSIsInNjcm9sbEJ5IiwiaW5uZXJIZWlnaHQiLCJrZXlwcmVzcyIsIndoaWNoIiwiY2xpY2siLCJoaWRlIiwiZXJyb3JNZXNzYWdlIiwib2xkTmFtZSIsImN1cnJlbnRGb2xkZXIiLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwiZGlzcGxheSIsImNodW5rZWRGaWxlVXBsb2FkSWQiLCJhbnRpRm9yZ2VyeVRva2VuIiwiRmlsZSIsImxhc3RNb2RpZmllZCIsImJpbmQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsImRpciIsInByb3BzIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJlbXRweSIsImhhbmRsZURyYWdPdmVyIiwiaGFuZGxlRHJhZ0xlYXZlIiwibW92ZU1lZGlhVG9Gb2xkZXIiLCJnZXREYXRhIiwic291cmNlRm9sZGVyIiwidGFyZ2V0Rm9sZGVyIiwiYWxlcnQiLCJUIiwiZWRpdEJ1dHRvbiIsImRlbGV0ZUJ1dHRvbiIsImJ1aWxkTWVkaWFVcmwiLCJkcmFnU3RhcnQiLCJCb29sZWFuIiwiaW1hZ2VIZWFkZXIiLCJuYW1lSGVhZGVyIiwibGFzdE1vZGlmeUhlYWRlciIsInNpemVIZWFkZXIiLCJ0eXBlSGVhZGVyIiwidmlld0J1dHRvbiIsInByaW50RGF0ZVRpbWUiLCJkYXRlbWlsbGlzIiwiZCIsInRvTG9jYWxlU3RyaW5nIiwic291cmNlSXRlbXMiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImN1cnJlbnQiLCJwYWdlckZpcnN0QnV0dG9uIiwicGFnZXJQcmV2aW91c0J1dHRvbiIsInBhZ2VyTmV4dEJ1dHRvbiIsInBhZ2VyTGFzdEJ1dHRvbiIsInBhZ2VyUGFnZVNpemVMYWJlbCIsInBhZ2VyUGFnZUxhYmVsIiwicGFnZXJUb3RhbExhYmVsIiwibmV4dCIsInByZXZpb3VzIiwiZ29GaXJzdCIsImdvTGFzdCIsInRvdGFsUGFnZXMiLCJnb1RvIiwidGFyZ2V0UGFnZSIsInBhZ2VzIiwiY2VpbCIsImlzTGFzdFBhZ2UiLCJpc0ZpcnN0UGFnZSIsImNhbkRvTmV4dCIsImNhbkRvUHJldiIsImNhbkRvRmlyc3QiLCJjYW5Eb0xhc3QiLCJpdGVtc0luQ3VycmVudFBhZ2UiLCJzdGFydCIsImVuZCIsInBhZ2VMaW5rcyIsImxpbmtzIiwiYmVmb3JlQ3VycmVudCIsImJlZm9yZUJlZm9yZUN1cnJlbnQiLCJhZnRlckN1cnJlbnQiLCJhZnRlckFmdGVyQ3VycmVudCIsImNvbG5hbWUiLCJzZWxlY3RlZGNvbG5hbWUiLCJhc2MiLCJpc0FjdGl2ZSIsImluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQiLCJpZE9mVXBsb2FkQnV0dG9uIiwidXBsb2FkQWN0aW9uIiwibWVkaWFJdGVtVXJsIiwiYWxsb3dNdWx0aXBsZSIsImFsbG93TWVkaWFUZXh0IiwiYWxsb3dBbmNob3JzIiwidGVtcFVwbG9hZEZvbGRlciIsIm1heFVwbG9hZENodW5rU2l6ZSIsImluaXRpYWxQYXRocyIsIm1lZGlhRmllbGRFZGl0b3IiLCJpZHByZWZpeCIsIm1lZGlhRmllbGRBcHAiLCJtZWRpYUZpZWxkQXBwcyIsInNlbGVjdGVkTWVkaWEiLCJpZFByZWZpeCIsImJhY2t1cE1lZGlhVGV4dCIsImJhY2t1cEFuY2hvciIsIm1lZGlhVGV4dG1vZGFsIiwiYW5jaG9yaW5nTW9kYWwiLCJtZWRpYVBhdGhzIiwieCIsImlzUmVtb3ZlZCIsImlzTmV3IiwibWVkaWFUZXh0IiwiYW5jaG9yIiwiYXR0YWNoZWRGaWxlTmFtZSIsInZhbHVlcyIsInNpZ25hbCIsInZ1ZWtleSIsInkiLCJyb3VuZCIsImNhbkFkZE1lZGlhIiwibm9uUmVtb3ZlZE1lZGlhSXRlbXMiLCJzZWxlY3RNZWRpYSIsInNlbGVjdG9yIiwiZWRpdG9ySWQiLCJjb3VudCIsImdldFVuaXF1ZUlkIiwibmV3TWVkaWFJdGVtcyIsImVycm9ybXNnIiwiciIsInJhbmRvbSIsInYiLCJyZW1vdmVTZWxlY3RlZCIsImV2ZW50IiwicmVtb3ZlZCIsInNob3dNZWRpYVRleHRNb2RhbCIsIm1lZGlhVGV4dE1vZGFsIiwiY2FuY2VsTWVkaWFUZXh0TW9kYWwiLCJzaG93QW5jaG9yTW9kYWwiLCJjYW5jZWxBbmNob3JpbmdNb2RhbCIsInJlc2V0QW5jaG9yIiwib25BbmNob3JEcm9wIiwiaW1hZ2UiLCJhbmNob3JJbWFnZSIsIm9mZnNldFgiLCJjbGllbnRXaWR0aCIsIm9mZnNldFkiLCJjbGllbnRIZWlnaHQiLCJhbmNob3JMZWZ0IiwibW9kYWxCb2R5Iiwib2Zmc2V0IiwicG9zaXRpb24iLCJhbmNob3JUb3AiLCJzZXRBbmNob3IiLCJhZGRNZWRpYUZpbGVzIiwiZGVlcCIsImhhbmRsZXIiLCJpbml0aWFsaXplTWVkaWFGaWVsZCIsIm1vZGFsQm9keUVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwic2hvd01vZGFsIiwiYW5jaG9ySWNvbiIsInF1ZXJ5U2VsZWN0b3IiLCJpc0ludGVnZXIiLCJtZWRpYU5vdEZvdW5kIiwiZGlzY2FyZFdhcm5pbmciLCJub0ltYWdlcyIsIiRwYXJlbnQiLCJ1cGxvYWRJbnB1dElkIiwiX3NlbGYkdXBsb2FkSW5wdXRJZCIsInVwbG9hZElucHV0IiwicGVyY2VudGFnZSIsImhhbmRsZUZhaWx1cmUiLCJkaXNtaXNzV2FybmluZyIsImV4cGFuZGVkIiwicGVuZGluZ0NvdW50IiwiZXJyb3JDb3VudCIsInVwbG9hZHMiLCJjbGVhckVycm9ycyIsImZpbGVDb3VudCIsIm5ld0ZpbGUiLCJhbHJlYWR5SW5MaXN0IiwiZiIsImZpbGVVcGxvYWQiLCJ1cGRhdGVDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxDQUFDLFVBQVVBLE9BQU8sRUFBRTtFQUNsQixZQUFZOztFQUNaLElBQUksT0FBT0MsTUFBTSxLQUFLLFVBQVUsSUFBSUEsTUFBTSxDQUFDQyxHQUFHLEVBQUU7SUFDOUM7SUFDQUQsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEVBQUVELE9BQU8sQ0FBQztFQUNwRCxDQUFDLE1BQU0sSUFBSSxRQUFPRyxPQUFPLGlDQUFBQyxPQUFBLENBQVBELE9BQU8sT0FBSyxRQUFRLEVBQUU7SUFDdEM7SUFDQUgsT0FBTyxDQUFDSyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUVBLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0VBQ2xFLENBQUMsTUFBTTtJQUNMO0lBQ0FMLE9BQU8sQ0FBQ00sTUFBTSxDQUFDQyxNQUFNLENBQUM7RUFDeEI7QUFDRixDQUFDLEVBQUUsVUFBVUMsQ0FBQyxFQUFFO0VBQ2QsWUFBWTs7RUFFWjtFQUNBO0VBQ0FBLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxTQUFTLEdBQUcsRUFDcEIsSUFBSUMsTUFBTTtFQUNSO0VBQ0EsaUNBQWlDLEdBQy9CLDREQUE0RCxHQUM1RCw0QkFBNEIsR0FDNUIsa0NBQ0osQ0FBQyxDQUFDQyxJQUFJLENBQUNOLE1BQU0sQ0FBQ08sU0FBUyxDQUFDQyxTQUFTLENBQUM7RUFDbEM7RUFDQU4sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUNPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDM0M7O0VBRUQ7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBUCxDQUFDLENBQUNDLE9BQU8sQ0FBQ08sYUFBYSxHQUFHLENBQUMsRUFBRVYsTUFBTSxDQUFDVyxhQUFhLElBQUlYLE1BQU0sQ0FBQ1ksVUFBVSxDQUFDO0VBQ3ZFVixDQUFDLENBQUNDLE9BQU8sQ0FBQ1UscUJBQXFCLEdBQUcsQ0FBQyxDQUFDYixNQUFNLENBQUNjLFFBQVE7O0VBRW5EO0VBQ0FaLENBQUMsQ0FBQ0MsT0FBTyxDQUFDWSxTQUFTLEdBQ2pCZixNQUFNLENBQUNnQixJQUFJLEtBQ1ZBLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxLQUFLLElBQ25CRixJQUFJLENBQUNDLFNBQVMsQ0FBQ0UsV0FBVyxJQUMxQkgsSUFBSSxDQUFDQyxTQUFTLENBQUNHLFFBQVEsQ0FBQzs7RUFFNUI7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsU0FBU0MsY0FBY0EsQ0FBQ0MsSUFBSSxFQUFFO0lBQzVCLElBQUlDLFVBQVUsR0FBR0QsSUFBSSxLQUFLLFVBQVU7SUFDcEMsT0FBTyxVQUFVRSxDQUFDLEVBQUU7TUFDbEJBLENBQUMsQ0FBQ0MsWUFBWSxHQUFHRCxDQUFDLENBQUNFLGFBQWEsSUFBSUYsQ0FBQyxDQUFDRSxhQUFhLENBQUNELFlBQVk7TUFDaEUsSUFBSUEsWUFBWSxHQUFHRCxDQUFDLENBQUNDLFlBQVk7TUFDakMsSUFDRUEsWUFBWSxJQUNadkIsQ0FBQyxDQUFDeUIsT0FBTyxDQUFDLE9BQU8sRUFBRUYsWUFBWSxDQUFDRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFDN0MsSUFBSSxDQUFDQyxRQUFRLENBQUNQLElBQUksRUFBRXBCLENBQUMsQ0FBQzRCLEtBQUssQ0FBQ1IsSUFBSSxFQUFFO1FBQUVTLGNBQWMsRUFBRVA7TUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFDbkU7UUFDQUEsQ0FBQyxDQUFDUSxjQUFjLENBQUMsQ0FBQztRQUNsQixJQUFJVCxVQUFVLEVBQUU7VUFDZEUsWUFBWSxDQUFDUSxVQUFVLEdBQUcsTUFBTTtRQUNsQztNQUNGO0lBQ0YsQ0FBQztFQUNIOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQS9CLENBQUMsQ0FBQ2dDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QkMsT0FBTyxFQUFFO01BQ1A7TUFDQTtNQUNBQyxRQUFRLEVBQUVsQyxDQUFDLENBQUNtQyxRQUFRLENBQUM7TUFDckI7TUFDQTtNQUNBQyxTQUFTLEVBQUVDLFNBQVM7TUFDcEI7TUFDQTtNQUNBO01BQ0E7TUFDQW5DLFNBQVMsRUFBRW1DLFNBQVM7TUFDcEI7TUFDQTtNQUNBO01BQ0E7TUFDQUMsZ0JBQWdCLEVBQUUsSUFBSTtNQUN0QjtNQUNBO01BQ0E7TUFDQTtNQUNBQyxTQUFTLEVBQUVGLFNBQVM7TUFDcEI7TUFDQTtNQUNBO01BQ0FHLGlCQUFpQixFQUFFLElBQUk7TUFDdkI7TUFDQTtNQUNBQyxxQkFBcUIsRUFBRUosU0FBUztNQUNoQztNQUNBO01BQ0E7TUFDQUssd0JBQXdCLEVBQUVMLFNBQVM7TUFDbkM7TUFDQTtNQUNBO01BQ0FNLGdDQUFnQyxFQUFFLEdBQUc7TUFDckM7TUFDQTtNQUNBQyxpQkFBaUIsRUFBRSxLQUFLO01BQ3hCO01BQ0E7TUFDQUMsc0JBQXNCLEVBQUVSLFNBQVM7TUFDakM7TUFDQVMsb0JBQW9CLEVBQUUsS0FBSztNQUMzQjtNQUNBO01BQ0FDLFFBQVEsRUFBRVYsU0FBUztNQUNuQjtNQUNBO01BQ0FXLGlCQUFpQixFQUFFWCxTQUFTO01BQzVCO01BQ0E7TUFDQVksV0FBVyxFQUFFWixTQUFTO01BQ3RCO01BQ0E7TUFDQTtNQUNBYSxTQUFTLEVBQUUsSUFBSTtNQUNmO01BQ0E7TUFDQTtNQUNBO01BQ0FDLFlBQVksRUFBRWQsU0FBUztNQUN2QjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FlLGFBQWEsRUFBRWYsU0FBUztNQUN4QjtNQUNBO01BQ0E7TUFDQWdCLG1CQUFtQixFQUFFLElBQUk7TUFDekI7TUFDQUMsZ0JBQWdCLEVBQUUsR0FBRztNQUNyQjtNQUNBQyxlQUFlLEVBQUUsR0FBRztNQUNwQjtNQUNBQyxVQUFVLEVBQUUsSUFBSTtNQUNoQjtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FDLGVBQWUsRUFBRXBCLFNBQVM7TUFFMUI7TUFDQXFCLFFBQVEsRUFBRTtRQUNSTixhQUFhLEVBQUU7TUFDakIsQ0FBQztNQUVEO01BQ0E7TUFDQU8sSUFBSSxFQUFFLFNBQUFBLEtBQVVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO1FBQ2hDO1FBQ0FELE9BQU8sR0FBRyxJQUFJLENBQUNGLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLElBQUlBLE9BQU8sQ0FBQ0UsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSUQsT0FBTyxFQUFFO1VBQ1g3RCxDQUFDLENBQUMrRCxJQUFJLENBQUNGLE9BQU8sRUFBRSxVQUFVRyxHQUFHLEVBQUVDLEtBQUssRUFBRTtZQUNwQztZQUNBTCxPQUFPLEdBQUdBLE9BQU8sQ0FBQ00sT0FBTyxDQUFDLEdBQUcsR0FBR0YsR0FBRyxHQUFHLEdBQUcsRUFBRUMsS0FBSyxDQUFDO1VBQ25ELENBQUMsQ0FBQztRQUNKO1FBQ0EsT0FBT0wsT0FBTztNQUNoQixDQUFDO01BRUQ7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBTyxRQUFRLEVBQUUsU0FBQUEsU0FBVUMsSUFBSSxFQUFFO1FBQ3hCLE9BQU9BLElBQUksQ0FBQ0MsY0FBYyxDQUFDLENBQUM7TUFDOUIsQ0FBQztNQUVEO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0FDLEdBQUcsRUFBRSxTQUFBQSxJQUFVaEQsQ0FBQyxFQUFFaUQsSUFBSSxFQUFFO1FBQ3RCLElBQUlqRCxDQUFDLENBQUNrRCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7VUFDMUIsT0FBTyxLQUFLO1FBQ2Q7UUFDQSxJQUNFRCxJQUFJLENBQUNmLFVBQVUsSUFDZGUsSUFBSSxDQUFDZixVQUFVLEtBQUssS0FBSyxJQUN4QnhELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3lFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFFLEVBQzdDO1VBQ0FGLElBQUksQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFlBQVk7WUFDOUJKLElBQUksQ0FBQ0ssTUFBTSxDQUFDLENBQUM7VUFDZixDQUFDLENBQUM7UUFDSjtNQUNGLENBQUM7TUFFRDs7TUFFQTtNQUNBOztNQUVBO01BQ0E7O01BRUE7TUFDQTs7TUFFQTtNQUNBOztNQUVBO01BQ0E7O01BRUE7TUFDQTs7TUFFQTtNQUNBOztNQUVBO01BQ0E7O01BRUE7TUFDQTs7TUFFQTtNQUNBOztNQUVBO01BQ0E7O01BRUE7TUFDQTs7TUFFQTtNQUNBOztNQUVBO01BQ0E7O01BRUE7TUFDQTs7TUFFQTtNQUNBOztNQUVBO01BQ0E7O01BRUE7TUFDQTs7TUFFQTtNQUNBO01BQ0FDLFdBQVcsRUFBRSxLQUFLO01BQ2xCQyxXQUFXLEVBQUUsS0FBSztNQUNsQkMsS0FBSyxFQUFFLEtBQUs7TUFDWkMsT0FBTyxFQUFFO0lBQ1gsQ0FBQztJQUVEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQUMsWUFBWSxFQUFHLFlBQVk7TUFDekIsSUFBSUMsS0FBSyxHQUFHbEYsQ0FBQyxDQUFDbUYsRUFBRSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDbEMsT0FBT0MsTUFBTSxDQUFDSixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUlJLE1BQU0sQ0FBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNO0lBQ3ZFLENBQUMsQ0FBRSxDQUFDO0lBRUo7SUFDQTtJQUNBSyxlQUFlLEVBQUUsQ0FDZixXQUFXLEVBQ1gsVUFBVSxFQUNWLFdBQVcsRUFDWCxXQUFXLEVBQ1gsc0JBQXNCLENBQ3ZCO0lBRURDLFVBQVUsRUFDUnhGLENBQUMsQ0FBQ0MsT0FBTyxDQUFDWSxTQUFTLElBQ25CLFlBQVk7TUFDVixJQUFJRyxLQUFLLEdBQUcsSUFBSSxDQUFDQSxLQUFLLElBQUksSUFBSSxDQUFDQyxXQUFXLElBQUksSUFBSSxDQUFDQyxRQUFRO01BQzNELE9BQU9GLEtBQUssQ0FBQ3lFLEtBQUssQ0FBQyxJQUFJLEVBQUVDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUhDLGFBQWEsRUFBRSxTQUFBQSxjQUFBLEVBQVk7TUFDekIsSUFBSSxDQUFDQyxTQUFTLEdBQUdDLElBQUksQ0FBQ0MsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSUQsSUFBSSxDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLENBQUM7TUFDN0QsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQztNQUNmLElBQUksQ0FBQ0MsT0FBTyxHQUFHLENBQUM7TUFDaEIsSUFBSSxDQUFDQyxVQUFVLEdBQUcsVUFBVUosR0FBRyxFQUFFRSxNQUFNLEVBQUVHLFFBQVEsRUFBRTtRQUNqRCxJQUFJQyxRQUFRLEdBQUdOLEdBQUcsR0FBRyxJQUFJLENBQUNGLFNBQVM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQ0ssT0FBTyxJQUFJLENBQUNFLFFBQVEsSUFBSUMsUUFBUSxHQUFHRCxRQUFRLEVBQUU7VUFDckQsSUFBSSxDQUFDRixPQUFPLEdBQUcsQ0FBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQ0EsTUFBTSxLQUFLLElBQUksR0FBR0ksUUFBUSxDQUFDLEdBQUcsQ0FBQztVQUM3RCxJQUFJLENBQUNKLE1BQU0sR0FBR0EsTUFBTTtVQUNwQixJQUFJLENBQUNKLFNBQVMsR0FBR0UsR0FBRztRQUN0QjtRQUNBLE9BQU8sSUFBSSxDQUFDRyxPQUFPO01BQ3JCLENBQUM7SUFDSCxDQUFDO0lBRURJLFlBQVksRUFBRSxTQUFBQSxhQUFVcEUsT0FBTyxFQUFFO01BQy9CLE9BQ0UsQ0FBQ0EsT0FBTyxDQUFDYSxvQkFBb0IsS0FDM0IsQ0FBQ2IsT0FBTyxDQUFDaUIsU0FBUyxJQUFJbEQsQ0FBQyxDQUFDQyxPQUFPLENBQUNPLGFBQWEsSUFDN0NSLENBQUMsQ0FBQ0MsT0FBTyxDQUFDVSxxQkFBcUIsQ0FBQztJQUV0QyxDQUFDO0lBRUQyRixZQUFZLEVBQUUsU0FBQUEsYUFBVXJFLE9BQU8sRUFBRTtNQUMvQixJQUFJa0MsUUFBUTtNQUNaLElBQUluRSxDQUFDLENBQUNvQixJQUFJLENBQUNhLE9BQU8sQ0FBQ2tDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRTtRQUMzQyxPQUFPbEMsT0FBTyxDQUFDa0MsUUFBUSxDQUFDbEMsT0FBTyxDQUFDbUMsSUFBSSxDQUFDO01BQ3ZDO01BQ0EsSUFBSXBFLENBQUMsQ0FBQ3VHLE9BQU8sQ0FBQ3RFLE9BQU8sQ0FBQ2tDLFFBQVEsQ0FBQyxFQUFFO1FBQy9CLE9BQU9sQyxPQUFPLENBQUNrQyxRQUFRO01BQ3pCO01BQ0EsSUFBSW5FLENBQUMsQ0FBQ29CLElBQUksQ0FBQ2EsT0FBTyxDQUFDa0MsUUFBUSxDQUFDLEtBQUssUUFBUSxFQUFFO1FBQ3pDQSxRQUFRLEdBQUcsRUFBRTtRQUNibkUsQ0FBQyxDQUFDK0QsSUFBSSxDQUFDOUIsT0FBTyxDQUFDa0MsUUFBUSxFQUFFLFVBQVVxQyxJQUFJLEVBQUV2QyxLQUFLLEVBQUU7VUFDOUNFLFFBQVEsQ0FBQ3NDLElBQUksQ0FBQztZQUFFRCxJQUFJLEVBQUVBLElBQUk7WUFBRXZDLEtBQUssRUFBRUE7VUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO1FBQ0YsT0FBT0UsUUFBUTtNQUNqQjtNQUNBLE9BQU8sRUFBRTtJQUNYLENBQUM7SUFFRHVDLFNBQVMsRUFBRSxTQUFBQSxVQUFVQyxLQUFLLEVBQUU7TUFDMUIsSUFBSUMsS0FBSyxHQUFHLENBQUM7TUFDYjVHLENBQUMsQ0FBQytELElBQUksQ0FBQzRDLEtBQUssRUFBRSxVQUFVRSxLQUFLLEVBQUVDLElBQUksRUFBRTtRQUNuQ0YsS0FBSyxJQUFJRSxJQUFJLENBQUNDLElBQUksSUFBSSxDQUFDO01BQ3pCLENBQUMsQ0FBQztNQUNGLE9BQU9ILEtBQUs7SUFDZCxDQUFDO0lBRURJLG1CQUFtQixFQUFFLFNBQUFBLG9CQUFVQyxHQUFHLEVBQUU7TUFDbEMsSUFBSUMsUUFBUSxHQUFHO1FBQ2JsQixNQUFNLEVBQUUsQ0FBQztRQUNUWSxLQUFLLEVBQUUsQ0FBQztRQUNSWCxPQUFPLEVBQUU7TUFDWCxDQUFDO01BQ0QsSUFBSWdCLEdBQUcsQ0FBQ0UsU0FBUyxFQUFFO1FBQ2pCbkgsQ0FBQyxDQUFDb0gsTUFBTSxDQUFDSCxHQUFHLENBQUNFLFNBQVMsRUFBRUQsUUFBUSxDQUFDO01BQ25DLENBQUMsTUFBTTtRQUNMRCxHQUFHLENBQUNFLFNBQVMsR0FBR0QsUUFBUTtNQUMxQjtJQUNGLENBQUM7SUFFREcsbUJBQW1CLEVBQUUsU0FBQUEsb0JBQVVKLEdBQUcsRUFBRTtNQUNsQyxJQUFJMUcsSUFBSTtNQUNSLElBQUkwRyxHQUFHLENBQUNLLFNBQVMsRUFBRTtRQUNqQixLQUFLL0csSUFBSSxJQUFJMEcsR0FBRyxDQUFDSyxTQUFTLEVBQUU7VUFDMUIsSUFBSUMsTUFBTSxDQUFDeEcsU0FBUyxDQUFDeUcsY0FBYyxDQUFDQyxJQUFJLENBQUNSLEdBQUcsQ0FBQ0ssU0FBUyxFQUFFL0csSUFBSSxDQUFDLEVBQUU7WUFDN0QsT0FBTzBHLEdBQUcsQ0FBQ0ssU0FBUyxDQUFDL0csSUFBSSxDQUFDO1VBQzVCO1FBQ0Y7TUFDRixDQUFDLE1BQU07UUFDTDBHLEdBQUcsQ0FBQ0ssU0FBUyxHQUFHLENBQUMsQ0FBQztNQUNwQjtJQUNGLENBQUM7SUFFREksV0FBVyxFQUFFLFNBQUFBLFlBQVVwRyxDQUFDLEVBQUVpRCxJQUFJLEVBQUU7TUFDOUIsSUFBSWpELENBQUMsQ0FBQ3FHLGdCQUFnQixFQUFFO1FBQ3RCLElBQUk3QixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSUQsSUFBSSxDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLENBQUM7VUFDcERDLE1BQU07UUFDUixJQUNFekIsSUFBSSxDQUFDcUQsS0FBSyxJQUNWckQsSUFBSSxDQUFDakIsZ0JBQWdCLElBQ3JCd0MsR0FBRyxHQUFHdkIsSUFBSSxDQUFDcUQsS0FBSyxHQUFHckQsSUFBSSxDQUFDakIsZ0JBQWdCLElBQ3hDaEMsQ0FBQyxDQUFDMEUsTUFBTSxLQUFLMUUsQ0FBQyxDQUFDc0YsS0FBSyxFQUNwQjtVQUNBO1FBQ0Y7UUFDQXJDLElBQUksQ0FBQ3FELEtBQUssR0FBRzlCLEdBQUc7UUFDaEJFLE1BQU0sR0FDSjZCLElBQUksQ0FBQ0MsS0FBSyxDQUNQeEcsQ0FBQyxDQUFDMEUsTUFBTSxHQUFHMUUsQ0FBQyxDQUFDc0YsS0FBSyxJQUFLckMsSUFBSSxDQUFDd0QsU0FBUyxJQUFJeEQsSUFBSSxDQUFDNEMsU0FBUyxDQUFDUCxLQUFLLENBQ2hFLENBQUMsSUFBSXJDLElBQUksQ0FBQ25CLGFBQWEsSUFBSSxDQUFDLENBQUM7UUFDL0I7UUFDQTtRQUNBLElBQUksQ0FBQytELFNBQVMsQ0FBQ25CLE1BQU0sSUFBSUEsTUFBTSxHQUFHekIsSUFBSSxDQUFDNEMsU0FBUyxDQUFDbkIsTUFBTTtRQUN2RCxJQUFJLENBQUNtQixTQUFTLENBQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDK0IsYUFBYSxDQUFDOUIsVUFBVSxDQUNwREosR0FBRyxFQUNILElBQUksQ0FBQ3FCLFNBQVMsQ0FBQ25CLE1BQU0sRUFDckJ6QixJQUFJLENBQUNoQixlQUNQLENBQUM7UUFDRGdCLElBQUksQ0FBQzRDLFNBQVMsQ0FBQ25CLE1BQU0sR0FBR3pCLElBQUksQ0FBQ3lCLE1BQU0sR0FBR0EsTUFBTTtRQUM1Q3pCLElBQUksQ0FBQzRDLFNBQVMsQ0FBQ2xCLE9BQU8sR0FBRzFCLElBQUksQ0FBQzBCLE9BQU8sR0FBRzFCLElBQUksQ0FBQ3lELGFBQWEsQ0FBQzlCLFVBQVUsQ0FDbkVKLEdBQUcsRUFDSEUsTUFBTSxFQUNOekIsSUFBSSxDQUFDaEIsZUFDUCxDQUFDO1FBQ0Q7UUFDQTtRQUNBO1FBQ0EsSUFBSSxDQUFDNUIsUUFBUSxDQUNYLFVBQVUsRUFDVjNCLENBQUMsQ0FBQzRCLEtBQUssQ0FBQyxVQUFVLEVBQUU7VUFBRUMsY0FBYyxFQUFFUDtRQUFFLENBQUMsQ0FBQyxFQUMxQ2lELElBQ0YsQ0FBQztRQUNEO1FBQ0E7UUFDQSxJQUFJLENBQUM1QyxRQUFRLENBQ1gsYUFBYSxFQUNiM0IsQ0FBQyxDQUFDNEIsS0FBSyxDQUFDLGFBQWEsRUFBRTtVQUFFQyxjQUFjLEVBQUVQO1FBQUUsQ0FBQyxDQUFDLEVBQzdDLElBQUksQ0FBQzZGLFNBQ1AsQ0FBQztNQUNIO0lBQ0YsQ0FBQztJQUVEYyxxQkFBcUIsRUFBRSxTQUFBQSxzQkFBVWhHLE9BQU8sRUFBRTtNQUN4QyxJQUFJaUcsSUFBSSxHQUFHLElBQUk7UUFDYkMsR0FBRyxHQUFHbEcsT0FBTyxDQUFDa0csR0FBRyxHQUFHbEcsT0FBTyxDQUFDa0csR0FBRyxDQUFDLENBQUMsR0FBR25JLENBQUMsQ0FBQ29JLFlBQVksQ0FBQ0QsR0FBRyxDQUFDLENBQUM7TUFDMUQ7TUFDQTtNQUNBLElBQUlBLEdBQUcsQ0FBQ0UsTUFBTSxFQUFFO1FBQ2RySSxDQUFDLENBQUNtSSxHQUFHLENBQUNFLE1BQU0sQ0FBQyxDQUFDQyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVVoSCxDQUFDLEVBQUU7VUFDeEMsSUFBSWlILEVBQUUsR0FBR2pILENBQUMsQ0FBQ0UsYUFBYTtVQUN4QjtVQUNBRixDQUFDLENBQUNxRyxnQkFBZ0IsR0FBR1ksRUFBRSxDQUFDWixnQkFBZ0I7VUFDeENyRyxDQUFDLENBQUMwRSxNQUFNLEdBQUd1QyxFQUFFLENBQUN2QyxNQUFNO1VBQ3BCMUUsQ0FBQyxDQUFDc0YsS0FBSyxHQUFHMkIsRUFBRSxDQUFDM0IsS0FBSztVQUNsQnNCLElBQUksQ0FBQ1IsV0FBVyxDQUFDcEcsQ0FBQyxFQUFFVyxPQUFPLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBQ0ZBLE9BQU8sQ0FBQ2tHLEdBQUcsR0FBRyxZQUFZO1VBQ3hCLE9BQU9BLEdBQUc7UUFDWixDQUFDO01BQ0g7SUFDRixDQUFDO0lBRURLLHVCQUF1QixFQUFFLFNBQUFBLHdCQUFVdkcsT0FBTyxFQUFFO01BQzFDLElBQUlrRyxHQUFHLEdBQUdsRyxPQUFPLENBQUNrRyxHQUFHLEdBQUdsRyxPQUFPLENBQUNrRyxHQUFHLENBQUMsQ0FBQyxHQUFHbkksQ0FBQyxDQUFDb0ksWUFBWSxDQUFDRCxHQUFHLENBQUMsQ0FBQztNQUM1RCxJQUFJQSxHQUFHLENBQUNFLE1BQU0sRUFBRTtRQUNkckksQ0FBQyxDQUFDbUksR0FBRyxDQUFDRSxNQUFNLENBQUMsQ0FBQ0ksR0FBRyxDQUFDLFVBQVUsQ0FBQztNQUMvQjtJQUNGLENBQUM7SUFFREMsYUFBYSxFQUFFLFNBQUFBLGNBQVV0SCxJQUFJLEVBQUU2RixHQUFHLEVBQUU7TUFDbEM7TUFDQSxPQUFPTSxNQUFNLENBQUN4RyxTQUFTLENBQUMrQyxRQUFRLENBQUMyRCxJQUFJLENBQUNSLEdBQUcsQ0FBQyxLQUFLLFVBQVUsR0FBRzdGLElBQUksR0FBRyxHQUFHO0lBQ3hFLENBQUM7SUFFRHVILGtCQUFrQixFQUFFLFNBQUFBLG1CQUFVbkMsSUFBSSxFQUFFb0MsR0FBRyxFQUFFO01BQ3ZDO01BQ0FwQyxJQUFJLEdBQUdxQyxNQUFNLENBQUNyQyxJQUFJLENBQUM7TUFDbkIsSUFBSW9DLEdBQUcsQ0FBQ3BDLElBQUksQ0FBQyxFQUFFO1FBQ2I7UUFDQUEsSUFBSSxHQUFHQSxJQUFJLENBQUN0QyxPQUFPLENBQ2pCLDhCQUE4QixFQUM5QixVQUFVNEUsQ0FBQyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRTtVQUNuQixJQUFJbkMsS0FBSyxHQUFHa0MsRUFBRSxHQUFHekQsTUFBTSxDQUFDeUQsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7VUFDbkMsSUFBSUUsR0FBRyxHQUFHRCxFQUFFLElBQUksRUFBRTtVQUNsQixPQUFPLElBQUksR0FBR25DLEtBQUssR0FBRyxHQUFHLEdBQUdvQyxHQUFHO1FBQ2pDLENBQ0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDTixrQkFBa0IsQ0FBQ25DLElBQUksRUFBRW9DLEdBQUcsQ0FBQztNQUMzQztNQUNBQSxHQUFHLENBQUNwQyxJQUFJLENBQUMsR0FBRyxJQUFJO01BQ2hCLE9BQU9BLElBQUk7SUFDYixDQUFDO0lBRUQwQyxZQUFZLEVBQUUsU0FBQUEsYUFBVWpILE9BQU8sRUFBRTtNQUMvQixJQUFJaUcsSUFBSSxHQUFHLElBQUk7UUFDYi9ELFFBQVE7UUFDUjJDLElBQUksR0FBRzdFLE9BQU8sQ0FBQzBFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkI7UUFDQXpELFNBQVMsR0FBR2pCLE9BQU8sQ0FBQ2lCLFNBQVMsSUFBSSxDQUFDbEQsQ0FBQyxDQUFDQyxPQUFPLENBQUNPLGFBQWE7UUFDekQrQixTQUFTLEdBQ1B2QyxDQUFDLENBQUNvQixJQUFJLENBQUNhLE9BQU8sQ0FBQ00sU0FBUyxDQUFDLEtBQUssT0FBTyxHQUNqQ04sT0FBTyxDQUFDTSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQ3BCTixPQUFPLENBQUNNLFNBQVM7TUFDekJOLE9BQU8sQ0FBQ2tILE9BQU8sR0FBR25KLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRW5GLE9BQU8sQ0FBQ2tILE9BQU8sQ0FBQztNQUMvQyxJQUFJbEgsT0FBTyxDQUFDbUgsWUFBWSxFQUFFO1FBQ3hCbkgsT0FBTyxDQUFDa0gsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHbEgsT0FBTyxDQUFDbUgsWUFBWTtNQUN6RDtNQUNBLElBQUksQ0FBQ2xHLFNBQVMsSUFBSWpCLE9BQU8sQ0FBQ29ILElBQUksSUFBSSxDQUFDLElBQUksQ0FBQ1gsYUFBYSxDQUFDLE1BQU0sRUFBRTVCLElBQUksQ0FBQyxFQUFFO1FBQ25FN0UsT0FBTyxDQUFDa0gsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQ3BDLHdCQUF3QixHQUN4QkcsU0FBUyxDQUFDeEMsSUFBSSxDQUFDeUMsVUFBVSxJQUFJekMsSUFBSSxDQUFDTixJQUFJLENBQUMsR0FDdkMsR0FBRztNQUNQO01BQ0EsSUFBSSxDQUFDdEQsU0FBUyxFQUFFO1FBQ2RqQixPQUFPLENBQUM2QyxXQUFXLEdBQUdnQyxJQUFJLENBQUMxRixJQUFJLElBQUksMEJBQTBCO1FBQzdEYSxPQUFPLENBQUNzQyxJQUFJLEdBQUd0QyxPQUFPLENBQUNvSCxJQUFJLElBQUl2QyxJQUFJO01BQ3JDLENBQUMsTUFBTSxJQUFJOUcsQ0FBQyxDQUFDQyxPQUFPLENBQUNVLHFCQUFxQixFQUFFO1FBQzFDLElBQUlzQixPQUFPLENBQUNnQixXQUFXLEVBQUU7VUFDdkI7VUFDQTtVQUNBO1VBQ0E7VUFDQWtCLFFBQVEsR0FBRyxJQUFJLENBQUNtQyxZQUFZLENBQUNyRSxPQUFPLENBQUM7VUFDckMsSUFBSUEsT0FBTyxDQUFDb0gsSUFBSSxFQUFFO1lBQ2hCbEYsUUFBUSxDQUFDc0MsSUFBSSxDQUFDO2NBQ1pELElBQUksRUFBRWpFLFNBQVM7Y0FDZjBCLEtBQUssRUFBRWhDLE9BQU8sQ0FBQ29IO1lBQ2pCLENBQUMsQ0FBQztVQUNKLENBQUMsTUFBTTtZQUNMckosQ0FBQyxDQUFDK0QsSUFBSSxDQUFDOUIsT0FBTyxDQUFDMEUsS0FBSyxFQUFFLFVBQVVFLEtBQUssRUFBRUMsSUFBSSxFQUFFO2NBQzNDM0MsUUFBUSxDQUFDc0MsSUFBSSxDQUFDO2dCQUNaRCxJQUFJLEVBQ0R4RyxDQUFDLENBQUNvQixJQUFJLENBQUNhLE9BQU8sQ0FBQ00sU0FBUyxDQUFDLEtBQUssT0FBTyxJQUNwQ04sT0FBTyxDQUFDTSxTQUFTLENBQUNzRSxLQUFLLENBQUMsSUFDMUJ0RSxTQUFTO2dCQUNYMEIsS0FBSyxFQUFFNkM7Y0FDVCxDQUFDLENBQUM7WUFDSixDQUFDLENBQUM7VUFDSjtRQUNGLENBQUMsTUFBTTtVQUNMLElBQUlvQixJQUFJLENBQUNRLGFBQWEsQ0FBQyxVQUFVLEVBQUV6RyxPQUFPLENBQUNrQyxRQUFRLENBQUMsRUFBRTtZQUNwREEsUUFBUSxHQUFHbEMsT0FBTyxDQUFDa0MsUUFBUTtVQUM3QixDQUFDLE1BQU07WUFDTEEsUUFBUSxHQUFHLElBQUl2RCxRQUFRLENBQUMsQ0FBQztZQUN6QlosQ0FBQyxDQUFDK0QsSUFBSSxDQUFDLElBQUksQ0FBQ3VDLFlBQVksQ0FBQ3JFLE9BQU8sQ0FBQyxFQUFFLFVBQVU0RSxLQUFLLEVBQUUyQyxLQUFLLEVBQUU7Y0FDekRyRixRQUFRLENBQUNzRixNQUFNLENBQUNELEtBQUssQ0FBQ2hELElBQUksRUFBRWdELEtBQUssQ0FBQ3ZGLEtBQUssQ0FBQztZQUMxQyxDQUFDLENBQUM7VUFDSjtVQUNBLElBQUloQyxPQUFPLENBQUNvSCxJQUFJLEVBQUU7WUFDaEJsRixRQUFRLENBQUNzRixNQUFNLENBQ2JsSCxTQUFTLEVBQ1ROLE9BQU8sQ0FBQ29ILElBQUksRUFDWnZDLElBQUksQ0FBQ3lDLFVBQVUsSUFBSXpDLElBQUksQ0FBQ04sSUFDMUIsQ0FBQztVQUNILENBQUMsTUFBTTtZQUNMeEcsQ0FBQyxDQUFDK0QsSUFBSSxDQUFDOUIsT0FBTyxDQUFDMEUsS0FBSyxFQUFFLFVBQVVFLEtBQUssRUFBRUMsSUFBSSxFQUFFO2NBQzNDO2NBQ0E7Y0FDQSxJQUNFb0IsSUFBSSxDQUFDUSxhQUFhLENBQUMsTUFBTSxFQUFFNUIsSUFBSSxDQUFDLElBQ2hDb0IsSUFBSSxDQUFDUSxhQUFhLENBQUMsTUFBTSxFQUFFNUIsSUFBSSxDQUFDLEVBQ2hDO2dCQUNBLElBQUk0QyxRQUFRLEdBQUc1QyxJQUFJLENBQUN5QyxVQUFVLElBQUl6QyxJQUFJLENBQUNOLElBQUk7Z0JBQzNDLElBQUl2RSxPQUFPLENBQUN3QixlQUFlLEVBQUU7a0JBQzNCaUcsUUFBUSxHQUFHeEIsSUFBSSxDQUFDUyxrQkFBa0IsQ0FDaENlLFFBQVEsRUFDUnpILE9BQU8sQ0FBQ3dCLGVBQ1YsQ0FBQztnQkFDSDtnQkFDQVUsUUFBUSxDQUFDc0YsTUFBTSxDQUNaekosQ0FBQyxDQUFDb0IsSUFBSSxDQUFDYSxPQUFPLENBQUNNLFNBQVMsQ0FBQyxLQUFLLE9BQU8sSUFDcENOLE9BQU8sQ0FBQ00sU0FBUyxDQUFDc0UsS0FBSyxDQUFDLElBQ3hCdEUsU0FBUyxFQUNYdUUsSUFBSSxFQUNKNEMsUUFDRixDQUFDO2NBQ0g7WUFDRixDQUFDLENBQUM7VUFDSjtRQUNGO1FBQ0F6SCxPQUFPLENBQUNzQyxJQUFJLEdBQUdKLFFBQVE7TUFDekI7TUFDQTtNQUNBbEMsT0FBTyxDQUFDb0gsSUFBSSxHQUFHLElBQUk7SUFDckIsQ0FBQztJQUVETSxtQkFBbUIsRUFBRSxTQUFBQSxvQkFBVTFILE9BQU8sRUFBRTtNQUN0QyxJQUFJMkgsVUFBVSxHQUFHNUosQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDTyxJQUFJLENBQUMsTUFBTSxFQUFFMEIsT0FBTyxDQUFDNEgsR0FBRyxDQUFDLENBQUN0SixJQUFJLENBQUMsTUFBTSxDQUFDO01BQ3BFO01BQ0EwQixPQUFPLENBQUM2SCxRQUFRLEdBQUcsU0FBUyxJQUFJN0gsT0FBTyxDQUFDNkgsUUFBUSxJQUFJLEVBQUUsQ0FBQztNQUN2RDtNQUNBN0gsT0FBTyxDQUFDa0MsUUFBUSxHQUFHLElBQUksQ0FBQ21DLFlBQVksQ0FBQ3JFLE9BQU8sQ0FBQztNQUM3QztNQUNBLElBQUlBLE9BQU8sQ0FBQ2MsUUFBUSxJQUFJNkcsVUFBVSxJQUFJQSxVQUFVLEtBQUtHLFFBQVEsQ0FBQ0MsSUFBSSxFQUFFO1FBQ2xFL0gsT0FBTyxDQUFDa0MsUUFBUSxDQUFDc0MsSUFBSSxDQUFDO1VBQ3BCRCxJQUFJLEVBQUV2RSxPQUFPLENBQUNlLGlCQUFpQixJQUFJLFVBQVU7VUFDN0NpQixLQUFLLEVBQUVoQyxPQUFPLENBQUNjO1FBQ2pCLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQztJQUVEa0gsaUJBQWlCLEVBQUUsU0FBQUEsa0JBQVVoSSxPQUFPLEVBQUU7TUFDcEMsSUFBSSxJQUFJLENBQUNvRSxZQUFZLENBQUNwRSxPQUFPLENBQUMsRUFBRTtRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDaUksY0FBYyxDQUFDakksT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFO1VBQ3ZDLElBQUksQ0FBQ0EsT0FBTyxDQUFDc0MsSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQzJFLFlBQVksQ0FBQ2pILE9BQU8sQ0FBQztVQUM1QjtVQUNBLElBQUksQ0FBQ2dHLHFCQUFxQixDQUFDaEcsT0FBTyxDQUFDO1FBQ3JDO1FBQ0EsSUFBSUEsT0FBTyxDQUFDZ0IsV0FBVyxFQUFFO1VBQ3ZCO1VBQ0E7VUFDQWhCLE9BQU8sQ0FBQzZILFFBQVEsR0FBRyxjQUFjLElBQUk3SCxPQUFPLENBQUM2SCxRQUFRLElBQUksRUFBRSxDQUFDO1FBQzlEO01BQ0YsQ0FBQyxNQUFNO1FBQ0wsSUFBSSxDQUFDSCxtQkFBbUIsQ0FBQzFILE9BQU8sQ0FBQztNQUNuQztJQUNGLENBQUM7SUFFRGtJLGFBQWEsRUFBRSxTQUFBQSxjQUFVbEksT0FBTyxFQUFFO01BQ2hDLElBQUkvQixTQUFTLEdBQUdGLENBQUMsQ0FBQ2lDLE9BQU8sQ0FBQy9CLFNBQVMsQ0FBQztRQUNsQ3FDLFNBQVMsR0FBR04sT0FBTyxDQUFDTSxTQUFTO01BQy9CLElBQUksQ0FBQ0EsU0FBUyxFQUFFO1FBQ2RBLFNBQVMsR0FBRyxFQUFFO1FBQ2RyQyxTQUFTLENBQUM2RCxJQUFJLENBQUMsWUFBWTtVQUN6QixJQUFJcUcsS0FBSyxHQUFHcEssQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqQndHLElBQUksR0FBRzRELEtBQUssQ0FBQzdKLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxTQUFTO1lBQ3RDOEosQ0FBQyxHQUFHLENBQUNELEtBQUssQ0FBQzdKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFK0osTUFBTTtVQUN6QyxPQUFPRCxDQUFDLEVBQUU7WUFDUjlILFNBQVMsQ0FBQ2tFLElBQUksQ0FBQ0QsSUFBSSxDQUFDO1lBQ3BCNkQsQ0FBQyxJQUFJLENBQUM7VUFDUjtRQUNGLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQzlILFNBQVMsQ0FBQytILE1BQU0sRUFBRTtVQUNyQi9ILFNBQVMsR0FBRyxDQUFDckMsU0FBUyxDQUFDSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ25EO01BQ0YsQ0FBQyxNQUFNLElBQUksQ0FBQ1AsQ0FBQyxDQUFDdUcsT0FBTyxDQUFDaEUsU0FBUyxDQUFDLEVBQUU7UUFDaENBLFNBQVMsR0FBRyxDQUFDQSxTQUFTLENBQUM7TUFDekI7TUFDQSxPQUFPQSxTQUFTO0lBQ2xCLENBQUM7SUFFRGdJLGlCQUFpQixFQUFFLFNBQUFBLGtCQUFVdEksT0FBTyxFQUFFO01BQ3BDO01BQ0E7TUFDQSxJQUFJLENBQUNBLE9BQU8sQ0FBQ21DLElBQUksSUFBSSxDQUFDbkMsT0FBTyxDQUFDbUMsSUFBSSxDQUFDa0csTUFBTSxFQUFFO1FBQ3pDckksT0FBTyxDQUFDbUMsSUFBSSxHQUFHcEUsQ0FBQyxDQUFDaUMsT0FBTyxDQUFDL0IsU0FBUyxDQUFDSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQ7UUFDQTtRQUNBLElBQUksQ0FBQzBCLE9BQU8sQ0FBQ21DLElBQUksQ0FBQ2tHLE1BQU0sRUFBRTtVQUN4QnJJLE9BQU8sQ0FBQ21DLElBQUksR0FBR3BFLENBQUMsQ0FBQyxJQUFJLENBQUNpQyxPQUFPLENBQUMvQixTQUFTLENBQUNLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RDtNQUNGO01BQ0EwQixPQUFPLENBQUNNLFNBQVMsR0FBRyxJQUFJLENBQUM0SCxhQUFhLENBQUNsSSxPQUFPLENBQUM7TUFDL0MsSUFBSSxDQUFDQSxPQUFPLENBQUM0SCxHQUFHLEVBQUU7UUFDaEI1SCxPQUFPLENBQUM0SCxHQUFHLEdBQUc1SCxPQUFPLENBQUNtQyxJQUFJLENBQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUl3SixRQUFRLENBQUNTLElBQUk7TUFDNUQ7TUFDQTtNQUNBdkksT0FBTyxDQUFDYixJQUFJLEdBQUcsQ0FDYmEsT0FBTyxDQUFDYixJQUFJLElBQ1hwQixDQUFDLENBQUNvQixJQUFJLENBQUNhLE9BQU8sQ0FBQ21DLElBQUksQ0FBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFDL0MwQixPQUFPLENBQUNtQyxJQUFJLENBQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFFLElBQzlCLEVBQUUsRUFDRmtLLFdBQVcsQ0FBQyxDQUFDO01BQ2YsSUFDRXhJLE9BQU8sQ0FBQ2IsSUFBSSxLQUFLLE1BQU0sSUFDdkJhLE9BQU8sQ0FBQ2IsSUFBSSxLQUFLLEtBQUssSUFDdEJhLE9BQU8sQ0FBQ2IsSUFBSSxLQUFLLE9BQU8sRUFDeEI7UUFDQWEsT0FBTyxDQUFDYixJQUFJLEdBQUcsTUFBTTtNQUN2QjtNQUNBLElBQUksQ0FBQ2EsT0FBTyxDQUFDeUksaUJBQWlCLEVBQUU7UUFDOUJ6SSxPQUFPLENBQUN5SSxpQkFBaUIsR0FBR3pJLE9BQU8sQ0FBQ21DLElBQUksQ0FBQ3VHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztNQUNqRTtJQUNGLENBQUM7SUFFREMsZ0JBQWdCLEVBQUUsU0FBQUEsaUJBQVVyRyxJQUFJLEVBQUU7TUFDaEMsSUFBSXRDLE9BQU8sR0FBR2pDLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNuRixPQUFPLEVBQUVzQyxJQUFJLENBQUM7TUFDOUMsSUFBSSxDQUFDZ0csaUJBQWlCLENBQUN0SSxPQUFPLENBQUM7TUFDL0IsSUFBSSxDQUFDZ0ksaUJBQWlCLENBQUNoSSxPQUFPLENBQUM7TUFDL0IsT0FBT0EsT0FBTztJQUNoQixDQUFDO0lBRUQ7SUFDQTtJQUNBNEksaUJBQWlCLEVBQUUsU0FBQUEsa0JBQVVDLFFBQVEsRUFBRTtNQUNyQyxJQUFJQSxRQUFRLENBQUNDLEtBQUssRUFBRTtRQUNsQixPQUFPRCxRQUFRLENBQUNDLEtBQUssQ0FBQyxDQUFDO01BQ3pCO01BQ0EsSUFBSUQsUUFBUSxDQUFDRSxVQUFVLENBQUMsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sVUFBVTtNQUNuQjtNQUNBLElBQUlGLFFBQVEsQ0FBQ0csVUFBVSxDQUFDLENBQUMsRUFBRTtRQUN6QixPQUFPLFVBQVU7TUFDbkI7TUFDQSxPQUFPLFNBQVM7SUFDbEIsQ0FBQztJQUVEO0lBQ0E7SUFDQUMsZUFBZSxFQUFFLFNBQUFBLGdCQUFVQyxPQUFPLEVBQUU7TUFDbENBLE9BQU8sQ0FBQ0MsT0FBTyxHQUFHRCxPQUFPLENBQUN4RyxJQUFJO01BQzlCd0csT0FBTyxDQUFDRSxLQUFLLEdBQUdGLE9BQU8sQ0FBQ0csSUFBSTtNQUM1QkgsT0FBTyxDQUFDSSxRQUFRLEdBQUdKLE9BQU8sQ0FBQ0ssTUFBTTtNQUNqQyxPQUFPTCxPQUFPO0lBQ2hCLENBQUM7SUFFRDtJQUNBO0lBQ0FNLGNBQWMsRUFBRSxTQUFBQSxlQUFVQyxlQUFlLEVBQUU3SCxPQUFPLEVBQUU4SCxJQUFJLEVBQUU7TUFDeEQsSUFBSUMsR0FBRyxHQUFHNUwsQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUM7UUFDcEJWLE9BQU8sR0FBR1MsR0FBRyxDQUFDVCxPQUFPLENBQUMsQ0FBQztNQUN6QjtNQUNBdEgsT0FBTyxHQUFHQSxPQUFPLElBQUksSUFBSSxDQUFDNUIsT0FBTyxDQUFDNEIsT0FBTyxJQUFJc0gsT0FBTztNQUNwRCxJQUFJTyxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzVCRSxHQUFHLENBQUNFLFdBQVcsQ0FBQ2pJLE9BQU8sRUFBRThILElBQUksQ0FBQztNQUNoQyxDQUFDLE1BQU0sSUFBSUQsZUFBZSxLQUFLLEtBQUssRUFBRTtRQUNwQ0UsR0FBRyxDQUFDRyxVQUFVLENBQUNsSSxPQUFPLEVBQUU4SCxJQUFJLENBQUM7TUFDL0I7TUFDQVIsT0FBTyxDQUFDYSxLQUFLLEdBQUdKLEdBQUcsQ0FBQ1QsT0FBTztNQUMzQixPQUFPLElBQUksQ0FBQ0QsZUFBZSxDQUFDQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEO0lBQ0FjLHNCQUFzQixFQUFFLFNBQUFBLHVCQUFVM0ssQ0FBQyxFQUFFaUQsSUFBSSxFQUFFO01BQ3pDLElBQUkyRCxJQUFJLEdBQUcsSUFBSTtRQUNiZ0UsVUFBVSxHQUFHLFNBQWJBLFVBQVVBLENBQWFQLElBQUksRUFBRTtVQUMzQixPQUFPM0wsQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDNUQsSUFBSSxFQUFFeUQsSUFBSSxDQUFDLENBQUNSLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7TUFDSDVHLElBQUksQ0FBQ0csT0FBTyxHQUFHLFVBQVV5SCxXQUFXLEVBQUVDLFVBQVUsRUFBRTtRQUNoRCxJQUFJRCxXQUFXLElBQUlDLFVBQVUsRUFBRTtVQUM3QjdILElBQUksQ0FBQzhILGFBQWEsR0FBRyxJQUFJLENBQUNBLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQ0EsYUFBYSxJQUMzREgsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDakJoRSxJQUFJLENBQUNqRCxZQUFZLENBQUMsQ0FBQyxZQUFZO1lBQzlCLElBQUlWLElBQUksQ0FBQytILFdBQVcsRUFBRTtjQUNwQixPQUFPdE0sQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUMsQ0FBQ0UsVUFBVSxDQUFDN0QsSUFBSSxFQUFFLENBQUMzRCxJQUFJLENBQUMsQ0FBQyxDQUFDNEcsT0FBTyxDQUFDLENBQUM7WUFDeEQ7WUFDQSxPQUFPZSxVQUFVLENBQUN4RyxTQUFTLENBQUM7VUFDOUIsQ0FBQyxDQUFDLENBQ0R3QyxJQUFJLENBQUNqRCxZQUFZLENBQUMsQ0FBQ2tILFdBQVcsRUFBRUMsVUFBVSxDQUFDO1FBQ2hEO1FBQ0EsT0FBTyxJQUFJLENBQUNDLGFBQWEsSUFBSUgsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDakQsQ0FBQztNQUNEM0gsSUFBSSxDQUFDSyxNQUFNLEdBQUcsWUFBWTtRQUN4QixJQUFJLElBQUksQ0FBQ21HLEtBQUssQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO1VBQzlCeEcsSUFBSSxDQUFDZ0ksS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxHQUNyQnJFLElBQUksQ0FBQ3ZHLFFBQVEsQ0FDWCxRQUFRLEVBQ1IzQixDQUFDLENBQUM0QixLQUFLLENBQUMsUUFBUSxFQUFFO1lBQUVDLGNBQWMsRUFBRVA7VUFBRSxDQUFDLENBQUMsRUFDeEMsSUFDRixDQUFDLEtBQUssS0FBSyxJQUFJNEcsSUFBSSxDQUFDc0UsT0FBTyxDQUFDbEwsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUN4QztRQUNBLE9BQU8sSUFBSSxDQUFDaUwsS0FBSyxJQUFJckUsSUFBSSxDQUFDdUQsY0FBYyxDQUFDLENBQUM7TUFDNUMsQ0FBQztNQUNEbEgsSUFBSSxDQUFDeUgsS0FBSyxHQUFHLFlBQVk7UUFDdkIsSUFBSSxJQUFJLENBQUNPLEtBQUssRUFBRTtVQUNkLE9BQU8sSUFBSSxDQUFDQSxLQUFLLENBQUNQLEtBQUssQ0FBQyxDQUFDO1FBQzNCO1FBQ0EsSUFBSSxDQUFDTSxXQUFXLEdBQUcsT0FBTztRQUMxQnBFLElBQUksQ0FBQ3ZHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztRQUNqQyxPQUFPdUcsSUFBSSxDQUFDdUQsY0FBYyxDQUFDLEtBQUssQ0FBQztNQUNuQyxDQUFDO01BQ0RsSCxJQUFJLENBQUN3RyxLQUFLLEdBQUcsWUFBWTtRQUN2QixJQUFJLElBQUksQ0FBQ3dCLEtBQUssRUFBRTtVQUNkLE9BQU9yRSxJQUFJLENBQUMyQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMwQixLQUFLLENBQUM7UUFDM0M7UUFDQSxJQUFJLElBQUksQ0FBQ0YsYUFBYSxFQUFFO1VBQ3RCLE9BQU9uRSxJQUFJLENBQUMyQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUN3QixhQUFhLENBQUM7UUFDbkQ7TUFDRixDQUFDO01BQ0Q5SCxJQUFJLENBQUNrSSxVQUFVLEdBQUcsWUFBWTtRQUM1QixPQUNFLENBQUMsSUFBSSxDQUFDRixLQUFLLElBQ1gsSUFBSSxDQUFDRixhQUFhLElBQ2xCbkUsSUFBSSxDQUFDMkMsaUJBQWlCLENBQUMsSUFBSSxDQUFDd0IsYUFBYSxDQUFDLEtBQUssU0FBUztNQUU1RCxDQUFDO01BQ0Q5SCxJQUFJLENBQUMyQyxRQUFRLEdBQUcsWUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQ0MsU0FBUztNQUN2QixDQUFDO01BQ0Q1QyxJQUFJLENBQUNtSSxRQUFRLEdBQUcsWUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQ3BGLFNBQVM7TUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRDtJQUNBO0lBQ0FxRixpQkFBaUIsRUFBRSxTQUFBQSxrQkFBVUosS0FBSyxFQUFFO01BQ2xDLElBQUlLLEtBQUssR0FBR0wsS0FBSyxDQUFDTSxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7UUFDMUMzSCxLQUFLLEdBQUcwSCxLQUFLLElBQUlBLEtBQUssQ0FBQ3ZILEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDakN5SCxhQUFhLEdBQUc1SCxLQUFLLElBQUlBLEtBQUssQ0FBQ29GLE1BQU0sR0FBRyxDQUFDLElBQUl5QyxRQUFRLENBQUM3SCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQ3JFLE9BQU80SCxhQUFhLElBQUlBLGFBQWEsR0FBRyxDQUFDO0lBQzNDLENBQUM7SUFFRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E1QyxjQUFjLEVBQUUsU0FBQUEsZUFBVWpJLE9BQU8sRUFBRStLLFFBQVEsRUFBRTtNQUMzQy9LLE9BQU8sQ0FBQ21CLGFBQWEsR0FBR25CLE9BQU8sQ0FBQ21CLGFBQWEsSUFBSSxDQUFDO01BQ2xELElBQUk4RSxJQUFJLEdBQUcsSUFBSTtRQUNicEIsSUFBSSxHQUFHN0UsT0FBTyxDQUFDMEUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2QnNHLEVBQUUsR0FBR25HLElBQUksQ0FBQ0MsSUFBSTtRQUNkbUcsRUFBRSxHQUFHakwsT0FBTyxDQUFDbUIsYUFBYTtRQUMxQitKLEdBQUcsR0FBR2xMLE9BQU8sQ0FBQ2tCLFlBQVksSUFBSThKLEVBQUU7UUFDaENqTSxLQUFLLEdBQUcsSUFBSSxDQUFDd0UsVUFBVTtRQUN2Qm9HLEdBQUcsR0FBRzVMLENBQUMsQ0FBQzZMLFFBQVEsQ0FBQyxDQUFDO1FBQ2xCVixPQUFPLEdBQUdTLEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLENBQUM7UUFDdkJvQixLQUFLO1FBQ0xsRSxPQUFNO01BQ1IsSUFDRSxFQUNFLElBQUksQ0FBQ2hDLFlBQVksQ0FBQ3BFLE9BQU8sQ0FBQyxJQUMxQmpCLEtBQUssS0FDSmtNLEVBQUUsSUFBSSxDQUFDbE4sQ0FBQyxDQUFDb0IsSUFBSSxDQUFDK0wsR0FBRyxDQUFDLEtBQUssVUFBVSxHQUFHQSxHQUFHLENBQUNsTCxPQUFPLENBQUMsR0FBR2tMLEdBQUcsSUFBSUYsRUFBRSxDQUFDLENBQy9ELElBQ0RoTCxPQUFPLENBQUNzQyxJQUFJLEVBQ1o7UUFDQSxPQUFPLEtBQUs7TUFDZDtNQUNBLElBQUl5SSxRQUFRLEVBQUU7UUFDWixPQUFPLElBQUk7TUFDYjtNQUNBLElBQUlFLEVBQUUsSUFBSUQsRUFBRSxFQUFFO1FBQ1puRyxJQUFJLENBQUN1RSxLQUFLLEdBQUdwSixPQUFPLENBQUMwQixJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDOEgsY0FBYyxDQUFDLEtBQUssRUFBRXhKLE9BQU8sQ0FBQzRCLE9BQU8sRUFBRSxDQUNqRCxJQUFJLEVBQ0osT0FBTyxFQUNQaUQsSUFBSSxDQUFDdUUsS0FBSyxDQUNYLENBQUM7TUFDSjtNQUNBO01BQ0FoRCxPQUFNLEdBQUcsU0FBQUEsT0FBQSxFQUFZO1FBQ25CO1FBQ0EsSUFBSStFLENBQUMsR0FBR3BOLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRW5GLE9BQU8sQ0FBQztVQUMzQm9MLGFBQWEsR0FBR0QsQ0FBQyxDQUFDakcsU0FBUyxDQUFDbkIsTUFBTTtRQUNwQ29ILENBQUMsQ0FBQy9ELElBQUksR0FBR3JJLEtBQUssQ0FBQ3lHLElBQUksQ0FDakJYLElBQUksRUFDSm9HLEVBQUUsRUFDRkEsRUFBRSxJQUFJbE4sQ0FBQyxDQUFDb0IsSUFBSSxDQUFDK0wsR0FBRyxDQUFDLEtBQUssVUFBVSxHQUFHQSxHQUFHLENBQUNDLENBQUMsQ0FBQyxHQUFHRCxHQUFHLENBQUMsRUFDaERyRyxJQUFJLENBQUMxRixJQUNQLENBQUM7UUFDRDtRQUNBO1FBQ0FnTSxDQUFDLENBQUNyRixTQUFTLEdBQUdxRixDQUFDLENBQUMvRCxJQUFJLENBQUN0QyxJQUFJO1FBQ3pCO1FBQ0FxRyxDQUFDLENBQUNoRSxZQUFZLEdBQ1osUUFBUSxHQUFHOEQsRUFBRSxHQUFHLEdBQUcsSUFBSUEsRUFBRSxHQUFHRSxDQUFDLENBQUNyRixTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHa0YsRUFBRTtRQUN6RDtRQUNBL0UsSUFBSSxDQUFDdkcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRXlMLENBQUMsQ0FBQztRQUN6QztRQUNBbEYsSUFBSSxDQUFDZ0IsWUFBWSxDQUFDa0UsQ0FBQyxDQUFDO1FBQ3BCO1FBQ0FsRixJQUFJLENBQUNELHFCQUFxQixDQUFDbUYsQ0FBQyxDQUFDO1FBQzdCYixLQUFLLEdBQUcsQ0FDTHJFLElBQUksQ0FBQ3ZHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFeUwsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJcE4sQ0FBQyxDQUFDc04sSUFBSSxDQUFDRixDQUFDLENBQUMsSUFDM0RsRixJQUFJLENBQUN1RCxjQUFjLENBQUMsS0FBSyxFQUFFMkIsQ0FBQyxDQUFDdkosT0FBTyxDQUFDLEVBRXBDYyxJQUFJLENBQUMsVUFBVTRJLE1BQU0sRUFBRUMsVUFBVSxFQUFFakIsS0FBSyxFQUFFO1VBQ3pDVyxFQUFFLEdBQUdoRixJQUFJLENBQUN5RSxpQkFBaUIsQ0FBQ0osS0FBSyxDQUFDLElBQUlXLEVBQUUsR0FBR0UsQ0FBQyxDQUFDckYsU0FBUztVQUN0RDtVQUNBO1VBQ0E7VUFDQSxJQUFJc0YsYUFBYSxHQUFHRCxDQUFDLENBQUNyRixTQUFTLEdBQUdxRixDQUFDLENBQUNqRyxTQUFTLENBQUNuQixNQUFNLEVBQUU7WUFDcERrQyxJQUFJLENBQUNSLFdBQVcsQ0FDZDFILENBQUMsQ0FBQzRCLEtBQUssQ0FBQyxVQUFVLEVBQUU7Y0FDbEIrRixnQkFBZ0IsRUFBRSxJQUFJO2NBQ3RCM0IsTUFBTSxFQUFFa0gsRUFBRSxHQUFHRSxDQUFDLENBQUNoSyxhQUFhO2NBQzVCd0QsS0FBSyxFQUFFc0csRUFBRSxHQUFHRSxDQUFDLENBQUNoSztZQUNoQixDQUFDLENBQUMsRUFDRmdLLENBQ0YsQ0FBQztVQUNIO1VBQ0FuTCxPQUFPLENBQUNtQixhQUFhLEdBQUdnSyxDQUFDLENBQUNoSyxhQUFhLEdBQUc4SixFQUFFO1VBQzVDRSxDQUFDLENBQUNHLE1BQU0sR0FBR0EsTUFBTTtVQUNqQkgsQ0FBQyxDQUFDSSxVQUFVLEdBQUdBLFVBQVU7VUFDekJKLENBQUMsQ0FBQ2IsS0FBSyxHQUFHQSxLQUFLO1VBQ2ZyRSxJQUFJLENBQUN2RyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRXlMLENBQUMsQ0FBQztVQUNuQ2xGLElBQUksQ0FBQ3ZHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFeUwsQ0FBQyxDQUFDO1VBQ3JDLElBQUlGLEVBQUUsR0FBR0QsRUFBRSxFQUFFO1lBQ1g7WUFDQTtZQUNBNUUsT0FBTSxDQUFDLENBQUM7VUFDVixDQUFDLE1BQU07WUFDTHVELEdBQUcsQ0FBQ0UsV0FBVyxDQUFDc0IsQ0FBQyxDQUFDdkosT0FBTyxFQUFFLENBQUMwSixNQUFNLEVBQUVDLFVBQVUsRUFBRWpCLEtBQUssQ0FBQyxDQUFDO1VBQ3pEO1FBQ0YsQ0FBQyxDQUFDLENBQ0RqQixJQUFJLENBQUMsVUFBVWlCLEtBQUssRUFBRWlCLFVBQVUsRUFBRWxCLFdBQVcsRUFBRTtVQUM5Q2MsQ0FBQyxDQUFDYixLQUFLLEdBQUdBLEtBQUs7VUFDZmEsQ0FBQyxDQUFDSSxVQUFVLEdBQUdBLFVBQVU7VUFDekJKLENBQUMsQ0FBQ2QsV0FBVyxHQUFHQSxXQUFXO1VBQzNCcEUsSUFBSSxDQUFDdkcsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUV5TCxDQUFDLENBQUM7VUFDbkNsRixJQUFJLENBQUN2RyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRXlMLENBQUMsQ0FBQztVQUNyQ3hCLEdBQUcsQ0FBQ0csVUFBVSxDQUFDcUIsQ0FBQyxDQUFDdkosT0FBTyxFQUFFLENBQUMwSSxLQUFLLEVBQUVpQixVQUFVLEVBQUVsQixXQUFXLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FDRGQsTUFBTSxDQUFDLFlBQVk7VUFDbEJ0RCxJQUFJLENBQUNNLHVCQUF1QixDQUFDNEUsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQztNQUNOLENBQUM7TUFDRCxJQUFJLENBQUNsQyxlQUFlLENBQUNDLE9BQU8sQ0FBQztNQUM3QkEsT0FBTyxDQUFDYSxLQUFLLEdBQUcsWUFBWTtRQUMxQixPQUFPTyxLQUFLLENBQUNQLEtBQUssQ0FBQyxDQUFDO01BQ3RCLENBQUM7TUFDRDNELE9BQU0sQ0FBQyxDQUFDO01BQ1IsT0FBTzhDLE9BQU87SUFDaEIsQ0FBQztJQUVEc0MsV0FBVyxFQUFFLFNBQUFBLFlBQVVuTSxDQUFDLEVBQUVpRCxJQUFJLEVBQUU7TUFDOUIsSUFBSSxJQUFJLENBQUNtSixPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ3RCO1FBQ0E7UUFDQTtRQUNBLElBQUksQ0FBQy9MLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDdEI7UUFDQSxJQUFJLENBQUNxRyxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUNyQyxhQUFhLENBQUMsQ0FBQztRQUM3QztRQUNBLElBQUksQ0FBQ3dCLFNBQVMsQ0FBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUNtQixTQUFTLENBQUNQLEtBQUssR0FBRyxDQUFDO1FBQ2hELElBQUksQ0FBQ08sU0FBUyxDQUFDbEIsT0FBTyxHQUFHLENBQUM7TUFDNUI7TUFDQTtNQUNBO01BQ0E7TUFDQSxJQUFJLENBQUNvQixtQkFBbUIsQ0FBQzlDLElBQUksQ0FBQztNQUM5QixJQUFJLENBQUN5QyxtQkFBbUIsQ0FBQ3pDLElBQUksQ0FBQztNQUM5QkEsSUFBSSxDQUFDNEMsU0FBUyxDQUFDbkIsTUFBTSxHQUFHekIsSUFBSSxDQUFDeUIsTUFBTSxHQUFHekIsSUFBSSxDQUFDbkIsYUFBYSxJQUFJLENBQUM7TUFDN0RtQixJQUFJLENBQUM0QyxTQUFTLENBQUNQLEtBQUssR0FBR3JDLElBQUksQ0FBQ3FDLEtBQUssR0FBRyxJQUFJLENBQUNGLFNBQVMsQ0FBQ25DLElBQUksQ0FBQ29DLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDbkVwQyxJQUFJLENBQUM0QyxTQUFTLENBQUNsQixPQUFPLEdBQUcxQixJQUFJLENBQUMwQixPQUFPLEdBQUcsQ0FBQztNQUN6QyxJQUFJLENBQUN5SCxPQUFPLElBQUksQ0FBQztNQUNqQjtNQUNBLElBQUksQ0FBQ3ZHLFNBQVMsQ0FBQ25CLE1BQU0sSUFBSXpCLElBQUksQ0FBQ3lCLE1BQU07TUFDcEMsSUFBSSxDQUFDbUIsU0FBUyxDQUFDUCxLQUFLLElBQUlyQyxJQUFJLENBQUNxQyxLQUFLO0lBQ3BDLENBQUM7SUFFRCtHLE9BQU8sRUFBRSxTQUFBQSxRQUFVSixNQUFNLEVBQUVDLFVBQVUsRUFBRWpCLEtBQUssRUFBRXRLLE9BQU8sRUFBRTtNQUNyRCxJQUFJMkUsS0FBSyxHQUFHM0UsT0FBTyxDQUFDa0YsU0FBUyxDQUFDUCxLQUFLO1FBQ2pDOEYsUUFBUSxHQUFHekssT0FBTyxDQUFDcUYsU0FBUztNQUM5QixJQUFJckYsT0FBTyxDQUFDa0YsU0FBUyxDQUFDbkIsTUFBTSxHQUFHWSxLQUFLLEVBQUU7UUFDcEM7UUFDQTtRQUNBLElBQUksQ0FBQ2MsV0FBVyxDQUNkMUgsQ0FBQyxDQUFDNEIsS0FBSyxDQUFDLFVBQVUsRUFBRTtVQUNsQitGLGdCQUFnQixFQUFFLElBQUk7VUFDdEIzQixNQUFNLEVBQUVZLEtBQUs7VUFDYkEsS0FBSyxFQUFFQTtRQUNULENBQUMsQ0FBQyxFQUNGM0UsT0FDRixDQUFDO01BQ0g7TUFDQXlLLFFBQVEsQ0FBQ2EsTUFBTSxHQUFHdEwsT0FBTyxDQUFDc0wsTUFBTSxHQUFHQSxNQUFNO01BQ3pDYixRQUFRLENBQUNjLFVBQVUsR0FBR3ZMLE9BQU8sQ0FBQ3VMLFVBQVUsR0FBR0EsVUFBVTtNQUNyRGQsUUFBUSxDQUFDSCxLQUFLLEdBQUd0SyxPQUFPLENBQUNzSyxLQUFLLEdBQUdBLEtBQUs7TUFDdEMsSUFBSSxDQUFDNUssUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUVNLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQyTCxPQUFPLEVBQUUsU0FBQUEsUUFBVXJCLEtBQUssRUFBRWlCLFVBQVUsRUFBRWxCLFdBQVcsRUFBRXJLLE9BQU8sRUFBRTtNQUMxRCxJQUFJeUssUUFBUSxHQUFHekssT0FBTyxDQUFDcUYsU0FBUztNQUNoQyxJQUFJckYsT0FBTyxDQUFDb0IsbUJBQW1CLEVBQUU7UUFDL0I7UUFDQTtRQUNBLElBQUksQ0FBQzhELFNBQVMsQ0FBQ25CLE1BQU0sSUFBSS9ELE9BQU8sQ0FBQ2tGLFNBQVMsQ0FBQ25CLE1BQU07UUFDakQsSUFBSSxDQUFDbUIsU0FBUyxDQUFDUCxLQUFLLElBQUkzRSxPQUFPLENBQUNrRixTQUFTLENBQUNQLEtBQUs7TUFDakQ7TUFDQThGLFFBQVEsQ0FBQ0gsS0FBSyxHQUFHdEssT0FBTyxDQUFDc0ssS0FBSyxHQUFHQSxLQUFLO01BQ3RDRyxRQUFRLENBQUNjLFVBQVUsR0FBR3ZMLE9BQU8sQ0FBQ3VMLFVBQVUsR0FBR0EsVUFBVTtNQUNyRGQsUUFBUSxDQUFDSixXQUFXLEdBQUdySyxPQUFPLENBQUNxSyxXQUFXLEdBQUdBLFdBQVc7TUFDeEQsSUFBSSxDQUFDM0ssUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUVNLE9BQU8sQ0FBQztJQUN0QyxDQUFDO0lBRUQ0TCxTQUFTLEVBQUUsU0FBQUEsVUFBVUMsYUFBYSxFQUFFTixVQUFVLEVBQUVPLFlBQVksRUFBRTlMLE9BQU8sRUFBRTtNQUNyRTtNQUNBO01BQ0EsSUFBSSxDQUFDTixRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRU0sT0FBTyxDQUFDO0lBQ3hDLENBQUM7SUFFRHVLLE9BQU8sRUFBRSxTQUFBQSxRQUFVbEwsQ0FBQyxFQUFFaUQsSUFBSSxFQUFFO01BQzFCLElBQUksQ0FBQ0EsSUFBSSxDQUFDSyxNQUFNLEVBQUU7UUFDaEIsSUFBSSxDQUFDcUgsc0JBQXNCLENBQUMzSyxDQUFDLEVBQUVpRCxJQUFJLENBQUM7TUFDdEM7TUFDQSxJQUFJMkQsSUFBSSxHQUFHLElBQUk7UUFDYnFFLEtBQUs7UUFDTHlCLE9BQU87UUFDUEMsSUFBSTtRQUNKQyxJQUFJO1FBQ0pqTSxPQUFPLEdBQUdpRyxJQUFJLENBQUMwQyxnQkFBZ0IsQ0FBQ3JHLElBQUksQ0FBQztRQUNyQzRKLElBQUksR0FBRyxTQUFQQSxJQUFJQSxDQUFBLEVBQWU7VUFDakJqRyxJQUFJLENBQUNrRyxRQUFRLElBQUksQ0FBQztVQUNsQjtVQUNBbk0sT0FBTyxDQUFDK0YsYUFBYSxHQUFHLElBQUlFLElBQUksQ0FBQ3ZDLGFBQWEsQ0FBQyxDQUFDO1VBQ2hENEcsS0FBSyxHQUNIQSxLQUFLLElBQ0wsQ0FDRyxDQUFDeUIsT0FBTyxJQUNQOUYsSUFBSSxDQUFDdkcsUUFBUSxDQUNYLE1BQU0sRUFDTjNCLENBQUMsQ0FBQzRCLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFBRUMsY0FBYyxFQUFFUDtVQUFFLENBQUMsQ0FBQyxFQUN0Q1csT0FDRixDQUFDLEtBQUssS0FBSyxLQUNYaUcsSUFBSSxDQUFDdUQsY0FBYyxDQUFDLEtBQUssRUFBRXhKLE9BQU8sQ0FBQzRCLE9BQU8sRUFBRW1LLE9BQU8sQ0FBQyxJQUN0RDlGLElBQUksQ0FBQ2dDLGNBQWMsQ0FBQ2pJLE9BQU8sQ0FBQyxJQUM1QmpDLENBQUMsQ0FBQ3NOLElBQUksQ0FBQ3JMLE9BQU8sQ0FBQyxFQUVkMEMsSUFBSSxDQUFDLFVBQVU0SSxNQUFNLEVBQUVDLFVBQVUsRUFBRWpCLEtBQUssRUFBRTtZQUN6Q3JFLElBQUksQ0FBQ3lGLE9BQU8sQ0FBQ0osTUFBTSxFQUFFQyxVQUFVLEVBQUVqQixLQUFLLEVBQUV0SyxPQUFPLENBQUM7VUFDbEQsQ0FBQyxDQUFDLENBQ0RxSixJQUFJLENBQUMsVUFBVWlCLEtBQUssRUFBRWlCLFVBQVUsRUFBRWxCLFdBQVcsRUFBRTtZQUM5Q3BFLElBQUksQ0FBQzBGLE9BQU8sQ0FBQ3JCLEtBQUssRUFBRWlCLFVBQVUsRUFBRWxCLFdBQVcsRUFBRXJLLE9BQU8sQ0FBQztVQUN2RCxDQUFDLENBQUMsQ0FDRHVKLE1BQU0sQ0FBQyxVQUFVc0MsYUFBYSxFQUFFTixVQUFVLEVBQUVPLFlBQVksRUFBRTtZQUN6RDdGLElBQUksQ0FBQ00sdUJBQXVCLENBQUN2RyxPQUFPLENBQUM7WUFDckNpRyxJQUFJLENBQUMyRixTQUFTLENBQ1pDLGFBQWEsRUFDYk4sVUFBVSxFQUNWTyxZQUFZLEVBQ1o5TCxPQUNGLENBQUM7WUFDRGlHLElBQUksQ0FBQ2tHLFFBQVEsSUFBSSxDQUFDO1lBQ2xCbEcsSUFBSSxDQUFDd0YsT0FBTyxJQUFJLENBQUM7WUFDakIsSUFDRXpMLE9BQU8sQ0FBQ1ksc0JBQXNCLElBQzlCWixPQUFPLENBQUNZLHNCQUFzQixHQUFHcUYsSUFBSSxDQUFDa0csUUFBUSxFQUM5QztjQUNBO2NBQ0E7Y0FDQSxJQUFJQyxRQUFRLEdBQUduRyxJQUFJLENBQUNvRyxNQUFNLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQ2xDLE9BQU9GLFFBQVEsRUFBRTtnQkFDZixJQUFJbkcsSUFBSSxDQUFDMkMsaUJBQWlCLENBQUN3RCxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUU7a0JBQ2xEQSxRQUFRLENBQUNHLE9BQU8sQ0FBQyxDQUFDO2tCQUNsQjtnQkFDRjtnQkFDQUgsUUFBUSxHQUFHbkcsSUFBSSxDQUFDb0csTUFBTSxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUNoQztZQUNGO1lBQ0EsSUFBSXJHLElBQUksQ0FBQ3dGLE9BQU8sS0FBSyxDQUFDLEVBQUU7Y0FDdEI7Y0FDQTtjQUNBeEYsSUFBSSxDQUFDdkcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN2QjtVQUNGLENBQUMsQ0FBQztVQUNOLE9BQU80SyxLQUFLO1FBQ2QsQ0FBQztNQUNILElBQUksQ0FBQ2tCLFdBQVcsQ0FBQ25NLENBQUMsRUFBRVcsT0FBTyxDQUFDO01BQzVCLElBQ0UsSUFBSSxDQUFDQSxPQUFPLENBQUNXLGlCQUFpQixJQUM3QixJQUFJLENBQUNYLE9BQU8sQ0FBQ1ksc0JBQXNCLElBQ2xDLElBQUksQ0FBQ1osT0FBTyxDQUFDWSxzQkFBc0IsSUFBSSxJQUFJLENBQUN1TCxRQUFTLEVBQ3ZEO1FBQ0EsSUFBSSxJQUFJLENBQUNuTSxPQUFPLENBQUNZLHNCQUFzQixHQUFHLENBQUMsRUFBRTtVQUMzQ29MLElBQUksR0FBR2pPLENBQUMsQ0FBQzZMLFFBQVEsQ0FBQyxDQUFDO1VBQ25CLElBQUksQ0FBQ3lDLE1BQU0sQ0FBQzdILElBQUksQ0FBQ3dILElBQUksQ0FBQztVQUN0QkMsSUFBSSxHQUFHRCxJQUFJLENBQUMvRixJQUFJLENBQUNqRCxZQUFZLENBQUMsQ0FBQ2tKLElBQUksQ0FBQztRQUN0QyxDQUFDLE1BQU07VUFDTCxJQUFJLENBQUNNLFNBQVMsR0FBRyxJQUFJLENBQUNBLFNBQVMsQ0FBQ3ZHLElBQUksQ0FBQ2pELFlBQVksQ0FBQyxDQUFDa0osSUFBSSxFQUFFQSxJQUFJLENBQUM7VUFDOURELElBQUksR0FBRyxJQUFJLENBQUNPLFNBQVM7UUFDdkI7UUFDQTtRQUNBO1FBQ0E7UUFDQVAsSUFBSSxDQUFDbEMsS0FBSyxHQUFHLFlBQVk7VUFDdkJnQyxPQUFPLEdBQUcsQ0FBQzNMLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDO1VBQ3ZDLElBQUksQ0FBQ2tLLEtBQUssRUFBRTtZQUNWLElBQUkwQixJQUFJLEVBQUU7Y0FDUkEsSUFBSSxDQUFDbEMsVUFBVSxDQUFDOUosT0FBTyxDQUFDNEIsT0FBTyxFQUFFbUssT0FBTyxDQUFDO1lBQzNDO1lBQ0EsT0FBT0csSUFBSSxDQUFDLENBQUM7VUFDZjtVQUNBLE9BQU81QixLQUFLLENBQUNQLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQ2QsZUFBZSxDQUFDZ0QsSUFBSSxDQUFDO01BQ25DO01BQ0EsT0FBT0MsSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0lBRURPLE1BQU0sRUFBRSxTQUFBQSxPQUFVcE4sQ0FBQyxFQUFFaUQsSUFBSSxFQUFFO01BQ3pCLElBQUkyRCxJQUFJLEdBQUcsSUFBSTtRQUNicUYsTUFBTSxHQUFHLElBQUk7UUFDYnRMLE9BQU8sR0FBR2pDLENBQUMsQ0FBQ29ILE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNuRixPQUFPLEVBQUVzQyxJQUFJLENBQUM7UUFDMUNvQyxLQUFLLEdBQUdwQyxJQUFJLENBQUNvQyxLQUFLO1FBQ2xCZ0ksV0FBVyxHQUFHaEksS0FBSyxDQUFDMkQsTUFBTTtRQUMxQnNFLEtBQUssR0FBRzNNLE9BQU8sQ0FBQ1EscUJBQXFCO1FBQ3JDb00sU0FBUyxHQUFHNU0sT0FBTyxDQUFDUyx3QkFBd0I7UUFDNUNvTSxRQUFRLEdBQUc3TSxPQUFPLENBQUNVLGdDQUFnQztRQUNuRG9NLFNBQVMsR0FBRyxDQUFDO1FBQ2J4TSxTQUFTLEdBQUcsSUFBSSxDQUFDNEgsYUFBYSxDQUFDbEksT0FBTyxDQUFDO1FBQ3ZDK00sWUFBWTtRQUNaQyxjQUFjO1FBQ2RDLE9BQU87UUFDUDdFLENBQUM7UUFDRDhFLENBQUMsR0FBRyxDQUFDO01BQ1AsSUFBSSxDQUFDUixXQUFXLEVBQUU7UUFDaEIsT0FBTyxLQUFLO01BQ2Q7TUFDQSxJQUFJRSxTQUFTLElBQUlsSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNJLElBQUksS0FBSzFFLFNBQVMsRUFBRTtRQUM1Q3dNLFNBQVMsR0FBR3hNLFNBQVM7TUFDdkI7TUFDQSxJQUNFLEVBQUVKLE9BQU8sQ0FBQ08saUJBQWlCLElBQUlvTSxLQUFLLElBQUlDLFNBQVMsQ0FBQyxJQUNsRCxDQUFDLElBQUksQ0FBQ3hJLFlBQVksQ0FBQ3BFLE9BQU8sQ0FBQyxFQUMzQjtRQUNBaU4sT0FBTyxHQUFHLENBQUN2SSxLQUFLLENBQUM7UUFDakJxSSxZQUFZLEdBQUcsQ0FBQ3pNLFNBQVMsQ0FBQztNQUM1QixDQUFDLE1BQU0sSUFBSSxFQUFFTixPQUFPLENBQUNPLGlCQUFpQixJQUFJcU0sU0FBUyxDQUFDLElBQUlELEtBQUssRUFBRTtRQUM3RE0sT0FBTyxHQUFHLEVBQUU7UUFDWkYsWUFBWSxHQUFHLEVBQUU7UUFDakIsS0FBSzNFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3NFLFdBQVcsRUFBRXRFLENBQUMsSUFBSXVFLEtBQUssRUFBRTtVQUN2Q00sT0FBTyxDQUFDekksSUFBSSxDQUFDRSxLQUFLLENBQUMzRixLQUFLLENBQUNxSixDQUFDLEVBQUVBLENBQUMsR0FBR3VFLEtBQUssQ0FBQyxDQUFDO1VBQ3ZDSyxjQUFjLEdBQUcxTSxTQUFTLENBQUN2QixLQUFLLENBQUNxSixDQUFDLEVBQUVBLENBQUMsR0FBR3VFLEtBQUssQ0FBQztVQUM5QyxJQUFJLENBQUNLLGNBQWMsQ0FBQzNFLE1BQU0sRUFBRTtZQUMxQjJFLGNBQWMsR0FBRzFNLFNBQVM7VUFDNUI7VUFDQXlNLFlBQVksQ0FBQ3ZJLElBQUksQ0FBQ3dJLGNBQWMsQ0FBQztRQUNuQztNQUNGLENBQUMsTUFBTSxJQUFJLENBQUNoTixPQUFPLENBQUNPLGlCQUFpQixJQUFJcU0sU0FBUyxFQUFFO1FBQ2xESyxPQUFPLEdBQUcsRUFBRTtRQUNaRixZQUFZLEdBQUcsRUFBRTtRQUNqQixLQUFLM0UsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0UsV0FBVyxFQUFFdEUsQ0FBQyxHQUFHQSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQ3RDMEUsU0FBUyxJQUFJcEksS0FBSyxDQUFDMEQsQ0FBQyxDQUFDLENBQUN0RCxJQUFJLEdBQUcrSCxRQUFRO1VBQ3JDLElBQ0V6RSxDQUFDLEdBQUcsQ0FBQyxLQUFLc0UsV0FBVyxJQUNyQkksU0FBUyxHQUFHcEksS0FBSyxDQUFDMEQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDdEQsSUFBSSxHQUFHK0gsUUFBUSxHQUFHRCxTQUFTLElBQ25ERCxLQUFLLElBQUl2RSxDQUFDLEdBQUcsQ0FBQyxHQUFHOEUsQ0FBQyxJQUFJUCxLQUFNLEVBQzdCO1lBQ0FNLE9BQU8sQ0FBQ3pJLElBQUksQ0FBQ0UsS0FBSyxDQUFDM0YsS0FBSyxDQUFDbU8sQ0FBQyxFQUFFOUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25DNEUsY0FBYyxHQUFHMU0sU0FBUyxDQUFDdkIsS0FBSyxDQUFDbU8sQ0FBQyxFQUFFOUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUM0RSxjQUFjLENBQUMzRSxNQUFNLEVBQUU7Y0FDMUIyRSxjQUFjLEdBQUcxTSxTQUFTO1lBQzVCO1lBQ0F5TSxZQUFZLENBQUN2SSxJQUFJLENBQUN3SSxjQUFjLENBQUM7WUFDakNFLENBQUMsR0FBRzlFLENBQUMsR0FBRyxDQUFDO1lBQ1QwRSxTQUFTLEdBQUcsQ0FBQztVQUNmO1FBQ0Y7TUFDRixDQUFDLE1BQU07UUFDTEMsWUFBWSxHQUFHek0sU0FBUztNQUMxQjtNQUNBZ0MsSUFBSSxDQUFDNkssYUFBYSxHQUFHekksS0FBSztNQUMxQjNHLENBQUMsQ0FBQytELElBQUksQ0FBQ21MLE9BQU8sSUFBSXZJLEtBQUssRUFBRSxVQUFVRSxLQUFLLEVBQUV3SSxPQUFPLEVBQUU7UUFDakQsSUFBSUMsT0FBTyxHQUFHdFAsQ0FBQyxDQUFDb0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFN0MsSUFBSSxDQUFDO1FBQ2hDK0ssT0FBTyxDQUFDM0ksS0FBSyxHQUFHdUksT0FBTyxHQUFHRyxPQUFPLEdBQUcsQ0FBQ0EsT0FBTyxDQUFDO1FBQzdDQyxPQUFPLENBQUMvTSxTQUFTLEdBQUd5TSxZQUFZLENBQUNuSSxLQUFLLENBQUM7UUFDdkNxQixJQUFJLENBQUNiLG1CQUFtQixDQUFDaUksT0FBTyxDQUFDO1FBQ2pDcEgsSUFBSSxDQUFDbEIsbUJBQW1CLENBQUNzSSxPQUFPLENBQUM7UUFDakNwSCxJQUFJLENBQUMrRCxzQkFBc0IsQ0FBQzNLLENBQUMsRUFBRWdPLE9BQU8sQ0FBQztRQUN2Qy9CLE1BQU0sR0FBR3JGLElBQUksQ0FBQ3ZHLFFBQVEsQ0FDcEIsS0FBSyxFQUNMM0IsQ0FBQyxDQUFDNEIsS0FBSyxDQUFDLEtBQUssRUFBRTtVQUFFQyxjQUFjLEVBQUVQO1FBQUUsQ0FBQyxDQUFDLEVBQ3JDZ08sT0FDRixDQUFDO1FBQ0QsT0FBTy9CLE1BQU07TUFDZixDQUFDLENBQUM7TUFDRixPQUFPQSxNQUFNO0lBQ2YsQ0FBQztJQUVEZ0MsaUJBQWlCLEVBQUUsU0FBQUEsa0JBQVVoTCxJQUFJLEVBQUU7TUFDakMsSUFBSTZGLEtBQUssR0FBRzdGLElBQUksQ0FBQ3JFLFNBQVM7UUFDeEJzUCxVQUFVLEdBQUdwRixLQUFLLENBQUNxRixLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzlCQyxZQUFZLEdBQUd0RixLQUFLLENBQUN1RixFQUFFLENBQUN4TixRQUFRLENBQUN5TixhQUFhLENBQUM7TUFDakQ7TUFDQXJMLElBQUksQ0FBQ3NMLGNBQWMsR0FBR0wsVUFBVTtNQUNoQ3hQLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQ3lKLE1BQU0sQ0FBQytGLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTSxLQUFLLENBQUMsQ0FBQztNQUNoRDtNQUNBO01BQ0ExRixLQUFLLENBQUMyRixLQUFLLENBQUNQLFVBQVUsQ0FBQyxDQUFDUSxNQUFNLENBQUMsQ0FBQztNQUNoQztNQUNBO01BQ0EsSUFBSU4sWUFBWSxFQUFFO1FBQ2hCRixVQUFVLENBQUNTLE9BQU8sQ0FBQyxPQUFPLENBQUM7TUFDN0I7TUFDQTtNQUNBalEsQ0FBQyxDQUFDa1EsU0FBUyxDQUFDOUYsS0FBSyxDQUFDM0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO01BQ2hDO01BQ0E7TUFDQTtNQUNBLElBQUksQ0FBQ3hHLE9BQU8sQ0FBQy9CLFNBQVMsR0FBRyxJQUFJLENBQUMrQixPQUFPLENBQUMvQixTQUFTLENBQUMwSSxHQUFHLENBQUMsVUFBVXlCLENBQUMsRUFBRThGLEVBQUUsRUFBRTtRQUNuRSxJQUFJQSxFQUFFLEtBQUsvRixLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDbkIsT0FBT29GLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdEI7UUFDQSxPQUFPVyxFQUFFO01BQ1gsQ0FBQyxDQUFDO01BQ0Y7TUFDQTtNQUNBLElBQUkvRixLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDaUYsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2hDLElBQUksQ0FBQ0EsT0FBTyxHQUFHRyxVQUFVO01BQzNCO0lBQ0YsQ0FBQztJQUVEWSxvQkFBb0IsRUFBRSxTQUFBQSxxQkFBVUMsS0FBSyxFQUFFQyxJQUFJLEVBQUU7TUFDM0MsSUFBSXBJLElBQUksR0FBRyxJQUFJO1FBQ2IwRCxHQUFHLEdBQUc1TCxDQUFDLENBQUM2TCxRQUFRLENBQUMsQ0FBQztRQUNsQjBFLE9BQU8sR0FBRyxFQUFFO1FBQ1pDLFNBQVM7UUFDVEMsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQWFuUCxDQUFDLEVBQUU7VUFDMUIsSUFBSUEsQ0FBQyxJQUFJLENBQUNBLENBQUMsQ0FBQytPLEtBQUssRUFBRTtZQUNqQi9PLENBQUMsQ0FBQytPLEtBQUssR0FBR0EsS0FBSztVQUNqQjtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0F6RSxHQUFHLENBQUM0QyxPQUFPLENBQUMsQ0FBQ2xOLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFDRG9QLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBYUgsT0FBTyxFQUFFO1VBQ2xDckksSUFBSSxDQUNEeUksc0JBQXNCLENBQUNKLE9BQU8sRUFBRUQsSUFBSSxHQUFHRCxLQUFLLENBQUM3SixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQ3hEN0IsSUFBSSxDQUFDLFVBQVVnQyxLQUFLLEVBQUU7WUFDckJpRixHQUFHLENBQUM0QyxPQUFPLENBQUM3SCxLQUFLLENBQUM7VUFDcEIsQ0FBQyxDQUFDLENBQ0QyRSxJQUFJLENBQUNtRixZQUFZLENBQUM7UUFDdkIsQ0FBQztRQUNERyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBQSxFQUFlO1VBQ3hCSixTQUFTLENBQUNJLFdBQVcsQ0FBQyxVQUFVQyxPQUFPLEVBQUU7WUFDdkMsSUFBSSxDQUFDQSxPQUFPLENBQUN2RyxNQUFNLEVBQUU7Y0FDbkJvRyxjQUFjLENBQUNILE9BQU8sQ0FBQztZQUN6QixDQUFDLE1BQU07Y0FDTEEsT0FBTyxHQUFHQSxPQUFPLENBQUNPLE1BQU0sQ0FBQ0QsT0FBTyxDQUFDO2NBQ2pDRCxXQUFXLENBQUMsQ0FBQztZQUNmO1VBQ0YsQ0FBQyxFQUFFSCxZQUFZLENBQUM7UUFDbEIsQ0FBQztNQUNIO01BQ0FILElBQUksR0FBR0EsSUFBSSxJQUFJLEVBQUU7TUFDakIsSUFBSUQsS0FBSyxDQUFDVSxNQUFNLEVBQUU7UUFDaEIsSUFBSVYsS0FBSyxDQUFDVyxLQUFLLEVBQUU7VUFDZjtVQUNBWCxLQUFLLENBQUNXLEtBQUssQ0FBQ0MsWUFBWSxHQUFHWCxJQUFJO1VBQy9CMUUsR0FBRyxDQUFDNEMsT0FBTyxDQUFDNkIsS0FBSyxDQUFDVyxLQUFLLENBQUM7UUFDMUIsQ0FBQyxNQUFNO1VBQ0xYLEtBQUssQ0FBQ3ZKLElBQUksQ0FBQyxVQUFVQSxJQUFJLEVBQUU7WUFDekJBLElBQUksQ0FBQ21LLFlBQVksR0FBR1gsSUFBSTtZQUN4QjFFLEdBQUcsQ0FBQzRDLE9BQU8sQ0FBQzFILElBQUksQ0FBQztVQUNuQixDQUFDLEVBQUUySixZQUFZLENBQUM7UUFDbEI7TUFDRixDQUFDLE1BQU0sSUFBSUosS0FBSyxDQUFDYSxXQUFXLEVBQUU7UUFDNUJWLFNBQVMsR0FBR0gsS0FBSyxDQUFDYyxZQUFZLENBQUMsQ0FBQztRQUNoQ1AsV0FBVyxDQUFDLENBQUM7TUFDZixDQUFDLE1BQU07UUFDTDtRQUNBO1FBQ0FoRixHQUFHLENBQUM0QyxPQUFPLENBQUMsRUFBRSxDQUFDO01BQ2pCO01BQ0EsT0FBTzVDLEdBQUcsQ0FBQ1QsT0FBTyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVEd0Ysc0JBQXNCLEVBQUUsU0FBQUEsdUJBQVVKLE9BQU8sRUFBRUQsSUFBSSxFQUFFO01BQy9DLElBQUlwSSxJQUFJLEdBQUcsSUFBSTtNQUNmLE9BQU9sSSxDQUFDLENBQUNvUixJQUFJLENBQ1YzTCxLQUFLLENBQ0p6RixDQUFDLEVBQ0RBLENBQUMsQ0FBQzRJLEdBQUcsQ0FBQzJILE9BQU8sRUFBRSxVQUFVRixLQUFLLEVBQUU7UUFDOUIsT0FBT25JLElBQUksQ0FBQ2tJLG9CQUFvQixDQUFDQyxLQUFLLEVBQUVDLElBQUksQ0FBQztNQUMvQyxDQUFDLENBQ0gsQ0FBQyxDQUNBLElBQUksQ0FBQ3JMLFlBQVksQ0FBQyxDQUFDLFlBQVk7UUFDOUIsT0FBT29NLEtBQUssQ0FBQ3RRLFNBQVMsQ0FBQytQLE1BQU0sQ0FBQ3JMLEtBQUssQ0FBQyxFQUFFLEVBQUVDLFNBQVMsQ0FBQztNQUNwRCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ0TCxnQkFBZ0IsRUFBRSxTQUFBQSxpQkFBVS9QLFlBQVksRUFBRTtNQUN4QztNQUNBQSxZQUFZLEdBQUdBLFlBQVksSUFBSSxDQUFDLENBQUM7TUFDakMsSUFBSWdRLEtBQUssR0FBR2hRLFlBQVksQ0FBQ2dRLEtBQUs7TUFDOUIsSUFDRUEsS0FBSyxJQUNMQSxLQUFLLENBQUNqSCxNQUFNLEtBQ1hpSCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixJQUFJRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNFLFVBQVUsQ0FBQyxFQUNsRDtRQUNBLE9BQU8sSUFBSSxDQUFDZCxzQkFBc0IsQ0FDaEMzUSxDQUFDLENBQUM0SSxHQUFHLENBQUMySSxLQUFLLEVBQUUsVUFBVUcsSUFBSSxFQUFFO1VBQzNCLElBQUlyQixLQUFLO1VBQ1QsSUFBSXFCLElBQUksQ0FBQ0YsZ0JBQWdCLEVBQUU7WUFDekJuQixLQUFLLEdBQUdxQixJQUFJLENBQUNGLGdCQUFnQixDQUFDLENBQUM7WUFDL0IsSUFBSW5CLEtBQUssRUFBRTtjQUNUO2NBQ0FBLEtBQUssQ0FBQ1csS0FBSyxHQUFHVSxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hDO1lBQ0EsT0FBT3RCLEtBQUs7VUFDZDtVQUNBLE9BQU9xQixJQUFJLENBQUNELFVBQVUsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FDSCxDQUFDO01BQ0g7TUFDQSxPQUFPelIsQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUMsQ0FBQzJDLE9BQU8sQ0FBQ3hPLENBQUMsQ0FBQzRSLFNBQVMsQ0FBQ3JRLFlBQVksQ0FBQ29GLEtBQUssQ0FBQyxDQUFDLENBQUN3RSxPQUFPLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQwRyx3QkFBd0IsRUFBRSxTQUFBQSx5QkFBVTNSLFNBQVMsRUFBRTtNQUM3QztNQUNBQSxTQUFTLEdBQUdGLENBQUMsQ0FBQ0UsU0FBUyxDQUFDO01BQ3hCLElBQUlxUSxPQUFPLEdBQUdyUSxTQUFTLENBQUNLLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDckNvRyxLQUFLO1FBQ0wxQyxLQUFLO01BQ1AsSUFBSXNNLE9BQU8sSUFBSUEsT0FBTyxDQUFDakcsTUFBTSxFQUFFO1FBQzdCLE9BQU8sSUFBSSxDQUFDcUcsc0JBQXNCLENBQUNKLE9BQU8sQ0FBQztNQUM3QztNQUNBNUosS0FBSyxHQUFHM0csQ0FBQyxDQUFDNFIsU0FBUyxDQUFDMVIsU0FBUyxDQUFDSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7TUFDNUMsSUFBSSxDQUFDb0csS0FBSyxDQUFDMkQsTUFBTSxFQUFFO1FBQ2pCckcsS0FBSyxHQUFHL0QsU0FBUyxDQUFDSyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQzBELEtBQUssRUFBRTtVQUNWLE9BQU9qRSxDQUFDLENBQUM2TCxRQUFRLENBQUMsQ0FBQyxDQUFDMkMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDckQsT0FBTyxDQUFDLENBQUM7UUFDM0M7UUFDQTtRQUNBO1FBQ0E7UUFDQXhFLEtBQUssR0FBRyxDQUFDO1VBQUVILElBQUksRUFBRXZDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQUUsQ0FBQyxDQUFDO01BQ2hELENBQUMsTUFBTSxJQUFJeUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDSCxJQUFJLEtBQUtuRSxTQUFTLElBQUlzRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMrQyxRQUFRLEVBQUU7UUFDM0Q7UUFDQTFKLENBQUMsQ0FBQytELElBQUksQ0FBQzRDLEtBQUssRUFBRSxVQUFVRSxLQUFLLEVBQUVDLElBQUksRUFBRTtVQUNuQ0EsSUFBSSxDQUFDTixJQUFJLEdBQUdNLElBQUksQ0FBQzRDLFFBQVE7VUFDekI1QyxJQUFJLENBQUNDLElBQUksR0FBR0QsSUFBSSxDQUFDZ0wsUUFBUTtRQUMzQixDQUFDLENBQUM7TUFDSjtNQUNBLE9BQU85UixDQUFDLENBQUM2TCxRQUFRLENBQUMsQ0FBQyxDQUFDMkMsT0FBTyxDQUFDN0gsS0FBSyxDQUFDLENBQUN3RSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ0RyxrQkFBa0IsRUFBRSxTQUFBQSxtQkFBVTdSLFNBQVMsRUFBRTtNQUN2QyxJQUFJLEVBQUVBLFNBQVMsWUFBWUYsQ0FBQyxDQUFDLElBQUlFLFNBQVMsQ0FBQ29LLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdkQsT0FBTyxJQUFJLENBQUN1SCx3QkFBd0IsQ0FBQzNSLFNBQVMsQ0FBQztNQUNqRDtNQUNBLE9BQU9GLENBQUMsQ0FBQ29SLElBQUksQ0FDVjNMLEtBQUssQ0FBQ3pGLENBQUMsRUFBRUEsQ0FBQyxDQUFDNEksR0FBRyxDQUFDMUksU0FBUyxFQUFFLElBQUksQ0FBQzJSLHdCQUF3QixDQUFDLENBQUMsQ0FDekQsSUFBSSxDQUFDNU0sWUFBWSxDQUFDLENBQUMsWUFBWTtRQUM5QixPQUFPb00sS0FBSyxDQUFDdFEsU0FBUyxDQUFDK1AsTUFBTSxDQUFDckwsS0FBSyxDQUFDLEVBQUUsRUFBRUMsU0FBUyxDQUFDO01BQ3BELENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRHNNLFNBQVMsRUFBRSxTQUFBQSxVQUFVMVEsQ0FBQyxFQUFFO01BQ3RCLElBQUk0RyxJQUFJLEdBQUcsSUFBSTtRQUNiM0QsSUFBSSxHQUFHO1VBQ0xyRSxTQUFTLEVBQUVGLENBQUMsQ0FBQ3NCLENBQUMsQ0FBQzJRLE1BQU0sQ0FBQztVQUN0QjdOLElBQUksRUFBRXBFLENBQUMsQ0FBQ3NCLENBQUMsQ0FBQzJRLE1BQU0sQ0FBQzdOLElBQUk7UUFDdkIsQ0FBQztNQUNILElBQUksQ0FBQzJOLGtCQUFrQixDQUFDeE4sSUFBSSxDQUFDckUsU0FBUyxDQUFDLENBQUNzTCxNQUFNLENBQUMsVUFBVTdFLEtBQUssRUFBRTtRQUM5RHBDLElBQUksQ0FBQ29DLEtBQUssR0FBR0EsS0FBSztRQUNsQixJQUFJdUIsSUFBSSxDQUFDakcsT0FBTyxDQUFDSyxnQkFBZ0IsRUFBRTtVQUNqQzRGLElBQUksQ0FBQ3FILGlCQUFpQixDQUFDaEwsSUFBSSxDQUFDO1FBQzlCO1FBQ0EsSUFDRTJELElBQUksQ0FBQ3ZHLFFBQVEsQ0FDWCxRQUFRLEVBQ1IzQixDQUFDLENBQUM0QixLQUFLLENBQUMsUUFBUSxFQUFFO1VBQUVDLGNBQWMsRUFBRVA7UUFBRSxDQUFDLENBQUMsRUFDeENpRCxJQUNGLENBQUMsS0FBSyxLQUFLLEVBQ1g7VUFDQTJELElBQUksQ0FBQ3dHLE1BQU0sQ0FBQ3BOLENBQUMsRUFBRWlELElBQUksQ0FBQztRQUN0QjtNQUNGLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDJOLFFBQVEsRUFBRSxTQUFBQSxTQUFVNVEsQ0FBQyxFQUFFO01BQ3JCLElBQUlpUSxLQUFLLEdBQ0xqUSxDQUFDLENBQUNFLGFBQWEsSUFDZkYsQ0FBQyxDQUFDRSxhQUFhLENBQUMyUSxhQUFhLElBQzdCN1EsQ0FBQyxDQUFDRSxhQUFhLENBQUMyUSxhQUFhLENBQUNaLEtBQUs7UUFDckNoTixJQUFJLEdBQUc7VUFBRW9DLEtBQUssRUFBRTtRQUFHLENBQUM7TUFDdEIsSUFBSTRLLEtBQUssSUFBSUEsS0FBSyxDQUFDakgsTUFBTSxFQUFFO1FBQ3pCdEssQ0FBQyxDQUFDK0QsSUFBSSxDQUFDd04sS0FBSyxFQUFFLFVBQVUxSyxLQUFLLEVBQUU2SyxJQUFJLEVBQUU7VUFDbkMsSUFBSTVLLElBQUksR0FBRzRLLElBQUksQ0FBQ0MsU0FBUyxJQUFJRCxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDO1VBQzdDLElBQUk3SyxJQUFJLEVBQUU7WUFDUnZDLElBQUksQ0FBQ29DLEtBQUssQ0FBQ0YsSUFBSSxDQUFDSyxJQUFJLENBQUM7VUFDdkI7UUFDRixDQUFDLENBQUM7UUFDRixJQUNFLElBQUksQ0FBQ25GLFFBQVEsQ0FDWCxPQUFPLEVBQ1AzQixDQUFDLENBQUM0QixLQUFLLENBQUMsT0FBTyxFQUFFO1VBQUVDLGNBQWMsRUFBRVA7UUFBRSxDQUFDLENBQUMsRUFDdkNpRCxJQUNGLENBQUMsS0FBSyxLQUFLLEVBQ1g7VUFDQSxJQUFJLENBQUNtSyxNQUFNLENBQUNwTixDQUFDLEVBQUVpRCxJQUFJLENBQUM7UUFDdEI7TUFDRjtJQUNGLENBQUM7SUFFRDZOLE9BQU8sRUFBRSxTQUFBQSxRQUFVOVEsQ0FBQyxFQUFFO01BQ3BCQSxDQUFDLENBQUNDLFlBQVksR0FBR0QsQ0FBQyxDQUFDRSxhQUFhLElBQUlGLENBQUMsQ0FBQ0UsYUFBYSxDQUFDRCxZQUFZO01BQ2hFLElBQUkyRyxJQUFJLEdBQUcsSUFBSTtRQUNiM0csWUFBWSxHQUFHRCxDQUFDLENBQUNDLFlBQVk7UUFDN0JnRCxJQUFJLEdBQUcsQ0FBQyxDQUFDO01BQ1gsSUFBSWhELFlBQVksSUFBSUEsWUFBWSxDQUFDb0YsS0FBSyxJQUFJcEYsWUFBWSxDQUFDb0YsS0FBSyxDQUFDMkQsTUFBTSxFQUFFO1FBQ25FaEosQ0FBQyxDQUFDUSxjQUFjLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUN3UCxnQkFBZ0IsQ0FBQy9QLFlBQVksQ0FBQyxDQUFDaUssTUFBTSxDQUFDLFVBQVU3RSxLQUFLLEVBQUU7VUFDMURwQyxJQUFJLENBQUNvQyxLQUFLLEdBQUdBLEtBQUs7VUFDbEIsSUFDRXVCLElBQUksQ0FBQ3ZHLFFBQVEsQ0FDWCxNQUFNLEVBQ04zQixDQUFDLENBQUM0QixLQUFLLENBQUMsTUFBTSxFQUFFO1lBQUVDLGNBQWMsRUFBRVA7VUFBRSxDQUFDLENBQUMsRUFDdENpRCxJQUNGLENBQUMsS0FBSyxLQUFLLEVBQ1g7WUFDQTJELElBQUksQ0FBQ3dHLE1BQU0sQ0FBQ3BOLENBQUMsRUFBRWlELElBQUksQ0FBQztVQUN0QjtRQUNGLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQztJQUVEOE4sV0FBVyxFQUFFbFIsY0FBYyxDQUFDLFVBQVUsQ0FBQztJQUV2Q21SLFlBQVksRUFBRW5SLGNBQWMsQ0FBQyxXQUFXLENBQUM7SUFFekNvUixZQUFZLEVBQUVwUixjQUFjLENBQUMsV0FBVyxDQUFDO0lBRXpDcVIsa0JBQWtCLEVBQUUsU0FBQUEsbUJBQUEsRUFBWTtNQUM5QixJQUFJLElBQUksQ0FBQ25NLFlBQVksQ0FBQyxJQUFJLENBQUNwRSxPQUFPLENBQUMsRUFBRTtRQUNuQyxJQUFJLENBQUN3USxHQUFHLENBQUMsSUFBSSxDQUFDeFEsT0FBTyxDQUFDQyxRQUFRLEVBQUU7VUFDOUJ3USxRQUFRLEVBQUUsSUFBSSxDQUFDTCxXQUFXO1VBQzFCTSxJQUFJLEVBQUUsSUFBSSxDQUFDUCxPQUFPO1VBQ2xCO1VBQ0FRLFNBQVMsRUFBRSxJQUFJLENBQUNOLFlBQVk7VUFDNUI7VUFDQU8sU0FBUyxFQUFFLElBQUksQ0FBQ047UUFDbEIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDRSxHQUFHLENBQUMsSUFBSSxDQUFDeFEsT0FBTyxDQUFDRyxTQUFTLEVBQUU7VUFDL0IwUSxLQUFLLEVBQUUsSUFBSSxDQUFDWjtRQUNkLENBQUMsQ0FBQztNQUNKO01BQ0EsSUFBSWxTLENBQUMsQ0FBQ0MsT0FBTyxDQUFDQyxTQUFTLEVBQUU7UUFDdkIsSUFBSSxDQUFDdVMsR0FBRyxDQUFDLElBQUksQ0FBQ3hRLE9BQU8sQ0FBQy9CLFNBQVMsRUFBRTtVQUMvQjZTLE1BQU0sRUFBRSxJQUFJLENBQUNmO1FBQ2YsQ0FBQyxDQUFDO01BQ0o7SUFDRixDQUFDO0lBRURnQixxQkFBcUIsRUFBRSxTQUFBQSxzQkFBQSxFQUFZO01BQ2pDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ2hSLE9BQU8sQ0FBQ0MsUUFBUSxFQUFFLG1DQUFtQyxDQUFDO01BQ3JFLElBQUksQ0FBQytRLElBQUksQ0FBQyxJQUFJLENBQUNoUixPQUFPLENBQUNHLFNBQVMsRUFBRSxPQUFPLENBQUM7TUFDMUMsSUFBSSxDQUFDNlEsSUFBSSxDQUFDLElBQUksQ0FBQ2hSLE9BQU8sQ0FBQy9CLFNBQVMsRUFBRSxRQUFRLENBQUM7SUFDN0MsQ0FBQztJQUVEZ1QsUUFBUSxFQUFFLFNBQUFBLFNBQUEsRUFBWTtNQUNwQixJQUFJLENBQUNGLHFCQUFxQixDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVERyxVQUFVLEVBQUUsU0FBQUEsV0FBVW5QLEdBQUcsRUFBRUMsS0FBSyxFQUFFO01BQ2hDLElBQUltUCxNQUFNLEdBQUdwVCxDQUFDLENBQUN5QixPQUFPLENBQUN1QyxHQUFHLEVBQUUsSUFBSSxDQUFDdUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO01BQ3hELElBQUk2TixNQUFNLEVBQUU7UUFDVixJQUFJLENBQUNKLHFCQUFxQixDQUFDLENBQUM7TUFDOUI7TUFDQSxJQUFJLENBQUNLLE1BQU0sQ0FBQ3JQLEdBQUcsRUFBRUMsS0FBSyxDQUFDO01BQ3ZCLElBQUltUCxNQUFNLEVBQUU7UUFDVixJQUFJLENBQUNFLG1CQUFtQixDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDZCxrQkFBa0IsQ0FBQyxDQUFDO01BQzNCO0lBQ0YsQ0FBQztJQUVEYyxtQkFBbUIsRUFBRSxTQUFBQSxvQkFBQSxFQUFZO01BQy9CLElBQUlyUixPQUFPLEdBQUcsSUFBSSxDQUFDQSxPQUFPO01BQzFCLElBQUlBLE9BQU8sQ0FBQy9CLFNBQVMsS0FBS21DLFNBQVMsRUFBRTtRQUNuQ0osT0FBTyxDQUFDL0IsU0FBUyxHQUFHLElBQUksQ0FBQ21QLE9BQU8sQ0FBQ00sRUFBRSxDQUFDLG9CQUFvQixDQUFDLEdBQ3JELElBQUksQ0FBQ04sT0FBTyxHQUNaLElBQUksQ0FBQ0EsT0FBTyxDQUFDa0UsSUFBSSxDQUFDLG9CQUFvQixDQUFDO01BQzdDLENBQUMsTUFBTSxJQUFJLEVBQUV0UixPQUFPLENBQUMvQixTQUFTLFlBQVlGLENBQUMsQ0FBQyxFQUFFO1FBQzVDaUMsT0FBTyxDQUFDL0IsU0FBUyxHQUFHRixDQUFDLENBQUNpQyxPQUFPLENBQUMvQixTQUFTLENBQUM7TUFDMUM7TUFDQSxJQUFJLEVBQUUrQixPQUFPLENBQUNDLFFBQVEsWUFBWWxDLENBQUMsQ0FBQyxFQUFFO1FBQ3BDaUMsT0FBTyxDQUFDQyxRQUFRLEdBQUdsQyxDQUFDLENBQUNpQyxPQUFPLENBQUNDLFFBQVEsQ0FBQztNQUN4QztNQUNBLElBQUksRUFBRUQsT0FBTyxDQUFDRyxTQUFTLFlBQVlwQyxDQUFDLENBQUMsRUFBRTtRQUNyQ2lDLE9BQU8sQ0FBQ0csU0FBUyxHQUFHcEMsQ0FBQyxDQUFDaUMsT0FBTyxDQUFDRyxTQUFTLENBQUM7TUFDMUM7SUFDRixDQUFDO0lBRURvUixVQUFVLEVBQUUsU0FBQUEsV0FBVUMsR0FBRyxFQUFFO01BQ3pCLElBQUl2TyxLQUFLLEdBQUd1TyxHQUFHLENBQUNwTyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3hCcU8sU0FBUyxHQUFHeE8sS0FBSyxDQUFDeU8sR0FBRyxDQUFDLENBQUM7TUFDekJ6TyxLQUFLLENBQUNxSixLQUFLLENBQUMsQ0FBQztNQUNiLE9BQU8sSUFBSXBPLE1BQU0sQ0FBQytFLEtBQUssQ0FBQzBPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRUYsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFREcsZUFBZSxFQUFFLFNBQUFBLGdCQUFVN1AsR0FBRyxFQUFFQyxLQUFLLEVBQUU7TUFDckMsT0FDRUQsR0FBRyxLQUFLLEtBQUssSUFDYmhFLENBQUMsQ0FBQ29CLElBQUksQ0FBQzZDLEtBQUssQ0FBQyxLQUFLLFFBQVEsSUFDMUIsb0JBQW9CLENBQUM3RCxJQUFJLENBQUM2RCxLQUFLLENBQUM7SUFFcEMsQ0FBQztJQUVENlAsbUJBQW1CLEVBQUUsU0FBQUEsb0JBQUEsRUFBWTtNQUMvQixJQUFJNUwsSUFBSSxHQUFHLElBQUk7UUFDYmpHLE9BQU8sR0FBRyxJQUFJLENBQUNBLE9BQU87UUFDdEJzQyxJQUFJLEdBQUcsSUFBSSxDQUFDOEssT0FBTyxDQUFDOUssSUFBSSxDQUFDLENBQUM7TUFDNUI7TUFDQXZFLENBQUMsQ0FBQytELElBQUksQ0FBQyxJQUFJLENBQUNzTCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMwRSxVQUFVLEVBQUUsVUFBVWxOLEtBQUssRUFBRThELElBQUksRUFBRTtRQUN4RCxJQUFJM0csR0FBRyxHQUFHMkcsSUFBSSxDQUFDbkUsSUFBSSxDQUFDd04sV0FBVyxDQUFDLENBQUM7VUFDL0IvUCxLQUFLO1FBQ1AsSUFBSSxRQUFRLENBQUM3RCxJQUFJLENBQUM0RCxHQUFHLENBQUMsRUFBRTtVQUN0QjtVQUNBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ2hELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ2tELE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVXVQLEdBQUcsRUFBRTtZQUNuRCxPQUFPQSxHQUFHLENBQUNRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3hKLFdBQVcsQ0FBQyxDQUFDO1VBQ3BDLENBQUMsQ0FBQztVQUNGeEcsS0FBSyxHQUFHTSxJQUFJLENBQUNQLEdBQUcsQ0FBQztVQUNqQixJQUFJa0UsSUFBSSxDQUFDMkwsZUFBZSxDQUFDN1AsR0FBRyxFQUFFQyxLQUFLLENBQUMsRUFBRTtZQUNwQ0EsS0FBSyxHQUFHaUUsSUFBSSxDQUFDc0wsVUFBVSxDQUFDdlAsS0FBSyxDQUFDO1VBQ2hDO1VBQ0FoQyxPQUFPLENBQUMrQixHQUFHLENBQUMsR0FBR0MsS0FBSztRQUN0QjtNQUNGLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRGlRLE9BQU8sRUFBRSxTQUFBQSxRQUFBLEVBQVk7TUFDbkIsSUFBSSxDQUFDSixtQkFBbUIsQ0FBQyxDQUFDO01BQzFCLElBQUksQ0FBQ1IsbUJBQW1CLENBQUMsQ0FBQztNQUMxQixJQUFJLENBQUNoRixNQUFNLEdBQUcsRUFBRTtNQUNoQixJQUFJLENBQUNHLFNBQVMsR0FBRyxJQUFJLENBQUNoRCxjQUFjLENBQUMsSUFBSSxDQUFDO01BQzFDLElBQUksQ0FBQzJDLFFBQVEsR0FBRyxJQUFJLENBQUNWLE9BQU8sR0FBRyxDQUFDO01BQ2hDLElBQUksQ0FBQzFHLG1CQUFtQixDQUFDLElBQUksQ0FBQztNQUM5QixJQUFJLENBQUN3TCxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDtJQUNBO0lBQ0EyQixNQUFNLEVBQUUsU0FBQUEsT0FBQSxFQUFZO01BQ2xCLE9BQU8sSUFBSSxDQUFDekcsT0FBTztJQUNyQixDQUFDO0lBRUQ7SUFDQTtJQUNBO0lBQ0E7SUFDQXhHLFFBQVEsRUFBRSxTQUFBQSxTQUFBLEVBQVk7TUFDcEIsT0FBTyxJQUFJLENBQUNDLFNBQVM7SUFDdkIsQ0FBQztJQUVEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E3QyxHQUFHLEVBQUUsU0FBQUEsSUFBVUMsSUFBSSxFQUFFO01BQ25CLElBQUkyRCxJQUFJLEdBQUcsSUFBSTtNQUNmLElBQUksQ0FBQzNELElBQUksSUFBSSxJQUFJLENBQUN0QyxPQUFPLENBQUNtUyxRQUFRLEVBQUU7UUFDbEM7TUFDRjtNQUNBLElBQUk3UCxJQUFJLENBQUNyRSxTQUFTLElBQUksQ0FBQ3FFLElBQUksQ0FBQ29DLEtBQUssRUFBRTtRQUNqQyxJQUFJLENBQUNvTCxrQkFBa0IsQ0FBQ3hOLElBQUksQ0FBQ3JFLFNBQVMsQ0FBQyxDQUFDc0wsTUFBTSxDQUFDLFVBQVU3RSxLQUFLLEVBQUU7VUFDOURwQyxJQUFJLENBQUNvQyxLQUFLLEdBQUdBLEtBQUs7VUFDbEJ1QixJQUFJLENBQUN3RyxNQUFNLENBQUMsSUFBSSxFQUFFbkssSUFBSSxDQUFDO1FBQ3pCLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTTtRQUNMQSxJQUFJLENBQUNvQyxLQUFLLEdBQUczRyxDQUFDLENBQUM0UixTQUFTLENBQUNyTixJQUFJLENBQUNvQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDK0gsTUFBTSxDQUFDLElBQUksRUFBRW5LLElBQUksQ0FBQztNQUN6QjtJQUNGLENBQUM7SUFFRDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E0SixJQUFJLEVBQUUsU0FBQUEsS0FBVTVKLElBQUksRUFBRTtNQUNwQixJQUFJQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUN0QyxPQUFPLENBQUNtUyxRQUFRLEVBQUU7UUFDbEMsSUFBSTdQLElBQUksQ0FBQ3JFLFNBQVMsSUFBSSxDQUFDcUUsSUFBSSxDQUFDb0MsS0FBSyxFQUFFO1VBQ2pDLElBQUl1QixJQUFJLEdBQUcsSUFBSTtZQUNiMEQsR0FBRyxHQUFHNUwsQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUM7WUFDbEJWLE9BQU8sR0FBR1MsR0FBRyxDQUFDVCxPQUFPLENBQUMsQ0FBQztZQUN2Qm9CLEtBQUs7WUFDTHlCLE9BQU87VUFDVDdDLE9BQU8sQ0FBQ2EsS0FBSyxHQUFHLFlBQVk7WUFDMUJnQyxPQUFPLEdBQUcsSUFBSTtZQUNkLElBQUl6QixLQUFLLEVBQUU7Y0FDVCxPQUFPQSxLQUFLLENBQUNQLEtBQUssQ0FBQyxDQUFDO1lBQ3RCO1lBQ0FKLEdBQUcsQ0FBQ3lJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUNsQyxPQUFPbEosT0FBTztVQUNoQixDQUFDO1VBQ0QsSUFBSSxDQUFDNEcsa0JBQWtCLENBQUN4TixJQUFJLENBQUNyRSxTQUFTLENBQUMsQ0FBQ3NMLE1BQU0sQ0FBQyxVQUFVN0UsS0FBSyxFQUFFO1lBQzlELElBQUlxSCxPQUFPLEVBQUU7Y0FDWDtZQUNGO1lBQ0EsSUFBSSxDQUFDckgsS0FBSyxDQUFDMkQsTUFBTSxFQUFFO2NBQ2pCc0IsR0FBRyxDQUFDeUksTUFBTSxDQUFDLENBQUM7Y0FDWjtZQUNGO1lBQ0E5UCxJQUFJLENBQUNvQyxLQUFLLEdBQUdBLEtBQUs7WUFDbEI0RixLQUFLLEdBQUdyRSxJQUFJLENBQUNzRSxPQUFPLENBQUMsSUFBSSxFQUFFakksSUFBSSxDQUFDO1lBQ2hDZ0ksS0FBSyxDQUFDK0gsSUFBSSxDQUNSLFVBQVUvRyxNQUFNLEVBQUVDLFVBQVUsRUFBRWpCLEtBQUssRUFBRTtjQUNuQ1gsR0FBRyxDQUFDNEMsT0FBTyxDQUFDakIsTUFBTSxFQUFFQyxVQUFVLEVBQUVqQixLQUFLLENBQUM7WUFDeEMsQ0FBQyxFQUNELFVBQVVBLEtBQUssRUFBRWlCLFVBQVUsRUFBRWxCLFdBQVcsRUFBRTtjQUN4Q1YsR0FBRyxDQUFDeUksTUFBTSxDQUFDOUgsS0FBSyxFQUFFaUIsVUFBVSxFQUFFbEIsV0FBVyxDQUFDO1lBQzVDLENBQ0YsQ0FBQztVQUNILENBQUMsQ0FBQztVQUNGLE9BQU8sSUFBSSxDQUFDcEIsZUFBZSxDQUFDQyxPQUFPLENBQUM7UUFDdEM7UUFDQTVHLElBQUksQ0FBQ29DLEtBQUssR0FBRzNHLENBQUMsQ0FBQzRSLFNBQVMsQ0FBQ3JOLElBQUksQ0FBQ29DLEtBQUssQ0FBQztRQUNwQyxJQUFJcEMsSUFBSSxDQUFDb0MsS0FBSyxDQUFDMkQsTUFBTSxFQUFFO1VBQ3JCLE9BQU8sSUFBSSxDQUFDa0MsT0FBTyxDQUFDLElBQUksRUFBRWpJLElBQUksQ0FBQztRQUNqQztNQUNGO01BQ0EsT0FBTyxJQUFJLENBQUNrSCxjQUFjLENBQUMsS0FBSyxFQUFFbEgsSUFBSSxJQUFJQSxJQUFJLENBQUNWLE9BQU8sQ0FBQztJQUN6RDtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQzs7QUNua0RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLENBQUMsVUFBVXJFLE9BQU8sRUFBRTtFQUNsQixZQUFZOztFQUNaLElBQUksT0FBT0MsTUFBTSxLQUFLLFVBQVUsSUFBSUEsTUFBTSxDQUFDQyxHQUFHLEVBQUU7SUFDOUM7SUFDQUQsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUVELE9BQU8sQ0FBQztFQUM3QixDQUFDLE1BQU0sSUFBSSxRQUFPRyxPQUFPLGlDQUFBQyxPQUFBLENBQVBELE9BQU8sT0FBSyxRQUFRLEVBQUU7SUFDdEM7SUFDQUgsT0FBTyxDQUFDSyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7RUFDNUIsQ0FBQyxNQUFNO0lBQ0w7SUFDQUwsT0FBTyxDQUFDTSxNQUFNLENBQUNDLE1BQU0sQ0FBQztFQUN4QjtBQUNGLENBQUMsRUFBRSxVQUFVQyxDQUFDLEVBQUU7RUFDZCxZQUFZOztFQUVaO0VBQ0EsSUFBSXVVLE9BQU8sR0FBRyxDQUFDO0lBQ2JDLE9BQU8sR0FBR3hVLENBQUM7SUFDWHlVLFNBQVMsR0FBRyxXQUFXO0VBRXpCLElBQUksTUFBTSxJQUFJM1UsTUFBTSxJQUFJLE9BQU8sSUFBSTRVLElBQUksRUFBRTtJQUN2Q0YsT0FBTyxHQUFHRSxJQUFJO0lBQ2RELFNBQVMsR0FBRyxPQUFPO0VBQ3JCOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0F6VSxDQUFDLENBQUMyVSxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVUxUyxPQUFPLEVBQUU7SUFDM0MsSUFBSUEsT0FBTyxDQUFDMlMsS0FBSyxFQUFFO01BQ2pCO01BQ0E7TUFDQTtNQUNBLElBQUlDLGdCQUFnQixHQUFHNVMsT0FBTyxDQUFDNFMsZ0JBQWdCLElBQUksbUJBQW1CO1FBQ3BFelEsSUFBSTtRQUNKMFEsTUFBTTtRQUNOQyxZQUFZO01BQ2QsT0FBTztRQUNMNUcsSUFBSSxFQUFFLFNBQUFBLEtBQVVyRixDQUFDLEVBQUVrTSxnQkFBZ0IsRUFBRTtVQUNuQzVRLElBQUksR0FBR3BFLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQztVQUMvQ29FLElBQUksQ0FBQ3VHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTFJLE9BQU8sQ0FBQ3lJLGlCQUFpQixDQUFDO1VBQ3REcUssWUFBWSxHQUFHLElBQUksQ0FBQzNVLElBQUksQ0FBQzZCLE9BQU8sQ0FBQzRILEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHO1VBQ2pEO1VBQ0EsSUFBSTVILE9BQU8sQ0FBQ2IsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM3QmEsT0FBTyxDQUFDNEgsR0FBRyxHQUFHNUgsT0FBTyxDQUFDNEgsR0FBRyxHQUFHa0wsWUFBWSxHQUFHLGdCQUFnQjtZQUMzRDlTLE9BQU8sQ0FBQ2IsSUFBSSxHQUFHLE1BQU07VUFDdkIsQ0FBQyxNQUFNLElBQUlhLE9BQU8sQ0FBQ2IsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNqQ2EsT0FBTyxDQUFDNEgsR0FBRyxHQUFHNUgsT0FBTyxDQUFDNEgsR0FBRyxHQUFHa0wsWUFBWSxHQUFHLGFBQWE7WUFDeEQ5UyxPQUFPLENBQUNiLElBQUksR0FBRyxNQUFNO1VBQ3ZCLENBQUMsTUFBTSxJQUFJYSxPQUFPLENBQUNiLElBQUksS0FBSyxPQUFPLEVBQUU7WUFDbkNhLE9BQU8sQ0FBQzRILEdBQUcsR0FBRzVILE9BQU8sQ0FBQzRILEdBQUcsR0FBR2tMLFlBQVksR0FBRyxlQUFlO1lBQzFEOVMsT0FBTyxDQUFDYixJQUFJLEdBQUcsTUFBTTtVQUN2QjtVQUNBO1VBQ0E7VUFDQTtVQUNBbVQsT0FBTyxJQUFJLENBQUM7VUFDWk8sTUFBTSxHQUFHOVUsQ0FBQyxDQUNSLGVBQWUsR0FDYjZVLGdCQUFnQixHQUNoQiwyQkFBMkIsR0FDM0JOLE9BQU8sR0FDUCxhQUNKLENBQUMsQ0FBQ2pNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsWUFBWTtZQUN2QixJQUFJMk0sZUFBZTtjQUNqQkMsVUFBVSxHQUFHbFYsQ0FBQyxDQUFDdUcsT0FBTyxDQUFDdEUsT0FBTyxDQUFDTSxTQUFTLENBQUMsR0FDckNOLE9BQU8sQ0FBQ00sU0FBUyxHQUNqQixDQUFDTixPQUFPLENBQUNNLFNBQVMsQ0FBQztZQUN6QnVTLE1BQU0sQ0FBQ3JNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQ0gsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZO2NBQ3hDLElBQUlvRSxRQUFRO2NBQ1o7Y0FDQTtjQUNBLElBQUk7Z0JBQ0ZBLFFBQVEsR0FBR29JLE1BQU0sQ0FBQ0ssUUFBUSxDQUFDLENBQUM7Z0JBQzVCO2dCQUNBO2dCQUNBO2dCQUNBLElBQUksQ0FBQ3pJLFFBQVEsQ0FBQ3BDLE1BQU0sSUFBSSxDQUFDb0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDMEksVUFBVSxFQUFFO2tCQUMvQyxNQUFNLElBQUlDLEtBQUssQ0FBQyxDQUFDO2dCQUNuQjtjQUNGLENBQUMsQ0FBQyxPQUFPL1QsQ0FBQyxFQUFFO2dCQUNWb0wsUUFBUSxHQUFHckssU0FBUztjQUN0QjtjQUNBO2NBQ0E7Y0FDQTJTLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUU7Z0JBQUVGLE1BQU0sRUFBRXBJO2NBQVMsQ0FBQyxDQUFDO2NBQ3REO2NBQ0E7Y0FDQTFNLENBQUMsQ0FBQyxlQUFlLEdBQUc2VSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsQ0FBQ1MsUUFBUSxDQUM1RGxSLElBQ0YsQ0FBQztjQUNEdEUsTUFBTSxDQUFDeVYsVUFBVSxDQUFDLFlBQVk7Z0JBQzVCO2dCQUNBO2dCQUNBO2dCQUNBblIsSUFBSSxDQUFDb1IsTUFBTSxDQUFDLENBQUM7Y0FDZixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDO1lBQ0ZwUixJQUFJLENBQ0Q3RCxJQUFJLENBQUMsUUFBUSxFQUFFdVUsTUFBTSxDQUFDdlUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ25DQSxJQUFJLENBQUMsUUFBUSxFQUFFMEIsT0FBTyxDQUFDNEgsR0FBRyxDQUFDLENBQzNCdEosSUFBSSxDQUFDLFFBQVEsRUFBRTBCLE9BQU8sQ0FBQ2IsSUFBSSxDQUFDO1lBQy9CLElBQUlhLE9BQU8sQ0FBQ2tDLFFBQVEsRUFBRTtjQUNwQm5FLENBQUMsQ0FBQytELElBQUksQ0FBQzlCLE9BQU8sQ0FBQ2tDLFFBQVEsRUFBRSxVQUFVMEMsS0FBSyxFQUFFMkMsS0FBSyxFQUFFO2dCQUMvQ3hKLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUN4Qk8sSUFBSSxDQUFDLE1BQU0sRUFBRWlKLEtBQUssQ0FBQ2hELElBQUksQ0FBQyxDQUN4QmlQLEdBQUcsQ0FBQ2pNLEtBQUssQ0FBQ3ZGLEtBQUssQ0FBQyxDQUNoQnFSLFFBQVEsQ0FBQ2xSLElBQUksQ0FBQztjQUNuQixDQUFDLENBQUM7WUFDSjtZQUNBLElBQ0VuQyxPQUFPLENBQUMvQixTQUFTLElBQ2pCK0IsT0FBTyxDQUFDL0IsU0FBUyxDQUFDb0ssTUFBTSxJQUN4QnJJLE9BQU8sQ0FBQ2IsSUFBSSxLQUFLLE1BQU0sRUFDdkI7Y0FDQTZULGVBQWUsR0FBR2hULE9BQU8sQ0FBQy9CLFNBQVMsQ0FBQ3VQLEtBQUssQ0FBQyxDQUFDO2NBQzNDO2NBQ0F4TixPQUFPLENBQUMvQixTQUFTLENBQUM2UCxLQUFLLENBQUMsVUFBVWxKLEtBQUssRUFBRTtnQkFDdkMsT0FBT29PLGVBQWUsQ0FBQ3BPLEtBQUssQ0FBQztjQUMvQixDQUFDLENBQUM7Y0FDRixJQUFJNUUsT0FBTyxDQUFDTSxTQUFTLEVBQUU7Z0JBQ3JCTixPQUFPLENBQUMvQixTQUFTLENBQUM2RCxJQUFJLENBQUMsVUFBVThDLEtBQUssRUFBRTtrQkFDdEM3RyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNPLElBQUksQ0FBQyxNQUFNLEVBQUUyVSxVQUFVLENBQUNyTyxLQUFLLENBQUMsSUFBSTVFLE9BQU8sQ0FBQ00sU0FBUyxDQUFDO2dCQUM5RCxDQUFDLENBQUM7Y0FDSjtjQUNBO2NBQ0E7Y0FDQTZCLElBQUksQ0FDRHFGLE1BQU0sQ0FBQ3hILE9BQU8sQ0FBQy9CLFNBQVMsQ0FBQyxDQUN6QkssSUFBSSxDQUFDLFNBQVMsRUFBRSxxQkFBcUI7Y0FDdEM7Y0FBQSxDQUNDQSxJQUFJLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDO2NBQzFDO2NBQ0EwQixPQUFPLENBQUMvQixTQUFTLENBQUN3VixVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3RDO1lBQ0E1VixNQUFNLENBQUN5VixVQUFVLENBQUMsWUFBWTtjQUM1QjtjQUNBO2NBQ0E7Y0FDQTtjQUNBblIsSUFBSSxDQUFDUSxNQUFNLENBQUMsQ0FBQztjQUNiO2NBQ0E7Y0FDQSxJQUFJcVEsZUFBZSxJQUFJQSxlQUFlLENBQUMzSyxNQUFNLEVBQUU7Z0JBQzdDckksT0FBTyxDQUFDL0IsU0FBUyxDQUFDNkQsSUFBSSxDQUFDLFVBQVU4QyxLQUFLLEVBQUV1RCxLQUFLLEVBQUU7a0JBQzdDLElBQUlxRixLQUFLLEdBQUd6UCxDQUFDLENBQUNpVixlQUFlLENBQUNwTyxLQUFLLENBQUMsQ0FBQztrQkFDckM7a0JBQ0E3RyxDQUFDLENBQUNvSyxLQUFLLENBQUMsQ0FDTDdKLElBQUksQ0FBQyxNQUFNLEVBQUVrUCxLQUFLLENBQUNsUCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDaENvSyxJQUFJLENBQUMsTUFBTSxFQUFFOEUsS0FBSyxDQUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2tCQUNuQzhFLEtBQUssQ0FBQ2tHLFdBQVcsQ0FBQ3ZMLEtBQUssQ0FBQztnQkFDMUIsQ0FBQyxDQUFDO2NBQ0o7WUFDRixDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ1AsQ0FBQyxDQUFDO1VBQ0ZoRyxJQUFJLENBQUNxRixNQUFNLENBQUNxTCxNQUFNLENBQUMsQ0FBQ1EsUUFBUSxDQUFDblQsUUFBUSxDQUFDeVQsSUFBSSxDQUFDO1FBQzdDLENBQUM7UUFDRDVKLEtBQUssRUFBRSxTQUFBQSxNQUFBLEVBQVk7VUFDakIsSUFBSThJLE1BQU0sRUFBRTtZQUNWO1lBQ0E7WUFDQUEsTUFBTSxDQUFDck0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDbEksSUFBSSxDQUFDLEtBQUssRUFBRXNVLGdCQUFnQixDQUFDO1VBQ2xEO1VBQ0EsSUFBSXpRLElBQUksRUFBRTtZQUNSQSxJQUFJLENBQUNvUixNQUFNLENBQUMsQ0FBQztVQUNmO1FBQ0Y7TUFDRixDQUFDO0lBQ0g7RUFDRixDQUFDLENBQUM7O0VBRUY7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQXhWLENBQUMsQ0FBQzZWLFNBQVMsQ0FBQztJQUNWQyxVQUFVLEVBQUU7TUFDVixhQUFhLEVBQUUsU0FBQUMsV0FBVWpCLE1BQU0sRUFBRTtRQUMvQixPQUFPQSxNQUFNLElBQUk5VSxDQUFDLENBQUM4VSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUNjLElBQUksQ0FBQyxDQUFDSSxJQUFJLENBQUMsQ0FBQztNQUMzQyxDQUFDO01BQ0QsYUFBYSxFQUFFLFNBQUFDLFdBQVVuQixNQUFNLEVBQUU7UUFDL0IsT0FBT0EsTUFBTSxJQUFJTixPQUFPLENBQUNDLFNBQVMsQ0FBQyxDQUFDelUsQ0FBQyxDQUFDOFUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDYyxJQUFJLENBQUMsQ0FBQ0ksSUFBSSxDQUFDLENBQUMsQ0FBQztNQUMvRCxDQUFDO01BQ0QsYUFBYSxFQUFFLFNBQUFFLFdBQVVwQixNQUFNLEVBQUU7UUFDL0IsT0FBT0EsTUFBTSxJQUFJOVUsQ0FBQyxDQUFDOFUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDYyxJQUFJLENBQUMsQ0FBQ08sSUFBSSxDQUFDLENBQUM7TUFDM0MsQ0FBQztNQUNELFlBQVksRUFBRSxTQUFBQyxVQUFVdEIsTUFBTSxFQUFFO1FBQzlCLElBQUl1QixNQUFNLEdBQUd2QixNQUFNLElBQUlBLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBT3VCLE1BQU0sSUFBSXJXLENBQUMsQ0FBQ3NXLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEdBQy9CQSxNQUFNLEdBQ05yVyxDQUFDLENBQUN1VyxRQUFRLENBQ1BGLE1BQU0sQ0FBQ0csV0FBVyxJQUFJSCxNQUFNLENBQUNHLFdBQVcsQ0FBQ0MsR0FBRyxJQUMzQ3pXLENBQUMsQ0FBQ3FXLE1BQU0sQ0FBQ1QsSUFBSSxDQUFDLENBQUNPLElBQUksQ0FBQyxDQUN4QixDQUFDO01BQ1AsQ0FBQztNQUNELGVBQWUsRUFBRSxTQUFBTyxhQUFVNUIsTUFBTSxFQUFFO1FBQ2pDLE9BQU9BLE1BQU0sSUFBSTlVLENBQUMsQ0FBQzJXLFVBQVUsQ0FBQzNXLENBQUMsQ0FBQzhVLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ2MsSUFBSSxDQUFDLENBQUNJLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDekQ7SUFDRjtFQUNGLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQzs7QUNsT0YsU0FBU1ksVUFBVUEsQ0FBQSxFQUFHO0VBQ2xCLElBQUksUUFBT0MsTUFBTSxpQ0FBQWpYLE9BQUEsQ0FBTmlYLE1BQU0sT0FBSyxRQUFRLElBQUksT0FBT0EsTUFBTSxDQUFDRCxVQUFVLEtBQUssVUFBVSxFQUFFO0lBQ3ZFLE9BQU9DLE1BQU0sQ0FBQ0QsVUFBVSxDQUFDLENBQUM7RUFDOUI7RUFFQSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRTFTLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBQTRTLENBQUM7SUFBQSxPQUMzRCxDQUFDQSxDQUFDLEdBQUdELE1BQU0sQ0FBQ0UsZUFBZSxDQUFDLElBQUlDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSUYsQ0FBQyxHQUFHLENBQUMsRUFBRWhULFFBQVEsQ0FBQyxFQUFFLENBQUM7RUFBQSxDQUNqRixDQUFDO0FBQ0w7Ozs7Ozs7QUNSQSxJQUFJbVQsV0FBVztBQUNmLElBQUlDLFFBQVE7QUFFWixJQUFJQyxHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7QUFFbkIsU0FBU0MsMEJBQTBCQSxDQUFDQyx1QkFBdUIsRUFBRUMsbUJBQW1CLEVBQUVDLFFBQVEsRUFBRTtFQUV4RixJQUFJUCxXQUFXLEVBQUU7SUFDYjtFQUNKO0VBRUFBLFdBQVcsR0FBRyxJQUFJO0VBRWxCLElBQUksQ0FBQ00sbUJBQW1CLEVBQUU7SUFDdEJFLE9BQU8sQ0FBQ3BNLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQztFQUNoRTtFQUVBckwsQ0FBQyxDQUFDc04sSUFBSSxDQUFDO0lBQ0h6RCxHQUFHLEVBQUUwTixtQkFBbUI7SUFDeEJHLE1BQU0sRUFBRSxLQUFLO0lBQ2J0TSxPQUFPLEVBQUUsU0FBQUEsUUFBVXVNLE9BQU8sRUFBRTtNQUN4QjNYLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQ3lKLE1BQU0sQ0FBQ2tPLE9BQU8sQ0FBQztNQUVoQzNYLENBQUMsQ0FBQ21DLFFBQVEsQ0FBQyxDQUFDOE4sT0FBTyxDQUFDLHdCQUF3QixDQUFDO01BRTdDLElBQUkySCxLQUFJLEdBQUc7UUFDUHBSLElBQUksRUFBRXhHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDZ1csSUFBSSxDQUFDLENBQUM7UUFDakMxRixJQUFJLEVBQUUsRUFBRTtRQUNSdUgsTUFBTSxFQUFFLEVBQUU7UUFDVjNHLFdBQVcsRUFBRTtNQUNqQixDQUFDO01BRURnRyxRQUFRLEdBQUcsSUFBSUUsR0FBRyxDQUFDO1FBQ2ZqSCxFQUFFLEVBQUUsV0FBVztRQUNmNUwsSUFBSSxFQUFFO1VBQ0Z1VCxjQUFjLEVBQUUsQ0FBQyxDQUFDO1VBQ2xCQyxVQUFVLEVBQUUsRUFBRTtVQUNkQyxjQUFjLEVBQUUsRUFBRTtVQUNsQkMsTUFBTSxFQUFFLEVBQUU7VUFDVkMsaUJBQWlCLEVBQUUsSUFBSUMsS0FBSyxDQUFDLENBQUM7VUFDOUJDLFdBQVcsRUFBRSxLQUFLO1VBQ2xCQyxRQUFRLEVBQUUsS0FBSztVQUNmQyxXQUFXLEVBQUUsRUFBRTtVQUNmQyxNQUFNLEVBQUUsRUFBRTtVQUNWQyxPQUFPLEVBQUUsSUFBSTtVQUNiQyxXQUFXLEVBQUU7UUFDakIsQ0FBQztRQUNEQyxPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO1VBQ2pCLElBQUlDLElBQUksR0FBRyxJQUFJO1VBRWZBLElBQUksQ0FBQ1QsaUJBQWlCLENBQUNVLEdBQUcsR0FBRyxDQUFDcEIsUUFBUSxJQUFJLEVBQUUsSUFBSSw4Q0FBOEM7VUFFOUZMLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVaEIsTUFBTSxFQUFFO1lBQ3hDYyxJQUFJLENBQUNiLGNBQWMsR0FBR0QsTUFBTTtVQUNoQyxDQUFDLENBQUM7VUFFRlYsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLGVBQWUsRUFBRSxZQUFZO1lBQ2pDRixJQUFJLENBQUNHLFVBQVUsQ0FBQyxDQUFDO1VBQ3JCLENBQUMsQ0FBQztVQUVGM0IsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVaEIsTUFBTSxFQUFFO1lBQ3JDYyxJQUFJLENBQUNiLGNBQWMsR0FBR0QsTUFBTTtZQUM1QkEsTUFBTSxDQUFDa0IsUUFBUSxHQUFHLElBQUk7VUFDMUIsQ0FBQyxDQUFDO1VBRUY1QixHQUFHLENBQUMwQixHQUFHLENBQUMsZ0JBQWdCLEVBQUUsVUFBVUcsU0FBUyxFQUFFO1lBQzNDTCxJQUFJLENBQUNNLFVBQVUsQ0FBQ04sSUFBSSxDQUFDYixjQUFjLENBQUM7WUFDcEMsSUFBSWtCLFNBQVMsRUFBRTtjQUNYTCxJQUFJLENBQUNWLE1BQU0sQ0FBQ3hSLElBQUksQ0FBQ3VTLFNBQVMsQ0FBQztZQUMvQjtVQUNKLENBQUMsQ0FBQztVQUVGN0IsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxVQUFVSyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsT0FBTyxFQUFFO1lBQ3pELElBQUlDLEtBQUssR0FBR1YsSUFBSSxDQUFDWixVQUFVLENBQUN1QixNQUFNLENBQUMsVUFBVTVILElBQUksRUFBRTtjQUMvQyxPQUFPQSxJQUFJLENBQUM2SCxTQUFTLEtBQUtILE9BQU87WUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRUxDLEtBQUssQ0FBQ0UsU0FBUyxHQUFHSixPQUFPO1lBQ3pCRSxLQUFLLENBQUM3UyxJQUFJLEdBQUcwUyxPQUFPO1VBQ3hCLENBQUMsQ0FBQztVQUVGL0IsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLHVCQUF1QixFQUFFLFVBQVVRLEtBQUssRUFBRTtZQUM5Q1YsSUFBSSxDQUFDYSxZQUFZLENBQUMsQ0FBQztVQUN2QixDQUFDLENBQUM7VUFFRnJDLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxVQUFVUSxLQUFLLEVBQUU7WUFDOUNWLElBQUksQ0FBQ2MsWUFBWSxDQUFDLENBQUM7VUFDdkIsQ0FBQyxDQUFDOztVQUVGO1VBQ0F0QyxHQUFHLENBQUMwQixHQUFHLENBQUMscUJBQXFCLEVBQUUsVUFBVWEsT0FBTyxFQUFFO1lBQzlDZixJQUFJLENBQUNnQixVQUFVLENBQUNELE9BQU8sQ0FBQztVQUM1QixDQUFDLENBQUM7VUFFRnZDLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVUSxLQUFLLEVBQUU7WUFDN0NWLElBQUksQ0FBQ2lCLHNCQUFzQixDQUFDUCxLQUFLLENBQUM7VUFDdEMsQ0FBQyxDQUFDO1VBRUZsQyxHQUFHLENBQUMwQixHQUFHLENBQUMsc0JBQXNCLEVBQUUsVUFBVVEsS0FBSyxFQUFFO1lBQzdDVixJQUFJLENBQUNrQixXQUFXLENBQUNSLEtBQUssQ0FBQztVQUMzQixDQUFDLENBQUM7VUFFRmxDLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVUSxLQUFLLEVBQUU7WUFDN0NWLElBQUksQ0FBQ21CLGVBQWUsQ0FBQ1QsS0FBSyxDQUFDO1VBQy9CLENBQUMsQ0FBQztVQUVGbEMsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLHlCQUF5QixFQUFFLFVBQVVRLEtBQUssRUFBRS9YLENBQUMsRUFBRTtZQUNuRHFYLElBQUksQ0FBQ29CLGVBQWUsQ0FBQ1YsS0FBSyxFQUFFL1gsQ0FBQyxDQUFDO1VBQ2xDLENBQUMsQ0FBQzs7VUFHRjtVQUNBNlYsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVSixXQUFXLEVBQUU7WUFDekNFLElBQUksQ0FBQ0YsV0FBVyxHQUFHQSxXQUFXO1lBQzlCRSxJQUFJLENBQUNYLGNBQWMsR0FBRyxFQUFFO1VBQzVCLENBQUMsQ0FBQztVQUVGLElBQUksQ0FBQ2dDLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDaER0QixJQUFJLENBQUNiLGNBQWMsR0FBR0YsS0FBSTtZQUMxQjtVQUNKO1VBRUFlLElBQUksQ0FBQ3VCLFlBQVksR0FBR3hGLElBQUksQ0FBQ3lGLEtBQUssQ0FBQ0gsWUFBWSxDQUFDQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBQ0RHLFFBQVEsRUFBRTtVQUNOQyxNQUFNLEVBQUUsU0FBQUEsT0FBQSxFQUFZO1lBQ2hCLE9BQU8sSUFBSSxDQUFDdkMsY0FBYyxJQUFJRixLQUFJO1VBQ3RDLENBQUM7VUFDRDBDLE9BQU8sRUFBRSxTQUFBQSxRQUFBLEVBQVk7WUFDakIsSUFBSUMsQ0FBQyxHQUFHLEVBQUU7WUFDVkMsWUFBWSxHQUFHLElBQUksQ0FBQzFDLGNBQWM7WUFDbEMsT0FBTzBDLFlBQVksSUFBSUEsWUFBWSxDQUFDbEssSUFBSSxJQUFJLEVBQUUsRUFBRTtjQUM1Q2lLLENBQUMsQ0FBQ0UsT0FBTyxDQUFDRCxZQUFZLENBQUM7Y0FDdkJBLFlBQVksR0FBR0EsWUFBWSxDQUFDRSxNQUFNO1lBQ3RDO1lBQ0EsT0FBT0gsQ0FBQztVQUNaLENBQUM7VUFDRDNDLElBQUksRUFBRSxTQUFBQSxLQUFBLEVBQVk7WUFDZCxPQUFPQSxLQUFJO1VBQ2YsQ0FBQztVQUNEK0Msa0JBQWtCLEVBQUUsU0FBQUEsbUJBQUEsRUFBWTtZQUM1QixJQUFJaEMsSUFBSSxHQUFHLElBQUk7WUFFZkEsSUFBSSxDQUFDWCxjQUFjLEdBQUcsRUFBRTtZQUV4QixJQUFJNEMsUUFBUSxHQUFHakMsSUFBSSxDQUFDWixVQUFVLENBQUN1QixNQUFNLENBQUMsVUFBVTVILElBQUksRUFBRTtjQUNsRCxPQUFPQSxJQUFJLENBQUNsTCxJQUFJLENBQUN3TixXQUFXLENBQUMsQ0FBQyxDQUFDNkcsT0FBTyxDQUFDbEMsSUFBSSxDQUFDTCxXQUFXLENBQUN0RSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1lBQ2hGLENBQUMsQ0FBQztZQUVGLFFBQVEyRSxJQUFJLENBQUNKLE1BQU07Y0FDZixLQUFLLE1BQU07Z0JBQ1BxQyxRQUFRLENBQUNFLElBQUksQ0FBQyxVQUFVQyxDQUFDLEVBQUVDLENBQUMsRUFBRTtrQkFDMUIsT0FBT3JDLElBQUksQ0FBQ0gsT0FBTyxHQUFHdUMsQ0FBQyxDQUFDaFUsSUFBSSxHQUFHaVUsQ0FBQyxDQUFDalUsSUFBSSxHQUFHaVUsQ0FBQyxDQUFDalUsSUFBSSxHQUFHZ1UsQ0FBQyxDQUFDaFUsSUFBSTtnQkFDM0QsQ0FBQyxDQUFDO2dCQUNGO2NBQ0osS0FBSyxNQUFNO2dCQUNQNlQsUUFBUSxDQUFDRSxJQUFJLENBQUMsVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7a0JBQzFCLE9BQU9yQyxJQUFJLENBQUNILE9BQU8sR0FBR3VDLENBQUMsQ0FBQ0UsSUFBSSxDQUFDakgsV0FBVyxDQUFDLENBQUMsQ0FBQ2tILGFBQWEsQ0FBQ0YsQ0FBQyxDQUFDQyxJQUFJLENBQUNqSCxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdnSCxDQUFDLENBQUNDLElBQUksQ0FBQ2pILFdBQVcsQ0FBQyxDQUFDLENBQUNrSCxhQUFhLENBQUNILENBQUMsQ0FBQ0UsSUFBSSxDQUFDakgsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDN0ksQ0FBQyxDQUFDO2dCQUNGO2NBQ0osS0FBSyxZQUFZO2dCQUNiNEcsUUFBUSxDQUFDRSxJQUFJLENBQUMsVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7a0JBQzFCLE9BQU9yQyxJQUFJLENBQUNILE9BQU8sR0FBR3VDLENBQUMsQ0FBQ0ksVUFBVSxHQUFHSCxDQUFDLENBQUNHLFVBQVUsR0FBR0gsQ0FBQyxDQUFDRyxVQUFVLEdBQUdKLENBQUMsQ0FBQ0ksVUFBVTtnQkFDbkYsQ0FBQyxDQUFDO2dCQUNGO2NBQ0o7Z0JBQ0lQLFFBQVEsQ0FBQ0UsSUFBSSxDQUFDLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO2tCQUMxQixPQUFPckMsSUFBSSxDQUFDSCxPQUFPLEdBQUd1QyxDQUFDLENBQUN2VSxJQUFJLENBQUN3TixXQUFXLENBQUMsQ0FBQyxDQUFDa0gsYUFBYSxDQUFDRixDQUFDLENBQUN4VSxJQUFJLENBQUN3TixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUdnSCxDQUFDLENBQUN4VSxJQUFJLENBQUN3TixXQUFXLENBQUMsQ0FBQyxDQUFDa0gsYUFBYSxDQUFDSCxDQUFDLENBQUN2VSxJQUFJLENBQUN3TixXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUM3SSxDQUFDLENBQUM7WUFDVjtZQUVBLE9BQU80RyxRQUFRO1VBQ25CLENBQUM7VUFDRFEsV0FBVyxFQUFFLFNBQUFBLFlBQUEsRUFBWTtZQUNyQixJQUFJN04sTUFBTSxHQUFHLENBQUM7WUFDZEEsTUFBTSxHQUFHLElBQUksQ0FBQ3dLLFVBQVUsQ0FBQ3pOLE1BQU0sR0FBRyxJQUFJLENBQUNxUSxrQkFBa0IsQ0FBQ3JRLE1BQU07WUFDaEUsT0FBT2lELE1BQU07VUFDakIsQ0FBQztVQUNEOE4sU0FBUyxFQUFFLFNBQUFBLFVBQUEsRUFBWTtZQUNuQixPQUFPLElBQUksQ0FBQ2pELFdBQVcsR0FBRyxHQUFHLEdBQUcsR0FBRztVQUN2QyxDQUFDO1VBQ0Q4QixZQUFZLEVBQUU7WUFDVm9CLEdBQUcsRUFBRSxTQUFBQSxJQUFBLEVBQVk7Y0FDYixPQUFPO2dCQUNIbEQsV0FBVyxFQUFFLElBQUksQ0FBQ0EsV0FBVztnQkFDN0JOLGNBQWMsRUFBRSxJQUFJLENBQUNBLGNBQWM7Z0JBQ25DTyxRQUFRLEVBQUUsSUFBSSxDQUFDQTtjQUNuQixDQUFDO1lBQ0wsQ0FBQztZQUNEa0QsR0FBRyxFQUFFLFNBQUFBLElBQVVDLFFBQVEsRUFBRTtjQUNyQixJQUFJLENBQUNBLFFBQVEsRUFBRTtnQkFDWDtjQUNKO2NBRUEsSUFBSSxDQUFDcEQsV0FBVyxHQUFHb0QsUUFBUSxDQUFDcEQsV0FBVztjQUN2QyxJQUFJLENBQUNOLGNBQWMsR0FBRzBELFFBQVEsQ0FBQzFELGNBQWM7Y0FDN0MsSUFBSSxDQUFDTyxRQUFRLEdBQUdtRCxRQUFRLENBQUNuRCxRQUFRO1lBQ3JDO1VBQ0o7UUFDSixDQUFDO1FBQ0RvRCxLQUFLLEVBQUU7VUFDSHZCLFlBQVksRUFBRSxTQUFBQSxhQUFVc0IsUUFBUSxFQUFFO1lBQzlCeEIsWUFBWSxDQUFDMEIsT0FBTyxDQUFDLHVCQUF1QixFQUFFaEgsSUFBSSxDQUFDaUgsU0FBUyxDQUFDSCxRQUFRLENBQUMsQ0FBQztVQUMzRSxDQUFDO1VBQ0QxRCxjQUFjLEVBQUUsU0FBQUEsZUFBVThELFNBQVMsRUFBRTtZQUNqQyxJQUFJLENBQUN0RCxXQUFXLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUNSLGNBQWMsR0FBRzhELFNBQVM7WUFDL0IsSUFBSSxDQUFDM0MsVUFBVSxDQUFDMkMsU0FBUyxDQUFDO1VBQzlCO1FBRUosQ0FBQztRQUNEQyxPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO1VBQ2pCLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxVQUFVLENBQUNDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDREMsT0FBTyxFQUFFO1VBQ0xDLFNBQVMsRUFBRSxTQUFBQSxVQUFBLEVBQVk7WUFFbkIsSUFBSSxDQUFDLElBQUksQ0FBQ3BFLGNBQWMsRUFBRTtjQUN0QixPQUFPLElBQUk7WUFDZjtZQUVBLElBQUlxRSxRQUFRLEdBQUduYyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztZQUV0QyxPQUFPMEcsUUFBUSxJQUFJQSxRQUFRLENBQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBR3VCLGtCQUFrQixDQUFDLElBQUksQ0FBQ3RFLGNBQWMsQ0FBQ3hILElBQUksQ0FBQztVQUN4SCxDQUFDO1VBQ0R3SSxVQUFVLEVBQUUsU0FBQUEsV0FBQSxFQUFZO1lBQ3BCLElBQUksQ0FBQ2hCLGNBQWMsR0FBRyxJQUFJLENBQUNGLElBQUk7VUFDbkMsQ0FBQztVQUNEcUIsVUFBVSxFQUFFLFNBQUFBLFdBQVVwQixNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDSSxNQUFNLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUNELGNBQWMsR0FBRyxFQUFFO1lBQ3hCLElBQUlXLElBQUksR0FBRyxJQUFJO1lBQ2YsSUFBSTBELFFBQVEsR0FBR3JjLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7WUFDM0NnQyxPQUFPLENBQUM2RSxHQUFHLENBQUN6RSxNQUFNLENBQUN2SCxJQUFJLENBQUM7WUFDeEJ0USxDQUFDLENBQUNzTixJQUFJLENBQUM7Y0FDSHpELEdBQUcsRUFBRXdTLFFBQVEsSUFBSUEsUUFBUSxDQUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUd1QixrQkFBa0IsQ0FBQ3ZFLE1BQU0sQ0FBQ3ZILElBQUksQ0FBQztjQUNyR29ILE1BQU0sRUFBRSxLQUFLO2NBQ2J0TSxPQUFPLEVBQUUsU0FBQUEsUUFBVTdHLElBQUksRUFBRTtnQkFDckJBLElBQUksQ0FBQ2dZLE9BQU8sQ0FBQyxVQUFVN0ssSUFBSSxFQUFFO2tCQUN6QkEsSUFBSSxDQUFDOEssSUFBSSxHQUFHLEtBQUs7Z0JBQ3JCLENBQUMsQ0FBQztnQkFDRjdELElBQUksQ0FBQ1osVUFBVSxHQUFHeFQsSUFBSTtnQkFDdEJvVSxJQUFJLENBQUNYLGNBQWMsR0FBRyxFQUFFO2dCQUN4QlcsSUFBSSxDQUFDSixNQUFNLEdBQUcsRUFBRTtnQkFDaEJJLElBQUksQ0FBQ0gsT0FBTyxHQUFHLElBQUk7Y0FDdkIsQ0FBQztjQUNEbk4sS0FBSyxFQUFFLFNBQUFBLE1BQVVBLE1BQUssRUFBRTtnQkFDcEJvTSxPQUFPLENBQUM2RSxHQUFHLENBQUMsdUJBQXVCLEdBQUd6RSxNQUFNLENBQUN2SCxJQUFJLENBQUM7Z0JBQ2xEcUksSUFBSSxDQUFDRyxVQUFVLENBQUMsQ0FBQztjQUNyQjtZQUNKLENBQUMsQ0FBQztVQUNOLENBQUM7VUFDRDJELFNBQVMsRUFBRSxTQUFBQSxVQUFBLEVBQVk7WUFDbkIsSUFBSSxDQUFDekUsY0FBYyxHQUFHLEVBQUU7WUFDeEIsS0FBSyxJQUFJM04sQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksQ0FBQ3NRLGtCQUFrQixDQUFDclEsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtjQUNyRCxJQUFJLENBQUMyTixjQUFjLENBQUN2UixJQUFJLENBQUMsSUFBSSxDQUFDa1Usa0JBQWtCLENBQUN0USxDQUFDLENBQUMsQ0FBQztZQUN4RDtVQUNKLENBQUM7VUFDRHFTLFdBQVcsRUFBRSxTQUFBQSxZQUFBLEVBQVk7WUFDckIsSUFBSSxDQUFDMUUsY0FBYyxHQUFHLEVBQUU7VUFDNUIsQ0FBQztVQUNEMkUsZUFBZSxFQUFFLFNBQUFBLGdCQUFBLEVBQVk7WUFDekIsSUFBSUMsSUFBSSxHQUFHLEVBQUU7WUFDYixLQUFLLElBQUl2UyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsSUFBSSxDQUFDc1Esa0JBQWtCLENBQUNyUSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO2NBQ3JELElBQUksSUFBSSxDQUFDd1MsZUFBZSxDQUFDLElBQUksQ0FBQ2xDLGtCQUFrQixDQUFDdFEsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUU7Z0JBQzNEdVMsSUFBSSxDQUFDblcsSUFBSSxDQUFDLElBQUksQ0FBQ2tVLGtCQUFrQixDQUFDdFEsQ0FBQyxDQUFDLENBQUM7Y0FDekM7WUFDSjtZQUNBLElBQUksQ0FBQzJOLGNBQWMsR0FBRzRFLElBQUk7VUFDOUIsQ0FBQztVQUNEaEQsc0JBQXNCLEVBQUUsU0FBQUEsdUJBQVVQLEtBQUssRUFBRTtZQUNyQyxJQUFJLElBQUksQ0FBQ3dELGVBQWUsQ0FBQ3hELEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtjQUNyQyxJQUFJLENBQUNyQixjQUFjLENBQUM4RSxNQUFNLENBQUMsSUFBSSxDQUFDOUUsY0FBYyxDQUFDNkMsT0FBTyxDQUFDeEIsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsTUFBTTtjQUNILElBQUksQ0FBQ3JCLGNBQWMsQ0FBQ3ZSLElBQUksQ0FBQzRTLEtBQUssQ0FBQztZQUNuQztVQUNKLENBQUM7VUFDRHdELGVBQWUsRUFBRSxTQUFBQSxnQkFBVXhELEtBQUssRUFBRTtZQUM5QixJQUFJOUwsTUFBTSxHQUFHLElBQUksQ0FBQ3lLLGNBQWMsQ0FBQytFLElBQUksQ0FBQyxVQUFVMU4sT0FBTyxFQUFFeEksS0FBSyxFQUFFbVcsS0FBSyxFQUFFO2NBQ25FLE9BQU8zTixPQUFPLENBQUN4RixHQUFHLENBQUNtSyxXQUFXLENBQUMsQ0FBQyxLQUFLcUYsS0FBSyxDQUFDeFAsR0FBRyxDQUFDbUssV0FBVyxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDO1lBQ0YsT0FBT3pHLE1BQU07VUFDakIsQ0FBQztVQUNEa00sWUFBWSxFQUFFLFNBQUFBLGFBQUEsRUFBWTtZQUN0QixJQUFJNUIsTUFBTSxHQUFHLElBQUksQ0FBQ0MsY0FBYztZQUNoQyxJQUFJYSxJQUFJLEdBQUcsSUFBSTtZQUNmO1lBQ0EsSUFBSWQsTUFBTSxJQUFJLElBQUksQ0FBQ0QsSUFBSSxDQUFDcUYsS0FBSyxFQUFFO2NBQzNCO1lBQ0o7WUFFQUMsYUFBYSxDQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDTm5kLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQ3VFLElBQUksQ0FBQyxDQUFDO2NBQUU2WSxRQUFRLEVBQUUsU0FBQUEsU0FBVUMsSUFBSSxFQUFFO2dCQUNwRCxJQUFJQSxJQUFJLEVBQUU7a0JBQ05yZCxDQUFDLENBQUNzTixJQUFJLENBQUM7b0JBQ0h6RCxHQUFHLEVBQUU3SixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHMkcsa0JBQWtCLENBQUN2RSxNQUFNLENBQUN2SCxJQUFJLENBQUM7b0JBQzdFb0gsTUFBTSxFQUFFLE1BQU07b0JBQ2RuVCxJQUFJLEVBQUU7c0JBQ0YrWSwwQkFBMEIsRUFBRXRkLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDO29CQUNsRixDQUFDO29CQUNEckssT0FBTyxFQUFFLFNBQUFBLFFBQVU3RyxJQUFJLEVBQUU7c0JBQ3JCNFMsR0FBRyxDQUFDb0csS0FBSyxDQUFDLGNBQWMsRUFBRTFGLE1BQU0sQ0FBQztvQkFDckMsQ0FBQztvQkFDRHhNLEtBQUssRUFBRSxTQUFBQSxNQUFVQSxPQUFLLEVBQUU7c0JBQ3BCb00sT0FBTyxDQUFDcE0sS0FBSyxDQUFDQSxPQUFLLENBQUNtUyxZQUFZLENBQUM7b0JBQ3JDO2tCQUNKLENBQUMsQ0FBQztnQkFDTjtjQUNKO1lBQUMsRUFDSixDQUFDO1VBQ04sQ0FBQztVQUNEaEUsWUFBWSxFQUFFLFNBQUFBLGFBQUEsRUFBWTtZQUN0QnhaLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDeWQsS0FBSyxDQUFDLENBQUM7WUFDdEMsSUFBSUMsS0FBSyxHQUFHQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsbUJBQW1CLENBQUM3ZCxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN4RTBkLEtBQUssQ0FBQ0ksSUFBSSxDQUFDLENBQUM7WUFDWjlkLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDc0ksS0FBSyxDQUFDLENBQUM7VUFDN0QsQ0FBQztVQUNEbEUsV0FBVyxFQUFFLFNBQUFBLFlBQVVSLEtBQUssRUFBRTtZQUMxQnJaLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDeWQsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSUMsS0FBSyxHQUFHQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsbUJBQW1CLENBQUM3ZCxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN2RTBkLEtBQUssQ0FBQ0ksSUFBSSxDQUFDLENBQUM7WUFDWjlkLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDNEQsS0FBSyxDQUFDN1MsSUFBSSxDQUFDO1lBQ25DeEcsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUN5VixHQUFHLENBQUM0RCxLQUFLLENBQUM3UyxJQUFJLENBQUMsQ0FBQ3VYLEtBQUssQ0FBQyxDQUFDO1VBQ3BFLENBQUM7VUFDREMsb0JBQW9CLEVBQUUsU0FBQUEscUJBQVUzRSxLQUFLLEVBQUU7WUFDbkMsSUFBSSxDQUFDNEUsV0FBVyxDQUFDLENBQUM7VUFDdEIsQ0FBQztVQUNEQyxlQUFlLEVBQUUsU0FBQUEsZ0JBQUEsRUFBWTtZQUN6QixJQUFJQyxTQUFTLEdBQUcsSUFBSSxDQUFDbkcsY0FBYztZQUNuQyxJQUFJVyxJQUFJLEdBQUcsSUFBSTtZQUVmLElBQUl3RixTQUFTLENBQUM3VCxNQUFNLEdBQUcsQ0FBQyxFQUFFO2NBQ3RCO1lBQ0o7WUFFQTRTLGFBQWEsQ0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQ05uZCxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUN1RSxJQUFJLENBQUMsQ0FBQztjQUFFNlksUUFBUSxFQUFFLFNBQUFBLFNBQVVDLElBQUksRUFBRTtnQkFDbkQsSUFBSUEsSUFBSSxFQUFFO2tCQUNOLElBQUllLEtBQUssR0FBRyxFQUFFO2tCQUNkLEtBQUssSUFBSS9ULENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzhULFNBQVMsQ0FBQzdULE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDK1QsS0FBSyxDQUFDM1gsSUFBSSxDQUFDMFgsU0FBUyxDQUFDOVQsQ0FBQyxDQUFDLENBQUNrUCxTQUFTLENBQUM7a0JBQ3RDO2tCQUVBdlosQ0FBQyxDQUFDc04sSUFBSSxDQUFDO29CQUNIekQsR0FBRyxFQUFFN0osQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztvQkFDbkNpQyxNQUFNLEVBQUUsTUFBTTtvQkFDZG5ULElBQUksRUFBRTtzQkFDRitZLDBCQUEwQixFQUFFdGQsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztzQkFDL0UySSxLQUFLLEVBQUVBO29CQUNYLENBQUM7b0JBQ0RoVCxPQUFPLEVBQUUsU0FBQUEsUUFBVTdHLElBQUksRUFBRTtzQkFDckIsS0FBSyxJQUFJOEYsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc08sSUFBSSxDQUFDWCxjQUFjLENBQUMxTixNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO3dCQUNqRCxJQUFJeEQsS0FBSyxHQUFHOFIsSUFBSSxDQUFDWixVQUFVLElBQUlZLElBQUksQ0FBQ1osVUFBVSxDQUFDOEMsT0FBTyxDQUFDbEMsSUFBSSxDQUFDWCxjQUFjLENBQUMzTixDQUFDLENBQUMsQ0FBQzt3QkFDOUUsSUFBSXhELEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTswQkFDWjhSLElBQUksQ0FBQ1osVUFBVSxDQUFDK0UsTUFBTSxDQUFDalcsS0FBSyxFQUFFLENBQUMsQ0FBQzswQkFDaENzUSxHQUFHLENBQUNvRyxLQUFLLENBQUMsY0FBYyxFQUFFNUUsSUFBSSxDQUFDWCxjQUFjLENBQUMzTixDQUFDLENBQUMsQ0FBQzt3QkFDckQ7c0JBQ0o7c0JBQ0FzTyxJQUFJLENBQUNYLGNBQWMsR0FBRyxFQUFFO29CQUM1QixDQUFDO29CQUNEM00sS0FBSyxFQUFFLFNBQUFBLE1BQVVBLE9BQUssRUFBRTtzQkFDcEJvTSxPQUFPLENBQUNwTSxLQUFLLENBQUNBLE9BQUssQ0FBQ21TLFlBQVksQ0FBQztvQkFDckM7a0JBQ0osQ0FBQyxDQUFDO2dCQUNOO2NBQ0o7WUFBQyxFQUNKLENBQUM7VUFDTixDQUFDO1VBQ0QxRCxlQUFlLEVBQUUsU0FBQUEsZ0JBQVVULEtBQUssRUFBRTtZQUM5QixJQUFJVixJQUFJLEdBQUcsSUFBSTtZQUNmLElBQUksQ0FBQ1UsS0FBSyxFQUFFO2NBQ1I7WUFDSjtZQUVBNkQsYUFBYSxDQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FDTm5kLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQ3VFLElBQUksQ0FBQyxDQUFDO2NBQUU2WSxRQUFRLEVBQUUsU0FBQUEsU0FBVUMsSUFBSSxFQUFFO2dCQUNuRCxJQUFJQSxJQUFJLEVBQUU7a0JBQ05yZCxDQUFDLENBQUNzTixJQUFJLENBQUM7b0JBQ0h6RCxHQUFHLEVBQUU3SixDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHMkcsa0JBQWtCLENBQUMvQyxLQUFLLENBQUNFLFNBQVMsQ0FBQztvQkFDaEY3QixNQUFNLEVBQUUsTUFBTTtvQkFDZG5ULElBQUksRUFBRTtzQkFDRitZLDBCQUEwQixFQUFFdGQsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDLENBQUN5VixHQUFHLENBQUM7b0JBQ2xGLENBQUM7b0JBQ0RySyxPQUFPLEVBQUUsU0FBQUEsUUFBVTdHLElBQUksRUFBRTtzQkFDckIsSUFBSXNDLEtBQUssR0FBRzhSLElBQUksQ0FBQ1osVUFBVSxJQUFJWSxJQUFJLENBQUNaLFVBQVUsQ0FBQzhDLE9BQU8sQ0FBQ3hCLEtBQUssQ0FBQztzQkFDN0QsSUFBSXhTLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDWjhSLElBQUksQ0FBQ1osVUFBVSxDQUFDK0UsTUFBTSxDQUFDalcsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDaENzUSxHQUFHLENBQUNvRyxLQUFLLENBQUMsY0FBYyxFQUFFbEUsS0FBSyxDQUFDO3NCQUNwQztzQkFDQTtvQkFDSixDQUFDOztvQkFDRGhPLEtBQUssRUFBRSxTQUFBQSxNQUFVQSxPQUFLLEVBQUU7c0JBQ3BCb00sT0FBTyxDQUFDcE0sS0FBSyxDQUFDQSxPQUFLLENBQUNtUyxZQUFZLENBQUM7b0JBQ3JDO2tCQUNKLENBQUMsQ0FBQztnQkFDTjtjQUNKO1lBQUMsRUFDSixDQUFDO1VBQ04sQ0FBQztVQUNEekQsZUFBZSxFQUFFLFNBQUFBLGdCQUFVVixLQUFLLEVBQUUvWCxDQUFDLEVBQUU7WUFDakM7WUFDQTtZQUNBLElBQUkrYyxVQUFVLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUNyRyxjQUFjLENBQUN1RSxPQUFPLENBQUMsVUFBVTdLLElBQUksRUFBRTtjQUN4QzJNLFVBQVUsQ0FBQzVYLElBQUksQ0FBQ2lMLElBQUksQ0FBQ2xMLElBQUksQ0FBQztZQUM5QixDQUFDLENBQUM7O1lBRUY7WUFDQSxJQUFJLElBQUksQ0FBQ3FXLGVBQWUsQ0FBQ3hELEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRTtjQUN0Q2dGLFVBQVUsQ0FBQzVYLElBQUksQ0FBQzRTLEtBQUssQ0FBQzdTLElBQUksQ0FBQztjQUMzQixJQUFJLENBQUN3UixjQUFjLENBQUN2UixJQUFJLENBQUM0UyxLQUFLLENBQUM7WUFDbkM7WUFFQS9YLENBQUMsQ0FBQ0MsWUFBWSxDQUFDK2MsT0FBTyxDQUFDLFlBQVksRUFBRTVKLElBQUksQ0FBQ2lILFNBQVMsQ0FBQzBDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hFL2MsQ0FBQyxDQUFDQyxZQUFZLENBQUMrYyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQ3hHLGNBQWMsQ0FBQ3hILElBQUksQ0FBQztZQUNoRWhQLENBQUMsQ0FBQ0MsWUFBWSxDQUFDZ2QsWUFBWSxDQUFDLElBQUksQ0FBQ3JHLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDM0Q1VyxDQUFDLENBQUNDLFlBQVksQ0FBQ2lkLGFBQWEsR0FBRyxNQUFNO1VBQ3pDLENBQUM7VUFDREMscUJBQXFCLEVBQUUsU0FBQUEsc0JBQVVuZCxDQUFDLEVBQUU7WUFDaEMsSUFBSUEsQ0FBQyxDQUFDb2QsT0FBTyxHQUFHLEdBQUcsRUFBRTtjQUNqQjVlLE1BQU0sQ0FBQzZlLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDM0I7WUFFQSxJQUFJcmQsQ0FBQyxDQUFDb2QsT0FBTyxHQUFHNWUsTUFBTSxDQUFDOGUsV0FBVyxHQUFHLEdBQUcsRUFBRTtjQUN0QzllLE1BQU0sQ0FBQzZlLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFCO1VBQ0osQ0FBQztVQUNEaEYsVUFBVSxFQUFFLFNBQUFBLFdBQVVELE9BQU8sRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQ25CLE1BQU0sSUFBSW1CLE9BQU8sRUFBRTtjQUN4QixJQUFJLENBQUNsQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUNBLE9BQU87WUFDaEMsQ0FBQyxNQUFNO2NBQ0gsSUFBSSxDQUFDQSxPQUFPLEdBQUcsSUFBSTtjQUNuQixJQUFJLENBQUNELE1BQU0sR0FBR21CLE9BQU87WUFDekI7VUFDSjtRQUNKO01BQ0osQ0FBQyxDQUFDO01BRUYxWixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQzZlLFFBQVEsQ0FBQyxVQUFVdmQsQ0FBQyxFQUFFO1FBQzNDLElBQUkwQyxHQUFHLEdBQUcxQyxDQUFDLENBQUN3ZCxLQUFLO1FBQ2pCLElBQUk5YSxHQUFHLElBQUksRUFBRSxFQUFFO1VBQUc7VUFDZGhFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDK2UsS0FBSyxDQUFDLENBQUM7VUFDM0IsT0FBTyxLQUFLO1FBQ2hCO01BQ0osQ0FBQyxDQUFDO01BRUYvZSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3NJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVWhILENBQUMsRUFBRTtRQUN6QyxJQUFJa0YsSUFBSSxHQUFHeEcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztRQUV6QyxJQUFJalAsSUFBSSxLQUFLLEVBQUUsRUFBRTtVQUNiO1FBQ0o7UUFFQXhHLENBQUMsQ0FBQ3NOLElBQUksQ0FBQztVQUNIekQsR0FBRyxFQUFFN0osQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRzJHLGtCQUFrQixDQUFDbEYsUUFBUSxDQUFDWSxjQUFjLENBQUN4SCxJQUFJLENBQUMsR0FBRyxRQUFRLEdBQUc4TCxrQkFBa0IsQ0FBQzVWLElBQUksQ0FBQztVQUNwSWtSLE1BQU0sRUFBRSxNQUFNO1VBQ2RuVCxJQUFJLEVBQUU7WUFDRitZLDBCQUEwQixFQUFFdGQsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDLENBQUN5VixHQUFHLENBQUM7VUFDbEYsQ0FBQztVQUNEckssT0FBTyxFQUFFLFNBQUFBLFFBQVU3RyxJQUFJLEVBQUU7WUFDckI0UyxHQUFHLENBQUNvRyxLQUFLLENBQUMsV0FBVyxFQUFFckcsUUFBUSxDQUFDWSxjQUFjLEVBQUV2VCxJQUFJLENBQUM7WUFDckQsSUFBSW1aLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxLQUFLLENBQUNDLG1CQUFtQixDQUFDN2QsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDeEUwZCxLQUFLLENBQUNzQixJQUFJLENBQUMsQ0FBQztVQUNoQixDQUFDO1VBQ0QzVCxLQUFLLEVBQUUsU0FBQUEsTUFBVUEsT0FBSyxFQUFFO1lBQ3BCckwsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUN5ZCxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJd0IsWUFBWSxHQUFHdkssSUFBSSxDQUFDeUYsS0FBSyxDQUFDOU8sT0FBSyxDQUFDbVMsWUFBWSxDQUFDLENBQUN2WixLQUFLO1lBQ3ZEakUsQ0FBQyxDQUFDLHFEQUFxRCxDQUFDLENBQUNnVyxJQUFJLENBQUNpSixZQUFZLENBQUMsQ0FBQzNKLFFBQVEsQ0FBQ3RWLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1VBQ3hIO1FBQ0osQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO01BRUZBLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDc0ksRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVaEgsQ0FBQyxFQUFFO1FBQ3BELElBQUk0WCxPQUFPLEdBQUdsWixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUl5SixPQUFPLEdBQUdsZixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLElBQUl5RCxPQUFPLEtBQUssRUFBRSxFQUFFO1VBQ2hCO1FBQ0o7UUFFQSxJQUFJaUcsYUFBYSxHQUFHakksUUFBUSxDQUFDWSxjQUFjLENBQUN4SCxJQUFJLEdBQUcsR0FBRztRQUN0RCxJQUFJNk8sYUFBYSxLQUFLLEdBQUcsRUFBRTtVQUN2QkEsYUFBYSxHQUFHLEVBQUU7UUFDdEI7UUFFQSxJQUFJaEcsT0FBTyxHQUFHZ0csYUFBYSxHQUFHakcsT0FBTztRQUNyQyxJQUFJRSxPQUFPLEdBQUcrRixhQUFhLEdBQUdELE9BQU87UUFFckMsSUFBSS9GLE9BQU8sQ0FBQ25GLFdBQVcsQ0FBQyxDQUFDLEtBQUtvRixPQUFPLENBQUNwRixXQUFXLENBQUMsQ0FBQyxFQUFFO1VBQ2pELElBQUkwSixLQUFLLEdBQUdDLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDQyxtQkFBbUIsQ0FBQzdkLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1VBQ3ZFMGQsS0FBSyxDQUFDc0IsSUFBSSxDQUFDLENBQUM7VUFDWjtRQUNKO1FBRUFoZixDQUFDLENBQUNzTixJQUFJLENBQUM7VUFDSHpELEdBQUcsRUFBRTdKLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcyRyxrQkFBa0IsQ0FBQ2hELE9BQU8sQ0FBQyxHQUFHLFdBQVcsR0FBR2dELGtCQUFrQixDQUFDakQsT0FBTyxDQUFDO1VBQ3ZIekIsTUFBTSxFQUFFLE1BQU07VUFDZG5ULElBQUksRUFBRTtZQUNGK1ksMEJBQTBCLEVBQUV0ZCxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQztVQUNsRixDQUFDO1VBQ0RySyxPQUFPLEVBQUUsU0FBQUEsUUFBVTdHLElBQUksRUFBRTtZQUNyQixJQUFJbVosS0FBSyxHQUFHQyxTQUFTLENBQUNDLEtBQUssQ0FBQ0MsbUJBQW1CLENBQUM3ZCxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN2RTBkLEtBQUssQ0FBQ3NCLElBQUksQ0FBQyxDQUFDO1lBQ1o3SCxHQUFHLENBQUNvRyxLQUFLLENBQUMsY0FBYyxFQUFFckUsT0FBTyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sQ0FBQztVQUN4RCxDQUFDO1VBQ0QvTixLQUFLLEVBQUUsU0FBQUEsTUFBVUEsT0FBSyxFQUFFO1lBQ3BCckwsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUN5ZCxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJd0IsWUFBWSxHQUFHdkssSUFBSSxDQUFDeUYsS0FBSyxDQUFDOU8sT0FBSyxDQUFDbVMsWUFBWSxDQUFDLENBQUN2WixLQUFLO1lBQ3ZEakUsQ0FBQyxDQUFDLHFEQUFxRCxDQUFDLENBQUNnVyxJQUFJLENBQUNpSixZQUFZLENBQUMsQ0FBQzNKLFFBQVEsQ0FBQ3RWLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1VBQ3ZIO1FBQ0osQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO01BRUYsSUFBSXNYLHVCQUF1QixFQUFFO1FBQ3pCblYsUUFBUSxDQUFDaWQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDQyxLQUFLLENBQUNDLE9BQU8sR0FBRyxFQUFFO01BQzFEO01BRUF0ZixDQUFDLENBQUNtQyxRQUFRLENBQUMsQ0FBQzhOLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztJQUV6QyxDQUFDO0lBQ0Q1RSxLQUFLLEVBQUUsU0FBQUEsTUFBVUEsT0FBSyxFQUFFO01BQ3BCb00sT0FBTyxDQUFDcE0sS0FBSyxDQUFDQSxPQUFLLENBQUNtUyxZQUFZLENBQUM7SUFDckM7RUFDSixDQUFDLENBQUM7QUFDTjtBQzVnQkF4ZCxDQUFDLENBQUNtQyxRQUFRLENBQUMsQ0FBQ21HLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZO0VBQ3pDLElBQUlpWCxtQkFBbUIsR0FBRzNJLFVBQVUsQ0FBQyxDQUFDO0VBRXRDNVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUNYeUUsVUFBVSxDQUFDO0lBQ1J2QyxRQUFRLEVBQUVsQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ3hCNkMsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQmlILFFBQVEsRUFBRSxNQUFNO0lBQ2hCRCxHQUFHLEVBQUU3SixDQUFDLENBQUMsY0FBYyxDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUM1QnRTLFlBQVksRUFBRW1DLE1BQU0sQ0FBQ3RGLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekR0UixRQUFRLEVBQUUsU0FBQUEsU0FBQSxFQUFZO01BQ2xCLElBQUlxYixnQkFBZ0IsR0FBR3hmLENBQUMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7TUFFeEUsT0FBTyxDQUNIO1FBQUVqUCxJQUFJLEVBQUUsTUFBTTtRQUFFdkMsS0FBSyxFQUFFaVQsUUFBUSxDQUFDWSxjQUFjLENBQUN4SDtNQUFLLENBQUMsRUFDckQ7UUFBRTlKLElBQUksRUFBRSw0QkFBNEI7UUFBRXZDLEtBQUssRUFBRXViO01BQWlCLENBQUMsRUFDL0Q7UUFBRWhaLElBQUksRUFBRSx1QkFBdUI7UUFBRXZDLEtBQUssRUFBRXNiO01BQW9CLENBQUMsQ0FDaEU7SUFDTCxDQUFDO0lBQ0Q1YSxJQUFJLEVBQUUsU0FBQUEsS0FBVXJELENBQUMsRUFBRWlELElBQUksRUFBRTtNQUNyQnZFLENBQUMsQ0FBQytELElBQUksQ0FBQ1EsSUFBSSxDQUFDZ0osTUFBTSxDQUFDNUcsS0FBSyxFQUFFLFVBQVVFLEtBQUssRUFBRUMsSUFBSSxFQUFFO1FBQzdDLElBQUksQ0FBQ0EsSUFBSSxDQUFDdUUsS0FBSyxFQUFFO1VBQ2I2TCxRQUFRLENBQUNhLFVBQVUsQ0FBQ3RSLElBQUksQ0FBQ0ssSUFBSSxDQUFDO1FBQ2xDO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFDSixDQUFDLENBQUMsQ0FDRHdCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxVQUFDaEgsQ0FBQyxFQUFFVyxPQUFPLEVBQUs7SUFDN0MsSUFBSTZFLElBQUksR0FBRzdFLE9BQU8sQ0FBQzBFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0I7SUFDQTFFLE9BQU8sQ0FBQ29ILElBQUksR0FBRyxJQUFJb1csSUFBSSxDQUNuQixDQUFDeGQsT0FBTyxDQUFDb0gsSUFBSSxDQUFDLEVBQ2R2QyxJQUFJLENBQUNOLElBQUksRUFDVDtNQUNJcEYsSUFBSSxFQUFFMEYsSUFBSSxDQUFDMUYsSUFBSTtNQUNmc2UsWUFBWSxFQUFFNVksSUFBSSxDQUFDNFk7SUFDdkIsQ0FBQyxDQUFDO0VBQ1YsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDO0FBR0YxZixDQUFDLENBQUNtQyxRQUFRLENBQUMsQ0FBQ3dkLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVXJlLENBQUMsRUFBRTtFQUN0QyxJQUFJc2UsRUFBRSxHQUFHdGUsQ0FBQyxDQUFDRSxhQUFhLENBQUNELFlBQVk7RUFDckMsSUFBSXFlLEVBQUUsQ0FBQ2xlLEtBQUssS0FBS2tlLEVBQUUsQ0FBQ2xlLEtBQUssQ0FBQ21aLE9BQU8sR0FBRytFLEVBQUUsQ0FBQ2xlLEtBQUssQ0FBQ21aLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRytFLEVBQUUsQ0FBQ2xlLEtBQUssQ0FBQ21lLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0lBQy9GLElBQUkzZCxRQUFRLEdBQUdsQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7TUFDL0JnRixPQUFPLEdBQUdsRixNQUFNLENBQUNnZ0IsZUFBZTtJQUNwQyxJQUFJOWEsT0FBTyxFQUFFO01BQ1QrYSxZQUFZLENBQUMvYSxPQUFPLENBQUM7SUFDekIsQ0FBQyxNQUFNO01BQ0g5QyxRQUFRLENBQUM4ZCxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzNCO0lBQ0EsSUFBSUMsZUFBZSxHQUFHamdCLENBQUMsQ0FBQ3NCLENBQUMsQ0FBQzJRLE1BQU0sQ0FBQyxDQUFDaU8sT0FBTyxDQUFDaGUsUUFBUSxDQUFDO0lBQ25EcEMsTUFBTSxDQUFDZ2dCLGVBQWUsR0FBR3ZLLFVBQVUsQ0FBQyxZQUFZO01BQzVDelYsTUFBTSxDQUFDZ2dCLGVBQWUsR0FBRyxJQUFJO01BQzdCNWQsUUFBUSxDQUFDaWUsV0FBVyxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ1g7QUFDSixDQUFDLENBQUM7Ozs7Ozs7QUN6REY7QUFDQS9JLEdBQUcsQ0FBQ2dKLFNBQVMsQ0FBQyxRQUFRLEVBQUU7RUFDcEJDLFFBQVEscWFBQUF2UCxNQUFBLENBTThDM08sUUFBUSxDQUFDbWUsR0FBRyxJQUFJLEtBQUssR0FBRyxNQUFNLEdBQUcsT0FBTywwUUFBQXhQLE1BQUEsQ0FDK0QzTyxRQUFRLENBQUNtZSxHQUFHLElBQUksS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLG0rQkFpQmhNO0VBQ0xDLEtBQUssRUFBRTtJQUNIdEQsS0FBSyxFQUFFMVYsTUFBTTtJQUNiaVosa0JBQWtCLEVBQUVqWixNQUFNO0lBQzFCa1osS0FBSyxFQUFFbmI7RUFDWCxDQUFDO0VBQ0RmLElBQUksRUFBRSxTQUFBQSxLQUFBLEVBQVk7SUFDZCxPQUFPO01BQ0hpWSxJQUFJLEVBQUUsS0FBSztNQUNYa0UsUUFBUSxFQUFFLElBQUk7TUFBRTtNQUNoQmhHLE1BQU0sRUFBRSxJQUFJO01BQ1ppRyxTQUFTLEVBQUUsS0FBSztNQUNoQkMsT0FBTyxFQUFFO0lBQ2IsQ0FBQztFQUNMLENBQUM7RUFDRHhHLFFBQVEsRUFBRTtJQUNOcUQsS0FBSyxFQUFFLFNBQUFBLE1BQUEsRUFBWTtNQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUNpRCxRQUFRLElBQUksSUFBSSxDQUFDQSxRQUFRLENBQUNwVyxNQUFNLElBQUksQ0FBQztJQUN0RCxDQUFDO0lBQ0R1VyxVQUFVLEVBQUUsU0FBQUEsV0FBQSxFQUFZO01BQ3BCLE9BQVEsSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQ2hhLElBQUksSUFBSSxJQUFJLENBQUN5VyxLQUFLLENBQUN6VyxJQUFJLElBQU0sSUFBSSxDQUFDZ2Esa0JBQWtCLENBQUNsUSxJQUFJLElBQUksSUFBSSxDQUFDMk0sS0FBSyxDQUFDM00sSUFBSztJQUNqSCxDQUFDO0lBQ0R3USxNQUFNLEVBQUUsU0FBQUEsT0FBQSxFQUFZO01BQ2hCLE9BQU8sSUFBSSxDQUFDN0QsS0FBSyxDQUFDM00sSUFBSSxLQUFLLEVBQUU7SUFDakM7RUFDSixDQUFDO0VBQ0R1TCxPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO0lBQ2pCLElBQUssSUFBSSxDQUFDaUYsTUFBTSxJQUFJLEtBQUssSUFBTSxJQUFJLENBQUNDLDBCQUEwQixDQUFDLENBQUUsRUFBQztNQUM5RCxJQUFJLENBQUMvRSxNQUFNLENBQUMsQ0FBQztJQUNqQjtJQUVBLElBQUksQ0FBQzRFLE9BQU8sR0FBRyxJQUFJLENBQUNILEtBQUssR0FBRyxDQUFDLEdBQUksRUFBRSxHQUFHLEVBQUUsR0FBSSxJQUFJLENBQUNBLEtBQUssR0FBRyxDQUFFO0VBQy9ELENBQUM7RUFDRC9ILE9BQU8sRUFBRSxTQUFBQSxRQUFBLEVBQVk7SUFDakIsSUFBSUMsSUFBSSxHQUFHLElBQUk7SUFDZnhCLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsVUFBVWhCLE1BQU0sRUFBRTtNQUN0QyxJQUFJYyxJQUFJLENBQUMrSCxRQUFRLEVBQUU7UUFDZixJQUFJN1osS0FBSyxHQUFHOFIsSUFBSSxDQUFDK0gsUUFBUSxJQUFJL0gsSUFBSSxDQUFDK0gsUUFBUSxDQUFDN0YsT0FBTyxDQUFDaEQsTUFBTSxDQUFDO1FBQzFELElBQUloUixLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDWjhSLElBQUksQ0FBQytILFFBQVEsQ0FBQzVELE1BQU0sQ0FBQ2pXLEtBQUssRUFBRSxDQUFDLENBQUM7VUFDOUJzUSxHQUFHLENBQUNvRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzlCO01BQ0o7SUFDSixDQUFDLENBQUM7SUFFRnBHLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsVUFBVTVHLE1BQU0sRUFBRTRGLE1BQU0sRUFBRTtNQUMzQyxJQUFJYyxJQUFJLENBQUNzRSxLQUFLLElBQUloTCxNQUFNLEVBQUU7UUFDdEIsSUFBSTBHLElBQUksQ0FBQytILFFBQVEsS0FBSyxJQUFJLEVBQUU7VUFDeEIvSCxJQUFJLENBQUMrSCxRQUFRLENBQUNqYSxJQUFJLENBQUNvUixNQUFNLENBQUM7UUFDOUI7UUFDQUEsTUFBTSxDQUFDNkMsTUFBTSxHQUFHL0IsSUFBSSxDQUFDc0UsS0FBSztRQUMxQjlGLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyxhQUFhLEVBQUUxRixNQUFNLENBQUM7TUFDcEM7SUFDSixDQUFDLENBQUM7RUFDTixDQUFDO0VBQ0RvRSxPQUFPLEVBQUU7SUFDTDhFLDBCQUEwQixFQUFFLFNBQUFBLDJCQUFBLEVBQVk7TUFDcEN2RyxZQUFZLEdBQUd0RCxRQUFRLENBQUNZLGNBQWM7TUFDdEMsT0FBTzBDLFlBQVksRUFBRTtRQUNqQixJQUFJQSxZQUFZLENBQUNsSyxJQUFJLElBQUksSUFBSSxDQUFDMk0sS0FBSyxDQUFDM00sSUFBSSxFQUFFO1VBQ3RDLE9BQU8sSUFBSTtRQUNmO1FBQ0prSyxZQUFZLEdBQUdBLFlBQVksQ0FBQ0UsTUFBTTtNQUNsQztNQUVBLE9BQU8sS0FBSztJQUNoQixDQUFDO0lBQ0RzQixNQUFNLEVBQUUsU0FBQUEsT0FBQSxFQUFZO01BQ2hCLElBQUksQ0FBQ1EsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDQSxJQUFJO01BQ3RCLElBQUksSUFBSSxDQUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUNrRSxRQUFRLEVBQUU7UUFDN0IsSUFBSSxDQUFDTSxZQUFZLENBQUMsQ0FBQztNQUN2QjtJQUNKLENBQUM7SUFDREMsTUFBTSxFQUFFLFNBQUFBLE9BQUEsRUFBWTtNQUNoQjlKLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUNOLEtBQUssQ0FBQztNQUN2QyxJQUFJLENBQUMrRCxZQUFZLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0R4SCxZQUFZLEVBQUUsU0FBQUEsYUFBQSxFQUFZO01BQ3RCckMsR0FBRyxDQUFDb0csS0FBSyxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFDRDlELFlBQVksRUFBRSxTQUFBQSxhQUFBLEVBQVk7TUFDdEJ0QyxHQUFHLENBQUNvRyxLQUFLLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUNEeUQsWUFBWSxFQUFFLFNBQUFBLGFBQUEsRUFBWTtNQUN0QixJQUFJckksSUFBSSxHQUFHLElBQUk7TUFDZixJQUFJLElBQUksQ0FBQzZELElBQUksSUFBSSxLQUFLLEVBQUU7UUFDcEIsSUFBSSxDQUFDQSxJQUFJLEdBQUcsSUFBSTtNQUNwQjtNQUNBeGMsQ0FBQyxDQUFDc04sSUFBSSxDQUFDO1FBQ0h6RCxHQUFHLEVBQUU3SixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHMkcsa0JBQWtCLENBQUN6RCxJQUFJLENBQUNzRSxLQUFLLENBQUMzTSxJQUFJLENBQUM7UUFDL0VvSCxNQUFNLEVBQUUsS0FBSztRQUNidE0sT0FBTyxFQUFFLFNBQUFBLFFBQVU3RyxJQUFJLEVBQUU7VUFDckJvVSxJQUFJLENBQUMrSCxRQUFRLEdBQUduYyxJQUFJO1VBQ3BCb1UsSUFBSSxDQUFDK0gsUUFBUSxDQUFDbkUsT0FBTyxDQUFDLFVBQVV6RixDQUFDLEVBQUU7WUFDL0JBLENBQUMsQ0FBQzRELE1BQU0sR0FBRy9CLElBQUksQ0FBQ3NFLEtBQUs7VUFDekIsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUNENVIsS0FBSyxFQUFFLFNBQUFBLE1BQVVBLE1BQUssRUFBRTtVQUNwQjZWLEtBQUssR0FBRyxLQUFLO1VBQ2J6SixPQUFPLENBQUNwTSxLQUFLLENBQUNBLE1BQUssQ0FBQ21TLFlBQVksQ0FBQztRQUNyQztNQUNKLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRDJELGNBQWMsRUFBRSxTQUFBQSxlQUFVN2YsQ0FBQyxFQUFFO01BQ3pCLElBQUksQ0FBQ3FmLFNBQVMsR0FBRyxJQUFJO0lBQ3pCLENBQUM7SUFDRFMsZUFBZSxFQUFFLFNBQUFBLGdCQUFVOWYsQ0FBQyxFQUFFO01BQzFCLElBQUksQ0FBQ3FmLFNBQVMsR0FBRyxLQUFLO0lBQzFCLENBQUM7SUFDRFUsaUJBQWlCLEVBQUUsU0FBQUEsa0JBQVV4SixNQUFNLEVBQUV2VyxDQUFDLEVBQUU7TUFFcEMsSUFBSXFYLElBQUksR0FBRyxJQUFJO01BQ2ZBLElBQUksQ0FBQ2dJLFNBQVMsR0FBRyxLQUFLO01BRXRCLElBQUl0QyxVQUFVLEdBQUczSixJQUFJLENBQUN5RixLQUFLLENBQUM3WSxDQUFDLENBQUNDLFlBQVksQ0FBQytmLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztNQUVqRSxJQUFJakQsVUFBVSxDQUFDL1QsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN2QjtNQUNKO01BRUEsSUFBSWlYLFlBQVksR0FBR2pnQixDQUFDLENBQUNDLFlBQVksQ0FBQytmLE9BQU8sQ0FBQyxjQUFjLENBQUM7TUFDekQsSUFBSUUsWUFBWSxHQUFHM0osTUFBTSxDQUFDdkgsSUFBSTtNQUU5QixJQUFJaVIsWUFBWSxLQUFLLEVBQUUsRUFBRTtRQUNyQkEsWUFBWSxHQUFHLE1BQU07TUFDekI7TUFFQSxJQUFJQyxZQUFZLEtBQUssRUFBRSxFQUFFO1FBQ3JCQSxZQUFZLEdBQUcsTUFBTTtNQUN6QjtNQUVBLElBQUlELFlBQVksS0FBS0MsWUFBWSxFQUFFO1FBQy9CQyxLQUFLLENBQUN6aEIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BDO01BQ0o7TUFFQXlILGFBQWEsQ0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQUtuZCxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUN1RSxJQUFJLENBQUMsQ0FBQztRQUFFNlksUUFBUSxFQUFFLFNBQUFBLFNBQVVDLElBQUksRUFBRTtVQUNoRSxJQUFJQSxJQUFJLEVBQUU7WUFDTnJkLENBQUMsQ0FBQ3NOLElBQUksQ0FBQztjQUNIekQsR0FBRyxFQUFFN0osQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztjQUNqQ2lDLE1BQU0sRUFBRSxNQUFNO2NBQ2RuVCxJQUFJLEVBQUU7Z0JBQ0YrWSwwQkFBMEIsRUFBRXRkLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7Z0JBQy9FNEksVUFBVSxFQUFFQSxVQUFVO2dCQUN0QmtELFlBQVksRUFBRUEsWUFBWTtnQkFDMUJDLFlBQVksRUFBRUE7Y0FDbEIsQ0FBQztjQUNEcFcsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtnQkFDakIrTCxHQUFHLENBQUNvRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2NBQ2pDLENBQUM7O2NBQ0RsUyxLQUFLLEVBQUUsU0FBQUEsTUFBVUEsT0FBSyxFQUFFO2dCQUNwQm9NLE9BQU8sQ0FBQ3BNLEtBQUssQ0FBQ0EsT0FBSyxDQUFDbVMsWUFBWSxDQUFDO2dCQUNqQ3JHLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRWxTLE9BQUssQ0FBQ21TLFlBQVksQ0FBQztjQUNuRDtZQUNKLENBQUMsQ0FBQztVQUNOO1FBQ0o7TUFBQyxFQUFDLENBQUM7SUFDUDtFQUVKO0FBQ0osQ0FBQyxDQUFDO0FDMUxGO0FBQ0FwRyxHQUFHLENBQUNnSixTQUFTLENBQUMsa0JBQWtCLEVBQUU7RUFDOUJDLFFBQVEsbzdEQXdCSDtFQUNMOWIsSUFBSSxFQUFFLFNBQUFBLEtBQUEsRUFBWTtJQUNkLE9BQU87TUFDSG1kLENBQUMsRUFBRSxDQUFDO0lBQ1IsQ0FBQztFQUNMLENBQUM7RUFDRG5CLEtBQUssRUFBRTtJQUNINUYsa0JBQWtCLEVBQUV0SixLQUFLO0lBQ3pCMkcsY0FBYyxFQUFFM0csS0FBSztJQUNyQmdLLFNBQVMsRUFBRS9WO0VBQ2YsQ0FBQztFQUNEb1QsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUNmO0lBQ0FBLElBQUksQ0FBQytJLENBQUMsQ0FBQ0MsVUFBVSxHQUFHM2hCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDN0NrRCxJQUFJLENBQUMrSSxDQUFDLENBQUNFLFlBQVksR0FBRzVoQixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0VBQ3JELENBQUM7RUFDRHdHLE9BQU8sRUFBRTtJQUNMWSxlQUFlLEVBQUUsU0FBQUEsZ0JBQVV4RCxLQUFLLEVBQUU7TUFDOUIsSUFBSTlMLE1BQU0sR0FBRyxJQUFJLENBQUN5SyxjQUFjLENBQUMrRSxJQUFJLENBQUMsVUFBVTFOLE9BQU8sRUFBRXhJLEtBQUssRUFBRW1XLEtBQUssRUFBRTtRQUNuRSxPQUFPM04sT0FBTyxDQUFDeEYsR0FBRyxDQUFDbUssV0FBVyxDQUFDLENBQUMsS0FBS3FGLEtBQUssQ0FBQ3hQLEdBQUcsQ0FBQ21LLFdBQVcsQ0FBQyxDQUFDO01BQ2hFLENBQUMsQ0FBQztNQUNGLE9BQU96RyxNQUFNO0lBQ2pCLENBQUM7SUFDRHNVLGFBQWEsRUFBRSxTQUFBQSxjQUFVaFksR0FBRyxFQUFFd1IsU0FBUyxFQUFFO01BQ3JDLE9BQU94UixHQUFHLElBQUlBLEdBQUcsQ0FBQ2dSLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHUSxTQUFTLEdBQUcsVUFBVSxHQUFHQSxTQUFTO0lBQ3JHLENBQUM7SUFDRHpCLHNCQUFzQixFQUFFLFNBQUFBLHVCQUFVUCxLQUFLLEVBQUU7TUFDckNsQyxHQUFHLENBQUNvRyxLQUFLLENBQUMsc0JBQXNCLEVBQUVsRSxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUNEUSxXQUFXLEVBQUUsU0FBQUEsWUFBVVIsS0FBSyxFQUFFO01BQzFCbEMsR0FBRyxDQUFDb0csS0FBSyxDQUFDLHNCQUFzQixFQUFFbEUsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFDRDRFLFdBQVcsRUFBRSxTQUFBQSxZQUFVNUUsS0FBSyxFQUFFO01BQzFCbEMsR0FBRyxDQUFDb0csS0FBSyxDQUFDLHNCQUFzQixFQUFFbEUsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFDRHlJLFNBQVMsRUFBRSxTQUFBQSxVQUFVekksS0FBSyxFQUFFL1gsQ0FBQyxFQUFFO01BQzNCNlYsR0FBRyxDQUFDb0csS0FBSyxDQUFDLHlCQUF5QixFQUFFbEUsS0FBSyxFQUFFL1gsQ0FBQyxDQUFDO0lBQ2xEO0VBQ0o7QUFDSixDQUFDLENBQUM7QUNsRUY7QUFDQThWLEdBQUcsQ0FBQ2dKLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRTtFQUMvQkMsUUFBUSxvMEhBOERIO0VBQ0w5YixJQUFJLEVBQUUsU0FBQUEsS0FBQSxFQUFZO0lBQ2QsT0FBTztNQUNIbWQsQ0FBQyxFQUFFLENBQUM7SUFDUixDQUFDO0VBQ0wsQ0FBQztFQUNEbkIsS0FBSyxFQUFFO0lBQ0hoSSxNQUFNLEVBQUUxUCxNQUFNO0lBQ2QyUCxPQUFPLEVBQUV1SixPQUFPO0lBQ2hCcEgsa0JBQWtCLEVBQUV0SixLQUFLO0lBQ3pCMkcsY0FBYyxFQUFFM0csS0FBSztJQUNyQmdLLFNBQVMsRUFBRS9WO0VBQ2YsQ0FBQztFQUNEb1QsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtJQUNqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTtJQUNmQSxJQUFJLENBQUMrSSxDQUFDLENBQUNNLFdBQVcsR0FBR2hpQixDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0lBQy9Da0QsSUFBSSxDQUFDK0ksQ0FBQyxDQUFDTyxVQUFVLEdBQUdqaUIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUM3Q2tELElBQUksQ0FBQytJLENBQUMsQ0FBQ1EsZ0JBQWdCLEdBQUdsaUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUN6RGtELElBQUksQ0FBQytJLENBQUMsQ0FBQ1MsVUFBVSxHQUFHbmlCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDN0NrRCxJQUFJLENBQUMrSSxDQUFDLENBQUNVLFVBQVUsR0FBR3BpQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0lBQzdDa0QsSUFBSSxDQUFDK0ksQ0FBQyxDQUFDQyxVQUFVLEdBQUczaEIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUM3Q2tELElBQUksQ0FBQytJLENBQUMsQ0FBQ0UsWUFBWSxHQUFHNWhCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDakRrRCxJQUFJLENBQUMrSSxDQUFDLENBQUNXLFVBQVUsR0FBR3JpQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0VBQ2pELENBQUM7RUFDRHdHLE9BQU8sRUFBRTtJQUNMWSxlQUFlLEVBQUUsU0FBQUEsZ0JBQVV4RCxLQUFLLEVBQUU7TUFDOUIsSUFBSTlMLE1BQU0sR0FBRyxJQUFJLENBQUN5SyxjQUFjLENBQUMrRSxJQUFJLENBQUMsVUFBVTFOLE9BQU8sRUFBRXhJLEtBQUssRUFBRW1XLEtBQUssRUFBRTtRQUNuRSxPQUFPM04sT0FBTyxDQUFDeEYsR0FBRyxDQUFDbUssV0FBVyxDQUFDLENBQUMsS0FBS3FGLEtBQUssQ0FBQ3hQLEdBQUcsQ0FBQ21LLFdBQVcsQ0FBQyxDQUFDO01BQ2hFLENBQUMsQ0FBQztNQUNGLE9BQU96RyxNQUFNO0lBQ2pCLENBQUM7SUFDRHNVLGFBQWEsRUFBRSxTQUFBQSxjQUFVaFksR0FBRyxFQUFFd1IsU0FBUyxFQUFFO01BQ3JDLE9BQU94UixHQUFHLElBQUlBLEdBQUcsQ0FBQ2dSLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHUSxTQUFTLEdBQUcsVUFBVSxHQUFHQSxTQUFTO0lBQ3JHLENBQUM7SUFDRDFCLFVBQVUsRUFBRSxTQUFBQSxXQUFVRCxPQUFPLEVBQUU7TUFDM0J2QyxHQUFHLENBQUNvRyxLQUFLLENBQUMscUJBQXFCLEVBQUU3RCxPQUFPLENBQUM7SUFDN0MsQ0FBQztJQUNERSxzQkFBc0IsRUFBRSxTQUFBQSx1QkFBVVAsS0FBSyxFQUFFO01BQ3JDbEMsR0FBRyxDQUFDb0csS0FBSyxDQUFDLHNCQUFzQixFQUFFbEUsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFDRFEsV0FBVyxFQUFFLFNBQUFBLFlBQVVSLEtBQUssRUFBRTtNQUMxQmxDLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxFLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBQ0Q0RSxXQUFXLEVBQUUsU0FBQUEsWUFBVTVFLEtBQUssRUFBRTtNQUMxQmxDLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxFLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBQ0R5SSxTQUFTLEVBQUUsU0FBQUEsVUFBVXpJLEtBQUssRUFBRS9YLENBQUMsRUFBRTtNQUMzQjZWLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyx5QkFBeUIsRUFBRWxFLEtBQUssRUFBRS9YLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBQ0RnaEIsYUFBYSxFQUFFLFNBQUFBLGNBQVVDLFVBQVUsRUFBQztNQUNoQyxJQUFJQyxDQUFDLEdBQUcsSUFBSTNjLElBQUksQ0FBQzBjLFVBQVUsQ0FBQztNQUM1QixPQUFPQyxDQUFDLENBQUNDLGNBQWMsQ0FBQyxDQUFDO0lBQzdCO0VBQ0o7QUFDSixDQUFDLENBQUM7QUN0SEY7QUFDQTtBQUNBO0FBQ0E7QUFDQXJMLEdBQUcsQ0FBQ2dKLFNBQVMsQ0FBQyxPQUFPLEVBQUU7RUFDbkJDLFFBQVEscTJGQTZDSDtFQUNMRSxLQUFLLEVBQUU7SUFDSG1DLFdBQVcsRUFBRXJSO0VBQ2pCLENBQUM7RUFDRDlNLElBQUksRUFBRSxTQUFBQSxLQUFBLEVBQVk7SUFDZCxPQUFPO01BQ0hvZSxRQUFRLEVBQUUsRUFBRTtNQUNaQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7TUFDbENDLE9BQU8sRUFBRSxDQUFDO01BQ1ZuQixDQUFDLEVBQUUsQ0FBQztJQUNSLENBQUM7RUFDTCxDQUFDO0VBQ0RoSixPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO0lBQ2pCLElBQUlDLElBQUksR0FBRyxJQUFJOztJQUVmO0lBQ0FBLElBQUksQ0FBQytJLENBQUMsQ0FBQ29CLGdCQUFnQixHQUFHOWlCLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDMURrRCxJQUFJLENBQUMrSSxDQUFDLENBQUNxQixtQkFBbUIsR0FBRy9pQixDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFa0QsSUFBSSxDQUFDK0ksQ0FBQyxDQUFDc0IsZUFBZSxHQUFHaGpCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDeERrRCxJQUFJLENBQUMrSSxDQUFDLENBQUN1QixlQUFlLEdBQUdqakIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUN4RGtELElBQUksQ0FBQytJLENBQUMsQ0FBQ3dCLGtCQUFrQixHQUFHbGpCLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDL0RrRCxJQUFJLENBQUMrSSxDQUFDLENBQUN5QixjQUFjLEdBQUduakIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUN0RGtELElBQUksQ0FBQytJLENBQUMsQ0FBQzBCLGVBQWUsR0FBR3BqQixDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0VBQzVELENBQUM7RUFDRHdHLE9BQU8sRUFBRTtJQUNMb0gsSUFBSSxFQUFFLFNBQUFBLEtBQUEsRUFBWTtNQUNkLElBQUksQ0FBQ1IsT0FBTyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxHQUFHLENBQUM7SUFDbkMsQ0FBQztJQUNEUyxRQUFRLEVBQUUsU0FBQUEsU0FBQSxFQUFZO01BQ2xCLElBQUksQ0FBQ1QsT0FBTyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxHQUFHLENBQUM7SUFDbkMsQ0FBQztJQUNEVSxPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO01BQ2pCLElBQUksQ0FBQ1YsT0FBTyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUNEVyxNQUFNLEVBQUUsU0FBQUEsT0FBQSxFQUFZO01BQ2hCLElBQUksQ0FBQ1gsT0FBTyxHQUFHLElBQUksQ0FBQ1ksVUFBVSxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUNEQyxJQUFJLEVBQUUsU0FBQUEsS0FBVUMsVUFBVSxFQUFFO01BQ3hCLElBQUksQ0FBQ2QsT0FBTyxHQUFHYyxVQUFVO0lBQzdCO0VBQ0osQ0FBQztFQUNEdkosUUFBUSxFQUFFO0lBQ054VCxLQUFLLEVBQUUsU0FBQUEsTUFBQSxFQUFZO01BQ2YsT0FBTyxJQUFJLENBQUM4YixXQUFXLEdBQUcsSUFBSSxDQUFDQSxXQUFXLENBQUNwWSxNQUFNLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0RtWixVQUFVLEVBQUUsU0FBQUEsV0FBQSxFQUFZO01BQ3BCLElBQUlHLEtBQUssR0FBRy9iLElBQUksQ0FBQ2djLElBQUksQ0FBQyxJQUFJLENBQUNqZCxLQUFLLEdBQUcsSUFBSSxDQUFDK2IsUUFBUSxDQUFDO01BQ2pELE9BQU9pQixLQUFLLEdBQUcsQ0FBQyxHQUFHQSxLQUFLLEdBQUcsQ0FBQztJQUNoQyxDQUFDO0lBQ0RFLFVBQVUsRUFBRSxTQUFBQSxXQUFBLEVBQVk7TUFDcEIsT0FBTyxJQUFJLENBQUNqQixPQUFPLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQ1ksVUFBVTtJQUM5QyxDQUFDO0lBQ0RNLFdBQVcsRUFBRSxTQUFBQSxZQUFBLEVBQVk7TUFDckIsT0FBTyxJQUFJLENBQUNsQixPQUFPLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBQ0RtQixTQUFTLEVBQUUsU0FBQUEsVUFBQSxFQUFZO01BQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUNGLFVBQVU7SUFDM0IsQ0FBQztJQUNERyxTQUFTLEVBQUUsU0FBQUEsVUFBQSxFQUFZO01BQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUNGLFdBQVc7SUFDNUIsQ0FBQztJQUNERyxVQUFVLEVBQUUsU0FBQUEsV0FBQSxFQUFZO01BQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUNILFdBQVc7SUFDNUIsQ0FBQztJQUNESSxTQUFTLEVBQUUsU0FBQUEsVUFBQSxFQUFZO01BQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUNMLFVBQVU7SUFDM0IsQ0FBQztJQUNEO0lBQ0E7SUFDQTtJQUNBTSxrQkFBa0IsRUFBRSxTQUFBQSxtQkFBQSxFQUFZO01BQzVCLElBQUlDLEtBQUssR0FBRyxJQUFJLENBQUMxQixRQUFRLEdBQUcsSUFBSSxDQUFDRSxPQUFPO01BQ3hDLElBQUl5QixHQUFHLEdBQUdELEtBQUssR0FBRyxJQUFJLENBQUMxQixRQUFRO01BQy9CLElBQUlwVixNQUFNLEdBQUcsSUFBSSxDQUFDbVYsV0FBVyxDQUFDMWhCLEtBQUssQ0FBQ3FqQixLQUFLLEVBQUVDLEdBQUcsQ0FBQztNQUMvQ25OLEdBQUcsQ0FBQ29HLEtBQUssQ0FBQyxZQUFZLEVBQUVoUSxNQUFNLENBQUM7TUFDL0IsT0FBT0EsTUFBTTtJQUNqQixDQUFDO0lBQ0RnWCxTQUFTLEVBQUUsU0FBQUEsVUFBQSxFQUFZO01BRW5CLElBQUlDLEtBQUssR0FBRyxFQUFFO01BRWRBLEtBQUssQ0FBQy9kLElBQUksQ0FBQyxJQUFJLENBQUNvYyxPQUFPLEdBQUcsQ0FBQyxDQUFDOztNQUU1QjtNQUNBLElBQUk0QixhQUFhLEdBQUcsSUFBSSxDQUFDNUIsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNBLE9BQU8sR0FBRyxDQUFDLENBQUM7TUFDeEQyQixLQUFLLENBQUMvSixPQUFPLENBQUNnSyxhQUFhLENBQUM7TUFFNUIsSUFBSUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDN0IsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUNBLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2xFMkIsS0FBSyxDQUFDL0osT0FBTyxDQUFDaUssbUJBQW1CLENBQUM7O01BR2xDO01BQ0EsSUFBSUMsWUFBWSxHQUFHLElBQUksQ0FBQ2xCLFVBQVUsR0FBRyxJQUFJLENBQUNaLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUM3RTJCLEtBQUssQ0FBQy9kLElBQUksQ0FBQ2tlLFlBQVksQ0FBQztNQUV4QixJQUFJQyxpQkFBaUIsR0FBRyxJQUFJLENBQUNuQixVQUFVLEdBQUcsSUFBSSxDQUFDWixPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7TUFDbEYyQixLQUFLLENBQUMvZCxJQUFJLENBQUNtZSxpQkFBaUIsQ0FBQztNQUU3QixPQUFPSixLQUFLO0lBQ2hCO0VBQ0osQ0FBQztFQUNEL0ksS0FBSyxFQUFFO0lBQ0hpSCxXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO01BQ3JCLElBQUksQ0FBQ0csT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7O0lBQ0RGLFFBQVEsRUFBRSxTQUFBQSxTQUFBLEVBQVk7TUFDbEIsSUFBSSxDQUFDRSxPQUFPLEdBQUcsQ0FBQztJQUNwQjtFQUNKO0FBQ0osQ0FBQyxDQUFDO0FDL0pGO0FBQ0F6TCxHQUFHLENBQUNnSixTQUFTLENBQUMsZUFBZSxFQUFFO0VBQzNCQyxRQUFRLGlRQUtIO0VBQ0xFLEtBQUssRUFBRTtJQUNIc0UsT0FBTyxFQUFFaGMsTUFBTTtJQUNmaWMsZUFBZSxFQUFFamMsTUFBTTtJQUN2QmtjLEdBQUcsRUFBRWhEO0VBQ1QsQ0FBQztFQUNEM0gsUUFBUSxFQUFFO0lBQ040SyxRQUFRLEVBQUUsU0FBQUEsU0FBQSxFQUFZO01BQ2xCLE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUM3USxXQUFXLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQzhRLGVBQWUsQ0FBQzlRLFdBQVcsQ0FBQyxDQUFDO0lBQzNFO0VBQ0o7QUFDSixDQUFDLENBQUM7QUNsQkYsU0FBU2lSLDRCQUE0QkEsQ0FBQzlVLEVBQUUsRUFBRStVLGdCQUFnQixFQUFFQyxZQUFZLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxFQUFFQyxjQUFjLEVBQUVDLFlBQVksRUFBRUMsZ0JBQWdCLEVBQUVDLGtCQUFrQixFQUFFO0VBRXZLLElBQUl4VCxNQUFNLEdBQUdqUyxDQUFDLENBQUNtQyxRQUFRLENBQUNpZCxjQUFjLENBQUNwZixDQUFDLENBQUNtUSxFQUFFLENBQUMsQ0FBQzVMLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUltaEIsWUFBWSxHQUFHelQsTUFBTSxDQUFDMU4sSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUV0QyxJQUFJb2hCLGdCQUFnQixHQUFHM2xCLENBQUMsQ0FBQ21RLEVBQUUsQ0FBQztFQUM1QixJQUFJeVYsUUFBUSxHQUFHRCxnQkFBZ0IsQ0FBQ2hiLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDMUMsSUFBSWtiLGFBQWE7RUFFakJDLGNBQWMsQ0FBQ3JmLElBQUksQ0FBQ29mLGFBQWEsR0FBRyxJQUFJek8sR0FBRyxDQUFDO0lBQ3hDakgsRUFBRSxFQUFFd1YsZ0JBQWdCLENBQUNySyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCL1csSUFBSSxFQUFFO01BQ0Z3VCxVQUFVLEVBQUUsRUFBRTtNQUNkZ08sYUFBYSxFQUFFLElBQUk7TUFDbkIzTixXQUFXLEVBQUUsS0FBSztNQUNsQjROLFFBQVEsRUFBRUosUUFBUTtNQUNsQjNPLFdBQVcsRUFBRSxLQUFLO01BQ2xCcU8sY0FBYyxFQUFFQSxjQUFjO01BQzlCVyxlQUFlLEVBQUUsRUFBRTtNQUNuQlYsWUFBWSxFQUFFQSxZQUFZO01BQzFCVyxZQUFZLEVBQUUsSUFBSTtNQUNsQkMsY0FBYyxFQUFFLElBQUk7TUFDcEJDLGNBQWMsRUFBRTtJQUNwQixDQUFDO0lBQ0QxTixPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO01BQ2pCLElBQUlDLElBQUksR0FBRyxJQUFJO01BRWZBLElBQUksQ0FBQ3VCLFlBQVksR0FBR3hGLElBQUksQ0FBQ3lGLEtBQUssQ0FBQ0gsWUFBWSxDQUFDQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0RHLFFBQVEsRUFBRTtNQUNOZ0UsS0FBSyxFQUFFO1FBQ0g5QyxHQUFHLEVBQUUsU0FBQUEsSUFBQSxFQUFZO1VBQ2IsSUFBSStLLFVBQVUsR0FBRyxFQUFFO1VBQ25CLElBQUksQ0FBQyxJQUFJLENBQUNwUCxXQUFXLEVBQUU7WUFDbkIsT0FBT3ZDLElBQUksQ0FBQ2lILFNBQVMsQ0FBQytKLFlBQVksQ0FBQztVQUN2QztVQUNBLElBQUksQ0FBQzNOLFVBQVUsQ0FBQ3dFLE9BQU8sQ0FBQyxVQUFVK0osQ0FBQyxFQUFFO1lBQ2pDLElBQUlBLENBQUMsQ0FBQy9NLFNBQVMsS0FBSyxXQUFXLEVBQUU7Y0FDN0I7WUFDSjtZQUNBOE0sVUFBVSxDQUFDNWYsSUFBSSxDQUFDO2NBQUU2SixJQUFJLEVBQUVnVyxDQUFDLENBQUMvTSxTQUFTO2NBQUVnTixTQUFTLEVBQUVELENBQUMsQ0FBQ0MsU0FBUztjQUFFQyxLQUFLLEVBQUVGLENBQUMsQ0FBQ0UsS0FBSztjQUFFQyxTQUFTLEVBQUVILENBQUMsQ0FBQ0csU0FBUztjQUFFQyxNQUFNLEVBQUVKLENBQUMsQ0FBQ0ksTUFBTTtjQUFFQyxnQkFBZ0IsRUFBRUwsQ0FBQyxDQUFDSztZQUFpQixDQUFDLENBQUM7VUFDbEssQ0FBQyxDQUFDO1VBQ0YsT0FBT2pTLElBQUksQ0FBQ2lILFNBQVMsQ0FBQzBLLFVBQVUsQ0FBQztRQUNyQyxDQUFDO1FBQ0Q5SyxHQUFHLEVBQUUsU0FBQUEsSUFBVXFMLE1BQU0sRUFBRTtVQUNuQixJQUFJak8sSUFBSSxHQUFHLElBQUk7VUFDZixJQUFJME4sVUFBVSxHQUFHTyxNQUFNLElBQUksRUFBRTtVQUM3QixJQUFJQyxNQUFNLEdBQUc3bUIsQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUM7VUFDekIsSUFBSTBGLEtBQUssR0FBRyxFQUFFO1VBQ2QsSUFBSWpILE1BQU0sR0FBRyxDQUFDO1VBQ2QrYixVQUFVLENBQUM5SixPQUFPLENBQUMsVUFBVStKLENBQUMsRUFBRWpjLENBQUMsRUFBRTtZQUMvQmtILEtBQUssQ0FBQzlLLElBQUksQ0FBQztjQUFFRCxJQUFJLEVBQUUsR0FBRyxHQUFHOGYsQ0FBQyxDQUFDaFcsSUFBSTtjQUFFMkssSUFBSSxFQUFFLEVBQUU7Y0FBRTFCLFNBQVMsRUFBRSxFQUFFO2NBQUVtTixNQUFNLEVBQUVKLENBQUMsQ0FBQ0ksTUFBTTtjQUFFQyxnQkFBZ0IsRUFBRUwsQ0FBQyxDQUFDSztZQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JIeGIsT0FBTyxHQUFHbkwsQ0FBQyxDQUFDb1IsSUFBSSxDQUFDeVYsTUFBTSxDQUFDLENBQUNsaUIsSUFBSSxDQUFDLFlBQVk7Y0FDdEMzRSxDQUFDLENBQUNzTixJQUFJLENBQUM7Z0JBQ0h6RCxHQUFHLEVBQUV1YixZQUFZLEdBQUcsUUFBUSxHQUFHaEosa0JBQWtCLENBQUNrSyxDQUFDLENBQUNoVyxJQUFJLENBQUM7Z0JBQ3pEb0gsTUFBTSxFQUFFLEtBQUs7Z0JBQ2J0TSxPQUFPLEVBQUUsU0FBQUEsUUFBVTdHLElBQUksRUFBRTtrQkFDckJBLElBQUksQ0FBQ3VpQixNQUFNLEdBQUd2aUIsSUFBSSxDQUFDaUMsSUFBSSxHQUFHNkQsQ0FBQyxDQUFDdkcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2tCQUN4Q1MsSUFBSSxDQUFDa2lCLFNBQVMsR0FBR0gsQ0FBQyxDQUFDRyxTQUFTLENBQUMsQ0FBQztrQkFDOUJsaUIsSUFBSSxDQUFDbWlCLE1BQU0sR0FBR0osQ0FBQyxDQUFDSSxNQUFNLENBQUMsQ0FBQztrQkFDeEJuaUIsSUFBSSxDQUFDb2lCLGdCQUFnQixHQUFHTCxDQUFDLENBQUNLLGdCQUFnQixDQUFDO2tCQUMzQ3BWLEtBQUssQ0FBQ3VMLE1BQU0sQ0FBQ3pTLENBQUMsRUFBRSxDQUFDLEVBQUU5RixJQUFJLENBQUM7a0JBQ3hCLElBQUlnTixLQUFLLENBQUNqSCxNQUFNLEtBQUssRUFBRUEsTUFBTSxFQUFFO29CQUMzQmlILEtBQUssQ0FBQ2dMLE9BQU8sQ0FBQyxVQUFVK0osQ0FBQyxFQUFFO3NCQUN2QjNOLElBQUksQ0FBQ1osVUFBVSxDQUFDdFIsSUFBSSxDQUFDNmYsQ0FBQyxDQUFDO29CQUMzQixDQUFDLENBQUM7b0JBQ0YzTixJQUFJLENBQUMxQixXQUFXLEdBQUcsSUFBSTtrQkFDM0I7Z0JBQ0osQ0FBQztnQkFDRDVMLEtBQUssRUFBRSxTQUFBQSxNQUFVQSxNQUFLLEVBQUU7a0JBQ3BCb00sT0FBTyxDQUFDNkUsR0FBRyxDQUFDNUgsSUFBSSxDQUFDaUgsU0FBUyxDQUFDdFEsTUFBSyxDQUFDLENBQUM7a0JBQ2xDa0csS0FBSyxDQUFDdUwsTUFBTSxDQUFDelMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFBRTdELElBQUksRUFBRThmLENBQUMsQ0FBQ2hXLElBQUk7b0JBQUUySyxJQUFJLEVBQUUsRUFBRTtvQkFBRTFCLFNBQVMsRUFBRSxXQUFXO29CQUFFa04sU0FBUyxFQUFFLEVBQUU7b0JBQUVDLE1BQU0sRUFBRTtzQkFBRUosQ0FBQyxFQUFFLEdBQUc7c0JBQUVTLENBQUMsRUFBRTtvQkFBSSxDQUFDO29CQUFFSixnQkFBZ0IsRUFBRUwsQ0FBQyxDQUFDSztrQkFBaUIsQ0FBQyxDQUFDO2tCQUN2SixJQUFJcFYsS0FBSyxDQUFDakgsTUFBTSxLQUFLLEVBQUVBLE1BQU0sRUFBRTtvQkFDM0JpSCxLQUFLLENBQUNnTCxPQUFPLENBQUMsVUFBVStKLENBQUMsRUFBRTtzQkFDdkIzTixJQUFJLENBQUNaLFVBQVUsQ0FBQ3RSLElBQUksQ0FBQzZmLENBQUMsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDO29CQUNGM04sSUFBSSxDQUFDMUIsV0FBVyxHQUFHLElBQUk7a0JBQzNCO2dCQUNKO2NBQ0osQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDO1VBRUY0UCxNQUFNLENBQUNyWSxPQUFPLENBQUMsQ0FBQztRQUNwQjtNQUNKLENBQUM7TUFDRHNELFFBQVEsRUFBRSxTQUFBQSxTQUFBLEVBQVk7UUFDbEIsT0FBT2pLLElBQUksQ0FBQ21mLEtBQUssQ0FBQyxJQUFJLENBQUNqQixhQUFhLENBQUNoZixJQUFJLEdBQUcsSUFBSSxDQUFDO01BQ3JELENBQUM7TUFDRGtnQixXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO1FBQ3JCLElBQUlDLG9CQUFvQixHQUFHLEVBQUU7UUFDN0IsS0FBSyxJQUFJN2MsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHLElBQUksQ0FBQzBOLFVBQVUsQ0FBQ3pOLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7VUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQzBOLFVBQVUsQ0FBQzFOLENBQUMsQ0FBQyxDQUFDa2MsU0FBUyxFQUFFO1lBQy9CVyxvQkFBb0IsQ0FBQ3pnQixJQUFJLENBQUMsSUFBSSxDQUFDc1IsVUFBVSxDQUFDMU4sQ0FBQyxDQUFDLENBQUM7VUFDakQ7UUFDSjtRQUVBLE9BQU82YyxvQkFBb0IsQ0FBQzVjLE1BQU0sS0FBSyxDQUFDLElBQUk0YyxvQkFBb0IsQ0FBQzVjLE1BQU0sR0FBRyxDQUFDLElBQUkrYSxhQUFhO01BQ2hHLENBQUM7TUFDRGhLLFNBQVMsRUFBRSxTQUFBQSxVQUFBLEVBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUNqRCxXQUFXLEdBQUcsR0FBRyxHQUFHLEdBQUc7TUFDdkMsQ0FBQztNQUNEOEIsWUFBWSxFQUFFO1FBQ1ZvQixHQUFHLEVBQUUsU0FBQUEsSUFBQSxFQUFZO1VBQ2IsT0FBTztZQUNIbEQsV0FBVyxFQUFFLElBQUksQ0FBQ0E7VUFDdEIsQ0FBQztRQUNMLENBQUM7UUFDRG1ELEdBQUcsRUFBRSxTQUFBQSxJQUFVQyxRQUFRLEVBQUU7VUFDckIsSUFBSSxDQUFDQSxRQUFRLEVBQUU7WUFDWDtVQUNKO1VBQ0EsSUFBSSxDQUFDcEQsV0FBVyxHQUFHb0QsUUFBUSxDQUFDcEQsV0FBVztRQUMzQztNQUNKO0lBQ0osQ0FBQztJQUNEeUQsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtNQUNqQixJQUFJbEQsSUFBSSxHQUFHLElBQUk7TUFFZkEsSUFBSSxDQUFDeUYsS0FBSyxHQUFHc0gsWUFBWTtNQUV6Qi9NLElBQUksQ0FBQ0UsR0FBRyxDQUFDLCtCQUErQixFQUFFLFVBQVVRLEtBQUssRUFBRTtRQUN2RFYsSUFBSSxDQUFDcUYsb0JBQW9CLENBQUMzRSxLQUFLLENBQUM7TUFDcEMsQ0FBQyxDQUFDO01BRUZWLElBQUksQ0FBQ0UsR0FBRyxDQUFDLHNCQUFzQixFQUFFLFVBQVVRLEtBQUssRUFBRTtRQUM5Q1YsSUFBSSxDQUFDd08sV0FBVyxDQUFDOU4sS0FBSyxDQUFDO01BQzNCLENBQUMsQ0FBQztNQUVGLElBQUkrTixRQUFRLEdBQUcsR0FBRyxHQUFHbEMsZ0JBQWdCO01BQ3JDLElBQUltQyxRQUFRLEdBQUcxQixnQkFBZ0IsQ0FBQ2hiLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDMUMsSUFBSTRVLG1CQUFtQixHQUFHM0ksVUFBVSxDQUFDLENBQUM7TUFFdEM1VyxDQUFDLENBQUNvbkIsUUFBUSxDQUFDLENBQ04zaUIsVUFBVSxDQUFDO1FBQ1I1QixzQkFBc0IsRUFBRSxFQUFFO1FBQzFCWCxRQUFRLEVBQUVsQyxDQUFDLENBQUMsR0FBRyxHQUFHcW5CLFFBQVEsQ0FBQztRQUMzQnZkLFFBQVEsRUFBRSxNQUFNO1FBQ2hCRCxHQUFHLEVBQUVzYixZQUFZO1FBQ2pCaGlCLFlBQVksRUFBRXNpQixrQkFBa0I7UUFDaENuaEIsR0FBRyxFQUFFLFNBQUFBLElBQVVoRCxDQUFDLEVBQUVpRCxJQUFJLEVBQUU7VUFDcEIsSUFBSStpQixLQUFLLEdBQUcvaUIsSUFBSSxDQUFDb0MsS0FBSyxDQUFDMkQsTUFBTTtVQUM3QixJQUFJRCxDQUFDO1VBQ0wsS0FBS0EsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHaWQsS0FBSyxFQUFFamQsQ0FBQyxFQUFFLEVBQUU7WUFDeEI5RixJQUFJLENBQUNvQyxLQUFLLENBQUMwRCxDQUFDLENBQUMsQ0FBQ2QsVUFBVSxHQUNwQm9QLElBQUksQ0FBQzRPLFdBQVcsQ0FBQyxDQUFDLEdBQUdoakIsSUFBSSxDQUFDb0MsS0FBSyxDQUFDMEQsQ0FBQyxDQUFDLENBQUM3RCxJQUFJO1lBQzNDakMsSUFBSSxDQUFDb0MsS0FBSyxDQUFDMEQsQ0FBQyxDQUFDLENBQUNzYyxnQkFBZ0IsR0FBR3BpQixJQUFJLENBQUNvQyxLQUFLLENBQUMwRCxDQUFDLENBQUMsQ0FBQzdELElBQUk7VUFDdkQ7VUFDQWpDLElBQUksQ0FBQ0ssTUFBTSxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUNEVCxRQUFRLEVBQUUsU0FBQUEsU0FBQSxFQUFZO1VBQ2xCLElBQUlxYixnQkFBZ0IsR0FBR3hmLENBQUMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7VUFFeEUsT0FBTyxDQUNIO1lBQUVqUCxJQUFJLEVBQUUsTUFBTTtZQUFFdkMsS0FBSyxFQUFFdWhCO1VBQWlCLENBQUMsRUFDekM7WUFBRWhmLElBQUksRUFBRSw0QkFBNEI7WUFBRXZDLEtBQUssRUFBRXViO1VBQWlCLENBQUMsRUFDL0Q7WUFBRWhaLElBQUksRUFBRSx1QkFBdUI7WUFBRXZDLEtBQUssRUFBRXNiO1VBQW9CLENBQUMsQ0FDaEU7UUFDTCxDQUFDO1FBQ0Q1YSxJQUFJLEVBQUUsU0FBQUEsS0FBVXJELENBQUMsRUFBRWlELElBQUksRUFBRTtVQUNyQixJQUFJaWpCLGFBQWEsR0FBRyxFQUFFO1VBQ3RCLElBQUlDLFFBQVEsR0FBRyxFQUFFO1VBRWpCLElBQUlsakIsSUFBSSxDQUFDZ0osTUFBTSxDQUFDNUcsS0FBSyxDQUFDMkQsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixLQUFLLElBQUlELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRzlGLElBQUksQ0FBQ2dKLE1BQU0sQ0FBQzVHLEtBQUssQ0FBQzJELE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7Y0FDL0M5RixJQUFJLENBQUNnSixNQUFNLENBQUM1RyxLQUFLLENBQUMwRCxDQUFDLENBQUMsQ0FBQ21jLEtBQUssR0FBRyxJQUFJO2NBQ2pDO2NBQ0EsSUFBSWppQixJQUFJLENBQUNnSixNQUFNLENBQUM1RyxLQUFLLENBQUMwRCxDQUFDLENBQUMsQ0FBQ2dCLEtBQUssS0FBS2hKLFNBQVMsSUFBSWtDLElBQUksQ0FBQ2dKLE1BQU0sQ0FBQzVHLEtBQUssQ0FBQzBELENBQUMsQ0FBQyxDQUFDZ0IsS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDakY5RyxJQUFJLENBQUNnSixNQUFNLENBQUM1RyxLQUFLLENBQUMwRCxDQUFDLENBQUMsQ0FBQ3NjLGdCQUFnQixHQUFHcGlCLElBQUksQ0FBQ29DLEtBQUssQ0FBQzBELENBQUMsQ0FBQyxDQUFDc2MsZ0JBQWdCO2dCQUN0RWEsYUFBYSxDQUFDL2dCLElBQUksQ0FBQ2xDLElBQUksQ0FBQ2dKLE1BQU0sQ0FBQzVHLEtBQUssQ0FBQzBELENBQUMsQ0FBQyxDQUFDO2NBQzVDLENBQUMsTUFFR29kLFFBQVEsSUFBSWxqQixJQUFJLENBQUNnSixNQUFNLENBQUM1RyxLQUFLLENBQUMwRCxDQUFDLENBQUMsQ0FBQ2dCLEtBQUssR0FBRyxJQUFJO1lBQ3JEO1VBQ0o7VUFFQSxJQUFJb2MsUUFBUSxLQUFLLEVBQUUsRUFBRTtZQUNqQmhHLEtBQUssQ0FBQ2dHLFFBQVEsQ0FBQztZQUNmO1VBQ0o7VUFDQWhRLE9BQU8sQ0FBQzZFLEdBQUcsQ0FBQ2tMLGFBQWEsQ0FBQztVQUMxQixJQUFJQSxhQUFhLENBQUNsZCxNQUFNLEdBQUcsQ0FBQyxJQUFJK2EsYUFBYSxLQUFLLEtBQUssRUFBRTtZQUNyRDVELEtBQUssQ0FBQ3poQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDckNvUSxhQUFhLENBQUM5TixVQUFVLENBQUN0UixJQUFJLENBQUMrZ0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9DM0IsYUFBYSxDQUFDNU8sV0FBVyxHQUFHLElBQUk7VUFDcEMsQ0FBQyxNQUFNO1lBQ0g0TyxhQUFhLENBQUM5TixVQUFVLEdBQUc4TixhQUFhLENBQUM5TixVQUFVLENBQUNqSCxNQUFNLENBQUMwVyxhQUFhLENBQUM7WUFDekUzQixhQUFhLENBQUM1TyxXQUFXLEdBQUcsSUFBSTtVQUNwQztRQUNKLENBQUM7UUFDRDVMLEtBQUssRUFBRSxTQUFBQSxNQUFVa0IsS0FBSyxFQUFFaUIsVUFBVSxFQUFFbEIsV0FBVyxFQUFFO1VBQzdDbUwsT0FBTyxDQUFDNkUsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1VBQy9CN0UsT0FBTyxDQUFDNkUsR0FBRyxDQUFDL1AsS0FBSyxDQUFDO1VBQ2xCa0wsT0FBTyxDQUFDNkUsR0FBRyxDQUFDOU8sVUFBVSxDQUFDO1VBQ3ZCaUssT0FBTyxDQUFDNkUsR0FBRyxDQUFDaFEsV0FBVyxDQUFDO1FBQzVCO01BQ0osQ0FBQyxDQUFDLENBQ0RoRSxFQUFFLENBQUMsMkJBQTJCLEVBQUUsVUFBQ2hILENBQUMsRUFBRVcsT0FBTyxFQUFLO1FBQzdDLElBQUk2RSxJQUFJLEdBQUc3RSxPQUFPLENBQUMwRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNCO1FBQ0ExRSxPQUFPLENBQUNvSCxJQUFJLEdBQUcsSUFBSW9XLElBQUksQ0FDbkIsQ0FBQ3hkLE9BQU8sQ0FBQ29ILElBQUksQ0FBQyxFQUNkdkMsSUFBSSxDQUFDTixJQUFJLEVBQ1Q7VUFDSXBGLElBQUksRUFBRTBGLElBQUksQ0FBQzFGLElBQUk7VUFDZnNlLFlBQVksRUFBRTVZLElBQUksQ0FBQzRZO1FBQ3ZCLENBQUMsQ0FBQztNQUNWLENBQUMsQ0FBQztJQUNWLENBQUM7SUFDRHpELE9BQU8sRUFBRTtNQUNMa0wsV0FBVyxFQUFFLFNBQUFBLFlBQVU5TixLQUFLLEVBQUU7UUFDMUIsSUFBSSxDQUFDME0sYUFBYSxHQUFHMU0sS0FBSztNQUM5QixDQUFDO01BQ0RrTyxXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO1FBQ3JCLE9BQU8sc0NBQXNDLENBQUNyakIsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVNFMsQ0FBQyxFQUFFO1VBQ3hFLElBQUk0USxDQUFDLEdBQUc3ZixJQUFJLENBQUM4ZixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQUVDLENBQUMsR0FBRzlRLENBQUMsS0FBSyxHQUFHLEdBQUc0USxDQUFDLEdBQUlBLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBSTtVQUNuRSxPQUFPRSxDQUFDLENBQUM5akIsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7TUFDTixDQUFDO01BQ0QrakIsY0FBYyxFQUFFLFNBQUFBLGVBQVVDLEtBQUssRUFBRTtRQUM3QixJQUFJQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDaEMsYUFBYSxFQUFFO1VBQ3BCLElBQUlsZixLQUFLLEdBQUcsSUFBSSxDQUFDa1IsVUFBVSxJQUFJLElBQUksQ0FBQ0EsVUFBVSxDQUFDOEMsT0FBTyxDQUFDLElBQUksQ0FBQ2tMLGFBQWEsQ0FBQztVQUMxRSxJQUFJbGYsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ1praEIsT0FBTyxHQUFHLElBQUksQ0FBQ2hRLFVBQVUsQ0FBQ2xSLEtBQUssQ0FBQztZQUNoQ2toQixPQUFPLENBQUN4QixTQUFTLEdBQUcsSUFBSTtZQUN4QjtZQUNBLElBQUksQ0FBQ3hPLFVBQVUsQ0FBQytFLE1BQU0sQ0FBQ2pXLEtBQUssRUFBRSxDQUFDLENBQUM7VUFDcEM7UUFDSixDQUFDLE1BQ0k7VUFDRDtVQUNBLElBQUksSUFBSSxDQUFDa1IsVUFBVSxDQUFDek4sTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QnlkLE9BQU8sR0FBRyxJQUFJLENBQUNoUSxVQUFVLENBQUNsUixLQUFLLENBQUM7WUFDaENraEIsT0FBTyxDQUFDeEIsU0FBUyxHQUFHLElBQUk7WUFDeEI7WUFDQSxJQUFJLENBQUN4TyxVQUFVLENBQUMrRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUNoQztRQUNKO1FBQ0EsSUFBSSxDQUFDaUosYUFBYSxHQUFHLElBQUk7TUFDN0IsQ0FBQztNQUNEaUMsa0JBQWtCLEVBQUUsU0FBQUEsbUJBQVVGLEtBQUssRUFBRTtRQUNqQyxJQUFJLENBQUNHLGNBQWMsR0FBRyxJQUFJdEssU0FBUyxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDOUIsS0FBSyxDQUFDbU0sY0FBYyxDQUFDO1FBQ3BFLElBQUksQ0FBQ0EsY0FBYyxDQUFDbkssSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDbUksZUFBZSxHQUFHLElBQUksQ0FBQ0YsYUFBYSxDQUFDVSxTQUFTO01BQ3ZELENBQUM7TUFDRHlCLG9CQUFvQixFQUFFLFNBQUFBLHFCQUFVSixLQUFLLEVBQUU7UUFDbkMsSUFBSSxDQUFDRyxjQUFjLENBQUNqSixJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMrRyxhQUFhLENBQUNVLFNBQVMsR0FBRyxJQUFJLENBQUNSLGVBQWU7TUFDdkQsQ0FBQztNQUNEa0MsZUFBZSxFQUFFLFNBQUFBLGdCQUFVTCxLQUFLLEVBQUU7UUFDOUIsSUFBSSxDQUFDMUIsY0FBYyxHQUFHLElBQUl6SSxTQUFTLENBQUNDLEtBQUssQ0FBQyxJQUFJLENBQUM5QixLQUFLLENBQUNzSyxjQUFjLENBQUM7UUFDcEUsSUFBSSxDQUFDQSxjQUFjLENBQUN0SSxJQUFJLENBQUMsQ0FBQztRQUMxQjtRQUNBLElBQUksQ0FBQ2lJLGFBQWEsQ0FBQ1csTUFBTSxHQUFHO1VBQ3hCSixDQUFDLEVBQUUsSUFBSSxDQUFDUCxhQUFhLENBQUNXLE1BQU0sQ0FBQ0osQ0FBQztVQUM5QlMsQ0FBQyxFQUFFLElBQUksQ0FBQ2hCLGFBQWEsQ0FBQ1csTUFBTSxDQUFDSztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDYixZQUFZLEdBQUcsSUFBSSxDQUFDSCxhQUFhLENBQUNXLE1BQU07TUFDakQsQ0FBQztNQUNEMEIsb0JBQW9CLEVBQUUsU0FBQUEscUJBQVVOLEtBQUssRUFBRTtRQUNuQyxJQUFJLENBQUMxQixjQUFjLENBQUNwSCxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMrRyxhQUFhLENBQUNXLE1BQU0sR0FBRyxJQUFJLENBQUNSLFlBQVk7TUFDakQsQ0FBQztNQUNEbUMsV0FBVyxFQUFFLFNBQUFBLFlBQVVQLEtBQUssRUFBRTtRQUMxQixJQUFJLENBQUMvQixhQUFhLENBQUNXLE1BQU0sR0FBRztVQUFFSixDQUFDLEVBQUUsR0FBRztVQUFFUyxDQUFDLEVBQUU7UUFBSSxDQUFDO01BQ2xELENBQUM7TUFDRHVCLFlBQVksRUFBRSxTQUFBQSxhQUFVUixLQUFLLEVBQUU7UUFDM0IsSUFBSVMsS0FBSyxHQUFHLElBQUksQ0FBQ3pNLEtBQUssQ0FBQzBNLFdBQVc7UUFDbEMsSUFBSSxDQUFDekMsYUFBYSxDQUFDVyxNQUFNLEdBQUc7VUFDeEJKLENBQUMsRUFBRXdCLEtBQUssQ0FBQ1csT0FBTyxHQUFHRixLQUFLLENBQUNHLFdBQVc7VUFDcEMzQixDQUFDLEVBQUVlLEtBQUssQ0FBQ2EsT0FBTyxHQUFHSixLQUFLLENBQUNLO1FBQzdCLENBQUM7TUFDTCxDQUFDO01BQ0RDLFVBQVUsRUFBRSxTQUFBQSxXQUFBLEVBQVk7UUFDcEIsSUFBSSxJQUFJLENBQUMvTSxLQUFLLENBQUMwTSxXQUFXLElBQUksSUFBSSxDQUFDMU0sS0FBSyxDQUFDZ04sU0FBUyxJQUFJLElBQUksQ0FBQy9DLGFBQWEsRUFBRTtVQUN0RTtVQUNBLElBQUlnRCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUNqTixLQUFLLENBQUNnTixTQUFTLENBQUNKLFdBQVcsR0FBRyxJQUFJLENBQUM1TSxLQUFLLENBQUMwTSxXQUFXLENBQUNFLFdBQVcsSUFBSSxDQUFDO1VBQ3hGLElBQUlNLFFBQVEsR0FBSSxJQUFJLENBQUNqRCxhQUFhLENBQUNXLE1BQU0sQ0FBQ0osQ0FBQyxHQUFHLElBQUksQ0FBQ3hLLEtBQUssQ0FBQzBNLFdBQVcsQ0FBQ0UsV0FBVyxHQUFJSyxNQUFNO1VBQzFGLElBQUlDLFFBQVEsR0FBRyxFQUFFLEVBQUU7WUFBRTtZQUNqQkEsUUFBUSxHQUFHLEVBQUU7VUFDakIsQ0FBQyxNQUFNO1lBQ0hBLFFBQVEsR0FBR0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQzdCOztVQUNBLE9BQU9BLFFBQVEsR0FBRyxJQUFJO1FBQzFCLENBQUMsTUFBTTtVQUNILE9BQU8sR0FBRztRQUNkO01BQ0osQ0FBQztNQUNEQyxTQUFTLEVBQUUsU0FBQUEsVUFBQSxFQUFZO1FBQ25CLElBQUksSUFBSSxDQUFDbk4sS0FBSyxDQUFDME0sV0FBVyxJQUFJLElBQUksQ0FBQ3pDLGFBQWEsRUFBRTtVQUM5QyxJQUFJaUQsUUFBUSxHQUFHLElBQUksQ0FBQ2pELGFBQWEsQ0FBQ1csTUFBTSxDQUFDSyxDQUFDLEdBQUcsSUFBSSxDQUFDakwsS0FBSyxDQUFDME0sV0FBVyxDQUFDSSxZQUFZO1VBQ2hGLElBQUlJLFFBQVEsR0FBRyxFQUFFLEVBQUU7WUFBRTtZQUNqQkEsUUFBUSxHQUFHLEVBQUU7VUFDakIsQ0FBQyxNQUFNO1lBQ0hBLFFBQVEsR0FBR0EsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQzdCOztVQUNBLE9BQU9BLFFBQVEsR0FBRyxJQUFJO1FBQzFCLENBQUMsTUFBTTtVQUNILE9BQU8sR0FBRztRQUNkO01BQ0osQ0FBQztNQUNERSxTQUFTLEVBQUUsU0FBQUEsVUFBVXBCLEtBQUssRUFBRTtRQUN4QixJQUFJUyxLQUFLLEdBQUcsSUFBSSxDQUFDek0sS0FBSyxDQUFDME0sV0FBVztRQUNsQyxJQUFJLENBQUN6QyxhQUFhLENBQUNXLE1BQU0sR0FBRztVQUN4QkosQ0FBQyxFQUFFd0IsS0FBSyxDQUFDVyxPQUFPLEdBQUdGLEtBQUssQ0FBQ0csV0FBVztVQUNwQzNCLENBQUMsRUFBRWUsS0FBSyxDQUFDYSxPQUFPLEdBQUdKLEtBQUssQ0FBQ0s7UUFDN0IsQ0FBQztNQUNMLENBQUM7TUFDRE8sYUFBYSxFQUFFLFNBQUFBLGNBQVV4aUIsS0FBSyxFQUFFO1FBQzVCLElBQUtBLEtBQUssQ0FBQzJELE1BQU0sR0FBRyxDQUFDLElBQU0rYSxhQUFhLEtBQUssS0FBTSxFQUFFO1VBQ2pENUQsS0FBSyxDQUFDemhCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUMsQ0FBQztVQUNyQ29RLGFBQWEsQ0FBQzlOLFVBQVUsQ0FBQ3RSLElBQUksQ0FBQ0UsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3ZDa2YsYUFBYSxDQUFDNU8sV0FBVyxHQUFHLElBQUk7UUFDcEMsQ0FBQyxNQUFNO1VBQ0g0TyxhQUFhLENBQUM5TixVQUFVLEdBQUc4TixhQUFhLENBQUM5TixVQUFVLENBQUNqSCxNQUFNLENBQUNuSyxLQUFLLENBQUM7VUFDakVrZixhQUFhLENBQUM1TyxXQUFXLEdBQUcsSUFBSTtRQUNwQztNQUNKLENBQUM7TUFDRCtHLG9CQUFvQixFQUFFLFNBQUFBLHFCQUFVM0UsS0FBSyxFQUFFO1FBQ25DLElBQUlWLElBQUksR0FBRyxJQUFJO1FBQ2ZBLElBQUksQ0FBQ29OLGFBQWEsR0FBRzFNLEtBQUs7UUFDMUI7UUFDQTtRQUNBOUQsVUFBVSxDQUFDLFlBQVk7VUFDbkJvRCxJQUFJLENBQUNrUCxjQUFjLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsR0FBRyxDQUFDO01BQ1g7SUFDSixDQUFDO0lBQ0RwTSxLQUFLLEVBQUU7TUFDSDFELFVBQVUsRUFBRTtRQUNScVIsSUFBSSxFQUFFLElBQUk7UUFDVkMsT0FBTyxXQUFBQSxRQUFBLEVBQUc7VUFDTjtVQUNBOVQsVUFBVSxDQUFDLFlBQVk7WUFBRXZWLENBQUMsQ0FBQ21DLFFBQVEsQ0FBQyxDQUFDOE4sT0FBTyxDQUFDLHVCQUF1QixDQUFDO1VBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNsRjtNQUNKLENBQUM7TUFDRGlLLFlBQVksRUFBRSxTQUFBQSxhQUFVc0IsUUFBUSxFQUFFO1FBQzlCeEIsWUFBWSxDQUFDMEIsT0FBTyxDQUFDLGlCQUFpQixFQUFFaEgsSUFBSSxDQUFDaUgsU0FBUyxDQUFDSCxRQUFRLENBQUMsQ0FBQztNQUNyRTtJQUNKO0VBQ0osQ0FBQyxDQUFDLENBQUM7QUFDUDtBQ3RWQSxTQUFTOE4sb0JBQW9CQSxDQUFDblosRUFBRSxFQUFFb1osZ0JBQWdCLEVBQUVuRSxZQUFZLEVBQUVDLGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxZQUFZLEVBQUU7RUFDM0c7RUFDQSxJQUFHcFYsRUFBRSxLQUFLLElBQUksRUFDVjtFQUVKLElBQUk4QixNQUFNLEdBQUdqUyxDQUFDLENBQUNtQyxRQUFRLENBQUNpZCxjQUFjLENBQUNwZixDQUFDLENBQUNtUSxFQUFFLENBQUMsQ0FBQzVMLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzFELElBQUltaEIsWUFBWSxHQUFHelQsTUFBTSxDQUFDMU4sSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUV0QyxJQUFJb2hCLGdCQUFnQixHQUFHM2xCLENBQUMsQ0FBQ21RLEVBQUUsQ0FBQztFQUM1QixJQUFJeVYsUUFBUSxHQUFHRCxnQkFBZ0IsQ0FBQ2hiLElBQUksQ0FBQyxJQUFJLENBQUM7RUFDMUMsSUFBSWtiLGFBQWE7O0VBRWpCO0VBQ0EwRCxnQkFBZ0IsQ0FBQ0MsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsVUFBVTFCLEtBQUssRUFBRTtJQUNsRTluQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUNzVixRQUFRLENBQUMsTUFBTSxDQUFDO0lBQy9CdFYsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDZ2YsSUFBSSxDQUFDLENBQUM7RUFDekIsQ0FBQyxDQUFDO0VBRUY4RyxjQUFjLENBQUNyZixJQUFJLENBQUNvZixhQUFhLEdBQUcsSUFBSXpPLEdBQUcsQ0FBQztJQUN4Q2pILEVBQUUsRUFBRXdWLGdCQUFnQixDQUFDckssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzQi9XLElBQUksRUFBRTtNQUNGd1QsVUFBVSxFQUFFLEVBQUU7TUFDZGdPLGFBQWEsRUFBRSxJQUFJO01BQ25CM04sV0FBVyxFQUFFLEtBQUs7TUFDbEI0TixRQUFRLEVBQUVKLFFBQVE7TUFDbEIzTyxXQUFXLEVBQUUsS0FBSztNQUNsQnFPLGNBQWMsRUFBRUEsY0FBYztNQUM5QlcsZUFBZSxFQUFFLEVBQUU7TUFDbkJWLFlBQVksRUFBRUEsWUFBWTtNQUMxQlcsWUFBWSxFQUFFLElBQUk7TUFDbEIrQixjQUFjLEVBQUUsSUFBSTtNQUNwQjdCLGNBQWMsRUFBRTtJQUNwQixDQUFDO0lBQ0QxTixPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO01BQ2pCLElBQUlDLElBQUksR0FBRyxJQUFJO01BRWZBLElBQUksQ0FBQ3VCLFlBQVksR0FBR3hGLElBQUksQ0FBQ3lGLEtBQUssQ0FBQ0gsWUFBWSxDQUFDQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0RHLFFBQVEsRUFBRTtNQUNOZ0UsS0FBSyxFQUFFO1FBQ0g5QyxHQUFHLEVBQUUsU0FBQUEsSUFBQSxFQUFZO1VBQ2IsSUFBSStLLFVBQVUsR0FBRyxFQUFFO1VBQ25CLElBQUksQ0FBQyxJQUFJLENBQUNwUCxXQUFXLEVBQUU7WUFDbkIsT0FBT3ZDLElBQUksQ0FBQ2lILFNBQVMsQ0FBQytKLFlBQVksQ0FBQztVQUN2QztVQUNBLElBQUksQ0FBQzNOLFVBQVUsQ0FBQ3dFLE9BQU8sQ0FBQyxVQUFVK0osQ0FBQyxFQUFFO1lBQ2pDLElBQUlBLENBQUMsQ0FBQy9NLFNBQVMsS0FBSyxXQUFXLEVBQUU7Y0FDN0I7WUFDSjtZQUNBOE0sVUFBVSxDQUFDNWYsSUFBSSxDQUFDO2NBQUU2SixJQUFJLEVBQUVnVyxDQUFDLENBQUMvTSxTQUFTO2NBQUVrTixTQUFTLEVBQUVILENBQUMsQ0FBQ0csU0FBUztjQUFFQyxNQUFNLEVBQUVKLENBQUMsQ0FBQ0k7WUFBTyxDQUFDLENBQUM7VUFDcEYsQ0FBQyxDQUFDO1VBQ0YsT0FBT2hTLElBQUksQ0FBQ2lILFNBQVMsQ0FBQzBLLFVBQVUsQ0FBQztRQUNyQyxDQUFDO1FBQ0Q5SyxHQUFHLEVBQUUsU0FBQUEsSUFBVXFMLE1BQU0sRUFBRTtVQUNuQixJQUFJak8sSUFBSSxHQUFHLElBQUk7VUFDZixJQUFJME4sVUFBVSxHQUFHTyxNQUFNLElBQUksRUFBRTtVQUM3QixJQUFJQyxNQUFNLEdBQUc3bUIsQ0FBQyxDQUFDNkwsUUFBUSxDQUFDLENBQUM7VUFDekIsSUFBSTBGLEtBQUssR0FBRyxFQUFFO1VBQ2QsSUFBSWpILE1BQU0sR0FBRyxDQUFDO1VBQ2QrYixVQUFVLENBQUM5SixPQUFPLENBQUMsVUFBVStKLENBQUMsRUFBRWpjLENBQUMsRUFBRTtZQUMvQmtILEtBQUssQ0FBQzlLLElBQUksQ0FBQztjQUFFRCxJQUFJLEVBQUUsR0FBRyxHQUFHOGYsQ0FBQyxDQUFDaFcsSUFBSTtjQUFFMkssSUFBSSxFQUFFLEVBQUU7Y0FBRTFCLFNBQVMsRUFBRTtZQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0RwTyxPQUFPLEdBQUduTCxDQUFDLENBQUNvUixJQUFJLENBQUN5VixNQUFNLENBQUMsQ0FBQ2xpQixJQUFJLENBQUMsWUFBWTtjQUN0QzNFLENBQUMsQ0FBQ3NOLElBQUksQ0FBQztnQkFDSHpELEdBQUcsRUFBRXViLFlBQVksR0FBRyxRQUFRLEdBQUdoSixrQkFBa0IsQ0FBQ2tLLENBQUMsQ0FBQ2hXLElBQUksQ0FBQztnQkFDekRvSCxNQUFNLEVBQUUsS0FBSztnQkFDYnRNLE9BQU8sRUFBRSxTQUFBQSxRQUFVN0csSUFBSSxFQUFFO2tCQUNyQkEsSUFBSSxDQUFDdWlCLE1BQU0sR0FBR3ZpQixJQUFJLENBQUNpQyxJQUFJLEdBQUc2RCxDQUFDLENBQUN2RyxRQUFRLENBQUMsQ0FBQztrQkFDdENTLElBQUksQ0FBQ2tpQixTQUFTLEdBQUdILENBQUMsQ0FBQ0csU0FBUyxDQUFDLENBQUM7a0JBQzlCbGlCLElBQUksQ0FBQ21pQixNQUFNLEdBQUdKLENBQUMsQ0FBQ0ksTUFBTSxDQUFDLENBQUM7a0JBQ3hCblYsS0FBSyxDQUFDdUwsTUFBTSxDQUFDelMsQ0FBQyxFQUFFLENBQUMsRUFBRTlGLElBQUksQ0FBQztrQkFDeEIsSUFBSWdOLEtBQUssQ0FBQ2pILE1BQU0sS0FBSyxFQUFFQSxNQUFNLEVBQUU7b0JBQzNCaUgsS0FBSyxDQUFDZ0wsT0FBTyxDQUFDLFVBQVV3SyxDQUFDLEVBQUU7c0JBQ3ZCcE8sSUFBSSxDQUFDWixVQUFVLENBQUN0UixJQUFJLENBQUNzZ0IsQ0FBQyxDQUFDO29CQUMzQixDQUFDLENBQUM7b0JBQ0ZwTyxJQUFJLENBQUMxQixXQUFXLEdBQUcsSUFBSTtrQkFDM0I7Z0JBQ0osQ0FBQztnQkFDRDVMLEtBQUssRUFBRSxTQUFBQSxNQUFVQSxNQUFLLEVBQUU7a0JBQ3BCb00sT0FBTyxDQUFDNkUsR0FBRyxDQUFDalIsTUFBSyxDQUFDO2tCQUNsQmtHLEtBQUssQ0FBQ3VMLE1BQU0sQ0FBQ3pTLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQUU3RCxJQUFJLEVBQUU4ZixDQUFDLENBQUNoVyxJQUFJO29CQUFFMkssSUFBSSxFQUFFLEVBQUU7b0JBQUUxQixTQUFTLEVBQUUsV0FBVztvQkFBRWtOLFNBQVMsRUFBRSxFQUFFO29CQUFFQyxNQUFNLEVBQUU7c0JBQUVKLENBQUMsRUFBRSxDQUFDO3NCQUFFUyxDQUFDLEVBQUU7b0JBQUU7a0JBQUUsQ0FBQyxDQUFDO2tCQUM3RyxJQUFJeFYsS0FBSyxDQUFDakgsTUFBTSxLQUFLLEVBQUVBLE1BQU0sRUFBRTtvQkFDM0JpSCxLQUFLLENBQUNnTCxPQUFPLENBQUMsVUFBVStKLENBQUMsRUFBRTtzQkFDdkIzTixJQUFJLENBQUNaLFVBQVUsQ0FBQ3RSLElBQUksQ0FBQzZmLENBQUMsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDO29CQUNGM04sSUFBSSxDQUFDMUIsV0FBVyxHQUFHLElBQUk7a0JBQzNCO2dCQUNKO2NBQ0osQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDO1VBR0Y0UCxNQUFNLENBQUNyWSxPQUFPLENBQUMsQ0FBQztRQUNwQjtNQUNKLENBQUM7TUFDRHNELFFBQVEsRUFBRSxTQUFBQSxTQUFBLEVBQVk7UUFDbEIsT0FBT2pLLElBQUksQ0FBQ21mLEtBQUssQ0FBQyxJQUFJLENBQUNqQixhQUFhLENBQUNoZixJQUFJLEdBQUcsSUFBSSxDQUFDO01BQ3JELENBQUM7TUFDRGtnQixXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDbFAsVUFBVSxDQUFDek4sTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUN5TixVQUFVLENBQUN6TixNQUFNLEdBQUcsQ0FBQyxJQUFJK2EsYUFBYTtNQUN0RixDQUFDO01BQ0RoSyxTQUFTLEVBQUUsU0FBQUEsVUFBQSxFQUFZO1FBQ25CLE9BQU8sSUFBSSxDQUFDakQsV0FBVyxHQUFHLEdBQUcsR0FBRyxHQUFHO01BQ3ZDLENBQUM7TUFDRDhCLFlBQVksRUFBRTtRQUNWb0IsR0FBRyxFQUFFLFNBQUFBLElBQUEsRUFBWTtVQUNiLE9BQU87WUFDSGxELFdBQVcsRUFBRSxJQUFJLENBQUNBO1VBQ3RCLENBQUM7UUFDTCxDQUFDO1FBQ0RtRCxHQUFHLEVBQUUsU0FBQUEsSUFBVUMsUUFBUSxFQUFFO1VBQ3JCLElBQUksQ0FBQ0EsUUFBUSxFQUFFO1lBQ1g7VUFDSjtVQUNBLElBQUksQ0FBQ3BELFdBQVcsR0FBR29ELFFBQVEsQ0FBQ3BELFdBQVc7UUFDM0M7TUFDSjtJQUNKLENBQUM7SUFDRHlELE9BQU8sRUFBRSxTQUFBQSxRQUFBLEVBQVk7TUFDakIsSUFBSWxELElBQUksR0FBRyxJQUFJO01BRWZBLElBQUksQ0FBQ3lGLEtBQUssR0FBR3NILFlBQVk7TUFFekIvTSxJQUFJLENBQUNFLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxVQUFVUSxLQUFLLEVBQUU7UUFDdkRWLElBQUksQ0FBQ3FGLG9CQUFvQixDQUFDM0UsS0FBSyxDQUFDO01BQ3BDLENBQUMsQ0FBQztNQUVGVixJQUFJLENBQUNFLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxVQUFVUSxLQUFLLEVBQUU7UUFDOUNWLElBQUksQ0FBQ3dPLFdBQVcsQ0FBQzlOLEtBQUssQ0FBQztNQUMzQixDQUFDLENBQUM7TUFFRlYsSUFBSSxDQUFDRSxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVVsUyxLQUFLLEVBQUU7UUFDdkNnUyxJQUFJLENBQUN3USxhQUFhLENBQUN4aUIsS0FBSyxDQUFDO01BQzdCLENBQUMsQ0FBQztJQUNOLENBQUM7SUFDRHNWLE9BQU8sRUFBRTtNQUNMa0wsV0FBVyxFQUFFLFNBQUFBLFlBQVU5TixLQUFLLEVBQUU7UUFDMUIsSUFBSSxDQUFDME0sYUFBYSxHQUFHMU0sS0FBSztNQUM5QixDQUFDO01BQ0RvUSxTQUFTLEVBQUUsU0FBQUEsVUFBVTNCLEtBQUssRUFBRTtRQUN4QixJQUFJblAsSUFBSSxHQUFHLElBQUk7UUFDZixJQUFJQSxJQUFJLENBQUNzTyxXQUFXLEVBQUU7VUFDbEJqbkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDc1YsUUFBUSxDQUFDdFYsQ0FBQyxDQUFDdXBCLGdCQUFnQixDQUFDLENBQUNoVyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7VUFDaEV2VCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM4ZCxJQUFJLENBQUMsQ0FBQztVQUVyQixJQUFJSixLQUFLLEdBQUcsSUFBSUMsU0FBUyxDQUFDQyxLQUFLLENBQUMyTCxnQkFBZ0IsQ0FBQztVQUNqRDdMLEtBQUssQ0FBQ0ksSUFBSSxDQUFDLENBQUM7VUFFWjlkLENBQUMsQ0FBQ3VwQixnQkFBZ0IsQ0FBQyxDQUFDaFcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM5SyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUNILEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVXNmLENBQUMsRUFBRTtZQUN0RmpQLElBQUksQ0FBQ3dRLGFBQWEsQ0FBQ2pTLFFBQVEsQ0FBQ2MsY0FBYyxDQUFDOztZQUUzQztZQUNBZCxRQUFRLENBQUNjLGNBQWMsR0FBRyxFQUFFO1lBRTVCMEYsS0FBSyxDQUFDc0IsSUFBSSxDQUFDLENBQUM7WUFDWixPQUFPLElBQUk7VUFDZixDQUFDLENBQUM7UUFDTjtNQUNKLENBQUM7TUFDRGdKLGtCQUFrQixFQUFFLFNBQUFBLG1CQUFVRixLQUFLLEVBQUU7UUFDakMsSUFBSSxDQUFDRyxjQUFjLEdBQUcsSUFBSXRLLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDLElBQUksQ0FBQzlCLEtBQUssQ0FBQ21NLGNBQWMsQ0FBQztRQUNwRSxJQUFJLENBQUNBLGNBQWMsQ0FBQ25LLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQ21JLGVBQWUsR0FBRyxJQUFJLENBQUNGLGFBQWEsQ0FBQ1UsU0FBUztNQUN2RCxDQUFDO01BQ0R5QixvQkFBb0IsRUFBRSxTQUFBQSxxQkFBVUosS0FBSyxFQUFFO1FBQ25DLElBQUksQ0FBQ0csY0FBYyxDQUFDakosSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDK0csYUFBYSxDQUFDVSxTQUFTLEdBQUcsSUFBSSxDQUFDUixlQUFlO01BQ3ZELENBQUM7TUFDRGtDLGVBQWUsRUFBRSxTQUFBQSxnQkFBVUwsS0FBSyxFQUFFO1FBQzlCLElBQUksQ0FBQzFCLGNBQWMsR0FBRyxJQUFJekksU0FBUyxDQUFDQyxLQUFLLENBQUMsSUFBSSxDQUFDOUIsS0FBSyxDQUFDc0ssY0FBYyxDQUFDO1FBQ3BFLElBQUksQ0FBQ0EsY0FBYyxDQUFDdEksSUFBSSxDQUFDLENBQUM7UUFDMUI7UUFDQSxJQUFJLENBQUNpSSxhQUFhLENBQUNXLE1BQU0sR0FBRztVQUMxQkosQ0FBQyxFQUFFLElBQUksQ0FBQ1AsYUFBYSxDQUFDVyxNQUFNLENBQUNKLENBQUM7VUFDOUJTLENBQUMsRUFBRSxJQUFJLENBQUNoQixhQUFhLENBQUNXLE1BQU0sQ0FBQ0s7UUFDL0IsQ0FBQztRQUNELElBQUksQ0FBQ2IsWUFBWSxHQUFHLElBQUksQ0FBQ0gsYUFBYSxDQUFDVyxNQUFNO01BQ2pELENBQUM7TUFDRDBCLG9CQUFvQixFQUFFLFNBQUFBLHFCQUFVTixLQUFLLEVBQUU7UUFDbkMsSUFBSSxDQUFDMUIsY0FBYyxDQUFDcEgsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDK0csYUFBYSxDQUFDVyxNQUFNLEdBQUcsSUFBSSxDQUFDUixZQUFZO01BQ2pELENBQUM7TUFDRG1DLFdBQVcsRUFBRSxTQUFBQSxZQUFVUCxLQUFLLEVBQUU7UUFDMUIsSUFBSSxDQUFDL0IsYUFBYSxDQUFDVyxNQUFNLEdBQUc7VUFBRUosQ0FBQyxFQUFFLEdBQUc7VUFBRVMsQ0FBQyxFQUFFO1FBQUksQ0FBQztNQUNsRCxDQUFDO01BQ0R1QixZQUFZLEVBQUUsU0FBQUEsYUFBU1IsS0FBSyxFQUFFO1FBQzFCLElBQUlTLEtBQUssR0FBRyxJQUFJLENBQUN6TSxLQUFLLENBQUMwTSxXQUFXO1FBQ2xDLElBQUksQ0FBQ3pDLGFBQWEsQ0FBQ1csTUFBTSxHQUFHO1VBQ3pCSixDQUFDLEVBQUV3QixLQUFLLENBQUNXLE9BQU8sR0FBR0YsS0FBSyxDQUFDRyxXQUFXO1VBQ3BDM0IsQ0FBQyxFQUFFZSxLQUFLLENBQUNhLE9BQU8sR0FBR0osS0FBSyxDQUFDSztRQUM1QixDQUFDO01BQ0wsQ0FBQztNQUNEQyxVQUFVLEVBQUUsU0FBQUEsV0FBQSxFQUFZO1FBQ3BCLElBQUksSUFBSSxDQUFDL00sS0FBSyxDQUFDME0sV0FBVyxJQUFJLElBQUksQ0FBQzFNLEtBQUssQ0FBQ2dOLFNBQVMsSUFBSSxJQUFJLENBQUMvQyxhQUFhLEVBQUU7VUFDdEU7VUFDQSxJQUFJZ0QsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDak4sS0FBSyxDQUFDZ04sU0FBUyxDQUFDSixXQUFXLEdBQUcsSUFBSSxDQUFDNU0sS0FBSyxDQUFDME0sV0FBVyxDQUFDRSxXQUFXLElBQUksQ0FBQztVQUN4RixJQUFJTSxRQUFRLEdBQUksSUFBSSxDQUFDakQsYUFBYSxDQUFDVyxNQUFNLENBQUNKLENBQUMsR0FBRyxJQUFJLENBQUN4SyxLQUFLLENBQUMwTSxXQUFXLENBQUNFLFdBQVcsR0FBSUssTUFBTTtVQUMxRixJQUFJVyxVQUFVLEdBQUc3aEIsSUFBSSxDQUFDbWYsS0FBSyxDQUFDLElBQUksQ0FBQ2xMLEtBQUssQ0FBQ2dOLFNBQVMsQ0FBQ2EsYUFBYSxDQUFDLG9CQUFvQixDQUFDLENBQUNqQixXQUFXLENBQUM7VUFDakcsSUFBR3BqQixNQUFNLENBQUNza0IsU0FBUyxDQUFDRixVQUFVLENBQUMsRUFDL0I7WUFDSVYsUUFBUSxHQUFHQSxRQUFRLEdBQUdVLFVBQVUsR0FBQyxDQUFDO1VBQ3RDO1VBQ0EsT0FBT1YsUUFBUSxHQUFHLElBQUk7UUFDMUIsQ0FBQyxNQUFNO1VBQ0gsT0FBTyxHQUFHO1FBQ2Q7TUFDSixDQUFDO01BQ0RDLFNBQVMsRUFBRSxTQUFBQSxVQUFBLEVBQVk7UUFDbkIsSUFBSSxJQUFJLENBQUNuTixLQUFLLENBQUMwTSxXQUFXLElBQUksSUFBSSxDQUFDekMsYUFBYSxFQUFFO1VBQzlDLElBQUlpRCxRQUFRLEdBQUcsSUFBSSxDQUFDakQsYUFBYSxDQUFDVyxNQUFNLENBQUNLLENBQUMsR0FBRyxJQUFJLENBQUNqTCxLQUFLLENBQUMwTSxXQUFXLENBQUNJLFlBQVk7VUFDaEYsT0FBT0ksUUFBUSxHQUFHLElBQUk7UUFDMUIsQ0FBQyxNQUFNO1VBQ0gsT0FBTyxHQUFHO1FBQ2Q7TUFDSixDQUFDO01BQ0RFLFNBQVMsRUFBRSxTQUFBQSxVQUFVcEIsS0FBSyxFQUFFO1FBQ3hCLElBQUlTLEtBQUssR0FBRyxJQUFJLENBQUN6TSxLQUFLLENBQUMwTSxXQUFXO1FBQ2xDLElBQUksQ0FBQ3pDLGFBQWEsQ0FBQ1csTUFBTSxHQUFHO1VBQ3hCSixDQUFDLEVBQUV3QixLQUFLLENBQUNXLE9BQU8sR0FBR0YsS0FBSyxDQUFDRyxXQUFXO1VBQ3BDM0IsQ0FBQyxFQUFFZSxLQUFLLENBQUNhLE9BQU8sR0FBR0osS0FBSyxDQUFDSztRQUM3QixDQUFDO01BQ0wsQ0FBQztNQUNETyxhQUFhLEVBQUUsU0FBQUEsY0FBVXhpQixLQUFLLEVBQUU7UUFDNUIsSUFBS0EsS0FBSyxDQUFDMkQsTUFBTSxHQUFHLENBQUMsSUFBTSthLGFBQWEsS0FBSyxLQUFNLEVBQUU7VUFDakQ1RCxLQUFLLENBQUN6aEIsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQyxDQUFDO1VBQ3JDb1EsYUFBYSxDQUFDOU4sVUFBVSxDQUFDdFIsSUFBSSxDQUFDRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFDdkNrZixhQUFhLENBQUM1TyxXQUFXLEdBQUcsSUFBSTtRQUNwQyxDQUFDLE1BQU07VUFDSDRPLGFBQWEsQ0FBQzlOLFVBQVUsR0FBRzhOLGFBQWEsQ0FBQzlOLFVBQVUsQ0FBQ2pILE1BQU0sQ0FBQ25LLEtBQUssQ0FBQztVQUNqRWtmLGFBQWEsQ0FBQzVPLFdBQVcsR0FBRyxJQUFJO1FBQ3BDO01BQ0osQ0FBQztNQUNENFEsY0FBYyxFQUFFLFNBQUFBLGVBQVVDLEtBQUssRUFBRTtRQUM3QixJQUFJLElBQUksQ0FBQy9CLGFBQWEsRUFBRTtVQUNwQixJQUFJbGYsS0FBSyxHQUFHLElBQUksQ0FBQ2tSLFVBQVUsSUFBSSxJQUFJLENBQUNBLFVBQVUsQ0FBQzhDLE9BQU8sQ0FBQyxJQUFJLENBQUNrTCxhQUFhLENBQUM7VUFDMUUsSUFBSWxmLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQ2tSLFVBQVUsQ0FBQytFLE1BQU0sQ0FBQ2pXLEtBQUssRUFBRSxDQUFDLENBQUM7VUFDcEM7UUFDSixDQUFDLE1BQ0k7VUFDRDtVQUNBLElBQUksSUFBSSxDQUFDa1IsVUFBVSxDQUFDek4sTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUN5TixVQUFVLENBQUMrRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUNoQztRQUNKO1FBQ0EsSUFBSSxDQUFDaUosYUFBYSxHQUFHLElBQUk7TUFDN0IsQ0FBQztNQUNEL0gsb0JBQW9CLEVBQUUsU0FBQUEscUJBQVUzRSxLQUFLLEVBQUU7UUFDbkMsSUFBSVYsSUFBSSxHQUFHLElBQUk7UUFDZkEsSUFBSSxDQUFDb04sYUFBYSxHQUFHMU0sS0FBSztRQUMxQjtRQUNBOUQsVUFBVSxDQUFDLFlBQVk7VUFDbkJvRCxJQUFJLENBQUNrUCxjQUFjLENBQUMsQ0FBQztRQUN6QixDQUFDLEVBQUUsR0FBRyxDQUFDO01BQ1g7SUFDSixDQUFDO0lBQ0RwTSxLQUFLLEVBQUU7TUFDSDFELFVBQVUsRUFBRTtRQUNScVIsSUFBSSxFQUFFLElBQUk7UUFDVkMsT0FBTyxXQUFBQSxRQUFBLEVBQUk7VUFDUDtVQUNBOVQsVUFBVSxDQUFDLFlBQVk7WUFBRXZWLENBQUMsQ0FBQ21DLFFBQVEsQ0FBQyxDQUFDOE4sT0FBTyxDQUFDLHVCQUF1QixDQUFDO1VBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNsRjtNQUNKLENBQUM7TUFDRGlLLFlBQVksRUFBRSxTQUFBQSxhQUFVc0IsUUFBUSxFQUFFO1FBQzlCeEIsWUFBWSxDQUFDMEIsT0FBTyxDQUFDLGlCQUFpQixFQUFFaEgsSUFBSSxDQUFDaUgsU0FBUyxDQUFDSCxRQUFRLENBQUMsQ0FBQztNQUNyRTtJQUNKO0VBQ0osQ0FBQyxDQUFDLENBQUM7QUFDUDtBQzdRQTtBQUNBLElBQUlzSyxjQUFjLEdBQUcsRUFBRTtBQ0R2QjtBQUNBO0FBQ0ExTyxHQUFHLENBQUNnSixTQUFTLENBQUMsMkJBQTJCLEVBQUU7RUFDdkNDLFFBQVEsRUFBRTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztFQUNEOWIsSUFBSSxFQUFFLFNBQUFBLEtBQUEsRUFBWTtJQUNkLE9BQU87TUFDSG1kLENBQUMsRUFBRSxDQUFDO0lBQ1IsQ0FBQztFQUNMLENBQUM7RUFDRG5CLEtBQUssRUFBRTtJQUNIeEksVUFBVSxFQUFFMUcsS0FBSztJQUNqQjBVLGFBQWEsRUFBRXhlLE1BQU07SUFDckI4VCxTQUFTLEVBQUUvVixNQUFNO0lBQ2pCMGdCLFFBQVEsRUFBRW5kO0VBQ2QsQ0FBQztFQUNENlAsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtJQUVqQixJQUFJQyxJQUFJLEdBQUcsSUFBSTs7SUFFZjtJQUNBQSxJQUFJLENBQUMrSSxDQUFDLENBQUNtSSxhQUFhLEdBQUc3cEIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztJQUNwRGtELElBQUksQ0FBQytJLENBQUMsQ0FBQ29JLGNBQWMsR0FBRzlwQixDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0lBQ3JEa0QsSUFBSSxDQUFDK0ksQ0FBQyxDQUFDcUksUUFBUSxHQUFHL3BCLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0VBQzdDLENBQUM7RUFDRHdHLE9BQU8sRUFBRTtJQUNMK0Isb0JBQW9CLEVBQUUsU0FBQUEscUJBQVUzRSxLQUFLLEVBQUU7TUFDbkMsSUFBSSxDQUFDMlEsT0FBTyxDQUFDek0sS0FBSyxDQUFDLCtCQUErQixFQUFFbEUsS0FBSyxDQUFDO0lBQzlELENBQUM7SUFDRDhOLFdBQVcsRUFBRSxTQUFBQSxZQUFVOU4sS0FBSyxFQUFFO01BQzFCLElBQUksQ0FBQzJRLE9BQU8sQ0FBQ3pNLEtBQUssQ0FBQyxzQkFBc0IsRUFBRWxFLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBQ0R3SSxhQUFhLEVBQUUsU0FBQUEsY0FBVWhZLEdBQUcsRUFBRXdSLFNBQVMsRUFBRTtNQUNyQyxPQUFPeFIsR0FBRyxJQUFJQSxHQUFHLENBQUNnUixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBR1EsU0FBUyxHQUFHLFVBQVUsR0FBR0EsU0FBUztJQUNyRztFQUNKO0FBQ0osQ0FBQyxDQUFDO0FDL0VGO0FBQ0FqRSxHQUFHLENBQUNnSixTQUFTLENBQUMsUUFBUSxFQUFFO0VBQ3BCQyxRQUFRLEVBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztFQUNMRSxLQUFLLEVBQUU7SUFDSHRELEtBQUssRUFBRTFWLE1BQU07SUFDYjBpQixhQUFhLEVBQUVwaEI7RUFDbkIsQ0FBQztFQUNEZ1QsT0FBTyxFQUFFLFNBQUFBLFFBQUEsRUFBWTtJQUFBLElBQUFxTyxtQkFBQTtJQUNqQixJQUFJdlIsSUFBSSxHQUFHLElBQUk7SUFDZixJQUFJd1IsV0FBVyxHQUFHaG9CLFFBQVEsQ0FBQ2lkLGNBQWMsRUFBQThLLG1CQUFBLEdBQUN2UixJQUFJLENBQUNzUixhQUFhLGNBQUFDLG1CQUFBLGNBQUFBLG1CQUFBLEdBQUksWUFBWSxDQUFDO0lBQzdFbHFCLENBQUMsQ0FBQ21xQixXQUFXLENBQUMsQ0FBQ3hLLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxVQUFVcmUsQ0FBQyxFQUFFaUQsSUFBSSxFQUFFO01BQ3pELElBQUlBLElBQUksQ0FBQ29DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0gsSUFBSSxLQUFLbVMsSUFBSSxDQUFDc0UsS0FBSyxDQUFDelcsSUFBSSxFQUFFO1FBQ3hDO01BQ0o7TUFDQW1TLElBQUksQ0FBQ3NFLEtBQUssQ0FBQ21OLFVBQVUsR0FBR3JkLFFBQVEsQ0FBQ3hJLElBQUksQ0FBQ3lCLE1BQU0sR0FBR3pCLElBQUksQ0FBQ3FDLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3hFLENBQUMsQ0FBQztJQUVGNUcsQ0FBQyxDQUFDbXFCLFdBQVcsQ0FBQyxDQUFDeEssSUFBSSxDQUFDLGdCQUFnQixFQUFFLFVBQVVyZSxDQUFDLEVBQUVpRCxJQUFJLEVBQUU7TUFDckQsSUFBSUEsSUFBSSxDQUFDb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDSCxJQUFJLEtBQUttUyxJQUFJLENBQUNzRSxLQUFLLENBQUN6VyxJQUFJLEVBQUU7UUFDeEM7TUFDSjtNQUNBLElBQUlqQyxJQUFJLENBQUNnSixNQUFNLENBQUM1RyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMwRSxLQUFLLEVBQUU7UUFDNUJzTixJQUFJLENBQUMwUixhQUFhLENBQUM5bEIsSUFBSSxDQUFDb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDSCxJQUFJLEVBQUVqQyxJQUFJLENBQUNnSixNQUFNLENBQUM1RyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMwRSxLQUFLLENBQUM7TUFDdEUsQ0FBQyxNQUFNO1FBQ0g4TCxHQUFHLENBQUNvRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUU1RSxJQUFJLENBQUNzRSxLQUFLLENBQUM7TUFDM0M7SUFDSixDQUFDLENBQUM7SUFFRmpkLENBQUMsQ0FBQ21xQixXQUFXLENBQUMsQ0FBQ3hLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVcmUsQ0FBQyxFQUFFaUQsSUFBSSxFQUFFO01BQ3JELElBQUlBLElBQUksQ0FBQ29DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0gsSUFBSSxLQUFLbVMsSUFBSSxDQUFDc0UsS0FBSyxDQUFDelcsSUFBSSxFQUFFO1FBQ3hDO01BQ0o7TUFDQW1TLElBQUksQ0FBQzBSLGFBQWEsQ0FBQzlsQixJQUFJLENBQUNvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNILElBQUksRUFBRXhHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0VBQ04sQ0FBQztFQUNEd0csT0FBTyxFQUFFO0lBQ0xvTyxhQUFhLEVBQUUsU0FBQUEsY0FBVTNnQixRQUFRLEVBQUU5RixPQUFPLEVBQUU7TUFDeEMsSUFBSThGLFFBQVEsS0FBSyxJQUFJLENBQUN1VCxLQUFLLENBQUN6VyxJQUFJLEVBQUU7UUFDOUI7TUFDSjtNQUNBLElBQUksQ0FBQ3lXLEtBQUssQ0FBQ2dDLFlBQVksR0FBR3JiLE9BQU87TUFDakN1VCxHQUFHLENBQUNvRyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQ04sS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFDRHFOLGNBQWMsRUFBRSxTQUFBQSxlQUFBLEVBQVk7TUFDeEJuVCxHQUFHLENBQUNvRyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDTixLQUFLLENBQUM7SUFDM0M7RUFDSjtBQUNKLENBQUMsQ0FBQztBQ3hERjtBQUNBN0YsR0FBRyxDQUFDZ0osU0FBUyxDQUFDLFlBQVksRUFBRTtFQUN4QkMsUUFBUSxFQUFFO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7RUFDTDliLElBQUksRUFBRSxTQUFBQSxLQUFBLEVBQVk7SUFDZCxPQUFPO01BQ0hvQyxLQUFLLEVBQUUsRUFBRTtNQUNUK2EsQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNMNkksUUFBUSxFQUFFLEtBQUs7TUFDZkMsWUFBWSxFQUFFLENBQUM7TUFDZkMsVUFBVSxFQUFFO0lBQ2hCLENBQUM7RUFDTCxDQUFDO0VBQ0RsSyxLQUFLLEVBQUU7SUFDSDBKLGFBQWEsRUFBRXBoQjtFQUNuQixDQUFDO0VBQ0Q2UCxPQUFPLEVBQUUsU0FBQUEsUUFBQSxFQUFZO0lBQ2pCLElBQUlDLElBQUksR0FBRyxJQUFJO0lBQ2Y7SUFDQUEsSUFBSSxDQUFDK0ksQ0FBQyxDQUFDZ0osT0FBTyxHQUFHMXFCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQ3lWLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDa0QsSUFBSSxDQUFDK0ksQ0FBQyxDQUFDekosTUFBTSxHQUFHalksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDeVYsR0FBRyxDQUFDLENBQUM7SUFDcENrRCxJQUFJLENBQUMrSSxDQUFDLENBQUNpSixXQUFXLEdBQUczcUIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUN5VixHQUFHLENBQUMsQ0FBQztFQUNuRCxDQUFDO0VBQ0QyRSxRQUFRLEVBQUU7SUFDTndRLFNBQVMsRUFBRSxTQUFBQSxVQUFBLEVBQVk7TUFDbkIsT0FBTyxJQUFJLENBQUNqa0IsS0FBSyxDQUFDMkQsTUFBTTtJQUM1QjtFQUNKLENBQUM7RUFDRHVSLE9BQU8sRUFBRSxTQUFBQSxRQUFBLEVBQVk7SUFBQSxJQUFBcU8sbUJBQUE7SUFDakIsSUFBSXZSLElBQUksR0FBRyxJQUFJO0lBQ2YsSUFBSXdSLFdBQVcsR0FBR2hvQixRQUFRLENBQUNpZCxjQUFjLEVBQUE4SyxtQkFBQSxHQUFDdlIsSUFBSSxDQUFDc1IsYUFBYSxjQUFBQyxtQkFBQSxjQUFBQSxtQkFBQSxHQUFJLFlBQVksQ0FBQztJQUM3RWxxQixDQUFDLENBQUNtcUIsV0FBVyxDQUFDLENBQUN4SyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVVyZSxDQUFDLEVBQUVpRCxJQUFJLEVBQUU7TUFDcEQsSUFBSSxDQUFDQSxJQUFJLENBQUNvQyxLQUFLLEVBQUU7UUFDYjtNQUNKO01BQ0FwQyxJQUFJLENBQUNvQyxLQUFLLENBQUM0VixPQUFPLENBQUMsVUFBVXNPLE9BQU8sRUFBRTtRQUNsQyxJQUFJQyxhQUFhLEdBQUduUyxJQUFJLENBQUNoUyxLQUFLLENBQUNvVyxJQUFJLENBQUMsVUFBVWdPLENBQUMsRUFBRTtVQUM3QyxPQUFPQSxDQUFDLENBQUN2a0IsSUFBSSxJQUFJcWtCLE9BQU8sQ0FBQ3JrQixJQUFJO1FBQ2pDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQ3NrQixhQUFhLEVBQUU7VUFDaEJuUyxJQUFJLENBQUNoUyxLQUFLLENBQUNGLElBQUksQ0FBQztZQUFFRCxJQUFJLEVBQUVxa0IsT0FBTyxDQUFDcmtCLElBQUk7WUFBRTRqQixVQUFVLEVBQUUsQ0FBQztZQUFFbkwsWUFBWSxFQUFFO1VBQUcsQ0FBQyxDQUFDO1FBQzVFLENBQUMsTUFBTTtVQUNIeEgsT0FBTyxDQUFDcE0sS0FBSyxDQUFDLG9EQUFvRCxHQUFHd2YsT0FBTyxDQUFDcmtCLElBQUksQ0FBQztRQUN0RjtNQUNKLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGMlEsR0FBRyxDQUFDMEIsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFVBQVVtUyxVQUFVLEVBQUU7TUFDNUNyUyxJQUFJLENBQUNoUyxLQUFLLENBQUM0VixPQUFPLENBQUMsVUFBVTdLLElBQUksRUFBRTdLLEtBQUssRUFBRW1XLEtBQUssRUFBRTtRQUM3QyxJQUFJdEwsSUFBSSxDQUFDbEwsSUFBSSxJQUFJd2tCLFVBQVUsQ0FBQ3hrQixJQUFJLEVBQUU7VUFDOUJ3VyxLQUFLLENBQUNGLE1BQU0sQ0FBQ2pXLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUI7TUFDSixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRnNRLEdBQUcsQ0FBQzBCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsVUFBVW1TLFVBQVUsRUFBRTtNQUMzQ3JTLElBQUksQ0FBQ3NTLFdBQVcsQ0FBQyxDQUFDO0lBQ3RCLENBQUMsQ0FBQztFQUNOLENBQUM7RUFDRGhQLE9BQU8sRUFBRTtJQUNMZ1AsV0FBVyxFQUFFLFNBQUFBLFlBQUEsRUFBWTtNQUNyQixJQUFJLENBQUNSLFVBQVUsR0FBRyxJQUFJLENBQUM5akIsS0FBSyxDQUFDMlMsTUFBTSxDQUFDLFVBQVU1SCxJQUFJLEVBQUU7UUFDaEQsT0FBT0EsSUFBSSxDQUFDdU4sWUFBWSxJQUFJLEVBQUU7TUFDbEMsQ0FBQyxDQUFDLENBQUMzVSxNQUFNO01BQ1QsSUFBSSxDQUFDa2dCLFlBQVksR0FBRyxJQUFJLENBQUM3akIsS0FBSyxDQUFDMkQsTUFBTSxHQUFHLElBQUksQ0FBQ21nQixVQUFVO01BQ3ZELElBQUksSUFBSSxDQUFDOWpCLEtBQUssQ0FBQzJELE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDaWdCLFFBQVEsR0FBRyxLQUFLO01BQ3pCO0lBQ0osQ0FBQztJQUNESSxXQUFXLEVBQUUsU0FBQUEsWUFBQSxFQUFZO01BQ3JCLElBQUksQ0FBQ2hrQixLQUFLLEdBQUcsSUFBSSxDQUFDQSxLQUFLLENBQUMyUyxNQUFNLENBQUMsVUFBVTVILElBQUksRUFBRTtRQUMzQyxPQUFPQSxJQUFJLENBQUN1TixZQUFZLElBQUksRUFBRTtNQUNsQyxDQUFDLENBQUM7SUFDTjtFQUNKLENBQUM7RUFDRHhELEtBQUssRUFBRTtJQUNIOVUsS0FBSyxFQUFFLFNBQUFBLE1BQUEsRUFBWTtNQUNmLElBQUksQ0FBQ3NrQixXQUFXLENBQUMsQ0FBQztJQUN0QjtFQUNKO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsImZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICAgICk7XHJcbn1cclxuIiwidmFyIGluaXRpYWxpemVkO1xyXG52YXIgbWVkaWFBcHA7XHJcblxyXG52YXIgYnVzID0gbmV3IFZ1ZSgpO1xyXG5cclxuZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24oZGlzcGxheU1lZGlhQXBwbGljYXRpb24sIG1lZGlhQXBwbGljYXRpb25VcmwsIHBhdGhCYXNlKSB7XHJcblxyXG4gICAgaWYgKGluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIW1lZGlhQXBwbGljYXRpb25VcmwpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdtZWRpYUFwcGxpY2F0aW9uVXJsIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgJC5hamF4KHtcclxuICAgICAgICB1cmw6IG1lZGlhQXBwbGljYXRpb25VcmwsXHJcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoY29udGVudCkge1xyXG4gICAgICAgICAgICAkKCcudGEtY29udGVudCcpLmFwcGVuZChjb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ21lZGlhYXBwbGljYXRpb246cmVhZHknKTtcclxuXHJcbiAgICAgICAgICAgIHZhciByb290ID0ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJCgnI3QtbWVkaWFMaWJyYXJ5JykudGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lZGlhQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgICAgICAgICBlbDogJyNtZWRpYUFwcCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWVkaWFzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wVGh1bWJuYWlsOiBuZXcgSW1hZ2UoKSxcclxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRBc2M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNJblBhZ2U6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnRHJvcFRodW1ibmFpbC5zcmMgPSAocGF0aEJhc2UgfHwgJycpICsgJy9PcmNoYXJkQ29yZS5NZWRpYS9JbWFnZXMvZHJhZy10aHVtYm5haWwucG5nJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckRlbGV0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFMaXN0TW92ZWQnLCBmdW5jdGlvbiAoZXJyb3JJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZEZvbGRlcihzZWxmLnNlbGVjdGVkRm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMucHVzaChlcnJvckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhUmVuYW1lZCcsIGZ1bmN0aW9uIChuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lZGlhUGF0aCA9PT0gb2xkUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5tZWRpYVBhdGggPSBuZXdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignY3JlYXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gaGFuZGxlcnMgZm9yIGFjdGlvbnMgaW4gYm90aCBncmlkIGFuZCB0YWJsZSB2aWV3LlxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVNvcnQobmV3U29ydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVuYW1lTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZU1lZGlhSXRlbShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRHJhZ1N0YXJ0KG1lZGlhLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZXIgZm9yIHBhZ2VyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ3BhZ2VyRXZlbnQnLCBmdW5jdGlvbiAoaXRlbXNJblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pdGVtc0luUGFnZSA9IGl0ZW1zSW5QYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9tZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvbGRlciA9PSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyICYmIHBhcmVudEZvbGRlci5wYXRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVuc2hpZnQocGFyZW50Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlbGYubWVkaWFGaWx0ZXIudG9Mb3dlckNhc2UoKSkgPiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLnNvcnRCeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5zaXplIC0gYi5zaXplIDogYi5zaXplIC0gYS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm1pbWUudG9Mb3dlckNhc2UoKSkgOiBiLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubWltZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3RNb2RpZnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubGFzdE1vZGlmeSAtIGIubGFzdE1vZGlmeSA6IGIubGFzdE1vZGlmeSAtIGEubGFzdE1vZGlmeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkgOiBiLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggLSB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMDAgOiAyNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB0aGlzLnNlbGVjdGVkRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiB0aGlzLmdyaWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3UHJlZnMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRWaWV3ID0gbmV3UHJlZnMuZ3JpZFZpZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAobmV3Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFGaWx0ZXIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld0ZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKG5ld0ZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5yb290Rm9sZGVyLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRVcmw6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmxWYWx1ZSA9ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybFZhbHVlICsgKHVybFZhbHVlLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdFJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IHRoaXMucm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGxvYWRGb2xkZXI6IGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVVybCA9ICQoJyNnZXRNZWRpYUl0ZW1zVXJsJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFVcmwgKyAobWVkaWFVcmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIFwicGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QnkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgbG9hZGluZyBmb2xkZXI6JyArIGZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB1blNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpbnZlcnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnNwbGljZSh0aGlzLnNlbGVjdGVkTWVkaWFzLmluZGV4T2YobWVkaWEpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcm9vdCBmb2xkZXIgY2FuJ3QgYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVyID09IHRoaXMucm9vdC5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlRm9sZGVyXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZUZvbGRlclVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlRm9sZGVyJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKCcnKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwobWVkaWEubmFtZSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVNZWRpYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKG1lZGlhTGlzdFtpXS5tZWRpYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHBhdGhzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuc2VsZWN0ZWRNZWRpYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFJdGVtOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYVVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYS5tZWRpYVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2YobWVkaWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgbWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGYuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZURyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IHBhcnQgb2YgbW92ZSBtZWRpYSB0byBmb2xkZXI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXBhcmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGZvbGRlciBjb21wb25lbnQgb24gZHJvcCBldmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChpdGVtLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZHJhZ3MgYW4gdW5zZWxlY3RlZCBpdGVtLCB3ZSBzZWxlY3QgaXQgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnbWVkaWFOYW1lcycsIEpTT04uc3RyaW5naWZ5KG1lZGlhTmFtZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnc291cmNlRm9sZGVyJywgdGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKHRoaXMuZHJhZ0Ryb3BUaHVtYm5haWwsIDEwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSAnbW92ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVTY3JvbGxXaGlsZURyYWc6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPCAxNTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkgPT0gbmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gIXRoaXMuc29ydEFzYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeSA9IG5ld1NvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS53aGljaDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gMTMpIHsgIC8vIHRoZSBlbnRlciBrZXkgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNjcmVhdGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCkgKyBcIiZuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2FkZEZvbGRlcicsIG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3TmFtZSA9ICQoJyNuZXctaXRlbS1uYW1lJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTmFtZSA9ICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld05hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoICsgXCIvXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbGRlciA9PT0gXCIvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFBhdGggPSBjdXJyZW50Rm9sZGVyICsgb2xkTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC50b0xvd2VyQ2FzZSgpID09PSBvbGRQYXRoLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjcmVuYW1lTWVkaWFVcmwnKS52YWwoKSArIFwiP29sZFBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2xkUGF0aCkgKyBcIiZuZXdQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjcmVuYW1lTWVkaWFNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhUmVuYW1lZCcsIG5ld05hbWUsIG5ld1BhdGgsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICQoJyNmaWxldXBsb2FkJylcclxuICAgICAgICAuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjbWVkaWFBcHAnKSxcclxuICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIHVybDogJCgnI3VwbG9hZEZpbGVzJykudmFsKCksXHJcbiAgICAgICAgICAgIG1heENodW5rU2l6ZTogTnVtYmVyKCQoJyNtYXhVcGxvYWRDaHVua1NpemUnKS52YWwoKSB8fCAwKSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxufSk7XHJcblxyXG5cclxuJChkb2N1bWVudCkuYmluZCgnZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIGR0ID0gZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgIGlmIChkdC50eXBlcyAmJiAoZHQudHlwZXMuaW5kZXhPZiA/IGR0LnR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT0gLTEgOiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpIHtcclxuICAgICAgICB2YXIgZHJvcFpvbmUgPSAkKCcjY3VzdG9tZHJvcHpvbmUnKSxcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG92ZXJlZERyb3Bab25lID0gJChlLnRhcmdldCkuY2xvc2VzdChkcm9wWm9uZSk7XHJcbiAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgZHJvcFpvbmUucmVtb3ZlQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxmb2xkZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdmb2xkZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxsaSA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzU2VsZWN0ZWR9XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdsZWF2ZS5wcmV2ZW50ID0gXCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ292ZXIucHJldmVudC5zdG9wPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJvcC5wcmV2ZW50LnN0b3AgPSBcIm1vdmVNZWRpYVRvRm9sZGVyKG1vZGVsLCAkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIntmb2xkZXJob3ZlcmVkOiBpc0hvdmVyZWQgLCB0cmVlcm9vdDogbGV2ZWwgPT0gMX1cIiA+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgOnN0eWxlPVwieyBwYWRkaW5nJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwifTpwYWRkaW5nICsgJ3B4JyB9XCIgdi1vbjpjbGljaz1cInNlbGVjdFwiICBkcmFnZ2FibGU9XCJmYWxzZVwiIGNsYXNzPVwiZm9sZGVyLW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVcIiBjbGFzcz1cImV4cGFuZFwiIDpjbGFzcz1cIntvcGVuZWQ6IG9wZW4sIGNsb3NlZDogIW9wZW4sIGVtcHR5OiBlbXB0eX1cIj48aSB2LWlmPVwib3BlblwiIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi0ke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCJ9XCI+PC9pPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2xkZXItbmFtZSBtcy0yXCI+e3ttb2RlbC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGZvbGRlci1hY3Rpb25zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImNyZWF0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkIHx8IGlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWNsb2FrIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tc21cIiB2LW9uOmNsaWNrPVwiZGVsZXRlRm9sZGVyXCIgdi1pZj1cImlzU2VsZWN0ZWQgJiYgIWlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG9sIHYtc2hvdz1cIm9wZW5cIj5cclxuICAgICAgICAgICAgICAgIDxmb2xkZXIgdi1mb3I9XCJmb2xkZXIgaW4gY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZm9sZGVyLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWw9XCJmb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQtaW4tbWVkaWEtYXBwPVwic2VsZWN0ZWRJbk1lZGlhQXBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZvbGRlcj5cclxuICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgc2VsZWN0ZWRJbk1lZGlhQXBwOiBPYmplY3QsXHJcbiAgICAgICAgbGV2ZWw6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsIC8vIG5vdCBpbml0aWFsaXplZCBzdGF0ZSAoZm9yIGxhenktbG9hZGluZylcclxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpc0hvdmVyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAubmFtZSA9PSB0aGlzLm1vZGVsLm5hbWUpICYmICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5wYXRoID09IHRoaXMubW9kZWwucGF0aCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1Jvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucGF0aCA9PT0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuaXNSb290ID09IGZhbHNlKSAmJiAodGhpcy5pc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcigpKSl7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcgPSB0aGlzLmxldmVsIDwgMyA/ICAxNiA6IDE2ICsgKHRoaXMubGV2ZWwgKiA4KTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlcicsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYuY2hpbGRyZW4gJiYgc2VsZi5jaGlsZHJlbi5pbmRleE9mKGZvbGRlcilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJEZWxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignYWRkRm9sZGVyJywgZnVuY3Rpb24gKHRhcmdldCwgZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLm1vZGVsID09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnB1c2goZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmb2xkZXIucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyQWRkZWQnLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Rm9sZGVyLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJTZWxlY3RlZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZENoaWxkcmVuOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0Rm9sZGVyc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxmLm1vZGVsLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW10cHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdMZWF2ZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmVNZWRpYVRvRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyLCBlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNlbGYuaXNIb3ZlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IEpTT04ucGFyc2UoZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnbWVkaWFOYW1lcycpKTsgXHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFOYW1lcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VGb2xkZXIgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VGb2xkZXInKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEZvbGRlciA9IGZvbGRlci5wYXRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gdGFyZ2V0Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKCcjc2FtZUZvbGRlck1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coey4uLiQoXCIjbW92ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI21vdmVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXM6IG1lZGlhTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXI6IHNvdXJjZUZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlcjogdGFyZ2V0Rm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnKTsgLy8gTWVkaWFBcHAgd2lsbCBsaXN0ZW4gdG8gdGhpcywgYW5kIHRoZW4gaXQgd2lsbCByZWxvYWQgcGFnZSBzbyB0aGUgbW92ZWQgbWVkaWFzIHdvbid0IGJlIHRoZXJlIGFueW1vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcsIGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtZ3JpZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLWdyaWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxvbCBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtIG1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkIHAtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgJ3B4J31cIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsncHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArJ3B4JywgbWF4V2lkdGg6IHRodW1iU2l6ZSArJ3B4J31cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L29sPlxyXG4gICAgICAgIGAsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLXRhYmxlPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtdGFibGUnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1lZGlhLWl0ZW1zLXRhYmxlIG0tMFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+e3sgVC5pbWFnZUhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ25hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubmFtZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJuYW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdsYXN0TW9kaWZ5JylcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5sYXN0TW9kaWZ5SGVhZGVyIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJsYXN0TW9kaWZ5XCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ3NpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC5zaXplSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cInNpemVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbWltZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQudHlwZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJtaW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhLXNvbGlkIGZhLWZpbGUgZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLW5hbWUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZFwiPiB7eyBtZWRpYS5uYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIG1lLTEgZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj4ge3sgVC5lZGl0QnV0dG9uIH19IDwvYSA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj4ge3sgVC5kZWxldGVCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gdmlldy1idXR0b25cIj4ge3sgVC52aWV3QnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbFwiPiB7eyBwcmludERhdGVUaW1lKG1lZGlhLmxhc3RNb2RpZnkpIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+IHt7IGlzTmFOKG1lZGlhLnNpemUpPyAwIDogTWF0aC5yb3VuZChtZWRpYS5zaXplIC8gMTAyNCkgfX0gS0I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPnt7IG1lZGlhLm1pbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvcnRCeTogU3RyaW5nLFxyXG4gICAgICAgIHNvcnRBc2M6IEJvb2xlYW4sXHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuVC5pbWFnZUhlYWRlciA9ICQoJyN0LWltYWdlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5uYW1lSGVhZGVyID0gJCgnI3QtbmFtZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubGFzdE1vZGlmeUhlYWRlciA9ICQoJyN0LWxhc3RNb2RpZnktaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnNpemVIZWFkZXIgPSAkKCcjdC1zaXplLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC50eXBlSGVhZGVyID0gJCgnI3QtdHlwZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudmlld0J1dHRvbiA9ICQoJyN0LXZpZXctYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgbmV3U29ydCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmludERhdGVUaW1lOiBmdW5jdGlvbiAoZGF0ZW1pbGxpcyl7XHJcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZW1pbGxpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgYSBsaXN0IG9mIGFsbCB0aGUgaXRlbXMsIHVucGFnZWQuXHJcbi8vIEFzIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlciwgaXQgcmFpc2VzIGV2ZW50cyB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBwYWdlLlxyXG4vLyBJdCdzIHRoZSBwYXJlbnQncyByZXNwb25zaWJpbGl0eSB0byBsaXN0ZW4gZm9yIHRoZXNlIGV2ZW50cyBhbmQgZGlzcGxheSB0aGUgcmVjZWl2ZWQgaXRlbXNcclxuLy8gPHBhZ2VyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgncGFnZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdj5cclxuICAgICAgICA8bmF2IGlkPVwibWVkaWEtcGFnZXJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb24gTmF2aWdhdGlvblwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgOmRhdGEtY29tcHV0ZWQtdHJpZ2dlcj1cIml0ZW1zSW5DdXJyZW50UGFnZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWZpcnN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0ZpcnN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0ZpcnN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvRmlyc3RcIj57eyBULnBhZ2VyRmlyc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvUHJldn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9QcmV2ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cInByZXZpb3VzXCI+e3sgVC5wYWdlclByZXZpb3VzQnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWlmPVwibGluayAhPT0gLTFcIiBjbGFzcz1cInBhZ2UtaXRlbSBwYWdlLW51bWJlclwiICA6Y2xhc3M9XCJ7YWN0aXZlIDogY3VycmVudCA9PSBsaW5rIC0gMX1cIiB2LWZvcj1cImxpbmsgaW4gcGFnZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJnb1RvKGxpbmsgLSAxKVwiIDphcmlhLWxhYmVsPVwiJ0dvdG8gUGFnZScgKyBsaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGlua319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXJyZW50ID09IGxpbmsgLTFcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPihjdXJyZW50KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvTmV4dH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9OZXh0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cIm5leHRcIj57eyBULnBhZ2VyTmV4dEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtbGFzdC1idXR0b25cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9MYXN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0xhc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29MYXN0XCI+e3sgVC5wYWdlckxhc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgcGFnZS1zaXplLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBwYWdlLXNpemUtbGFiZWxcIj57eyBULnBhZ2VyUGFnZVNpemVMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBhZ2VTaXplU2VsZWN0XCIgY2xhc3M9XCJwYWdlLWxpbmtcIiB2LW1vZGVsPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gaW4gcGFnZVNpemVPcHRpb25zXCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgICA8bmF2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPnt7IFQucGFnZXJQYWdlTGFiZWwgfX0ge3tjdXJyZW50ICsgMX19L3t7dG90YWxQYWdlc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHRvdGFsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPiB7eyBULnBhZ2VyVG90YWxMYWJlbCB9fSB7e3RvdGFsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBBcnJheVxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAzMCwgNTAsIDEwMF0sXHJcbiAgICAgICAgICAgIGN1cnJlbnQ6IDAsXHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckZpcnN0QnV0dG9uID0gJCgnI3QtcGFnZXItZmlyc3QtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUHJldmlvdXNCdXR0b24gPSAkKCcjdC1wYWdlci1wcmV2aW91cy1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJOZXh0QnV0dG9uID0gJCgnI3QtcGFnZXItbmV4dC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJMYXN0QnV0dG9uID0gJCgnI3QtcGFnZXItbGFzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlU2l6ZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1zaXplLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUGFnZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1sYWJlbCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclRvdGFsTGFiZWwgPSAkKCcjdC1wYWdlci10b3RhbC1sYWJlbCcpLnZhbCgpOyAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50ICsgMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCAtIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvVG86IGZ1bmN0aW9uICh0YXJnZXRQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRhcmdldFBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMgPyB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b3RhbFBhZ2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYWdlcyA+IDAgPyBwYWdlcyA6IDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc0xhc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgKyAxID49IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzRmlyc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb05leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb1ByZXY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRmlyc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9GaXJzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB0aGlzIGNvbXB1dGVkIGlzIG9ubHkgdG8gaGF2ZSBhIGNlbnRyYWwgcGxhY2Ugd2hlcmUgd2UgZGV0ZWN0IGNoYW5nZXMgYW5kIGxldmVyYWdlIFZ1ZSBKUyByZWFjdGl2aXR5IHRvIHJhaXNlIG91ciBldmVudC5cclxuICAgICAgICAvLyBUaGF0IGV2ZW50IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgcGFyZW50IG1lZGlhIGFwcCB0byBkaXNwbGF5IHRoZSBpdGVtcyBpbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyB0aGlzIGxvZ2ljIHdpbGwgbm90IHJ1biBpZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgaXMgbm90IHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBXZSB1c2UgYSBkdW1teSBcImRhdGEtY29tcHV0ZWQtdHJpZ2dlclwiIGF0dHJpYnV0ZSBmb3IgdGhhdC5cclxuICAgICAgICBpdGVtc0luQ3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudDtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc291cmNlSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncGFnZXJFdmVudCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlTGlua3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBsaW5rcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLmN1cnJlbnQgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGJlZm9yZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHZhciBiZWZvcmVDdXJyZW50ID0gdGhpcy5jdXJyZW50ID4gMCA/IHRoaXMuY3VycmVudCA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJlZm9yZUJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAxID8gdGhpcy5jdXJyZW50IC0gMSA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUJlZm9yZUN1cnJlbnQpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGFmdGVyIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgKyAyIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhZnRlckFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDIgPyB0aGlzLmN1cnJlbnQgKyAzIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJBZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7IC8vIHJlc2V0dGluZyBjdXJyZW50IHBhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgbmV3IGxpc3Qgb2YgdW5wYWdlZCBpdGVtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8c29ydC1pbmRpY2F0b3I+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdzb3J0SW5kaWNhdG9yJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IHYtc2hvdz1cImlzQWN0aXZlXCIgY2xhc3M9XCJzb3J0LWluZGljYXRvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tdXBcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhYXNjXCI+PGkgY2xhc3M9XCJzbWFsbCBmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBzZWxlY3RlZGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBhc2M6IEJvb2xlYW5cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLnNlbGVjdGVkY29sbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQoZWwsIGlkT2ZVcGxvYWRCdXR0b24sIHVwbG9hZEFjdGlvbiwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzLCB0ZW1wVXBsb2FkRm9sZGVyLCBtYXhVcGxvYWRDaHVua1NpemUpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRtb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgaXNSZW1vdmVkOiB4LmlzUmVtb3ZlZCwgaXNOZXc6IHguaXNOZXcsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnLCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTsgLy8gQmVjYXVzZSBhIHVuaXF1ZSBrZXkgaXMgcmVxdWlyZWQgYnkgVnVlIG9uIHYtZm9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hdHRhY2hlZEZpbGVOYW1lID0geC5hdHRhY2hlZEZpbGVOYW1lOy8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMC41LCB5OiAwLjUgfSwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9uUmVtb3ZlZE1lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lZGlhSXRlbXNbaV0uaXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlbW92ZWRNZWRpYUl0ZW1zLnB1c2godGhpcy5tZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcjJyArIGlkT2ZVcGxvYWRCdXR0b247XHJcbiAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cignaWQnKTtcclxuICAgICAgICAgICAgdmFyIGNodW5rZWRGaWxlVXBsb2FkSWQgPSByYW5kb21VVUlEKCk7XHJcblxyXG4gICAgICAgICAgICAkKHNlbGVjdG9yKVxyXG4gICAgICAgICAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjJyArIGVkaXRvcklkKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXBsb2FkQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heENodW5rU2l6ZTogbWF4VXBsb2FkQ2h1bmtTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS51cGxvYWROYW1lID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFVuaXF1ZUlkKCkgKyBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogdGVtcFVwbG9hZEZvbGRlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19jaHVua2VkRmlsZVVwbG9hZElkJywgdmFsdWU6IGNodW5rZWRGaWxlVXBsb2FkSWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcm1zZyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGVycm9yIGlzIGRlZmluZWQgcHJvYmFibHkgdGhlIGZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gdW5kZWZpbmVkIHx8IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lZGlhSXRlbXMucHVzaChkYXRhLnJlc3VsdC5maWxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgKz0gZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgKyBcIlxcblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jtc2cgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9ybXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld01lZGlhSXRlbXMubGVuZ3RoID4gMSAmJiBhbGxvd011bHRpcGxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKG5ld01lZGlhSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvbiB1cGxvYWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpxWEhSKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yVGhyb3duKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSByZXBsYWNlIHRoZSBibG9iIHdpdGggYSBGaWxlIG9iamVjdCB0byBlbnN1cmUgdGhlIGZpbGUgbmFtZSBhbmQgb3RoZXJzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBiYWNrZW5kLlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5ibG9iXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pcXVlSWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoW2luZGV4XSwgMSwgcmVtb3ZlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEsIHJlbW92ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTcpIHsgLy8gQWRqdXN0IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDg7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTUpIHsgLy8gQWRqdXN0bWVudCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyA1OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyBcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhRmllbGQoZWwsIG1vZGFsQm9keUVsZW1lbnQsIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycykge1xyXG4gICAgLy9CYWdQYXJ0IGNyZWF0ZSBhIHNjcmlwdCBzZWN0aW9uIHdpdGhvdXQgb3RoZXIgRE9NIGVsZW1lbnRzXHJcbiAgICBpZihlbCA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIC8vd2hlbiBoaWRlIG1vZGFsIGRldGFjaCBtZWRpYSBhcHAgdG8gYXZvaWQgaXNzdWUgb24gQmFnUGFydFxyXG4gICAgbW9kYWxCb2R5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCdib2R5Jyk7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRNb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh4LnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52dWVrZXkgPSBkYXRhLm5hbWUgKyBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIHsgbmFtZTogeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnbm90LWZvdW5kJywgbWVkaWFUZXh0OiAnJywgYW5jaG9yOiB7IHg6IDAsIHk6IDAgfSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA+IDAgJiYgYWxsb3dNdWx0aXBsZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEyMCA6IDI0MDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1ic1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYucGF0aHMgPSBpbml0aWFsUGF0aHM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ2ZpbGVzVXBsb2FkZWQnLCBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuYWRkTWVkaWFGaWxlcyhmaWxlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbkFkZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5hcHBlbmRUbygkKG1vZGFsQm9keUVsZW1lbnQpLmZpbmQoJy5tb2RhbC1ib2R5JykpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsQm9keUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubWVkaWFGaWVsZFNlbGVjdEJ1dHRvbicpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMobWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGUgaW5jbHVkZWQgbWVkaWFzIHRvIGJlIHN0aWxsIHNlbGVjdGVkIHRoZSBuZXh0IHRpbWUgd2Ugb3BlbiB0aGUgbW9kYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sICBcclxuICAgICAgICAgICAgb25BbmNob3JEcm9wOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvckxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuJHJlZnMubW9kYWxCb2R5ICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gaW1hZ2UgaXMgc2hydW5rIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kYWwgYm9keS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJHJlZnMubW9kYWxCb2R5LmNsaWVudFdpZHRoIC0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICh0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnggKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9ySWNvbiA9IE1hdGgucm91bmQodGhpcy4kcmVmcy5tb2RhbEJvZHkucXVlcnlTZWxlY3RvcignLmljb24tbWVkaWEtYW5jaG9yJykuY2xpZW50V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlci5pc0ludGVnZXIoYW5jaG9ySWNvbikpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gYW5jaG9ySWNvbi8yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgIFxyXG4gICAgICAgICAgICBhZGRNZWRpYUZpbGVzOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZmlsZXMubGVuZ3RoID4gMSkgJiYgKGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVkaWFJdGVtcyAmJiB0aGlzLm1lZGlhSXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgcmVtb3ZlU2VsZWN0ZWQgd2FzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGUgbWVkaWEgd2FzIHNldC5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApOyBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsIi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHdpbGwgYWRkIHRoZW1zZWx2ZXMgdG8gdGhpcyBhcnJheVxyXG52YXIgbWVkaWFGaWVsZEFwcHMgPSBbXTtcclxuIiwiLy8gPG1lZGlhLWZpZWxkLXRodW1icy1jb250YWluZXI+IGNvbXBvbmVudCBcclxuLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgc2hhcmUgdGhpcyBjb21wb25lbnQgdG8gcHJlc2VudCB0aGUgdGh1bWJzLlxyXG5WdWUuY29tcG9uZW50KCdtZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyJywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgPGRpdiA6aWQ9XCJpZFByZWZpeCArIFxcJ19tZWRpYUNvbnRhaW5lck1haW5cXCdcIiB2LWNsb2FrPlxcXHJcbiAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhSXRlbXMubGVuZ3RoIDwgMVwiIGNsYXNzPVwiY2FyZCB0ZXh0LWNlbnRlclwiPlxcXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSBcImNhcmQtYm9keVwiID5cXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoaW50XCI+e3tULm5vSW1hZ2VzfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDxkcmFnZ2FibGUgOmxpc3Q9XCJtZWRpYUl0ZW1zXCIgdGFnPVwib2xcIiBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCIgPlxcXHJcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cIm1lZGlhIGluIG1lZGlhSXRlbXNcIlxcXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEudnVla2V5XCIgXFxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4tbGlzdC1pdGVtIGNhcmQgcC0wXCJcXFxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgXFwncHhcXCd9XCJcXFxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBzZWxlY3RlZE1lZGlhID09IG1lZGlhfVwiXFxcclxuICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJzZWxlY3RNZWRpYShtZWRpYSlcIiB2LWlmPVwiIW1lZGlhLmlzUmVtb3ZlZFwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWEubWVkaWFQYXRoIT09IFxcJ25vdC1mb3VuZFxcJ1wiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIiA+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aChcXCdpbWFnZVxcJylcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCcgLCBtYXhXaWR0aDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIvPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGUgZGlzcGxheS0xXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIHZpZXctYnV0dG9uXCJcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm1lZGlhUGF0aFwiPnt7IG1lZGlhLmlzTmV3ID8gbWVkaWEubmFtZS5zdWJzdHIoMzYpIDogbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXIgZmxleC1jb2x1bW5cIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYW4gdGV4dC1kYW5nZXIgZC1ibG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrXCI+e3sgVC5tZWRpYU5vdEZvdW5kIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj57eyBULmRpc2NhcmRXYXJuaW5nIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbCB0ZXh0LWRhbmdlclwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICA8L2xpPlxcXHJcbiAgICAgICAgIDwvZHJhZ2dhYmxlPlxcXHJcbiAgICAgICA8L2Rpdj5cXFxyXG4gICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhOiBPYmplY3QsXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXIsXHJcbiAgICAgICAgaWRQcmVmaXg6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5tZWRpYU5vdEZvdW5kID0gJCgnI3QtbWVkaWEtbm90LWZvdW5kJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRpc2NhcmRXYXJuaW5nID0gJCgnI3QtZGlzY2FyZC13YXJuaW5nJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5vSW1hZ2VzID0gJCgnI3Qtbm8taW1hZ2VzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7IFxcJ3VwbG9hZC13YXJuaW5nXFwnIDogbW9kZWwuZXJyb3JNZXNzYWdlIH1cIiBjbGFzcz1cInVwbG9hZCBtLTIgcC0yIHB0LTBcIj4gXFxcclxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cIm1vZGVsLmVycm9yTWVzc2FnZVwiIHYtb246Y2xpY2s9XCJkaXNtaXNzV2FybmluZygpXCIgY2xhc3M9XCJjbG9zZS13YXJuaW5nXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gPC9zcGFuPlxcXHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLW5hbWVcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj57eyBtb2RlbC5uYW1lIH19PC9wPiBcXFxyXG4gICAgICAgICAgICA8ZGl2PiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhbW9kZWwuZXJyb3JNZXNzYWdlXCIgOnN0eWxlPVwieyB3aWR0aDogbW9kZWwucGVyY2VudGFnZSArIFxcJyVcXCd9XCIgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj4gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgOnRpdGxlPVwibW9kZWwuZXJyb3JNZXNzYWdlXCI+IEVycm9yOiB7eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0LFxyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgc2VsZi5tb2RlbC5wZXJjZW50YWdlID0gcGFyc2VJbnQoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsICogMTAwLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRkb25lJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lLCBkYXRhLnJlc3VsdC5maWxlc1swXS5lcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7ICBcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCBzZWxmLm1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsICQoJyN0LWVycm9yJykudmFsKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBoYW5kbGVGYWlsdXJlOiBmdW5jdGlvbiAoZmlsZU5hbWUsIG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lICE9PSB0aGlzLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnRXJyb3JPblVwbG9hZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGlzbWlzc1dhcm5pbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDx1cGxvYWQtbGlzdD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZExpc3QnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1saXN0XCIgdi1zaG93PVwiZmlsZXMubGVuZ3RoID4gMFwiPiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCIgQGNsaWNrPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBULnVwbG9hZHMgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwicGVuZGluZ0NvdW50XCI+IChQZW5kaW5nOiB7eyBwZW5kaW5nQ291bnQgfX0pIDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImVycm9yQ291bnRcIiA6Y2xhc3M9XCJ7IFxcJ3RleHQtZGFuZ2VyXFwnIDogZXJyb3JDb3VudCB9XCI+ICgge3sgVC5lcnJvcnMgfX06IHt7IGVycm9yQ291bnQgfX0gLyA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdi1vbjpjbGljay5zdG9wPVwiY2xlYXJFcnJvcnNcIiA+IHt7IFQuY2xlYXJFcnJvcnMgfX0gPC9hPik8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b25cIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiIWV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiIHYtc2hvdz1cImV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDx1cGxvYWQgOnVwbG9hZC1pbnB1dC1pZD1cInVwbG9hZElucHV0SWRcIiB2LWZvcj1cImYgaW4gZmlsZXNcIiA6a2V5PVwiZi5uYW1lXCIgIDptb2RlbD1cImZcIj48L3VwbG9hZD4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2ID4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlczogW10sXHJcbiAgICAgICAgICAgIFQ6IHt9LFxyXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBlbmRpbmdDb3VudDogMCxcclxuICAgICAgICAgICAgZXJyb3JDb3VudDogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHVwbG9hZElucHV0SWQ6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQudXBsb2FkcyA9ICQoJyN0LXVwbG9hZHMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZXJyb3JzID0gJCgnI3QtZXJyb3JzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmNsZWFyRXJyb3JzID0gJCgnI3QtY2xlYXItZXJyb3JzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBmaWxlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciB1cGxvYWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYudXBsb2FkSW5wdXRJZCA/PyAnZmlsZXVwbG9hZCcpO1xyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKG5ld0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SW5MaXN0ID0gc2VsZi5maWxlcy5zb21lKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSA9PSBuZXdGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlJbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLnB1c2goeyBuYW1lOiBuZXdGaWxlLm5hbWUsIHBlcmNlbnRhZ2U6IDAsIGVycm9yTWVzc2FnZTogJycgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSBvbiB0aGUgcXVldWU6JyArIG5ld0ZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdyZW1vdmFsUmVxdWVzdCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lID09IGZpbGVVcGxvYWQubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdFcnJvck9uVXBsb2FkJywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ291bnQgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlICE9ICcnO1xyXG4gICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NvdW50ID0gdGhpcy5maWxlcy5sZW5ndGggLSB0aGlzLmVycm9yQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXJFcnJvcnM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGZpbGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iXX0= +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJoZWxwZXJzLmpzIiwiU2hhcmVkL3VwbG9hZENvbXBvbmVudC5qcyIsIlNoYXJlZC91cGxvYWRMaXN0Q29tcG9uZW50LmpzIiwiTWVkaWFBcHAvYXBwLmpzIiwiTWVkaWFBcHAvZmlsZXVwbG9hZC5qcyIsIk1lZGlhQXBwL2ZvbGRlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL2ZvbnQtYXdlc29tZS10aHVtYm5haWxzLmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc0dyaWRDb21wb25lbnQuanMiLCJNZWRpYUFwcC9tZWRpYUl0ZW1zVGFibGVDb21wb25lbnQuanMiLCJNZWRpYUFwcC9wYWdlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL3NvcnRJbmRpY2F0b3JDb21wb25lbnQuanMiLCJNZWRpYUZpZWxkL2F0dGFjaGVkTWVkaWFGaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZHNBcHBzQXJyYXkuanMiLCJNZWRpYUZpZWxkL21lZGlhRmllbGRUaHVtYnNDb250YWluZXIuanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJfdHlwZW9mIiwicmVxdWlyZSIsIndpbmRvdyIsImpRdWVyeSIsIiQiLCJzdXBwb3J0IiwiZmlsZUlucHV0IiwiUmVnRXhwIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInByb3AiLCJ4aHJGaWxlVXBsb2FkIiwiUHJvZ3Jlc3NFdmVudCIsIkZpbGVSZWFkZXIiLCJ4aHJGb3JtRGF0YUZpbGVVcGxvYWQiLCJGb3JtRGF0YSIsImJsb2JTbGljZSIsIkJsb2IiLCJwcm90b3R5cGUiLCJzbGljZSIsIndlYmtpdFNsaWNlIiwibW96U2xpY2UiLCJnZXREcmFnSGFuZGxlciIsInR5cGUiLCJpc0RyYWdPdmVyIiwiZSIsImRhdGFUcmFuc2ZlciIsIm9yaWdpbmFsRXZlbnQiLCJpbkFycmF5IiwidHlwZXMiLCJfdHJpZ2dlciIsIkV2ZW50IiwiZGVsZWdhdGVkRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImRyb3BFZmZlY3QiLCJ3aWRnZXQiLCJvcHRpb25zIiwiZHJvcFpvbmUiLCJkb2N1bWVudCIsInBhc3RlWm9uZSIsInVuZGVmaW5lZCIsInJlcGxhY2VGaWxlSW5wdXQiLCJwYXJhbU5hbWUiLCJzaW5nbGVGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkIiwic2VxdWVudGlhbFVwbG9hZHMiLCJsaW1pdENvbmN1cnJlbnRVcGxvYWRzIiwiZm9yY2VJZnJhbWVUcmFuc3BvcnQiLCJyZWRpcmVjdCIsInJlZGlyZWN0UGFyYW1OYW1lIiwicG9zdE1lc3NhZ2UiLCJtdWx0aXBhcnQiLCJtYXhDaHVua1NpemUiLCJ1cGxvYWRlZEJ5dGVzIiwicmVjYWxjdWxhdGVQcm9ncmVzcyIsInByb2dyZXNzSW50ZXJ2YWwiLCJiaXRyYXRlSW50ZXJ2YWwiLCJhdXRvVXBsb2FkIiwidW5pcXVlRmlsZW5hbWVzIiwibWVzc2FnZXMiLCJpMThuIiwibWVzc2FnZSIsImNvbnRleHQiLCJ0b1N0cmluZyIsImVhY2giLCJrZXkiLCJ2YWx1ZSIsInJlcGxhY2UiLCJmb3JtRGF0YSIsImZvcm0iLCJzZXJpYWxpemVBcnJheSIsImFkZCIsImRhdGEiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJmaWxldXBsb2FkIiwicHJvY2VzcyIsImRvbmUiLCJzdWJtaXQiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiY2FjaGUiLCJ0aW1lb3V0IiwiX3Byb21pc2VQaXBlIiwicGFydHMiLCJmbiIsImpxdWVyeSIsInNwbGl0IiwiTnVtYmVyIiwiX3NwZWNpYWxPcHRpb25zIiwiX2Jsb2JTbGljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX0JpdHJhdGVUaW1lciIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJnZXRUaW1lIiwibG9hZGVkIiwiYml0cmF0ZSIsImdldEJpdHJhdGUiLCJpbnRlcnZhbCIsInRpbWVEaWZmIiwiX2lzWEhSVXBsb2FkIiwiX2dldEZvcm1EYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJwdXNoIiwiX2dldFRvdGFsIiwiZmlsZXMiLCJ0b3RhbCIsImluZGV4IiwiZmlsZSIsInNpemUiLCJfaW5pdFByb2dyZXNzT2JqZWN0Iiwib2JqIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MiLCJleHRlbmQiLCJfaW5pdFJlc3BvbnNlT2JqZWN0IiwiX3Jlc3BvbnNlIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX29uUHJvZ3Jlc3MiLCJsZW5ndGhDb21wdXRhYmxlIiwiX3RpbWUiLCJNYXRoIiwiZmxvb3IiLCJjaHVua1NpemUiLCJfYml0cmF0ZVRpbWVyIiwiX2luaXRQcm9ncmVzc0xpc3RlbmVyIiwidGhhdCIsInhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsIm9uIiwib2UiLCJfZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lciIsIm9mZiIsIl9pc0luc3RhbmNlT2YiLCJfZ2V0VW5pcXVlRmlsZW5hbWUiLCJtYXAiLCJTdHJpbmciLCJfIiwicDEiLCJwMiIsImV4dCIsIl9pbml0WEhSRGF0YSIsImhlYWRlcnMiLCJjb250ZW50UmFuZ2UiLCJibG9iIiwiZW5jb2RlVVJJIiwidXBsb2FkTmFtZSIsImZpZWxkIiwiYXBwZW5kIiwiZmlsZU5hbWUiLCJfaW5pdElmcmFtZVNldHRpbmdzIiwidGFyZ2V0SG9zdCIsInVybCIsImRhdGFUeXBlIiwibG9jYXRpb24iLCJob3N0IiwiX2luaXREYXRhU2V0dGluZ3MiLCJfY2h1bmtlZFVwbG9hZCIsIl9nZXRQYXJhbU5hbWUiLCJpbnB1dCIsImkiLCJsZW5ndGgiLCJfaW5pdEZvcm1TZXR0aW5ncyIsImhyZWYiLCJ0b1VwcGVyQ2FzZSIsImZvcm1BY2NlcHRDaGFyc2V0IiwiYXR0ciIsIl9nZXRBSkFYU2V0dGluZ3MiLCJfZ2V0RGVmZXJyZWRTdGF0ZSIsImRlZmVycmVkIiwic3RhdGUiLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsIl9lbmhhbmNlUHJvbWlzZSIsInByb21pc2UiLCJzdWNjZXNzIiwiZXJyb3IiLCJmYWlsIiwiY29tcGxldGUiLCJhbHdheXMiLCJfZ2V0WEhSUHJvbWlzZSIsInJlc29sdmVPclJlamVjdCIsImFyZ3MiLCJkZmQiLCJEZWZlcnJlZCIsInJlc29sdmVXaXRoIiwicmVqZWN0V2l0aCIsImFib3J0IiwiX2FkZENvbnZlbmllbmNlTWV0aG9kcyIsImdldFByb21pc2UiLCJyZXNvbHZlRnVuYyIsInJlamVjdEZ1bmMiLCJfcHJvY2Vzc1F1ZXVlIiwiZXJyb3JUaHJvd24iLCJqcVhIUiIsIl9vblNlbmQiLCJwcm9jZXNzaW5nIiwicmVzcG9uc2UiLCJfZ2V0VXBsb2FkZWRCeXRlcyIsInJhbmdlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJ1cHBlckJ5dGVzUG9zIiwicGFyc2VJbnQiLCJ0ZXN0T25seSIsImZzIiwidWIiLCJtY3MiLCJvIiwiY3VycmVudExvYWRlZCIsImFqYXgiLCJyZXN1bHQiLCJ0ZXh0U3RhdHVzIiwiX2JlZm9yZVNlbmQiLCJfYWN0aXZlIiwiX29uRG9uZSIsIl9vbkZhaWwiLCJfb25BbHdheXMiLCJqcVhIUm9yUmVzdWx0IiwianFYSFJvckVycm9yIiwiYWJvcnRlZCIsInNsb3QiLCJwaXBlIiwic2VuZCIsIl9zZW5kaW5nIiwibmV4dFNsb3QiLCJfc2xvdHMiLCJzaGlmdCIsInJlc29sdmUiLCJfc2VxdWVuY2UiLCJfb25BZGQiLCJmaWxlc0xlbmd0aCIsImxpbWl0IiwibGltaXRTaXplIiwib3ZlcmhlYWQiLCJiYXRjaFNpemUiLCJwYXJhbU5hbWVTZXQiLCJwYXJhbU5hbWVTbGljZSIsImZpbGVTZXQiLCJqIiwib3JpZ2luYWxGaWxlcyIsImVsZW1lbnQiLCJuZXdEYXRhIiwiX3JlcGxhY2VGaWxlSW5wdXQiLCJpbnB1dENsb25lIiwiY2xvbmUiLCJyZXN0b3JlRm9jdXMiLCJpcyIsImFjdGl2ZUVsZW1lbnQiLCJmaWxlSW5wdXRDbG9uZSIsInJlc2V0IiwiYWZ0ZXIiLCJkZXRhY2giLCJ0cmlnZ2VyIiwiY2xlYW5EYXRhIiwiZWwiLCJfaGFuZGxlRmlsZVRyZWVFbnRyeSIsImVudHJ5IiwicGF0aCIsImVudHJpZXMiLCJkaXJSZWFkZXIiLCJlcnJvckhhbmRsZXIiLCJzdWNjZXNzSGFuZGxlciIsIl9oYW5kbGVGaWxlVHJlZUVudHJpZXMiLCJyZWFkRW50cmllcyIsInJlc3VsdHMiLCJjb25jYXQiLCJpc0ZpbGUiLCJfZmlsZSIsInJlbGF0aXZlUGF0aCIsImlzRGlyZWN0b3J5IiwiY3JlYXRlUmVhZGVyIiwid2hlbiIsIkFycmF5IiwiX2dldERyb3BwZWRGaWxlcyIsIml0ZW1zIiwid2Via2l0R2V0QXNFbnRyeSIsImdldEFzRW50cnkiLCJpdGVtIiwiZ2V0QXNGaWxlIiwibWFrZUFycmF5IiwiX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzIiwiZmlsZVNpemUiLCJfZ2V0RmlsZUlucHV0RmlsZXMiLCJfb25DaGFuZ2UiLCJ0YXJnZXQiLCJfb25QYXN0ZSIsImNsaXBib2FyZERhdGEiLCJfb25Ecm9wIiwiX29uRHJhZ092ZXIiLCJfb25EcmFnRW50ZXIiLCJfb25EcmFnTGVhdmUiLCJfaW5pdEV2ZW50SGFuZGxlcnMiLCJfb24iLCJkcmFnb3ZlciIsImRyb3AiLCJkcmFnZW50ZXIiLCJkcmFnbGVhdmUiLCJwYXN0ZSIsImNoYW5nZSIsIl9kZXN0cm95RXZlbnRIYW5kbGVycyIsIl9vZmYiLCJfZGVzdHJveSIsIl9zZXRPcHRpb24iLCJyZWluaXQiLCJfc3VwZXIiLCJfaW5pdFNwZWNpYWxPcHRpb25zIiwiZmluZCIsIl9nZXRSZWdFeHAiLCJzdHIiLCJtb2RpZmllcnMiLCJwb3AiLCJqb2luIiwiX2lzUmVnRXhwT3B0aW9uIiwiX2luaXREYXRhQXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsIl9jcmVhdGUiLCJhY3RpdmUiLCJkaXNhYmxlZCIsInJlamVjdCIsInRoZW4iLCJjb3VudGVyIiwianNvbkFQSSIsImpzb25QYXJzZSIsIkpTT04iLCJhamF4VHJhbnNwb3J0IiwiYXN5bmMiLCJpbml0aWFsSWZyYW1lU3JjIiwiaWZyYW1lIiwiYWRkUGFyYW1DaGFyIiwiY29tcGxldGVDYWxsYmFjayIsImZpbGVJbnB1dENsb25lcyIsInBhcmFtTmFtZXMiLCJjb250ZW50cyIsImZpcnN0Q2hpbGQiLCJFcnJvciIsImFwcGVuZFRvIiwic2V0VGltZW91dCIsInJlbW92ZSIsInZhbCIsInJlbW92ZUF0dHIiLCJyZXBsYWNlV2l0aCIsImJvZHkiLCJhamF4U2V0dXAiLCJjb252ZXJ0ZXJzIiwiaWZyYW1lVGV4dCIsInRleHQiLCJpZnJhbWVKc29uIiwiaWZyYW1lSHRtbCIsImh0bWwiLCJpZnJhbWVYbWwiLCJ4bWxEb2MiLCJpc1hNTERvYyIsInBhcnNlWE1MIiwiWE1MRG9jdW1lbnQiLCJ4bWwiLCJpZnJhbWVTY3JpcHQiLCJnbG9iYWxFdmFsIiwicmFuZG9tVVVJRCIsImNyeXB0byIsImMiLCJnZXRSYW5kb21WYWx1ZXMiLCJVaW50OEFycmF5IiwiVnVlIiwiY29tcG9uZW50IiwidGVtcGxhdGUiLCJwcm9wcyIsIm1vZGVsIiwidXBsb2FkSW5wdXRJZCIsIm1vdW50ZWQiLCJfc2VsZiR1cGxvYWRJbnB1dElkIiwic2VsZiIsInVwbG9hZElucHV0IiwiZ2V0RWxlbWVudEJ5SWQiLCJiaW5kIiwicGVyY2VudGFnZSIsImhhbmRsZUZhaWx1cmUiLCJidXMiLCIkZW1pdCIsIm1ldGhvZHMiLCJlcnJvck1lc3NhZ2UiLCJkaXNtaXNzV2FybmluZyIsIlQiLCJleHBhbmRlZCIsInBlbmRpbmdDb3VudCIsImVycm9yQ291bnQiLCJjcmVhdGVkIiwidXBsb2FkcyIsImVycm9ycyIsImNsZWFyRXJyb3JzIiwiY29tcHV0ZWQiLCJmaWxlQ291bnQiLCJmb3JFYWNoIiwibmV3RmlsZSIsImFscmVhZHlJbkxpc3QiLCJzb21lIiwiZiIsImNvbnNvbGUiLCIkb24iLCJmaWxlVXBsb2FkIiwiYXJyYXkiLCJzcGxpY2UiLCJ1cGRhdGVDb3VudCIsImZpbHRlciIsIndhdGNoIiwiaW5pdGlhbGl6ZWQiLCJtZWRpYUFwcCIsImluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uIiwiZGlzcGxheU1lZGlhQXBwbGljYXRpb24iLCJtZWRpYUFwcGxpY2F0aW9uVXJsIiwicGF0aEJhc2UiLCJtZXRob2QiLCJjb250ZW50Iiwicm9vdCIsImZvbGRlciIsInNlbGVjdGVkRm9sZGVyIiwibWVkaWFJdGVtcyIsInNlbGVjdGVkTWVkaWFzIiwiZHJhZ0Ryb3BUaHVtYm5haWwiLCJJbWFnZSIsInNtYWxsVGh1bWJzIiwiZ3JpZFZpZXciLCJtZWRpYUZpbHRlciIsInNvcnRCeSIsInNvcnRBc2MiLCJpdGVtc0luUGFnZSIsInNyYyIsInNlbGVjdFJvb3QiLCJzZWxlY3RlZCIsImVycm9ySW5mbyIsImxvYWRGb2xkZXIiLCJuZXdOYW1lIiwibmV3UGF0aCIsIm9sZFBhdGgiLCJtZWRpYSIsIm1lZGlhUGF0aCIsImNyZWF0ZUZvbGRlciIsImRlbGV0ZUZvbGRlciIsIm5ld1NvcnQiLCJjaGFuZ2VTb3J0IiwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYSIsInJlbmFtZU1lZGlhIiwiZGVsZXRlTWVkaWFJdGVtIiwiaGFuZGxlRHJhZ1N0YXJ0IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImN1cnJlbnRQcmVmcyIsInBhcnNlIiwiaXNIb21lIiwicGFyZW50cyIsInAiLCJwYXJlbnRGb2xkZXIiLCJ1bnNoaWZ0IiwicGFyZW50IiwiZmlsdGVyZWRNZWRpYUl0ZW1zIiwiZmlsdGVyZWQiLCJpbmRleE9mIiwic29ydCIsImEiLCJiIiwibWltZSIsImxvY2FsZUNvbXBhcmUiLCJsYXN0TW9kaWZ5IiwiaGlkZGVuQ291bnQiLCJ0aHVtYlNpemUiLCJnZXQiLCJzZXQiLCJuZXdQcmVmcyIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJuZXdGb2xkZXIiLCIkcmVmcyIsInJvb3RGb2xkZXIiLCJ0b2dnbGUiLCJ1cGxvYWRVcmwiLCJ1cmxWYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1lZGlhVXJsIiwibG9nIiwib3BlbiIsInNlbGVjdEFsbCIsInVuU2VsZWN0QWxsIiwiaW52ZXJ0U2VsZWN0aW9uIiwidGVtcCIsImlzTWVkaWFTZWxlY3RlZCIsImNvbmZpcm1EaWFsb2ciLCJfb2JqZWN0U3ByZWFkIiwiY2FsbGJhY2siLCJyZXNwIiwiX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4iLCJyZXNwb25zZVRleHQiLCJlbXB0eSIsIm1vZGFsIiwiYm9vdHN0cmFwIiwiTW9kYWwiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwic2hvdyIsImZvY3VzIiwic2VsZWN0QW5kRGVsZXRlTWVkaWEiLCJkZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhTGlzdCIsIm1lZGlhTGlzdCIsInBhdGhzIiwibWVkaWFOYW1lcyIsInNldERhdGEiLCJzZXREcmFnSW1hZ2UiLCJlZmZlY3RBbGxvd2VkIiwiaGFuZGxlU2Nyb2xsV2hpbGVEcmFnIiwiY2xpZW50WSIsInNjcm9sbEJ5IiwiaW5uZXJIZWlnaHQiLCJrZXlwcmVzcyIsIndoaWNoIiwiY2xpY2siLCJoaWRlIiwib2xkTmFtZSIsImN1cnJlbnRGb2xkZXIiLCJzdHlsZSIsImRpc3BsYXkiLCJjaHVua2VkRmlsZVVwbG9hZElkIiwiYW50aUZvcmdlcnlUb2tlbiIsIkZpbGUiLCJsYXN0TW9kaWZpZWQiLCJkdCIsImNvbnRhaW5zIiwiZHJvcFpvbmVUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiYWRkQ2xhc3MiLCJob3ZlcmVkRHJvcFpvbmUiLCJjbG9zZXN0IiwicmVtb3ZlQ2xhc3MiLCJkaXIiLCJzZWxlY3RlZEluTWVkaWFBcHAiLCJsZXZlbCIsImNoaWxkcmVuIiwiaXNIb3ZlcmVkIiwicGFkZGluZyIsImlzU2VsZWN0ZWQiLCJpc1Jvb3QiLCJpc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlciIsImxvYWRDaGlsZHJlbiIsInNlbGVjdCIsImVtdHB5IiwiaGFuZGxlRHJhZ092ZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJtb3ZlTWVkaWFUb0ZvbGRlciIsImdldERhdGEiLCJzb3VyY2VGb2xkZXIiLCJ0YXJnZXRGb2xkZXIiLCJhbGVydCIsImZhSWNvbnMiLCJpbWFnZSIsInBkZiIsIndvcmQiLCJwb3dlcnBvaW50IiwiZXhjZWwiLCJjc3YiLCJhdWRpbyIsInZpZGVvIiwiYXJjaGl2ZSIsImNvZGUiLCJmYVRodW1ibmFpbHMiLCJnaWYiLCJqcGVnIiwianBnIiwicG5nIiwiZG9jIiwiZG9jeCIsInBwdCIsInBwdHgiLCJ4bHMiLCJ4bHN4IiwiYWFjIiwibXAzIiwib2dnIiwiYXZpIiwiZmx2IiwibWt2IiwibXA0Iiwid2VibSIsImd6IiwiemlwIiwiY3NzIiwianMiLCJ0eHQiLCJnZXRDbGFzc05hbWVGb3JFeHRlbnNpb24iLCJleHRlbnNpb24iLCJnZXRFeHRlbnNpb25Gb3JGaWxlbmFtZSIsImZpbGVuYW1lIiwibGFzdEluZGV4T2YiLCJnZXRDbGFzc05hbWVGb3JGaWxlbmFtZSIsImVkaXRCdXR0b24iLCJkZWxldGVCdXR0b24iLCJidWlsZE1lZGlhVXJsIiwiZHJhZ1N0YXJ0IiwiZ2V0Zm9udEF3ZXNvbWVDbGFzc05hbWVGb3JGaWxlTmFtZSIsImdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZW5hbWUiLCJ0aHVtYnNpemUiLCJCb29sZWFuIiwiaW1hZ2VIZWFkZXIiLCJuYW1lSGVhZGVyIiwibGFzdE1vZGlmeUhlYWRlciIsInNpemVIZWFkZXIiLCJ0eXBlSGVhZGVyIiwidmlld0J1dHRvbiIsInByaW50RGF0ZVRpbWUiLCJkYXRlbWlsbGlzIiwiZCIsInRvTG9jYWxlU3RyaW5nIiwic291cmNlSXRlbXMiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImN1cnJlbnQiLCJwYWdlckZpcnN0QnV0dG9uIiwicGFnZXJQcmV2aW91c0J1dHRvbiIsInBhZ2VyTmV4dEJ1dHRvbiIsInBhZ2VyTGFzdEJ1dHRvbiIsInBhZ2VyUGFnZVNpemVMYWJlbCIsInBhZ2VyUGFnZUxhYmVsIiwicGFnZXJUb3RhbExhYmVsIiwibmV4dCIsInByZXZpb3VzIiwiZ29GaXJzdCIsImdvTGFzdCIsInRvdGFsUGFnZXMiLCJnb1RvIiwidGFyZ2V0UGFnZSIsInBhZ2VzIiwiY2VpbCIsImlzTGFzdFBhZ2UiLCJpc0ZpcnN0UGFnZSIsImNhbkRvTmV4dCIsImNhbkRvUHJldiIsImNhbkRvRmlyc3QiLCJjYW5Eb0xhc3QiLCJpdGVtc0luQ3VycmVudFBhZ2UiLCJzdGFydCIsImVuZCIsInBhZ2VMaW5rcyIsImxpbmtzIiwiYmVmb3JlQ3VycmVudCIsImJlZm9yZUJlZm9yZUN1cnJlbnQiLCJhZnRlckN1cnJlbnQiLCJhZnRlckFmdGVyQ3VycmVudCIsImNvbG5hbWUiLCJzZWxlY3RlZGNvbG5hbWUiLCJhc2MiLCJpc0FjdGl2ZSIsImluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQiLCJpZE9mVXBsb2FkQnV0dG9uIiwidXBsb2FkQWN0aW9uIiwibWVkaWFJdGVtVXJsIiwiYWxsb3dNdWx0aXBsZSIsImFsbG93TWVkaWFUZXh0IiwiYWxsb3dBbmNob3JzIiwidGVtcFVwbG9hZEZvbGRlciIsIm1heFVwbG9hZENodW5rU2l6ZSIsImluaXRpYWxQYXRocyIsIm1lZGlhRmllbGRFZGl0b3IiLCJpZHByZWZpeCIsIm1lZGlhRmllbGRBcHAiLCJtZWRpYUZpZWxkQXBwcyIsInNlbGVjdGVkTWVkaWEiLCJpZFByZWZpeCIsImJhY2t1cE1lZGlhVGV4dCIsImJhY2t1cEFuY2hvciIsIm1lZGlhVGV4dG1vZGFsIiwiYW5jaG9yaW5nTW9kYWwiLCJtZWRpYVBhdGhzIiwieCIsImlzUmVtb3ZlZCIsImlzTmV3IiwibWVkaWFUZXh0IiwiYW5jaG9yIiwiYXR0YWNoZWRGaWxlTmFtZSIsInZhbHVlcyIsInNpZ25hbCIsInZ1ZWtleSIsInkiLCJyb3VuZCIsImNhbkFkZE1lZGlhIiwibm9uUmVtb3ZlZE1lZGlhSXRlbXMiLCJzZWxlY3RNZWRpYSIsInNlbGVjdG9yIiwiZWRpdG9ySWQiLCJjb3VudCIsImdldFVuaXF1ZUlkIiwibmV3TWVkaWFJdGVtcyIsImVycm9ybXNnIiwiciIsInJhbmRvbSIsInYiLCJyZW1vdmVTZWxlY3RlZCIsImV2ZW50IiwicmVtb3ZlZCIsInNob3dNZWRpYVRleHRNb2RhbCIsIm1lZGlhVGV4dE1vZGFsIiwiY2FuY2VsTWVkaWFUZXh0TW9kYWwiLCJzaG93QW5jaG9yTW9kYWwiLCJjYW5jZWxBbmNob3JpbmdNb2RhbCIsInJlc2V0QW5jaG9yIiwib25BbmNob3JEcm9wIiwiYW5jaG9ySW1hZ2UiLCJvZmZzZXRYIiwiY2xpZW50V2lkdGgiLCJvZmZzZXRZIiwiY2xpZW50SGVpZ2h0IiwiYW5jaG9yTGVmdCIsIm1vZGFsQm9keSIsIm9mZnNldCIsInBvc2l0aW9uIiwiYW5jaG9yVG9wIiwic2V0QW5jaG9yIiwiYWRkTWVkaWFGaWxlcyIsImRlZXAiLCJoYW5kbGVyIiwiaW5pdGlhbGl6ZU1lZGlhRmllbGQiLCJtb2RhbEJvZHlFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInNob3dNb2RhbCIsImFuY2hvckljb24iLCJxdWVyeVNlbGVjdG9yIiwiaXNJbnRlZ2VyIiwibWVkaWFOb3RGb3VuZCIsImRpc2NhcmRXYXJuaW5nIiwibm9JbWFnZXMiLCIkcGFyZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUMsVUFBVUEsT0FBTyxFQUFFO0VBQ2xCLFlBQVk7O0VBQ1osSUFBSSxPQUFPQyxNQUFNLEtBQUssVUFBVSxJQUFJQSxNQUFNLENBQUNDLEdBQUcsRUFBRTtJQUM5QztJQUNBRCxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFBRUQsT0FBTyxDQUFDO0VBQ3BELENBQUMsTUFBTSxJQUFJLFFBQU9HLE9BQU8saUNBQUFDLE9BQUEsQ0FBUEQsT0FBTyxPQUFLLFFBQVEsRUFBRTtJQUN0QztJQUNBSCxPQUFP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Q3JDLE9BQU96VCxHQUFHLElBQUlBLEdBQUcsQ0FBQ2lULE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxHQUFHUSxTQUFTLEdBQUcsVUFBVSxHQUFHQSxTQUFTO0lBQ3JHLENBQUM7SUFDRG1JLGtDQUFrQyxFQUFDLFNBQVNDLGtDQUFrQ0EsQ0FBQ1IsUUFBUSxFQUFFUyxTQUFTLEVBQUM7TUFDL0YsT0FBT1AsdUJBQXVCLENBQUNGLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBR1MsU0FBUztJQUM5RDtFQUNKO0FBQ0osQ0FBQyxDQUFDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsImZ1bmN0aW9uIHJhbmRvbVVVSUQoKSB7XHJcbiAgICBpZiAodHlwZW9mIGNyeXB0byA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGNyeXB0by5yYW5kb21VVUlEID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XHJcbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcclxuICAgICk7XHJcbn1cclxuIiwiLy8gPHVwbG9hZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsgXFwndXBsb2FkLXdhcm5pbmdcXCcgOiBtb2RlbC5lcnJvck1lc3NhZ2UgfVwiIGNsYXNzPVwidXBsb2FkIG0tMiBwLTIgcHQtMFwiPiBcXFxyXG4gICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgdi1vbjpjbGljaz1cImRpc21pc3NXYXJuaW5nKClcIiBjbGFzcz1cImNsb3NlLXdhcm5pbmdcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiA8L3NwYW4+XFxcclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtbmFtZVwiIDp0aXRsZT1cIm1vZGVsLmVycm9yTWVzc2FnZVwiPnt7IG1vZGVsLm5hbWUgfX08L3A+IFxcXHJcbiAgICAgICAgICAgIDxkaXY+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFtb2RlbC5lcnJvck1lc3NhZ2VcIiA6c3R5bGU9XCJ7IHdpZHRoOiBtb2RlbC5wZXJjZW50YWdlICsgXFwnJVxcJ31cIiBjbGFzcz1cInByb2dyZXNzLWJhclwiPiA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj4gRXJyb3I6IHt7IG1vZGVsLmVycm9yTWVzc2FnZSB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICcsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgdXBsb2FkSW5wdXRJZDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgdXBsb2FkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxmLnVwbG9hZElucHV0SWQgPz8gJ2ZpbGV1cGxvYWQnKTtcclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBzZWxmLm1vZGVsLnBlcmNlbnRhZ2UgPSBwYXJzZUludChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDAsIDEwKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXNbMF0uZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsIGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgIFxyXG4gICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHNlbGYubW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRmYWlsJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVGYWlsdXJlKGRhdGEuZmlsZXNbMF0ubmFtZSwgJCgnI3QtZXJyb3InKS52YWwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUZhaWx1cmU6IGZ1bmN0aW9uIChmaWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdFcnJvck9uVXBsb2FkJywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkaXNtaXNzV2FybmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbW92YWxSZXF1ZXN0JywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZC1saXN0PiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgndXBsb2FkTGlzdCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWxpc3RcIiB2LXNob3c9XCJmaWxlcy5sZW5ndGggPiAwXCI+IFxcXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIiBAY2xpY2s9XCJleHBhbmRlZCA9ICFleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7IFQudXBsb2FkcyB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJwZW5kaW5nQ291bnRcIj4gKFBlbmRpbmc6IHt7IHBlbmRpbmdDb3VudCB9fSkgPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiZXJyb3JDb3VudFwiIDpjbGFzcz1cInsgXFwndGV4dC1kYW5nZXJcXCcgOiBlcnJvckNvdW50IH1cIj4gKCB7eyBULmVycm9ycyB9fToge3sgZXJyb3JDb3VudCB9fSAvIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB2LW9uOmNsaWNrLnN0b3A9XCJjbGVhckVycm9yc1wiID4ge3sgVC5jbGVhckVycm9ycyB9fSA8L2E+KTwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LXNob3c9XCIhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPHVwbG9hZCA6dXBsb2FkLWlucHV0LWlkPVwidXBsb2FkSW5wdXRJZFwiIHYtZm9yPVwiZiBpbiBmaWxlc1wiIDprZXk9XCJmLm5hbWVcIiAgOm1vZGVsPVwiZlwiPjwvdXBsb2FkPiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXYgPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGVzOiBbXSxcclxuICAgICAgICAgICAgVDoge30sXHJcbiAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcGVuZGluZ0NvdW50OiAwLFxyXG4gICAgICAgICAgICBlcnJvckNvdW50OiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgdXBsb2FkSW5wdXRJZDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC51cGxvYWRzID0gJCgnI3QtdXBsb2FkcycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5lcnJvcnMgPSAkKCcjdC1lcnJvcnMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuY2xlYXJFcnJvcnMgPSAkKCcjdC1jbGVhci1lcnJvcnMnKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGZpbGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHVwbG9hZElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZi51cGxvYWRJbnB1dElkID8/ICdmaWxldXBsb2FkJyk7XHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGFkZCcsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghZGF0YS5maWxlcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdGEuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAobmV3RmlsZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFscmVhZHlJbkxpc3QgPSBzZWxmLmZpbGVzLnNvbWUoZnVuY3Rpb24gKGYpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5uYW1lID09IG5ld0ZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUluTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZXMucHVzaCh7IG5hbWU6IG5ld0ZpbGUubmFtZSwgcGVyY2VudGFnZTogMCwgZXJyb3JNZXNzYWdlOiAnJyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9uIHRoZSBxdWV1ZTonICsgbmV3RmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ3JlbW92YWxSZXF1ZXN0JywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT0gZmlsZVVwbG9hZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ0Vycm9yT25VcGxvYWQnLCBmdW5jdGlvbiAoZmlsZVVwbG9hZCkge1xyXG4gICAgICAgICAgICBzZWxmLnVwZGF0ZUNvdW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHVwZGF0ZUNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JDb3VudCA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgIT0gJyc7XHJcbiAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ291bnQgPSB0aGlzLmZpbGVzLmxlbmd0aCAtIHRoaXMuZXJyb3JDb3VudDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhckVycm9yczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmVycm9yTWVzc2FnZSA9PSAnJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgZmlsZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsInZhciBpbml0aWFsaXplZDtcclxudmFyIG1lZGlhQXBwO1xyXG5cclxudmFyIGJ1cyA9IG5ldyBWdWUoKTtcclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uKGRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uLCBtZWRpYUFwcGxpY2F0aW9uVXJsLCBwYXRoQmFzZSkge1xyXG5cclxuICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFtZWRpYUFwcGxpY2F0aW9uVXJsKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignbWVkaWFBcHBsaWNhdGlvblVybCB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdXJsOiBtZWRpYUFwcGxpY2F0aW9uVXJsLFxyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgJCgnLnRhLWNvbnRlbnQnKS5hcHBlbmQoY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYWFwcGxpY2F0aW9uOnJlYWR5Jyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcm9vdCA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICQoJyN0LW1lZGlhTGlicmFyeScpLnRleHQoKSxcclxuICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZWRpYUFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgICAgICAgICAgZWw6ICcjbWVkaWFBcHAnLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1lZGlhczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkcmFnRHJvcFRodW1ibmFpbDogbmV3IEltYWdlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpbHRlcjogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0QXNjOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zSW5QYWdlOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZHJhZ0Ryb3BUaHVtYm5haWwuc3JjID0gKHBhdGhCYXNlIHx8ICcnKSArICcvT3JjaGFyZENvcmUuTWVkaWEvSW1hZ2VzL2RyYWctdGh1bWJuYWlsLnBuZyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlclNlbGVjdGVkJywgZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRm9sZGVyID0gZm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJEZWxldGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyQWRkZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlci5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhTGlzdE1vdmVkJywgZnVuY3Rpb24gKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRGb2xkZXIoc2VsZi5zZWxlY3RlZEZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLnB1c2goZXJyb3JJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVJlbmFtZWQnLCBmdW5jdGlvbiAobmV3TmFtZSwgbmV3UGF0aCwgb2xkUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWEgPSBzZWxmLm1lZGlhSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5tZWRpYVBhdGggPT09IG9sZFBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEubWVkaWFQYXRoID0gbmV3UGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEubmFtZSA9IG5ld05hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2NyZWF0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZUZvbGRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVGb2xkZXJSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVGb2xkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIGhhbmRsZXJzIGZvciBhY3Rpb25zIGluIGJvdGggZ3JpZCBhbmQgdGFibGUgdmlldy5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VTb3J0KG5ld1NvcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmFtZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVNZWRpYUl0ZW0obWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZURyYWdTdGFydChtZWRpYSwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVyIGZvciBwYWdlciBldmVudHNcclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdwYWdlckV2ZW50JywgZnVuY3Rpb24gKGl0ZW1zSW5QYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRlbXNJblBhZ2UgPSBpdGVtc0luUGFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUFwcGxpY2F0aW9uUHJlZnMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRm9sZGVyID0gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUFwcGxpY2F0aW9uUHJlZnMnKSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBpc0hvbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPT0gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhcmVudEZvbGRlciAmJiBwYXJlbnRGb2xkZXIucGF0aCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC51bnNoaWZ0KHBhcmVudEZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBwYXJlbnRGb2xkZXIucGFyZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTWVkaWFJdGVtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBzZWxmLm1lZGlhSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWxmLm1lZGlhRmlsdGVyLnRvTG93ZXJDYXNlKCkpID4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2VsZi5zb3J0QnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NpemUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEuc2l6ZSAtIGIuc2l6ZSA6IGIuc2l6ZSAtIGEuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbWUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubWltZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5taW1lLnRvTG93ZXJDYXNlKCkpIDogYi5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShhLm1pbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsYXN0TW9kaWZ5JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvcnRBc2MgPyBhLmxhc3RNb2RpZnkgLSBiLmxhc3RNb2RpZnkgOiBiLmxhc3RNb2RpZnkgLSBhLmxhc3RNb2RpZnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubmFtZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lLnRvTG93ZXJDYXNlKCkpIDogYi5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShhLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbkNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoIC0gdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTAwIDogMjQwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1icyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjogdGhpcy5zZWxlY3RlZEZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkVmlldzogdGhpcy5ncmlkVmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld1ByZWZzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkVmlldyA9IG5ld1ByZWZzLmdyaWRWaWV3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjogZnVuY3Rpb24gKG5ld0ZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsdGVyID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBuZXdGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcihuZXdGb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMucm9vdEZvbGRlci50b2dnbGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkVXJsOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsVmFsdWUgPSAkKCcjdXBsb2FkRmlsZXMnKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmxWYWx1ZSArICh1cmxWYWx1ZS5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgXCJwYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2VsZWN0ZWRGb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RSb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFVcmwgPSAkKCcjZ2V0TWVkaWFJdGVtc1VybCcpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhmb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhVXJsICsgKG1lZGlhVXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyBcInBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZm9sZGVyLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcyA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ydEJ5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QXNjID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGxvYWRpbmcgZm9sZGVyOicgKyBmb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RSb290KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdW5TZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJ0U2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSB0ZW1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZChtZWRpYSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5zcGxpY2UodGhpcy5zZWxlY3RlZE1lZGlhcy5pbmRleE9mKG1lZGlhKSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2gobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpc01lZGlhU2VsZWN0ZWQ6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcy5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnVybC50b0xvd2VyQ2FzZSgpID09PSBtZWRpYS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGRlciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJvb3QgZm9sZGVyIGNhbid0IGJlIGRlbGV0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlciA9PSB0aGlzLnJvb3QubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZUZvbGRlclwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZm9sZGVyLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlcicsIGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbCAubW9kYWwtYm9keSBpbnB1dCcpLnZhbCgnJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI3JlbmFtZU1lZGlhTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI29sZC1pdGVtLW5hbWUnKS52YWwobWVkaWEubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsIC5tb2RhbC1ib2R5IGlucHV0JykudmFsKG1lZGlhLm5hbWUpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlTWVkaWEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZU1lZGlhTGlzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFMaXN0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhTGlzdC5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMucHVzaChtZWRpYUxpc3RbaV0ubWVkaWFQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZU1lZGlhTGlzdFVybCcpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiBwYXRoc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnNlbGVjdGVkTWVkaWFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYubWVkaWFJdGVtcyAmJiBzZWxmLm1lZGlhSXRlbXMuaW5kZXhPZihzZWxmLnNlbGVjdGVkTWVkaWFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURlbGV0ZWQnLCBzZWxmLnNlbGVjdGVkTWVkaWFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZU1lZGlhSXRlbTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlTWVkaWFcIikuZGF0YSgpLCBjYWxsYmFjazogZnVuY3Rpb24gKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWEubWVkaWFQYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKG1lZGlhKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zZWxmLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVEcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBwYXJ0IG9mIG1vdmUgbWVkaWEgdG8gZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVwYXJlIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBmb2xkZXIgY29tcG9uZW50IG9uIGRyb3AgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhTmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzLnB1c2goaXRlbS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRyYWdzIGFuIHVuc2VsZWN0ZWQgaXRlbSwgd2Ugc2VsZWN0IGl0IGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZChtZWRpYSkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ21lZGlhTmFtZXMnLCBKU09OLnN0cmluZ2lmeShtZWRpYU5hbWVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3NvdXJjZUZvbGRlcicsIHRoaXMuc2VsZWN0ZWRGb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSh0aGlzLmRyYWdEcm9wVGh1bWJuYWlsLCAxMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2Nyb2xsV2hpbGVEcmFnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZIDwgMTUwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgLTEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2xpZW50WSA+IHdpbmRvdy5pbm5lckhlaWdodCAtIDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc29ydEJ5ID09IG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9ICF0aGlzLnNvcnRBc2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QnkgPSBuZXdTb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNjcmVhdGUtZm9sZGVyLW5hbWUnKS5rZXlwcmVzcyhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGUud2hpY2g7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09IDEzKSB7ICAvLyB0aGUgZW50ZXIga2V5IGNvZGVcclxuICAgICAgICAgICAgICAgICAgICAkKCcjbW9kYWxGb290ZXJPaycpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjY3JlYXRlRm9sZGVyVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGgpICsgXCImbmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdhZGRGb2xkZXInLCBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlciwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKCQoJyNjcmVhdGVGb2xkZXJNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IEpTT04ucGFyc2UoZXJyb3IucmVzcG9uc2VUZXh0KS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPjwvZGl2PicpLnRleHQoZXJyb3JNZXNzYWdlKS5hcHBlbmRUbygkKCcjY3JlYXRlRm9sZGVyTW9kYWwtZXJyb3JzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5ld05hbWUgPSAkKCcjbmV3LWl0ZW0tbmFtZScpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZE5hbWUgPSAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZXdOYW1lID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50Rm9sZGVyID0gbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCArIFwiL1wiO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb2xkZXIgPT09IFwiL1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvbGRlciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBjdXJyZW50Rm9sZGVyICsgbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRQYXRoID0gY3VycmVudEZvbGRlciArIG9sZE5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1BhdGgudG9Mb3dlckNhc2UoKSA9PT0gb2xkUGF0aC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI3JlbmFtZU1lZGlhTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI3JlbmFtZU1lZGlhVXJsJykudmFsKCkgKyBcIj9vbGRQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9sZFBhdGgpICsgXCImbmV3UGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuZXdQYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gYm9vdHN0cmFwLk1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoJCgnI3JlbmFtZU1lZGlhTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVJlbmFtZWQnLCBuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IEpTT04ucGFyc2UoZXJyb3IucmVzcG9uc2VUZXh0KS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiPjwvZGl2PicpLnRleHQoZXJyb3JNZXNzYWdlKS5hcHBlbmRUbygkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWVkaWFBcHAnKS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignbWVkaWFBcHA6cmVhZHknKTtcclxuXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG4iLCIkKGRvY3VtZW50KS5vbignbWVkaWFBcHA6cmVhZHknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgY2h1bmtlZEZpbGVVcGxvYWRJZCA9IHJhbmRvbVVVSUQoKTtcclxuXHJcbiAgICAkKCcjZmlsZXVwbG9hZCcpXHJcbiAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICBkcm9wWm9uZTogJCgnI21lZGlhQXBwJyksXHJcbiAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICB1cmw6ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpLFxyXG4gICAgICAgICAgICBtYXhDaHVua1NpemU6IE51bWJlcigkKCcjbWF4VXBsb2FkQ2h1bmtTaXplJykudmFsKCkgfHwgMCksXHJcbiAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfSxcclxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdfX2NodW5rZWRGaWxlVXBsb2FkSWQnLCB2YWx1ZTogY2h1bmtlZEZpbGVVcGxvYWRJZCB9LFxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgJC5lYWNoKGRhdGEucmVzdWx0LmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGUuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbignZmlsZXVwbG9hZGNodW5rYmVmb3Jlc2VuZCcsIChlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gb3B0aW9ucy5maWxlc1swXTtcclxuICAgICAgICAgICAgLy8gSGVyZSB3ZSByZXBsYWNlIHRoZSBibG9iIHdpdGggYSBGaWxlIG9iamVjdCB0byBlbnN1cmUgdGhlIGZpbGUgbmFtZSBhbmQgb3RoZXJzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBiYWNrZW5kLlxyXG4gICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBuZXcgRmlsZShcclxuICAgICAgICAgICAgICAgIFtvcHRpb25zLmJsb2JdLFxyXG4gICAgICAgICAgICAgICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbn0pO1xyXG5cclxuXHJcbiQoZG9jdW1lbnQpLmJpbmQoJ2RyYWdvdmVyJywgZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciBkdCA9IGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XHJcbiAgICBpZiAoZHQudHlwZXMgJiYgKGR0LnR5cGVzLmluZGV4T2YgPyBkdC50eXBlcy5pbmRleE9mKCdGaWxlcycpICE9IC0xIDogZHQudHlwZXMuY29udGFpbnMoJ0ZpbGVzJykpKSB7XHJcbiAgICAgICAgdmFyIGRyb3Bab25lID0gJCgnI2N1c3RvbWRyb3B6b25lJyksXHJcbiAgICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0O1xyXG4gICAgICAgIGlmICh0aW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkcm9wWm9uZS5hZGRDbGFzcygnaW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGhvdmVyZWREcm9wWm9uZSA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoZHJvcFpvbmUpO1xyXG4gICAgICAgIHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLnJlbW92ZUNsYXNzKCdpbicpO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8Zm9sZGVyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnZm9sZGVyJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bGkgOmNsYXNzPVwie3NlbGVjdGVkOiBpc1NlbGVjdGVkfVwiIFxyXG4gICAgICAgICAgICAgICAgdi1vbjpkcmFnbGVhdmUucHJldmVudCA9IFwiaGFuZGxlRHJhZ0xlYXZlKCRldmVudCk7XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdvdmVyLnByZXZlbnQuc3RvcD1cImhhbmRsZURyYWdPdmVyKCRldmVudCk7XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyb3AucHJldmVudC5zdG9wID0gXCJtb3ZlTWVkaWFUb0ZvbGRlcihtb2RlbCwgJGV2ZW50KVwiID5cclxuICAgICAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7Zm9sZGVyaG92ZXJlZDogaXNIb3ZlcmVkICwgdHJlZXJvb3Q6IGxldmVsID09IDF9XCIgPlxyXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIDpzdHlsZT1cInsgcGFkZGluZyR7ZG9jdW1lbnQuZGlyID09IFwibHRyXCIgPyBcIkxlZnRcIiA6IFwiUmlnaHRcIn06cGFkZGluZyArICdweCcgfVwiIHYtb246Y2xpY2s9XCJzZWxlY3RcIiAgZHJhZ2dhYmxlPVwiZmFsc2VcIiBjbGFzcz1cImZvbGRlci1tZW51LWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlXCIgY2xhc3M9XCJleHBhbmRcIiA6Y2xhc3M9XCJ7b3BlbmVkOiBvcGVuLCBjbG9zZWQ6ICFvcGVuLCBlbXB0eTogZW1wdHl9XCI+PGkgdi1pZj1cIm9wZW5cIiBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwifVwiPjwvaT48L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9sZGVyLW5hbWUgbXMtMlwiPnt7bW9kZWwubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmb2xkZXItYWN0aW9uc1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHYtY2xvYWsgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHYtb246Y2xpY2s9XCJjcmVhdGVGb2xkZXJcIiB2LWlmPVwiaXNTZWxlY3RlZCB8fCBpc1Jvb3RcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImRlbGV0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkICYmICFpc1Jvb3RcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxvbCB2LXNob3c9XCJvcGVuXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9sZGVyIHYtZm9yPVwiZm9sZGVyIGluIGNoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cImZvbGRlci5wYXRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGVsPVwiZm9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOnNlbGVjdGVkLWluLW1lZGlhLWFwcD1cInNlbGVjdGVkSW5NZWRpYUFwcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiPlxyXG4gICAgICAgICAgICAgICAgPC9mb2xkZXI+XHJcbiAgICAgICAgICAgIDwvb2w+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICBgLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0LFxyXG4gICAgICAgIHNlbGVjdGVkSW5NZWRpYUFwcDogT2JqZWN0LFxyXG4gICAgICAgIGxldmVsOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb3BlbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBudWxsLCAvLyBub3QgaW5pdGlhbGl6ZWQgc3RhdGUgKGZvciBsYXp5LWxvYWRpbmcpXHJcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcclxuICAgICAgICAgICAgaXNIb3ZlcmVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcGFkZGluZzogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGVtcHR5OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jaGlsZHJlbiB8fCB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9PSAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNTZWxlY3RlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRJbk1lZGlhQXBwLm5hbWUgPT0gdGhpcy5tb2RlbC5uYW1lKSAmJiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAucGF0aCA9PSB0aGlzLm1vZGVsLnBhdGgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNSb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnBhdGggPT09ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKCh0aGlzLmlzUm9vdCA9PSBmYWxzZSkgJiYgKHRoaXMuaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIoKSkpe1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYWRkaW5nID0gdGhpcy5sZXZlbCA8IDMgPyAgMTYgOiAxNiArICh0aGlzLmxldmVsICogOCk7XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBidXMuJG9uKCdkZWxldGVGb2xkZXInLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLmNoaWxkcmVuICYmIHNlbGYuY2hpbGRyZW4uaW5kZXhPZihmb2xkZXIpXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKVxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyRGVsZXRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ2FkZEZvbGRlcicsIGZ1bmN0aW9uICh0YXJnZXQsIGZvbGRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5tb2RlbCA9PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoaWxkcmVuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5wdXNoKGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyLnBhcmVudCA9IHNlbGYubW9kZWw7XHJcbiAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2ZvbGRlckFkZGVkJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBpc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgd2hpbGUgKHBhcmVudEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEZvbGRlci5wYXRoID09IHRoaXMubW9kZWwucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBwYXJlbnRGb2xkZXIucGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiAmJiAhdGhpcy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyU2VsZWN0ZWQnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZUZvbGRlcjogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnY3JlYXRlRm9sZGVyUmVxdWVzdGVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxvYWRDaGlsZHJlbjogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogJCgnI2dldEZvbGRlcnNVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoc2VsZi5tb2RlbC5wYXRoKSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjLnBhcmVudCA9IHNlbGYubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtdHB5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdPdmVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kbGVEcmFnTGVhdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3ZlTWVkaWFUb0ZvbGRlcjogZnVuY3Rpb24gKGZvbGRlciwgZSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZWxmLmlzSG92ZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1lZGlhTmFtZXMgPSBKU09OLnBhcnNlKGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ21lZGlhTmFtZXMnKSk7IFxyXG5cclxuICAgICAgICAgICAgaWYgKG1lZGlhTmFtZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgc291cmNlRm9sZGVyID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnc291cmNlRm9sZGVyJyk7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXRGb2xkZXIgPSBmb2xkZXIucGF0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VGb2xkZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXIgPSAncm9vdCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRGb2xkZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGb2xkZXIgPSAncm9vdCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VGb2xkZXIgPT09IHRhcmdldEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJCgnI3NhbWVGb2xkZXJNZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25maXJtRGlhbG9nKHsuLi4kKFwiI21vdmVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNtb3ZlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzOiBtZWRpYU5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRm9sZGVyOiBzb3VyY2VGb2xkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGb2xkZXI6IHRhcmdldEZvbGRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhTGlzdE1vdmVkJyk7IC8vIE1lZGlhQXBwIHdpbGwgbGlzdGVuIHRvIHRoaXMsIGFuZCB0aGVuIGl0IHdpbGwgcmVsb2FkIHBhZ2Ugc28gdGhlIG1vdmVkIG1lZGlhcyB3b24ndCBiZSB0aGVyZSBhbnltb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnLCBlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3NwYXRpZS9mb250LWF3ZXNvbWUtZmlsZXR5cGVzXHJcblxyXG5jb25zdCBmYUljb25zID0ge1xyXG4gICAgaW1hZ2U6ICdmYS1yZWd1bGFyIGZhLWltYWdlJyxcclxuICAgIHBkZjogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS1wZGYnLFxyXG4gICAgd29yZDogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS13b3JkJyxcclxuICAgIHBvd2VycG9pbnQ6ICdmYS1yZWd1bGFyIGZhLWZpbGUtcG93ZXJwb2ludCcsXHJcbiAgICBleGNlbDogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS1leGNlbCcsXHJcbiAgICBjc3Y6ICdmYS1yZWd1bGFyIGZhLWZpbGUnLFxyXG4gICAgYXVkaW86ICdmYS1yZWd1bGFyIGZhLWZpbGUtYXVkaW8nLFxyXG4gICAgdmlkZW86ICdmYS1yZWd1bGFyIGZhLWZpbGUtdmlkZW8nLFxyXG4gICAgYXJjaGl2ZTogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS16aXBwZXInLFxyXG4gICAgY29kZTogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS1jb2RlJyxcclxuICAgIHRleHQ6ICdmYS1yZWd1bGFyIGZhLWZpbGUtbGluZXMnLFxyXG4gICAgZmlsZTogJ2ZhLXJlZ3VsYXIgZmEtZmlsZSdcclxufTtcclxuXHJcbmNvbnN0IGZhVGh1bWJuYWlscyA9IHtcclxuICAgIGdpZjogZmFJY29ucy5pbWFnZSxcclxuICAgIGpwZWc6IGZhSWNvbnMuaW1hZ2UsXHJcbiAgICBqcGc6IGZhSWNvbnMuaW1hZ2UsXHJcbiAgICBwbmc6IGZhSWNvbnMuaW1hZ2UsXHJcbiAgICBwZGY6IGZhSWNvbnMucGRmLFxyXG4gICAgZG9jOiBmYUljb25zLndvcmQsXHJcbiAgICBkb2N4OiBmYUljb25zLndvcmQsXHJcbiAgICBwcHQ6IGZhSWNvbnMucG93ZXJwb2ludCxcclxuICAgIHBwdHg6IGZhSWNvbnMucG93ZXJwb2ludCxcclxuICAgIHhsczogZmFJY29ucy5leGNlbCxcclxuICAgIHhsc3g6IGZhSWNvbnMuZXhjZWwsXHJcbiAgICBjc3Y6IGZhSWNvbnMuY3N2LFxyXG4gICAgYWFjOiBmYUljb25zLmF1ZGlvLFxyXG4gICAgbXAzOiBmYUljb25zLmF1ZGlvLFxyXG4gICAgb2dnOiBmYUljb25zLmF1ZGlvLFxyXG4gICAgYXZpOiBmYUljb25zLnZpZGVvLFxyXG4gICAgZmx2OiBmYUljb25zLnZpZGVvLFxyXG4gICAgbWt2OiBmYUljb25zLnZpZGVvLFxyXG4gICAgbXA0OiBmYUljb25zLnZpZGVvLFxyXG4gICAgd2VibTogZmFJY29ucy52aWRlbyxcclxuICAgIGd6OiBmYUljb25zLmFyY2hpdmUsXHJcbiAgICB6aXA6IGZhSWNvbnMuYXJjaGl2ZSxcclxuICAgIGNzczogZmFJY29ucy5jb2RlLFxyXG4gICAgaHRtbDogZmFJY29ucy5jb2RlLFxyXG4gICAganM6IGZhSWNvbnMuY29kZSxcclxuICAgIHR4dDogZmFJY29ucy50ZXh0XHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKSB7XHJcbiAgICByZXR1cm4gZmFUaHVtYm5haWxzW2V4dGVuc2lvbi50b0xvd2VyQ2FzZSgpXSB8fCBmYUljb25zLmZpbGVcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uRm9yRmlsZW5hbWUoZmlsZW5hbWUpIHtcclxuICAgIHJldHVybiBmaWxlbmFtZS5zbGljZSgoZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSAtIDEgPj4+IDApICsgMilcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lRm9yRmlsZW5hbWUoZmlsZW5hbWUpIHtcclxuICAgIHJldHVybiBnZXRDbGFzc05hbWVGb3JFeHRlbnNpb24oZ2V0RXh0ZW5zaW9uRm9yRmlsZW5hbWUoZmlsZW5hbWUpKVxyXG59XHJcbiIsIi8vIDxtZWRpYS1pdGVtcy1ncmlkPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtZ3JpZCcsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG9sIGNsYXNzPVwicm93IG1lZGlhLWl0ZW1zLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWZvcj1cIm1lZGlhIGluIGZpbHRlcmVkTWVkaWFJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLm5hbWVcIiBcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW0gbWVkaWEtY29udGFpbmVyLW1haW4tbGlzdC1pdGVtIGNhcmQgcC0wXCJcclxuICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IHRodW1iU2l6ZSArIDIgKyAncHgnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBpc01lZGlhU2VsZWN0ZWQobWVkaWEpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiB2LW9uOmRyYWdzdGFydD1cImRyYWdTdGFydChtZWRpYSwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKydweCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aCgnaW1hZ2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsncHgnLCBtYXhXaWR0aDogdGh1bWJTaXplICsncHgnfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSA6Y2xhc3M9XCJnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVOYW1lKG1lZGlhLm5hbWUsIFxcJ2ZhLTV4XFwnKVwiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGVkaXQtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwicmVuYW1lTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lZGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cImRlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gdmlldy1idXR0b25cIlwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9vbD5cclxuICAgICAgICBgLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULmVkaXRCdXR0b24gPSAkKCcjdC1lZGl0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kZWxldGVCdXR0b24gPSAkKCcjdC1kZWxldGUtYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFUb2dnbGVSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW5hbWVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVuYW1lTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgbWVkaWEsIGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ2V0Zm9udEF3ZXNvbWVDbGFzc05hbWVGb3JGaWxlTmFtZTpmdW5jdGlvbiBnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVuYW1lKGZpbGVuYW1lLCB0aHVtYnNpemUpe1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q2xhc3NOYW1lRm9yRmlsZW5hbWUoZmlsZW5hbWUpICsgJyAnICsgdGh1bWJzaXplO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxtZWRpYS1pdGVtcy10YWJsZT4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLXRhYmxlJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtZWRpYS1pdGVtcy10YWJsZSBtLTBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPnt7IFQuaW1hZ2VIZWFkZXIgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCduYW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICB7eyBULm5hbWVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibmFtZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbGFzdE1vZGlmeScpXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubGFzdE1vZGlmeUhlYWRlciB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibGFzdE1vZGlmeVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+IFxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdzaXplJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25hbC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQuc2l6ZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJzaXplXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ21pbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBULnR5cGVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibWltZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciB2LWZvcj1cIm1lZGlhIGluIGZpbHRlcmVkTWVkaWFJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzTWVkaWFTZWxlY3RlZChtZWRpYSl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiIHYtb246ZHJhZ3N0YXJ0PVwiZHJhZ1N0YXJ0KG1lZGlhLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRodW1ibmFpbC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKCdpbWFnZScpXCIgZHJhZ2dhYmxlPVwiZmFsc2VcIiA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgOmNsYXNzPVwiZ2V0Zm9udEF3ZXNvbWVDbGFzc05hbWVGb3JGaWxlTmFtZShtZWRpYS5uYW1lLCBcXCdmYS00eFxcJylcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLW5hbWUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZFwiPiB7eyBtZWRpYS5uYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIG1lLTEgZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj4ge3sgVC5lZGl0QnV0dG9uIH19IDwvYSA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj4ge3sgVC5kZWxldGVCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gdmlldy1idXR0b25cIj4ge3sgVC52aWV3QnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbFwiPiB7eyBwcmludERhdGVUaW1lKG1lZGlhLmxhc3RNb2RpZnkpIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+IHt7IGlzTmFOKG1lZGlhLnNpemUpPyAwIDogTWF0aC5yb3VuZChtZWRpYS5zaXplIC8gMTAyNCkgfX0gS0I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPnt7IG1lZGlhLm1pbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvcnRCeTogU3RyaW5nLFxyXG4gICAgICAgIHNvcnRBc2M6IEJvb2xlYW4sXHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuVC5pbWFnZUhlYWRlciA9ICQoJyN0LWltYWdlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5uYW1lSGVhZGVyID0gJCgnI3QtbmFtZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubGFzdE1vZGlmeUhlYWRlciA9ICQoJyN0LWxhc3RNb2RpZnktaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnNpemVIZWFkZXIgPSAkKCcjdC1zaXplLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC50eXBlSGVhZGVyID0gJCgnI3QtdHlwZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudmlld0J1dHRvbiA9ICQoJyN0LXZpZXctYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgbmV3U29ydCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmludERhdGVUaW1lOiBmdW5jdGlvbiAoZGF0ZW1pbGxpcyl7XHJcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZW1pbGxpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVOYW1lOmZ1bmN0aW9uIGdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZW5hbWUoZmlsZW5hbWUsIHRodW1ic2l6ZSl7XHJcbiAgICAgICAgICAgICByZXR1cm4gICBnZXRDbGFzc05hbWVGb3JGaWxlbmFtZShmaWxlbmFtZSkgKyAnICcgKyB0aHVtYnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgYSBsaXN0IG9mIGFsbCB0aGUgaXRlbXMsIHVucGFnZWQuXHJcbi8vIEFzIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlciwgaXQgcmFpc2VzIGV2ZW50cyB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBwYWdlLlxyXG4vLyBJdCdzIHRoZSBwYXJlbnQncyByZXNwb25zaWJpbGl0eSB0byBsaXN0ZW4gZm9yIHRoZXNlIGV2ZW50cyBhbmQgZGlzcGxheSB0aGUgcmVjZWl2ZWQgaXRlbXNcclxuLy8gPHBhZ2VyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgncGFnZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdj5cclxuICAgICAgICA8bmF2IGlkPVwibWVkaWEtcGFnZXJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb24gTmF2aWdhdGlvblwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgOmRhdGEtY29tcHV0ZWQtdHJpZ2dlcj1cIml0ZW1zSW5DdXJyZW50UGFnZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWZpcnN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0ZpcnN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0ZpcnN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvRmlyc3RcIj57eyBULnBhZ2VyRmlyc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvUHJldn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9QcmV2ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cInByZXZpb3VzXCI+e3sgVC5wYWdlclByZXZpb3VzQnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWlmPVwibGluayAhPT0gLTFcIiBjbGFzcz1cInBhZ2UtaXRlbSBwYWdlLW51bWJlclwiICA6Y2xhc3M9XCJ7YWN0aXZlIDogY3VycmVudCA9PSBsaW5rIC0gMX1cIiB2LWZvcj1cImxpbmsgaW4gcGFnZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJnb1RvKGxpbmsgLSAxKVwiIDphcmlhLWxhYmVsPVwiJ0dvdG8gUGFnZScgKyBsaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGlua319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXJyZW50ID09IGxpbmsgLTFcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPihjdXJyZW50KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvTmV4dH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9OZXh0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cIm5leHRcIj57eyBULnBhZ2VyTmV4dEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtbGFzdC1idXR0b25cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9MYXN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0xhc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29MYXN0XCI+e3sgVC5wYWdlckxhc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgcGFnZS1zaXplLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBwYWdlLXNpemUtbGFiZWxcIj57eyBULnBhZ2VyUGFnZVNpemVMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBhZ2VTaXplU2VsZWN0XCIgY2xhc3M9XCJwYWdlLWxpbmtcIiB2LW1vZGVsPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJvcHRpb24gaW4gcGFnZVNpemVPcHRpb25zXCIgdi1iaW5kOnZhbHVlPVwib3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgICA8bmF2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPnt7IFQucGFnZXJQYWdlTGFiZWwgfX0ge3tjdXJyZW50ICsgMX19L3t7dG90YWxQYWdlc319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHRvdGFsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIFwiPiB7eyBULnBhZ2VyVG90YWxMYWJlbCB9fSB7e3RvdGFsfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBBcnJheVxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplT3B0aW9uczogWzEwLCAzMCwgNTAsIDEwMF0sXHJcbiAgICAgICAgICAgIGN1cnJlbnQ6IDAsXHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckZpcnN0QnV0dG9uID0gJCgnI3QtcGFnZXItZmlyc3QtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUHJldmlvdXNCdXR0b24gPSAkKCcjdC1wYWdlci1wcmV2aW91cy1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJOZXh0QnV0dG9uID0gJCgnI3QtcGFnZXItbmV4dC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJMYXN0QnV0dG9uID0gJCgnI3QtcGFnZXItbGFzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlU2l6ZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1zaXplLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUGFnZUxhYmVsID0gJCgnI3QtcGFnZXItcGFnZS1sYWJlbCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclRvdGFsTGFiZWwgPSAkKCcjdC1wYWdlci10b3RhbC1sYWJlbCcpLnZhbCgpOyAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50ICsgMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByZXZpb3VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCAtIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvVG86IGZ1bmN0aW9uICh0YXJnZXRQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRhcmdldFBhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgdG90YWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSXRlbXMgPyB0aGlzLnNvdXJjZUl0ZW1zLmxlbmd0aCA6IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b3RhbFBhZ2VzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBwYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBwYWdlcyA+IDAgPyBwYWdlcyA6IDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc0xhc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgKyAxID49IHRoaXMudG90YWxQYWdlcztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzRmlyc3RQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQgPT09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb05leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb1ByZXY6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRmlyc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9GaXJzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0xhc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzTGFzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB0aGlzIGNvbXB1dGVkIGlzIG9ubHkgdG8gaGF2ZSBhIGNlbnRyYWwgcGxhY2Ugd2hlcmUgd2UgZGV0ZWN0IGNoYW5nZXMgYW5kIGxldmVyYWdlIFZ1ZSBKUyByZWFjdGl2aXR5IHRvIHJhaXNlIG91ciBldmVudC5cclxuICAgICAgICAvLyBUaGF0IGV2ZW50IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgcGFyZW50IG1lZGlhIGFwcCB0byBkaXNwbGF5IHRoZSBpdGVtcyBpbiB0aGUgcGFnZS5cclxuICAgICAgICAvLyB0aGlzIGxvZ2ljIHdpbGwgbm90IHJ1biBpZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgaXMgbm90IHVzZWQgaW4gdGhlIHRlbXBsYXRlLiBXZSB1c2UgYSBkdW1teSBcImRhdGEtY29tcHV0ZWQtdHJpZ2dlclwiIGF0dHJpYnV0ZSBmb3IgdGhhdC5cclxuICAgICAgICBpdGVtc0luQ3VycmVudFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wYWdlU2l6ZSAqIHRoaXMuY3VycmVudDtcclxuICAgICAgICAgICAgdmFyIGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc291cmNlSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncGFnZXJFdmVudCcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlTGlua3M6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBsaW5rcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLmN1cnJlbnQgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGJlZm9yZSBjdXJyZW50XHJcbiAgICAgICAgICAgIHZhciBiZWZvcmVDdXJyZW50ID0gdGhpcy5jdXJyZW50ID4gMCA/IHRoaXMuY3VycmVudCA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJlZm9yZUJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAxID8gdGhpcy5jdXJyZW50IC0gMSA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy51bnNoaWZ0KGJlZm9yZUJlZm9yZUN1cnJlbnQpO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIEFkZCAyIGl0ZW1zIGFmdGVyIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgKyAyIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhZnRlckFmdGVyQ3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIHRoaXMuY3VycmVudCA+IDIgPyB0aGlzLmN1cnJlbnQgKyAzIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2goYWZ0ZXJBZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIHNvdXJjZUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7IC8vIHJlc2V0dGluZyBjdXJyZW50IHBhZ2UgYWZ0ZXIgcmVjZWl2aW5nIGEgbmV3IGxpc3Qgb2YgdW5wYWdlZCBpdGVtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8c29ydC1pbmRpY2F0b3I+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdzb3J0SW5kaWNhdG9yJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IHYtc2hvdz1cImlzQWN0aXZlXCIgY2xhc3M9XCJzb3J0LWluZGljYXRvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tdXBcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhYXNjXCI+PGkgY2xhc3M9XCJzbWFsbCBmYSBmYS1jaGV2cm9uLWRvd25cIj48L2k+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBzZWxlY3RlZGNvbG5hbWU6IFN0cmluZyxcclxuICAgICAgICBhc2M6IEJvb2xlYW5cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIGlzQWN0aXZlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG5hbWUudG9Mb3dlckNhc2UoKSA9PSB0aGlzLnNlbGVjdGVkY29sbmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQoZWwsIGlkT2ZVcGxvYWRCdXR0b24sIHVwbG9hZEFjdGlvbiwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzLCB0ZW1wVXBsb2FkRm9sZGVyLCBtYXhVcGxvYWRDaHVua1NpemUpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRtb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgaXNSZW1vdmVkOiB4LmlzUmVtb3ZlZCwgaXNOZXc6IHguaXNOZXcsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnLCBhbmNob3I6IHguYW5jaG9yLCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTsgLy8gQmVjYXVzZSBhIHVuaXF1ZSBrZXkgaXMgcmVxdWlyZWQgYnkgVnVlIG9uIHYtZm9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hdHRhY2hlZEZpbGVOYW1lID0geC5hdHRhY2hlZEZpbGVOYW1lOy8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMC41LCB5OiAwLjUgfSwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9uUmVtb3ZlZE1lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lZGlhSXRlbXNbaV0uaXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlbW92ZWRNZWRpYUl0ZW1zLnB1c2godGhpcy5tZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcjJyArIGlkT2ZVcGxvYWRCdXR0b247XHJcbiAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cignaWQnKTtcclxuICAgICAgICAgICAgdmFyIGNodW5rZWRGaWxlVXBsb2FkSWQgPSByYW5kb21VVUlEKCk7XHJcblxyXG4gICAgICAgICAgICAkKHNlbGVjdG9yKVxyXG4gICAgICAgICAgICAgICAgLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjJyArIGVkaXRvcklkKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogdXBsb2FkQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIG1heENodW5rU2l6ZTogbWF4VXBsb2FkQ2h1bmtTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS51cGxvYWROYW1lID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFVuaXF1ZUlkKCkgKyBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogdGVtcFVwbG9hZEZvbGRlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19jaHVua2VkRmlsZVVwbG9hZElkJywgdmFsdWU6IGNodW5rZWRGaWxlVXBsb2FkSWQgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcm1zZyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmlzTmV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGVycm9yIGlzIGRlZmluZWQgcHJvYmFibHkgdGhlIGZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gdW5kZWZpbmVkIHx8IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVzdWx0LmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWUgPSBkYXRhLmZpbGVzW2ldLmF0dGFjaGVkRmlsZU5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01lZGlhSXRlbXMucHVzaChkYXRhLnJlc3VsdC5maWxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgKz0gZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgKyBcIlxcblwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jtc2cgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9ybXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld01lZGlhSXRlbXMubGVuZ3RoID4gMSAmJiBhbGxvd011bHRpcGxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKG5ld01lZGlhSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBvbiB1cGxvYWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpxWEhSKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yVGhyb3duKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSByZXBsYWNlIHRoZSBibG9iIHdpdGggYSBGaWxlIG9iamVjdCB0byBlbnN1cmUgdGhlIGZpbGUgbmFtZSBhbmQgb3RoZXJzIGFyZSBwcmVzZXJ2ZWQgZm9yIHRoZSBiYWNrZW5kLlxyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9ucy5ibG9iXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGZpbGUubGFzdE1vZGlmaWVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pcXVlSWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoW2luZGV4XSwgMSwgcmVtb3ZlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEsIHJlbW92ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTcpIHsgLy8gQWRqdXN0IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDg7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTUpIHsgLy8gQWRqdXN0bWVudCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyA1OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyBcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZU1lZGlhRmllbGQoZWwsIG1vZGFsQm9keUVsZW1lbnQsIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycykge1xyXG4gICAgLy9CYWdQYXJ0IGNyZWF0ZSBhIHNjcmlwdCBzZWN0aW9uIHdpdGhvdXQgb3RoZXIgRE9NIGVsZW1lbnRzXHJcbiAgICBpZihlbCA9PT0gbnVsbClcclxuICAgICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIC8vd2hlbiBoaWRlIG1vZGFsIGRldGFjaCBtZWRpYSBhcHAgdG8gYXZvaWQgaXNzdWUgb24gQmFnUGFydFxyXG4gICAgbW9kYWxCb2R5RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCdib2R5Jyk7XHJcbiAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5oaWRlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsLFxyXG4gICAgICAgICAgICBtZWRpYVRleHRNb2RhbDogbnVsbCxcclxuICAgICAgICAgICAgYW5jaG9yaW5nTW9kYWw6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkobWVkaWFQYXRocyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gdmFsdWVzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzaWduYWwgPSAkLkRlZmVycmVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uICh4LCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnICcgKyB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICcnIH0pOyAvLyBkb24ndCByZW1vdmUgdGhlIHNwYWNlLiBTb21ldGhpbmcgZGlmZmVyZW50IGlzIG5lZWRlZCBvciBpdCB3b250IHJlYWN0IHdoZW4gdGhlIHJlYWwgbmFtZSBhcnJpdmVzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gJC53aGVuKHNpZ25hbCkuZG9uZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbWVkaWFJdGVtVXJsICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh4LnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS52dWVrZXkgPSBkYXRhLm5hbWUgKyBpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIHsgbmFtZTogeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnbm90LWZvdW5kJywgbWVkaWFUZXh0OiAnJywgYW5jaG9yOiB7IHg6IDAsIHk6IDAgfSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA+IDAgJiYgYWxsb3dNdWx0aXBsZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEyMCA6IDI0MDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1ic1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYucGF0aHMgPSBpbml0aWFsUGF0aHM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ2ZpbGVzVXBsb2FkZWQnLCBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuYWRkTWVkaWFGaWxlcyhmaWxlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbkFkZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5hcHBlbmRUbygkKG1vZGFsQm9keUVsZW1lbnQpLmZpbmQoJy5tb2RhbC1ib2R5JykpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKG1vZGFsQm9keUVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnNob3coKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubWVkaWFGaWVsZFNlbGVjdEJ1dHRvbicpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMobWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGUgaW5jbHVkZWQgbWVkaWFzIHRvIGJlIHN0aWxsIHNlbGVjdGVkIHRoZSBuZXh0IHRpbWUgd2Ugb3BlbiB0aGUgbW9kYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sICBcclxuICAgICAgICAgICAgb25BbmNob3JEcm9wOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvckxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuJHJlZnMubW9kYWxCb2R5ICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gaW1hZ2UgaXMgc2hydW5rIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kYWwgYm9keS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJHJlZnMubW9kYWxCb2R5LmNsaWVudFdpZHRoIC0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICh0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnggKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9ySWNvbiA9IE1hdGgucm91bmQodGhpcy4kcmVmcy5tb2RhbEJvZHkucXVlcnlTZWxlY3RvcignLmljb24tbWVkaWEtYW5jaG9yJykuY2xpZW50V2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKE51bWJlci5pc0ludGVnZXIoYW5jaG9ySWNvbikpXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gYW5jaG9ySWNvbi8yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBhbmNob3JUb3A6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueSAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgIFxyXG4gICAgICAgICAgICBhZGRNZWRpYUZpbGVzOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZmlsZXMubGVuZ3RoID4gMSkgJiYgKGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVkaWFJdGVtcyAmJiB0aGlzLm1lZGlhSXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQgYmVjYXVzZSBzb21ldGltZXMgcmVtb3ZlU2VsZWN0ZWQgd2FzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGUgbWVkaWEgd2FzIHNldC5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApOyBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsIi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHdpbGwgYWRkIHRoZW1zZWx2ZXMgdG8gdGhpcyBhcnJheVxyXG52YXIgbWVkaWFGaWVsZEFwcHMgPSBbXTtcclxuIiwiLy8gPG1lZGlhLWZpZWxkLXRodW1icy1jb250YWluZXI+IGNvbXBvbmVudCBcclxuLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgc2hhcmUgdGhpcyBjb21wb25lbnQgdG8gcHJlc2VudCB0aGUgdGh1bWJzLlxyXG5WdWUuY29tcG9uZW50KCdtZWRpYUZpZWxkVGh1bWJzQ29udGFpbmVyJywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgPGRpdiA6aWQ9XCJpZFByZWZpeCArIFxcJ19tZWRpYUNvbnRhaW5lck1haW5cXCdcIiB2LWNsb2FrPlxcXHJcbiAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhSXRlbXMubGVuZ3RoIDwgMVwiIGNsYXNzPVwiY2FyZCB0ZXh0LWNlbnRlclwiPlxcXHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSBcImNhcmQtYm9keVwiID5cXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoaW50XCI+e3tULm5vSW1hZ2VzfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgIDxkcmFnZ2FibGUgOmxpc3Q9XCJtZWRpYUl0ZW1zXCIgdGFnPVwib2xcIiBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCIgPlxcXHJcbiAgICAgICAgICAgIDxsaSB2LWZvcj1cIm1lZGlhIGluIG1lZGlhSXRlbXNcIlxcXHJcbiAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEudnVla2V5XCIgXFxcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4tbGlzdC1pdGVtIGNhcmQgcC0wXCJcXFxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgXFwncHhcXCd9XCJcXFxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBzZWxlY3RlZE1lZGlhID09IG1lZGlhfVwiXFxcclxuICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJzZWxlY3RNZWRpYShtZWRpYSlcIiB2LWlmPVwiIW1lZGlhLmlzUmVtb3ZlZFwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWEubWVkaWFQYXRoIT09IFxcJ25vdC1mb3VuZFxcJ1wiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIiA+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aChcXCdpbWFnZVxcJylcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCcgLCBtYXhXaWR0aDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIvPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgOmNsYXNzPVwiZ2V0Zm9udEF3ZXNvbWVDbGFzc05hbWVGb3JGaWxlTmFtZShtZWRpYS5uYW1lLCBcXCdmYS00eFxcJylcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwic2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gdmlldy1idXR0b25cIlwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubWVkaWFQYXRoXCI+e3sgbWVkaWEuaXNOZXcgPyBtZWRpYS5uYW1lLnN1YnN0cigzNikgOiBtZWRpYS5uYW1lIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWVsc2U+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1iLWNvbnRhaW5lciBmbGV4LWNvbHVtblwiIDpzdHlsZT1cIntoZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhbiB0ZXh0LWRhbmdlciBkLWJsb2NrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIGQtYmxvY2tcIj57eyBULm1lZGlhTm90Rm91bmQgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGwgZC1ibG9jayB0ZXh0LWNlbnRlclwiPnt7IFQuZGlzY2FyZFdhcm5pbmcgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LWVuZCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwic2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsIHRleHQtZGFuZ2VyXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgIDwvbGk+XFxcclxuICAgICAgICAgPC9kcmFnZ2FibGU+XFxcclxuICAgICAgIDwvZGl2PlxcXHJcbiAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWE6IE9iamVjdCxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlcixcclxuICAgICAgICBpZFByZWZpeDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULm1lZGlhTm90Rm91bmQgPSAkKCcjdC1tZWRpYS1ub3QtZm91bmQnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGlzY2FyZFdhcm5pbmcgPSAkKCcjdC1kaXNjYXJkLXdhcm5pbmcnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubm9JbWFnZXMgPSAkKCcjdC1uby1pbWFnZXMnKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVOYW1lOmZ1bmN0aW9uIGdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZW5hbWUoZmlsZW5hbWUsIHRodW1ic2l6ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRDbGFzc05hbWVGb3JGaWxlbmFtZShmaWxlbmFtZSkgKyAnICcgKyB0aHVtYnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIl19 diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js index 3b901189416..310f5e1a6b0 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js @@ -1 +1 @@ -function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),r=a.promise();return i=i||this.options.context||r,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),r.abort=a.promise,this._enhancePromise(r)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,r){return(t||r)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,r)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,r=this,o=t.files[0],s=o.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),p=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(o.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",o.error])):(a=function(){var i=e.extend({},t),p=i._progress.loaded;i.blob=c.call(o,l,l+("function"===e.type(d)?d(i):d),o.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,r._trigger("chunkbeforesend",null,i),r._initXHRData(i),r._initProgressListener(i),n=(!1!==r._trigger("chunksend",null,i)&&e.ajax(i)||r._getXHRPromise(!1,i.context)).done((function(n,o,d){l=r._getUploadedBytes(d)||l+i.chunkSize,p+i.chunkSize-i._progress.loaded&&r._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=o,i.jqXHR=d,r._trigger("chunkdone",null,i),r._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(r=e.Deferred(),this._slots.push(r),o=r[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),o=this._sequence),o.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(r&&r.rejectWith(l.context,a),d())},this._enhancePromise(o)):d()},_onAdd:function(t,i){var n,a,r,o,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,p=d.limitMultiFileUploads,m=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(m&&void 0===c[0].size&&(m=void 0),(d.singleFileUploads||p||m)&&this._isXHRUpload(d))if(d.singleFileUploads||m||!p)if(!d.singleFileUploads&&m)for(r=[],n=[],o=0;om||p&&o+1-v>=p)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,h=0);else n=g;else for(r=[],n=[],o=0;o").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,r=e.Deferred(),o=[],s=function(e){e&&!e.entry&&(e.entry=t),r.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,r.resolve(t._file)):t.file((function(e){e.relativePath=i,r.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(o=o.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){r.resolve(e)})).fail(s)}(o)}),s)}()):r.resolve([]),r.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var r,o=a.name.toLowerCase();/^data-/.test(o)&&(o=o.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),r=n[o],t._isRegExpOption(o,r)&&(r=t._getRegExp(r)),i[o]=r)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,r=e.Deferred(),o=r.promise();return o.abort=function(){return n=!0,i?i.abort():(r.reject(null,"abort","abort"),o)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){r.resolve(e,t,i)}),(function(e,t,i){r.reject(e,t,i)}))):r.reject())})),this._enhancePromise(o)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,r,o=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
')).attr("accept-charset",i.formAcceptCharset),r=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+r+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+r+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+r+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,r=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",r[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",o),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}));var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n){var a=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];a.mediaPath=i,a.name=t})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,r=n+i;if(a.toLowerCase()!==r.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(r)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,r)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=u.attr("id"),o=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,r){if(null!==e){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(o=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),r=[],o=0;n.forEach((function(e,n){r.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,r.splice(n,1,i),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),r.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),r.length===++o&&(r.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),o.mediaItems.push(e[0]),o.initialized=!0):(o.mediaItems=o.mediaItems.concat(e),o.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}$(document).on("mediaApp:ready",(function(){var e=randomUUID();$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),maxChunkSize:Number($("#maxUploadChunkSize").val()||0),formData:function(){var t=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:t},{name:"__chunkedFileUploadId",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))})),$(document).bind("dragover",(function(e){var t=e.originalEvent.dataTransfer;if(t.types&&(t.types.indexOf?-1!=t.types.indexOf("Files"):t.types.contains("Files"))){var i=$("#customdropzone"),n=window.dropZoneTimeout;n?clearTimeout(n):i.addClass("in");$(e.target).closest(i);window.dropZoneTimeout=setTimeout((function(){window.dropZoneTimeout=null,i.removeClass("in")}),100)}})),Vue.component("folder",{template:'\n
  • \n \n
      \n \n \n
    \n
  • \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}}),Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t}}}),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}}); +function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),o=a.promise();return i=i||this.options.context||o,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),o.abort=a.promise,this._enhancePromise(o)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,o){return(t||o)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,o)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,o=this,r=t.files[0],s=r.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),m=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(r.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",r.error])):(a=function(){var i=e.extend({},t),m=i._progress.loaded;i.blob=c.call(r,l,l+("function"===e.type(d)?d(i):d),r.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,o._trigger("chunkbeforesend",null,i),o._initXHRData(i),o._initProgressListener(i),n=(!1!==o._trigger("chunksend",null,i)&&e.ajax(i)||o._getXHRPromise(!1,i.context)).done((function(n,r,d){l=o._getUploadedBytes(d)||l+i.chunkSize,m+i.chunkSize-i._progress.loaded&&o._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=r,i.jqXHR=d,o._trigger("chunkdone",null,i),o._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(o=e.Deferred(),this._slots.push(o),r=o[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),r=this._sequence),r.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(o&&o.rejectWith(l.context,a),d())},this._enhancePromise(r)):d()},_onAdd:function(t,i){var n,a,o,r,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,m=d.limitMultiFileUploads,p=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(p&&void 0===c[0].size&&(p=void 0),(d.singleFileUploads||m||p)&&this._isXHRUpload(d))if(d.singleFileUploads||p||!m)if(!d.singleFileUploads&&p)for(o=[],n=[],r=0;rp||m&&r+1-v>=m)&&(o.push(c.slice(v,r+1)),(a=g.slice(v,r+1)).length||(a=g),n.push(a),v=r+1,h=0);else n=g;else for(o=[],n=[],r=0;r").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,o=e.Deferred(),r=[],s=function(e){e&&!e.entry&&(e.entry=t),o.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,o.resolve(t._file)):t.file((function(e){e.relativePath=i,o.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(r=r.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){o.resolve(e)})).fail(s)}(r)}),s)}()):o.resolve([]),o.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var o,r=a.name.toLowerCase();/^data-/.test(r)&&(r=r.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),o=n[r],t._isRegExpOption(r,o)&&(o=t._getRegExp(o)),i[r]=o)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,o=e.Deferred(),r=o.promise();return r.abort=function(){return n=!0,i?i.abort():(o.reject(null,"abort","abort"),r)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){o.resolve(e,t,i)}),(function(e,t,i){o.reject(e,t,i)}))):o.reject())})),this._enhancePromise(r)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,o,r=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
    ')).attr("accept-charset",i.formAcceptCharset),o=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+o+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+o+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+o+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,o=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",o[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",r),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})})),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}});var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n){var a=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];a.mediaPath=i,a.name=t})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,o=n+i;if(a.toLowerCase()!==o.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(o)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,o)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t\n \n
      \n \n \n
    \n \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}});var faIcons={image:"fa-regular fa-image",pdf:"fa-regular fa-file-pdf",word:"fa-regular fa-file-word",powerpoint:"fa-regular fa-file-powerpoint",excel:"fa-regular fa-file-excel",csv:"fa-regular fa-file",audio:"fa-regular fa-file-audio",video:"fa-regular fa-file-video",archive:"fa-regular fa-file-zipper",code:"fa-regular fa-file-code",text:"fa-regular fa-file-lines",file:"fa-regular fa-file"},faThumbnails={gif:faIcons.image,jpeg:faIcons.image,jpg:faIcons.image,png:faIcons.image,pdf:faIcons.pdf,doc:faIcons.word,docx:faIcons.word,ppt:faIcons.powerpoint,pptx:faIcons.powerpoint,xls:faIcons.excel,xlsx:faIcons.excel,csv:faIcons.csv,aac:faIcons.audio,mp3:faIcons.audio,ogg:faIcons.audio,avi:faIcons.video,flv:faIcons.video,mkv:faIcons.video,mp4:faIcons.video,webm:faIcons.video,gz:faIcons.archive,zip:faIcons.archive,css:faIcons.code,html:faIcons.code,js:faIcons.code,txt:faIcons.text};function getClassNameForExtension(e){return faThumbnails[e.toLowerCase()]||faIcons.file}function getExtensionForFilename(e){return e.slice(2+(e.lastIndexOf(".")-1>>>0))}function getClassNameForFilename(e){return getClassNameForExtension(getExtensionForFilename(e))}function initializeAttachedMediaField(e,t,i,n,a,o,r,s,l){var d,c=$(document.getElementById($(e).data("for"))).data("init"),u=$(e),m=u.attr("id");mediaFieldApps.push(d=new Vue({el:u.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:m,initialized:!1,allowMediaText:o,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextmodal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,isRemoved:t.isRemoved,isNew:t.isNew,mediaText:t.mediaText,anchor:t.anchor,attachedFileName:t.attachedFileName})})),JSON.stringify(e)):JSON.stringify(c)},set:function(e){var t=this,i=e||[],a=$.Deferred(),o=[],r=0;i.forEach((function(e,i){o.push({name:" "+e.path,mime:"",mediaPath:"",anchor:e.anchor,attachedFileName:e.attachedFileName}),promise=$.when(a).done((function(){$.ajax({url:n+"?path="+encodeURIComponent(e.path),method:"GET",success:function(n){n.vuekey=n.name+i.toString(),n.mediaText=e.mediaText,n.anchor=e.anchor,n.attachedFileName=e.attachedFileName,o.splice(i,1,n),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(n){console.log(JSON.stringify(n)),o.splice(i,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:.5,y:.5},attachedFileName:e.attachedFileName}),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){for(var e=[],t=0;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,o=u.attr("id"),r=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+o),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var o=0;o1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,o){if(null!==e){var r,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(r=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:o,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),o=[],r=0;n.forEach((function(e,n){o.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,o.splice(n,1,i),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),o.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),r.mediaItems.push(e[0]),r.initialized=!0):(r.mediaItems=r.mediaItems.concat(e),r.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}});