diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js index 92821ea023e..41c14941205 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.js @@ -1725,6 +1725,165 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi } }); }); +// component +Vue.component('upload', { + template: '\ +
\ + \ +

{{ model.name }}

\ +
\ + \ + Error: {{ model.errorMessage }} \ +
\ +
\ + ', + props: { + model: Object + }, + mounted: function mounted() { + var self = this; + $('#fileupload').bind('fileuploadprogress', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + + self.model.percentage = parseInt(data.loaded / data.total * 100, 10); + }); + $('#fileupload').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); + } + }); + $('#fileupload').bind('fileuploadfail', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + + self.handleFailure(data.files[0].name, data.textStatus); + }); + }, + 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 + }; + }, + 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 = this; + $('#fileupload').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 ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } @@ -3388,163 +3547,4 @@ Vue.component('mediaFieldThumbsContainer', { } } }); -// component -Vue.component('upload', { - template: '\ -
\ - \ -

{{ model.name }}

\ -
\ - \ - Error: {{ model.errorMessage }} \ -
\ -
\ - ', - props: { - model: Object - }, - mounted: function mounted() { - var self = this; - $('#fileupload').bind('fileuploadprogress', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - - self.model.percentage = parseInt(data.loaded / data.total * 100, 10); - }); - $('#fileupload').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); - } - }); - $('#fileupload').bind('fileuploadfail', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; - } - - self.handleFailure(data.files[0].name, data.textStatus); - }); - }, - 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 - }; - }, - 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 = this; - $('#fileupload').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(); - } - } -}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJNZWRpYUFwcC9hcHAuanMiLCJNZWRpYUFwcC9maWxldXBsb2FkLmpzIiwiTWVkaWFBcHAvZm9sZGVyQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc0dyaWRDb21wb25lbnQuanMiLCJNZWRpYUFwcC9tZWRpYUl0ZW1zVGFibGVDb21wb25lbnQuanMiLCJNZWRpYUFwcC9wYWdlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL3NvcnRJbmRpY2F0b3JDb21wb25lbnQuanMiLCJNZWRpYUZpZWxkL2F0dGFjaGVkTWVkaWFGaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZHNBcHBzQXJyYXkuanMiLCJNZWRpYUZpZWxkL21lZGlhRmllbGRUaHVtYnNDb250YWluZXIuanMiLCJTaGFyZWQvdXBsb2FkQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZExpc3RDb21wb25lbnQuanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJyZXF1aXJlIiwid2luZG93IiwialF1ZXJ5IiwiJCIsInN1cHBvcnQiLCJmaWxlSW5wdXQiLCJSZWdFeHAiLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwicHJvcCIsInhockZpbGVVcGxvYWQiLCJQcm9ncmVzc0V2ZW50IiwiRmlsZVJlYWRlciIsInhockZvcm1EYXRhRmlsZVVwbG9hZCIsIkZvcm1EYXRhIiwiYmxvYlNsaWNlIiwiQmxvYiIsInByb3RvdHlwZSIsInNsaWNlIiwid2Via2l0U2xpY2UiLCJtb3pTbGljZSIsImdldERyYWdIYW5kbGVyIiwidHlwZSIsImlzRHJhZ092ZXIiLCJlIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxFdmVudCIsImluQXJyYXkiLCJ0eXBlcyIsIl90cmlnZ2VyIiwiRXZlbnQiLCJkZWxlZ2F0ZWRFdmVudCIsInByZXZlbnREZWZhdWx0IiwiZHJvcEVmZmVjdCIsIndpZGdldCIsIm9wdGlvbnMiLCJkcm9wWm9uZSIsImRvY3VtZW50IiwicGFzdGVab25lIiwidW5kZWZpbmVkIiwicmVwbGFjZUZpbGVJbnB1dCIsInBhcmFtTmFtZSIsInNpbmdsZUZpbGVVcGxvYWRzIiwibGltaXRNdWx0aUZpbGVVcGxvYWRzIiwibGltaXRNdWx0aUZpbGVVcGxvYWRTaXplIiwibGltaXRNdWx0aUZpbGVVcGxvYWRTaXplT3ZlcmhlYWQiLCJzZXF1ZW50aWFsVXBsb2FkcyIsImxpbWl0Q29uY3VycmVudFVwbG9hZHMiLCJmb3JjZUlmcmFtZVRyYW5zcG9ydCIsInJlZGlyZWN0IiwicmVkaXJlY3RQYXJhbU5hbWUiLCJwb3N0TWVzc2FnZSIsIm11bHRpcGFydCIsIm1heENodW5rU2l6ZSIsInVwbG9hZGVkQnl0ZXMiLCJyZWNhbGN1bGF0ZVByb2dyZXNzIiwicHJvZ3Jlc3NJbnRlcnZhbCIsImJpdHJhdGVJbnRlcnZhbCIsImF1dG9VcGxvYWQiLCJ1bmlxdWVGaWxlbmFtZXMiLCJtZXNzYWdlcyIsImkxOG4iLCJtZXNzYWdlIiwiY29udGV4dCIsInRvU3RyaW5nIiwiZWFjaCIsImtleSIsInZhbHVlIiwicmVwbGFjZSIsImZvcm1EYXRhIiwiZm9ybSIsInNlcmlhbGl6ZUFycmF5IiwiYWRkIiwiZGF0YSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImZpbGV1cGxvYWQiLCJwcm9jZXNzIiwiZG9uZSIsInN1Ym1pdCIsInByb2Nlc3NEYXRhIiwiY29udGVudFR5cGUiLCJjYWNoZSIsInRpbWVvdXQiLCJfcHJvbWlzZVBpcGUiLCJwYXJ0cyIsImZuIiwianF1ZXJ5Iiwic3BsaXQiLCJOdW1iZXIiLCJfc3BlY2lhbE9wdGlvbnMiLCJfYmxvYlNsaWNlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfQml0cmF0ZVRpbWVyIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImdldFRpbWUiLCJsb2FkZWQiLCJiaXRyYXRlIiwiZ2V0Qml0cmF0ZSIsImludGVydmFsIiwidGltZURpZmYiLCJfaXNYSFJVcGxvYWQiLCJfZ2V0Rm9ybURhdGEiLCJpc0FycmF5IiwibmFtZSIsInB1c2giLCJfZ2V0VG90YWwiLCJmaWxlcyIsInRvdGFsIiwiaW5kZXgiLCJmaWxlIiwic2l6ZSIsIl9pbml0UHJvZ3Jlc3NPYmplY3QiLCJvYmoiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyIsImV4dGVuZCIsIl9pbml0UmVzcG9uc2VPYmplY3QiLCJfcmVzcG9uc2UiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfb25Qcm9ncmVzcyIsImxlbmd0aENvbXB1dGFibGUiLCJfdGltZSIsIk1hdGgiLCJmbG9vciIsImNodW5rU2l6ZSIsIl9iaXRyYXRlVGltZXIiLCJfaW5pdFByb2dyZXNzTGlzdGVuZXIiLCJ0aGF0IiwieGhyIiwiYWpheFNldHRpbmdzIiwidXBsb2FkIiwib24iLCJvZSIsIl9kZWluaXRQcm9ncmVzc0xpc3RlbmVyIiwib2ZmIiwiX2lzSW5zdGFuY2VPZiIsIl9nZXRVbmlxdWVGaWxlbmFtZSIsIm1hcCIsIlN0cmluZyIsIl8iLCJwMSIsInAyIiwiZXh0IiwiX2luaXRYSFJEYXRhIiwiaGVhZGVycyIsImNvbnRlbnRSYW5nZSIsImJsb2IiLCJlbmNvZGVVUkkiLCJ1cGxvYWROYW1lIiwiZmllbGQiLCJhcHBlbmQiLCJmaWxlTmFtZSIsIl9pbml0SWZyYW1lU2V0dGluZ3MiLCJ0YXJnZXRIb3N0IiwidXJsIiwiZGF0YVR5cGUiLCJsb2NhdGlvbiIsImhvc3QiLCJfaW5pdERhdGFTZXR0aW5ncyIsIl9jaHVua2VkVXBsb2FkIiwiX2dldFBhcmFtTmFtZSIsImlucHV0IiwiaSIsImxlbmd0aCIsIl9pbml0Rm9ybVNldHRpbmdzIiwiaHJlZiIsInRvVXBwZXJDYXNlIiwiZm9ybUFjY2VwdENoYXJzZXQiLCJhdHRyIiwiX2dldEFKQVhTZXR0aW5ncyIsIl9nZXREZWZlcnJlZFN0YXRlIiwiZGVmZXJyZWQiLCJzdGF0ZSIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiX2VuaGFuY2VQcm9taXNlIiwicHJvbWlzZSIsInN1Y2Nlc3MiLCJlcnJvciIsImZhaWwiLCJjb21wbGV0ZSIsImFsd2F5cyIsIl9nZXRYSFJQcm9taXNlIiwicmVzb2x2ZU9yUmVqZWN0IiwiYXJncyIsImRmZCIsIkRlZmVycmVkIiwicmVzb2x2ZVdpdGgiLCJyZWplY3RXaXRoIiwiYWJvcnQiLCJfYWRkQ29udmVuaWVuY2VNZXRob2RzIiwiZ2V0UHJvbWlzZSIsInJlc29sdmVGdW5jIiwicmVqZWN0RnVuYyIsIl9wcm9jZXNzUXVldWUiLCJlcnJvclRocm93biIsImpxWEhSIiwiX29uU2VuZCIsInByb2Nlc3NpbmciLCJyZXNwb25zZSIsIl9nZXRVcGxvYWRlZEJ5dGVzIiwicmFuZ2UiLCJnZXRSZXNwb25zZUhlYWRlciIsInVwcGVyQnl0ZXNQb3MiLCJwYXJzZUludCIsInRlc3RPbmx5IiwiZnMiLCJ1YiIsIm1jcyIsIm8iLCJjdXJyZW50TG9hZGVkIiwiYWpheCIsInJlc3VsdCIsInRleHRTdGF0dXMiLCJfYmVmb3JlU2VuZCIsIl9hY3RpdmUiLCJfb25Eb25lIiwiX29uRmFpbCIsIl9vbkFsd2F5cyIsImpxWEhSb3JSZXN1bHQiLCJqcVhIUm9yRXJyb3IiLCJhYm9ydGVkIiwic2xvdCIsInBpcGUiLCJzZW5kIiwiX3NlbmRpbmciLCJuZXh0U2xvdCIsIl9zbG90cyIsInNoaWZ0IiwicmVzb2x2ZSIsIl9zZXF1ZW5jZSIsIl9vbkFkZCIsImZpbGVzTGVuZ3RoIiwibGltaXQiLCJsaW1pdFNpemUiLCJvdmVyaGVhZCIsImJhdGNoU2l6ZSIsInBhcmFtTmFtZVNldCIsInBhcmFtTmFtZVNsaWNlIiwiZmlsZVNldCIsImoiLCJvcmlnaW5hbEZpbGVzIiwiZWxlbWVudCIsIm5ld0RhdGEiLCJfcmVwbGFjZUZpbGVJbnB1dCIsImlucHV0Q2xvbmUiLCJjbG9uZSIsInJlc3RvcmVGb2N1cyIsImlzIiwiYWN0aXZlRWxlbWVudCIsImZpbGVJbnB1dENsb25lIiwicmVzZXQiLCJhZnRlciIsImRldGFjaCIsInRyaWdnZXIiLCJjbGVhbkRhdGEiLCJlbCIsIl9oYW5kbGVGaWxlVHJlZUVudHJ5IiwiZW50cnkiLCJwYXRoIiwiZW50cmllcyIsImRpclJlYWRlciIsImVycm9ySGFuZGxlciIsInN1Y2Nlc3NIYW5kbGVyIiwiX2hhbmRsZUZpbGVUcmVlRW50cmllcyIsInJlYWRFbnRyaWVzIiwicmVzdWx0cyIsImNvbmNhdCIsImlzRmlsZSIsIl9maWxlIiwicmVsYXRpdmVQYXRoIiwiaXNEaXJlY3RvcnkiLCJjcmVhdGVSZWFkZXIiLCJ3aGVuIiwiQXJyYXkiLCJfZ2V0RHJvcHBlZEZpbGVzIiwiaXRlbXMiLCJ3ZWJraXRHZXRBc0VudHJ5IiwiZ2V0QXNFbnRyeSIsIml0ZW0iLCJnZXRBc0ZpbGUiLCJtYWtlQXJyYXkiLCJfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXMiLCJmaWxlU2l6ZSIsIl9nZXRGaWxlSW5wdXRGaWxlcyIsIl9vbkNoYW5nZSIsInRhcmdldCIsIl9vblBhc3RlIiwiY2xpcGJvYXJkRGF0YSIsIl9vbkRyb3AiLCJfb25EcmFnT3ZlciIsIl9vbkRyYWdFbnRlciIsIl9vbkRyYWdMZWF2ZSIsIl9pbml0RXZlbnRIYW5kbGVycyIsIl9vbiIsImRyYWdvdmVyIiwiZHJvcCIsImRyYWdlbnRlciIsImRyYWdsZWF2ZSIsInBhc3RlIiwiY2hhbmdlIiwiX2Rlc3Ryb3lFdmVudEhhbmRsZXJzIiwiX29mZiIsIl9kZXN0cm95IiwiX3NldE9wdGlvbiIsInJlaW5pdCIsIl9zdXBlciIsIl9pbml0U3BlY2lhbE9wdGlvbnMiLCJmaW5kIiwiX2dldFJlZ0V4cCIsInN0ciIsIm1vZGlmaWVycyIsInBvcCIsImpvaW4iLCJfaXNSZWdFeHBPcHRpb24iLCJfaW5pdERhdGFBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsInRvTG93ZXJDYXNlIiwiY2hhckF0IiwiX2NyZWF0ZSIsImFjdGl2ZSIsImRpc2FibGVkIiwicmVqZWN0IiwidGhlbiIsImNvdW50ZXIiLCJqc29uQVBJIiwianNvblBhcnNlIiwiSlNPTiIsImFqYXhUcmFuc3BvcnQiLCJhc3luYyIsImluaXRpYWxJZnJhbWVTcmMiLCJpZnJhbWUiLCJhZGRQYXJhbUNoYXIiLCJjb21wbGV0ZUNhbGxiYWNrIiwiZmlsZUlucHV0Q2xvbmVzIiwicGFyYW1OYW1lcyIsImNvbnRlbnRzIiwiZmlyc3RDaGlsZCIsIkVycm9yIiwiYXBwZW5kVG8iLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwidmFsIiwicmVtb3ZlQXR0ciIsInJlcGxhY2VXaXRoIiwiYm9keSIsImFqYXhTZXR1cCIsImNvbnZlcnRlcnMiLCJ0ZXh0IiwiaHRtbCIsInhtbERvYyIsImlzWE1MRG9jIiwicGFyc2VYTUwiLCJYTUxEb2N1bWVudCIsInhtbCIsImdsb2JhbEV2YWwiLCJpbml0aWFsaXplZCIsIm1lZGlhQXBwIiwiYnVzIiwiVnVlIiwiaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24iLCJkaXNwbGF5TWVkaWFBcHBsaWNhdGlvbiIsIm1lZGlhQXBwbGljYXRpb25VcmwiLCJwYXRoQmFzZSIsImNvbnNvbGUiLCJtZXRob2QiLCJjb250ZW50Iiwicm9vdCIsImZvbGRlciIsInNlbGVjdGVkRm9sZGVyIiwibWVkaWFJdGVtcyIsInNlbGVjdGVkTWVkaWFzIiwiZXJyb3JzIiwiZHJhZ0Ryb3BUaHVtYm5haWwiLCJJbWFnZSIsInNtYWxsVGh1bWJzIiwiZ3JpZFZpZXciLCJtZWRpYUZpbHRlciIsInNvcnRCeSIsInNvcnRBc2MiLCJpdGVtc0luUGFnZSIsImNyZWF0ZWQiLCJzZWxmIiwic3JjIiwiJG9uIiwic2VsZWN0Um9vdCIsInNlbGVjdGVkIiwibG9hZEZvbGRlciIsImVycm9ySW5mbyIsIm5ld05hbWUiLCJuZXdQYXRoIiwib2xkUGF0aCIsIm1lZGlhIiwiZmlsdGVyIiwibWVkaWFQYXRoIiwiY3JlYXRlRm9sZGVyIiwiZGVsZXRlRm9sZGVyIiwibmV3U29ydCIsImNoYW5nZVNvcnQiLCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhIiwicmVuYW1lTWVkaWEiLCJkZWxldGVNZWRpYUl0ZW0iLCJoYW5kbGVEcmFnU3RhcnQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiY3VycmVudFByZWZzIiwicGFyc2UiLCJjb21wdXRlZCIsImlzSG9tZSIsInBhcmVudHMiLCJwIiwicGFyZW50Rm9sZGVyIiwidW5zaGlmdCIsInBhcmVudCIsImZpbHRlcmVkTWVkaWFJdGVtcyIsImZpbHRlcmVkIiwiaW5kZXhPZiIsInNvcnQiLCJhIiwiYiIsIm1pbWUiLCJsb2NhbGVDb21wYXJlIiwibGFzdE1vZGlmeSIsImhpZGRlbkNvdW50IiwidGh1bWJTaXplIiwiZ2V0Iiwic2V0IiwibmV3UHJlZnMiLCJ3YXRjaCIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJuZXdGb2xkZXIiLCJtb3VudGVkIiwiJHJlZnMiLCJyb290Rm9sZGVyIiwidG9nZ2xlIiwibWV0aG9kcyIsInVwbG9hZFVybCIsImVuY29kZVVSSUNvbXBvbmVudCIsImZvckVhY2giLCJvcGVuIiwibG9nIiwic2VsZWN0QWxsIiwidW5TZWxlY3RBbGwiLCJpbnZlcnRTZWxlY3Rpb24iLCJ0ZW1wIiwiaXNNZWRpYVNlbGVjdGVkIiwic3BsaWNlIiwic29tZSIsImFycmF5IiwibW9kZWwiLCJjb25maXJtRGlhbG9nIiwiY2FsbGJhY2siLCJyZXNwIiwiX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4iLCIkZW1pdCIsInJlc3BvbnNlVGV4dCIsImVtcHR5IiwibW9kYWwiLCJmb2N1cyIsInNlbGVjdEFuZERlbGV0ZU1lZGlhIiwiZGVsZXRlTWVkaWEiLCJkZWxldGVNZWRpYUxpc3QiLCJtZWRpYUxpc3QiLCJwYXRocyIsIm1lZGlhTmFtZXMiLCJzZXREYXRhIiwic2V0RHJhZ0ltYWdlIiwiZWZmZWN0QWxsb3dlZCIsImhhbmRsZVNjcm9sbFdoaWxlRHJhZyIsImNsaWVudFkiLCJzY3JvbGxCeSIsImlubmVySGVpZ2h0Iiwia2V5cHJlc3MiLCJ3aGljaCIsImNsaWNrIiwiZXJyb3JNZXNzYWdlIiwib2xkTmFtZSIsImN1cnJlbnRGb2xkZXIiLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwiZGlzcGxheSIsImFudGlGb3JnZXJ5VG9rZW4iLCJiaW5kIiwiZHQiLCJjb250YWlucyIsImRyb3Bab25lVGltZW91dCIsImNsZWFyVGltZW91dCIsImFkZENsYXNzIiwiaG92ZXJlZERyb3Bab25lIiwiY2xvc2VzdCIsInJlbW92ZUNsYXNzIiwiY29tcG9uZW50IiwidGVtcGxhdGUiLCJkaXIiLCJwcm9wcyIsInNlbGVjdGVkSW5NZWRpYUFwcCIsImxldmVsIiwiY2hpbGRyZW4iLCJpc0hvdmVyZWQiLCJwYWRkaW5nIiwiaXNTZWxlY3RlZCIsImlzUm9vdCIsImlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyIiwibG9hZENoaWxkcmVuIiwic2VsZWN0IiwiYyIsImVtdHB5IiwiaGFuZGxlRHJhZ092ZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJtb3ZlTWVkaWFUb0ZvbGRlciIsImdldERhdGEiLCJzb3VyY2VGb2xkZXIiLCJ0YXJnZXRGb2xkZXIiLCJhbGVydCIsIlQiLCJlZGl0QnV0dG9uIiwiZGVsZXRlQnV0dG9uIiwiYnVpbGRNZWRpYVVybCIsImRyYWdTdGFydCIsIkJvb2xlYW4iLCJpbWFnZUhlYWRlciIsIm5hbWVIZWFkZXIiLCJsYXN0TW9kaWZ5SGVhZGVyIiwic2l6ZUhlYWRlciIsInR5cGVIZWFkZXIiLCJ2aWV3QnV0dG9uIiwicHJpbnREYXRlVGltZSIsImRhdGVtaWxsaXMiLCJkIiwidG9Mb2NhbGVTdHJpbmciLCJzb3VyY2VJdGVtcyIsInBhZ2VTaXplIiwicGFnZVNpemVPcHRpb25zIiwiY3VycmVudCIsInBhZ2VyRmlyc3RCdXR0b24iLCJwYWdlclByZXZpb3VzQnV0dG9uIiwicGFnZXJOZXh0QnV0dG9uIiwicGFnZXJMYXN0QnV0dG9uIiwicGFnZXJQYWdlU2l6ZUxhYmVsIiwicGFnZXJQYWdlTGFiZWwiLCJwYWdlclRvdGFsTGFiZWwiLCJuZXh0IiwicHJldmlvdXMiLCJnb0ZpcnN0IiwiZ29MYXN0IiwidG90YWxQYWdlcyIsImdvVG8iLCJ0YXJnZXRQYWdlIiwicGFnZXMiLCJjZWlsIiwiaXNMYXN0UGFnZSIsImlzRmlyc3RQYWdlIiwiY2FuRG9OZXh0IiwiY2FuRG9QcmV2IiwiY2FuRG9GaXJzdCIsImNhbkRvTGFzdCIsIml0ZW1zSW5DdXJyZW50UGFnZSIsInN0YXJ0IiwiZW5kIiwicGFnZUxpbmtzIiwibGlua3MiLCJiZWZvcmVDdXJyZW50IiwiYmVmb3JlQmVmb3JlQ3VycmVudCIsImFmdGVyQ3VycmVudCIsImFmdGVyQWZ0ZXJDdXJyZW50IiwiY29sbmFtZSIsInNlbGVjdGVkY29sbmFtZSIsImFzYyIsImlzQWN0aXZlIiwiaW5pdGlhbGl6ZUF0dGFjaGVkTWVkaWFGaWVsZCIsImlkT2ZVcGxvYWRCdXR0b24iLCJ1cGxvYWRBY3Rpb24iLCJtZWRpYUl0ZW1VcmwiLCJhbGxvd011bHRpcGxlIiwiYWxsb3dNZWRpYVRleHQiLCJhbGxvd0FuY2hvcnMiLCJ0ZW1wVXBsb2FkRm9sZGVyIiwiaW5pdGlhbFBhdGhzIiwibWVkaWFGaWVsZEVkaXRvciIsImlkcHJlZml4IiwibWVkaWFGaWVsZEFwcCIsIm1lZGlhRmllbGRBcHBzIiwic2VsZWN0ZWRNZWRpYSIsImlkUHJlZml4IiwiYmFja3VwTWVkaWFUZXh0IiwiYmFja3VwQW5jaG9yIiwibWVkaWFQYXRocyIsIngiLCJpc1JlbW92ZWQiLCJpc05ldyIsIm1lZGlhVGV4dCIsImFuY2hvciIsInZhbHVlcyIsInNpZ25hbCIsInZ1ZWtleSIsInkiLCJyb3VuZCIsImNhbkFkZE1lZGlhIiwibm9uUmVtb3ZlZE1lZGlhSXRlbXMiLCJzZWxlY3RNZWRpYSIsInNlbGVjdG9yIiwiZWRpdG9ySWQiLCJjb3VudCIsImdldFVuaXF1ZUlkIiwibmV3TWVkaWFJdGVtcyIsImVycm9ybXNnIiwiciIsInJhbmRvbSIsInYiLCJyZW1vdmVTZWxlY3RlZCIsImV2ZW50IiwicmVtb3ZlZCIsInNob3dNZWRpYVRleHRNb2RhbCIsIm1lZGlhVGV4dE1vZGFsIiwiY2FuY2VsTWVkaWFUZXh0TW9kYWwiLCJzaG93QW5jaG9yTW9kYWwiLCJhbmNob3JpbmdNb2RhbCIsImNhbmNlbEFuY2hvcmluZ01vZGFsIiwicmVzZXRBbmNob3IiLCJvbkFuY2hvckRyb3AiLCJpbWFnZSIsImFuY2hvckltYWdlIiwib2Zmc2V0WCIsImNsaWVudFdpZHRoIiwib2Zmc2V0WSIsImNsaWVudEhlaWdodCIsImFuY2hvckxlZnQiLCJtb2RhbEJvZHkiLCJvZmZzZXQiLCJwb3NpdGlvbiIsImFuY2hvclRvcCIsInNldEFuY2hvciIsImFkZE1lZGlhRmlsZXMiLCJkZWVwIiwiaGFuZGxlciIsImluaXRpYWxpemVNZWRpYUZpZWxkIiwibW9kYWxCb2R5RWxlbWVudCIsInNob3dNb2RhbCIsInNob3ciLCJhbmNob3JJY29uIiwicXVlcnlTZWxlY3RvciIsImlzSW50ZWdlciIsIm1lZGlhTm90Rm91bmQiLCJkaXNjYXJkV2FybmluZyIsIm5vSW1hZ2VzIiwiJHBhcmVudCIsInBlcmNlbnRhZ2UiLCJoYW5kbGVGYWlsdXJlIiwiZGlzbWlzc1dhcm5pbmciLCJleHBhbmRlZCIsInBlbmRpbmdDb3VudCIsImVycm9yQ291bnQiLCJ1cGxvYWRzIiwiY2xlYXJFcnJvcnMiLCJmaWxlQ291bnQiLCJuZXdGaWxlIiwiYWxyZWFkeUluTGlzdCIsImYiLCJmaWxlVXBsb2FkIiwidXBkYXRlQ291bnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFDQTtBQUVBLENBQUMsVUFBVUEsT0FBVixFQUFtQjtBQUNsQjs7QUFDQSxNQUFJLE9BQU9DLE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0MsR0FBM0MsRUFBZ0Q7QUFDOUM7QUFDQUQsSUFBQUEsTUFBTSxDQUFDLENBQUMsUUFBRCxFQUFXLHFCQUFYLENBQUQsRUFBb0NELE9BQXBDLENBQU47QUFDRCxHQUhELE1BR08sSUFBSSxRQUFPRyxPQUFQLHlDQUFPQSxPQUFQLE9BQW1CLFFBQXZCLEVBQWlDO0FBQ3RDO0FBQ0FILElBQUFBLE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLFFBQUQsQ0FBUixFQUFvQkEsT0FBTyxDQUFDLDJCQUFELENBQTNCLENBQVA7QUFDRCxHQUhNLE1BR0E7QUFDTDtBQUNBSixJQUFBQSxPQUFPLENBQUNLLE1BQU0sQ0FBQ0MsTUFBUixDQUFQO0FBQ0Q7QUFDRixDQVpELEVBWUcsVUFBVUMsQ0FBVixFQUFhO0FBQ2QsZUFEYyxDQUdkO0FBQ0E7O0FBQ0FBLEVBQUFBLENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxTQUFWLEdBQXNCLEVBQ3BCLElBQUlDLE1BQUosRUFDRTtBQUNBLHNDQUNFLDREQURGLEdBRUUsNEJBRkYsR0FHRSxrQ0FMSixFQU1FQyxJQU5GLENBTU9OLE1BQU0sQ0FBQ08sU0FBUCxDQUFpQkMsU0FOeEIsS0FPQTtBQUNBTixFQUFBQSxDQUFDLENBQUMsc0JBQUQsQ0FBRCxDQUEwQk8sSUFBMUIsQ0FBK0IsVUFBL0IsQ0FUb0IsQ0FBdEIsQ0FMYyxDQWlCZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBUCxFQUFBQSxDQUFDLENBQUNDLE9BQUYsQ0FBVU8sYUFBVixHQUEwQixDQUFDLEVBQUVWLE1BQU0sQ0FBQ1csYUFBUCxJQUF3QlgsTUFBTSxDQUFDWSxVQUFqQyxDQUEzQjtBQUNBVixFQUFBQSxDQUFDLENBQUNDLE9BQUYsQ0FBVVUscUJBQVYsR0FBa0MsQ0FBQyxDQUFDYixNQUFNLENBQUNjLFFBQTNDLENBdkJjLENBeUJkOztBQUNBWixFQUFBQSxDQUFDLENBQUNDLE9BQUYsQ0FBVVksU0FBVixHQUNFZixNQUFNLENBQUNnQixJQUFQLEtBQ0NBLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxLQUFmLElBQ0NGLElBQUksQ0FBQ0MsU0FBTCxDQUFlRSxXQURoQixJQUVDSCxJQUFJLENBQUNDLFNBQUwsQ0FBZUcsUUFIakIsQ0FERjtBQU1BO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDRSxXQUFTQyxjQUFULENBQXdCQyxJQUF4QixFQUE4QjtBQUM1QixRQUFJQyxVQUFVLEdBQUdELElBQUksS0FBSyxVQUExQjtBQUNBLFdBQU8sVUFBVUUsQ0FBVixFQUFhO0FBQ2xCQSxNQUFBQSxDQUFDLENBQUNDLFlBQUYsR0FBaUJELENBQUMsQ0FBQ0UsYUFBRixJQUFtQkYsQ0FBQyxDQUFDRSxhQUFGLENBQWdCRCxZQUFwRDtBQUNBLFVBQUlBLFlBQVksR0FBR0QsQ0FBQyxDQUFDQyxZQUFyQjs7QUFDQSxVQUNFQSxZQUFZLElBQ1p2QixDQUFDLENBQUN5QixPQUFGLENBQVUsT0FBVixFQUFtQkYsWUFBWSxDQUFDRyxLQUFoQyxNQUEyQyxDQUFDLENBRDVDLElBRUEsS0FBS0MsUUFBTCxDQUFjUCxJQUFkLEVBQW9CcEIsQ0FBQyxDQUFDNEIsS0FBRixDQUFRUixJQUFSLEVBQWM7QUFBRVMsUUFBQUEsY0FBYyxFQUFFUDtBQUFsQixPQUFkLENBQXBCLE1BQThELEtBSGhFLEVBSUU7QUFDQUEsUUFBQUEsQ0FBQyxDQUFDUSxjQUFGOztBQUNBLFlBQUlULFVBQUosRUFBZ0I7QUFDZEUsVUFBQUEsWUFBWSxDQUFDUSxVQUFiLEdBQTBCLE1BQTFCO0FBQ0Q7QUFDRjtBQUNGLEtBYkQ7QUFjRCxHQXREYSxDQXdEZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQS9CLEVBQUFBLENBQUMsQ0FBQ2dDLE1BQUYsQ0FBUyxvQkFBVCxFQUErQjtBQUM3QkMsSUFBQUEsT0FBTyxFQUFFO0FBQ1A7QUFDQTtBQUNBQyxNQUFBQSxRQUFRLEVBQUVsQyxDQUFDLENBQUNtQyxRQUFELENBSEo7QUFJUDtBQUNBO0FBQ0FDLE1BQUFBLFNBQVMsRUFBRUMsU0FOSjtBQU9QO0FBQ0E7QUFDQTtBQUNBO0FBQ0FuQyxNQUFBQSxTQUFTLEVBQUVtQyxTQVhKO0FBWVA7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsTUFBQUEsZ0JBQWdCLEVBQUUsSUFoQlg7QUFpQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsTUFBQUEsU0FBUyxFQUFFRixTQXJCSjtBQXNCUDtBQUNBO0FBQ0E7QUFDQUcsTUFBQUEsaUJBQWlCLEVBQUUsSUF6Qlo7QUEwQlA7QUFDQTtBQUNBQyxNQUFBQSxxQkFBcUIsRUFBRUosU0E1QmhCO0FBNkJQO0FBQ0E7QUFDQTtBQUNBSyxNQUFBQSx3QkFBd0IsRUFBRUwsU0FoQ25CO0FBaUNQO0FBQ0E7QUFDQTtBQUNBTSxNQUFBQSxnQ0FBZ0MsRUFBRSxHQXBDM0I7QUFxQ1A7QUFDQTtBQUNBQyxNQUFBQSxpQkFBaUIsRUFBRSxLQXZDWjtBQXdDUDtBQUNBO0FBQ0FDLE1BQUFBLHNCQUFzQixFQUFFUixTQTFDakI7QUEyQ1A7QUFDQVMsTUFBQUEsb0JBQW9CLEVBQUUsS0E1Q2Y7QUE2Q1A7QUFDQTtBQUNBQyxNQUFBQSxRQUFRLEVBQUVWLFNBL0NIO0FBZ0RQO0FBQ0E7QUFDQVcsTUFBQUEsaUJBQWlCLEVBQUVYLFNBbERaO0FBbURQO0FBQ0E7QUFDQVksTUFBQUEsV0FBVyxFQUFFWixTQXJETjtBQXNEUDtBQUNBO0FBQ0E7QUFDQWEsTUFBQUEsU0FBUyxFQUFFLElBekRKO0FBMERQO0FBQ0E7QUFDQTtBQUNBO0FBQ0FDLE1BQUFBLFlBQVksRUFBRWQsU0E5RFA7QUErRFA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBZSxNQUFBQSxhQUFhLEVBQUVmLFNBcEVSO0FBcUVQO0FBQ0E7QUFDQTtBQUNBZ0IsTUFBQUEsbUJBQW1CLEVBQUUsSUF4RWQ7QUF5RVA7QUFDQUMsTUFBQUEsZ0JBQWdCLEVBQUUsR0ExRVg7QUEyRVA7QUFDQUMsTUFBQUEsZUFBZSxFQUFFLEdBNUVWO0FBNkVQO0FBQ0FDLE1BQUFBLFVBQVUsRUFBRSxJQTlFTDtBQStFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FDLE1BQUFBLGVBQWUsRUFBRXBCLFNBdkZWO0FBeUZQO0FBQ0FxQixNQUFBQSxRQUFRLEVBQUU7QUFDUk4sUUFBQUEsYUFBYSxFQUFFO0FBRFAsT0ExRkg7QUE4RlA7QUFDQTtBQUNBTyxNQUFBQSxJQUFJLEVBQUUsY0FBVUMsT0FBVixFQUFtQkMsT0FBbkIsRUFBNEI7QUFDaEM7QUFDQUQsUUFBQUEsT0FBTyxHQUFHLEtBQUtGLFFBQUwsQ0FBY0UsT0FBZCxLQUEwQkEsT0FBTyxDQUFDRSxRQUFSLEVBQXBDOztBQUNBLFlBQUlELE9BQUosRUFBYTtBQUNYN0QsVUFBQUEsQ0FBQyxDQUFDK0QsSUFBRixDQUFPRixPQUFQLEVBQWdCLFVBQVVHLEdBQVYsRUFBZUMsS0FBZixFQUFzQjtBQUNwQztBQUNBTCxZQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ00sT0FBUixDQUFnQixNQUFNRixHQUFOLEdBQVksR0FBNUIsRUFBaUNDLEtBQWpDLENBQVY7QUFDRCxXQUhEO0FBSUQ7O0FBQ0QsZUFBT0wsT0FBUDtBQUNELE9BMUdNO0FBNEdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQU8sTUFBQUEsUUFBUSxFQUFFLGtCQUFVQyxJQUFWLEVBQWdCO0FBQ3hCLGVBQU9BLElBQUksQ0FBQ0MsY0FBTCxFQUFQO0FBQ0QsT0FuSE07QUFxSFA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsTUFBQUEsR0FBRyxFQUFFLGFBQVVoRCxDQUFWLEVBQWFpRCxJQUFiLEVBQW1CO0FBQ3RCLFlBQUlqRCxDQUFDLENBQUNrRCxrQkFBRixFQUFKLEVBQTRCO0FBQzFCLGlCQUFPLEtBQVA7QUFDRDs7QUFDRCxZQUNFRCxJQUFJLENBQUNmLFVBQUwsSUFDQ2UsSUFBSSxDQUFDZixVQUFMLEtBQW9CLEtBQXBCLElBQ0N4RCxDQUFDLENBQUMsSUFBRCxDQUFELENBQVF5RSxVQUFSLENBQW1CLFFBQW5CLEVBQTZCLFlBQTdCLENBSEosRUFJRTtBQUNBRixVQUFBQSxJQUFJLENBQUNHLE9BQUwsR0FBZUMsSUFBZixDQUFvQixZQUFZO0FBQzlCSixZQUFBQSxJQUFJLENBQUNLLE1BQUw7QUFDRCxXQUZEO0FBR0Q7QUFDRixPQWxKTTtBQW9KUDtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQUMsTUFBQUEsV0FBVyxFQUFFLEtBOU1OO0FBK01QQyxNQUFBQSxXQUFXLEVBQUUsS0EvTU47QUFnTlBDLE1BQUFBLEtBQUssRUFBRSxLQWhOQTtBQWlOUEMsTUFBQUEsT0FBTyxFQUFFO0FBak5GLEtBRG9CO0FBcU43QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FDLElBQUFBLFlBQVksRUFBRyxZQUFZO0FBQ3pCLFVBQUlDLEtBQUssR0FBR2xGLENBQUMsQ0FBQ21GLEVBQUYsQ0FBS0MsTUFBTCxDQUFZQyxLQUFaLENBQWtCLEdBQWxCLENBQVo7QUFDQSxhQUFPQyxNQUFNLENBQUNKLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBTixHQUFtQixDQUFuQixJQUF3QkksTUFBTSxDQUFDSixLQUFLLENBQUMsQ0FBRCxDQUFOLENBQU4sR0FBbUIsQ0FBM0MsR0FBK0MsTUFBL0MsR0FBd0QsTUFBL0Q7QUFDRCxLQUhhLEVBMU5lO0FBK043QjtBQUNBO0FBQ0FLLElBQUFBLGVBQWUsRUFBRSxDQUNmLFdBRGUsRUFFZixVQUZlLEVBR2YsV0FIZSxFQUlmLFdBSmUsRUFLZixzQkFMZSxDQWpPWTtBQXlPN0JDLElBQUFBLFVBQVUsRUFDUnhGLENBQUMsQ0FBQ0MsT0FBRixDQUFVWSxTQUFWLElBQ0EsWUFBWTtBQUNWLFVBQUlHLEtBQUssR0FBRyxLQUFLQSxLQUFMLElBQWMsS0FBS0MsV0FBbkIsSUFBa0MsS0FBS0MsUUFBbkQ7QUFDQSxhQUFPRixLQUFLLENBQUN5RSxLQUFOLENBQVksSUFBWixFQUFrQkMsU0FBbEIsQ0FBUDtBQUNELEtBOU8wQjtBQWdQN0JDLElBQUFBLGFBQWEsRUFBRSx5QkFBWTtBQUN6QixXQUFLQyxTQUFMLEdBQWlCQyxJQUFJLENBQUNDLEdBQUwsR0FBV0QsSUFBSSxDQUFDQyxHQUFMLEVBQVgsR0FBd0IsSUFBSUQsSUFBSixHQUFXRSxPQUFYLEVBQXpDO0FBQ0EsV0FBS0MsTUFBTCxHQUFjLENBQWQ7QUFDQSxXQUFLQyxPQUFMLEdBQWUsQ0FBZjs7QUFDQSxXQUFLQyxVQUFMLEdBQWtCLFVBQVVKLEdBQVYsRUFBZUUsTUFBZixFQUF1QkcsUUFBdkIsRUFBaUM7QUFDakQsWUFBSUMsUUFBUSxHQUFHTixHQUFHLEdBQUcsS0FBS0YsU0FBMUI7O0FBQ0EsWUFBSSxDQUFDLEtBQUtLLE9BQU4sSUFBaUIsQ0FBQ0UsUUFBbEIsSUFBOEJDLFFBQVEsR0FBR0QsUUFBN0MsRUFBdUQ7QUFDckQsZUFBS0YsT0FBTCxHQUFlLENBQUNELE1BQU0sR0FBRyxLQUFLQSxNQUFmLEtBQTBCLE9BQU9JLFFBQWpDLElBQTZDLENBQTVEO0FBQ0EsZUFBS0osTUFBTCxHQUFjQSxNQUFkO0FBQ0EsZUFBS0osU0FBTCxHQUFpQkUsR0FBakI7QUFDRDs7QUFDRCxlQUFPLEtBQUtHLE9BQVo7QUFDRCxPQVJEO0FBU0QsS0E3UDRCO0FBK1A3QkksSUFBQUEsWUFBWSxFQUFFLHNCQUFVcEUsT0FBVixFQUFtQjtBQUMvQixhQUNFLENBQUNBLE9BQU8sQ0FBQ2Esb0JBQVQsS0FDRSxDQUFDYixPQUFPLENBQUNpQixTQUFULElBQXNCbEQsQ0FBQyxDQUFDQyxPQUFGLENBQVVPLGFBQWpDLElBQ0NSLENBQUMsQ0FBQ0MsT0FBRixDQUFVVSxxQkFGWixDQURGO0FBS0QsS0FyUTRCO0FBdVE3QjJGLElBQUFBLFlBQVksRUFBRSxzQkFBVXJFLE9BQVYsRUFBbUI7QUFDL0IsVUFBSWtDLFFBQUo7O0FBQ0EsVUFBSW5FLENBQUMsQ0FBQ29CLElBQUYsQ0FBT2EsT0FBTyxDQUFDa0MsUUFBZixNQUE2QixVQUFqQyxFQUE2QztBQUMzQyxlQUFPbEMsT0FBTyxDQUFDa0MsUUFBUixDQUFpQmxDLE9BQU8sQ0FBQ21DLElBQXpCLENBQVA7QUFDRDs7QUFDRCxVQUFJcEUsQ0FBQyxDQUFDdUcsT0FBRixDQUFVdEUsT0FBTyxDQUFDa0MsUUFBbEIsQ0FBSixFQUFpQztBQUMvQixlQUFPbEMsT0FBTyxDQUFDa0MsUUFBZjtBQUNEOztBQUNELFVBQUluRSxDQUFDLENBQUNvQixJQUFGLENBQU9hLE9BQU8sQ0FBQ2tDLFFBQWYsTUFBNkIsUUFBakMsRUFBMkM7QUFDekNBLFFBQUFBLFFBQVEsR0FBRyxFQUFYO0FBQ0FuRSxRQUFBQSxDQUFDLENBQUMrRCxJQUFGLENBQU85QixPQUFPLENBQUNrQyxRQUFmLEVBQXlCLFVBQVVxQyxJQUFWLEVBQWdCdkMsS0FBaEIsRUFBdUI7QUFDOUNFLFVBQUFBLFFBQVEsQ0FBQ3NDLElBQVQsQ0FBYztBQUFFRCxZQUFBQSxJQUFJLEVBQUVBLElBQVI7QUFBY3ZDLFlBQUFBLEtBQUssRUFBRUE7QUFBckIsV0FBZDtBQUNELFNBRkQ7QUFHQSxlQUFPRSxRQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxFQUFQO0FBQ0QsS0F2UjRCO0FBeVI3QnVDLElBQUFBLFNBQVMsRUFBRSxtQkFBVUMsS0FBVixFQUFpQjtBQUMxQixVQUFJQyxLQUFLLEdBQUcsQ0FBWjtBQUNBNUcsTUFBQUEsQ0FBQyxDQUFDK0QsSUFBRixDQUFPNEMsS0FBUCxFQUFjLFVBQVVFLEtBQVYsRUFBaUJDLElBQWpCLEVBQXVCO0FBQ25DRixRQUFBQSxLQUFLLElBQUlFLElBQUksQ0FBQ0MsSUFBTCxJQUFhLENBQXRCO0FBQ0QsT0FGRDtBQUdBLGFBQU9ILEtBQVA7QUFDRCxLQS9SNEI7QUFpUzdCSSxJQUFBQSxtQkFBbUIsRUFBRSw2QkFBVUMsR0FBVixFQUFlO0FBQ2xDLFVBQUlDLFFBQVEsR0FBRztBQUNibEIsUUFBQUEsTUFBTSxFQUFFLENBREs7QUFFYlksUUFBQUEsS0FBSyxFQUFFLENBRk07QUFHYlgsUUFBQUEsT0FBTyxFQUFFO0FBSEksT0FBZjs7QUFLQSxVQUFJZ0IsR0FBRyxDQUFDRSxTQUFSLEVBQW1CO0FBQ2pCbkgsUUFBQUEsQ0FBQyxDQUFDb0gsTUFBRixDQUFTSCxHQUFHLENBQUNFLFNBQWIsRUFBd0JELFFBQXhCO0FBQ0QsT0FGRCxNQUVPO0FBQ0xELFFBQUFBLEdBQUcsQ0FBQ0UsU0FBSixHQUFnQkQsUUFBaEI7QUFDRDtBQUNGLEtBNVM0QjtBQThTN0JHLElBQUFBLG1CQUFtQixFQUFFLDZCQUFVSixHQUFWLEVBQWU7QUFDbEMsVUFBSTFHLElBQUo7O0FBQ0EsVUFBSTBHLEdBQUcsQ0FBQ0ssU0FBUixFQUFtQjtBQUNqQixhQUFLL0csSUFBTCxJQUFhMEcsR0FBRyxDQUFDSyxTQUFqQixFQUE0QjtBQUMxQixjQUFJQyxNQUFNLENBQUN4RyxTQUFQLENBQWlCeUcsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDUixHQUFHLENBQUNLLFNBQXpDLEVBQW9EL0csSUFBcEQsQ0FBSixFQUErRDtBQUM3RCxtQkFBTzBHLEdBQUcsQ0FBQ0ssU0FBSixDQUFjL0csSUFBZCxDQUFQO0FBQ0Q7QUFDRjtBQUNGLE9BTkQsTUFNTztBQUNMMEcsUUFBQUEsR0FBRyxDQUFDSyxTQUFKLEdBQWdCLEVBQWhCO0FBQ0Q7QUFDRixLQXpUNEI7QUEyVDdCSSxJQUFBQSxXQUFXLEVBQUUscUJBQVVwRyxDQUFWLEVBQWFpRCxJQUFiLEVBQW1CO0FBQzlCLFVBQUlqRCxDQUFDLENBQUNxRyxnQkFBTixFQUF3QjtBQUN0QixZQUFJN0IsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUwsR0FBV0QsSUFBSSxDQUFDQyxHQUFMLEVBQVgsR0FBd0IsSUFBSUQsSUFBSixHQUFXRSxPQUFYLEVBQWxDO0FBQUEsWUFDRUMsTUFERjs7QUFFQSxZQUNFekIsSUFBSSxDQUFDcUQsS0FBTCxJQUNBckQsSUFBSSxDQUFDakIsZ0JBREwsSUFFQXdDLEdBQUcsR0FBR3ZCLElBQUksQ0FBQ3FELEtBQVgsR0FBbUJyRCxJQUFJLENBQUNqQixnQkFGeEIsSUFHQWhDLENBQUMsQ0FBQzBFLE1BQUYsS0FBYTFFLENBQUMsQ0FBQ3NGLEtBSmpCLEVBS0U7QUFDQTtBQUNEOztBQUNEckMsUUFBQUEsSUFBSSxDQUFDcUQsS0FBTCxHQUFhOUIsR0FBYjtBQUNBRSxRQUFBQSxNQUFNLEdBQ0o2QixJQUFJLENBQUNDLEtBQUwsQ0FDR3hHLENBQUMsQ0FBQzBFLE1BQUYsR0FBVzFFLENBQUMsQ0FBQ3NGLEtBQWQsSUFBd0JyQyxJQUFJLENBQUN3RCxTQUFMLElBQWtCeEQsSUFBSSxDQUFDNEMsU0FBTCxDQUFlUCxLQUF6RCxDQURGLEtBRUtyQyxJQUFJLENBQUNuQixhQUFMLElBQXNCLENBRjNCLENBREYsQ0Fac0IsQ0FnQnRCO0FBQ0E7O0FBQ0EsYUFBSytELFNBQUwsQ0FBZW5CLE1BQWYsSUFBeUJBLE1BQU0sR0FBR3pCLElBQUksQ0FBQzRDLFNBQUwsQ0FBZW5CLE1BQWpEO0FBQ0EsYUFBS21CLFNBQUwsQ0FBZWxCLE9BQWYsR0FBeUIsS0FBSytCLGFBQUwsQ0FBbUI5QixVQUFuQixDQUN2QkosR0FEdUIsRUFFdkIsS0FBS3FCLFNBQUwsQ0FBZW5CLE1BRlEsRUFHdkJ6QixJQUFJLENBQUNoQixlQUhrQixDQUF6QjtBQUtBZ0IsUUFBQUEsSUFBSSxDQUFDNEMsU0FBTCxDQUFlbkIsTUFBZixHQUF3QnpCLElBQUksQ0FBQ3lCLE1BQUwsR0FBY0EsTUFBdEM7QUFDQXpCLFFBQUFBLElBQUksQ0FBQzRDLFNBQUwsQ0FBZWxCLE9BQWYsR0FBeUIxQixJQUFJLENBQUMwQixPQUFMLEdBQWUxQixJQUFJLENBQUN5RCxhQUFMLENBQW1COUIsVUFBbkIsQ0FDdENKLEdBRHNDLEVBRXRDRSxNQUZzQyxFQUd0Q3pCLElBQUksQ0FBQ2hCLGVBSGlDLENBQXhDLENBekJzQixDQThCdEI7QUFDQTtBQUNBOztBQUNBLGFBQUs1QixRQUFMLENBQ0UsVUFERixFQUVFM0IsQ0FBQyxDQUFDNEIsS0FBRixDQUFRLFVBQVIsRUFBb0I7QUFBRUMsVUFBQUEsY0FBYyxFQUFFUDtBQUFsQixTQUFwQixDQUZGLEVBR0VpRCxJQUhGLEVBakNzQixDQXNDdEI7QUFDQTs7O0FBQ0EsYUFBSzVDLFFBQUwsQ0FDRSxhQURGLEVBRUUzQixDQUFDLENBQUM0QixLQUFGLENBQVEsYUFBUixFQUF1QjtBQUFFQyxVQUFBQSxjQUFjLEVBQUVQO0FBQWxCLFNBQXZCLENBRkYsRUFHRSxLQUFLNkYsU0FIUDtBQUtEO0FBQ0YsS0ExVzRCO0FBNFc3QmMsSUFBQUEscUJBQXFCLEVBQUUsK0JBQVVoRyxPQUFWLEVBQW1CO0FBQ3hDLFVBQUlpRyxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0VDLEdBQUcsR0FBR2xHLE9BQU8sQ0FBQ2tHLEdBQVIsR0FBY2xHLE9BQU8sQ0FBQ2tHLEdBQVIsRUFBZCxHQUE4Qm5JLENBQUMsQ0FBQ29JLFlBQUYsQ0FBZUQsR0FBZixFQUR0QyxDQUR3QyxDQUd4QztBQUNBOztBQUNBLFVBQUlBLEdBQUcsQ0FBQ0UsTUFBUixFQUFnQjtBQUNkckksUUFBQUEsQ0FBQyxDQUFDbUksR0FBRyxDQUFDRSxNQUFMLENBQUQsQ0FBY0MsRUFBZCxDQUFpQixVQUFqQixFQUE2QixVQUFVaEgsQ0FBVixFQUFhO0FBQ3hDLGNBQUlpSCxFQUFFLEdBQUdqSCxDQUFDLENBQUNFLGFBQVgsQ0FEd0MsQ0FFeEM7O0FBQ0FGLFVBQUFBLENBQUMsQ0FBQ3FHLGdCQUFGLEdBQXFCWSxFQUFFLENBQUNaLGdCQUF4QjtBQUNBckcsVUFBQUEsQ0FBQyxDQUFDMEUsTUFBRixHQUFXdUMsRUFBRSxDQUFDdkMsTUFBZDtBQUNBMUUsVUFBQUEsQ0FBQyxDQUFDc0YsS0FBRixHQUFVMkIsRUFBRSxDQUFDM0IsS0FBYjs7QUFDQXNCLFVBQUFBLElBQUksQ0FBQ1IsV0FBTCxDQUFpQnBHLENBQWpCLEVBQW9CVyxPQUFwQjtBQUNELFNBUEQ7O0FBUUFBLFFBQUFBLE9BQU8sQ0FBQ2tHLEdBQVIsR0FBYyxZQUFZO0FBQ3hCLGlCQUFPQSxHQUFQO0FBQ0QsU0FGRDtBQUdEO0FBQ0YsS0E5WDRCO0FBZ1k3QkssSUFBQUEsdUJBQXVCLEVBQUUsaUNBQVV2RyxPQUFWLEVBQW1CO0FBQzFDLFVBQUlrRyxHQUFHLEdBQUdsRyxPQUFPLENBQUNrRyxHQUFSLEdBQWNsRyxPQUFPLENBQUNrRyxHQUFSLEVBQWQsR0FBOEJuSSxDQUFDLENBQUNvSSxZQUFGLENBQWVELEdBQWYsRUFBeEM7O0FBQ0EsVUFBSUEsR0FBRyxDQUFDRSxNQUFSLEVBQWdCO0FBQ2RySSxRQUFBQSxDQUFDLENBQUNtSSxHQUFHLENBQUNFLE1BQUwsQ0FBRCxDQUFjSSxHQUFkLENBQWtCLFVBQWxCO0FBQ0Q7QUFDRixLQXJZNEI7QUF1WTdCQyxJQUFBQSxhQUFhLEVBQUUsdUJBQVV0SCxJQUFWLEVBQWdCNkYsR0FBaEIsRUFBcUI7QUFDbEM7QUFDQSxhQUFPTSxNQUFNLENBQUN4RyxTQUFQLENBQWlCK0MsUUFBakIsQ0FBMEIyRCxJQUExQixDQUErQlIsR0FBL0IsTUFBd0MsYUFBYTdGLElBQWIsR0FBb0IsR0FBbkU7QUFDRCxLQTFZNEI7QUE0WTdCdUgsSUFBQUEsa0JBQWtCLEVBQUUsNEJBQVVuQyxJQUFWLEVBQWdCb0MsR0FBaEIsRUFBcUI7QUFDdkM7QUFDQXBDLE1BQUFBLElBQUksR0FBR3FDLE1BQU0sQ0FBQ3JDLElBQUQsQ0FBYjs7QUFDQSxVQUFJb0MsR0FBRyxDQUFDcEMsSUFBRCxDQUFQLEVBQWU7QUFDYjtBQUNBQSxRQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQ3RDLE9BQUwsQ0FDTCw4QkFESyxFQUVMLFVBQVU0RSxDQUFWLEVBQWFDLEVBQWIsRUFBaUJDLEVBQWpCLEVBQXFCO0FBQ25CLGNBQUluQyxLQUFLLEdBQUdrQyxFQUFFLEdBQUd6RCxNQUFNLENBQUN5RCxFQUFELENBQU4sR0FBYSxDQUFoQixHQUFvQixDQUFsQztBQUNBLGNBQUlFLEdBQUcsR0FBR0QsRUFBRSxJQUFJLEVBQWhCO0FBQ0EsaUJBQU8sT0FBT25DLEtBQVAsR0FBZSxHQUFmLEdBQXFCb0MsR0FBNUI7QUFDRCxTQU5JLENBQVA7QUFRQSxlQUFPLEtBQUtOLGtCQUFMLENBQXdCbkMsSUFBeEIsRUFBOEJvQyxHQUE5QixDQUFQO0FBQ0Q7O0FBQ0RBLE1BQUFBLEdBQUcsQ0FBQ3BDLElBQUQsQ0FBSCxHQUFZLElBQVo7QUFDQSxhQUFPQSxJQUFQO0FBQ0QsS0E3WjRCO0FBK1o3QjBDLElBQUFBLFlBQVksRUFBRSxzQkFBVWpILE9BQVYsRUFBbUI7QUFDL0IsVUFBSWlHLElBQUksR0FBRyxJQUFYO0FBQUEsVUFDRS9ELFFBREY7QUFBQSxVQUVFMkMsSUFBSSxHQUFHN0UsT0FBTyxDQUFDMEUsS0FBUixDQUFjLENBQWQsQ0FGVDtBQUFBLFVBR0U7QUFDQXpELE1BQUFBLFNBQVMsR0FBR2pCLE9BQU8sQ0FBQ2lCLFNBQVIsSUFBcUIsQ0FBQ2xELENBQUMsQ0FBQ0MsT0FBRixDQUFVTyxhQUo5QztBQUFBLFVBS0UrQixTQUFTLEdBQ1B2QyxDQUFDLENBQUNvQixJQUFGLENBQU9hLE9BQU8sQ0FBQ00sU0FBZixNQUE4QixPQUE5QixHQUNJTixPQUFPLENBQUNNLFNBQVIsQ0FBa0IsQ0FBbEIsQ0FESixHQUVJTixPQUFPLENBQUNNLFNBUmhCO0FBU0FOLE1BQUFBLE9BQU8sQ0FBQ2tILE9BQVIsR0FBa0JuSixDQUFDLENBQUNvSCxNQUFGLENBQVMsRUFBVCxFQUFhbkYsT0FBTyxDQUFDa0gsT0FBckIsQ0FBbEI7O0FBQ0EsVUFBSWxILE9BQU8sQ0FBQ21ILFlBQVosRUFBMEI7QUFDeEJuSCxRQUFBQSxPQUFPLENBQUNrSCxPQUFSLENBQWdCLGVBQWhCLElBQW1DbEgsT0FBTyxDQUFDbUgsWUFBM0M7QUFDRDs7QUFDRCxVQUFJLENBQUNsRyxTQUFELElBQWNqQixPQUFPLENBQUNvSCxJQUF0QixJQUE4QixDQUFDLEtBQUtYLGFBQUwsQ0FBbUIsTUFBbkIsRUFBMkI1QixJQUEzQixDQUFuQyxFQUFxRTtBQUNuRTdFLFFBQUFBLE9BQU8sQ0FBQ2tILE9BQVIsQ0FBZ0IscUJBQWhCLElBQ0UsMkJBQ0FHLFNBQVMsQ0FBQ3hDLElBQUksQ0FBQ3lDLFVBQUwsSUFBbUJ6QyxJQUFJLENBQUNOLElBQXpCLENBRFQsR0FFQSxHQUhGO0FBSUQ7O0FBQ0QsVUFBSSxDQUFDdEQsU0FBTCxFQUFnQjtBQUNkakIsUUFBQUEsT0FBTyxDQUFDNkMsV0FBUixHQUFzQmdDLElBQUksQ0FBQzFGLElBQUwsSUFBYSwwQkFBbkM7QUFDQWEsUUFBQUEsT0FBTyxDQUFDc0MsSUFBUixHQUFldEMsT0FBTyxDQUFDb0gsSUFBUixJQUFnQnZDLElBQS9CO0FBQ0QsT0FIRCxNQUdPLElBQUk5RyxDQUFDLENBQUNDLE9BQUYsQ0FBVVUscUJBQWQsRUFBcUM7QUFDMUMsWUFBSXNCLE9BQU8sQ0FBQ2dCLFdBQVosRUFBeUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQWtCLFVBQUFBLFFBQVEsR0FBRyxLQUFLbUMsWUFBTCxDQUFrQnJFLE9BQWxCLENBQVg7O0FBQ0EsY0FBSUEsT0FBTyxDQUFDb0gsSUFBWixFQUFrQjtBQUNoQmxGLFlBQUFBLFFBQVEsQ0FBQ3NDLElBQVQsQ0FBYztBQUNaRCxjQUFBQSxJQUFJLEVBQUVqRSxTQURNO0FBRVowQixjQUFBQSxLQUFLLEVBQUVoQyxPQUFPLENBQUNvSDtBQUZILGFBQWQ7QUFJRCxXQUxELE1BS087QUFDTHJKLFlBQUFBLENBQUMsQ0FBQytELElBQUYsQ0FBTzlCLE9BQU8sQ0FBQzBFLEtBQWYsRUFBc0IsVUFBVUUsS0FBVixFQUFpQkMsSUFBakIsRUFBdUI7QUFDM0MzQyxjQUFBQSxRQUFRLENBQUNzQyxJQUFULENBQWM7QUFDWkQsZ0JBQUFBLElBQUksRUFDRHhHLENBQUMsQ0FBQ29CLElBQUYsQ0FBT2EsT0FBTyxDQUFDTSxTQUFmLE1BQThCLE9BQTlCLElBQ0NOLE9BQU8sQ0FBQ00sU0FBUixDQUFrQnNFLEtBQWxCLENBREYsSUFFQXRFLFNBSlU7QUFLWjBCLGdCQUFBQSxLQUFLLEVBQUU2QztBQUxLLGVBQWQ7QUFPRCxhQVJEO0FBU0Q7QUFDRixTQXRCRCxNQXNCTztBQUNMLGNBQUlvQixJQUFJLENBQUNRLGFBQUwsQ0FBbUIsVUFBbkIsRUFBK0J6RyxPQUFPLENBQUNrQyxRQUF2QyxDQUFKLEVBQXNEO0FBQ3BEQSxZQUFBQSxRQUFRLEdBQUdsQyxPQUFPLENBQUNrQyxRQUFuQjtBQUNELFdBRkQsTUFFTztBQUNMQSxZQUFBQSxRQUFRLEdBQUcsSUFBSXZELFFBQUosRUFBWDtBQUNBWixZQUFBQSxDQUFDLENBQUMrRCxJQUFGLENBQU8sS0FBS3VDLFlBQUwsQ0FBa0JyRSxPQUFsQixDQUFQLEVBQW1DLFVBQVU0RSxLQUFWLEVBQWlCMkMsS0FBakIsRUFBd0I7QUFDekRyRixjQUFBQSxRQUFRLENBQUNzRixNQUFULENBQWdCRCxLQUFLLENBQUNoRCxJQUF0QixFQUE0QmdELEtBQUssQ0FBQ3ZGLEtBQWxDO0FBQ0QsYUFGRDtBQUdEOztBQUNELGNBQUloQyxPQUFPLENBQUNvSCxJQUFaLEVBQWtCO0FBQ2hCbEYsWUFBQUEsUUFBUSxDQUFDc0YsTUFBVCxDQUNFbEgsU0FERixFQUVFTixPQUFPLENBQUNvSCxJQUZWLEVBR0V2QyxJQUFJLENBQUN5QyxVQUFMLElBQW1CekMsSUFBSSxDQUFDTixJQUgxQjtBQUtELFdBTkQsTUFNTztBQUNMeEcsWUFBQUEsQ0FBQyxDQUFDK0QsSUFBRixDQUFPOUIsT0FBTyxDQUFDMEUsS0FBZixFQUFzQixVQUFVRSxLQUFWLEVBQWlCQyxJQUFqQixFQUF1QjtBQUMzQztBQUNBO0FBQ0Esa0JBQ0VvQixJQUFJLENBQUNRLGFBQUwsQ0FBbUIsTUFBbkIsRUFBMkI1QixJQUEzQixLQUNBb0IsSUFBSSxDQUFDUSxhQUFMLENBQW1CLE1BQW5CLEVBQTJCNUIsSUFBM0IsQ0FGRixFQUdFO0FBQ0Esb0JBQUk0QyxRQUFRLEdBQUc1QyxJQUFJLENBQUN5QyxVQUFMLElBQW1CekMsSUFBSSxDQUFDTixJQUF2Qzs7QUFDQSxvQkFBSXZFLE9BQU8sQ0FBQ3dCLGVBQVosRUFBNkI7QUFDM0JpRyxrQkFBQUEsUUFBUSxHQUFHeEIsSUFBSSxDQUFDUyxrQkFBTCxDQUNUZSxRQURTLEVBRVR6SCxPQUFPLENBQUN3QixlQUZDLENBQVg7QUFJRDs7QUFDRFUsZ0JBQUFBLFFBQVEsQ0FBQ3NGLE1BQVQsQ0FDR3pKLENBQUMsQ0FBQ29CLElBQUYsQ0FBT2EsT0FBTyxDQUFDTSxTQUFmLE1BQThCLE9BQTlCLElBQ0NOLE9BQU8sQ0FBQ00sU0FBUixDQUFrQnNFLEtBQWxCLENBREYsSUFFRXRFLFNBSEosRUFJRXVFLElBSkYsRUFLRTRDLFFBTEY7QUFPRDtBQUNGLGFBdEJEO0FBdUJEO0FBQ0Y7O0FBQ0R6SCxRQUFBQSxPQUFPLENBQUNzQyxJQUFSLEdBQWVKLFFBQWY7QUFDRCxPQXhGOEIsQ0F5Ri9COzs7QUFDQWxDLE1BQUFBLE9BQU8sQ0FBQ29ILElBQVIsR0FBZSxJQUFmO0FBQ0QsS0ExZjRCO0FBNGY3Qk0sSUFBQUEsbUJBQW1CLEVBQUUsNkJBQVUxSCxPQUFWLEVBQW1CO0FBQ3RDLFVBQUkySCxVQUFVLEdBQUc1SixDQUFDLENBQUMsU0FBRCxDQUFELENBQWFPLElBQWIsQ0FBa0IsTUFBbEIsRUFBMEIwQixPQUFPLENBQUM0SCxHQUFsQyxFQUF1Q3RKLElBQXZDLENBQTRDLE1BQTVDLENBQWpCLENBRHNDLENBRXRDOztBQUNBMEIsTUFBQUEsT0FBTyxDQUFDNkgsUUFBUixHQUFtQixhQUFhN0gsT0FBTyxDQUFDNkgsUUFBUixJQUFvQixFQUFqQyxDQUFuQixDQUhzQyxDQUl0Qzs7QUFDQTdILE1BQUFBLE9BQU8sQ0FBQ2tDLFFBQVIsR0FBbUIsS0FBS21DLFlBQUwsQ0FBa0JyRSxPQUFsQixDQUFuQixDQUxzQyxDQU10Qzs7QUFDQSxVQUFJQSxPQUFPLENBQUNjLFFBQVIsSUFBb0I2RyxVQUFwQixJQUFrQ0EsVUFBVSxLQUFLRyxRQUFRLENBQUNDLElBQTlELEVBQW9FO0FBQ2xFL0gsUUFBQUEsT0FBTyxDQUFDa0MsUUFBUixDQUFpQnNDLElBQWpCLENBQXNCO0FBQ3BCRCxVQUFBQSxJQUFJLEVBQUV2RSxPQUFPLENBQUNlLGlCQUFSLElBQTZCLFVBRGY7QUFFcEJpQixVQUFBQSxLQUFLLEVBQUVoQyxPQUFPLENBQUNjO0FBRkssU0FBdEI7QUFJRDtBQUNGLEtBemdCNEI7QUEyZ0I3QmtILElBQUFBLGlCQUFpQixFQUFFLDJCQUFVaEksT0FBVixFQUFtQjtBQUNwQyxVQUFJLEtBQUtvRSxZQUFMLENBQWtCcEUsT0FBbEIsQ0FBSixFQUFnQztBQUM5QixZQUFJLENBQUMsS0FBS2lJLGNBQUwsQ0FBb0JqSSxPQUFwQixFQUE2QixJQUE3QixDQUFMLEVBQXlDO0FBQ3ZDLGNBQUksQ0FBQ0EsT0FBTyxDQUFDc0MsSUFBYixFQUFtQjtBQUNqQixpQkFBSzJFLFlBQUwsQ0FBa0JqSCxPQUFsQjtBQUNEOztBQUNELGVBQUtnRyxxQkFBTCxDQUEyQmhHLE9BQTNCO0FBQ0Q7O0FBQ0QsWUFBSUEsT0FBTyxDQUFDZ0IsV0FBWixFQUF5QjtBQUN2QjtBQUNBO0FBQ0FoQixVQUFBQSxPQUFPLENBQUM2SCxRQUFSLEdBQW1CLGtCQUFrQjdILE9BQU8sQ0FBQzZILFFBQVIsSUFBb0IsRUFBdEMsQ0FBbkI7QUFDRDtBQUNGLE9BWkQsTUFZTztBQUNMLGFBQUtILG1CQUFMLENBQXlCMUgsT0FBekI7QUFDRDtBQUNGLEtBM2hCNEI7QUE2aEI3QmtJLElBQUFBLGFBQWEsRUFBRSx1QkFBVWxJLE9BQVYsRUFBbUI7QUFDaEMsVUFBSS9CLFNBQVMsR0FBR0YsQ0FBQyxDQUFDaUMsT0FBTyxDQUFDL0IsU0FBVCxDQUFqQjtBQUFBLFVBQ0VxQyxTQUFTLEdBQUdOLE9BQU8sQ0FBQ00sU0FEdEI7O0FBRUEsVUFBSSxDQUFDQSxTQUFMLEVBQWdCO0FBQ2RBLFFBQUFBLFNBQVMsR0FBRyxFQUFaO0FBQ0FyQyxRQUFBQSxTQUFTLENBQUM2RCxJQUFWLENBQWUsWUFBWTtBQUN6QixjQUFJcUcsS0FBSyxHQUFHcEssQ0FBQyxDQUFDLElBQUQsQ0FBYjtBQUFBLGNBQ0V3RyxJQUFJLEdBQUc0RCxLQUFLLENBQUM3SixJQUFOLENBQVcsTUFBWCxLQUFzQixTQUQvQjtBQUFBLGNBRUU4SixDQUFDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDN0osSUFBTixDQUFXLE9BQVgsS0FBdUIsQ0FBQyxDQUFELENBQXhCLEVBQTZCK0osTUFGbkM7O0FBR0EsaUJBQU9ELENBQVAsRUFBVTtBQUNSOUgsWUFBQUEsU0FBUyxDQUFDa0UsSUFBVixDQUFlRCxJQUFmO0FBQ0E2RCxZQUFBQSxDQUFDLElBQUksQ0FBTDtBQUNEO0FBQ0YsU0FSRDs7QUFTQSxZQUFJLENBQUM5SCxTQUFTLENBQUMrSCxNQUFmLEVBQXVCO0FBQ3JCL0gsVUFBQUEsU0FBUyxHQUFHLENBQUNyQyxTQUFTLENBQUNLLElBQVYsQ0FBZSxNQUFmLEtBQTBCLFNBQTNCLENBQVo7QUFDRDtBQUNGLE9BZEQsTUFjTyxJQUFJLENBQUNQLENBQUMsQ0FBQ3VHLE9BQUYsQ0FBVWhFLFNBQVYsQ0FBTCxFQUEyQjtBQUNoQ0EsUUFBQUEsU0FBUyxHQUFHLENBQUNBLFNBQUQsQ0FBWjtBQUNEOztBQUNELGFBQU9BLFNBQVA7QUFDRCxLQWxqQjRCO0FBb2pCN0JnSSxJQUFBQSxpQkFBaUIsRUFBRSwyQkFBVXRJLE9BQVYsRUFBbUI7QUFDcEM7QUFDQTtBQUNBLFVBQUksQ0FBQ0EsT0FBTyxDQUFDbUMsSUFBVCxJQUFpQixDQUFDbkMsT0FBTyxDQUFDbUMsSUFBUixDQUFha0csTUFBbkMsRUFBMkM7QUFDekNySSxRQUFBQSxPQUFPLENBQUNtQyxJQUFSLEdBQWVwRSxDQUFDLENBQUNpQyxPQUFPLENBQUMvQixTQUFSLENBQWtCSyxJQUFsQixDQUF1QixNQUF2QixDQUFELENBQWhCLENBRHlDLENBRXpDO0FBQ0E7O0FBQ0EsWUFBSSxDQUFDMEIsT0FBTyxDQUFDbUMsSUFBUixDQUFha0csTUFBbEIsRUFBMEI7QUFDeEJySSxVQUFBQSxPQUFPLENBQUNtQyxJQUFSLEdBQWVwRSxDQUFDLENBQUMsS0FBS2lDLE9BQUwsQ0FBYS9CLFNBQWIsQ0FBdUJLLElBQXZCLENBQTRCLE1BQTVCLENBQUQsQ0FBaEI7QUFDRDtBQUNGOztBQUNEMEIsTUFBQUEsT0FBTyxDQUFDTSxTQUFSLEdBQW9CLEtBQUs0SCxhQUFMLENBQW1CbEksT0FBbkIsQ0FBcEI7O0FBQ0EsVUFBSSxDQUFDQSxPQUFPLENBQUM0SCxHQUFiLEVBQWtCO0FBQ2hCNUgsUUFBQUEsT0FBTyxDQUFDNEgsR0FBUixHQUFjNUgsT0FBTyxDQUFDbUMsSUFBUixDQUFhN0QsSUFBYixDQUFrQixRQUFsQixLQUErQndKLFFBQVEsQ0FBQ1MsSUFBdEQ7QUFDRCxPQWRtQyxDQWVwQzs7O0FBQ0F2SSxNQUFBQSxPQUFPLENBQUNiLElBQVIsR0FBZSxDQUNiYSxPQUFPLENBQUNiLElBQVIsSUFDQ3BCLENBQUMsQ0FBQ29CLElBQUYsQ0FBT2EsT0FBTyxDQUFDbUMsSUFBUixDQUFhN0QsSUFBYixDQUFrQixRQUFsQixDQUFQLE1BQXdDLFFBQXhDLElBQ0MwQixPQUFPLENBQUNtQyxJQUFSLENBQWE3RCxJQUFiLENBQWtCLFFBQWxCLENBRkYsSUFHQSxFQUphLEVBS2JrSyxXQUxhLEVBQWY7O0FBTUEsVUFDRXhJLE9BQU8sQ0FBQ2IsSUFBUixLQUFpQixNQUFqQixJQUNBYSxPQUFPLENBQUNiLElBQVIsS0FBaUIsS0FEakIsSUFFQWEsT0FBTyxDQUFDYixJQUFSLEtBQWlCLE9BSG5CLEVBSUU7QUFDQWEsUUFBQUEsT0FBTyxDQUFDYixJQUFSLEdBQWUsTUFBZjtBQUNEOztBQUNELFVBQUksQ0FBQ2EsT0FBTyxDQUFDeUksaUJBQWIsRUFBZ0M7QUFDOUJ6SSxRQUFBQSxPQUFPLENBQUN5SSxpQkFBUixHQUE0QnpJLE9BQU8sQ0FBQ21DLElBQVIsQ0FBYXVHLElBQWIsQ0FBa0IsZ0JBQWxCLENBQTVCO0FBQ0Q7QUFDRixLQXBsQjRCO0FBc2xCN0JDLElBQUFBLGdCQUFnQixFQUFFLDBCQUFVckcsSUFBVixFQUFnQjtBQUNoQyxVQUFJdEMsT0FBTyxHQUFHakMsQ0FBQyxDQUFDb0gsTUFBRixDQUFTLEVBQVQsRUFBYSxLQUFLbkYsT0FBbEIsRUFBMkJzQyxJQUEzQixDQUFkOztBQUNBLFdBQUtnRyxpQkFBTCxDQUF1QnRJLE9BQXZCOztBQUNBLFdBQUtnSSxpQkFBTCxDQUF1QmhJLE9BQXZCOztBQUNBLGFBQU9BLE9BQVA7QUFDRCxLQTNsQjRCO0FBNmxCN0I7QUFDQTtBQUNBNEksSUFBQUEsaUJBQWlCLEVBQUUsMkJBQVVDLFFBQVYsRUFBb0I7QUFDckMsVUFBSUEsUUFBUSxDQUFDQyxLQUFiLEVBQW9CO0FBQ2xCLGVBQU9ELFFBQVEsQ0FBQ0MsS0FBVCxFQUFQO0FBQ0Q7O0FBQ0QsVUFBSUQsUUFBUSxDQUFDRSxVQUFULEVBQUosRUFBMkI7QUFDekIsZUFBTyxVQUFQO0FBQ0Q7O0FBQ0QsVUFBSUYsUUFBUSxDQUFDRyxVQUFULEVBQUosRUFBMkI7QUFDekIsZUFBTyxVQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxTQUFQO0FBQ0QsS0ExbUI0QjtBQTRtQjdCO0FBQ0E7QUFDQUMsSUFBQUEsZUFBZSxFQUFFLHlCQUFVQyxPQUFWLEVBQW1CO0FBQ2xDQSxNQUFBQSxPQUFPLENBQUNDLE9BQVIsR0FBa0JELE9BQU8sQ0FBQ3hHLElBQTFCO0FBQ0F3RyxNQUFBQSxPQUFPLENBQUNFLEtBQVIsR0FBZ0JGLE9BQU8sQ0FBQ0csSUFBeEI7QUFDQUgsTUFBQUEsT0FBTyxDQUFDSSxRQUFSLEdBQW1CSixPQUFPLENBQUNLLE1BQTNCO0FBQ0EsYUFBT0wsT0FBUDtBQUNELEtBbm5CNEI7QUFxbkI3QjtBQUNBO0FBQ0FNLElBQUFBLGNBQWMsRUFBRSx3QkFBVUMsZUFBVixFQUEyQjdILE9BQTNCLEVBQW9DOEgsSUFBcEMsRUFBMEM7QUFDeEQsVUFBSUMsR0FBRyxHQUFHNUwsQ0FBQyxDQUFDNkwsUUFBRixFQUFWO0FBQUEsVUFDRVYsT0FBTyxHQUFHUyxHQUFHLENBQUNULE9BQUosRUFEWixDQUR3RCxDQUd4RDs7QUFDQXRILE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxJQUFJLEtBQUs1QixPQUFMLENBQWE0QixPQUF4QixJQUFtQ3NILE9BQTdDOztBQUNBLFVBQUlPLGVBQWUsS0FBSyxJQUF4QixFQUE4QjtBQUM1QkUsUUFBQUEsR0FBRyxDQUFDRSxXQUFKLENBQWdCakksT0FBaEIsRUFBeUI4SCxJQUF6QjtBQUNELE9BRkQsTUFFTyxJQUFJRCxlQUFlLEtBQUssS0FBeEIsRUFBK0I7QUFDcENFLFFBQUFBLEdBQUcsQ0FBQ0csVUFBSixDQUFlbEksT0FBZixFQUF3QjhILElBQXhCO0FBQ0Q7O0FBQ0RSLE1BQUFBLE9BQU8sQ0FBQ2EsS0FBUixHQUFnQkosR0FBRyxDQUFDVCxPQUFwQjtBQUNBLGFBQU8sS0FBS0QsZUFBTCxDQUFxQkMsT0FBckIsQ0FBUDtBQUNELEtBbm9CNEI7QUFxb0I3QjtBQUNBYyxJQUFBQSxzQkFBc0IsRUFBRSxnQ0FBVTNLLENBQVYsRUFBYWlELElBQWIsRUFBbUI7QUFDekMsVUFBSTJELElBQUksR0FBRyxJQUFYO0FBQUEsVUFDRWdFLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQVVQLElBQVYsRUFBZ0I7QUFDM0IsZUFBTzNMLENBQUMsQ0FBQzZMLFFBQUYsR0FBYUMsV0FBYixDQUF5QjVELElBQXpCLEVBQStCeUQsSUFBL0IsRUFBcUNSLE9BQXJDLEVBQVA7QUFDRCxPQUhIOztBQUlBNUcsTUFBQUEsSUFBSSxDQUFDRyxPQUFMLEdBQWUsVUFBVXlILFdBQVYsRUFBdUJDLFVBQXZCLEVBQW1DO0FBQ2hELFlBQUlELFdBQVcsSUFBSUMsVUFBbkIsRUFBK0I7QUFDN0I3SCxVQUFBQSxJQUFJLENBQUM4SCxhQUFMLEdBQXFCLEtBQUtBLGFBQUwsR0FBcUIsQ0FBQyxLQUFLQSxhQUFMLElBQ3pDSCxVQUFVLENBQUMsQ0FBQyxJQUFELENBQUQsQ0FEOEIsRUFFdkNoRSxJQUFJLENBQUNqRCxZQUZrQyxFQUVwQixZQUFZO0FBQzlCLGdCQUFJVixJQUFJLENBQUMrSCxXQUFULEVBQXNCO0FBQ3BCLHFCQUFPdE0sQ0FBQyxDQUFDNkwsUUFBRixHQUFhRSxVQUFiLENBQXdCN0QsSUFBeEIsRUFBOEIsQ0FBQzNELElBQUQsQ0FBOUIsRUFBc0M0RyxPQUF0QyxFQUFQO0FBQ0Q7O0FBQ0QsbUJBQU9lLFVBQVUsQ0FBQ3hHLFNBQUQsQ0FBakI7QUFDRCxXQVB1QyxFQVF2Q3dDLElBQUksQ0FBQ2pELFlBUmtDLEVBUXBCa0gsV0FSb0IsRUFRUEMsVUFSTyxDQUExQztBQVNEOztBQUNELGVBQU8sS0FBS0MsYUFBTCxJQUFzQkgsVUFBVSxDQUFDLENBQUMsSUFBRCxDQUFELENBQXZDO0FBQ0QsT0FiRDs7QUFjQTNILE1BQUFBLElBQUksQ0FBQ0ssTUFBTCxHQUFjLFlBQVk7QUFDeEIsWUFBSSxLQUFLbUcsS0FBTCxPQUFpQixTQUFyQixFQUFnQztBQUM5QnhHLFVBQUFBLElBQUksQ0FBQ2dJLEtBQUwsR0FBYSxLQUFLQSxLQUFMLEdBQ1hyRSxJQUFJLENBQUN2RyxRQUFMLENBQ0UsUUFERixFQUVFM0IsQ0FBQyxDQUFDNEIsS0FBRixDQUFRLFFBQVIsRUFBa0I7QUFBRUMsWUFBQUEsY0FBYyxFQUFFUDtBQUFsQixXQUFsQixDQUZGLEVBR0UsSUFIRixNQUlNLEtBSk4sSUFJZTRHLElBQUksQ0FBQ3NFLE9BQUwsQ0FBYWxMLENBQWIsRUFBZ0IsSUFBaEIsQ0FMakI7QUFNRDs7QUFDRCxlQUFPLEtBQUtpTCxLQUFMLElBQWNyRSxJQUFJLENBQUN1RCxjQUFMLEVBQXJCO0FBQ0QsT0FWRDs7QUFXQWxILE1BQUFBLElBQUksQ0FBQ3lILEtBQUwsR0FBYSxZQUFZO0FBQ3ZCLFlBQUksS0FBS08sS0FBVCxFQUFnQjtBQUNkLGlCQUFPLEtBQUtBLEtBQUwsQ0FBV1AsS0FBWCxFQUFQO0FBQ0Q7O0FBQ0QsYUFBS00sV0FBTCxHQUFtQixPQUFuQjs7QUFDQXBFLFFBQUFBLElBQUksQ0FBQ3ZHLFFBQUwsQ0FBYyxNQUFkLEVBQXNCLElBQXRCLEVBQTRCLElBQTVCOztBQUNBLGVBQU91RyxJQUFJLENBQUN1RCxjQUFMLENBQW9CLEtBQXBCLENBQVA7QUFDRCxPQVBEOztBQVFBbEgsTUFBQUEsSUFBSSxDQUFDd0csS0FBTCxHQUFhLFlBQVk7QUFDdkIsWUFBSSxLQUFLd0IsS0FBVCxFQUFnQjtBQUNkLGlCQUFPckUsSUFBSSxDQUFDMkMsaUJBQUwsQ0FBdUIsS0FBSzBCLEtBQTVCLENBQVA7QUFDRDs7QUFDRCxZQUFJLEtBQUtGLGFBQVQsRUFBd0I7QUFDdEIsaUJBQU9uRSxJQUFJLENBQUMyQyxpQkFBTCxDQUF1QixLQUFLd0IsYUFBNUIsQ0FBUDtBQUNEO0FBQ0YsT0FQRDs7QUFRQTlILE1BQUFBLElBQUksQ0FBQ2tJLFVBQUwsR0FBa0IsWUFBWTtBQUM1QixlQUNFLENBQUMsS0FBS0YsS0FBTixJQUNBLEtBQUtGLGFBREwsSUFFQW5FLElBQUksQ0FBQzJDLGlCQUFMLENBQXVCLEtBQUt3QixhQUE1QixNQUErQyxTQUhqRDtBQUtELE9BTkQ7O0FBT0E5SCxNQUFBQSxJQUFJLENBQUMyQyxRQUFMLEdBQWdCLFlBQVk7QUFDMUIsZUFBTyxLQUFLQyxTQUFaO0FBQ0QsT0FGRDs7QUFHQTVDLE1BQUFBLElBQUksQ0FBQ21JLFFBQUwsR0FBZ0IsWUFBWTtBQUMxQixlQUFPLEtBQUtwRixTQUFaO0FBQ0QsT0FGRDtBQUdELEtBanNCNEI7QUFtc0I3QjtBQUNBO0FBQ0FxRixJQUFBQSxpQkFBaUIsRUFBRSwyQkFBVUosS0FBVixFQUFpQjtBQUNsQyxVQUFJSyxLQUFLLEdBQUdMLEtBQUssQ0FBQ00saUJBQU4sQ0FBd0IsT0FBeEIsQ0FBWjtBQUFBLFVBQ0UzSCxLQUFLLEdBQUcwSCxLQUFLLElBQUlBLEtBQUssQ0FBQ3ZILEtBQU4sQ0FBWSxHQUFaLENBRG5CO0FBQUEsVUFFRXlILGFBQWEsR0FBRzVILEtBQUssSUFBSUEsS0FBSyxDQUFDb0YsTUFBTixHQUFlLENBQXhCLElBQTZCeUMsUUFBUSxDQUFDN0gsS0FBSyxDQUFDLENBQUQsQ0FBTixFQUFXLEVBQVgsQ0FGdkQ7QUFHQSxhQUFPNEgsYUFBYSxJQUFJQSxhQUFhLEdBQUcsQ0FBeEM7QUFDRCxLQTFzQjRCO0FBNHNCN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBNUMsSUFBQUEsY0FBYyxFQUFFLHdCQUFVakksT0FBVixFQUFtQitLLFFBQW5CLEVBQTZCO0FBQzNDL0ssTUFBQUEsT0FBTyxDQUFDbUIsYUFBUixHQUF3Qm5CLE9BQU8sQ0FBQ21CLGFBQVIsSUFBeUIsQ0FBakQ7O0FBQ0EsVUFBSThFLElBQUksR0FBRyxJQUFYO0FBQUEsVUFDRXBCLElBQUksR0FBRzdFLE9BQU8sQ0FBQzBFLEtBQVIsQ0FBYyxDQUFkLENBRFQ7QUFBQSxVQUVFc0csRUFBRSxHQUFHbkcsSUFBSSxDQUFDQyxJQUZaO0FBQUEsVUFHRW1HLEVBQUUsR0FBR2pMLE9BQU8sQ0FBQ21CLGFBSGY7QUFBQSxVQUlFK0osR0FBRyxHQUFHbEwsT0FBTyxDQUFDa0IsWUFBUixJQUF3QjhKLEVBSmhDO0FBQUEsVUFLRWpNLEtBQUssR0FBRyxLQUFLd0UsVUFMZjtBQUFBLFVBTUVvRyxHQUFHLEdBQUc1TCxDQUFDLENBQUM2TCxRQUFGLEVBTlI7QUFBQSxVQU9FVixPQUFPLEdBQUdTLEdBQUcsQ0FBQ1QsT0FBSixFQVBaO0FBQUEsVUFRRW9CLEtBUkY7QUFBQSxVQVNFbEUsT0FURjs7QUFVQSxVQUNFLEVBQ0UsS0FBS2hDLFlBQUwsQ0FBa0JwRSxPQUFsQixLQUNBakIsS0FEQSxLQUVDa00sRUFBRSxJQUFJLENBQUNsTixDQUFDLENBQUNvQixJQUFGLENBQU8rTCxHQUFQLE1BQWdCLFVBQWhCLEdBQTZCQSxHQUFHLENBQUNsTCxPQUFELENBQWhDLEdBQTRDa0wsR0FBN0MsSUFBb0RGLEVBRjNELENBREYsS0FLQWhMLE9BQU8sQ0FBQ3NDLElBTlYsRUFPRTtBQUNBLGVBQU8sS0FBUDtBQUNEOztBQUNELFVBQUl5SSxRQUFKLEVBQWM7QUFDWixlQUFPLElBQVA7QUFDRDs7QUFDRCxVQUFJRSxFQUFFLElBQUlELEVBQVYsRUFBYztBQUNabkcsUUFBQUEsSUFBSSxDQUFDdUUsS0FBTCxHQUFhcEosT0FBTyxDQUFDMEIsSUFBUixDQUFhLGVBQWIsQ0FBYjtBQUNBLGVBQU8sS0FBSzhILGNBQUwsQ0FBb0IsS0FBcEIsRUFBMkJ4SixPQUFPLENBQUM0QixPQUFuQyxFQUE0QyxDQUNqRCxJQURpRCxFQUVqRCxPQUZpRCxFQUdqRGlELElBQUksQ0FBQ3VFLEtBSDRDLENBQTVDLENBQVA7QUFLRCxPQWhDMEMsQ0FpQzNDOzs7QUFDQWhELE1BQUFBLE9BQU0sR0FBRyxrQkFBWTtBQUNuQjtBQUNBLFlBQUkrRSxDQUFDLEdBQUdwTixDQUFDLENBQUNvSCxNQUFGLENBQVMsRUFBVCxFQUFhbkYsT0FBYixDQUFSO0FBQUEsWUFDRW9MLGFBQWEsR0FBR0QsQ0FBQyxDQUFDakcsU0FBRixDQUFZbkIsTUFEOUI7QUFFQW9ILFFBQUFBLENBQUMsQ0FBQy9ELElBQUYsR0FBU3JJLEtBQUssQ0FBQ3lHLElBQU4sQ0FDUFgsSUFETyxFQUVQb0csRUFGTyxFQUdQQSxFQUFFLElBQUlsTixDQUFDLENBQUNvQixJQUFGLENBQU8rTCxHQUFQLE1BQWdCLFVBQWhCLEdBQTZCQSxHQUFHLENBQUNDLENBQUQsQ0FBaEMsR0FBc0NELEdBQTFDLENBSEssRUFJUHJHLElBQUksQ0FBQzFGLElBSkUsQ0FBVCxDQUptQixDQVVuQjtBQUNBOztBQUNBZ00sUUFBQUEsQ0FBQyxDQUFDckYsU0FBRixHQUFjcUYsQ0FBQyxDQUFDL0QsSUFBRixDQUFPdEMsSUFBckIsQ0FabUIsQ0FhbkI7O0FBQ0FxRyxRQUFBQSxDQUFDLENBQUNoRSxZQUFGLEdBQ0UsV0FBVzhELEVBQVgsR0FBZ0IsR0FBaEIsSUFBdUJBLEVBQUUsR0FBR0UsQ0FBQyxDQUFDckYsU0FBUCxHQUFtQixDQUExQyxJQUErQyxHQUEvQyxHQUFxRGtGLEVBRHZELENBZG1CLENBZ0JuQjs7QUFDQS9FLFFBQUFBLElBQUksQ0FBQ3ZHLFFBQUwsQ0FBYyxpQkFBZCxFQUFpQyxJQUFqQyxFQUF1Q3lMLENBQXZDLEVBakJtQixDQWtCbkI7OztBQUNBbEYsUUFBQUEsSUFBSSxDQUFDZ0IsWUFBTCxDQUFrQmtFLENBQWxCLEVBbkJtQixDQW9CbkI7OztBQUNBbEYsUUFBQUEsSUFBSSxDQUFDRCxxQkFBTCxDQUEyQm1GLENBQTNCOztBQUNBYixRQUFBQSxLQUFLLEdBQUcsQ0FDTHJFLElBQUksQ0FBQ3ZHLFFBQUwsQ0FBYyxXQUFkLEVBQTJCLElBQTNCLEVBQWlDeUwsQ0FBakMsTUFBd0MsS0FBeEMsSUFBaURwTixDQUFDLENBQUNzTixJQUFGLENBQU9GLENBQVAsQ0FBbEQsSUFDQWxGLElBQUksQ0FBQ3VELGNBQUwsQ0FBb0IsS0FBcEIsRUFBMkIyQixDQUFDLENBQUN2SixPQUE3QixDQUZNLEVBSUxjLElBSkssQ0FJQSxVQUFVNEksTUFBVixFQUFrQkMsVUFBbEIsRUFBOEJqQixLQUE5QixFQUFxQztBQUN6Q1csVUFBQUEsRUFBRSxHQUFHaEYsSUFBSSxDQUFDeUUsaUJBQUwsQ0FBdUJKLEtBQXZCLEtBQWlDVyxFQUFFLEdBQUdFLENBQUMsQ0FBQ3JGLFNBQTdDLENBRHlDLENBRXpDO0FBQ0E7QUFDQTs7QUFDQSxjQUFJc0YsYUFBYSxHQUFHRCxDQUFDLENBQUNyRixTQUFsQixHQUE4QnFGLENBQUMsQ0FBQ2pHLFNBQUYsQ0FBWW5CLE1BQTlDLEVBQXNEO0FBQ3BEa0MsWUFBQUEsSUFBSSxDQUFDUixXQUFMLENBQ0UxSCxDQUFDLENBQUM0QixLQUFGLENBQVEsVUFBUixFQUFvQjtBQUNsQitGLGNBQUFBLGdCQUFnQixFQUFFLElBREE7QUFFbEIzQixjQUFBQSxNQUFNLEVBQUVrSCxFQUFFLEdBQUdFLENBQUMsQ0FBQ2hLLGFBRkc7QUFHbEJ3RCxjQUFBQSxLQUFLLEVBQUVzRyxFQUFFLEdBQUdFLENBQUMsQ0FBQ2hLO0FBSEksYUFBcEIsQ0FERixFQU1FZ0ssQ0FORjtBQVFEOztBQUNEbkwsVUFBQUEsT0FBTyxDQUFDbUIsYUFBUixHQUF3QmdLLENBQUMsQ0FBQ2hLLGFBQUYsR0FBa0I4SixFQUExQztBQUNBRSxVQUFBQSxDQUFDLENBQUNHLE1BQUYsR0FBV0EsTUFBWDtBQUNBSCxVQUFBQSxDQUFDLENBQUNJLFVBQUYsR0FBZUEsVUFBZjtBQUNBSixVQUFBQSxDQUFDLENBQUNiLEtBQUYsR0FBVUEsS0FBVjs7QUFDQXJFLFVBQUFBLElBQUksQ0FBQ3ZHLFFBQUwsQ0FBYyxXQUFkLEVBQTJCLElBQTNCLEVBQWlDeUwsQ0FBakM7O0FBQ0FsRixVQUFBQSxJQUFJLENBQUN2RyxRQUFMLENBQWMsYUFBZCxFQUE2QixJQUE3QixFQUFtQ3lMLENBQW5DOztBQUNBLGNBQUlGLEVBQUUsR0FBR0QsRUFBVCxFQUFhO0FBQ1g7QUFDQTtBQUNBNUUsWUFBQUEsT0FBTTtBQUNQLFdBSkQsTUFJTztBQUNMdUQsWUFBQUEsR0FBRyxDQUFDRSxXQUFKLENBQWdCc0IsQ0FBQyxDQUFDdkosT0FBbEIsRUFBMkIsQ0FBQzBKLE1BQUQsRUFBU0MsVUFBVCxFQUFxQmpCLEtBQXJCLENBQTNCO0FBQ0Q7QUFDRixTQWhDSyxFQWlDTGpCLElBakNLLENBaUNBLFVBQVVpQixLQUFWLEVBQWlCaUIsVUFBakIsRUFBNkJsQixXQUE3QixFQUEwQztBQUM5Q2MsVUFBQUEsQ0FBQyxDQUFDYixLQUFGLEdBQVVBLEtBQVY7QUFDQWEsVUFBQUEsQ0FBQyxDQUFDSSxVQUFGLEdBQWVBLFVBQWY7QUFDQUosVUFBQUEsQ0FBQyxDQUFDZCxXQUFGLEdBQWdCQSxXQUFoQjs7QUFDQXBFLFVBQUFBLElBQUksQ0FBQ3ZHLFFBQUwsQ0FBYyxXQUFkLEVBQTJCLElBQTNCLEVBQWlDeUwsQ0FBakM7O0FBQ0FsRixVQUFBQSxJQUFJLENBQUN2RyxRQUFMLENBQWMsYUFBZCxFQUE2QixJQUE3QixFQUFtQ3lMLENBQW5DOztBQUNBeEIsVUFBQUEsR0FBRyxDQUFDRyxVQUFKLENBQWVxQixDQUFDLENBQUN2SixPQUFqQixFQUEwQixDQUFDMEksS0FBRCxFQUFRaUIsVUFBUixFQUFvQmxCLFdBQXBCLENBQTFCO0FBQ0QsU0F4Q0ssRUF5Q0xkLE1BekNLLENBeUNFLFlBQVk7QUFDbEJ0RCxVQUFBQSxJQUFJLENBQUNNLHVCQUFMLENBQTZCNEUsQ0FBN0I7QUFDRCxTQTNDSyxDQUFSO0FBNENELE9BbEVEOztBQW1FQSxXQUFLbEMsZUFBTCxDQUFxQkMsT0FBckI7O0FBQ0FBLE1BQUFBLE9BQU8sQ0FBQ2EsS0FBUixHQUFnQixZQUFZO0FBQzFCLGVBQU9PLEtBQUssQ0FBQ1AsS0FBTixFQUFQO0FBQ0QsT0FGRDs7QUFHQTNELE1BQUFBLE9BQU07O0FBQ04sYUFBTzhDLE9BQVA7QUFDRCxLQTV6QjRCO0FBOHpCN0JzQyxJQUFBQSxXQUFXLEVBQUUscUJBQVVuTSxDQUFWLEVBQWFpRCxJQUFiLEVBQW1CO0FBQzlCLFVBQUksS0FBS21KLE9BQUwsS0FBaUIsQ0FBckIsRUFBd0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsYUFBSy9MLFFBQUwsQ0FBYyxPQUFkLEVBSnNCLENBS3RCOzs7QUFDQSxhQUFLcUcsYUFBTCxHQUFxQixJQUFJLEtBQUtyQyxhQUFULEVBQXJCLENBTnNCLENBT3RCOztBQUNBLGFBQUt3QixTQUFMLENBQWVuQixNQUFmLEdBQXdCLEtBQUttQixTQUFMLENBQWVQLEtBQWYsR0FBdUIsQ0FBL0M7QUFDQSxhQUFLTyxTQUFMLENBQWVsQixPQUFmLEdBQXlCLENBQXpCO0FBQ0QsT0FYNkIsQ0FZOUI7QUFDQTtBQUNBOzs7QUFDQSxXQUFLb0IsbUJBQUwsQ0FBeUI5QyxJQUF6Qjs7QUFDQSxXQUFLeUMsbUJBQUwsQ0FBeUJ6QyxJQUF6Qjs7QUFDQUEsTUFBQUEsSUFBSSxDQUFDNEMsU0FBTCxDQUFlbkIsTUFBZixHQUF3QnpCLElBQUksQ0FBQ3lCLE1BQUwsR0FBY3pCLElBQUksQ0FBQ25CLGFBQUwsSUFBc0IsQ0FBNUQ7QUFDQW1CLE1BQUFBLElBQUksQ0FBQzRDLFNBQUwsQ0FBZVAsS0FBZixHQUF1QnJDLElBQUksQ0FBQ3FDLEtBQUwsR0FBYSxLQUFLRixTQUFMLENBQWVuQyxJQUFJLENBQUNvQyxLQUFwQixLQUE4QixDQUFsRTtBQUNBcEMsTUFBQUEsSUFBSSxDQUFDNEMsU0FBTCxDQUFlbEIsT0FBZixHQUF5QjFCLElBQUksQ0FBQzBCLE9BQUwsR0FBZSxDQUF4QztBQUNBLFdBQUt5SCxPQUFMLElBQWdCLENBQWhCLENBcEI4QixDQXFCOUI7O0FBQ0EsV0FBS3ZHLFNBQUwsQ0FBZW5CLE1BQWYsSUFBeUJ6QixJQUFJLENBQUN5QixNQUE5QjtBQUNBLFdBQUttQixTQUFMLENBQWVQLEtBQWYsSUFBd0JyQyxJQUFJLENBQUNxQyxLQUE3QjtBQUNELEtBdDFCNEI7QUF3MUI3QitHLElBQUFBLE9BQU8sRUFBRSxpQkFBVUosTUFBVixFQUFrQkMsVUFBbEIsRUFBOEJqQixLQUE5QixFQUFxQ3RLLE9BQXJDLEVBQThDO0FBQ3JELFVBQUkyRSxLQUFLLEdBQUczRSxPQUFPLENBQUNrRixTQUFSLENBQWtCUCxLQUE5QjtBQUFBLFVBQ0U4RixRQUFRLEdBQUd6SyxPQUFPLENBQUNxRixTQURyQjs7QUFFQSxVQUFJckYsT0FBTyxDQUFDa0YsU0FBUixDQUFrQm5CLE1BQWxCLEdBQTJCWSxLQUEvQixFQUFzQztBQUNwQztBQUNBO0FBQ0EsYUFBS2MsV0FBTCxDQUNFMUgsQ0FBQyxDQUFDNEIsS0FBRixDQUFRLFVBQVIsRUFBb0I7QUFDbEIrRixVQUFBQSxnQkFBZ0IsRUFBRSxJQURBO0FBRWxCM0IsVUFBQUEsTUFBTSxFQUFFWSxLQUZVO0FBR2xCQSxVQUFBQSxLQUFLLEVBQUVBO0FBSFcsU0FBcEIsQ0FERixFQU1FM0UsT0FORjtBQVFEOztBQUNEeUssTUFBQUEsUUFBUSxDQUFDYSxNQUFULEdBQWtCdEwsT0FBTyxDQUFDc0wsTUFBUixHQUFpQkEsTUFBbkM7QUFDQWIsTUFBQUEsUUFBUSxDQUFDYyxVQUFULEdBQXNCdkwsT0FBTyxDQUFDdUwsVUFBUixHQUFxQkEsVUFBM0M7QUFDQWQsTUFBQUEsUUFBUSxDQUFDSCxLQUFULEdBQWlCdEssT0FBTyxDQUFDc0ssS0FBUixHQUFnQkEsS0FBakM7O0FBQ0EsV0FBSzVLLFFBQUwsQ0FBYyxNQUFkLEVBQXNCLElBQXRCLEVBQTRCTSxPQUE1QjtBQUNELEtBMzJCNEI7QUE2MkI3QjJMLElBQUFBLE9BQU8sRUFBRSxpQkFBVXJCLEtBQVYsRUFBaUJpQixVQUFqQixFQUE2QmxCLFdBQTdCLEVBQTBDckssT0FBMUMsRUFBbUQ7QUFDMUQsVUFBSXlLLFFBQVEsR0FBR3pLLE9BQU8sQ0FBQ3FGLFNBQXZCOztBQUNBLFVBQUlyRixPQUFPLENBQUNvQixtQkFBWixFQUFpQztBQUMvQjtBQUNBO0FBQ0EsYUFBSzhELFNBQUwsQ0FBZW5CLE1BQWYsSUFBeUIvRCxPQUFPLENBQUNrRixTQUFSLENBQWtCbkIsTUFBM0M7QUFDQSxhQUFLbUIsU0FBTCxDQUFlUCxLQUFmLElBQXdCM0UsT0FBTyxDQUFDa0YsU0FBUixDQUFrQlAsS0FBMUM7QUFDRDs7QUFDRDhGLE1BQUFBLFFBQVEsQ0FBQ0gsS0FBVCxHQUFpQnRLLE9BQU8sQ0FBQ3NLLEtBQVIsR0FBZ0JBLEtBQWpDO0FBQ0FHLE1BQUFBLFFBQVEsQ0FBQ2MsVUFBVCxHQUFzQnZMLE9BQU8sQ0FBQ3VMLFVBQVIsR0FBcUJBLFVBQTNDO0FBQ0FkLE1BQUFBLFFBQVEsQ0FBQ0osV0FBVCxHQUF1QnJLLE9BQU8sQ0FBQ3FLLFdBQVIsR0FBc0JBLFdBQTdDOztBQUNBLFdBQUszSyxRQUFMLENBQWMsTUFBZCxFQUFzQixJQUF0QixFQUE0Qk0sT0FBNUI7QUFDRCxLQXozQjRCO0FBMjNCN0I0TCxJQUFBQSxTQUFTLEVBQUUsbUJBQVVDLGFBQVYsRUFBeUJOLFVBQXpCLEVBQXFDTyxZQUFyQyxFQUFtRDlMLE9BQW5ELEVBQTREO0FBQ3JFO0FBQ0E7QUFDQSxXQUFLTixRQUFMLENBQWMsUUFBZCxFQUF3QixJQUF4QixFQUE4Qk0sT0FBOUI7QUFDRCxLQS8zQjRCO0FBaTRCN0J1SyxJQUFBQSxPQUFPLEVBQUUsaUJBQVVsTCxDQUFWLEVBQWFpRCxJQUFiLEVBQW1CO0FBQzFCLFVBQUksQ0FBQ0EsSUFBSSxDQUFDSyxNQUFWLEVBQWtCO0FBQ2hCLGFBQUtxSCxzQkFBTCxDQUE0QjNLLENBQTVCLEVBQStCaUQsSUFBL0I7QUFDRDs7QUFDRCxVQUFJMkQsSUFBSSxHQUFHLElBQVg7QUFBQSxVQUNFcUUsS0FERjtBQUFBLFVBRUV5QixPQUZGO0FBQUEsVUFHRUMsSUFIRjtBQUFBLFVBSUVDLElBSkY7QUFBQSxVQUtFak0sT0FBTyxHQUFHaUcsSUFBSSxDQUFDMEMsZ0JBQUwsQ0FBc0JyRyxJQUF0QixDQUxaO0FBQUEsVUFNRTRKLElBQUksR0FBRyxTQUFQQSxJQUFPLEdBQVk7QUFDakJqRyxRQUFBQSxJQUFJLENBQUNrRyxRQUFMLElBQWlCLENBQWpCLENBRGlCLENBRWpCOztBQUNBbk0sUUFBQUEsT0FBTyxDQUFDK0YsYUFBUixHQUF3QixJQUFJRSxJQUFJLENBQUN2QyxhQUFULEVBQXhCO0FBQ0E0RyxRQUFBQSxLQUFLLEdBQ0hBLEtBQUssSUFDTCxDQUNHLENBQUN5QixPQUFPLElBQ1A5RixJQUFJLENBQUN2RyxRQUFMLENBQ0UsTUFERixFQUVFM0IsQ0FBQyxDQUFDNEIsS0FBRixDQUFRLE1BQVIsRUFBZ0I7QUFBRUMsVUFBQUEsY0FBYyxFQUFFUDtBQUFsQixTQUFoQixDQUZGLEVBR0VXLE9BSEYsTUFJTSxLQUxQLEtBTUNpRyxJQUFJLENBQUN1RCxjQUFMLENBQW9CLEtBQXBCLEVBQTJCeEosT0FBTyxDQUFDNEIsT0FBbkMsRUFBNENtSyxPQUE1QyxDQU5GLElBT0E5RixJQUFJLENBQUNnQyxjQUFMLENBQW9CakksT0FBcEIsQ0FQQSxJQVFBakMsQ0FBQyxDQUFDc04sSUFBRixDQUFPckwsT0FBUCxDQVRGLEVBV0cwQyxJQVhILENBV1EsVUFBVTRJLE1BQVYsRUFBa0JDLFVBQWxCLEVBQThCakIsS0FBOUIsRUFBcUM7QUFDekNyRSxVQUFBQSxJQUFJLENBQUN5RixPQUFMLENBQWFKLE1BQWIsRUFBcUJDLFVBQXJCLEVBQWlDakIsS0FBakMsRUFBd0N0SyxPQUF4QztBQUNELFNBYkgsRUFjR3FKLElBZEgsQ0FjUSxVQUFVaUIsS0FBVixFQUFpQmlCLFVBQWpCLEVBQTZCbEIsV0FBN0IsRUFBMEM7QUFDOUNwRSxVQUFBQSxJQUFJLENBQUMwRixPQUFMLENBQWFyQixLQUFiLEVBQW9CaUIsVUFBcEIsRUFBZ0NsQixXQUFoQyxFQUE2Q3JLLE9BQTdDO0FBQ0QsU0FoQkgsRUFpQkd1SixNQWpCSCxDQWlCVSxVQUFVc0MsYUFBVixFQUF5Qk4sVUFBekIsRUFBcUNPLFlBQXJDLEVBQW1EO0FBQ3pEN0YsVUFBQUEsSUFBSSxDQUFDTSx1QkFBTCxDQUE2QnZHLE9BQTdCOztBQUNBaUcsVUFBQUEsSUFBSSxDQUFDMkYsU0FBTCxDQUNFQyxhQURGLEVBRUVOLFVBRkYsRUFHRU8sWUFIRixFQUlFOUwsT0FKRjs7QUFNQWlHLFVBQUFBLElBQUksQ0FBQ2tHLFFBQUwsSUFBaUIsQ0FBakI7QUFDQWxHLFVBQUFBLElBQUksQ0FBQ3dGLE9BQUwsSUFBZ0IsQ0FBaEI7O0FBQ0EsY0FDRXpMLE9BQU8sQ0FBQ1ksc0JBQVIsSUFDQVosT0FBTyxDQUFDWSxzQkFBUixHQUFpQ3FGLElBQUksQ0FBQ2tHLFFBRnhDLEVBR0U7QUFDQTtBQUNBO0FBQ0EsZ0JBQUlDLFFBQVEsR0FBR25HLElBQUksQ0FBQ29HLE1BQUwsQ0FBWUMsS0FBWixFQUFmOztBQUNBLG1CQUFPRixRQUFQLEVBQWlCO0FBQ2Ysa0JBQUluRyxJQUFJLENBQUMyQyxpQkFBTCxDQUF1QndELFFBQXZCLE1BQXFDLFNBQXpDLEVBQW9EO0FBQ2xEQSxnQkFBQUEsUUFBUSxDQUFDRyxPQUFUO0FBQ0E7QUFDRDs7QUFDREgsY0FBQUEsUUFBUSxHQUFHbkcsSUFBSSxDQUFDb0csTUFBTCxDQUFZQyxLQUFaLEVBQVg7QUFDRDtBQUNGOztBQUNELGNBQUlyRyxJQUFJLENBQUN3RixPQUFMLEtBQWlCLENBQXJCLEVBQXdCO0FBQ3RCO0FBQ0E7QUFDQXhGLFlBQUFBLElBQUksQ0FBQ3ZHLFFBQUwsQ0FBYyxNQUFkO0FBQ0Q7QUFDRixTQS9DSCxDQUZGO0FBa0RBLGVBQU80SyxLQUFQO0FBQ0QsT0E3REg7O0FBOERBLFdBQUtrQixXQUFMLENBQWlCbk0sQ0FBakIsRUFBb0JXLE9BQXBCOztBQUNBLFVBQ0UsS0FBS0EsT0FBTCxDQUFhVyxpQkFBYixJQUNDLEtBQUtYLE9BQUwsQ0FBYVksc0JBQWIsSUFDQyxLQUFLWixPQUFMLENBQWFZLHNCQUFiLElBQXVDLEtBQUt1TCxRQUhoRCxFQUlFO0FBQ0EsWUFBSSxLQUFLbk0sT0FBTCxDQUFhWSxzQkFBYixHQUFzQyxDQUExQyxFQUE2QztBQUMzQ29MLFVBQUFBLElBQUksR0FBR2pPLENBQUMsQ0FBQzZMLFFBQUYsRUFBUDs7QUFDQSxlQUFLeUMsTUFBTCxDQUFZN0gsSUFBWixDQUFpQndILElBQWpCOztBQUNBQyxVQUFBQSxJQUFJLEdBQUdELElBQUksQ0FBQy9GLElBQUksQ0FBQ2pELFlBQU4sQ0FBSixDQUF3QmtKLElBQXhCLENBQVA7QUFDRCxTQUpELE1BSU87QUFDTCxlQUFLTSxTQUFMLEdBQWlCLEtBQUtBLFNBQUwsQ0FBZXZHLElBQUksQ0FBQ2pELFlBQXBCLEVBQWtDa0osSUFBbEMsRUFBd0NBLElBQXhDLENBQWpCO0FBQ0FELFVBQUFBLElBQUksR0FBRyxLQUFLTyxTQUFaO0FBQ0QsU0FSRCxDQVNBO0FBQ0E7QUFDQTs7O0FBQ0FQLFFBQUFBLElBQUksQ0FBQ2xDLEtBQUwsR0FBYSxZQUFZO0FBQ3ZCZ0MsVUFBQUEsT0FBTyxHQUFHLENBQUMzTCxTQUFELEVBQVksT0FBWixFQUFxQixPQUFyQixDQUFWOztBQUNBLGNBQUksQ0FBQ2tLLEtBQUwsRUFBWTtBQUNWLGdCQUFJMEIsSUFBSixFQUFVO0FBQ1JBLGNBQUFBLElBQUksQ0FBQ2xDLFVBQUwsQ0FBZ0I5SixPQUFPLENBQUM0QixPQUF4QixFQUFpQ21LLE9BQWpDO0FBQ0Q7O0FBQ0QsbUJBQU9HLElBQUksRUFBWDtBQUNEOztBQUNELGlCQUFPNUIsS0FBSyxDQUFDUCxLQUFOLEVBQVA7QUFDRCxTQVREOztBQVVBLGVBQU8sS0FBS2QsZUFBTCxDQUFxQmdELElBQXJCLENBQVA7QUFDRDs7QUFDRCxhQUFPQyxJQUFJLEVBQVg7QUFDRCxLQWorQjRCO0FBbStCN0JPLElBQUFBLE1BQU0sRUFBRSxnQkFBVXBOLENBQVYsRUFBYWlELElBQWIsRUFBbUI7QUFDekIsVUFBSTJELElBQUksR0FBRyxJQUFYO0FBQUEsVUFDRXFGLE1BQU0sR0FBRyxJQURYO0FBQUEsVUFFRXRMLE9BQU8sR0FBR2pDLENBQUMsQ0FBQ29ILE1BQUYsQ0FBUyxFQUFULEVBQWEsS0FBS25GLE9BQWxCLEVBQTJCc0MsSUFBM0IsQ0FGWjtBQUFBLFVBR0VvQyxLQUFLLEdBQUdwQyxJQUFJLENBQUNvQyxLQUhmO0FBQUEsVUFJRWdJLFdBQVcsR0FBR2hJLEtBQUssQ0FBQzJELE1BSnRCO0FBQUEsVUFLRXNFLEtBQUssR0FBRzNNLE9BQU8sQ0FBQ1EscUJBTGxCO0FBQUEsVUFNRW9NLFNBQVMsR0FBRzVNLE9BQU8sQ0FBQ1Msd0JBTnRCO0FBQUEsVUFPRW9NLFFBQVEsR0FBRzdNLE9BQU8sQ0FBQ1UsZ0NBUHJCO0FBQUEsVUFRRW9NLFNBQVMsR0FBRyxDQVJkO0FBQUEsVUFTRXhNLFNBQVMsR0FBRyxLQUFLNEgsYUFBTCxDQUFtQmxJLE9BQW5CLENBVGQ7QUFBQSxVQVVFK00sWUFWRjtBQUFBLFVBV0VDLGNBWEY7QUFBQSxVQVlFQyxPQVpGO0FBQUEsVUFhRTdFLENBYkY7QUFBQSxVQWNFOEUsQ0FBQyxHQUFHLENBZE47O0FBZUEsVUFBSSxDQUFDUixXQUFMLEVBQWtCO0FBQ2hCLGVBQU8sS0FBUDtBQUNEOztBQUNELFVBQUlFLFNBQVMsSUFBSWxJLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU0ksSUFBVCxLQUFrQjFFLFNBQW5DLEVBQThDO0FBQzVDd00sUUFBQUEsU0FBUyxHQUFHeE0sU0FBWjtBQUNEOztBQUNELFVBQ0UsRUFBRUosT0FBTyxDQUFDTyxpQkFBUixJQUE2Qm9NLEtBQTdCLElBQXNDQyxTQUF4QyxLQUNBLENBQUMsS0FBS3hJLFlBQUwsQ0FBa0JwRSxPQUFsQixDQUZILEVBR0U7QUFDQWlOLFFBQUFBLE9BQU8sR0FBRyxDQUFDdkksS0FBRCxDQUFWO0FBQ0FxSSxRQUFBQSxZQUFZLEdBQUcsQ0FBQ3pNLFNBQUQsQ0FBZjtBQUNELE9BTkQsTUFNTyxJQUFJLEVBQUVOLE9BQU8sQ0FBQ08saUJBQVIsSUFBNkJxTSxTQUEvQixLQUE2Q0QsS0FBakQsRUFBd0Q7QUFDN0RNLFFBQUFBLE9BQU8sR0FBRyxFQUFWO0FBQ0FGLFFBQUFBLFlBQVksR0FBRyxFQUFmOztBQUNBLGFBQUszRSxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdzRSxXQUFoQixFQUE2QnRFLENBQUMsSUFBSXVFLEtBQWxDLEVBQXlDO0FBQ3ZDTSxVQUFBQSxPQUFPLENBQUN6SSxJQUFSLENBQWFFLEtBQUssQ0FBQzNGLEtBQU4sQ0FBWXFKLENBQVosRUFBZUEsQ0FBQyxHQUFHdUUsS0FBbkIsQ0FBYjtBQUNBSyxVQUFBQSxjQUFjLEdBQUcxTSxTQUFTLENBQUN2QixLQUFWLENBQWdCcUosQ0FBaEIsRUFBbUJBLENBQUMsR0FBR3VFLEtBQXZCLENBQWpCOztBQUNBLGNBQUksQ0FBQ0ssY0FBYyxDQUFDM0UsTUFBcEIsRUFBNEI7QUFDMUIyRSxZQUFBQSxjQUFjLEdBQUcxTSxTQUFqQjtBQUNEOztBQUNEeU0sVUFBQUEsWUFBWSxDQUFDdkksSUFBYixDQUFrQndJLGNBQWxCO0FBQ0Q7QUFDRixPQVhNLE1BV0EsSUFBSSxDQUFDaE4sT0FBTyxDQUFDTyxpQkFBVCxJQUE4QnFNLFNBQWxDLEVBQTZDO0FBQ2xESyxRQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNBRixRQUFBQSxZQUFZLEdBQUcsRUFBZjs7QUFDQSxhQUFLM0UsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHc0UsV0FBaEIsRUFBNkJ0RSxDQUFDLEdBQUdBLENBQUMsR0FBRyxDQUFyQyxFQUF3QztBQUN0QzBFLFVBQUFBLFNBQVMsSUFBSXBJLEtBQUssQ0FBQzBELENBQUQsQ0FBTCxDQUFTdEQsSUFBVCxHQUFnQitILFFBQTdCOztBQUNBLGNBQ0V6RSxDQUFDLEdBQUcsQ0FBSixLQUFVc0UsV0FBVixJQUNBSSxTQUFTLEdBQUdwSSxLQUFLLENBQUMwRCxDQUFDLEdBQUcsQ0FBTCxDQUFMLENBQWF0RCxJQUF6QixHQUFnQytILFFBQWhDLEdBQTJDRCxTQUQzQyxJQUVDRCxLQUFLLElBQUl2RSxDQUFDLEdBQUcsQ0FBSixHQUFROEUsQ0FBUixJQUFhUCxLQUh6QixFQUlFO0FBQ0FNLFlBQUFBLE9BQU8sQ0FBQ3pJLElBQVIsQ0FBYUUsS0FBSyxDQUFDM0YsS0FBTixDQUFZbU8sQ0FBWixFQUFlOUUsQ0FBQyxHQUFHLENBQW5CLENBQWI7QUFDQTRFLFlBQUFBLGNBQWMsR0FBRzFNLFNBQVMsQ0FBQ3ZCLEtBQVYsQ0FBZ0JtTyxDQUFoQixFQUFtQjlFLENBQUMsR0FBRyxDQUF2QixDQUFqQjs7QUFDQSxnQkFBSSxDQUFDNEUsY0FBYyxDQUFDM0UsTUFBcEIsRUFBNEI7QUFDMUIyRSxjQUFBQSxjQUFjLEdBQUcxTSxTQUFqQjtBQUNEOztBQUNEeU0sWUFBQUEsWUFBWSxDQUFDdkksSUFBYixDQUFrQndJLGNBQWxCO0FBQ0FFLFlBQUFBLENBQUMsR0FBRzlFLENBQUMsR0FBRyxDQUFSO0FBQ0EwRSxZQUFBQSxTQUFTLEdBQUcsQ0FBWjtBQUNEO0FBQ0Y7QUFDRixPQXBCTSxNQW9CQTtBQUNMQyxRQUFBQSxZQUFZLEdBQUd6TSxTQUFmO0FBQ0Q7O0FBQ0RnQyxNQUFBQSxJQUFJLENBQUM2SyxhQUFMLEdBQXFCekksS0FBckI7QUFDQTNHLE1BQUFBLENBQUMsQ0FBQytELElBQUYsQ0FBT21MLE9BQU8sSUFBSXZJLEtBQWxCLEVBQXlCLFVBQVVFLEtBQVYsRUFBaUJ3SSxPQUFqQixFQUEwQjtBQUNqRCxZQUFJQyxPQUFPLEdBQUd0UCxDQUFDLENBQUNvSCxNQUFGLENBQVMsRUFBVCxFQUFhN0MsSUFBYixDQUFkO0FBQ0ErSyxRQUFBQSxPQUFPLENBQUMzSSxLQUFSLEdBQWdCdUksT0FBTyxHQUFHRyxPQUFILEdBQWEsQ0FBQ0EsT0FBRCxDQUFwQztBQUNBQyxRQUFBQSxPQUFPLENBQUMvTSxTQUFSLEdBQW9CeU0sWUFBWSxDQUFDbkksS0FBRCxDQUFoQzs7QUFDQXFCLFFBQUFBLElBQUksQ0FBQ2IsbUJBQUwsQ0FBeUJpSSxPQUF6Qjs7QUFDQXBILFFBQUFBLElBQUksQ0FBQ2xCLG1CQUFMLENBQXlCc0ksT0FBekI7O0FBQ0FwSCxRQUFBQSxJQUFJLENBQUMrRCxzQkFBTCxDQUE0QjNLLENBQTVCLEVBQStCZ08sT0FBL0I7O0FBQ0EvQixRQUFBQSxNQUFNLEdBQUdyRixJQUFJLENBQUN2RyxRQUFMLENBQ1AsS0FETyxFQUVQM0IsQ0FBQyxDQUFDNEIsS0FBRixDQUFRLEtBQVIsRUFBZTtBQUFFQyxVQUFBQSxjQUFjLEVBQUVQO0FBQWxCLFNBQWYsQ0FGTyxFQUdQZ08sT0FITyxDQUFUO0FBS0EsZUFBTy9CLE1BQVA7QUFDRCxPQWJEO0FBY0EsYUFBT0EsTUFBUDtBQUNELEtBampDNEI7QUFtakM3QmdDLElBQUFBLGlCQUFpQixFQUFFLDJCQUFVaEwsSUFBVixFQUFnQjtBQUNqQyxVQUFJNkYsS0FBSyxHQUFHN0YsSUFBSSxDQUFDckUsU0FBakI7QUFBQSxVQUNFc1AsVUFBVSxHQUFHcEYsS0FBSyxDQUFDcUYsS0FBTixDQUFZLElBQVosQ0FEZjtBQUFBLFVBRUVDLFlBQVksR0FBR3RGLEtBQUssQ0FBQ3VGLEVBQU4sQ0FBU3hOLFFBQVEsQ0FBQ3lOLGFBQWxCLENBRmpCLENBRGlDLENBSWpDOztBQUNBckwsTUFBQUEsSUFBSSxDQUFDc0wsY0FBTCxHQUFzQkwsVUFBdEI7QUFDQXhQLE1BQUFBLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUJ5SixNQUFuQixDQUEwQitGLFVBQTFCLEVBQXNDLENBQXRDLEVBQXlDTSxLQUF6QyxHQU5pQyxDQU9qQztBQUNBOztBQUNBMUYsTUFBQUEsS0FBSyxDQUFDMkYsS0FBTixDQUFZUCxVQUFaLEVBQXdCUSxNQUF4QixHQVRpQyxDQVVqQztBQUNBOztBQUNBLFVBQUlOLFlBQUosRUFBa0I7QUFDaEJGLFFBQUFBLFVBQVUsQ0FBQ1MsT0FBWCxDQUFtQixPQUFuQjtBQUNELE9BZGdDLENBZWpDOzs7QUFDQWpRLE1BQUFBLENBQUMsQ0FBQ2tRLFNBQUYsQ0FBWTlGLEtBQUssQ0FBQzNCLEdBQU4sQ0FBVSxRQUFWLENBQVosRUFoQmlDLENBaUJqQztBQUNBO0FBQ0E7O0FBQ0EsV0FBS3hHLE9BQUwsQ0FBYS9CLFNBQWIsR0FBeUIsS0FBSytCLE9BQUwsQ0FBYS9CLFNBQWIsQ0FBdUIwSSxHQUF2QixDQUEyQixVQUFVeUIsQ0FBVixFQUFhOEYsRUFBYixFQUFpQjtBQUNuRSxZQUFJQSxFQUFFLEtBQUsvRixLQUFLLENBQUMsQ0FBRCxDQUFoQixFQUFxQjtBQUNuQixpQkFBT29GLFVBQVUsQ0FBQyxDQUFELENBQWpCO0FBQ0Q7O0FBQ0QsZUFBT1csRUFBUDtBQUNELE9BTHdCLENBQXpCLENBcEJpQyxDQTBCakM7QUFDQTs7QUFDQSxVQUFJL0YsS0FBSyxDQUFDLENBQUQsQ0FBTCxLQUFhLEtBQUtpRixPQUFMLENBQWEsQ0FBYixDQUFqQixFQUFrQztBQUNoQyxhQUFLQSxPQUFMLEdBQWVHLFVBQWY7QUFDRDtBQUNGLEtBbGxDNEI7QUFvbEM3QlksSUFBQUEsb0JBQW9CLEVBQUUsOEJBQVVDLEtBQVYsRUFBaUJDLElBQWpCLEVBQXVCO0FBQzNDLFVBQUlwSSxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0UwRCxHQUFHLEdBQUc1TCxDQUFDLENBQUM2TCxRQUFGLEVBRFI7QUFBQSxVQUVFMEUsT0FBTyxHQUFHLEVBRlo7QUFBQSxVQUdFQyxTQUhGO0FBQUEsVUFJRUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBVW5QLENBQVYsRUFBYTtBQUMxQixZQUFJQSxDQUFDLElBQUksQ0FBQ0EsQ0FBQyxDQUFDK08sS0FBWixFQUFtQjtBQUNqQi9PLFVBQUFBLENBQUMsQ0FBQytPLEtBQUYsR0FBVUEsS0FBVjtBQUNELFNBSHlCLENBSTFCO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQXpFLFFBQUFBLEdBQUcsQ0FBQzRDLE9BQUosQ0FBWSxDQUFDbE4sQ0FBRCxDQUFaO0FBQ0QsT0FiSDtBQUFBLFVBY0VvUCxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQVVILE9BQVYsRUFBbUI7QUFDbENySSxRQUFBQSxJQUFJLENBQ0R5SSxzQkFESCxDQUMwQkosT0FEMUIsRUFDbUNELElBQUksR0FBR0QsS0FBSyxDQUFDN0osSUFBYixHQUFvQixHQUR2RCxFQUVHN0IsSUFGSCxDQUVRLFVBQVVnQyxLQUFWLEVBQWlCO0FBQ3JCaUYsVUFBQUEsR0FBRyxDQUFDNEMsT0FBSixDQUFZN0gsS0FBWjtBQUNELFNBSkgsRUFLRzJFLElBTEgsQ0FLUW1GLFlBTFI7QUFNRCxPQXJCSDtBQUFBLFVBc0JFRyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxHQUFZO0FBQ3hCSixRQUFBQSxTQUFTLENBQUNJLFdBQVYsQ0FBc0IsVUFBVUMsT0FBVixFQUFtQjtBQUN2QyxjQUFJLENBQUNBLE9BQU8sQ0FBQ3ZHLE1BQWIsRUFBcUI7QUFDbkJvRyxZQUFBQSxjQUFjLENBQUNILE9BQUQsQ0FBZDtBQUNELFdBRkQsTUFFTztBQUNMQSxZQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ08sTUFBUixDQUFlRCxPQUFmLENBQVY7QUFDQUQsWUFBQUEsV0FBVztBQUNaO0FBQ0YsU0FQRCxFQU9HSCxZQVBIO0FBUUQsT0EvQkgsQ0FEMkMsQ0FpQzNDOzs7QUFDQUgsTUFBQUEsSUFBSSxHQUFHQSxJQUFJLElBQUksRUFBZjs7QUFDQSxVQUFJRCxLQUFLLENBQUNVLE1BQVYsRUFBa0I7QUFDaEIsWUFBSVYsS0FBSyxDQUFDVyxLQUFWLEVBQWlCO0FBQ2Y7QUFDQVgsVUFBQUEsS0FBSyxDQUFDVyxLQUFOLENBQVlDLFlBQVosR0FBMkJYLElBQTNCO0FBQ0ExRSxVQUFBQSxHQUFHLENBQUM0QyxPQUFKLENBQVk2QixLQUFLLENBQUNXLEtBQWxCO0FBQ0QsU0FKRCxNQUlPO0FBQ0xYLFVBQUFBLEtBQUssQ0FBQ3ZKLElBQU4sQ0FBVyxVQUFVQSxJQUFWLEVBQWdCO0FBQ3pCQSxZQUFBQSxJQUFJLENBQUNtSyxZQUFMLEdBQW9CWCxJQUFwQjtBQUNBMUUsWUFBQUEsR0FBRyxDQUFDNEMsT0FBSixDQUFZMUgsSUFBWjtBQUNELFdBSEQsRUFHRzJKLFlBSEg7QUFJRDtBQUNGLE9BWEQsTUFXTyxJQUFJSixLQUFLLENBQUNhLFdBQVYsRUFBdUI7QUFDNUJWLFFBQUFBLFNBQVMsR0FBR0gsS0FBSyxDQUFDYyxZQUFOLEVBQVo7QUFDQVAsUUFBQUEsV0FBVztBQUNaLE9BSE0sTUFHQTtBQUNMO0FBQ0E7QUFDQWhGLFFBQUFBLEdBQUcsQ0FBQzRDLE9BQUosQ0FBWSxFQUFaO0FBQ0Q7O0FBQ0QsYUFBTzVDLEdBQUcsQ0FBQ1QsT0FBSixFQUFQO0FBQ0QsS0Ezb0M0QjtBQTZvQzdCd0YsSUFBQUEsc0JBQXNCLEVBQUUsZ0NBQVVKLE9BQVYsRUFBbUJELElBQW5CLEVBQXlCO0FBQy9DLFVBQUlwSSxJQUFJLEdBQUcsSUFBWDtBQUNBLGFBQU9sSSxDQUFDLENBQUNvUixJQUFGLENBQ0ozTCxLQURJLENBRUh6RixDQUZHLEVBR0hBLENBQUMsQ0FBQzRJLEdBQUYsQ0FBTTJILE9BQU4sRUFBZSxVQUFVRixLQUFWLEVBQWlCO0FBQzlCLGVBQU9uSSxJQUFJLENBQUNrSSxvQkFBTCxDQUEwQkMsS0FBMUIsRUFBaUNDLElBQWpDLENBQVA7QUFDRCxPQUZELENBSEcsRUFPSixLQUFLckwsWUFQRCxFQU9lLFlBQVk7QUFDOUIsZUFBT29NLEtBQUssQ0FBQ3RRLFNBQU4sQ0FBZ0IrUCxNQUFoQixDQUF1QnJMLEtBQXZCLENBQTZCLEVBQTdCLEVBQWlDQyxTQUFqQyxDQUFQO0FBQ0QsT0FUSSxDQUFQO0FBVUQsS0F6cEM0QjtBQTJwQzdCNEwsSUFBQUEsZ0JBQWdCLEVBQUUsMEJBQVUvUCxZQUFWLEVBQXdCO0FBQ3hDO0FBQ0FBLE1BQUFBLFlBQVksR0FBR0EsWUFBWSxJQUFJLEVBQS9CO0FBQ0EsVUFBSWdRLEtBQUssR0FBR2hRLFlBQVksQ0FBQ2dRLEtBQXpCOztBQUNBLFVBQ0VBLEtBQUssSUFDTEEsS0FBSyxDQUFDakgsTUFETixLQUVDaUgsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTQyxnQkFBVCxJQUE2QkQsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTRSxVQUZ2QyxDQURGLEVBSUU7QUFDQSxlQUFPLEtBQUtkLHNCQUFMLENBQ0wzUSxDQUFDLENBQUM0SSxHQUFGLENBQU0ySSxLQUFOLEVBQWEsVUFBVUcsSUFBVixFQUFnQjtBQUMzQixjQUFJckIsS0FBSjs7QUFDQSxjQUFJcUIsSUFBSSxDQUFDRixnQkFBVCxFQUEyQjtBQUN6Qm5CLFlBQUFBLEtBQUssR0FBR3FCLElBQUksQ0FBQ0YsZ0JBQUwsRUFBUjs7QUFDQSxnQkFBSW5CLEtBQUosRUFBVztBQUNUO0FBQ0FBLGNBQUFBLEtBQUssQ0FBQ1csS0FBTixHQUFjVSxJQUFJLENBQUNDLFNBQUwsRUFBZDtBQUNEOztBQUNELG1CQUFPdEIsS0FBUDtBQUNEOztBQUNELGlCQUFPcUIsSUFBSSxDQUFDRCxVQUFMLEVBQVA7QUFDRCxTQVhELENBREssQ0FBUDtBQWNEOztBQUNELGFBQU96UixDQUFDLENBQUM2TCxRQUFGLEdBQWEyQyxPQUFiLENBQXFCeE8sQ0FBQyxDQUFDNFIsU0FBRixDQUFZclEsWUFBWSxDQUFDb0YsS0FBekIsQ0FBckIsRUFBc0R3RSxPQUF0RCxFQUFQO0FBQ0QsS0FwckM0QjtBQXNyQzdCMEcsSUFBQUEsd0JBQXdCLEVBQUUsa0NBQVUzUixTQUFWLEVBQXFCO0FBQzdDO0FBQ0FBLE1BQUFBLFNBQVMsR0FBR0YsQ0FBQyxDQUFDRSxTQUFELENBQWI7QUFDQSxVQUFJcVEsT0FBTyxHQUFHclEsU0FBUyxDQUFDSyxJQUFWLENBQWUsU0FBZixDQUFkO0FBQUEsVUFDRW9HLEtBREY7QUFBQSxVQUVFMUMsS0FGRjs7QUFHQSxVQUFJc00sT0FBTyxJQUFJQSxPQUFPLENBQUNqRyxNQUF2QixFQUErQjtBQUM3QixlQUFPLEtBQUtxRyxzQkFBTCxDQUE0QkosT0FBNUIsQ0FBUDtBQUNEOztBQUNENUosTUFBQUEsS0FBSyxHQUFHM0csQ0FBQyxDQUFDNFIsU0FBRixDQUFZMVIsU0FBUyxDQUFDSyxJQUFWLENBQWUsT0FBZixDQUFaLENBQVI7O0FBQ0EsVUFBSSxDQUFDb0csS0FBSyxDQUFDMkQsTUFBWCxFQUFtQjtBQUNqQnJHLFFBQUFBLEtBQUssR0FBRy9ELFNBQVMsQ0FBQ0ssSUFBVixDQUFlLE9BQWYsQ0FBUjs7QUFDQSxZQUFJLENBQUMwRCxLQUFMLEVBQVk7QUFDVixpQkFBT2pFLENBQUMsQ0FBQzZMLFFBQUYsR0FBYTJDLE9BQWIsQ0FBcUIsRUFBckIsRUFBeUJyRCxPQUF6QixFQUFQO0FBQ0QsU0FKZ0IsQ0FLakI7QUFDQTtBQUNBOzs7QUFDQXhFLFFBQUFBLEtBQUssR0FBRyxDQUFDO0FBQUVILFVBQUFBLElBQUksRUFBRXZDLEtBQUssQ0FBQ0MsT0FBTixDQUFjLE9BQWQsRUFBdUIsRUFBdkI7QUFBUixTQUFELENBQVI7QUFDRCxPQVRELE1BU08sSUFBSXlDLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU0gsSUFBVCxLQUFrQm5FLFNBQWxCLElBQStCc0UsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTK0MsUUFBNUMsRUFBc0Q7QUFDM0Q7QUFDQTFKLFFBQUFBLENBQUMsQ0FBQytELElBQUYsQ0FBTzRDLEtBQVAsRUFBYyxVQUFVRSxLQUFWLEVBQWlCQyxJQUFqQixFQUF1QjtBQUNuQ0EsVUFBQUEsSUFBSSxDQUFDTixJQUFMLEdBQVlNLElBQUksQ0FBQzRDLFFBQWpCO0FBQ0E1QyxVQUFBQSxJQUFJLENBQUNDLElBQUwsR0FBWUQsSUFBSSxDQUFDZ0wsUUFBakI7QUFDRCxTQUhEO0FBSUQ7O0FBQ0QsYUFBTzlSLENBQUMsQ0FBQzZMLFFBQUYsR0FBYTJDLE9BQWIsQ0FBcUI3SCxLQUFyQixFQUE0QndFLE9BQTVCLEVBQVA7QUFDRCxLQWp0QzRCO0FBbXRDN0I0RyxJQUFBQSxrQkFBa0IsRUFBRSw0QkFBVTdSLFNBQVYsRUFBcUI7QUFDdkMsVUFBSSxFQUFFQSxTQUFTLFlBQVlGLENBQXZCLEtBQTZCRSxTQUFTLENBQUNvSyxNQUFWLEtBQXFCLENBQXRELEVBQXlEO0FBQ3ZELGVBQU8sS0FBS3VILHdCQUFMLENBQThCM1IsU0FBOUIsQ0FBUDtBQUNEOztBQUNELGFBQU9GLENBQUMsQ0FBQ29SLElBQUYsQ0FDSjNMLEtBREksQ0FDRXpGLENBREYsRUFDS0EsQ0FBQyxDQUFDNEksR0FBRixDQUFNMUksU0FBTixFQUFpQixLQUFLMlIsd0JBQXRCLENBREwsRUFFSixLQUFLNU0sWUFGRCxFQUVlLFlBQVk7QUFDOUIsZUFBT29NLEtBQUssQ0FBQ3RRLFNBQU4sQ0FBZ0IrUCxNQUFoQixDQUF1QnJMLEtBQXZCLENBQTZCLEVBQTdCLEVBQWlDQyxTQUFqQyxDQUFQO0FBQ0QsT0FKSSxDQUFQO0FBS0QsS0E1dEM0QjtBQTh0QzdCc00sSUFBQUEsU0FBUyxFQUFFLG1CQUFVMVEsQ0FBVixFQUFhO0FBQ3RCLFVBQUk0RyxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0UzRCxJQUFJLEdBQUc7QUFDTHJFLFFBQUFBLFNBQVMsRUFBRUYsQ0FBQyxDQUFDc0IsQ0FBQyxDQUFDMlEsTUFBSCxDQURQO0FBRUw3TixRQUFBQSxJQUFJLEVBQUVwRSxDQUFDLENBQUNzQixDQUFDLENBQUMyUSxNQUFGLENBQVM3TixJQUFWO0FBRkYsT0FEVDs7QUFLQSxXQUFLMk4sa0JBQUwsQ0FBd0J4TixJQUFJLENBQUNyRSxTQUE3QixFQUF3Q3NMLE1BQXhDLENBQStDLFVBQVU3RSxLQUFWLEVBQWlCO0FBQzlEcEMsUUFBQUEsSUFBSSxDQUFDb0MsS0FBTCxHQUFhQSxLQUFiOztBQUNBLFlBQUl1QixJQUFJLENBQUNqRyxPQUFMLENBQWFLLGdCQUFqQixFQUFtQztBQUNqQzRGLFVBQUFBLElBQUksQ0FBQ3FILGlCQUFMLENBQXVCaEwsSUFBdkI7QUFDRDs7QUFDRCxZQUNFMkQsSUFBSSxDQUFDdkcsUUFBTCxDQUNFLFFBREYsRUFFRTNCLENBQUMsQ0FBQzRCLEtBQUYsQ0FBUSxRQUFSLEVBQWtCO0FBQUVDLFVBQUFBLGNBQWMsRUFBRVA7QUFBbEIsU0FBbEIsQ0FGRixFQUdFaUQsSUFIRixNQUlNLEtBTFIsRUFNRTtBQUNBMkQsVUFBQUEsSUFBSSxDQUFDd0csTUFBTCxDQUFZcE4sQ0FBWixFQUFlaUQsSUFBZjtBQUNEO0FBQ0YsT0FkRDtBQWVELEtBbnZDNEI7QUFxdkM3QjJOLElBQUFBLFFBQVEsRUFBRSxrQkFBVTVRLENBQVYsRUFBYTtBQUNyQixVQUFJaVEsS0FBSyxHQUNMalEsQ0FBQyxDQUFDRSxhQUFGLElBQ0FGLENBQUMsQ0FBQ0UsYUFBRixDQUFnQjJRLGFBRGhCLElBRUE3USxDQUFDLENBQUNFLGFBQUYsQ0FBZ0IyUSxhQUFoQixDQUE4QlosS0FIbEM7QUFBQSxVQUlFaE4sSUFBSSxHQUFHO0FBQUVvQyxRQUFBQSxLQUFLLEVBQUU7QUFBVCxPQUpUOztBQUtBLFVBQUk0SyxLQUFLLElBQUlBLEtBQUssQ0FBQ2pILE1BQW5CLEVBQTJCO0FBQ3pCdEssUUFBQUEsQ0FBQyxDQUFDK0QsSUFBRixDQUFPd04sS0FBUCxFQUFjLFVBQVUxSyxLQUFWLEVBQWlCNkssSUFBakIsRUFBdUI7QUFDbkMsY0FBSTVLLElBQUksR0FBRzRLLElBQUksQ0FBQ0MsU0FBTCxJQUFrQkQsSUFBSSxDQUFDQyxTQUFMLEVBQTdCOztBQUNBLGNBQUk3SyxJQUFKLEVBQVU7QUFDUnZDLFlBQUFBLElBQUksQ0FBQ29DLEtBQUwsQ0FBV0YsSUFBWCxDQUFnQkssSUFBaEI7QUFDRDtBQUNGLFNBTEQ7O0FBTUEsWUFDRSxLQUFLbkYsUUFBTCxDQUNFLE9BREYsRUFFRTNCLENBQUMsQ0FBQzRCLEtBQUYsQ0FBUSxPQUFSLEVBQWlCO0FBQUVDLFVBQUFBLGNBQWMsRUFBRVA7QUFBbEIsU0FBakIsQ0FGRixFQUdFaUQsSUFIRixNQUlNLEtBTFIsRUFNRTtBQUNBLGVBQUttSyxNQUFMLENBQVlwTixDQUFaLEVBQWVpRCxJQUFmO0FBQ0Q7QUFDRjtBQUNGLEtBNXdDNEI7QUE4d0M3QjZOLElBQUFBLE9BQU8sRUFBRSxpQkFBVTlRLENBQVYsRUFBYTtBQUNwQkEsTUFBQUEsQ0FBQyxDQUFDQyxZQUFGLEdBQWlCRCxDQUFDLENBQUNFLGFBQUYsSUFBbUJGLENBQUMsQ0FBQ0UsYUFBRixDQUFnQkQsWUFBcEQ7QUFDQSxVQUFJMkcsSUFBSSxHQUFHLElBQVg7QUFBQSxVQUNFM0csWUFBWSxHQUFHRCxDQUFDLENBQUNDLFlBRG5CO0FBQUEsVUFFRWdELElBQUksR0FBRyxFQUZUOztBQUdBLFVBQUloRCxZQUFZLElBQUlBLFlBQVksQ0FBQ29GLEtBQTdCLElBQXNDcEYsWUFBWSxDQUFDb0YsS0FBYixDQUFtQjJELE1BQTdELEVBQXFFO0FBQ25FaEosUUFBQUEsQ0FBQyxDQUFDUSxjQUFGOztBQUNBLGFBQUt3UCxnQkFBTCxDQUFzQi9QLFlBQXRCLEVBQW9DaUssTUFBcEMsQ0FBMkMsVUFBVTdFLEtBQVYsRUFBaUI7QUFDMURwQyxVQUFBQSxJQUFJLENBQUNvQyxLQUFMLEdBQWFBLEtBQWI7O0FBQ0EsY0FDRXVCLElBQUksQ0FBQ3ZHLFFBQUwsQ0FDRSxNQURGLEVBRUUzQixDQUFDLENBQUM0QixLQUFGLENBQVEsTUFBUixFQUFnQjtBQUFFQyxZQUFBQSxjQUFjLEVBQUVQO0FBQWxCLFdBQWhCLENBRkYsRUFHRWlELElBSEYsTUFJTSxLQUxSLEVBTUU7QUFDQTJELFlBQUFBLElBQUksQ0FBQ3dHLE1BQUwsQ0FBWXBOLENBQVosRUFBZWlELElBQWY7QUFDRDtBQUNGLFNBWEQ7QUFZRDtBQUNGLEtBbHlDNEI7QUFveUM3QjhOLElBQUFBLFdBQVcsRUFBRWxSLGNBQWMsQ0FBQyxVQUFELENBcHlDRTtBQXN5QzdCbVIsSUFBQUEsWUFBWSxFQUFFblIsY0FBYyxDQUFDLFdBQUQsQ0F0eUNDO0FBd3lDN0JvUixJQUFBQSxZQUFZLEVBQUVwUixjQUFjLENBQUMsV0FBRCxDQXh5Q0M7QUEweUM3QnFSLElBQUFBLGtCQUFrQixFQUFFLDhCQUFZO0FBQzlCLFVBQUksS0FBS25NLFlBQUwsQ0FBa0IsS0FBS3BFLE9BQXZCLENBQUosRUFBcUM7QUFDbkMsYUFBS3dRLEdBQUwsQ0FBUyxLQUFLeFEsT0FBTCxDQUFhQyxRQUF0QixFQUFnQztBQUM5QndRLFVBQUFBLFFBQVEsRUFBRSxLQUFLTCxXQURlO0FBRTlCTSxVQUFBQSxJQUFJLEVBQUUsS0FBS1AsT0FGbUI7QUFHOUI7QUFDQVEsVUFBQUEsU0FBUyxFQUFFLEtBQUtOLFlBSmM7QUFLOUI7QUFDQU8sVUFBQUEsU0FBUyxFQUFFLEtBQUtOO0FBTmMsU0FBaEM7O0FBUUEsYUFBS0UsR0FBTCxDQUFTLEtBQUt4USxPQUFMLENBQWFHLFNBQXRCLEVBQWlDO0FBQy9CMFEsVUFBQUEsS0FBSyxFQUFFLEtBQUtaO0FBRG1CLFNBQWpDO0FBR0Q7O0FBQ0QsVUFBSWxTLENBQUMsQ0FBQ0MsT0FBRixDQUFVQyxTQUFkLEVBQXlCO0FBQ3ZCLGFBQUt1UyxHQUFMLENBQVMsS0FBS3hRLE9BQUwsQ0FBYS9CLFNBQXRCLEVBQWlDO0FBQy9CNlMsVUFBQUEsTUFBTSxFQUFFLEtBQUtmO0FBRGtCLFNBQWpDO0FBR0Q7QUFDRixLQTd6QzRCO0FBK3pDN0JnQixJQUFBQSxxQkFBcUIsRUFBRSxpQ0FBWTtBQUNqQyxXQUFLQyxJQUFMLENBQVUsS0FBS2hSLE9BQUwsQ0FBYUMsUUFBdkIsRUFBaUMsbUNBQWpDOztBQUNBLFdBQUsrUSxJQUFMLENBQVUsS0FBS2hSLE9BQUwsQ0FBYUcsU0FBdkIsRUFBa0MsT0FBbEM7O0FBQ0EsV0FBSzZRLElBQUwsQ0FBVSxLQUFLaFIsT0FBTCxDQUFhL0IsU0FBdkIsRUFBa0MsUUFBbEM7QUFDRCxLQW4wQzRCO0FBcTBDN0JnVCxJQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDcEIsV0FBS0YscUJBQUw7QUFDRCxLQXYwQzRCO0FBeTBDN0JHLElBQUFBLFVBQVUsRUFBRSxvQkFBVW5QLEdBQVYsRUFBZUMsS0FBZixFQUFzQjtBQUNoQyxVQUFJbVAsTUFBTSxHQUFHcFQsQ0FBQyxDQUFDeUIsT0FBRixDQUFVdUMsR0FBVixFQUFlLEtBQUt1QixlQUFwQixNQUF5QyxDQUFDLENBQXZEOztBQUNBLFVBQUk2TixNQUFKLEVBQVk7QUFDVixhQUFLSixxQkFBTDtBQUNEOztBQUNELFdBQUtLLE1BQUwsQ0FBWXJQLEdBQVosRUFBaUJDLEtBQWpCOztBQUNBLFVBQUltUCxNQUFKLEVBQVk7QUFDVixhQUFLRSxtQkFBTDs7QUFDQSxhQUFLZCxrQkFBTDtBQUNEO0FBQ0YsS0FuMUM0QjtBQXExQzdCYyxJQUFBQSxtQkFBbUIsRUFBRSwrQkFBWTtBQUMvQixVQUFJclIsT0FBTyxHQUFHLEtBQUtBLE9BQW5COztBQUNBLFVBQUlBLE9BQU8sQ0FBQy9CLFNBQVIsS0FBc0JtQyxTQUExQixFQUFxQztBQUNuQ0osUUFBQUEsT0FBTyxDQUFDL0IsU0FBUixHQUFvQixLQUFLbVAsT0FBTCxDQUFhTSxFQUFiLENBQWdCLG9CQUFoQixJQUNoQixLQUFLTixPQURXLEdBRWhCLEtBQUtBLE9BQUwsQ0FBYWtFLElBQWIsQ0FBa0Isb0JBQWxCLENBRko7QUFHRCxPQUpELE1BSU8sSUFBSSxFQUFFdFIsT0FBTyxDQUFDL0IsU0FBUixZQUE2QkYsQ0FBL0IsQ0FBSixFQUF1QztBQUM1Q2lDLFFBQUFBLE9BQU8sQ0FBQy9CLFNBQVIsR0FBb0JGLENBQUMsQ0FBQ2lDLE9BQU8sQ0FBQy9CLFNBQVQsQ0FBckI7QUFDRDs7QUFDRCxVQUFJLEVBQUUrQixPQUFPLENBQUNDLFFBQVIsWUFBNEJsQyxDQUE5QixDQUFKLEVBQXNDO0FBQ3BDaUMsUUFBQUEsT0FBTyxDQUFDQyxRQUFSLEdBQW1CbEMsQ0FBQyxDQUFDaUMsT0FBTyxDQUFDQyxRQUFULENBQXBCO0FBQ0Q7O0FBQ0QsVUFBSSxFQUFFRCxPQUFPLENBQUNHLFNBQVIsWUFBNkJwQyxDQUEvQixDQUFKLEVBQXVDO0FBQ3JDaUMsUUFBQUEsT0FBTyxDQUFDRyxTQUFSLEdBQW9CcEMsQ0FBQyxDQUFDaUMsT0FBTyxDQUFDRyxTQUFULENBQXJCO0FBQ0Q7QUFDRixLQXAyQzRCO0FBczJDN0JvUixJQUFBQSxVQUFVLEVBQUUsb0JBQVVDLEdBQVYsRUFBZTtBQUN6QixVQUFJdk8sS0FBSyxHQUFHdU8sR0FBRyxDQUFDcE8sS0FBSixDQUFVLEdBQVYsQ0FBWjtBQUFBLFVBQ0VxTyxTQUFTLEdBQUd4TyxLQUFLLENBQUN5TyxHQUFOLEVBRGQ7QUFFQXpPLE1BQUFBLEtBQUssQ0FBQ3FKLEtBQU47QUFDQSxhQUFPLElBQUlwTyxNQUFKLENBQVcrRSxLQUFLLENBQUMwTyxJQUFOLENBQVcsR0FBWCxDQUFYLEVBQTRCRixTQUE1QixDQUFQO0FBQ0QsS0EzMkM0QjtBQTYyQzdCRyxJQUFBQSxlQUFlLEVBQUUseUJBQVU3UCxHQUFWLEVBQWVDLEtBQWYsRUFBc0I7QUFDckMsYUFDRUQsR0FBRyxLQUFLLEtBQVIsSUFDQWhFLENBQUMsQ0FBQ29CLElBQUYsQ0FBTzZDLEtBQVAsTUFBa0IsUUFEbEIsSUFFQSxxQkFBcUI3RCxJQUFyQixDQUEwQjZELEtBQTFCLENBSEY7QUFLRCxLQW4zQzRCO0FBcTNDN0I2UCxJQUFBQSxtQkFBbUIsRUFBRSwrQkFBWTtBQUMvQixVQUFJNUwsSUFBSSxHQUFHLElBQVg7QUFBQSxVQUNFakcsT0FBTyxHQUFHLEtBQUtBLE9BRGpCO0FBQUEsVUFFRXNDLElBQUksR0FBRyxLQUFLOEssT0FBTCxDQUFhOUssSUFBYixFQUZULENBRCtCLENBSS9COztBQUNBdkUsTUFBQUEsQ0FBQyxDQUFDK0QsSUFBRixDQUFPLEtBQUtzTCxPQUFMLENBQWEsQ0FBYixFQUFnQjBFLFVBQXZCLEVBQW1DLFVBQVVsTixLQUFWLEVBQWlCOEQsSUFBakIsRUFBdUI7QUFDeEQsWUFBSTNHLEdBQUcsR0FBRzJHLElBQUksQ0FBQ25FLElBQUwsQ0FBVXdOLFdBQVYsRUFBVjtBQUFBLFlBQ0UvUCxLQURGOztBQUVBLFlBQUksU0FBUzdELElBQVQsQ0FBYzRELEdBQWQsQ0FBSixFQUF3QjtBQUN0QjtBQUNBQSxVQUFBQSxHQUFHLEdBQUdBLEdBQUcsQ0FBQ2hELEtBQUosQ0FBVSxDQUFWLEVBQWFrRCxPQUFiLENBQXFCLFNBQXJCLEVBQWdDLFVBQVV1UCxHQUFWLEVBQWU7QUFDbkQsbUJBQU9BLEdBQUcsQ0FBQ1EsTUFBSixDQUFXLENBQVgsRUFBY3hKLFdBQWQsRUFBUDtBQUNELFdBRkssQ0FBTjtBQUdBeEcsVUFBQUEsS0FBSyxHQUFHTSxJQUFJLENBQUNQLEdBQUQsQ0FBWjs7QUFDQSxjQUFJa0UsSUFBSSxDQUFDMkwsZUFBTCxDQUFxQjdQLEdBQXJCLEVBQTBCQyxLQUExQixDQUFKLEVBQXNDO0FBQ3BDQSxZQUFBQSxLQUFLLEdBQUdpRSxJQUFJLENBQUNzTCxVQUFMLENBQWdCdlAsS0FBaEIsQ0FBUjtBQUNEOztBQUNEaEMsVUFBQUEsT0FBTyxDQUFDK0IsR0FBRCxDQUFQLEdBQWVDLEtBQWY7QUFDRDtBQUNGLE9BZEQ7QUFlRCxLQXo0QzRCO0FBMjRDN0JpUSxJQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDbkIsV0FBS0osbUJBQUw7O0FBQ0EsV0FBS1IsbUJBQUw7O0FBQ0EsV0FBS2hGLE1BQUwsR0FBYyxFQUFkO0FBQ0EsV0FBS0csU0FBTCxHQUFpQixLQUFLaEQsY0FBTCxDQUFvQixJQUFwQixDQUFqQjtBQUNBLFdBQUsyQyxRQUFMLEdBQWdCLEtBQUtWLE9BQUwsR0FBZSxDQUEvQjs7QUFDQSxXQUFLMUcsbUJBQUwsQ0FBeUIsSUFBekI7O0FBQ0EsV0FBS3dMLGtCQUFMO0FBQ0QsS0FuNUM0QjtBQXE1QzdCO0FBQ0E7QUFDQTJCLElBQUFBLE1BQU0sRUFBRSxrQkFBWTtBQUNsQixhQUFPLEtBQUt6RyxPQUFaO0FBQ0QsS0F6NUM0QjtBQTI1QzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0F4RyxJQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDcEIsYUFBTyxLQUFLQyxTQUFaO0FBQ0QsS0FqNkM0QjtBQW02QzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E3QyxJQUFBQSxHQUFHLEVBQUUsYUFBVUMsSUFBVixFQUFnQjtBQUNuQixVQUFJMkQsSUFBSSxHQUFHLElBQVg7O0FBQ0EsVUFBSSxDQUFDM0QsSUFBRCxJQUFTLEtBQUt0QyxPQUFMLENBQWFtUyxRQUExQixFQUFvQztBQUNsQztBQUNEOztBQUNELFVBQUk3UCxJQUFJLENBQUNyRSxTQUFMLElBQWtCLENBQUNxRSxJQUFJLENBQUNvQyxLQUE1QixFQUFtQztBQUNqQyxhQUFLb0wsa0JBQUwsQ0FBd0J4TixJQUFJLENBQUNyRSxTQUE3QixFQUF3Q3NMLE1BQXhDLENBQStDLFVBQVU3RSxLQUFWLEVBQWlCO0FBQzlEcEMsVUFBQUEsSUFBSSxDQUFDb0MsS0FBTCxHQUFhQSxLQUFiOztBQUNBdUIsVUFBQUEsSUFBSSxDQUFDd0csTUFBTCxDQUFZLElBQVosRUFBa0JuSyxJQUFsQjtBQUNELFNBSEQ7QUFJRCxPQUxELE1BS087QUFDTEEsUUFBQUEsSUFBSSxDQUFDb0MsS0FBTCxHQUFhM0csQ0FBQyxDQUFDNFIsU0FBRixDQUFZck4sSUFBSSxDQUFDb0MsS0FBakIsQ0FBYjs7QUFDQSxhQUFLK0gsTUFBTCxDQUFZLElBQVosRUFBa0JuSyxJQUFsQjtBQUNEO0FBQ0YsS0FyN0M0QjtBQXU3QzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTRKLElBQUFBLElBQUksRUFBRSxjQUFVNUosSUFBVixFQUFnQjtBQUNwQixVQUFJQSxJQUFJLElBQUksQ0FBQyxLQUFLdEMsT0FBTCxDQUFhbVMsUUFBMUIsRUFBb0M7QUFDbEMsWUFBSTdQLElBQUksQ0FBQ3JFLFNBQUwsSUFBa0IsQ0FBQ3FFLElBQUksQ0FBQ29DLEtBQTVCLEVBQW1DO0FBQ2pDLGNBQUl1QixJQUFJLEdBQUcsSUFBWDtBQUFBLGNBQ0UwRCxHQUFHLEdBQUc1TCxDQUFDLENBQUM2TCxRQUFGLEVBRFI7QUFBQSxjQUVFVixPQUFPLEdBQUdTLEdBQUcsQ0FBQ1QsT0FBSixFQUZaO0FBQUEsY0FHRW9CLEtBSEY7QUFBQSxjQUlFeUIsT0FKRjs7QUFLQTdDLFVBQUFBLE9BQU8sQ0FBQ2EsS0FBUixHQUFnQixZQUFZO0FBQzFCZ0MsWUFBQUEsT0FBTyxHQUFHLElBQVY7O0FBQ0EsZ0JBQUl6QixLQUFKLEVBQVc7QUFDVCxxQkFBT0EsS0FBSyxDQUFDUCxLQUFOLEVBQVA7QUFDRDs7QUFDREosWUFBQUEsR0FBRyxDQUFDeUksTUFBSixDQUFXLElBQVgsRUFBaUIsT0FBakIsRUFBMEIsT0FBMUI7QUFDQSxtQkFBT2xKLE9BQVA7QUFDRCxXQVBEOztBQVFBLGVBQUs0RyxrQkFBTCxDQUF3QnhOLElBQUksQ0FBQ3JFLFNBQTdCLEVBQXdDc0wsTUFBeEMsQ0FBK0MsVUFBVTdFLEtBQVYsRUFBaUI7QUFDOUQsZ0JBQUlxSCxPQUFKLEVBQWE7QUFDWDtBQUNEOztBQUNELGdCQUFJLENBQUNySCxLQUFLLENBQUMyRCxNQUFYLEVBQW1CO0FBQ2pCc0IsY0FBQUEsR0FBRyxDQUFDeUksTUFBSjtBQUNBO0FBQ0Q7O0FBQ0Q5UCxZQUFBQSxJQUFJLENBQUNvQyxLQUFMLEdBQWFBLEtBQWI7QUFDQTRGLFlBQUFBLEtBQUssR0FBR3JFLElBQUksQ0FBQ3NFLE9BQUwsQ0FBYSxJQUFiLEVBQW1CakksSUFBbkIsQ0FBUjtBQUNBZ0ksWUFBQUEsS0FBSyxDQUFDK0gsSUFBTixDQUNFLFVBQVUvRyxNQUFWLEVBQWtCQyxVQUFsQixFQUE4QmpCLEtBQTlCLEVBQXFDO0FBQ25DWCxjQUFBQSxHQUFHLENBQUM0QyxPQUFKLENBQVlqQixNQUFaLEVBQW9CQyxVQUFwQixFQUFnQ2pCLEtBQWhDO0FBQ0QsYUFISCxFQUlFLFVBQVVBLEtBQVYsRUFBaUJpQixVQUFqQixFQUE2QmxCLFdBQTdCLEVBQTBDO0FBQ3hDVixjQUFBQSxHQUFHLENBQUN5SSxNQUFKLENBQVc5SCxLQUFYLEVBQWtCaUIsVUFBbEIsRUFBOEJsQixXQUE5QjtBQUNELGFBTkg7QUFRRCxXQWxCRDs7QUFtQkEsaUJBQU8sS0FBS3BCLGVBQUwsQ0FBcUJDLE9BQXJCLENBQVA7QUFDRDs7QUFDRDVHLFFBQUFBLElBQUksQ0FBQ29DLEtBQUwsR0FBYTNHLENBQUMsQ0FBQzRSLFNBQUYsQ0FBWXJOLElBQUksQ0FBQ29DLEtBQWpCLENBQWI7O0FBQ0EsWUFBSXBDLElBQUksQ0FBQ29DLEtBQUwsQ0FBVzJELE1BQWYsRUFBdUI7QUFDckIsaUJBQU8sS0FBS2tDLE9BQUwsQ0FBYSxJQUFiLEVBQW1CakksSUFBbkIsQ0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsYUFBTyxLQUFLa0gsY0FBTCxDQUFvQixLQUFwQixFQUEyQmxILElBQUksSUFBSUEsSUFBSSxDQUFDVixPQUF4QyxDQUFQO0FBQ0Q7QUF2K0M0QixHQUEvQjtBQXkrQ0QsQ0FyakREOzs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBLENBQUMsVUFBVXBFLE9BQVYsRUFBbUI7QUFDbEI7O0FBQ0EsTUFBSSxPQUFPQyxNQUFQLEtBQWtCLFVBQWxCLElBQWdDQSxNQUFNLENBQUNDLEdBQTNDLEVBQWdEO0FBQzlDO0FBQ0FELElBQUFBLE1BQU0sQ0FBQyxDQUFDLFFBQUQsQ0FBRCxFQUFhRCxPQUFiLENBQU47QUFDRCxHQUhELE1BR08sSUFBSSxRQUFPRyxPQUFQLHlDQUFPQSxPQUFQLE9BQW1CLFFBQXZCLEVBQWlDO0FBQ3RDO0FBQ0FILElBQUFBLE9BQU8sQ0FBQ0ksT0FBTyxDQUFDLFFBQUQsQ0FBUixDQUFQO0FBQ0QsR0FITSxNQUdBO0FBQ0w7QUFDQUosSUFBQUEsT0FBTyxDQUFDSyxNQUFNLENBQUNDLE1BQVIsQ0FBUDtBQUNEO0FBQ0YsQ0FaRCxFQVlHLFVBQVVDLENBQVYsRUFBYTtBQUNkLGVBRGMsQ0FHZDs7QUFDQSxNQUFJdVUsT0FBTyxHQUFHLENBQWQ7QUFBQSxNQUNFQyxPQUFPLEdBQUd4VSxDQURaO0FBQUEsTUFFRXlVLFNBQVMsR0FBRyxXQUZkOztBQUlBLE1BQUksVUFBVTNVLE1BQVYsSUFBb0IsV0FBVzRVLElBQW5DLEVBQXlDO0FBQ3ZDRixJQUFBQSxPQUFPLEdBQUdFLElBQVY7QUFDQUQsSUFBQUEsU0FBUyxHQUFHLE9BQVo7QUFDRCxHQVhhLENBYWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBelUsRUFBQUEsQ0FBQyxDQUFDMlUsYUFBRixDQUFnQixRQUFoQixFQUEwQixVQUFVMVMsT0FBVixFQUFtQjtBQUMzQyxRQUFJQSxPQUFPLENBQUMyUyxLQUFaLEVBQW1CO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFVBQUlDLGdCQUFnQixHQUFHNVMsT0FBTyxDQUFDNFMsZ0JBQVIsSUFBNEIsbUJBQW5EO0FBQUEsVUFDRXpRLElBREY7QUFBQSxVQUVFMFEsTUFGRjtBQUFBLFVBR0VDLFlBSEY7QUFJQSxhQUFPO0FBQ0w1RyxRQUFBQSxJQUFJLEVBQUUsY0FBVXJGLENBQVYsRUFBYWtNLGdCQUFiLEVBQStCO0FBQ25DNVEsVUFBQUEsSUFBSSxHQUFHcEUsQ0FBQyxDQUFDLHFDQUFELENBQVI7QUFDQW9FLFVBQUFBLElBQUksQ0FBQ3VHLElBQUwsQ0FBVSxnQkFBVixFQUE0QjFJLE9BQU8sQ0FBQ3lJLGlCQUFwQztBQUNBcUssVUFBQUEsWUFBWSxHQUFHLEtBQUszVSxJQUFMLENBQVU2QixPQUFPLENBQUM0SCxHQUFsQixJQUF5QixHQUF6QixHQUErQixHQUE5QyxDQUhtQyxDQUluQzs7QUFDQSxjQUFJNUgsT0FBTyxDQUFDYixJQUFSLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCYSxZQUFBQSxPQUFPLENBQUM0SCxHQUFSLEdBQWM1SCxPQUFPLENBQUM0SCxHQUFSLEdBQWNrTCxZQUFkLEdBQTZCLGdCQUEzQztBQUNBOVMsWUFBQUEsT0FBTyxDQUFDYixJQUFSLEdBQWUsTUFBZjtBQUNELFdBSEQsTUFHTyxJQUFJYSxPQUFPLENBQUNiLElBQVIsS0FBaUIsS0FBckIsRUFBNEI7QUFDakNhLFlBQUFBLE9BQU8sQ0FBQzRILEdBQVIsR0FBYzVILE9BQU8sQ0FBQzRILEdBQVIsR0FBY2tMLFlBQWQsR0FBNkIsYUFBM0M7QUFDQTlTLFlBQUFBLE9BQU8sQ0FBQ2IsSUFBUixHQUFlLE1BQWY7QUFDRCxXQUhNLE1BR0EsSUFBSWEsT0FBTyxDQUFDYixJQUFSLEtBQWlCLE9BQXJCLEVBQThCO0FBQ25DYSxZQUFBQSxPQUFPLENBQUM0SCxHQUFSLEdBQWM1SCxPQUFPLENBQUM0SCxHQUFSLEdBQWNrTCxZQUFkLEdBQTZCLGVBQTNDO0FBQ0E5UyxZQUFBQSxPQUFPLENBQUNiLElBQVIsR0FBZSxNQUFmO0FBQ0QsV0Fka0MsQ0FlbkM7QUFDQTtBQUNBOzs7QUFDQW1ULFVBQUFBLE9BQU8sSUFBSSxDQUFYO0FBQ0FPLFVBQUFBLE1BQU0sR0FBRzlVLENBQUMsQ0FDUixrQkFDRTZVLGdCQURGLEdBRUUsMkJBRkYsR0FHRU4sT0FIRixHQUlFLGFBTE0sQ0FBRCxDQU1Qak0sRUFOTyxDQU1KLE1BTkksRUFNSSxZQUFZO0FBQ3ZCLGdCQUFJMk0sZUFBSjtBQUFBLGdCQUNFQyxVQUFVLEdBQUdsVixDQUFDLENBQUN1RyxPQUFGLENBQVV0RSxPQUFPLENBQUNNLFNBQWxCLElBQ1ROLE9BQU8sQ0FBQ00sU0FEQyxHQUVULENBQUNOLE9BQU8sQ0FBQ00sU0FBVCxDQUhOO0FBSUF1UyxZQUFBQSxNQUFNLENBQUNyTSxHQUFQLENBQVcsTUFBWCxFQUFtQkgsRUFBbkIsQ0FBc0IsTUFBdEIsRUFBOEIsWUFBWTtBQUN4QyxrQkFBSW9FLFFBQUosQ0FEd0MsQ0FFeEM7QUFDQTs7QUFDQSxrQkFBSTtBQUNGQSxnQkFBQUEsUUFBUSxHQUFHb0ksTUFBTSxDQUFDSyxRQUFQLEVBQVgsQ0FERSxDQUVGO0FBQ0E7QUFDQTs7QUFDQSxvQkFBSSxDQUFDekksUUFBUSxDQUFDcEMsTUFBVixJQUFvQixDQUFDb0MsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZMEksVUFBckMsRUFBaUQ7QUFDL0Msd0JBQU0sSUFBSUMsS0FBSixFQUFOO0FBQ0Q7QUFDRixlQVJELENBUUUsT0FBTy9ULENBQVAsRUFBVTtBQUNWb0wsZ0JBQUFBLFFBQVEsR0FBR3JLLFNBQVg7QUFDRCxlQWR1QyxDQWV4QztBQUNBOzs7QUFDQTJTLGNBQUFBLGdCQUFnQixDQUFDLEdBQUQsRUFBTSxTQUFOLEVBQWlCO0FBQUVGLGdCQUFBQSxNQUFNLEVBQUVwSTtBQUFWLGVBQWpCLENBQWhCLENBakJ3QyxDQWtCeEM7QUFDQTs7QUFDQTFNLGNBQUFBLENBQUMsQ0FBQyxrQkFBa0I2VSxnQkFBbEIsR0FBcUMsYUFBdEMsQ0FBRCxDQUFzRFMsUUFBdEQsQ0FDRWxSLElBREY7QUFHQXRFLGNBQUFBLE1BQU0sQ0FBQ3lWLFVBQVAsQ0FBa0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQW5SLGdCQUFBQSxJQUFJLENBQUNvUixNQUFMO0FBQ0QsZUFMRCxFQUtHLENBTEg7QUFNRCxhQTdCRDtBQThCQXBSLFlBQUFBLElBQUksQ0FDRDdELElBREgsQ0FDUSxRQURSLEVBQ2tCdVUsTUFBTSxDQUFDdlUsSUFBUCxDQUFZLE1BQVosQ0FEbEIsRUFFR0EsSUFGSCxDQUVRLFFBRlIsRUFFa0IwQixPQUFPLENBQUM0SCxHQUYxQixFQUdHdEosSUFISCxDQUdRLFFBSFIsRUFHa0IwQixPQUFPLENBQUNiLElBSDFCOztBQUlBLGdCQUFJYSxPQUFPLENBQUNrQyxRQUFaLEVBQXNCO0FBQ3BCbkUsY0FBQUEsQ0FBQyxDQUFDK0QsSUFBRixDQUFPOUIsT0FBTyxDQUFDa0MsUUFBZixFQUF5QixVQUFVMEMsS0FBVixFQUFpQjJDLEtBQWpCLEVBQXdCO0FBQy9DeEosZ0JBQUFBLENBQUMsQ0FBQyx3QkFBRCxDQUFELENBQ0dPLElBREgsQ0FDUSxNQURSLEVBQ2dCaUosS0FBSyxDQUFDaEQsSUFEdEIsRUFFR2lQLEdBRkgsQ0FFT2pNLEtBQUssQ0FBQ3ZGLEtBRmIsRUFHR3FSLFFBSEgsQ0FHWWxSLElBSFo7QUFJRCxlQUxEO0FBTUQ7O0FBQ0QsZ0JBQ0VuQyxPQUFPLENBQUMvQixTQUFSLElBQ0ErQixPQUFPLENBQUMvQixTQUFSLENBQWtCb0ssTUFEbEIsSUFFQXJJLE9BQU8sQ0FBQ2IsSUFBUixLQUFpQixNQUhuQixFQUlFO0FBQ0E2VCxjQUFBQSxlQUFlLEdBQUdoVCxPQUFPLENBQUMvQixTQUFSLENBQWtCdVAsS0FBbEIsRUFBbEIsQ0FEQSxDQUVBOztBQUNBeE4sY0FBQUEsT0FBTyxDQUFDL0IsU0FBUixDQUFrQjZQLEtBQWxCLENBQXdCLFVBQVVsSixLQUFWLEVBQWlCO0FBQ3ZDLHVCQUFPb08sZUFBZSxDQUFDcE8sS0FBRCxDQUF0QjtBQUNELGVBRkQ7O0FBR0Esa0JBQUk1RSxPQUFPLENBQUNNLFNBQVosRUFBdUI7QUFDckJOLGdCQUFBQSxPQUFPLENBQUMvQixTQUFSLENBQWtCNkQsSUFBbEIsQ0FBdUIsVUFBVThDLEtBQVYsRUFBaUI7QUFDdEM3RyxrQkFBQUEsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRTyxJQUFSLENBQWEsTUFBYixFQUFxQjJVLFVBQVUsQ0FBQ3JPLEtBQUQsQ0FBVixJQUFxQjVFLE9BQU8sQ0FBQ00sU0FBbEQ7QUFDRCxpQkFGRDtBQUdELGVBVkQsQ0FXQTtBQUNBOzs7QUFDQTZCLGNBQUFBLElBQUksQ0FDRHFGLE1BREgsQ0FDVXhILE9BQU8sQ0FBQy9CLFNBRGxCLEVBRUdLLElBRkgsQ0FFUSxTQUZSLEVBRW1CLHFCQUZuQixFQUdFO0FBSEYsZUFJR0EsSUFKSCxDQUlRLFVBSlIsRUFJb0IscUJBSnBCLEVBYkEsQ0FrQkE7O0FBQ0EwQixjQUFBQSxPQUFPLENBQUMvQixTQUFSLENBQWtCd1YsVUFBbEIsQ0FBNkIsTUFBN0I7QUFDRDs7QUFDRDVWLFlBQUFBLE1BQU0sQ0FBQ3lWLFVBQVAsQ0FBa0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBblIsY0FBQUEsSUFBSSxDQUFDUSxNQUFMLEdBTDRCLENBTTVCO0FBQ0E7O0FBQ0Esa0JBQUlxUSxlQUFlLElBQUlBLGVBQWUsQ0FBQzNLLE1BQXZDLEVBQStDO0FBQzdDckksZ0JBQUFBLE9BQU8sQ0FBQy9CLFNBQVIsQ0FBa0I2RCxJQUFsQixDQUF1QixVQUFVOEMsS0FBVixFQUFpQnVELEtBQWpCLEVBQXdCO0FBQzdDLHNCQUFJcUYsS0FBSyxHQUFHelAsQ0FBQyxDQUFDaVYsZUFBZSxDQUFDcE8sS0FBRCxDQUFoQixDQUFiLENBRDZDLENBRTdDOztBQUNBN0csa0JBQUFBLENBQUMsQ0FBQ29LLEtBQUQsQ0FBRCxDQUNHN0osSUFESCxDQUNRLE1BRFIsRUFDZ0JrUCxLQUFLLENBQUNsUCxJQUFOLENBQVcsTUFBWCxDQURoQixFQUVHb0ssSUFGSCxDQUVRLE1BRlIsRUFFZ0I4RSxLQUFLLENBQUM5RSxJQUFOLENBQVcsTUFBWCxDQUZoQjtBQUdBOEUsa0JBQUFBLEtBQUssQ0FBQ2tHLFdBQU4sQ0FBa0J2TCxLQUFsQjtBQUNELGlCQVBEO0FBUUQ7QUFDRixhQWxCRCxFQWtCRyxDQWxCSDtBQW1CRCxXQWpHUSxDQUFUO0FBa0dBaEcsVUFBQUEsSUFBSSxDQUFDcUYsTUFBTCxDQUFZcUwsTUFBWixFQUFvQlEsUUFBcEIsQ0FBNkJuVCxRQUFRLENBQUN5VCxJQUF0QztBQUNELFNBdkhJO0FBd0hMNUosUUFBQUEsS0FBSyxFQUFFLGlCQUFZO0FBQ2pCLGNBQUk4SSxNQUFKLEVBQVk7QUFDVjtBQUNBO0FBQ0FBLFlBQUFBLE1BQU0sQ0FBQ3JNLEdBQVAsQ0FBVyxNQUFYLEVBQW1CbEksSUFBbkIsQ0FBd0IsS0FBeEIsRUFBK0JzVSxnQkFBL0I7QUFDRDs7QUFDRCxjQUFJelEsSUFBSixFQUFVO0FBQ1JBLFlBQUFBLElBQUksQ0FBQ29SLE1BQUw7QUFDRDtBQUNGO0FBaklJLE9BQVA7QUFtSUQ7QUFDRixHQTdJRCxFQXZCYyxDQXNLZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQXhWLEVBQUFBLENBQUMsQ0FBQzZWLFNBQUYsQ0FBWTtBQUNWQyxJQUFBQSxVQUFVLEVBQUU7QUFDVixxQkFBZSxvQkFBVWhCLE1BQVYsRUFBa0I7QUFDL0IsZUFBT0EsTUFBTSxJQUFJOVUsQ0FBQyxDQUFDOFUsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVYyxJQUFYLENBQUQsQ0FBa0JHLElBQWxCLEVBQWpCO0FBQ0QsT0FIUztBQUlWLHFCQUFlLG9CQUFVakIsTUFBVixFQUFrQjtBQUMvQixlQUFPQSxNQUFNLElBQUlOLE9BQU8sQ0FBQ0MsU0FBRCxDQUFQLENBQW1CelUsQ0FBQyxDQUFDOFUsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVYyxJQUFYLENBQUQsQ0FBa0JHLElBQWxCLEVBQW5CLENBQWpCO0FBQ0QsT0FOUztBQU9WLHFCQUFlLG9CQUFVakIsTUFBVixFQUFrQjtBQUMvQixlQUFPQSxNQUFNLElBQUk5VSxDQUFDLENBQUM4VSxNQUFNLENBQUMsQ0FBRCxDQUFOLENBQVVjLElBQVgsQ0FBRCxDQUFrQkksSUFBbEIsRUFBakI7QUFDRCxPQVRTO0FBVVYsb0JBQWMsbUJBQVVsQixNQUFWLEVBQWtCO0FBQzlCLFlBQUltQixNQUFNLEdBQUduQixNQUFNLElBQUlBLE1BQU0sQ0FBQyxDQUFELENBQTdCO0FBQ0EsZUFBT21CLE1BQU0sSUFBSWpXLENBQUMsQ0FBQ2tXLFFBQUYsQ0FBV0QsTUFBWCxDQUFWLEdBQ0hBLE1BREcsR0FFSGpXLENBQUMsQ0FBQ21XLFFBQUYsQ0FDR0YsTUFBTSxDQUFDRyxXQUFQLElBQXNCSCxNQUFNLENBQUNHLFdBQVAsQ0FBbUJDLEdBQTFDLElBQ0VyVyxDQUFDLENBQUNpVyxNQUFNLENBQUNMLElBQVIsQ0FBRCxDQUFlSSxJQUFmLEVBRkosQ0FGSjtBQU1ELE9BbEJTO0FBbUJWLHVCQUFpQixzQkFBVWxCLE1BQVYsRUFBa0I7QUFDakMsZUFBT0EsTUFBTSxJQUFJOVUsQ0FBQyxDQUFDc1csVUFBRixDQUFhdFcsQ0FBQyxDQUFDOFUsTUFBTSxDQUFDLENBQUQsQ0FBTixDQUFVYyxJQUFYLENBQUQsQ0FBa0JHLElBQWxCLEVBQWIsQ0FBakI7QUFDRDtBQXJCUztBQURGLEdBQVo7QUF5QkQsQ0FyTkQ7Ozs7Ozs7QUNiQSxJQUFJUSxXQUFKO0FBQ0EsSUFBSUMsUUFBSjtBQUVBLElBQUlDLEdBQUcsR0FBRyxJQUFJQyxHQUFKLEVBQVY7O0FBRUEsU0FBU0MsMEJBQVQsQ0FBb0NDLHVCQUFwQyxFQUE2REMsbUJBQTdELEVBQWtGQyxRQUFsRixFQUE0RjtBQUV4RixNQUFJUCxXQUFKLEVBQWlCO0FBQ2I7QUFDSDs7QUFFREEsRUFBQUEsV0FBVyxHQUFHLElBQWQ7O0FBRUEsTUFBSSxDQUFDTSxtQkFBTCxFQUEwQjtBQUN0QkUsSUFBQUEsT0FBTyxDQUFDMUwsS0FBUixDQUFjLDZDQUFkO0FBQ0g7O0FBRURyTCxFQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELElBQUFBLEdBQUcsRUFBRWdOLG1CQURGO0FBRUhHLElBQUFBLE1BQU0sRUFBRSxLQUZMO0FBR0g1TCxJQUFBQSxPQUFPLEVBQUUsaUJBQVU2TCxPQUFWLEVBQW1CO0FBQ3hCalgsTUFBQUEsQ0FBQyxDQUFDLGFBQUQsQ0FBRCxDQUFpQnlKLE1BQWpCLENBQXdCd04sT0FBeEI7QUFFQWpYLE1BQUFBLENBQUMsQ0FBQ21DLFFBQUQsQ0FBRCxDQUFZOE4sT0FBWixDQUFvQix3QkFBcEI7QUFFQSxVQUFJaUgsS0FBSSxHQUFHO0FBQ1AxUSxRQUFBQSxJQUFJLEVBQUd4RyxDQUFDLENBQUMsaUJBQUQsQ0FBRCxDQUFxQitWLElBQXJCLEVBREE7QUFFUHpGLFFBQUFBLElBQUksRUFBRSxFQUZDO0FBR1A2RyxRQUFBQSxNQUFNLEVBQUUsRUFIRDtBQUlQakcsUUFBQUEsV0FBVyxFQUFFO0FBSk4sT0FBWDtBQU9Bc0YsTUFBQUEsUUFBUSxHQUFHLElBQUlFLEdBQUosQ0FBUTtBQUNmdkcsUUFBQUEsRUFBRSxFQUFFLFdBRFc7QUFFZjVMLFFBQUFBLElBQUksRUFBRTtBQUNGNlMsVUFBQUEsY0FBYyxFQUFFLEVBRGQ7QUFFRkMsVUFBQUEsVUFBVSxFQUFFLEVBRlY7QUFHRkMsVUFBQUEsY0FBYyxFQUFFLEVBSGQ7QUFJRkMsVUFBQUEsTUFBTSxFQUFFLEVBSk47QUFLRkMsVUFBQUEsaUJBQWlCLEVBQUUsSUFBSUMsS0FBSixFQUxqQjtBQU1GQyxVQUFBQSxXQUFXLEVBQUUsS0FOWDtBQU9GQyxVQUFBQSxRQUFRLEVBQUUsS0FQUjtBQVFGQyxVQUFBQSxXQUFXLEVBQUUsRUFSWDtBQVNGQyxVQUFBQSxNQUFNLEVBQUUsRUFUTjtBQVVGQyxVQUFBQSxPQUFPLEVBQUUsSUFWUDtBQVdGQyxVQUFBQSxXQUFXLEVBQUU7QUFYWCxTQUZTO0FBZWZDLFFBQUFBLE9BQU8sRUFBRSxtQkFBWTtBQUNqQixjQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUVBQSxVQUFBQSxJQUFJLENBQUNULGlCQUFMLENBQXVCVSxHQUF2QixHQUE2QixDQUFDcEIsUUFBUSxJQUFJLEVBQWIsSUFBbUIsOENBQWhEO0FBRUFMLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxnQkFBUixFQUEwQixVQUFVaEIsTUFBVixFQUFrQjtBQUN4Q2MsWUFBQUEsSUFBSSxDQUFDYixjQUFMLEdBQXNCRCxNQUF0QjtBQUNILFdBRkQ7QUFJQVYsVUFBQUEsR0FBRyxDQUFDMEIsR0FBSixDQUFRLGVBQVIsRUFBeUIsWUFBWTtBQUNqQ0YsWUFBQUEsSUFBSSxDQUFDRyxVQUFMO0FBQ0gsV0FGRDtBQUlBM0IsVUFBQUEsR0FBRyxDQUFDMEIsR0FBSixDQUFRLGFBQVIsRUFBdUIsVUFBVWhCLE1BQVYsRUFBa0I7QUFDckNjLFlBQUFBLElBQUksQ0FBQ2IsY0FBTCxHQUFzQkQsTUFBdEI7QUFDQUEsWUFBQUEsTUFBTSxDQUFDa0IsUUFBUCxHQUFrQixJQUFsQjtBQUNILFdBSEQ7QUFLQTVCLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxtQkFBUixFQUE2QixVQUFVaEIsTUFBVixFQUFrQjtBQUMzQ2MsWUFBQUEsSUFBSSxDQUFDSyxVQUFMLENBQWdCbkIsTUFBaEI7QUFDSCxXQUZEO0FBSUFWLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxnQkFBUixFQUEwQixVQUFVSSxTQUFWLEVBQXFCO0FBQzNDTixZQUFBQSxJQUFJLENBQUNLLFVBQUwsQ0FBZ0JMLElBQUksQ0FBQ2IsY0FBckI7O0FBQ0EsZ0JBQUltQixTQUFKLEVBQWU7QUFDWE4sY0FBQUEsSUFBSSxDQUFDVixNQUFMLENBQVk5USxJQUFaLENBQWlCOFIsU0FBakI7QUFDSDtBQUNKLFdBTEQ7QUFPQTlCLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxjQUFSLEVBQXdCLFVBQVVLLE9BQVYsRUFBbUJDLE9BQW5CLEVBQTRCQyxPQUE1QixFQUFxQztBQUN6RCxnQkFBSUMsS0FBSyxHQUFHVixJQUFJLENBQUNaLFVBQUwsQ0FBZ0J1QixNQUFoQixDQUF1QixVQUFVbEgsSUFBVixFQUFnQjtBQUMvQyxxQkFBT0EsSUFBSSxDQUFDbUgsU0FBTCxLQUFtQkgsT0FBMUI7QUFDSCxhQUZXLEVBRVQsQ0FGUyxDQUFaO0FBSUFDLFlBQUFBLEtBQUssQ0FBQ0UsU0FBTixHQUFrQkosT0FBbEI7QUFDQUUsWUFBQUEsS0FBSyxDQUFDblMsSUFBTixHQUFhZ1MsT0FBYjtBQUNILFdBUEQ7QUFTQS9CLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSx1QkFBUixFQUFpQyxVQUFVUSxLQUFWLEVBQWlCO0FBQzlDVixZQUFBQSxJQUFJLENBQUNhLFlBQUw7QUFDSCxXQUZEO0FBSUFyQyxVQUFBQSxHQUFHLENBQUMwQixHQUFKLENBQVEsdUJBQVIsRUFBaUMsVUFBVVEsS0FBVixFQUFpQjtBQUM5Q1YsWUFBQUEsSUFBSSxDQUFDYyxZQUFMO0FBQ0gsV0FGRCxFQTFDaUIsQ0E4Q2pCOztBQUNBdEMsVUFBQUEsR0FBRyxDQUFDMEIsR0FBSixDQUFRLHFCQUFSLEVBQStCLFVBQVVhLE9BQVYsRUFBbUI7QUFDOUNmLFlBQUFBLElBQUksQ0FBQ2dCLFVBQUwsQ0FBZ0JELE9BQWhCO0FBQ0gsV0FGRDtBQUlBdkMsVUFBQUEsR0FBRyxDQUFDMEIsR0FBSixDQUFRLHNCQUFSLEVBQWdDLFVBQVVRLEtBQVYsRUFBaUI7QUFDN0NWLFlBQUFBLElBQUksQ0FBQ2lCLHNCQUFMLENBQTRCUCxLQUE1QjtBQUNILFdBRkQ7QUFJQWxDLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxzQkFBUixFQUFnQyxVQUFVUSxLQUFWLEVBQWlCO0FBQzdDVixZQUFBQSxJQUFJLENBQUNrQixXQUFMLENBQWlCUixLQUFqQjtBQUNILFdBRkQ7QUFJQWxDLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxzQkFBUixFQUFnQyxVQUFVUSxLQUFWLEVBQWlCO0FBQzdDVixZQUFBQSxJQUFJLENBQUNtQixlQUFMLENBQXFCVCxLQUFyQjtBQUNILFdBRkQ7QUFJQWxDLFVBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSx5QkFBUixFQUFtQyxVQUFVUSxLQUFWLEVBQWlCclgsQ0FBakIsRUFBb0I7QUFDbkQyVyxZQUFBQSxJQUFJLENBQUNvQixlQUFMLENBQXFCVixLQUFyQixFQUE0QnJYLENBQTVCO0FBQ0gsV0FGRCxFQS9EaUIsQ0FvRWpCOztBQUNBbVYsVUFBQUEsR0FBRyxDQUFDMEIsR0FBSixDQUFRLFlBQVIsRUFBc0IsVUFBVUosV0FBVixFQUF1QjtBQUN6Q0UsWUFBQUEsSUFBSSxDQUFDRixXQUFMLEdBQW1CQSxXQUFuQjtBQUNBRSxZQUFBQSxJQUFJLENBQUNYLGNBQUwsR0FBc0IsRUFBdEI7QUFDSCxXQUhEOztBQUtBLGNBQUksQ0FBQ2dDLFlBQVksQ0FBQ0MsT0FBYixDQUFxQix1QkFBckIsQ0FBTCxFQUFvRDtBQUNoRHRCLFlBQUFBLElBQUksQ0FBQ2IsY0FBTCxHQUFzQkYsS0FBdEI7QUFDQTtBQUNIOztBQUVEZSxVQUFBQSxJQUFJLENBQUN1QixZQUFMLEdBQW9COUUsSUFBSSxDQUFDK0UsS0FBTCxDQUFXSCxZQUFZLENBQUNDLE9BQWIsQ0FBcUIsdUJBQXJCLENBQVgsQ0FBcEI7QUFDSCxTQS9GYztBQWdHZkcsUUFBQUEsUUFBUSxFQUFFO0FBQ05DLFVBQUFBLE1BQU0sRUFBRSxrQkFBWTtBQUNoQixtQkFBTyxLQUFLdkMsY0FBTCxJQUF1QkYsS0FBOUI7QUFDSCxXQUhLO0FBSU4wQyxVQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsZ0JBQUlDLENBQUMsR0FBRyxFQUFSO0FBQ0FDLFlBQUFBLFlBQVksR0FBRyxLQUFLMUMsY0FBcEI7O0FBQ0EsbUJBQU8wQyxZQUFZLElBQUlBLFlBQVksQ0FBQ3hKLElBQWIsSUFBcUIsRUFBNUMsRUFBZ0Q7QUFDNUN1SixjQUFBQSxDQUFDLENBQUNFLE9BQUYsQ0FBVUQsWUFBVjtBQUNBQSxjQUFBQSxZQUFZLEdBQUdBLFlBQVksQ0FBQ0UsTUFBNUI7QUFDSDs7QUFDRCxtQkFBT0gsQ0FBUDtBQUNILFdBWks7QUFhTjNDLFVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLG1CQUFPQSxLQUFQO0FBQ0gsV0FmSztBQWdCTitDLFVBQUFBLGtCQUFrQixFQUFFLDhCQUFZO0FBQzVCLGdCQUFJaEMsSUFBSSxHQUFHLElBQVg7QUFFQUEsWUFBQUEsSUFBSSxDQUFDWCxjQUFMLEdBQXNCLEVBQXRCO0FBRUEsZ0JBQUk0QyxRQUFRLEdBQUdqQyxJQUFJLENBQUNaLFVBQUwsQ0FBZ0J1QixNQUFoQixDQUF1QixVQUFVbEgsSUFBVixFQUFnQjtBQUNsRCxxQkFBT0EsSUFBSSxDQUFDbEwsSUFBTCxDQUFVd04sV0FBVixHQUF3Qm1HLE9BQXhCLENBQWdDbEMsSUFBSSxDQUFDTCxXQUFMLENBQWlCNUQsV0FBakIsRUFBaEMsSUFBa0UsQ0FBRSxDQUEzRTtBQUNILGFBRmMsQ0FBZjs7QUFJQSxvQkFBUWlFLElBQUksQ0FBQ0osTUFBYjtBQUNJLG1CQUFLLE1BQUw7QUFDSXFDLGdCQUFBQSxRQUFRLENBQUNFLElBQVQsQ0FBYyxVQUFVQyxDQUFWLEVBQWFDLENBQWIsRUFBZ0I7QUFDMUIseUJBQU9yQyxJQUFJLENBQUNILE9BQUwsR0FBZXVDLENBQUMsQ0FBQ3RULElBQUYsR0FBU3VULENBQUMsQ0FBQ3ZULElBQTFCLEdBQWlDdVQsQ0FBQyxDQUFDdlQsSUFBRixHQUFTc1QsQ0FBQyxDQUFDdFQsSUFBbkQ7QUFDSCxpQkFGRDtBQUdBOztBQUNKLG1CQUFLLE1BQUw7QUFDSW1ULGdCQUFBQSxRQUFRLENBQUNFLElBQVQsQ0FBYyxVQUFVQyxDQUFWLEVBQWFDLENBQWIsRUFBZ0I7QUFDMUIseUJBQU9yQyxJQUFJLENBQUNILE9BQUwsR0FBZXVDLENBQUMsQ0FBQ0UsSUFBRixDQUFPdkcsV0FBUCxHQUFxQndHLGFBQXJCLENBQW1DRixDQUFDLENBQUNDLElBQUYsQ0FBT3ZHLFdBQVAsRUFBbkMsQ0FBZixHQUEwRXNHLENBQUMsQ0FBQ0MsSUFBRixDQUFPdkcsV0FBUCxHQUFxQndHLGFBQXJCLENBQW1DSCxDQUFDLENBQUNFLElBQUYsQ0FBT3ZHLFdBQVAsRUFBbkMsQ0FBakY7QUFDSCxpQkFGRDtBQUdBOztBQUNKLG1CQUFLLFlBQUw7QUFDSWtHLGdCQUFBQSxRQUFRLENBQUNFLElBQVQsQ0FBYyxVQUFVQyxDQUFWLEVBQWFDLENBQWIsRUFBZ0I7QUFDMUIseUJBQU9yQyxJQUFJLENBQUNILE9BQUwsR0FBZXVDLENBQUMsQ0FBQ0ksVUFBRixHQUFlSCxDQUFDLENBQUNHLFVBQWhDLEdBQTZDSCxDQUFDLENBQUNHLFVBQUYsR0FBZUosQ0FBQyxDQUFDSSxVQUFyRTtBQUNILGlCQUZEO0FBR0E7O0FBQ0o7QUFDSVAsZ0JBQUFBLFFBQVEsQ0FBQ0UsSUFBVCxDQUFjLFVBQVVDLENBQVYsRUFBYUMsQ0FBYixFQUFnQjtBQUMxQix5QkFBT3JDLElBQUksQ0FBQ0gsT0FBTCxHQUFldUMsQ0FBQyxDQUFDN1QsSUFBRixDQUFPd04sV0FBUCxHQUFxQndHLGFBQXJCLENBQW1DRixDQUFDLENBQUM5VCxJQUFGLENBQU93TixXQUFQLEVBQW5DLENBQWYsR0FBMEVzRyxDQUFDLENBQUM5VCxJQUFGLENBQU93TixXQUFQLEdBQXFCd0csYUFBckIsQ0FBbUNILENBQUMsQ0FBQzdULElBQUYsQ0FBT3dOLFdBQVAsRUFBbkMsQ0FBakY7QUFDSCxpQkFGRDtBQWpCUjs7QUFzQkEsbUJBQU9rRyxRQUFQO0FBQ0gsV0FoREs7QUFpRE5RLFVBQUFBLFdBQVcsRUFBRSx1QkFBWTtBQUNyQixnQkFBSW5OLE1BQU0sR0FBRyxDQUFiO0FBQ0FBLFlBQUFBLE1BQU0sR0FBRyxLQUFLOEosVUFBTCxDQUFnQi9NLE1BQWhCLEdBQXlCLEtBQUsyUCxrQkFBTCxDQUF3QjNQLE1BQTFEO0FBQ0EsbUJBQU9pRCxNQUFQO0FBQ0gsV0FyREs7QUFzRE5vTixVQUFBQSxTQUFTLEVBQUUscUJBQVk7QUFDbkIsbUJBQU8sS0FBS2pELFdBQUwsR0FBbUIsR0FBbkIsR0FBeUIsR0FBaEM7QUFDSCxXQXhESztBQXlETjhCLFVBQUFBLFlBQVksRUFBRTtBQUNWb0IsWUFBQUEsR0FBRyxFQUFFLGVBQVk7QUFDYixxQkFBTztBQUNIbEQsZ0JBQUFBLFdBQVcsRUFBRSxLQUFLQSxXQURmO0FBRUhOLGdCQUFBQSxjQUFjLEVBQUUsS0FBS0EsY0FGbEI7QUFHSE8sZ0JBQUFBLFFBQVEsRUFBRSxLQUFLQTtBQUhaLGVBQVA7QUFLSCxhQVBTO0FBUVZrRCxZQUFBQSxHQUFHLEVBQUUsYUFBVUMsUUFBVixFQUFvQjtBQUNyQixrQkFBSSxDQUFDQSxRQUFMLEVBQWU7QUFDWDtBQUNIOztBQUVELG1CQUFLcEQsV0FBTCxHQUFtQm9ELFFBQVEsQ0FBQ3BELFdBQTVCO0FBQ0EsbUJBQUtOLGNBQUwsR0FBc0IwRCxRQUFRLENBQUMxRCxjQUEvQjtBQUNBLG1CQUFLTyxRQUFMLEdBQWdCbUQsUUFBUSxDQUFDbkQsUUFBekI7QUFDSDtBQWhCUztBQXpEUixTQWhHSztBQTRLZm9ELFFBQUFBLEtBQUssRUFBRTtBQUNIdkIsVUFBQUEsWUFBWSxFQUFFLHNCQUFVc0IsUUFBVixFQUFvQjtBQUM5QnhCLFlBQUFBLFlBQVksQ0FBQzBCLE9BQWIsQ0FBcUIsdUJBQXJCLEVBQThDdEcsSUFBSSxDQUFDdUcsU0FBTCxDQUFlSCxRQUFmLENBQTlDO0FBQ0gsV0FIRTtBQUlIMUQsVUFBQUEsY0FBYyxFQUFFLHdCQUFVOEQsU0FBVixFQUFxQjtBQUNqQyxpQkFBS3RELFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxpQkFBS1IsY0FBTCxHQUFzQjhELFNBQXRCO0FBQ0EsaUJBQUs1QyxVQUFMLENBQWdCNEMsU0FBaEI7QUFDSDtBQVJFLFNBNUtRO0FBdUxmQyxRQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsZUFBS0MsS0FBTCxDQUFXQyxVQUFYLENBQXNCQyxNQUF0QjtBQUNILFNBekxjO0FBMExmQyxRQUFBQSxPQUFPLEVBQUU7QUFDTEMsVUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLG1CQUFPLEtBQUtwRSxjQUFMLEdBQXNCcFgsQ0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQnlWLEdBQWxCLEtBQTBCLFFBQTFCLEdBQXFDZ0csa0JBQWtCLENBQUMsS0FBS3JFLGNBQUwsQ0FBb0I5RyxJQUFyQixDQUE3RSxHQUEwRyxJQUFqSDtBQUNILFdBSEk7QUFJTDhILFVBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixpQkFBS2hCLGNBQUwsR0FBc0IsS0FBS0YsSUFBM0I7QUFDSCxXQU5JO0FBT0xvQixVQUFBQSxVQUFVLEVBQUUsb0JBQVVuQixNQUFWLEVBQWtCO0FBQzFCLGlCQUFLSSxNQUFMLEdBQWMsRUFBZDtBQUNBLGlCQUFLRCxjQUFMLEdBQXNCLEVBQXRCO0FBQ0EsZ0JBQUlXLElBQUksR0FBRyxJQUFYO0FBQ0FqWSxZQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELGNBQUFBLEdBQUcsRUFBRTdKLENBQUMsQ0FBQyxtQkFBRCxDQUFELENBQXVCeVYsR0FBdkIsS0FBK0IsUUFBL0IsR0FBMENnRyxrQkFBa0IsQ0FBQ3RFLE1BQU0sQ0FBQzdHLElBQVIsQ0FEOUQ7QUFFSDBHLGNBQUFBLE1BQU0sRUFBRSxLQUZMO0FBR0g1TCxjQUFBQSxPQUFPLEVBQUUsaUJBQVU3RyxJQUFWLEVBQWdCO0FBQ3JCQSxnQkFBQUEsSUFBSSxDQUFDbVgsT0FBTCxDQUFhLFVBQVVoSyxJQUFWLEVBQWdCO0FBQ3pCQSxrQkFBQUEsSUFBSSxDQUFDaUssSUFBTCxHQUFZLEtBQVo7QUFDSCxpQkFGRDtBQUdBMUQsZ0JBQUFBLElBQUksQ0FBQ1osVUFBTCxHQUFrQjlTLElBQWxCO0FBQ0EwVCxnQkFBQUEsSUFBSSxDQUFDWCxjQUFMLEdBQXNCLEVBQXRCO0FBQ0FXLGdCQUFBQSxJQUFJLENBQUNKLE1BQUwsR0FBYyxFQUFkO0FBQ0FJLGdCQUFBQSxJQUFJLENBQUNILE9BQUwsR0FBZSxJQUFmO0FBQ0gsZUFYRTtBQVlIek0sY0FBQUEsS0FBSyxFQUFFLGVBQVVBLE1BQVYsRUFBaUI7QUFDcEIwTCxnQkFBQUEsT0FBTyxDQUFDNkUsR0FBUixDQUFZLDBCQUEwQnpFLE1BQU0sQ0FBQzdHLElBQTdDO0FBQ0EySCxnQkFBQUEsSUFBSSxDQUFDRyxVQUFMO0FBQ0g7QUFmRSxhQUFQO0FBaUJILFdBNUJJO0FBNkJMeUQsVUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLGlCQUFLdkUsY0FBTCxHQUFzQixFQUF0Qjs7QUFDQSxpQkFBSyxJQUFJak4sQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLNFAsa0JBQUwsQ0FBd0IzUCxNQUE1QyxFQUFvREQsQ0FBQyxFQUFyRCxFQUF5RDtBQUNyRCxtQkFBS2lOLGNBQUwsQ0FBb0I3USxJQUFwQixDQUF5QixLQUFLd1Qsa0JBQUwsQ0FBd0I1UCxDQUF4QixDQUF6QjtBQUNIO0FBQ0osV0FsQ0k7QUFtQ0x5UixVQUFBQSxXQUFXLEVBQUUsdUJBQVk7QUFDckIsaUJBQUt4RSxjQUFMLEdBQXNCLEVBQXRCO0FBQ0gsV0FyQ0k7QUFzQ0x5RSxVQUFBQSxlQUFlLEVBQUUsMkJBQVk7QUFDekIsZ0JBQUlDLElBQUksR0FBRyxFQUFYOztBQUNBLGlCQUFLLElBQUkzUixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLEtBQUs0UCxrQkFBTCxDQUF3QjNQLE1BQTVDLEVBQW9ERCxDQUFDLEVBQXJELEVBQXlEO0FBQ3JELGtCQUFJLEtBQUs0UixlQUFMLENBQXFCLEtBQUtoQyxrQkFBTCxDQUF3QjVQLENBQXhCLENBQXJCLEtBQW9ELEtBQXhELEVBQStEO0FBQzNEMlIsZ0JBQUFBLElBQUksQ0FBQ3ZWLElBQUwsQ0FBVSxLQUFLd1Qsa0JBQUwsQ0FBd0I1UCxDQUF4QixDQUFWO0FBQ0g7QUFDSjs7QUFDRCxpQkFBS2lOLGNBQUwsR0FBc0IwRSxJQUF0QjtBQUNILFdBOUNJO0FBK0NMOUMsVUFBQUEsc0JBQXNCLEVBQUUsZ0NBQVVQLEtBQVYsRUFBaUI7QUFDckMsZ0JBQUksS0FBS3NELGVBQUwsQ0FBcUJ0RCxLQUFyQixLQUErQixJQUFuQyxFQUF5QztBQUNyQyxtQkFBS3JCLGNBQUwsQ0FBb0I0RSxNQUFwQixDQUEyQixLQUFLNUUsY0FBTCxDQUFvQjZDLE9BQXBCLENBQTRCeEIsS0FBNUIsQ0FBM0IsRUFBK0QsQ0FBL0Q7QUFDSCxhQUZELE1BRU87QUFDSCxtQkFBS3JCLGNBQUwsQ0FBb0I3USxJQUFwQixDQUF5QmtTLEtBQXpCO0FBQ0g7QUFDSixXQXJESTtBQXNETHNELFVBQUFBLGVBQWUsRUFBRSx5QkFBVXRELEtBQVYsRUFBaUI7QUFDOUIsZ0JBQUlwTCxNQUFNLEdBQUcsS0FBSytKLGNBQUwsQ0FBb0I2RSxJQUFwQixDQUF5QixVQUFVOU0sT0FBVixFQUFtQnhJLEtBQW5CLEVBQTBCdVYsS0FBMUIsRUFBaUM7QUFDbkUscUJBQU8vTSxPQUFPLENBQUN4RixHQUFSLENBQVltSyxXQUFaLE9BQThCMkUsS0FBSyxDQUFDOU8sR0FBTixDQUFVbUssV0FBVixFQUFyQztBQUNILGFBRlksQ0FBYjtBQUdBLG1CQUFPekcsTUFBUDtBQUNILFdBM0RJO0FBNERMd0wsVUFBQUEsWUFBWSxFQUFFLHdCQUFZO0FBQ3RCLGdCQUFJNUIsTUFBTSxHQUFHLEtBQUtDLGNBQWxCO0FBQ0EsZ0JBQUlhLElBQUksR0FBRyxJQUFYLENBRnNCLENBR3RCOztBQUNBLGdCQUFJZCxNQUFNLElBQUksS0FBS0QsSUFBTCxDQUFVbUYsS0FBeEIsRUFBK0I7QUFDM0I7QUFDSDs7QUFFREMsWUFBQUEsYUFBYSxpQ0FBS3RjLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUJ1RSxJQUFuQixFQUFMO0FBQWdDZ1ksY0FBQUEsUUFBUSxFQUFFLGtCQUFVQyxJQUFWLEVBQWdCO0FBQ25FLG9CQUFJQSxJQUFKLEVBQVU7QUFDTnhjLGtCQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELG9CQUFBQSxHQUFHLEVBQUU3SixDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQnlWLEdBQXRCLEtBQThCLFFBQTlCLEdBQXlDZ0csa0JBQWtCLENBQUN0RSxNQUFNLENBQUM3RyxJQUFSLENBRDdEO0FBRUgwRyxvQkFBQUEsTUFBTSxFQUFFLE1BRkw7QUFHSHpTLG9CQUFBQSxJQUFJLEVBQUU7QUFDRmtZLHNCQUFBQSwwQkFBMEIsRUFBRXpjLENBQUMsQ0FBQywwQ0FBRCxDQUFELENBQThDeVYsR0FBOUM7QUFEMUIscUJBSEg7QUFNSHJLLG9CQUFBQSxPQUFPLEVBQUUsaUJBQVU3RyxJQUFWLEVBQWdCO0FBQ3JCa1Msc0JBQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSxjQUFWLEVBQTBCdkYsTUFBMUI7QUFDSCxxQkFSRTtBQVNIOUwsb0JBQUFBLEtBQUssRUFBRSxlQUFVQSxPQUFWLEVBQWlCO0FBQ3BCMEwsc0JBQUFBLE9BQU8sQ0FBQzFMLEtBQVIsQ0FBY0EsT0FBSyxDQUFDc1IsWUFBcEI7QUFDSDtBQVhFLG1CQUFQO0FBYUg7QUFDSjtBQWhCWSxlQUFiO0FBaUJILFdBckZJO0FBc0ZMN0QsVUFBQUEsWUFBWSxFQUFFLHdCQUFZO0FBQ3RCOVksWUFBQUEsQ0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0I0YyxLQUEvQjtBQUNBNWMsWUFBQUEsQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0I2YyxLQUF4QixDQUE4QixNQUE5QjtBQUNBN2MsWUFBQUEsQ0FBQyxDQUFDLHNDQUFELENBQUQsQ0FBMEN5VixHQUExQyxDQUE4QyxFQUE5QyxFQUFrRHFILEtBQWxEO0FBQ0gsV0ExRkk7QUEyRkwzRCxVQUFBQSxXQUFXLEVBQUUscUJBQVVSLEtBQVYsRUFBaUI7QUFDMUIzWSxZQUFBQSxDQUFDLENBQUMsMEJBQUQsQ0FBRCxDQUE4QjRjLEtBQTlCO0FBQ0E1YyxZQUFBQSxDQUFDLENBQUMsbUJBQUQsQ0FBRCxDQUF1QjZjLEtBQXZCLENBQTZCLE1BQTdCO0FBQ0E3YyxZQUFBQSxDQUFDLENBQUMsZ0JBQUQsQ0FBRCxDQUFvQnlWLEdBQXBCLENBQXdCa0QsS0FBSyxDQUFDblMsSUFBOUI7QUFDQXhHLFlBQUFBLENBQUMsQ0FBQyxxQ0FBRCxDQUFELENBQXlDeVYsR0FBekMsQ0FBNkNrRCxLQUFLLENBQUNuUyxJQUFuRCxFQUF5RHNXLEtBQXpEO0FBQ0gsV0FoR0k7QUFpR0xDLFVBQUFBLG9CQUFvQixFQUFFLDhCQUFVcEUsS0FBVixFQUFpQjtBQUNuQyxpQkFBS3FFLFdBQUw7QUFDSCxXQW5HSTtBQW9HTEMsVUFBQUEsZUFBZSxFQUFFLDJCQUFZO0FBQ3pCLGdCQUFJQyxTQUFTLEdBQUcsS0FBSzVGLGNBQXJCO0FBQ0EsZ0JBQUlXLElBQUksR0FBRyxJQUFYOztBQUVBLGdCQUFJaUYsU0FBUyxDQUFDNVMsTUFBVixHQUFtQixDQUF2QixFQUEwQjtBQUN0QjtBQUNIOztBQUVEZ1MsWUFBQUEsYUFBYSxpQ0FBS3RjLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0J1RSxJQUFsQixFQUFMO0FBQStCZ1ksY0FBQUEsUUFBUSxFQUFFLGtCQUFVQyxJQUFWLEVBQWdCO0FBQ2xFLG9CQUFJQSxJQUFKLEVBQVU7QUFDTixzQkFBSVcsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsdUJBQUssSUFBSTlTLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc2UyxTQUFTLENBQUM1UyxNQUE5QixFQUFzQ0QsQ0FBQyxFQUF2QyxFQUEyQztBQUN2QzhTLG9CQUFBQSxLQUFLLENBQUMxVyxJQUFOLENBQVd5VyxTQUFTLENBQUM3UyxDQUFELENBQVQsQ0FBYXdPLFNBQXhCO0FBQ0g7O0FBRUQ3WSxrQkFBQUEsQ0FBQyxDQUFDc04sSUFBRixDQUFPO0FBQ0h6RCxvQkFBQUEsR0FBRyxFQUFFN0osQ0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUJ5VixHQUF6QixFQURGO0FBRUh1QixvQkFBQUEsTUFBTSxFQUFFLE1BRkw7QUFHSHpTLG9CQUFBQSxJQUFJLEVBQUU7QUFDRmtZLHNCQUFBQSwwQkFBMEIsRUFBRXpjLENBQUMsQ0FBQywwQ0FBRCxDQUFELENBQThDeVYsR0FBOUMsRUFEMUI7QUFFRjBILHNCQUFBQSxLQUFLLEVBQUVBO0FBRkwscUJBSEg7QUFPSC9SLG9CQUFBQSxPQUFPLEVBQUUsaUJBQVU3RyxJQUFWLEVBQWdCO0FBQ3JCLDJCQUFLLElBQUk4RixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHNE4sSUFBSSxDQUFDWCxjQUFMLENBQW9CaE4sTUFBeEMsRUFBZ0RELENBQUMsRUFBakQsRUFBcUQ7QUFDakQsNEJBQUl4RCxLQUFLLEdBQUdvUixJQUFJLENBQUNaLFVBQUwsSUFBbUJZLElBQUksQ0FBQ1osVUFBTCxDQUFnQjhDLE9BQWhCLENBQXdCbEMsSUFBSSxDQUFDWCxjQUFMLENBQW9Cak4sQ0FBcEIsQ0FBeEIsQ0FBL0I7O0FBQ0EsNEJBQUl4RCxLQUFLLEdBQUcsQ0FBQyxDQUFiLEVBQWdCO0FBQ1pvUiwwQkFBQUEsSUFBSSxDQUFDWixVQUFMLENBQWdCNkUsTUFBaEIsQ0FBdUJyVixLQUF2QixFQUE4QixDQUE5QjtBQUNBNFAsMEJBQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSxjQUFWLEVBQTBCekUsSUFBSSxDQUFDWCxjQUFMLENBQW9Cak4sQ0FBcEIsQ0FBMUI7QUFDSDtBQUNKOztBQUNENE4sc0JBQUFBLElBQUksQ0FBQ1gsY0FBTCxHQUFzQixFQUF0QjtBQUNILHFCQWhCRTtBQWlCSGpNLG9CQUFBQSxLQUFLLEVBQUUsZUFBVUEsT0FBVixFQUFpQjtBQUNwQjBMLHNCQUFBQSxPQUFPLENBQUMxTCxLQUFSLENBQWNBLE9BQUssQ0FBQ3NSLFlBQXBCO0FBQ0g7QUFuQkUsbUJBQVA7QUFxQkg7QUFDSjtBQTdCWSxlQUFiO0FBOEJILFdBMUlJO0FBMklMdkQsVUFBQUEsZUFBZSxFQUFFLHlCQUFVVCxLQUFWLEVBQWlCO0FBQzlCLGdCQUFJVixJQUFJLEdBQUcsSUFBWDs7QUFDQSxnQkFBSSxDQUFDVSxLQUFMLEVBQVk7QUFDUjtBQUNIOztBQUVEMkQsWUFBQUEsYUFBYSxpQ0FBS3RjLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0J1RSxJQUFsQixFQUFMO0FBQStCZ1ksY0FBQUEsUUFBUSxFQUFFLGtCQUFVQyxJQUFWLEVBQWdCO0FBQ2xFLG9CQUFJQSxJQUFKLEVBQVU7QUFDTnhjLGtCQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELG9CQUFBQSxHQUFHLEVBQUU3SixDQUFDLENBQUMsaUJBQUQsQ0FBRCxDQUFxQnlWLEdBQXJCLEtBQTZCLFFBQTdCLEdBQXdDZ0csa0JBQWtCLENBQUM5QyxLQUFLLENBQUNFLFNBQVAsQ0FENUQ7QUFFSDdCLG9CQUFBQSxNQUFNLEVBQUUsTUFGTDtBQUdIelMsb0JBQUFBLElBQUksRUFBRTtBQUNGa1ksc0JBQUFBLDBCQUEwQixFQUFFemMsQ0FBQyxDQUFDLDBDQUFELENBQUQsQ0FBOEN5VixHQUE5QztBQUQxQixxQkFISDtBQU1Ickssb0JBQUFBLE9BQU8sRUFBRSxpQkFBVTdHLElBQVYsRUFBZ0I7QUFDckIsMEJBQUlzQyxLQUFLLEdBQUdvUixJQUFJLENBQUNaLFVBQUwsSUFBbUJZLElBQUksQ0FBQ1osVUFBTCxDQUFnQjhDLE9BQWhCLENBQXdCeEIsS0FBeEIsQ0FBL0I7O0FBQ0EsMEJBQUk5UixLQUFLLEdBQUcsQ0FBQyxDQUFiLEVBQWdCO0FBQ1pvUix3QkFBQUEsSUFBSSxDQUFDWixVQUFMLENBQWdCNkUsTUFBaEIsQ0FBdUJyVixLQUF2QixFQUE4QixDQUE5QjtBQUNBNFAsd0JBQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSxjQUFWLEVBQTBCL0QsS0FBMUI7QUFDSCx1QkFMb0IsQ0FNckI7O0FBQ0gscUJBYkU7QUFjSHROLG9CQUFBQSxLQUFLLEVBQUUsZUFBVUEsT0FBVixFQUFpQjtBQUNwQjBMLHNCQUFBQSxPQUFPLENBQUMxTCxLQUFSLENBQWNBLE9BQUssQ0FBQ3NSLFlBQXBCO0FBQ0g7QUFoQkUsbUJBQVA7QUFrQkg7QUFDSjtBQXJCWSxlQUFiO0FBc0JILFdBdktJO0FBd0tMdEQsVUFBQUEsZUFBZSxFQUFFLHlCQUFVVixLQUFWLEVBQWlCclgsQ0FBakIsRUFBb0I7QUFDakM7QUFDQTtBQUNBLGdCQUFJOGIsVUFBVSxHQUFHLEVBQWpCO0FBQ0EsaUJBQUs5RixjQUFMLENBQW9Cb0UsT0FBcEIsQ0FBNEIsVUFBVWhLLElBQVYsRUFBZ0I7QUFDeEMwTCxjQUFBQSxVQUFVLENBQUMzVyxJQUFYLENBQWdCaUwsSUFBSSxDQUFDbEwsSUFBckI7QUFDSCxhQUZELEVBSmlDLENBUWpDOztBQUNBLGdCQUFJLEtBQUt5VixlQUFMLENBQXFCdEQsS0FBckIsS0FBK0IsS0FBbkMsRUFBMEM7QUFDdEN5RSxjQUFBQSxVQUFVLENBQUMzVyxJQUFYLENBQWdCa1MsS0FBSyxDQUFDblMsSUFBdEI7QUFDQSxtQkFBSzhRLGNBQUwsQ0FBb0I3USxJQUFwQixDQUF5QmtTLEtBQXpCO0FBQ0g7O0FBRURyWCxZQUFBQSxDQUFDLENBQUNDLFlBQUYsQ0FBZThiLE9BQWYsQ0FBdUIsWUFBdkIsRUFBcUMzSSxJQUFJLENBQUN1RyxTQUFMLENBQWVtQyxVQUFmLENBQXJDO0FBQ0E5YixZQUFBQSxDQUFDLENBQUNDLFlBQUYsQ0FBZThiLE9BQWYsQ0FBdUIsY0FBdkIsRUFBdUMsS0FBS2pHLGNBQUwsQ0FBb0I5RyxJQUEzRDtBQUNBaFAsWUFBQUEsQ0FBQyxDQUFDQyxZQUFGLENBQWUrYixZQUFmLENBQTRCLEtBQUs5RixpQkFBakMsRUFBb0QsRUFBcEQsRUFBd0QsRUFBeEQ7QUFDQWxXLFlBQUFBLENBQUMsQ0FBQ0MsWUFBRixDQUFlZ2MsYUFBZixHQUErQixNQUEvQjtBQUNILFdBMUxJO0FBMkxMQyxVQUFBQSxxQkFBcUIsRUFBRSwrQkFBVWxjLENBQVYsRUFBYTtBQUNoQyxnQkFBSUEsQ0FBQyxDQUFDbWMsT0FBRixHQUFZLEdBQWhCLEVBQXFCO0FBQ2pCM2QsY0FBQUEsTUFBTSxDQUFDNGQsUUFBUCxDQUFnQixDQUFoQixFQUFtQixDQUFDLEVBQXBCO0FBQ0g7O0FBRUQsZ0JBQUlwYyxDQUFDLENBQUNtYyxPQUFGLEdBQVkzZCxNQUFNLENBQUM2ZCxXQUFQLEdBQXFCLEdBQXJDLEVBQTBDO0FBQ3RDN2QsY0FBQUEsTUFBTSxDQUFDNGQsUUFBUCxDQUFnQixDQUFoQixFQUFtQixFQUFuQjtBQUNIO0FBQ0osV0FuTUk7QUFvTUx6RSxVQUFBQSxVQUFVLEVBQUUsb0JBQVVELE9BQVYsRUFBbUI7QUFDM0IsZ0JBQUksS0FBS25CLE1BQUwsSUFBZW1CLE9BQW5CLEVBQTRCO0FBQ3hCLG1CQUFLbEIsT0FBTCxHQUFlLENBQUMsS0FBS0EsT0FBckI7QUFDSCxhQUZELE1BRU87QUFDSCxtQkFBS0EsT0FBTCxHQUFlLElBQWY7QUFDQSxtQkFBS0QsTUFBTCxHQUFjbUIsT0FBZDtBQUNIO0FBQ0o7QUEzTUk7QUExTE0sT0FBUixDQUFYO0FBeVlBaFosTUFBQUEsQ0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUI0ZCxRQUF6QixDQUFrQyxVQUFVdGMsQ0FBVixFQUFhO0FBQzNDLFlBQUkwQyxHQUFHLEdBQUcxQyxDQUFDLENBQUN1YyxLQUFaOztBQUNBLFlBQUk3WixHQUFHLElBQUksRUFBWCxFQUFlO0FBQUc7QUFDZGhFLFVBQUFBLENBQUMsQ0FBQyxnQkFBRCxDQUFELENBQW9COGQsS0FBcEI7QUFDQSxpQkFBTyxLQUFQO0FBQ0g7QUFDSixPQU5EO0FBUUE5ZCxNQUFBQSxDQUFDLENBQUMsZ0JBQUQsQ0FBRCxDQUFvQnNJLEVBQXBCLENBQXVCLE9BQXZCLEVBQWdDLFVBQVVoSCxDQUFWLEVBQWE7QUFDekMsWUFBSWtGLElBQUksR0FBR3hHLENBQUMsQ0FBQyxxQkFBRCxDQUFELENBQXlCeVYsR0FBekIsRUFBWDs7QUFFQSxZQUFJalAsSUFBSSxLQUFLLEVBQWIsRUFBaUI7QUFDYjtBQUNIOztBQUVEeEcsUUFBQUEsQ0FBQyxDQUFDc04sSUFBRixDQUFPO0FBQ0h6RCxVQUFBQSxHQUFHLEVBQUU3SixDQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQnlWLEdBQXRCLEtBQThCLFFBQTlCLEdBQXlDZ0csa0JBQWtCLENBQUNqRixRQUFRLENBQUNZLGNBQVQsQ0FBd0I5RyxJQUF6QixDQUEzRCxHQUE0RixRQUE1RixHQUF1R21MLGtCQUFrQixDQUFDalYsSUFBRCxDQUQzSDtBQUVId1EsVUFBQUEsTUFBTSxFQUFFLE1BRkw7QUFHSHpTLFVBQUFBLElBQUksRUFBRTtBQUNGa1ksWUFBQUEsMEJBQTBCLEVBQUV6YyxDQUFDLENBQUMsMENBQUQsQ0FBRCxDQUE4Q3lWLEdBQTlDO0FBRDFCLFdBSEg7QUFNSHJLLFVBQUFBLE9BQU8sRUFBRSxpQkFBVTdHLElBQVYsRUFBZ0I7QUFDckJrUyxZQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsV0FBVixFQUF1QmxHLFFBQVEsQ0FBQ1ksY0FBaEMsRUFBZ0Q3UyxJQUFoRDtBQUNBdkUsWUFBQUEsQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0I2YyxLQUF4QixDQUE4QixNQUE5QjtBQUNILFdBVEU7QUFVSHhSLFVBQUFBLEtBQUssRUFBRSxlQUFVQSxPQUFWLEVBQWlCO0FBQ3BCckwsWUFBQUEsQ0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0I0YyxLQUEvQjtBQUNBLGdCQUFJbUIsWUFBWSxHQUFHckosSUFBSSxDQUFDK0UsS0FBTCxDQUFXcE8sT0FBSyxDQUFDc1IsWUFBakIsRUFBK0IxWSxLQUFsRDtBQUNBakUsWUFBQUEsQ0FBQyxDQUFDLHFEQUFELENBQUQsQ0FBeUQrVixJQUF6RCxDQUE4RGdJLFlBQTlELEVBQTRFekksUUFBNUUsQ0FBcUZ0VixDQUFDLENBQUMsMkJBQUQsQ0FBdEY7QUFDSDtBQWRFLFNBQVA7QUFnQkgsT0F2QkQ7QUF5QkFBLE1BQUFBLENBQUMsQ0FBQywyQkFBRCxDQUFELENBQStCc0ksRUFBL0IsQ0FBa0MsT0FBbEMsRUFBMkMsVUFBVWhILENBQVYsRUFBYTtBQUNwRCxZQUFJa1gsT0FBTyxHQUFHeFksQ0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0J5VixHQUFwQixFQUFkO0FBQ0EsWUFBSXVJLE9BQU8sR0FBR2hlLENBQUMsQ0FBQyxnQkFBRCxDQUFELENBQW9CeVYsR0FBcEIsRUFBZDs7QUFFQSxZQUFJK0MsT0FBTyxLQUFLLEVBQWhCLEVBQW9CO0FBQ2hCO0FBQ0g7O0FBRUQsWUFBSXlGLGFBQWEsR0FBR3pILFFBQVEsQ0FBQ1ksY0FBVCxDQUF3QjlHLElBQXhCLEdBQStCLEdBQW5EOztBQUNBLFlBQUkyTixhQUFhLEtBQUssR0FBdEIsRUFBMkI7QUFDdkJBLFVBQUFBLGFBQWEsR0FBRyxFQUFoQjtBQUNIOztBQUVELFlBQUl4RixPQUFPLEdBQUd3RixhQUFhLEdBQUd6RixPQUE5QjtBQUNBLFlBQUlFLE9BQU8sR0FBR3VGLGFBQWEsR0FBR0QsT0FBOUI7O0FBRUEsWUFBSXZGLE9BQU8sQ0FBQ3pFLFdBQVIsT0FBMEIwRSxPQUFPLENBQUMxRSxXQUFSLEVBQTlCLEVBQXFEO0FBQ2pEaFUsVUFBQUEsQ0FBQyxDQUFDLG1CQUFELENBQUQsQ0FBdUI2YyxLQUF2QixDQUE2QixNQUE3QjtBQUNBO0FBQ0g7O0FBRUQ3YyxRQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELFVBQUFBLEdBQUcsRUFBRTdKLENBQUMsQ0FBQyxpQkFBRCxDQUFELENBQXFCeVYsR0FBckIsS0FBNkIsV0FBN0IsR0FBMkNnRyxrQkFBa0IsQ0FBQy9DLE9BQUQsQ0FBN0QsR0FBeUUsV0FBekUsR0FBdUYrQyxrQkFBa0IsQ0FBQ2hELE9BQUQsQ0FEM0c7QUFFSHpCLFVBQUFBLE1BQU0sRUFBRSxNQUZMO0FBR0h6UyxVQUFBQSxJQUFJLEVBQUU7QUFDRmtZLFlBQUFBLDBCQUEwQixFQUFFemMsQ0FBQyxDQUFDLDBDQUFELENBQUQsQ0FBOEN5VixHQUE5QztBQUQxQixXQUhIO0FBTUhySyxVQUFBQSxPQUFPLEVBQUUsaUJBQVU3RyxJQUFWLEVBQWdCO0FBQ3JCdkUsWUFBQUEsQ0FBQyxDQUFDLG1CQUFELENBQUQsQ0FBdUI2YyxLQUF2QixDQUE2QixNQUE3QjtBQUNBcEcsWUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLGNBQVYsRUFBMEJsRSxPQUExQixFQUFtQ0MsT0FBbkMsRUFBNENDLE9BQTVDO0FBQ0gsV0FURTtBQVVIck4sVUFBQUEsS0FBSyxFQUFFLGVBQVVBLE9BQVYsRUFBaUI7QUFDcEJyTCxZQUFBQSxDQUFDLENBQUMsMEJBQUQsQ0FBRCxDQUE4QjRjLEtBQTlCO0FBQ0EsZ0JBQUltQixZQUFZLEdBQUdySixJQUFJLENBQUMrRSxLQUFMLENBQVdwTyxPQUFLLENBQUNzUixZQUFqQixFQUErQjFZLEtBQWxEO0FBQ0FqRSxZQUFBQSxDQUFDLENBQUMscURBQUQsQ0FBRCxDQUF5RCtWLElBQXpELENBQThEZ0ksWUFBOUQsRUFBNEV6SSxRQUE1RSxDQUFxRnRWLENBQUMsQ0FBQywwQkFBRCxDQUF0RjtBQUNIO0FBZEUsU0FBUDtBQWdCSCxPQXJDRDs7QUF1Q0EsVUFBSTRXLHVCQUFKLEVBQTZCO0FBQ3pCelUsUUFBQUEsUUFBUSxDQUFDK2IsY0FBVCxDQUF3QixVQUF4QixFQUFvQ0MsS0FBcEMsQ0FBMENDLE9BQTFDLEdBQW9ELEVBQXBEO0FBQ0g7O0FBRURwZSxNQUFBQSxDQUFDLENBQUNtQyxRQUFELENBQUQsQ0FBWThOLE9BQVosQ0FBb0IsZ0JBQXBCO0FBRUgsS0F0ZUU7QUF1ZUg1RSxJQUFBQSxLQUFLLEVBQUUsZUFBVUEsT0FBVixFQUFpQjtBQUNwQjBMLE1BQUFBLE9BQU8sQ0FBQzFMLEtBQVIsQ0FBY0EsT0FBSyxDQUFDc1IsWUFBcEI7QUFDSDtBQXplRSxHQUFQO0FBMmVIO0FDNWZEM2MsQ0FBQyxDQUFDbUMsUUFBRCxDQUFELENBQVltRyxFQUFaLENBQWUsZ0JBQWYsRUFBaUMsWUFBWTtBQUN6Q3RJLEVBQUFBLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUJ5RSxVQUFqQixDQUE0QjtBQUN4QnZDLElBQUFBLFFBQVEsRUFBRWxDLENBQUMsQ0FBQyxXQUFELENBRGE7QUFFeEI2QyxJQUFBQSxzQkFBc0IsRUFBRSxFQUZBO0FBR3hCaUgsSUFBQUEsUUFBUSxFQUFFLE1BSGM7QUFJeEJELElBQUFBLEdBQUcsRUFBRTdKLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0J5VixHQUFsQixFQUptQjtBQUt4QnRSLElBQUFBLFFBQVEsRUFBRSxvQkFBWTtBQUNsQixVQUFJa2EsZ0JBQWdCLEdBQUdyZSxDQUFDLENBQUMsd0NBQUQsQ0FBRCxDQUE0Q3lWLEdBQTVDLEVBQXZCO0FBRUEsYUFBTyxDQUNIO0FBQUVqUCxRQUFBQSxJQUFJLEVBQUUsTUFBUjtBQUFnQnZDLFFBQUFBLEtBQUssRUFBRXVTLFFBQVEsQ0FBQ1ksY0FBVCxDQUF3QjlHO0FBQS9DLE9BREcsRUFFSDtBQUFFOUosUUFBQUEsSUFBSSxFQUFFLDRCQUFSO0FBQXNDdkMsUUFBQUEsS0FBSyxFQUFFb2E7QUFBN0MsT0FGRyxDQUFQO0FBSUgsS0FadUI7QUFheEIxWixJQUFBQSxJQUFJLEVBQUUsY0FBVXJELENBQVYsRUFBYWlELElBQWIsRUFBbUI7QUFDckJ2RSxNQUFBQSxDQUFDLENBQUMrRCxJQUFGLENBQU9RLElBQUksQ0FBQ2dKLE1BQUwsQ0FBWTVHLEtBQW5CLEVBQTBCLFVBQVVFLEtBQVYsRUFBaUJDLElBQWpCLEVBQXVCO0FBQzdDLFlBQUksQ0FBQ0EsSUFBSSxDQUFDdUUsS0FBVixFQUFpQjtBQUNibUwsVUFBQUEsUUFBUSxDQUFDYSxVQUFULENBQW9CNVEsSUFBcEIsQ0FBeUJLLElBQXpCO0FBQ0g7QUFDSixPQUpEO0FBS0g7QUFuQnVCLEdBQTVCO0FBcUJILENBdEJEO0FBeUJBOUcsQ0FBQyxDQUFDbUMsUUFBRCxDQUFELENBQVltYyxJQUFaLENBQWlCLFVBQWpCLEVBQTZCLFVBQVVoZCxDQUFWLEVBQWE7QUFDdEMsTUFBSWlkLEVBQUUsR0FBR2pkLENBQUMsQ0FBQ0UsYUFBRixDQUFnQkQsWUFBekI7O0FBQ0EsTUFBSWdkLEVBQUUsQ0FBQzdjLEtBQUgsS0FBYTZjLEVBQUUsQ0FBQzdjLEtBQUgsQ0FBU3lZLE9BQVQsR0FBbUJvRSxFQUFFLENBQUM3YyxLQUFILENBQVN5WSxPQUFULENBQWlCLE9BQWpCLEtBQTZCLENBQUMsQ0FBakQsR0FBcURvRSxFQUFFLENBQUM3YyxLQUFILENBQVM4YyxRQUFULENBQWtCLE9BQWxCLENBQWxFLENBQUosRUFBbUc7QUFDL0YsUUFBSXRjLFFBQVEsR0FBR2xDLENBQUMsQ0FBQyxpQkFBRCxDQUFoQjtBQUFBLFFBQ0lnRixPQUFPLEdBQUdsRixNQUFNLENBQUMyZSxlQURyQjs7QUFFQSxRQUFJelosT0FBSixFQUFhO0FBQ1QwWixNQUFBQSxZQUFZLENBQUMxWixPQUFELENBQVo7QUFDSCxLQUZELE1BRU87QUFDSDlDLE1BQUFBLFFBQVEsQ0FBQ3ljLFFBQVQsQ0FBa0IsSUFBbEI7QUFDSDs7QUFDRCxRQUFJQyxlQUFlLEdBQUc1ZSxDQUFDLENBQUNzQixDQUFDLENBQUMyUSxNQUFILENBQUQsQ0FBWTRNLE9BQVosQ0FBb0IzYyxRQUFwQixDQUF0QjtBQUNBcEMsSUFBQUEsTUFBTSxDQUFDMmUsZUFBUCxHQUF5QmxKLFVBQVUsQ0FBQyxZQUFZO0FBQzVDelYsTUFBQUEsTUFBTSxDQUFDMmUsZUFBUCxHQUF5QixJQUF6QjtBQUNBdmMsTUFBQUEsUUFBUSxDQUFDNGMsV0FBVCxDQUFxQixJQUFyQjtBQUNILEtBSGtDLEVBR2hDLEdBSGdDLENBQW5DO0FBSUg7QUFDSixDQWhCRDs7Ozs7OztBQ3pCQTtBQUNBcEksR0FBRyxDQUFDcUksU0FBSixDQUFjLFFBQWQsRUFBd0I7QUFDcEJDLEVBQUFBLFFBQVEsNGFBTThDN2MsUUFBUSxDQUFDOGMsR0FBVCxJQUFnQixLQUFoQixHQUF3QixNQUF4QixHQUFpQyxPQU4vRSw0UUFPZ0o5YyxRQUFRLENBQUM4YyxHQUFULElBQWdCLEtBQWhCLEdBQXdCLE9BQXhCLEdBQWtDLE1BUGxMLHk5QkFEWTtBQTBCcEJDLEVBQUFBLEtBQUssRUFBRTtBQUNIN0MsSUFBQUEsS0FBSyxFQUFFOVUsTUFESjtBQUVINFgsSUFBQUEsa0JBQWtCLEVBQUU1WCxNQUZqQjtBQUdINlgsSUFBQUEsS0FBSyxFQUFFOVo7QUFISixHQTFCYTtBQStCcEJmLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFdBQU87QUFDSG9YLE1BQUFBLElBQUksRUFBRSxLQURIO0FBRUgwRCxNQUFBQSxRQUFRLEVBQUUsSUFGUDtBQUVhO0FBQ2hCckYsTUFBQUEsTUFBTSxFQUFFLElBSEw7QUFJSHNGLE1BQUFBLFNBQVMsRUFBRSxLQUpSO0FBS0hDLE1BQUFBLE9BQU8sRUFBRTtBQUxOLEtBQVA7QUFPSCxHQXZDbUI7QUF3Q3BCN0YsRUFBQUEsUUFBUSxFQUFFO0FBQ05rRCxJQUFBQSxLQUFLLEVBQUUsaUJBQVk7QUFDZixhQUFPLENBQUMsS0FBS3lDLFFBQU4sSUFBa0IsS0FBS0EsUUFBTCxDQUFjL1UsTUFBZCxJQUF3QixDQUFqRDtBQUNILEtBSEs7QUFJTmtWLElBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixhQUFRLEtBQUtMLGtCQUFMLENBQXdCM1ksSUFBeEIsSUFBZ0MsS0FBSzZWLEtBQUwsQ0FBVzdWLElBQTVDLElBQXNELEtBQUsyWSxrQkFBTCxDQUF3QjdPLElBQXhCLElBQWdDLEtBQUsrTCxLQUFMLENBQVcvTCxJQUF4RztBQUNILEtBTks7QUFPTm1QLElBQUFBLE1BQU0sRUFBRSxrQkFBWTtBQUNoQixhQUFPLEtBQUtwRCxLQUFMLENBQVcvTCxJQUFYLEtBQW9CLEVBQTNCO0FBQ0g7QUFUSyxHQXhDVTtBQW1EcEI2SyxFQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsUUFBSyxLQUFLc0UsTUFBTCxJQUFlLEtBQWhCLElBQTJCLEtBQUtDLDBCQUFMLEVBQS9CLEVBQWtFO0FBQzlELFdBQUtwRSxNQUFMO0FBQ0g7O0FBRUQsU0FBS2lFLE9BQUwsR0FBZSxLQUFLSCxLQUFMLEdBQWEsQ0FBYixHQUFrQixFQUFsQixHQUF1QixLQUFNLEtBQUtBLEtBQUwsR0FBYSxDQUF6RDtBQUNILEdBekRtQjtBQTBEcEJwSCxFQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsUUFBSUMsSUFBSSxHQUFHLElBQVg7QUFDQXhCLElBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxjQUFSLEVBQXdCLFVBQVVoQixNQUFWLEVBQWtCO0FBQ3RDLFVBQUljLElBQUksQ0FBQ29ILFFBQVQsRUFBbUI7QUFDZixZQUFJeFksS0FBSyxHQUFHb1IsSUFBSSxDQUFDb0gsUUFBTCxJQUFpQnBILElBQUksQ0FBQ29ILFFBQUwsQ0FBY2xGLE9BQWQsQ0FBc0JoRCxNQUF0QixDQUE3Qjs7QUFDQSxZQUFJdFEsS0FBSyxHQUFHLENBQUMsQ0FBYixFQUFnQjtBQUNab1IsVUFBQUEsSUFBSSxDQUFDb0gsUUFBTCxDQUFjbkQsTUFBZCxDQUFxQnJWLEtBQXJCLEVBQTRCLENBQTVCO0FBQ0E0UCxVQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsZUFBVjtBQUNIO0FBQ0o7QUFDSixLQVJEO0FBVUFqRyxJQUFBQSxHQUFHLENBQUMwQixHQUFKLENBQVEsV0FBUixFQUFxQixVQUFVbEcsTUFBVixFQUFrQmtGLE1BQWxCLEVBQTBCO0FBQzNDLFVBQUljLElBQUksQ0FBQ29FLEtBQUwsSUFBY3BLLE1BQWxCLEVBQTBCO0FBRXRCd0UsUUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLG1CQUFWLEVBQStCekUsSUFBSSxDQUFDb0UsS0FBcEM7O0FBQ0EsWUFBSXBFLElBQUksQ0FBQ29ILFFBQUwsS0FBa0IsSUFBdEIsRUFBNEI7QUFDeEJwSCxVQUFBQSxJQUFJLENBQUNvSCxRQUFMLENBQWM1WSxJQUFkLENBQW1CMFEsTUFBbkI7QUFDSDs7QUFDREEsUUFBQUEsTUFBTSxDQUFDNkMsTUFBUCxHQUFnQi9CLElBQUksQ0FBQ29FLEtBQXJCO0FBQ0E1RixRQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsYUFBVixFQUF5QnZGLE1BQXpCO0FBQ0g7QUFDSixLQVZEO0FBV0gsR0FqRm1CO0FBa0ZwQm9FLEVBQUFBLE9BQU8sRUFBRTtBQUNMbUUsSUFBQUEsMEJBQTBCLEVBQUUsc0NBQVk7QUFDcEM1RixNQUFBQSxZQUFZLEdBQUd0RCxRQUFRLENBQUNZLGNBQXhCOztBQUNBLGFBQU8wQyxZQUFQLEVBQXFCO0FBQ2pCLFlBQUlBLFlBQVksQ0FBQ3hKLElBQWIsSUFBcUIsS0FBSytMLEtBQUwsQ0FBVy9MLElBQXBDLEVBQTBDO0FBQ3RDLGlCQUFPLElBQVA7QUFDSDs7QUFDTHdKLFFBQUFBLFlBQVksR0FBR0EsWUFBWSxDQUFDRSxNQUE1QjtBQUNDOztBQUVELGFBQU8sS0FBUDtBQUNILEtBWEk7QUFZTHNCLElBQUFBLE1BQU0sRUFBRSxrQkFBWTtBQUNoQixXQUFLSyxJQUFMLEdBQVksQ0FBQyxLQUFLQSxJQUFsQjs7QUFDQSxVQUFJLEtBQUtBLElBQUwsSUFBYSxDQUFDLEtBQUswRCxRQUF2QixFQUFpQztBQUM3QixhQUFLTSxZQUFMO0FBQ0g7QUFDSixLQWpCSTtBQWtCTEMsSUFBQUEsTUFBTSxFQUFFLGtCQUFZO0FBQ2hCbkosTUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLGdCQUFWLEVBQTRCLEtBQUtMLEtBQWpDO0FBQ0EsV0FBS3NELFlBQUw7QUFDSCxLQXJCSTtBQXNCTDdHLElBQUFBLFlBQVksRUFBRSx3QkFBWTtBQUN0QnJDLE1BQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSx1QkFBVjtBQUNILEtBeEJJO0FBeUJMM0QsSUFBQUEsWUFBWSxFQUFFLHdCQUFZO0FBQ3RCdEMsTUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLHVCQUFWO0FBQ0gsS0EzQkk7QUE0QkxpRCxJQUFBQSxZQUFZLEVBQUUsd0JBQVk7QUFDdEIsVUFBSTFILElBQUksR0FBRyxJQUFYOztBQUNBLFVBQUksS0FBSzBELElBQUwsSUFBYSxLQUFqQixFQUF3QjtBQUNwQixhQUFLQSxJQUFMLEdBQVksSUFBWjtBQUNIOztBQUNEM2IsTUFBQUEsQ0FBQyxDQUFDc04sSUFBRixDQUFPO0FBQ0h6RCxRQUFBQSxHQUFHLEVBQUU3SixDQUFDLENBQUMsZ0JBQUQsQ0FBRCxDQUFvQnlWLEdBQXBCLEtBQTRCLFFBQTVCLEdBQXVDZ0csa0JBQWtCLENBQUN4RCxJQUFJLENBQUNvRSxLQUFMLENBQVcvTCxJQUFaLENBRDNEO0FBRUgwRyxRQUFBQSxNQUFNLEVBQUUsS0FGTDtBQUdINUwsUUFBQUEsT0FBTyxFQUFFLGlCQUFVN0csSUFBVixFQUFnQjtBQUNyQjBULFVBQUFBLElBQUksQ0FBQ29ILFFBQUwsR0FBZ0I5YSxJQUFoQjtBQUNBMFQsVUFBQUEsSUFBSSxDQUFDb0gsUUFBTCxDQUFjM0QsT0FBZCxDQUFzQixVQUFVbUUsQ0FBVixFQUFhO0FBQy9CQSxZQUFBQSxDQUFDLENBQUM3RixNQUFGLEdBQVcvQixJQUFJLENBQUNvRSxLQUFoQjtBQUNILFdBRkQ7QUFHSCxTQVJFO0FBU0hoUixRQUFBQSxLQUFLLEVBQUUsZUFBVUEsTUFBVixFQUFpQjtBQUNwQnlVLFVBQUFBLEtBQUssR0FBRyxLQUFSO0FBQ0EvSSxVQUFBQSxPQUFPLENBQUMxTCxLQUFSLENBQWNBLE1BQUssQ0FBQ3NSLFlBQXBCO0FBQ0g7QUFaRSxPQUFQO0FBY0gsS0EvQ0k7QUFnRExvRCxJQUFBQSxjQUFjLEVBQUUsd0JBQVV6ZSxDQUFWLEVBQWE7QUFDekIsV0FBS2dlLFNBQUwsR0FBaUIsSUFBakI7QUFDSCxLQWxESTtBQW1ETFUsSUFBQUEsZUFBZSxFQUFFLHlCQUFVMWUsQ0FBVixFQUFhO0FBQzFCLFdBQUtnZSxTQUFMLEdBQWlCLEtBQWpCO0FBQ0gsS0FyREk7QUFzRExXLElBQUFBLGlCQUFpQixFQUFFLDJCQUFVOUksTUFBVixFQUFrQjdWLENBQWxCLEVBQXFCO0FBRXBDLFVBQUkyVyxJQUFJLEdBQUcsSUFBWDtBQUNBQSxNQUFBQSxJQUFJLENBQUNxSCxTQUFMLEdBQWlCLEtBQWpCO0FBRUEsVUFBSWxDLFVBQVUsR0FBRzFJLElBQUksQ0FBQytFLEtBQUwsQ0FBV25ZLENBQUMsQ0FBQ0MsWUFBRixDQUFlMmUsT0FBZixDQUF1QixZQUF2QixDQUFYLENBQWpCOztBQUVBLFVBQUk5QyxVQUFVLENBQUM5UyxNQUFYLEdBQW9CLENBQXhCLEVBQTJCO0FBQ3ZCO0FBQ0g7O0FBRUQsVUFBSTZWLFlBQVksR0FBRzdlLENBQUMsQ0FBQ0MsWUFBRixDQUFlMmUsT0FBZixDQUF1QixjQUF2QixDQUFuQjtBQUNBLFVBQUlFLFlBQVksR0FBR2pKLE1BQU0sQ0FBQzdHLElBQTFCOztBQUVBLFVBQUk2UCxZQUFZLEtBQUssRUFBckIsRUFBeUI7QUFDckJBLFFBQUFBLFlBQVksR0FBRyxNQUFmO0FBQ0g7O0FBRUQsVUFBSUMsWUFBWSxLQUFLLEVBQXJCLEVBQXlCO0FBQ3JCQSxRQUFBQSxZQUFZLEdBQUcsTUFBZjtBQUNIOztBQUVELFVBQUlELFlBQVksS0FBS0MsWUFBckIsRUFBbUM7QUFDL0JDLFFBQUFBLEtBQUssQ0FBQ3JnQixDQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QnlWLEdBQXhCLEVBQUQsQ0FBTDtBQUNBO0FBQ0g7O0FBRUQ2RyxNQUFBQSxhQUFhLGlDQUFLdGMsQ0FBQyxDQUFDLFlBQUQsQ0FBRCxDQUFnQnVFLElBQWhCLEVBQUw7QUFBNkJnWSxRQUFBQSxRQUFRLEVBQUUsa0JBQVVDLElBQVYsRUFBZ0I7QUFDaEUsY0FBSUEsSUFBSixFQUFVO0FBQ054YyxZQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELGNBQUFBLEdBQUcsRUFBRTdKLENBQUMsQ0FBQyxtQkFBRCxDQUFELENBQXVCeVYsR0FBdkIsRUFERjtBQUVIdUIsY0FBQUEsTUFBTSxFQUFFLE1BRkw7QUFHSHpTLGNBQUFBLElBQUksRUFBRTtBQUNGa1ksZ0JBQUFBLDBCQUEwQixFQUFFemMsQ0FBQyxDQUFDLDBDQUFELENBQUQsQ0FBOEN5VixHQUE5QyxFQUQxQjtBQUVGMkgsZ0JBQUFBLFVBQVUsRUFBRUEsVUFGVjtBQUdGK0MsZ0JBQUFBLFlBQVksRUFBRUEsWUFIWjtBQUlGQyxnQkFBQUEsWUFBWSxFQUFFQTtBQUpaLGVBSEg7QUFTSGhWLGNBQUFBLE9BQU8sRUFBRSxtQkFBWTtBQUNqQnFMLGdCQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsZ0JBQVYsRUFEaUIsQ0FDWTtBQUNoQyxlQVhFO0FBWUhyUixjQUFBQSxLQUFLLEVBQUUsZUFBVUEsT0FBVixFQUFpQjtBQUNwQjBMLGdCQUFBQSxPQUFPLENBQUMxTCxLQUFSLENBQWNBLE9BQUssQ0FBQ3NSLFlBQXBCO0FBQ0FsRyxnQkFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLGdCQUFWLEVBQTRCclIsT0FBSyxDQUFDc1IsWUFBbEM7QUFDSDtBQWZFLGFBQVA7QUFpQkg7QUFDSjtBQXBCWSxTQUFiO0FBcUJIO0FBdEdJO0FBbEZXLENBQXhCO0FDREE7QUFDQWpHLEdBQUcsQ0FBQ3FJLFNBQUosQ0FBYyxrQkFBZCxFQUFrQztBQUM5QkMsRUFBQUEsUUFBUSwwNURBRHNCO0FBMEI5QnphLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFdBQU87QUFDSCtiLE1BQUFBLENBQUMsRUFBRTtBQURBLEtBQVA7QUFHSCxHQTlCNkI7QUErQjlCcEIsRUFBQUEsS0FBSyxFQUFFO0FBQ0hqRixJQUFBQSxrQkFBa0IsRUFBRTVJLEtBRGpCO0FBRUhpRyxJQUFBQSxjQUFjLEVBQUVqRyxLQUZiO0FBR0hzSixJQUFBQSxTQUFTLEVBQUVyVjtBQUhSLEdBL0J1QjtBQW9DOUIwUyxFQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsUUFBSUMsSUFBSSxHQUFHLElBQVgsQ0FEaUIsQ0FFakI7O0FBQ0FBLElBQUFBLElBQUksQ0FBQ3FJLENBQUwsQ0FBT0MsVUFBUCxHQUFvQnZnQixDQUFDLENBQUMsZ0JBQUQsQ0FBRCxDQUFvQnlWLEdBQXBCLEVBQXBCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9FLFlBQVAsR0FBc0J4Z0IsQ0FBQyxDQUFDLGtCQUFELENBQUQsQ0FBc0J5VixHQUF0QixFQUF0QjtBQUNILEdBekM2QjtBQTBDOUI4RixFQUFBQSxPQUFPLEVBQUU7QUFDTFUsSUFBQUEsZUFBZSxFQUFFLHlCQUFVdEQsS0FBVixFQUFpQjtBQUM5QixVQUFJcEwsTUFBTSxHQUFHLEtBQUsrSixjQUFMLENBQW9CNkUsSUFBcEIsQ0FBeUIsVUFBVTlNLE9BQVYsRUFBbUJ4SSxLQUFuQixFQUEwQnVWLEtBQTFCLEVBQWlDO0FBQ25FLGVBQU8vTSxPQUFPLENBQUN4RixHQUFSLENBQVltSyxXQUFaLE9BQThCMkUsS0FBSyxDQUFDOU8sR0FBTixDQUFVbUssV0FBVixFQUFyQztBQUNILE9BRlksQ0FBYjtBQUdBLGFBQU96RyxNQUFQO0FBQ0gsS0FOSTtBQU9Ma1QsSUFBQUEsYUFBYSxFQUFFLHVCQUFVNVcsR0FBVixFQUFlOFEsU0FBZixFQUEwQjtBQUNyQyxhQUFPOVEsR0FBRyxJQUFJQSxHQUFHLENBQUNzUSxPQUFKLENBQVksR0FBWixLQUFvQixDQUFDLENBQXJCLEdBQXlCLEdBQXpCLEdBQStCLEdBQW5DLENBQUgsR0FBNkMsUUFBN0MsR0FBd0RRLFNBQXhELEdBQW9FLFVBQXBFLEdBQWlGQSxTQUF4RjtBQUNILEtBVEk7QUFVTHpCLElBQUFBLHNCQUFzQixFQUFFLGdDQUFVUCxLQUFWLEVBQWlCO0FBQ3JDbEMsTUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLHNCQUFWLEVBQWtDL0QsS0FBbEM7QUFDSCxLQVpJO0FBYUxRLElBQUFBLFdBQVcsRUFBRSxxQkFBVVIsS0FBVixFQUFpQjtBQUMxQmxDLE1BQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSxzQkFBVixFQUFrQy9ELEtBQWxDO0FBQ0gsS0FmSTtBQWdCTHFFLElBQUFBLFdBQVcsRUFBRSxxQkFBVXJFLEtBQVYsRUFBaUI7QUFDMUJsQyxNQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsc0JBQVYsRUFBa0MvRCxLQUFsQztBQUNILEtBbEJJO0FBbUJMK0gsSUFBQUEsU0FBUyxFQUFFLG1CQUFVL0gsS0FBVixFQUFpQnJYLENBQWpCLEVBQW9CO0FBQzNCbVYsTUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLHlCQUFWLEVBQXFDL0QsS0FBckMsRUFBNENyWCxDQUE1QztBQUNIO0FBckJJO0FBMUNxQixDQUFsQztBQ0RBO0FBQ0FvVixHQUFHLENBQUNxSSxTQUFKLENBQWMsbUJBQWQsRUFBbUM7QUFDL0JDLEVBQUFBLFFBQVEsZzBIQUR1QjtBQWdFL0J6YSxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxXQUFPO0FBQ0grYixNQUFBQSxDQUFDLEVBQUU7QUFEQSxLQUFQO0FBR0gsR0FwRThCO0FBcUUvQnBCLEVBQUFBLEtBQUssRUFBRTtBQUNIckgsSUFBQUEsTUFBTSxFQUFFaFAsTUFETDtBQUVIaVAsSUFBQUEsT0FBTyxFQUFFNkksT0FGTjtBQUdIMUcsSUFBQUEsa0JBQWtCLEVBQUU1SSxLQUhqQjtBQUlIaUcsSUFBQUEsY0FBYyxFQUFFakcsS0FKYjtBQUtIc0osSUFBQUEsU0FBUyxFQUFFclY7QUFMUixHQXJFd0I7QUE0RS9CMFMsRUFBQUEsT0FBTyxFQUFFLG1CQUFZO0FBQ2pCLFFBQUlDLElBQUksR0FBRyxJQUFYO0FBQ0FBLElBQUFBLElBQUksQ0FBQ3FJLENBQUwsQ0FBT00sV0FBUCxHQUFxQjVnQixDQUFDLENBQUMsaUJBQUQsQ0FBRCxDQUFxQnlWLEdBQXJCLEVBQXJCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9PLFVBQVAsR0FBb0I3Z0IsQ0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0J5VixHQUFwQixFQUFwQjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPUSxnQkFBUCxHQUEwQjlnQixDQUFDLENBQUMsc0JBQUQsQ0FBRCxDQUEwQnlWLEdBQTFCLEVBQTFCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9TLFVBQVAsR0FBb0IvZ0IsQ0FBQyxDQUFDLGdCQUFELENBQUQsQ0FBb0J5VixHQUFwQixFQUFwQjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPVSxVQUFQLEdBQW9CaGhCLENBQUMsQ0FBQyxnQkFBRCxDQUFELENBQW9CeVYsR0FBcEIsRUFBcEI7QUFDQXdDLElBQUFBLElBQUksQ0FBQ3FJLENBQUwsQ0FBT0MsVUFBUCxHQUFvQnZnQixDQUFDLENBQUMsZ0JBQUQsQ0FBRCxDQUFvQnlWLEdBQXBCLEVBQXBCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9FLFlBQVAsR0FBc0J4Z0IsQ0FBQyxDQUFDLGtCQUFELENBQUQsQ0FBc0J5VixHQUF0QixFQUF0QjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPVyxVQUFQLEdBQW9CamhCLENBQUMsQ0FBQyxnQkFBRCxDQUFELENBQW9CeVYsR0FBcEIsRUFBcEI7QUFDSCxHQXRGOEI7QUF1Ri9COEYsRUFBQUEsT0FBTyxFQUFFO0FBQ0xVLElBQUFBLGVBQWUsRUFBRSx5QkFBVXRELEtBQVYsRUFBaUI7QUFDOUIsVUFBSXBMLE1BQU0sR0FBRyxLQUFLK0osY0FBTCxDQUFvQjZFLElBQXBCLENBQXlCLFVBQVU5TSxPQUFWLEVBQW1CeEksS0FBbkIsRUFBMEJ1VixLQUExQixFQUFpQztBQUNuRSxlQUFPL00sT0FBTyxDQUFDeEYsR0FBUixDQUFZbUssV0FBWixPQUE4QjJFLEtBQUssQ0FBQzlPLEdBQU4sQ0FBVW1LLFdBQVYsRUFBckM7QUFDSCxPQUZZLENBQWI7QUFHQSxhQUFPekcsTUFBUDtBQUNILEtBTkk7QUFPTGtULElBQUFBLGFBQWEsRUFBRSx1QkFBVTVXLEdBQVYsRUFBZThRLFNBQWYsRUFBMEI7QUFDckMsYUFBTzlRLEdBQUcsSUFBSUEsR0FBRyxDQUFDc1EsT0FBSixDQUFZLEdBQVosS0FBb0IsQ0FBQyxDQUFyQixHQUF5QixHQUF6QixHQUErQixHQUFuQyxDQUFILEdBQTZDLFFBQTdDLEdBQXdEUSxTQUF4RCxHQUFvRSxVQUFwRSxHQUFpRkEsU0FBeEY7QUFDSCxLQVRJO0FBVUwxQixJQUFBQSxVQUFVLEVBQUUsb0JBQVVELE9BQVYsRUFBbUI7QUFDM0J2QyxNQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUscUJBQVYsRUFBaUMxRCxPQUFqQztBQUNILEtBWkk7QUFhTEUsSUFBQUEsc0JBQXNCLEVBQUUsZ0NBQVVQLEtBQVYsRUFBaUI7QUFDckNsQyxNQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsc0JBQVYsRUFBa0MvRCxLQUFsQztBQUNILEtBZkk7QUFnQkxRLElBQUFBLFdBQVcsRUFBRSxxQkFBVVIsS0FBVixFQUFpQjtBQUMxQmxDLE1BQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSxzQkFBVixFQUFrQy9ELEtBQWxDO0FBQ0gsS0FsQkk7QUFtQkxxRSxJQUFBQSxXQUFXLEVBQUUscUJBQVVyRSxLQUFWLEVBQWlCO0FBQzFCbEMsTUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLHNCQUFWLEVBQWtDL0QsS0FBbEM7QUFDSCxLQXJCSTtBQXNCTCtILElBQUFBLFNBQVMsRUFBRSxtQkFBVS9ILEtBQVYsRUFBaUJyWCxDQUFqQixFQUFvQjtBQUMzQm1WLE1BQUFBLEdBQUcsQ0FBQ2lHLEtBQUosQ0FBVSx5QkFBVixFQUFxQy9ELEtBQXJDLEVBQTRDclgsQ0FBNUM7QUFDSCxLQXhCSTtBQXlCTDRmLElBQUFBLGFBQWEsRUFBRSx1QkFBVUMsVUFBVixFQUFxQjtBQUNoQyxVQUFJQyxDQUFDLEdBQUcsSUFBSXZiLElBQUosQ0FBU3NiLFVBQVQsQ0FBUjtBQUNBLGFBQU9DLENBQUMsQ0FBQ0MsY0FBRixFQUFQO0FBQ0g7QUE1Qkk7QUF2RnNCLENBQW5DO0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTNLLEdBQUcsQ0FBQ3FJLFNBQUosQ0FBYyxPQUFkLEVBQXVCO0FBQ25CQyxFQUFBQSxRQUFRLDYxRkFEVztBQStDbkJFLEVBQUFBLEtBQUssRUFBRTtBQUNIb0MsSUFBQUEsV0FBVyxFQUFFalE7QUFEVixHQS9DWTtBQWtEbkI5TSxFQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxXQUFPO0FBQ0hnZCxNQUFBQSxRQUFRLEVBQUUsRUFEUDtBQUVIQyxNQUFBQSxlQUFlLEVBQUUsQ0FBQyxFQUFELEVBQUssRUFBTCxFQUFTLEVBQVQsRUFBYSxHQUFiLENBRmQ7QUFHSEMsTUFBQUEsT0FBTyxFQUFFLENBSE47QUFJSG5CLE1BQUFBLENBQUMsRUFBRTtBQUpBLEtBQVA7QUFNSCxHQXpEa0I7QUEwRG5CdEksRUFBQUEsT0FBTyxFQUFFLG1CQUFZO0FBQ2pCLFFBQUlDLElBQUksR0FBRyxJQUFYLENBRGlCLENBR2pCOztBQUNBQSxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9vQixnQkFBUCxHQUEwQjFoQixDQUFDLENBQUMsdUJBQUQsQ0FBRCxDQUEyQnlWLEdBQTNCLEVBQTFCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9xQixtQkFBUCxHQUE2QjNoQixDQUFDLENBQUMsMEJBQUQsQ0FBRCxDQUE4QnlWLEdBQTlCLEVBQTdCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9zQixlQUFQLEdBQXlCNWhCLENBQUMsQ0FBQyxzQkFBRCxDQUFELENBQTBCeVYsR0FBMUIsRUFBekI7QUFDQXdDLElBQUFBLElBQUksQ0FBQ3FJLENBQUwsQ0FBT3VCLGVBQVAsR0FBeUI3aEIsQ0FBQyxDQUFDLHNCQUFELENBQUQsQ0FBMEJ5VixHQUExQixFQUF6QjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPd0Isa0JBQVAsR0FBNEI5aEIsQ0FBQyxDQUFDLDBCQUFELENBQUQsQ0FBOEJ5VixHQUE5QixFQUE1QjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPeUIsY0FBUCxHQUF3Qi9oQixDQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QnlWLEdBQXpCLEVBQXhCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU8wQixlQUFQLEdBQXlCaGlCLENBQUMsQ0FBQyxzQkFBRCxDQUFELENBQTBCeVYsR0FBMUIsRUFBekI7QUFDSCxHQXJFa0I7QUFzRW5COEYsRUFBQUEsT0FBTyxFQUFFO0FBQ0wwRyxJQUFBQSxJQUFJLEVBQUUsZ0JBQVk7QUFDZCxXQUFLUixPQUFMLEdBQWUsS0FBS0EsT0FBTCxHQUFlLENBQTlCO0FBQ0gsS0FISTtBQUlMUyxJQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDbEIsV0FBS1QsT0FBTCxHQUFlLEtBQUtBLE9BQUwsR0FBZSxDQUE5QjtBQUNILEtBTkk7QUFPTFUsSUFBQUEsT0FBTyxFQUFFLG1CQUFZO0FBQ2pCLFdBQUtWLE9BQUwsR0FBZSxDQUFmO0FBQ0gsS0FUSTtBQVVMVyxJQUFBQSxNQUFNLEVBQUUsa0JBQVk7QUFDaEIsV0FBS1gsT0FBTCxHQUFlLEtBQUtZLFVBQUwsR0FBa0IsQ0FBakM7QUFDSCxLQVpJO0FBYUxDLElBQUFBLElBQUksRUFBRSxjQUFVQyxVQUFWLEVBQXNCO0FBQ3hCLFdBQUtkLE9BQUwsR0FBZWMsVUFBZjtBQUNIO0FBZkksR0F0RVU7QUF1Rm5CN0ksRUFBQUEsUUFBUSxFQUFFO0FBQ045UyxJQUFBQSxLQUFLLEVBQUUsaUJBQVk7QUFDZixhQUFPLEtBQUswYSxXQUFMLEdBQW1CLEtBQUtBLFdBQUwsQ0FBaUJoWCxNQUFwQyxHQUE2QyxDQUFwRDtBQUNILEtBSEs7QUFJTitYLElBQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixVQUFJRyxLQUFLLEdBQUczYSxJQUFJLENBQUM0YSxJQUFMLENBQVUsS0FBSzdiLEtBQUwsR0FBYSxLQUFLMmEsUUFBNUIsQ0FBWjtBQUNBLGFBQU9pQixLQUFLLEdBQUcsQ0FBUixHQUFZQSxLQUFaLEdBQW9CLENBQTNCO0FBQ0gsS0FQSztBQVFORSxJQUFBQSxVQUFVLEVBQUUsc0JBQVk7QUFDcEIsYUFBTyxLQUFLakIsT0FBTCxHQUFlLENBQWYsSUFBb0IsS0FBS1ksVUFBaEM7QUFDSCxLQVZLO0FBV05NLElBQUFBLFdBQVcsRUFBRSx1QkFBWTtBQUNyQixhQUFPLEtBQUtsQixPQUFMLEtBQWlCLENBQXhCO0FBQ0gsS0FiSztBQWNObUIsSUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLGFBQU8sQ0FBQyxLQUFLRixVQUFiO0FBQ0gsS0FoQks7QUFpQk5HLElBQUFBLFNBQVMsRUFBRSxxQkFBWTtBQUNuQixhQUFPLENBQUMsS0FBS0YsV0FBYjtBQUNILEtBbkJLO0FBb0JORyxJQUFBQSxVQUFVLEVBQUUsc0JBQVk7QUFDcEIsYUFBTyxDQUFDLEtBQUtILFdBQWI7QUFDSCxLQXRCSztBQXVCTkksSUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLGFBQU8sQ0FBQyxLQUFLTCxVQUFiO0FBQ0gsS0F6Qks7QUEwQk47QUFDQTtBQUNBO0FBQ0FNLElBQUFBLGtCQUFrQixFQUFFLDhCQUFZO0FBQzVCLFVBQUlDLEtBQUssR0FBRyxLQUFLMUIsUUFBTCxHQUFnQixLQUFLRSxPQUFqQztBQUNBLFVBQUl5QixHQUFHLEdBQUdELEtBQUssR0FBRyxLQUFLMUIsUUFBdkI7QUFDQSxVQUFJaFUsTUFBTSxHQUFHLEtBQUsrVCxXQUFMLENBQWlCdGdCLEtBQWpCLENBQXVCaWlCLEtBQXZCLEVBQThCQyxHQUE5QixDQUFiO0FBQ0F6TSxNQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsWUFBVixFQUF3Qm5QLE1BQXhCO0FBQ0EsYUFBT0EsTUFBUDtBQUNILEtBbkNLO0FBb0NONFYsSUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBRW5CLFVBQUlDLEtBQUssR0FBRyxFQUFaO0FBRUFBLE1BQUFBLEtBQUssQ0FBQzNjLElBQU4sQ0FBVyxLQUFLZ2IsT0FBTCxHQUFlLENBQTFCLEVBSm1CLENBTW5COztBQUNBLFVBQUk0QixhQUFhLEdBQUcsS0FBSzVCLE9BQUwsR0FBZSxDQUFmLEdBQW1CLEtBQUtBLE9BQXhCLEdBQWtDLENBQUMsQ0FBdkQ7QUFDQTJCLE1BQUFBLEtBQUssQ0FBQ3JKLE9BQU4sQ0FBY3NKLGFBQWQ7QUFFQSxVQUFJQyxtQkFBbUIsR0FBRyxLQUFLN0IsT0FBTCxHQUFlLENBQWYsR0FBbUIsS0FBS0EsT0FBTCxHQUFlLENBQWxDLEdBQXNDLENBQUMsQ0FBakU7QUFDQTJCLE1BQUFBLEtBQUssQ0FBQ3JKLE9BQU4sQ0FBY3VKLG1CQUFkLEVBWG1CLENBY25COztBQUNBLFVBQUlDLFlBQVksR0FBRyxLQUFLbEIsVUFBTCxHQUFrQixLQUFLWixPQUF2QixHQUFpQyxDQUFqQyxHQUFxQyxLQUFLQSxPQUFMLEdBQWUsQ0FBcEQsR0FBd0QsQ0FBQyxDQUE1RTtBQUNBMkIsTUFBQUEsS0FBSyxDQUFDM2MsSUFBTixDQUFXOGMsWUFBWDtBQUVBLFVBQUlDLGlCQUFpQixHQUFHLEtBQUtuQixVQUFMLEdBQWtCLEtBQUtaLE9BQXZCLEdBQWlDLENBQWpDLEdBQXFDLEtBQUtBLE9BQUwsR0FBZSxDQUFwRCxHQUF3RCxDQUFDLENBQWpGO0FBQ0EyQixNQUFBQSxLQUFLLENBQUMzYyxJQUFOLENBQVcrYyxpQkFBWDtBQUVBLGFBQU9KLEtBQVA7QUFDSDtBQTFESyxHQXZGUztBQW1KbkJySSxFQUFBQSxLQUFLLEVBQUU7QUFDSHVHLElBQUFBLFdBQVcsRUFBRSx1QkFBWTtBQUNyQixXQUFLRyxPQUFMLEdBQWUsQ0FBZixDQURxQixDQUNIO0FBQ3JCLEtBSEU7QUFJSEYsSUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLFdBQUtFLE9BQUwsR0FBZSxDQUFmO0FBQ0g7QUFORTtBQW5KWSxDQUF2QjtBQ0pBO0FBQ0EvSyxHQUFHLENBQUNxSSxTQUFKLENBQWMsZUFBZCxFQUErQjtBQUMzQkMsRUFBQUEsUUFBUSxpUUFEbUI7QUFPM0JFLEVBQUFBLEtBQUssRUFBRTtBQUNIdUUsSUFBQUEsT0FBTyxFQUFFNWEsTUFETjtBQUVINmEsSUFBQUEsZUFBZSxFQUFFN2EsTUFGZDtBQUdIOGEsSUFBQUEsR0FBRyxFQUFFaEQ7QUFIRixHQVBvQjtBQVkzQmpILEVBQUFBLFFBQVEsRUFBRTtBQUNOa0ssSUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLGFBQU8sS0FBS0gsT0FBTCxDQUFhelAsV0FBYixNQUE4QixLQUFLMFAsZUFBTCxDQUFxQjFQLFdBQXJCLEVBQXJDO0FBQ0g7QUFISztBQVppQixDQUEvQjtBQ0RBLFNBQVM2UCw0QkFBVCxDQUFzQzFULEVBQXRDLEVBQTBDMlQsZ0JBQTFDLEVBQTREQyxZQUE1RCxFQUEwRUMsWUFBMUUsRUFBd0ZDLGFBQXhGLEVBQXVHQyxjQUF2RyxFQUF1SEMsWUFBdkgsRUFBcUlDLGdCQUFySSxFQUF1SjtBQUVuSixNQUFJblMsTUFBTSxHQUFHalMsQ0FBQyxDQUFDbUMsUUFBUSxDQUFDK2IsY0FBVCxDQUF3QmxlLENBQUMsQ0FBQ21RLEVBQUQsQ0FBRCxDQUFNNUwsSUFBTixDQUFXLEtBQVgsQ0FBeEIsQ0FBRCxDQUFkO0FBQ0EsTUFBSThmLFlBQVksR0FBR3BTLE1BQU0sQ0FBQzFOLElBQVAsQ0FBWSxNQUFaLENBQW5CO0FBRUEsTUFBSStmLGdCQUFnQixHQUFHdGtCLENBQUMsQ0FBQ21RLEVBQUQsQ0FBeEI7QUFDQSxNQUFJb1UsUUFBUSxHQUFHRCxnQkFBZ0IsQ0FBQzNaLElBQWpCLENBQXNCLElBQXRCLENBQWY7QUFDQSxNQUFJNlosYUFBSjtBQUVBQyxFQUFBQSxjQUFjLENBQUNoZSxJQUFmLENBQW9CK2QsYUFBYSxHQUFHLElBQUk5TixHQUFKLENBQVE7QUFDeEN2RyxJQUFBQSxFQUFFLEVBQUVtVSxnQkFBZ0IsQ0FBQzFKLEdBQWpCLENBQXFCLENBQXJCLENBRG9DO0FBRXhDclcsSUFBQUEsSUFBSSxFQUFFO0FBQ0Y4UyxNQUFBQSxVQUFVLEVBQUUsRUFEVjtBQUVGcU4sTUFBQUEsYUFBYSxFQUFFLElBRmI7QUFHRmhOLE1BQUFBLFdBQVcsRUFBRSxLQUhYO0FBSUZpTixNQUFBQSxRQUFRLEVBQUVKLFFBSlI7QUFLRmhPLE1BQUFBLFdBQVcsRUFBRSxLQUxYO0FBTUYyTixNQUFBQSxjQUFjLEVBQUVBLGNBTmQ7QUFPRlUsTUFBQUEsZUFBZSxFQUFFLEVBUGY7QUFRRlQsTUFBQUEsWUFBWSxFQUFFQSxZQVJaO0FBU0ZVLE1BQUFBLFlBQVksRUFBRTtBQVRaLEtBRmtDO0FBYXhDN00sSUFBQUEsT0FBTyxFQUFFLG1CQUFZO0FBQ2pCLFVBQUlDLElBQUksR0FBRyxJQUFYO0FBRUFBLE1BQUFBLElBQUksQ0FBQ3VCLFlBQUwsR0FBb0I5RSxJQUFJLENBQUMrRSxLQUFMLENBQVdILFlBQVksQ0FBQ0MsT0FBYixDQUFxQixpQkFBckIsQ0FBWCxDQUFwQjtBQUNILEtBakJ1QztBQWtCeENHLElBQUFBLFFBQVEsRUFBRTtBQUNOeUQsTUFBQUEsS0FBSyxFQUFFO0FBQ0h2QyxRQUFBQSxHQUFHLEVBQUUsZUFBWTtBQUNiLGNBQUlrSyxVQUFVLEdBQUcsRUFBakI7O0FBQ0EsY0FBSSxDQUFDLEtBQUt2TyxXQUFWLEVBQXVCO0FBQ25CLG1CQUFPN0IsSUFBSSxDQUFDdUcsU0FBTCxDQUFlb0osWUFBZixDQUFQO0FBQ0g7O0FBQ0QsZUFBS2hOLFVBQUwsQ0FBZ0JxRSxPQUFoQixDQUF3QixVQUFVcUosQ0FBVixFQUFhO0FBQ2pDLGdCQUFJQSxDQUFDLENBQUNsTSxTQUFGLEtBQWdCLFdBQXBCLEVBQWlDO0FBQzdCO0FBQ0g7O0FBQ0RpTSxZQUFBQSxVQUFVLENBQUNyZSxJQUFYLENBQWdCO0FBQUU2SixjQUFBQSxJQUFJLEVBQUV5VSxDQUFDLENBQUNsTSxTQUFWO0FBQXFCbU0sY0FBQUEsU0FBUyxFQUFFRCxDQUFDLENBQUNDLFNBQWxDO0FBQTZDQyxjQUFBQSxLQUFLLEVBQUVGLENBQUMsQ0FBQ0UsS0FBdEQ7QUFBNkRDLGNBQUFBLFNBQVMsRUFBRUgsQ0FBQyxDQUFDRyxTQUExRTtBQUFxRkMsY0FBQUEsTUFBTSxFQUFFSixDQUFDLENBQUNJO0FBQS9GLGFBQWhCO0FBQ0gsV0FMRDtBQU1BLGlCQUFPelEsSUFBSSxDQUFDdUcsU0FBTCxDQUFlNkosVUFBZixDQUFQO0FBQ0gsU0FiRTtBQWNIakssUUFBQUEsR0FBRyxFQUFFLGFBQVV1SyxNQUFWLEVBQWtCO0FBQ25CLGNBQUluTixJQUFJLEdBQUcsSUFBWDtBQUNBLGNBQUk2TSxVQUFVLEdBQUdNLE1BQU0sSUFBSSxFQUEzQjtBQUNBLGNBQUlDLE1BQU0sR0FBR3JsQixDQUFDLENBQUM2TCxRQUFGLEVBQWI7QUFDQSxjQUFJMEYsS0FBSyxHQUFHLEVBQVo7QUFDQSxjQUFJakgsTUFBTSxHQUFHLENBQWI7QUFDQXdhLFVBQUFBLFVBQVUsQ0FBQ3BKLE9BQVgsQ0FBbUIsVUFBVXFKLENBQVYsRUFBYTFhLENBQWIsRUFBZ0I7QUFDL0JrSCxZQUFBQSxLQUFLLENBQUM5SyxJQUFOLENBQVc7QUFBRUQsY0FBQUEsSUFBSSxFQUFFLE1BQU11ZSxDQUFDLENBQUN6VSxJQUFoQjtBQUFzQmlLLGNBQUFBLElBQUksRUFBRSxFQUE1QjtBQUFnQzFCLGNBQUFBLFNBQVMsRUFBRSxFQUEzQztBQUErQ3NNLGNBQUFBLE1BQU0sRUFBRUosQ0FBQyxDQUFDSTtBQUF6RCxhQUFYLEVBRCtCLENBQ2dEOztBQUMvRWhhLFlBQUFBLE9BQU8sR0FBR25MLENBQUMsQ0FBQ29SLElBQUYsQ0FBT2lVLE1BQVAsRUFBZTFnQixJQUFmLENBQW9CLFlBQVk7QUFDdEMzRSxjQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELGdCQUFBQSxHQUFHLEVBQUVtYSxZQUFZLEdBQUcsUUFBZixHQUEwQnZJLGtCQUFrQixDQUFDc0osQ0FBQyxDQUFDelUsSUFBSCxDQUQ5QztBQUVIMEcsZ0JBQUFBLE1BQU0sRUFBRSxLQUZMO0FBR0g1TCxnQkFBQUEsT0FBTyxFQUFFLGlCQUFVN0csSUFBVixFQUFnQjtBQUNyQkEsa0JBQUFBLElBQUksQ0FBQytnQixNQUFMLEdBQWMvZ0IsSUFBSSxDQUFDaUMsSUFBTCxHQUFZNkQsQ0FBQyxDQUFDdkcsUUFBRixFQUExQixDQURxQixDQUNtQjs7QUFDeENTLGtCQUFBQSxJQUFJLENBQUMyZ0IsU0FBTCxHQUFpQkgsQ0FBQyxDQUFDRyxTQUFuQixDQUZxQixDQUVTOztBQUM5QjNnQixrQkFBQUEsSUFBSSxDQUFDNGdCLE1BQUwsR0FBY0osQ0FBQyxDQUFDSSxNQUFoQixDQUhxQixDQUdHOztBQUN4QjVULGtCQUFBQSxLQUFLLENBQUMySyxNQUFOLENBQWE3UixDQUFiLEVBQWdCLENBQWhCLEVBQW1COUYsSUFBbkI7O0FBQ0Esc0JBQUlnTixLQUFLLENBQUNqSCxNQUFOLEtBQWlCLEVBQUVBLE1BQXZCLEVBQStCO0FBQzNCaUgsb0JBQUFBLEtBQUssQ0FBQ21LLE9BQU4sQ0FBYyxVQUFVcUosQ0FBVixFQUFhO0FBQ3ZCOU0sc0JBQUFBLElBQUksQ0FBQ1osVUFBTCxDQUFnQjVRLElBQWhCLENBQXFCc2UsQ0FBckI7QUFDSCxxQkFGRDtBQUdBOU0sb0JBQUFBLElBQUksQ0FBQzFCLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDtBQUNKLGlCQWRFO0FBZUhsTCxnQkFBQUEsS0FBSyxFQUFFLGVBQVVBLE1BQVYsRUFBaUI7QUFDcEIwTCxrQkFBQUEsT0FBTyxDQUFDNkUsR0FBUixDQUFZbEgsSUFBSSxDQUFDdUcsU0FBTCxDQUFlNVAsTUFBZixDQUFaO0FBQ0FrRyxrQkFBQUEsS0FBSyxDQUFDMkssTUFBTixDQUFhN1IsQ0FBYixFQUFnQixDQUFoQixFQUFtQjtBQUFFN0Qsb0JBQUFBLElBQUksRUFBRXVlLENBQUMsQ0FBQ3pVLElBQVY7QUFBZ0JpSyxvQkFBQUEsSUFBSSxFQUFFLEVBQXRCO0FBQTBCMUIsb0JBQUFBLFNBQVMsRUFBRSxXQUFyQztBQUFrRHFNLG9CQUFBQSxTQUFTLEVBQUUsRUFBN0Q7QUFBaUVDLG9CQUFBQSxNQUFNLEVBQUU7QUFBRUosc0JBQUFBLENBQUMsRUFBRSxHQUFMO0FBQVVRLHNCQUFBQSxDQUFDLEVBQUU7QUFBYjtBQUF6RSxtQkFBbkI7O0FBQ0Esc0JBQUloVSxLQUFLLENBQUNqSCxNQUFOLEtBQWlCLEVBQUVBLE1BQXZCLEVBQStCO0FBQzNCaUgsb0JBQUFBLEtBQUssQ0FBQ21LLE9BQU4sQ0FBYyxVQUFVcUosQ0FBVixFQUFhO0FBQ3ZCOU0sc0JBQUFBLElBQUksQ0FBQ1osVUFBTCxDQUFnQjVRLElBQWhCLENBQXFCc2UsQ0FBckI7QUFDSCxxQkFGRDtBQUdBOU0sb0JBQUFBLElBQUksQ0FBQzFCLFdBQUwsR0FBbUIsSUFBbkI7QUFDSDtBQUNKO0FBeEJFLGVBQVA7QUEwQkgsYUEzQlMsQ0FBVjtBQTRCSCxXQTlCRDtBQWdDQThPLFVBQUFBLE1BQU0sQ0FBQzdXLE9BQVA7QUFDSDtBQXJERSxPQUREO0FBd0ROc0QsTUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLGVBQU9qSyxJQUFJLENBQUMyZCxLQUFMLENBQVcsS0FBS2QsYUFBTCxDQUFtQjNkLElBQW5CLEdBQTBCLElBQXJDLENBQVA7QUFDSCxPQTFESztBQTJETjBlLE1BQUFBLFdBQVcsRUFBRSx1QkFBWTtBQUNyQixZQUFJQyxvQkFBb0IsR0FBRyxFQUEzQjs7QUFDQSxhQUFLLElBQUlyYixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHLEtBQUtnTixVQUFMLENBQWdCL00sTUFBcEMsRUFBNENELENBQUMsRUFBN0MsRUFBaUQ7QUFDN0MsY0FBSSxDQUFDLEtBQUtnTixVQUFMLENBQWdCaE4sQ0FBaEIsRUFBbUIyYSxTQUF4QixFQUFtQztBQUMvQlUsWUFBQUEsb0JBQW9CLENBQUNqZixJQUFyQixDQUEwQixLQUFLNFEsVUFBTCxDQUFnQmhOLENBQWhCLENBQTFCO0FBQ0g7QUFDSjs7QUFFRCxlQUFPcWIsb0JBQW9CLENBQUNwYixNQUFyQixLQUFnQyxDQUFoQyxJQUFxQ29iLG9CQUFvQixDQUFDcGIsTUFBckIsR0FBOEIsQ0FBOUIsSUFBbUMyWixhQUEvRTtBQUNILE9BcEVLO0FBcUVOdEosTUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLGVBQU8sS0FBS2pELFdBQUwsR0FBbUIsR0FBbkIsR0FBeUIsR0FBaEM7QUFDSCxPQXZFSztBQXdFTjhCLE1BQUFBLFlBQVksRUFBRTtBQUNWb0IsUUFBQUEsR0FBRyxFQUFFLGVBQVk7QUFDYixpQkFBTztBQUNIbEQsWUFBQUEsV0FBVyxFQUFFLEtBQUtBO0FBRGYsV0FBUDtBQUdILFNBTFM7QUFNVm1ELFFBQUFBLEdBQUcsRUFBRSxhQUFVQyxRQUFWLEVBQW9CO0FBQ3JCLGNBQUksQ0FBQ0EsUUFBTCxFQUFlO0FBQ1g7QUFDSDs7QUFDRCxlQUFLcEQsV0FBTCxHQUFtQm9ELFFBQVEsQ0FBQ3BELFdBQTVCO0FBQ0g7QUFYUztBQXhFUixLQWxCOEI7QUF3R3hDeUQsSUFBQUEsT0FBTyxFQUFFLG1CQUFZO0FBQ2pCLFVBQUlsRCxJQUFJLEdBQUcsSUFBWDtBQUVBQSxNQUFBQSxJQUFJLENBQUNrRixLQUFMLEdBQWFrSCxZQUFiO0FBRUFwTSxNQUFBQSxJQUFJLENBQUNFLEdBQUwsQ0FBUywrQkFBVCxFQUEwQyxVQUFVUSxLQUFWLEVBQWlCO0FBQ3ZEVixRQUFBQSxJQUFJLENBQUM4RSxvQkFBTCxDQUEwQnBFLEtBQTFCO0FBQ0gsT0FGRDtBQUlBVixNQUFBQSxJQUFJLENBQUNFLEdBQUwsQ0FBUyxzQkFBVCxFQUFpQyxVQUFVUSxLQUFWLEVBQWlCO0FBQzlDVixRQUFBQSxJQUFJLENBQUMwTixXQUFMLENBQWlCaE4sS0FBakI7QUFDSCxPQUZEO0FBSUEsVUFBSWlOLFFBQVEsR0FBRyxNQUFNOUIsZ0JBQXJCO0FBQ0EsVUFBSStCLFFBQVEsR0FBR3ZCLGdCQUFnQixDQUFDM1osSUFBakIsQ0FBc0IsSUFBdEIsQ0FBZjtBQUVBM0ssTUFBQUEsQ0FBQyxDQUFDNGxCLFFBQUQsQ0FBRCxDQUFZbmhCLFVBQVosQ0FBdUI7QUFDbkI1QixRQUFBQSxzQkFBc0IsRUFBRSxFQURMO0FBRW5CWCxRQUFBQSxRQUFRLEVBQUVsQyxDQUFDLENBQUMsTUFBTTZsQixRQUFQLENBRlE7QUFHbkIvYixRQUFBQSxRQUFRLEVBQUUsTUFIUztBQUluQkQsUUFBQUEsR0FBRyxFQUFFa2EsWUFKYztBQUtuQnpmLFFBQUFBLEdBQUcsRUFBRSxhQUFVaEQsQ0FBVixFQUFhaUQsSUFBYixFQUFtQjtBQUNwQixjQUFJdWhCLEtBQUssR0FBR3ZoQixJQUFJLENBQUNvQyxLQUFMLENBQVcyRCxNQUF2QjtBQUNBLGNBQUlELENBQUo7O0FBQ0EsZUFBS0EsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHeWIsS0FBaEIsRUFBdUJ6YixDQUFDLEVBQXhCLEVBQTRCO0FBQ3hCOUYsWUFBQUEsSUFBSSxDQUFDb0MsS0FBTCxDQUFXMEQsQ0FBWCxFQUFjZCxVQUFkLEdBQ0kwTyxJQUFJLENBQUM4TixXQUFMLEtBQXFCeGhCLElBQUksQ0FBQ29DLEtBQUwsQ0FBVzBELENBQVgsRUFBYzdELElBRHZDO0FBRUg7O0FBQ0RqQyxVQUFBQSxJQUFJLENBQUNLLE1BQUw7QUFDSCxTQWJrQjtBQWNuQlQsUUFBQUEsUUFBUSxFQUFFLG9CQUFZO0FBQ2xCLGNBQUlrYSxnQkFBZ0IsR0FBR3JlLENBQUMsQ0FBQyx3Q0FBRCxDQUFELENBQTRDeVYsR0FBNUMsRUFBdkI7QUFFQSxpQkFBTyxDQUNIO0FBQUVqUCxZQUFBQSxJQUFJLEVBQUUsTUFBUjtBQUFnQnZDLFlBQUFBLEtBQUssRUFBRW1nQjtBQUF2QixXQURHLEVBRUg7QUFBRTVkLFlBQUFBLElBQUksRUFBRSw0QkFBUjtBQUFzQ3ZDLFlBQUFBLEtBQUssRUFBRW9hO0FBQTdDLFdBRkcsQ0FBUDtBQUlILFNBckJrQjtBQXNCbkIxWixRQUFBQSxJQUFJLEVBQUUsY0FBVXJELENBQVYsRUFBYWlELElBQWIsRUFBbUI7QUFDckIsY0FBSXloQixhQUFhLEdBQUcsRUFBcEI7QUFDQSxjQUFJQyxRQUFRLEdBQUcsRUFBZjs7QUFFQSxjQUFJMWhCLElBQUksQ0FBQ2dKLE1BQUwsQ0FBWTVHLEtBQVosQ0FBa0IyRCxNQUFsQixHQUEyQixDQUEvQixFQUFrQztBQUM5QixpQkFBSyxJQUFJRCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHOUYsSUFBSSxDQUFDZ0osTUFBTCxDQUFZNUcsS0FBWixDQUFrQjJELE1BQXRDLEVBQThDRCxDQUFDLEVBQS9DLEVBQW1EO0FBQy9DOUYsY0FBQUEsSUFBSSxDQUFDZ0osTUFBTCxDQUFZNUcsS0FBWixDQUFrQjBELENBQWxCLEVBQXFCNGEsS0FBckIsR0FBNkIsSUFBN0IsQ0FEK0MsQ0FFL0M7O0FBQ0Esa0JBQUcxZ0IsSUFBSSxDQUFDZ0osTUFBTCxDQUFZNUcsS0FBWixDQUFrQjBELENBQWxCLEVBQXFCZ0IsS0FBckIsS0FBK0JoSixTQUEvQixJQUE0Q2tDLElBQUksQ0FBQ2dKLE1BQUwsQ0FBWTVHLEtBQVosQ0FBa0IwRCxDQUFsQixFQUFxQmdCLEtBQXJCLEtBQStCLElBQTlFLEVBQ0kyYSxhQUFhLENBQUN2ZixJQUFkLENBQW1CbEMsSUFBSSxDQUFDZ0osTUFBTCxDQUFZNUcsS0FBWixDQUFrQjBELENBQWxCLENBQW5CLEVBREosS0FHSTRiLFFBQVEsSUFBSTFoQixJQUFJLENBQUNnSixNQUFMLENBQVk1RyxLQUFaLENBQWtCMEQsQ0FBbEIsRUFBcUJnQixLQUFyQixHQUE2QixJQUF6QztBQUNQO0FBQ0o7O0FBRUQsY0FBSTRhLFFBQVEsS0FBSyxFQUFqQixFQUFxQjtBQUNqQjVGLFlBQUFBLEtBQUssQ0FBQzRGLFFBQUQsQ0FBTDtBQUNBO0FBQ0g7O0FBQ0RsUCxVQUFBQSxPQUFPLENBQUM2RSxHQUFSLENBQVlvSyxhQUFaOztBQUNBLGNBQUlBLGFBQWEsQ0FBQzFiLE1BQWQsR0FBdUIsQ0FBdkIsSUFBNEIyWixhQUFhLEtBQUssS0FBbEQsRUFBeUQ7QUFDckQ1RCxZQUFBQSxLQUFLLENBQUNyZ0IsQ0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUJ5VixHQUF6QixFQUFELENBQUw7QUFDQStPLFlBQUFBLGFBQWEsQ0FBQ25OLFVBQWQsQ0FBeUI1USxJQUF6QixDQUE4QnVmLGFBQWEsQ0FBQyxDQUFELENBQTNDO0FBQ0F4QixZQUFBQSxhQUFhLENBQUNqTyxXQUFkLEdBQTRCLElBQTVCO0FBQ0gsV0FKRCxNQUlPO0FBQ0hpTyxZQUFBQSxhQUFhLENBQUNuTixVQUFkLEdBQTJCbU4sYUFBYSxDQUFDbk4sVUFBZCxDQUF5QnZHLE1BQXpCLENBQWdDa1YsYUFBaEMsQ0FBM0I7QUFDQXhCLFlBQUFBLGFBQWEsQ0FBQ2pPLFdBQWQsR0FBNEIsSUFBNUI7QUFDSDtBQUNKLFNBbERrQjtBQW1EbkJsTCxRQUFBQSxLQUFLLEVBQUUsZUFBVWtCLEtBQVYsRUFBaUJpQixVQUFqQixFQUE2QmxCLFdBQTdCLEVBQTBDO0FBQzdDeUssVUFBQUEsT0FBTyxDQUFDNkUsR0FBUixDQUFZLG1CQUFaO0FBQ0E3RSxVQUFBQSxPQUFPLENBQUM2RSxHQUFSLENBQVlyUCxLQUFaO0FBQ0F3SyxVQUFBQSxPQUFPLENBQUM2RSxHQUFSLENBQVlwTyxVQUFaO0FBQ0F1SixVQUFBQSxPQUFPLENBQUM2RSxHQUFSLENBQVl0UCxXQUFaO0FBQ0g7QUF4RGtCLE9BQXZCO0FBMERILEtBbEx1QztBQW1MeENpUCxJQUFBQSxPQUFPLEVBQUU7QUFDTG9LLE1BQUFBLFdBQVcsRUFBRSxxQkFBVWhOLEtBQVYsRUFBaUI7QUFDMUIsYUFBSytMLGFBQUwsR0FBcUIvTCxLQUFyQjtBQUNILE9BSEk7QUFJTG9OLE1BQUFBLFdBQVcsRUFBRSx1QkFBWTtBQUNyQixlQUFPLHVDQUF1QzdoQixPQUF2QyxDQUErQyxPQUEvQyxFQUF3RCxVQUFVMmIsQ0FBVixFQUFhO0FBQ3hFLGNBQUlxRyxDQUFDLEdBQUdyZSxJQUFJLENBQUNzZSxNQUFMLEtBQWdCLEVBQWhCLEdBQXFCLENBQTdCO0FBQUEsY0FBZ0NDLENBQUMsR0FBR3ZHLENBQUMsS0FBSyxHQUFOLEdBQVlxRyxDQUFaLEdBQWlCQSxDQUFDLEdBQUcsR0FBSixHQUFVLEdBQS9EO0FBQ0EsaUJBQU9FLENBQUMsQ0FBQ3RpQixRQUFGLENBQVcsRUFBWCxDQUFQO0FBQ0gsU0FITSxDQUFQO0FBSUgsT0FUSTtBQVVMdWlCLE1BQUFBLGNBQWMsRUFBRSx3QkFBVUMsS0FBVixFQUFpQjtBQUM3QixZQUFJQyxPQUFPLEdBQUcsRUFBZDs7QUFDQSxZQUFJLEtBQUs3QixhQUFULEVBQXdCO0FBQ3BCLGNBQUk3ZCxLQUFLLEdBQUcsS0FBS3dRLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQjhDLE9BQWhCLENBQXdCLEtBQUt1SyxhQUE3QixDQUEvQjs7QUFDQSxjQUFJN2QsS0FBSyxHQUFHLENBQUMsQ0FBYixFQUFnQjtBQUNaMGYsWUFBQUEsT0FBTyxHQUFHLEtBQUtsUCxVQUFMLENBQWdCeFEsS0FBaEIsQ0FBVjtBQUNBMGYsWUFBQUEsT0FBTyxDQUFDdkIsU0FBUixHQUFvQixJQUFwQixDQUZZLENBR1o7O0FBQ0EsaUJBQUszTixVQUFMLENBQWdCNkUsTUFBaEIsQ0FBdUJyVixLQUF2QixFQUE4QixDQUE5QjtBQUNIO0FBQ0osU0FSRCxNQVNLO0FBQ0Q7QUFDQSxjQUFJLEtBQUt3USxVQUFMLENBQWdCL00sTUFBaEIsS0FBMkIsQ0FBL0IsRUFBa0M7QUFDOUJpYyxZQUFBQSxPQUFPLEdBQUcsS0FBS2xQLFVBQUwsQ0FBZ0J4USxLQUFoQixDQUFWO0FBQ0EwZixZQUFBQSxPQUFPLENBQUN2QixTQUFSLEdBQW9CLElBQXBCLENBRjhCLENBRzlCOztBQUNBLGlCQUFLM04sVUFBTCxDQUFnQjZFLE1BQWhCLENBQXVCLENBQXZCLEVBQTBCLENBQTFCO0FBQ0g7QUFDSjs7QUFDRCxhQUFLd0ksYUFBTCxHQUFxQixJQUFyQjtBQUNILE9BL0JJO0FBZ0NMOEIsTUFBQUEsa0JBQWtCLEVBQUUsNEJBQVVGLEtBQVYsRUFBaUI7QUFDakN0bUIsUUFBQUEsQ0FBQyxDQUFDLEtBQUtvYixLQUFMLENBQVdxTCxjQUFaLENBQUQsQ0FBNkI1SixLQUE3QjtBQUNBLGFBQUsrSCxlQUFMLEdBQXVCLEtBQUtGLGFBQUwsQ0FBbUJRLFNBQTFDO0FBQ0gsT0FuQ0k7QUFvQ0x3QixNQUFBQSxvQkFBb0IsRUFBRSw4QkFBVUosS0FBVixFQUFpQjtBQUNuQ3RtQixRQUFBQSxDQUFDLENBQUMsS0FBS29iLEtBQUwsQ0FBV3FMLGNBQVosQ0FBRCxDQUE2QjVKLEtBQTdCLENBQW1DLE1BQW5DO0FBQ0EsYUFBSzZILGFBQUwsQ0FBbUJRLFNBQW5CLEdBQStCLEtBQUtOLGVBQXBDO0FBQ0gsT0F2Q0k7QUF3Q0wrQixNQUFBQSxlQUFlLEVBQUUseUJBQVVMLEtBQVYsRUFBaUI7QUFDOUJ0bUIsUUFBQUEsQ0FBQyxDQUFDLEtBQUtvYixLQUFMLENBQVd3TCxjQUFaLENBQUQsQ0FBNkIvSixLQUE3QixHQUQ4QixDQUU5Qjs7QUFDQSxhQUFLNkgsYUFBTCxDQUFtQlMsTUFBbkIsR0FBNEI7QUFDMUJKLFVBQUFBLENBQUMsRUFBRSxLQUFLTCxhQUFMLENBQW1CUyxNQUFuQixDQUEwQkosQ0FESDtBQUUxQlEsVUFBQUEsQ0FBQyxFQUFFLEtBQUtiLGFBQUwsQ0FBbUJTLE1BQW5CLENBQTBCSTtBQUZILFNBQTVCO0FBSUEsYUFBS1YsWUFBTCxHQUFvQixLQUFLSCxhQUFMLENBQW1CUyxNQUF2QztBQUNILE9BaERJO0FBaURMMEIsTUFBQUEsb0JBQW9CLEVBQUUsOEJBQVVQLEtBQVYsRUFBaUI7QUFDbkN0bUIsUUFBQUEsQ0FBQyxDQUFDLEtBQUtvYixLQUFMLENBQVd3TCxjQUFaLENBQUQsQ0FBNkIvSixLQUE3QixDQUFtQyxNQUFuQztBQUNBLGFBQUs2SCxhQUFMLENBQW1CUyxNQUFuQixHQUE0QixLQUFLTixZQUFqQztBQUNILE9BcERJO0FBcURMaUMsTUFBQUEsV0FBVyxFQUFFLHFCQUFVUixLQUFWLEVBQWlCO0FBQzFCLGFBQUs1QixhQUFMLENBQW1CUyxNQUFuQixHQUE0QjtBQUFFSixVQUFBQSxDQUFDLEVBQUUsR0FBTDtBQUFVUSxVQUFBQSxDQUFDLEVBQUU7QUFBYixTQUE1QjtBQUNILE9BdkRJO0FBd0RMd0IsTUFBQUEsWUFBWSxFQUFFLHNCQUFTVCxLQUFULEVBQWdCO0FBQzFCLFlBQUlVLEtBQUssR0FBRyxLQUFLNUwsS0FBTCxDQUFXNkwsV0FBdkI7QUFDQSxhQUFLdkMsYUFBTCxDQUFtQlMsTUFBbkIsR0FBNEI7QUFDekJKLFVBQUFBLENBQUMsRUFBRXVCLEtBQUssQ0FBQ1ksT0FBTixHQUFnQkYsS0FBSyxDQUFDRyxXQURBO0FBRXpCNUIsVUFBQUEsQ0FBQyxFQUFFZSxLQUFLLENBQUNjLE9BQU4sR0FBZ0JKLEtBQUssQ0FBQ0s7QUFGQSxTQUE1QjtBQUlILE9BOURJO0FBK0RMQyxNQUFBQSxVQUFVLEVBQUUsc0JBQVk7QUFDcEIsWUFBSSxLQUFLbE0sS0FBTCxDQUFXNkwsV0FBWCxJQUEwQixLQUFLN0wsS0FBTCxDQUFXbU0sU0FBckMsSUFBa0QsS0FBSzdDLGFBQTNELEVBQTBFO0FBQ3RFO0FBQ0EsY0FBSThDLE1BQU0sR0FBRyxDQUFDLEtBQUtwTSxLQUFMLENBQVdtTSxTQUFYLENBQXFCSixXQUFyQixHQUFtQyxLQUFLL0wsS0FBTCxDQUFXNkwsV0FBWCxDQUF1QkUsV0FBM0QsSUFBMEUsQ0FBdkY7QUFDQSxjQUFJTSxRQUFRLEdBQUksS0FBSy9DLGFBQUwsQ0FBbUJTLE1BQW5CLENBQTBCSixDQUExQixHQUE4QixLQUFLM0osS0FBTCxDQUFXNkwsV0FBWCxDQUF1QkUsV0FBdEQsR0FBcUVLLE1BQXBGOztBQUNBLGNBQUlDLFFBQVEsR0FBRyxFQUFmLEVBQW1CO0FBQUU7QUFDakJBLFlBQUFBLFFBQVEsR0FBRyxFQUFYO0FBQ0gsV0FGRCxNQUVPO0FBQ0hBLFlBQUFBLFFBQVEsR0FBR0EsUUFBUSxHQUFHLENBQXRCLENBREcsQ0FDc0I7QUFDNUI7O0FBQ0QsaUJBQU9BLFFBQVEsR0FBRyxJQUFsQjtBQUNILFNBVkQsTUFVTztBQUNILGlCQUFPLEdBQVA7QUFDSDtBQUNKLE9BN0VJO0FBOEVMQyxNQUFBQSxTQUFTLEVBQUUscUJBQVk7QUFDbkIsWUFBSSxLQUFLdE0sS0FBTCxDQUFXNkwsV0FBWCxJQUEwQixLQUFLdkMsYUFBbkMsRUFBa0Q7QUFDOUMsY0FBSStDLFFBQVEsR0FBRyxLQUFLL0MsYUFBTCxDQUFtQlMsTUFBbkIsQ0FBMEJJLENBQTFCLEdBQThCLEtBQUtuSyxLQUFMLENBQVc2TCxXQUFYLENBQXVCSSxZQUFwRTs7QUFDQSxjQUFJSSxRQUFRLEdBQUcsRUFBZixFQUFtQjtBQUFFO0FBQ2pCQSxZQUFBQSxRQUFRLEdBQUcsRUFBWDtBQUNILFdBRkQsTUFFTztBQUNIQSxZQUFBQSxRQUFRLEdBQUdBLFFBQVEsR0FBRyxDQUF0QixDQURHLENBQ3NCO0FBQzVCOztBQUNELGlCQUFPQSxRQUFRLEdBQUcsSUFBbEI7QUFDSCxTQVJELE1BUU87QUFDSCxpQkFBTyxHQUFQO0FBQ0g7QUFDSixPQTFGSTtBQTJGTEUsTUFBQUEsU0FBUyxFQUFFLG1CQUFVckIsS0FBVixFQUFpQjtBQUN4QixZQUFJVSxLQUFLLEdBQUcsS0FBSzVMLEtBQUwsQ0FBVzZMLFdBQXZCO0FBQ0EsYUFBS3ZDLGFBQUwsQ0FBbUJTLE1BQW5CLEdBQTRCO0FBQ3hCSixVQUFBQSxDQUFDLEVBQUV1QixLQUFLLENBQUNZLE9BQU4sR0FBZ0JGLEtBQUssQ0FBQ0csV0FERDtBQUV4QjVCLFVBQUFBLENBQUMsRUFBRWUsS0FBSyxDQUFDYyxPQUFOLEdBQWdCSixLQUFLLENBQUNLO0FBRkQsU0FBNUI7QUFJSCxPQWpHSTtBQWtHTE8sTUFBQUEsYUFBYSxFQUFFLHVCQUFVamhCLEtBQVYsRUFBaUI7QUFDNUIsWUFBS0EsS0FBSyxDQUFDMkQsTUFBTixHQUFlLENBQWhCLElBQXVCMlosYUFBYSxLQUFLLEtBQTdDLEVBQXFEO0FBQ2pENUQsVUFBQUEsS0FBSyxDQUFDcmdCLENBQUMsQ0FBQyxxQkFBRCxDQUFELENBQXlCeVYsR0FBekIsRUFBRCxDQUFMO0FBQ0ErTyxVQUFBQSxhQUFhLENBQUNuTixVQUFkLENBQXlCNVEsSUFBekIsQ0FBOEJFLEtBQUssQ0FBQyxDQUFELENBQW5DO0FBQ0E2ZCxVQUFBQSxhQUFhLENBQUNqTyxXQUFkLEdBQTRCLElBQTVCO0FBQ0gsU0FKRCxNQUlPO0FBQ0hpTyxVQUFBQSxhQUFhLENBQUNuTixVQUFkLEdBQTJCbU4sYUFBYSxDQUFDbk4sVUFBZCxDQUF5QnZHLE1BQXpCLENBQWdDbkssS0FBaEMsQ0FBM0I7QUFDQTZkLFVBQUFBLGFBQWEsQ0FBQ2pPLFdBQWQsR0FBNEIsSUFBNUI7QUFDSDtBQUNKLE9BM0dJO0FBNEdMd0csTUFBQUEsb0JBQW9CLEVBQUUsOEJBQVVwRSxLQUFWLEVBQWlCO0FBQ25DLFlBQUlWLElBQUksR0FBRyxJQUFYO0FBQ0FBLFFBQUFBLElBQUksQ0FBQ3lNLGFBQUwsR0FBcUIvTCxLQUFyQixDQUZtQyxDQUduQztBQUNBOztBQUNBcEQsUUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDbkIwQyxVQUFBQSxJQUFJLENBQUNvTyxjQUFMO0FBQ0gsU0FGUyxFQUVQLEdBRk8sQ0FBVjtBQUdIO0FBcEhJLEtBbkwrQjtBQXlTeEN0TCxJQUFBQSxLQUFLLEVBQUU7QUFDSDFELE1BQUFBLFVBQVUsRUFBRTtBQUNSd1EsUUFBQUEsSUFBSSxFQUFFLElBREU7QUFFUkMsUUFBQUEsT0FGUSxxQkFFRztBQUNQO0FBQ0F2UyxVQUFBQSxVQUFVLENBQUMsWUFBWTtBQUFFdlYsWUFBQUEsQ0FBQyxDQUFDbUMsUUFBRCxDQUFELENBQVk4TixPQUFaLENBQW9CLHVCQUFwQjtBQUErQyxXQUE5RCxFQUFnRSxHQUFoRSxDQUFWO0FBQ0g7QUFMTyxPQURUO0FBUUh1SixNQUFBQSxZQUFZLEVBQUUsc0JBQVVzQixRQUFWLEVBQW9CO0FBQzlCeEIsUUFBQUEsWUFBWSxDQUFDMEIsT0FBYixDQUFxQixpQkFBckIsRUFBd0N0RyxJQUFJLENBQUN1RyxTQUFMLENBQWVILFFBQWYsQ0FBeEM7QUFDSDtBQVZFO0FBelNpQyxHQUFSLENBQXBDO0FBc1RIO0FDL1RELFNBQVNpTixvQkFBVCxDQUE4QjVYLEVBQTlCLEVBQWtDNlgsZ0JBQWxDLEVBQW9EaEUsWUFBcEQsRUFBa0VDLGFBQWxFLEVBQWlGQyxjQUFqRixFQUFpR0MsWUFBakcsRUFBK0c7QUFFM0csTUFBSWxTLE1BQU0sR0FBR2pTLENBQUMsQ0FBQ21DLFFBQVEsQ0FBQytiLGNBQVQsQ0FBd0JsZSxDQUFDLENBQUNtUSxFQUFELENBQUQsQ0FBTTVMLElBQU4sQ0FBVyxLQUFYLENBQXhCLENBQUQsQ0FBZDtBQUNBLE1BQUk4ZixZQUFZLEdBQUdwUyxNQUFNLENBQUMxTixJQUFQLENBQVksTUFBWixDQUFuQjtBQUVBLE1BQUkrZixnQkFBZ0IsR0FBR3RrQixDQUFDLENBQUNtUSxFQUFELENBQXhCO0FBQ0EsTUFBSW9VLFFBQVEsR0FBR0QsZ0JBQWdCLENBQUMzWixJQUFqQixDQUFzQixJQUF0QixDQUFmO0FBQ0EsTUFBSTZaLGFBQUo7QUFFQUMsRUFBQUEsY0FBYyxDQUFDaGUsSUFBZixDQUFvQitkLGFBQWEsR0FBRyxJQUFJOU4sR0FBSixDQUFRO0FBQ3hDdkcsSUFBQUEsRUFBRSxFQUFFbVUsZ0JBQWdCLENBQUMxSixHQUFqQixDQUFxQixDQUFyQixDQURvQztBQUV4Q3JXLElBQUFBLElBQUksRUFBRTtBQUNGOFMsTUFBQUEsVUFBVSxFQUFFLEVBRFY7QUFFRnFOLE1BQUFBLGFBQWEsRUFBRSxJQUZiO0FBR0ZoTixNQUFBQSxXQUFXLEVBQUUsS0FIWDtBQUlGaU4sTUFBQUEsUUFBUSxFQUFFSixRQUpSO0FBS0ZoTyxNQUFBQSxXQUFXLEVBQUUsS0FMWDtBQU1GMk4sTUFBQUEsY0FBYyxFQUFFQSxjQU5kO0FBT0ZVLE1BQUFBLGVBQWUsRUFBRSxFQVBmO0FBUUZULE1BQUFBLFlBQVksRUFBRUEsWUFSWjtBQVNGVSxNQUFBQSxZQUFZLEVBQUU7QUFUWixLQUZrQztBQWF4QzdNLElBQUFBLE9BQU8sRUFBRSxtQkFBWTtBQUNqQixVQUFJQyxJQUFJLEdBQUcsSUFBWDtBQUVBQSxNQUFBQSxJQUFJLENBQUN1QixZQUFMLEdBQW9COUUsSUFBSSxDQUFDK0UsS0FBTCxDQUFXSCxZQUFZLENBQUNDLE9BQWIsQ0FBcUIsaUJBQXJCLENBQVgsQ0FBcEI7QUFDSCxLQWpCdUM7QUFrQnhDRyxJQUFBQSxRQUFRLEVBQUU7QUFDTnlELE1BQUFBLEtBQUssRUFBRTtBQUNIdkMsUUFBQUEsR0FBRyxFQUFFLGVBQVk7QUFDYixjQUFJa0ssVUFBVSxHQUFHLEVBQWpCOztBQUNBLGNBQUksQ0FBQyxLQUFLdk8sV0FBVixFQUF1QjtBQUNuQixtQkFBTzdCLElBQUksQ0FBQ3VHLFNBQUwsQ0FBZW9KLFlBQWYsQ0FBUDtBQUNIOztBQUNELGVBQUtoTixVQUFMLENBQWdCcUUsT0FBaEIsQ0FBd0IsVUFBVXFKLENBQVYsRUFBYTtBQUNqQyxnQkFBSUEsQ0FBQyxDQUFDbE0sU0FBRixLQUFnQixXQUFwQixFQUFpQztBQUM3QjtBQUNIOztBQUNEaU0sWUFBQUEsVUFBVSxDQUFDcmUsSUFBWCxDQUFnQjtBQUFFNkosY0FBQUEsSUFBSSxFQUFFeVUsQ0FBQyxDQUFDbE0sU0FBVjtBQUFxQnFNLGNBQUFBLFNBQVMsRUFBRUgsQ0FBQyxDQUFDRyxTQUFsQztBQUE2Q0MsY0FBQUEsTUFBTSxFQUFFSixDQUFDLENBQUNJO0FBQXZELGFBQWhCO0FBQ0gsV0FMRDtBQU1BLGlCQUFPelEsSUFBSSxDQUFDdUcsU0FBTCxDQUFlNkosVUFBZixDQUFQO0FBQ0gsU0FiRTtBQWNIakssUUFBQUEsR0FBRyxFQUFFLGFBQVV1SyxNQUFWLEVBQWtCO0FBQ25CLGNBQUluTixJQUFJLEdBQUcsSUFBWDtBQUNBLGNBQUk2TSxVQUFVLEdBQUdNLE1BQU0sSUFBSSxFQUEzQjtBQUNBLGNBQUlDLE1BQU0sR0FBR3JsQixDQUFDLENBQUM2TCxRQUFGLEVBQWI7QUFDQSxjQUFJMEYsS0FBSyxHQUFHLEVBQVo7QUFDQSxjQUFJakgsTUFBTSxHQUFHLENBQWI7QUFDQXdhLFVBQUFBLFVBQVUsQ0FBQ3BKLE9BQVgsQ0FBbUIsVUFBVXFKLENBQVYsRUFBYTFhLENBQWIsRUFBZ0I7QUFDL0JrSCxZQUFBQSxLQUFLLENBQUM5SyxJQUFOLENBQVc7QUFBRUQsY0FBQUEsSUFBSSxFQUFFLE1BQU11ZSxDQUFDLENBQUN6VSxJQUFoQjtBQUFzQmlLLGNBQUFBLElBQUksRUFBRSxFQUE1QjtBQUFnQzFCLGNBQUFBLFNBQVMsRUFBRTtBQUEzQyxhQUFYLEVBRCtCLENBQzhCOztBQUM3RDFOLFlBQUFBLE9BQU8sR0FBR25MLENBQUMsQ0FBQ29SLElBQUYsQ0FBT2lVLE1BQVAsRUFBZTFnQixJQUFmLENBQW9CLFlBQVk7QUFDdEMzRSxjQUFBQSxDQUFDLENBQUNzTixJQUFGLENBQU87QUFDSHpELGdCQUFBQSxHQUFHLEVBQUVtYSxZQUFZLEdBQUcsUUFBZixHQUEwQnZJLGtCQUFrQixDQUFDc0osQ0FBQyxDQUFDelUsSUFBSCxDQUQ5QztBQUVIMEcsZ0JBQUFBLE1BQU0sRUFBRSxLQUZMO0FBR0g1TCxnQkFBQUEsT0FBTyxFQUFFLGlCQUFVN0csSUFBVixFQUFnQjtBQUNyQkEsa0JBQUFBLElBQUksQ0FBQytnQixNQUFMLEdBQWMvZ0IsSUFBSSxDQUFDaUMsSUFBTCxHQUFZNkQsQ0FBQyxDQUFDdkcsUUFBRixFQUExQjtBQUNBUyxrQkFBQUEsSUFBSSxDQUFDMmdCLFNBQUwsR0FBaUJILENBQUMsQ0FBQ0csU0FBbkIsQ0FGcUIsQ0FFUzs7QUFDOUIzZ0Isa0JBQUFBLElBQUksQ0FBQzRnQixNQUFMLEdBQWNKLENBQUMsQ0FBQ0ksTUFBaEIsQ0FIcUIsQ0FHRzs7QUFDeEI1VCxrQkFBQUEsS0FBSyxDQUFDMkssTUFBTixDQUFhN1IsQ0FBYixFQUFnQixDQUFoQixFQUFtQjlGLElBQW5COztBQUNBLHNCQUFJZ04sS0FBSyxDQUFDakgsTUFBTixLQUFpQixFQUFFQSxNQUF2QixFQUErQjtBQUMzQmlILG9CQUFBQSxLQUFLLENBQUNtSyxPQUFOLENBQWMsVUFBVTZKLENBQVYsRUFBYTtBQUN2QnROLHNCQUFBQSxJQUFJLENBQUNaLFVBQUwsQ0FBZ0I1USxJQUFoQixDQUFxQjhlLENBQXJCO0FBQ0gscUJBRkQ7QUFHQXROLG9CQUFBQSxJQUFJLENBQUMxQixXQUFMLEdBQW1CLElBQW5CO0FBQ0g7QUFDSixpQkFkRTtBQWVIbEwsZ0JBQUFBLEtBQUssRUFBRSxlQUFVQSxNQUFWLEVBQWlCO0FBQ3BCMEwsa0JBQUFBLE9BQU8sQ0FBQzZFLEdBQVIsQ0FBWXZRLE1BQVo7QUFDQWtHLGtCQUFBQSxLQUFLLENBQUMySyxNQUFOLENBQWE3UixDQUFiLEVBQWdCLENBQWhCLEVBQW1CO0FBQUU3RCxvQkFBQUEsSUFBSSxFQUFFdWUsQ0FBQyxDQUFDelUsSUFBVjtBQUFnQmlLLG9CQUFBQSxJQUFJLEVBQUUsRUFBdEI7QUFBMEIxQixvQkFBQUEsU0FBUyxFQUFFLFdBQXJDO0FBQWtEcU0sb0JBQUFBLFNBQVMsRUFBRSxFQUE3RDtBQUFpRUMsb0JBQUFBLE1BQU0sRUFBRTtBQUFFSixzQkFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUVEsc0JBQUFBLENBQUMsRUFBRTtBQUFYO0FBQXpFLG1CQUFuQjs7QUFDQSxzQkFBSWhVLEtBQUssQ0FBQ2pILE1BQU4sS0FBaUIsRUFBRUEsTUFBdkIsRUFBK0I7QUFDM0JpSCxvQkFBQUEsS0FBSyxDQUFDbUssT0FBTixDQUFjLFVBQVVxSixDQUFWLEVBQWE7QUFDdkI5TSxzQkFBQUEsSUFBSSxDQUFDWixVQUFMLENBQWdCNVEsSUFBaEIsQ0FBcUJzZSxDQUFyQjtBQUNILHFCQUZEO0FBR0E5TSxvQkFBQUEsSUFBSSxDQUFDMUIsV0FBTCxHQUFtQixJQUFuQjtBQUNIO0FBQ0o7QUF4QkUsZUFBUDtBQTBCSCxhQTNCUyxDQUFWO0FBNEJILFdBOUJEO0FBaUNBOE8sVUFBQUEsTUFBTSxDQUFDN1csT0FBUDtBQUNIO0FBdERFLE9BREQ7QUF5RE5zRCxNQUFBQSxRQUFRLEVBQUUsb0JBQVk7QUFDbEIsZUFBT2pLLElBQUksQ0FBQzJkLEtBQUwsQ0FBVyxLQUFLZCxhQUFMLENBQW1CM2QsSUFBbkIsR0FBMEIsSUFBckMsQ0FBUDtBQUNILE9BM0RLO0FBNEROMGUsTUFBQUEsV0FBVyxFQUFFLHVCQUFZO0FBQ3JCLGVBQU8sS0FBS3BPLFVBQUwsQ0FBZ0IvTSxNQUFoQixLQUEyQixDQUEzQixJQUFnQyxLQUFLK00sVUFBTCxDQUFnQi9NLE1BQWhCLEdBQXlCLENBQXpCLElBQThCMlosYUFBckU7QUFDSCxPQTlESztBQStETnRKLE1BQUFBLFNBQVMsRUFBRSxxQkFBWTtBQUNuQixlQUFPLEtBQUtqRCxXQUFMLEdBQW1CLEdBQW5CLEdBQXlCLEdBQWhDO0FBQ0gsT0FqRUs7QUFrRU44QixNQUFBQSxZQUFZLEVBQUU7QUFDVm9CLFFBQUFBLEdBQUcsRUFBRSxlQUFZO0FBQ2IsaUJBQU87QUFDSGxELFlBQUFBLFdBQVcsRUFBRSxLQUFLQTtBQURmLFdBQVA7QUFHSCxTQUxTO0FBTVZtRCxRQUFBQSxHQUFHLEVBQUUsYUFBVUMsUUFBVixFQUFvQjtBQUNyQixjQUFJLENBQUNBLFFBQUwsRUFBZTtBQUNYO0FBQ0g7O0FBQ0QsZUFBS3BELFdBQUwsR0FBbUJvRCxRQUFRLENBQUNwRCxXQUE1QjtBQUNIO0FBWFM7QUFsRVIsS0FsQjhCO0FBa0d4Q3lELElBQUFBLE9BQU8sRUFBRSxtQkFBWTtBQUNqQixVQUFJbEQsSUFBSSxHQUFHLElBQVg7QUFFQUEsTUFBQUEsSUFBSSxDQUFDa0YsS0FBTCxHQUFha0gsWUFBYjtBQUVBcE0sTUFBQUEsSUFBSSxDQUFDRSxHQUFMLENBQVMsK0JBQVQsRUFBMEMsVUFBVVEsS0FBVixFQUFpQjtBQUN2RFYsUUFBQUEsSUFBSSxDQUFDOEUsb0JBQUwsQ0FBMEJwRSxLQUExQjtBQUNILE9BRkQ7QUFJQVYsTUFBQUEsSUFBSSxDQUFDRSxHQUFMLENBQVMsc0JBQVQsRUFBaUMsVUFBVVEsS0FBVixFQUFpQjtBQUM5Q1YsUUFBQUEsSUFBSSxDQUFDME4sV0FBTCxDQUFpQmhOLEtBQWpCO0FBQ0gsT0FGRDtBQUlBVixNQUFBQSxJQUFJLENBQUNFLEdBQUwsQ0FBUyxlQUFULEVBQTBCLFVBQVV4UixLQUFWLEVBQWlCO0FBQ3ZDc1IsUUFBQUEsSUFBSSxDQUFDMlAsYUFBTCxDQUFtQmpoQixLQUFuQjtBQUNILE9BRkQ7QUFHSCxLQWxIdUM7QUFtSHhDNFUsSUFBQUEsT0FBTyxFQUFFO0FBQ0xvSyxNQUFBQSxXQUFXLEVBQUUscUJBQVVoTixLQUFWLEVBQWlCO0FBQzFCLGFBQUsrTCxhQUFMLEdBQXFCL0wsS0FBckI7QUFDSCxPQUhJO0FBSUxzUCxNQUFBQSxTQUFTLEVBQUUsbUJBQVUzQixLQUFWLEVBQWlCO0FBQ3hCLFlBQUlyTyxJQUFJLEdBQUcsSUFBWDs7QUFDQSxZQUFJQSxJQUFJLENBQUN3TixXQUFULEVBQXNCO0FBQ2xCemxCLFVBQUFBLENBQUMsQ0FBQyxXQUFELENBQUQsQ0FBZWdRLE1BQWYsR0FBd0JzRixRQUF4QixDQUFpQ3RWLENBQUMsQ0FBQ2dvQixnQkFBRCxDQUFELENBQW9CelUsSUFBcEIsQ0FBeUIsYUFBekIsQ0FBakM7QUFDQXZULFVBQUFBLENBQUMsQ0FBQyxXQUFELENBQUQsQ0FBZWtvQixJQUFmO0FBQ0EsY0FBSXJMLEtBQUssR0FBRzdjLENBQUMsQ0FBQ2dvQixnQkFBRCxDQUFELENBQW9CbkwsS0FBcEIsRUFBWjtBQUNBN2MsVUFBQUEsQ0FBQyxDQUFDZ29CLGdCQUFELENBQUQsQ0FBb0J6VSxJQUFwQixDQUF5Qix5QkFBekIsRUFBb0Q5SyxHQUFwRCxDQUF3RCxPQUF4RCxFQUFpRUgsRUFBakUsQ0FBb0UsT0FBcEUsRUFBNkUsVUFBVThkLENBQVYsRUFBYTtBQUN0Rm5PLFlBQUFBLElBQUksQ0FBQzJQLGFBQUwsQ0FBbUJwUixRQUFRLENBQUNjLGNBQTVCLEVBRHNGLENBR3RGOztBQUNBZCxZQUFBQSxRQUFRLENBQUNjLGNBQVQsR0FBMEIsRUFBMUI7QUFFQXVGLFlBQUFBLEtBQUssQ0FBQ0EsS0FBTixDQUFZLE1BQVo7QUFDQSxtQkFBTyxJQUFQO0FBQ0gsV0FSRDtBQVNIO0FBQ0osT0FwQkk7QUFxQkwySixNQUFBQSxrQkFBa0IsRUFBRSw0QkFBVUYsS0FBVixFQUFpQjtBQUNqQ3RtQixRQUFBQSxDQUFDLENBQUMsS0FBS29iLEtBQUwsQ0FBV3FMLGNBQVosQ0FBRCxDQUE2QjVKLEtBQTdCO0FBQ0EsYUFBSytILGVBQUwsR0FBdUIsS0FBS0YsYUFBTCxDQUFtQlEsU0FBMUM7QUFDSCxPQXhCSTtBQXlCTHdCLE1BQUFBLG9CQUFvQixFQUFFLDhCQUFVSixLQUFWLEVBQWlCO0FBQ25DdG1CLFFBQUFBLENBQUMsQ0FBQyxLQUFLb2IsS0FBTCxDQUFXcUwsY0FBWixDQUFELENBQTZCNUosS0FBN0IsQ0FBbUMsTUFBbkM7QUFDQSxhQUFLNkgsYUFBTCxDQUFtQlEsU0FBbkIsR0FBK0IsS0FBS04sZUFBcEM7QUFDSCxPQTVCSTtBQTZCTCtCLE1BQUFBLGVBQWUsRUFBRSx5QkFBVUwsS0FBVixFQUFpQjtBQUM5QnRtQixRQUFBQSxDQUFDLENBQUMsS0FBS29iLEtBQUwsQ0FBV3dMLGNBQVosQ0FBRCxDQUE2Qi9KLEtBQTdCLEdBRDhCLENBRTlCOztBQUNBLGFBQUs2SCxhQUFMLENBQW1CUyxNQUFuQixHQUE0QjtBQUMxQkosVUFBQUEsQ0FBQyxFQUFFLEtBQUtMLGFBQUwsQ0FBbUJTLE1BQW5CLENBQTBCSixDQURIO0FBRTFCUSxVQUFBQSxDQUFDLEVBQUUsS0FBS2IsYUFBTCxDQUFtQlMsTUFBbkIsQ0FBMEJJO0FBRkgsU0FBNUI7QUFJQSxhQUFLVixZQUFMLEdBQW9CLEtBQUtILGFBQUwsQ0FBbUJTLE1BQXZDO0FBQ0gsT0FyQ0k7QUFzQ0wwQixNQUFBQSxvQkFBb0IsRUFBRSw4QkFBVVAsS0FBVixFQUFpQjtBQUNuQ3RtQixRQUFBQSxDQUFDLENBQUMsS0FBS29iLEtBQUwsQ0FBV3dMLGNBQVosQ0FBRCxDQUE2Qi9KLEtBQTdCLENBQW1DLE1BQW5DO0FBQ0EsYUFBSzZILGFBQUwsQ0FBbUJTLE1BQW5CLEdBQTRCLEtBQUtOLFlBQWpDO0FBQ0gsT0F6Q0k7QUEwQ0xpQyxNQUFBQSxXQUFXLEVBQUUscUJBQVVSLEtBQVYsRUFBaUI7QUFDMUIsYUFBSzVCLGFBQUwsQ0FBbUJTLE1BQW5CLEdBQTRCO0FBQUVKLFVBQUFBLENBQUMsRUFBRSxHQUFMO0FBQVVRLFVBQUFBLENBQUMsRUFBRTtBQUFiLFNBQTVCO0FBQ0gsT0E1Q0k7QUE2Q0x3QixNQUFBQSxZQUFZLEVBQUUsc0JBQVNULEtBQVQsRUFBZ0I7QUFDMUIsWUFBSVUsS0FBSyxHQUFHLEtBQUs1TCxLQUFMLENBQVc2TCxXQUF2QjtBQUNBLGFBQUt2QyxhQUFMLENBQW1CUyxNQUFuQixHQUE0QjtBQUN6QkosVUFBQUEsQ0FBQyxFQUFFdUIsS0FBSyxDQUFDWSxPQUFOLEdBQWdCRixLQUFLLENBQUNHLFdBREE7QUFFekI1QixVQUFBQSxDQUFDLEVBQUVlLEtBQUssQ0FBQ2MsT0FBTixHQUFnQkosS0FBSyxDQUFDSztBQUZBLFNBQTVCO0FBSUgsT0FuREk7QUFvRExDLE1BQUFBLFVBQVUsRUFBRSxzQkFBWTtBQUNwQixZQUFJLEtBQUtsTSxLQUFMLENBQVc2TCxXQUFYLElBQTBCLEtBQUs3TCxLQUFMLENBQVdtTSxTQUFyQyxJQUFrRCxLQUFLN0MsYUFBM0QsRUFBMEU7QUFDdEU7QUFDQSxjQUFJOEMsTUFBTSxHQUFHLENBQUMsS0FBS3BNLEtBQUwsQ0FBV21NLFNBQVgsQ0FBcUJKLFdBQXJCLEdBQW1DLEtBQUsvTCxLQUFMLENBQVc2TCxXQUFYLENBQXVCRSxXQUEzRCxJQUEwRSxDQUF2RjtBQUNBLGNBQUlNLFFBQVEsR0FBSSxLQUFLL0MsYUFBTCxDQUFtQlMsTUFBbkIsQ0FBMEJKLENBQTFCLEdBQThCLEtBQUszSixLQUFMLENBQVc2TCxXQUFYLENBQXVCRSxXQUF0RCxHQUFxRUssTUFBcEY7QUFDQSxjQUFJVyxVQUFVLEdBQUd0Z0IsSUFBSSxDQUFDMmQsS0FBTCxDQUFXLEtBQUtwSyxLQUFMLENBQVdtTSxTQUFYLENBQXFCYSxhQUFyQixDQUFtQyxvQkFBbkMsRUFBeURqQixXQUFwRSxDQUFqQjs7QUFDQSxjQUFHN2hCLE1BQU0sQ0FBQytpQixTQUFQLENBQWlCRixVQUFqQixDQUFILEVBQ0E7QUFDSVYsWUFBQUEsUUFBUSxHQUFHQSxRQUFRLEdBQUdVLFVBQVUsR0FBQyxDQUFqQztBQUNIOztBQUNELGlCQUFPVixRQUFRLEdBQUcsSUFBbEI7QUFDSCxTQVZELE1BVU87QUFDSCxpQkFBTyxHQUFQO0FBQ0g7QUFDSixPQWxFSTtBQW1FTEMsTUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLFlBQUksS0FBS3RNLEtBQUwsQ0FBVzZMLFdBQVgsSUFBMEIsS0FBS3ZDLGFBQW5DLEVBQWtEO0FBQzlDLGNBQUkrQyxRQUFRLEdBQUcsS0FBSy9DLGFBQUwsQ0FBbUJTLE1BQW5CLENBQTBCSSxDQUExQixHQUE4QixLQUFLbkssS0FBTCxDQUFXNkwsV0FBWCxDQUF1QkksWUFBcEU7QUFDQSxpQkFBT0ksUUFBUSxHQUFHLElBQWxCO0FBQ0gsU0FIRCxNQUdPO0FBQ0gsaUJBQU8sR0FBUDtBQUNIO0FBQ0osT0ExRUk7QUEyRUxFLE1BQUFBLFNBQVMsRUFBRSxtQkFBVXJCLEtBQVYsRUFBaUI7QUFDeEIsWUFBSVUsS0FBSyxHQUFHLEtBQUs1TCxLQUFMLENBQVc2TCxXQUF2QjtBQUNBLGFBQUt2QyxhQUFMLENBQW1CUyxNQUFuQixHQUE0QjtBQUN4QkosVUFBQUEsQ0FBQyxFQUFFdUIsS0FBSyxDQUFDWSxPQUFOLEdBQWdCRixLQUFLLENBQUNHLFdBREQ7QUFFeEI1QixVQUFBQSxDQUFDLEVBQUVlLEtBQUssQ0FBQ2MsT0FBTixHQUFnQkosS0FBSyxDQUFDSztBQUZELFNBQTVCO0FBSUgsT0FqRkk7QUFrRkxPLE1BQUFBLGFBQWEsRUFBRSx1QkFBVWpoQixLQUFWLEVBQWlCO0FBQzVCLFlBQUtBLEtBQUssQ0FBQzJELE1BQU4sR0FBZSxDQUFoQixJQUF1QjJaLGFBQWEsS0FBSyxLQUE3QyxFQUFxRDtBQUNqRDVELFVBQUFBLEtBQUssQ0FBQ3JnQixDQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QnlWLEdBQXpCLEVBQUQsQ0FBTDtBQUNBK08sVUFBQUEsYUFBYSxDQUFDbk4sVUFBZCxDQUF5QjVRLElBQXpCLENBQThCRSxLQUFLLENBQUMsQ0FBRCxDQUFuQztBQUNBNmQsVUFBQUEsYUFBYSxDQUFDak8sV0FBZCxHQUE0QixJQUE1QjtBQUNILFNBSkQsTUFJTztBQUNIaU8sVUFBQUEsYUFBYSxDQUFDbk4sVUFBZCxHQUEyQm1OLGFBQWEsQ0FBQ25OLFVBQWQsQ0FBeUJ2RyxNQUF6QixDQUFnQ25LLEtBQWhDLENBQTNCO0FBQ0E2ZCxVQUFBQSxhQUFhLENBQUNqTyxXQUFkLEdBQTRCLElBQTVCO0FBQ0g7QUFDSixPQTNGSTtBQTRGTDhQLE1BQUFBLGNBQWMsRUFBRSx3QkFBVUMsS0FBVixFQUFpQjtBQUM3QixZQUFJLEtBQUs1QixhQUFULEVBQXdCO0FBQ3BCLGNBQUk3ZCxLQUFLLEdBQUcsS0FBS3dRLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQjhDLE9BQWhCLENBQXdCLEtBQUt1SyxhQUE3QixDQUEvQjs7QUFDQSxjQUFJN2QsS0FBSyxHQUFHLENBQUMsQ0FBYixFQUFnQjtBQUNaLGlCQUFLd1EsVUFBTCxDQUFnQjZFLE1BQWhCLENBQXVCclYsS0FBdkIsRUFBOEIsQ0FBOUI7QUFDSDtBQUNKLFNBTEQsTUFNSztBQUNEO0FBQ0EsY0FBSSxLQUFLd1EsVUFBTCxDQUFnQi9NLE1BQWhCLEtBQTJCLENBQS9CLEVBQWtDO0FBQzlCLGlCQUFLK00sVUFBTCxDQUFnQjZFLE1BQWhCLENBQXVCLENBQXZCLEVBQTBCLENBQTFCO0FBQ0g7QUFDSjs7QUFDRCxhQUFLd0ksYUFBTCxHQUFxQixJQUFyQjtBQUNILE9BMUdJO0FBMkdMM0gsTUFBQUEsb0JBQW9CLEVBQUUsOEJBQVVwRSxLQUFWLEVBQWlCO0FBQ25DLFlBQUlWLElBQUksR0FBRyxJQUFYO0FBQ0FBLFFBQUFBLElBQUksQ0FBQ3lNLGFBQUwsR0FBcUIvTCxLQUFyQixDQUZtQyxDQUduQzs7QUFDQXBELFFBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ25CMEMsVUFBQUEsSUFBSSxDQUFDb08sY0FBTDtBQUNILFNBRlMsRUFFUCxHQUZPLENBQVY7QUFHSDtBQWxISSxLQW5IK0I7QUF1T3hDdEwsSUFBQUEsS0FBSyxFQUFFO0FBQ0gxRCxNQUFBQSxVQUFVLEVBQUU7QUFDUndRLFFBQUFBLElBQUksRUFBRSxJQURFO0FBRVJDLFFBQUFBLE9BRlEscUJBRUc7QUFDUDtBQUNBdlMsVUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFBRXZWLFlBQUFBLENBQUMsQ0FBQ21DLFFBQUQsQ0FBRCxDQUFZOE4sT0FBWixDQUFvQix1QkFBcEI7QUFBK0MsV0FBOUQsRUFBZ0UsR0FBaEUsQ0FBVjtBQUNIO0FBTE8sT0FEVDtBQVFIdUosTUFBQUEsWUFBWSxFQUFFLHNCQUFVc0IsUUFBVixFQUFvQjtBQUM5QnhCLFFBQUFBLFlBQVksQ0FBQzBCLE9BQWIsQ0FBcUIsaUJBQXJCLEVBQXdDdEcsSUFBSSxDQUFDdUcsU0FBTCxDQUFlSCxRQUFmLENBQXhDO0FBQ0g7QUFWRTtBQXZPaUMsR0FBUixDQUFwQztBQW9QSDtBQzdQRDtBQUNBLElBQUkySixjQUFjLEdBQUcsRUFBckI7QUNEQTtBQUNBO0FBQ0EvTixHQUFHLENBQUNxSSxTQUFKLENBQWMsMkJBQWQsRUFBMkM7QUFDdkNDLEVBQUFBLFFBQVEsRUFBRTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0E3QzJDO0FBOEN2Q3phLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFdBQU87QUFDSCtiLE1BQUFBLENBQUMsRUFBRTtBQURBLEtBQVA7QUFHSCxHQWxEc0M7QUFtRHZDcEIsRUFBQUEsS0FBSyxFQUFFO0FBQ0g3SCxJQUFBQSxVQUFVLEVBQUVoRyxLQURUO0FBRUhxVCxJQUFBQSxhQUFhLEVBQUVuZCxNQUZaO0FBR0hvVCxJQUFBQSxTQUFTLEVBQUVyVixNQUhSO0FBSUhxZixJQUFBQSxRQUFRLEVBQUU5YjtBQUpQLEdBbkRnQztBQXlEdkNtUCxFQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFFakIsUUFBSUMsSUFBSSxHQUFHLElBQVgsQ0FGaUIsQ0FJakI7O0FBQ0FBLElBQUFBLElBQUksQ0FBQ3FJLENBQUwsQ0FBT2dJLGFBQVAsR0FBdUJ0b0IsQ0FBQyxDQUFDLG9CQUFELENBQUQsQ0FBd0J5VixHQUF4QixFQUF2QjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPaUksY0FBUCxHQUF3QnZvQixDQUFDLENBQUMsb0JBQUQsQ0FBRCxDQUF3QnlWLEdBQXhCLEVBQXhCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU9rSSxRQUFQLEdBQWtCeG9CLENBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0J5VixHQUFsQixFQUFsQjtBQUNILEdBakVzQztBQWtFdkM4RixFQUFBQSxPQUFPLEVBQUU7QUFDTHdCLElBQUFBLG9CQUFvQixFQUFFLDhCQUFVcEUsS0FBVixFQUFpQjtBQUNuQyxXQUFLOFAsT0FBTCxDQUFhL0wsS0FBYixDQUFtQiwrQkFBbkIsRUFBb0QvRCxLQUFwRDtBQUNILEtBSEk7QUFJTGdOLElBQUFBLFdBQVcsRUFBRSxxQkFBVWhOLEtBQVYsRUFBaUI7QUFDMUIsV0FBSzhQLE9BQUwsQ0FBYS9MLEtBQWIsQ0FBbUIsc0JBQW5CLEVBQTJDL0QsS0FBM0M7QUFDSCxLQU5JO0FBT0w4SCxJQUFBQSxhQUFhLEVBQUUsdUJBQVU1VyxHQUFWLEVBQWU4USxTQUFmLEVBQTBCO0FBQ3JDLGFBQU85USxHQUFHLElBQUlBLEdBQUcsQ0FBQ3NRLE9BQUosQ0FBWSxHQUFaLEtBQW9CLENBQUMsQ0FBckIsR0FBeUIsR0FBekIsR0FBK0IsR0FBbkMsQ0FBSCxHQUE2QyxRQUE3QyxHQUF3RFEsU0FBeEQsR0FBb0UsVUFBcEUsR0FBaUZBLFNBQXhGO0FBQ0g7QUFUSTtBQWxFOEIsQ0FBM0M7QUNGQTtBQUNBakUsR0FBRyxDQUFDcUksU0FBSixDQUFjLFFBQWQsRUFBd0I7QUFDcEJDLEVBQUFBLFFBQVEsRUFBRTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQVZ3QjtBQVdwQkUsRUFBQUEsS0FBSyxFQUFFO0FBQ0g3QyxJQUFBQSxLQUFLLEVBQUU5VTtBQURKLEdBWGE7QUFjcEI0VCxFQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsUUFBSWxELElBQUksR0FBRyxJQUFYO0FBQ0FqWSxJQUFBQSxDQUFDLENBQUMsYUFBRCxDQUFELENBQWlCc2UsSUFBakIsQ0FBc0Isb0JBQXRCLEVBQTRDLFVBQVVoZCxDQUFWLEVBQWFpRCxJQUFiLEVBQW1CO0FBQzNELFVBQUlBLElBQUksQ0FBQ29DLEtBQUwsQ0FBVyxDQUFYLEVBQWNILElBQWQsS0FBdUJ5UixJQUFJLENBQUNvRSxLQUFMLENBQVc3VixJQUF0QyxFQUE0QztBQUN4QztBQUNIOztBQUNEeVIsTUFBQUEsSUFBSSxDQUFDb0UsS0FBTCxDQUFXcU0sVUFBWCxHQUF3QjNiLFFBQVEsQ0FBQ3hJLElBQUksQ0FBQ3lCLE1BQUwsR0FBY3pCLElBQUksQ0FBQ3FDLEtBQW5CLEdBQTJCLEdBQTVCLEVBQWlDLEVBQWpDLENBQWhDO0FBQ0gsS0FMRDtBQU9BNUcsSUFBQUEsQ0FBQyxDQUFDLGFBQUQsQ0FBRCxDQUFpQnNlLElBQWpCLENBQXNCLGdCQUF0QixFQUF3QyxVQUFVaGQsQ0FBVixFQUFhaUQsSUFBYixFQUFtQjtBQUN2RCxVQUFJQSxJQUFJLENBQUNvQyxLQUFMLENBQVcsQ0FBWCxFQUFjSCxJQUFkLEtBQXVCeVIsSUFBSSxDQUFDb0UsS0FBTCxDQUFXN1YsSUFBdEMsRUFBNEM7QUFDeEM7QUFDSDs7QUFDRCxVQUFJakMsSUFBSSxDQUFDZ0osTUFBTCxDQUFZNUcsS0FBWixDQUFrQixDQUFsQixFQUFxQjBFLEtBQXpCLEVBQWdDO0FBQzVCNE0sUUFBQUEsSUFBSSxDQUFDMFEsYUFBTCxDQUFtQnBrQixJQUFJLENBQUNvQyxLQUFMLENBQVcsQ0FBWCxFQUFjSCxJQUFqQyxFQUF1Q2pDLElBQUksQ0FBQ2dKLE1BQUwsQ0FBWTVHLEtBQVosQ0FBa0IsQ0FBbEIsRUFBcUIwRSxLQUE1RDtBQUNILE9BRkQsTUFFTztBQUNIb0wsUUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLGdCQUFWLEVBQTRCekUsSUFBSSxDQUFDb0UsS0FBakM7QUFDSDtBQUNKLEtBVEQ7QUFXQXJjLElBQUFBLENBQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUJzZSxJQUFqQixDQUFzQixnQkFBdEIsRUFBd0MsVUFBVWhkLENBQVYsRUFBYWlELElBQWIsRUFBbUI7QUFDdkQsVUFBSUEsSUFBSSxDQUFDb0MsS0FBTCxDQUFXLENBQVgsRUFBY0gsSUFBZCxLQUF1QnlSLElBQUksQ0FBQ29FLEtBQUwsQ0FBVzdWLElBQXRDLEVBQTRDO0FBQ3hDO0FBQ0g7O0FBQ0R5UixNQUFBQSxJQUFJLENBQUMwUSxhQUFMLENBQW1CcGtCLElBQUksQ0FBQ29DLEtBQUwsQ0FBVyxDQUFYLEVBQWNILElBQWpDLEVBQXdDakMsSUFBSSxDQUFDaUosVUFBN0M7QUFDSCxLQUxEO0FBTUgsR0F4Q21CO0FBeUNwQitOLEVBQUFBLE9BQU8sRUFBRTtBQUNMb04sSUFBQUEsYUFBYSxFQUFFLHVCQUFVamYsUUFBVixFQUFvQjlGLE9BQXBCLEVBQTZCO0FBQ3hDLFVBQUk4RixRQUFRLEtBQUssS0FBSzJTLEtBQUwsQ0FBVzdWLElBQTVCLEVBQWtDO0FBQzlCO0FBQ0g7O0FBQ0QsV0FBSzZWLEtBQUwsQ0FBVzBCLFlBQVgsR0FBMEJuYSxPQUExQjtBQUNBNlMsTUFBQUEsR0FBRyxDQUFDaUcsS0FBSixDQUFVLGVBQVYsRUFBMkIsS0FBS0wsS0FBaEM7QUFDSCxLQVBJO0FBUUx1TSxJQUFBQSxjQUFjLEVBQUUsMEJBQVk7QUFDeEJuUyxNQUFBQSxHQUFHLENBQUNpRyxLQUFKLENBQVUsZ0JBQVYsRUFBNEIsS0FBS0wsS0FBakM7QUFDSDtBQVZJO0FBekNXLENBQXhCO0FDREE7QUFDQTNGLEdBQUcsQ0FBQ3FJLFNBQUosQ0FBYyxZQUFkLEVBQTRCO0FBQ3hCQyxFQUFBQSxRQUFRLEVBQUU7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0F0QjRCO0FBdUJ4QnphLEVBQUFBLElBQUksRUFBRSxnQkFBWTtBQUNkLFdBQU87QUFDSG9DLE1BQUFBLEtBQUssRUFBRSxFQURKO0FBRUgyWixNQUFBQSxDQUFDLEVBQUUsRUFGQTtBQUdIdUksTUFBQUEsUUFBUSxFQUFFLEtBSFA7QUFJSEMsTUFBQUEsWUFBWSxFQUFFLENBSlg7QUFLSEMsTUFBQUEsVUFBVSxFQUFFO0FBTFQsS0FBUDtBQU9ILEdBL0J1QjtBQWdDeEIvUSxFQUFBQSxPQUFPLEVBQUUsbUJBQVk7QUFDakIsUUFBSUMsSUFBSSxHQUFHLElBQVgsQ0FEaUIsQ0FFakI7O0FBQ0FBLElBQUFBLElBQUksQ0FBQ3FJLENBQUwsQ0FBTzBJLE9BQVAsR0FBaUJocEIsQ0FBQyxDQUFDLFlBQUQsQ0FBRCxDQUFnQnlWLEdBQWhCLEVBQWpCO0FBQ0F3QyxJQUFBQSxJQUFJLENBQUNxSSxDQUFMLENBQU8vSSxNQUFQLEdBQWdCdlgsQ0FBQyxDQUFDLFdBQUQsQ0FBRCxDQUFleVYsR0FBZixFQUFoQjtBQUNBd0MsSUFBQUEsSUFBSSxDQUFDcUksQ0FBTCxDQUFPMkksV0FBUCxHQUFxQmpwQixDQUFDLENBQUMsaUJBQUQsQ0FBRCxDQUFxQnlWLEdBQXJCLEVBQXJCO0FBQ0gsR0F0Q3VCO0FBdUN4QmlFLEVBQUFBLFFBQVEsRUFBRTtBQUNOd1AsSUFBQUEsU0FBUyxFQUFFLHFCQUFZO0FBQ25CLGFBQU8sS0FBS3ZpQixLQUFMLENBQVcyRCxNQUFsQjtBQUNIO0FBSEssR0F2Q2M7QUE0Q3hCNlEsRUFBQUEsT0FBTyxFQUFFLG1CQUFZO0FBQ2pCLFFBQUlsRCxJQUFJLEdBQUcsSUFBWDtBQUVBalksSUFBQUEsQ0FBQyxDQUFDLGFBQUQsQ0FBRCxDQUFpQnNlLElBQWpCLENBQXNCLGVBQXRCLEVBQXVDLFVBQVVoZCxDQUFWLEVBQWFpRCxJQUFiLEVBQW1CO0FBQ3RELFVBQUksQ0FBQ0EsSUFBSSxDQUFDb0MsS0FBVixFQUFpQjtBQUNiO0FBQ0g7O0FBQ0RwQyxNQUFBQSxJQUFJLENBQUNvQyxLQUFMLENBQVcrVSxPQUFYLENBQW1CLFVBQVV5TixPQUFWLEVBQW1CO0FBQ2xDLFlBQUlDLGFBQWEsR0FBR25SLElBQUksQ0FBQ3RSLEtBQUwsQ0FBV3dWLElBQVgsQ0FBZ0IsVUFBVWtOLENBQVYsRUFBYTtBQUM3QyxpQkFBT0EsQ0FBQyxDQUFDN2lCLElBQUYsSUFBVTJpQixPQUFPLENBQUMzaUIsSUFBekI7QUFDSCxTQUZtQixDQUFwQjs7QUFJQSxZQUFJLENBQUM0aUIsYUFBTCxFQUFvQjtBQUNoQm5SLFVBQUFBLElBQUksQ0FBQ3RSLEtBQUwsQ0FBV0YsSUFBWCxDQUFnQjtBQUFFRCxZQUFBQSxJQUFJLEVBQUUyaUIsT0FBTyxDQUFDM2lCLElBQWhCO0FBQXNCa2lCLFlBQUFBLFVBQVUsRUFBRSxDQUFsQztBQUFxQzNLLFlBQUFBLFlBQVksRUFBRTtBQUFuRCxXQUFoQjtBQUNILFNBRkQsTUFFTztBQUNIaEgsVUFBQUEsT0FBTyxDQUFDMUwsS0FBUixDQUFjLHVEQUF1RDhkLE9BQU8sQ0FBQzNpQixJQUE3RTtBQUNIO0FBQ0osT0FWRDtBQVdILEtBZkQ7QUFpQkFpUSxJQUFBQSxHQUFHLENBQUMwQixHQUFKLENBQVEsZ0JBQVIsRUFBMEIsVUFBVW1SLFVBQVYsRUFBc0I7QUFDNUNyUixNQUFBQSxJQUFJLENBQUN0UixLQUFMLENBQVcrVSxPQUFYLENBQW1CLFVBQVVoSyxJQUFWLEVBQWdCN0ssS0FBaEIsRUFBdUJ1VixLQUF2QixFQUE4QjtBQUM3QyxZQUFJMUssSUFBSSxDQUFDbEwsSUFBTCxJQUFhOGlCLFVBQVUsQ0FBQzlpQixJQUE1QixFQUFrQztBQUM5QjRWLFVBQUFBLEtBQUssQ0FBQ0YsTUFBTixDQUFhclYsS0FBYixFQUFvQixDQUFwQjtBQUNIO0FBQ0osT0FKRDtBQUtILEtBTkQ7QUFRQTRQLElBQUFBLEdBQUcsQ0FBQzBCLEdBQUosQ0FBUSxlQUFSLEVBQXlCLFVBQVVtUixVQUFWLEVBQXNCO0FBQzNDclIsTUFBQUEsSUFBSSxDQUFDc1IsV0FBTDtBQUNILEtBRkQ7QUFHSCxHQTNFdUI7QUE0RXhCaE8sRUFBQUEsT0FBTyxFQUFFO0FBQ0xnTyxJQUFBQSxXQUFXLEVBQUUsdUJBQVk7QUFDckIsV0FBS1IsVUFBTCxHQUFrQixLQUFLcGlCLEtBQUwsQ0FBV2lTLE1BQVgsQ0FBa0IsVUFBVWxILElBQVYsRUFBZ0I7QUFDaEQsZUFBT0EsSUFBSSxDQUFDcU0sWUFBTCxJQUFxQixFQUE1QjtBQUNILE9BRmlCLEVBRWZ6VCxNQUZIO0FBR0EsV0FBS3dlLFlBQUwsR0FBb0IsS0FBS25pQixLQUFMLENBQVcyRCxNQUFYLEdBQW9CLEtBQUt5ZSxVQUE3Qzs7QUFDQSxVQUFJLEtBQUtwaUIsS0FBTCxDQUFXMkQsTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUN2QixhQUFLdWUsUUFBTCxHQUFnQixLQUFoQjtBQUNIO0FBQ0osS0FUSTtBQVVMSSxJQUFBQSxXQUFXLEVBQUUsdUJBQVk7QUFDckIsV0FBS3RpQixLQUFMLEdBQWEsS0FBS0EsS0FBTCxDQUFXaVMsTUFBWCxDQUFrQixVQUFVbEgsSUFBVixFQUFnQjtBQUMzQyxlQUFPQSxJQUFJLENBQUNxTSxZQUFMLElBQXFCLEVBQTVCO0FBQ0gsT0FGWSxDQUFiO0FBR0g7QUFkSSxHQTVFZTtBQTRGeEJoRCxFQUFBQSxLQUFLLEVBQUU7QUFDSHBVLElBQUFBLEtBQUssRUFBRSxpQkFBWTtBQUNmLFdBQUs0aUIsV0FBTDtBQUNIO0FBSEU7QUE1RmlCLENBQTVCIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsInZhciBpbml0aWFsaXplZDtcclxudmFyIG1lZGlhQXBwO1xyXG5cclxudmFyIGJ1cyA9IG5ldyBWdWUoKTtcclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uKGRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uLCBtZWRpYUFwcGxpY2F0aW9uVXJsLCBwYXRoQmFzZSkge1xyXG5cclxuICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFtZWRpYUFwcGxpY2F0aW9uVXJsKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignbWVkaWFBcHBsaWNhdGlvblVybCB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdXJsOiBtZWRpYUFwcGxpY2F0aW9uVXJsLFxyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgJCgnLnRhLWNvbnRlbnQnKS5hcHBlbmQoY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYWFwcGxpY2F0aW9uOnJlYWR5Jyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcm9vdCA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICAkKCcjdC1tZWRpYUxpYnJhcnknKS50ZXh0KCksXHJcbiAgICAgICAgICAgICAgICBwYXRoOiAnJyxcclxuICAgICAgICAgICAgICAgIGZvbGRlcjogJycsXHJcbiAgICAgICAgICAgICAgICBpc0RpcmVjdG9yeTogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVkaWFBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICAgICAgICAgIGVsOiAnI21lZGlhQXBwJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjoge30sXHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFJdGVtczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ0Ryb3BUaHVtYm5haWw6IG5ldyBJbWFnZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBncmlkVmlldzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWx0ZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRCeTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydEFzYzogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0luUGFnZTogW11cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmRyYWdEcm9wVGh1bWJuYWlsLnNyYyA9IChwYXRoQmFzZSB8fCAnJykgKyAnL09yY2hhcmRDb3JlLk1lZGlhL0ltYWdlcy9kcmFnLXRodW1ibmFpbC5wbmcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJTZWxlY3RlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyRGVsZXRlZCcsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RSb290KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckFkZGVkJywgZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRm9sZGVyID0gZm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb2xkZXIuc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdiZWZvcmVGb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkRm9sZGVyKGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhTGlzdE1vdmVkJywgZnVuY3Rpb24gKGVycm9ySW5mbykgeyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRGb2xkZXIoc2VsZi5zZWxlY3RlZEZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLnB1c2goZXJyb3JJbmZvKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhUmVuYW1lZCcsIGZ1bmN0aW9uIChuZXdOYW1lLCBuZXdQYXRoLCBvbGRQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5tZWRpYVBhdGggPT09IG9sZFBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEubWVkaWFQYXRoID0gbmV3UGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEubmFtZSA9IG5ld05hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2NyZWF0ZUZvbGRlclJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZUZvbGRlcigpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdkZWxldGVGb2xkZXJSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVGb2xkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIGhhbmRsZXJzIGZvciBhY3Rpb25zIGluIGJvdGggZ3JpZCBhbmQgdGFibGUgdmlldy5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VTb3J0KG5ld1NvcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbmFtZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVNZWRpYUl0ZW0obWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZURyYWdTdGFydChtZWRpYSwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVyIGZvciBwYWdlciBldmVudHNcclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdwYWdlckV2ZW50JywgZnVuY3Rpb24gKGl0ZW1zSW5QYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaXRlbXNJblBhZ2UgPSBpdGVtc0luUGFnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNIb21lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRm9sZGVyID09IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRGb2xkZXIgJiYgcGFyZW50Rm9sZGVyLnBhdGggIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAudW5zaGlmdChwYXJlbnRGb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVyID0gcGFyZW50Rm9sZGVyLnBhcmVudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZCA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlbGYubWVkaWFGaWx0ZXIudG9Mb3dlckNhc2UoKSkgPiAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzZWxmLnNvcnRCeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2l6ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5zaXplIC0gYi5zaXplIDogYi5zaXplIC0gYS5zaXplO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWltZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm1pbWUudG9Mb3dlckNhc2UoKSkgOiBiLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubWltZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xhc3RNb2RpZnknOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubGFzdE1vZGlmeSAtIGIubGFzdE1vZGlmeSA6IGIubGFzdE1vZGlmeSAtIGEubGFzdE1vZGlmeTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkgOiBiLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGEubmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggLSB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMDAgOiAyNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB0aGlzLnNlbGVjdGVkRm9sZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiB0aGlzLmdyaWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3UHJlZnMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWRWaWV3ID0gbmV3UHJlZnMuZ3JpZFZpZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAobmV3Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFGaWx0ZXIgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld0ZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKG5ld0ZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5yb290Rm9sZGVyLnRvZ2dsZSgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRVcmw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPyAkKCcjdXBsb2FkRmlsZXMnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWxlY3RlZEZvbGRlci5wYXRoKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RSb290OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBsb2FkRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0TWVkaWFJdGVtc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChmb2xkZXIucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zID0gZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QnkgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgbG9hZGluZyBmb2xkZXI6JyArIGZvbGRlci5wYXRoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB1blNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpbnZlcnRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IHRlbXA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNZWRpYVNlbGVjdGVkKG1lZGlhKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnNwbGljZSh0aGlzLnNlbGVjdGVkTWVkaWFzLmluZGV4T2YobWVkaWEpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZGVyID0gdGhpcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcm9vdCBmb2xkZXIgY2FuJ3QgYmUgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZGVyID09IHRoaXMucm9vdC5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHsuLi4kKFwiI2RlbGV0ZUZvbGRlclwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZm9sZGVyLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlcicsIGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbCcpLm1vZGFsKCdzaG93Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbCAubW9kYWwtYm9keSBpbnB1dCcpLnZhbCgnJykuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwtZXJyb3JzJykuZW1wdHkoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwnKS5tb2RhbCgnc2hvdycpOyAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbCAubW9kYWwtYm9keSBpbnB1dCcpLnZhbChtZWRpYS5uYW1lKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU1lZGlhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVNZWRpYUxpc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhTGlzdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYUxpc3QubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHsuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gobWVkaWFMaXN0W2ldLm1lZGlhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiBwYXRoc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLnNlbGVjdGVkTWVkaWFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5tZWRpYUl0ZW1zICYmIHNlbGYubWVkaWFJdGVtcy5pbmRleE9mKHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRGVsZXRlZCcsIHNlbGYuc2VsZWN0ZWRNZWRpYXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZU1lZGlhSXRlbTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHsuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZU1lZGlhVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG1lZGlhLm1lZGlhUGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYubWVkaWFJdGVtcyAmJiBzZWxmLm1lZGlhSXRlbXMuaW5kZXhPZihtZWRpYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURlbGV0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3NlbGYuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVEcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBwYXJ0IG9mIG1vdmUgbWVkaWEgdG8gZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmVwYXJlIHRoZSBkYXRhIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBmb2xkZXIgY29tcG9uZW50IG9uIGRyb3AgZXZlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhTmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzLnB1c2goaXRlbS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRyYWdzIGFuIHVuc2VsZWN0ZWQgaXRlbSwgd2Ugc2VsZWN0IGl0IGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZChtZWRpYSkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXMucHVzaChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaChtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ21lZGlhTmFtZXMnLCBKU09OLnN0cmluZ2lmeShtZWRpYU5hbWVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3NvdXJjZUZvbGRlcicsIHRoaXMuc2VsZWN0ZWRGb2xkZXIucGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZSh0aGlzLmRyYWdEcm9wVGh1bWJuYWlsLCAxMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2Nyb2xsV2hpbGVEcmFnOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZIDwgMTUwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIC0xMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPiB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0QnkgPT0gbmV3U29ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gIXRoaXMuc29ydEFzYztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRCeSA9IG5ld1NvcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLmtleXByZXNzKGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gZS53aGljaDtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gMTMpIHsgIC8vIHRoZSBlbnRlciBrZXkgY29kZVxyXG4gICAgICAgICAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5hbWUgPSAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNjcmVhdGVGb2xkZXJVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCkgKyBcIiZuYW1lPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2FkZEZvbGRlcicsIG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBKU09OLnBhcnNlKGVycm9yLnJlc3BvbnNlVGV4dCkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj48L2Rpdj4nKS50ZXh0KGVycm9yTWVzc2FnZSkuYXBwZW5kVG8oJCgnI2NyZWF0ZUZvbGRlck1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbEZvb3Rlck9rJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOYW1lID0gJCgnI25ldy1pdGVtLW5hbWUnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGROYW1lID0gJCgnI29sZC1pdGVtLW5hbWUnKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3TmFtZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGggKyBcIi9cIiA7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZvbGRlciA9PT0gXCIvXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFBhdGggPSBjdXJyZW50Rm9sZGVyICsgb2xkTmFtZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC50b0xvd2VyQ2FzZSgpID09PSBvbGRQYXRoLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjcmVuYW1lTWVkaWFVcmwnKS52YWwoKSArIFwiP29sZFBhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2xkUGF0aCkgKyBcIiZuZXdQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG5ld1BhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFSZW5hbWVkJywgbmV3TmFtZSwgbmV3UGF0aCwgb2xkUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBKU09OLnBhcnNlKGVycm9yLnJlc3BvbnNlVGV4dCkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj48L2Rpdj4nKS50ZXh0KGVycm9yTWVzc2FnZSkuYXBwZW5kVG8oJCgnI3JlbmFtZU1lZGlhTW9kYWwtZXJyb3JzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkaXNwbGF5TWVkaWFBcHBsaWNhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lZGlhQXBwJykuc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoJ21lZGlhQXBwOnJlYWR5Jyk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn1cclxuIiwiJChkb2N1bWVudCkub24oJ21lZGlhQXBwOnJlYWR5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgJCgnI2ZpbGV1cGxvYWQnKS5maWxldXBsb2FkKHtcclxuICAgICAgICBkcm9wWm9uZTogJCgnI21lZGlhQXBwJyksXHJcbiAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICB1cmw6ICQoJyN1cGxvYWRGaWxlcycpLnZhbCgpLFxyXG4gICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ3BhdGgnLCB2YWx1ZTogbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIucGF0aCB9LFxyXG4gICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KTtcclxuXHJcblxyXG4kKGRvY3VtZW50KS5iaW5kKCdkcmFnb3ZlcicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICB2YXIgZHQgPSBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyO1xyXG4gICAgaWYgKGR0LnR5cGVzICYmIChkdC50eXBlcy5pbmRleE9mID8gZHQudHlwZXMuaW5kZXhPZignRmlsZXMnKSAhPSAtMSA6IGR0LnR5cGVzLmNvbnRhaW5zKCdGaWxlcycpKSkge1xyXG4gICAgICAgIHZhciBkcm9wWm9uZSA9ICQoJyNjdXN0b21kcm9wem9uZScpLFxyXG4gICAgICAgICAgICB0aW1lb3V0ID0gd2luZG93LmRyb3Bab25lVGltZW91dDtcclxuICAgICAgICBpZiAodGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZHJvcFpvbmUuYWRkQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBob3ZlcmVkRHJvcFpvbmUgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KGRyb3Bab25lKTtcclxuICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgICAgICBkcm9wWm9uZS5yZW1vdmVDbGFzcygnaW4nKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfSAgICBcclxufSk7IiwiLy8gPGZvbGRlcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ2ZvbGRlcicsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGxpIDpjbGFzcz1cIntzZWxlY3RlZDogaXNTZWxlY3RlZH1cIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ2xlYXZlLnByZXZlbnQgPSBcImhhbmRsZURyYWdMZWF2ZSgkZXZlbnQpO1wiIFxyXG4gICAgICAgICAgICAgICAgdi1vbjpkcmFnb3Zlci5wcmV2ZW50LnN0b3A9XCJoYW5kbGVEcmFnT3ZlcigkZXZlbnQpO1wiIFxyXG4gICAgICAgICAgICAgICAgdi1vbjpkcm9wLnByZXZlbnQuc3RvcCA9IFwibW92ZU1lZGlhVG9Gb2xkZXIobW9kZWwsICRldmVudClcIiA+XHJcbiAgICAgICAgICAgIDxkaXYgOmNsYXNzPVwie2ZvbGRlcmhvdmVyZWQ6IGlzSG92ZXJlZCAsIHRyZWVyb290OiBsZXZlbCA9PSAxfVwiID5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiA6c3R5bGU9XCJ7IHBhZGRpbmcke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJMZWZ0XCIgOiBcIlJpZ2h0XCJ9OnBhZGRpbmcgKyAncHgnIH1cIiB2LW9uOmNsaWNrPVwic2VsZWN0XCIgIGRyYWdnYWJsZT1cImZhbHNlXCIgY2xhc3M9XCJmb2xkZXItbWVudS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVwiIGNsYXNzPVwiZXhwYW5kXCIgOmNsYXNzPVwie29wZW5lZDogb3BlbiwgY2xvc2VkOiAhb3BlbiwgZW1wdHk6IGVtcHR5fVwiPjxpIHYtaWY9XCJvcGVuXCIgY2xhc3M9XCJmYXMgZmEtY2hldnJvbi0ke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCJ9XCI+PC9pPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2xkZXItbmFtZSBtbC0yXCI+e3ttb2RlbC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGZvbGRlci1hY3Rpb25zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImNyZWF0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkIHx8IGlzUm9vdFwiPjxpIGNsYXNzPVwiZmFzIGZhLXBsdXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImRlbGV0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkICYmICFpc1Jvb3RcIj48aSBjbGFzcz1cImZhcyBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8b2wgdi1zaG93PVwib3BlblwiPlxyXG4gICAgICAgICAgICAgICAgPGZvbGRlciB2LWZvcj1cImZvbGRlciBpbiBjaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJmb2xkZXIucGF0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDptb2RlbD1cImZvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZC1pbi1tZWRpYS1hcHA9XCJzZWxlY3RlZEluTWVkaWFBcHBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIj5cclxuICAgICAgICAgICAgICAgIDwvZm9sZGVyPlxyXG4gICAgICAgICAgICA8L29sPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbW9kZWw6IE9iamVjdCxcclxuICAgICAgICBzZWxlY3RlZEluTWVkaWFBcHA6IE9iamVjdCxcclxuICAgICAgICBsZXZlbDogTnVtYmVyXHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9wZW46IGZhbHNlLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogbnVsbCwgLy8gbm90IGluaXRpYWxpemVkIHN0YXRlIChmb3IgbGF6eS1sb2FkaW5nKVxyXG4gICAgICAgICAgICBwYXJlbnQ6IG51bGwsXHJcbiAgICAgICAgICAgIGlzSG92ZXJlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBlbXB0eTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuY2hpbGRyZW4gfHwgdGhpcy5jaGlsZHJlbi5sZW5ndGggPT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzU2VsZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5uYW1lID09IHRoaXMubW9kZWwubmFtZSkgJiYgKHRoaXMuc2VsZWN0ZWRJbk1lZGlhQXBwLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzUm9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5wYXRoID09PSAnJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICgodGhpcy5pc1Jvb3QgPT0gZmFsc2UpICYmICh0aGlzLmlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyKCkpKXtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGFkZGluZyA9IHRoaXMubGV2ZWwgPCAzID8gIDE2IDogMTYgKyAodGhpcy5sZXZlbCAqIDgpO1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgYnVzLiRvbignZGVsZXRlRm9sZGVyJywgZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2VsZi5jaGlsZHJlbiAmJiBzZWxmLmNoaWxkcmVuLmluZGV4T2YoZm9sZGVyKVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2ZvbGRlckRlbGV0ZWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdhZGRGb2xkZXInLCBmdW5jdGlvbiAodGFyZ2V0LCBmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYubW9kZWwgPT0gdGFyZ2V0KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdiZWZvcmVGb2xkZXJBZGRlZCcsIHNlbGYubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnB1c2goZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmb2xkZXIucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyQWRkZWQnLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Rm9sZGVyLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJTZWxlY3RlZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZENoaWxkcmVuOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0Rm9sZGVyc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxmLm1vZGVsLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW10cHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdMZWF2ZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmVNZWRpYVRvRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyLCBlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNlbGYuaXNIb3ZlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IEpTT04ucGFyc2UoZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnbWVkaWFOYW1lcycpKTsgXHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFOYW1lcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VGb2xkZXIgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VGb2xkZXInKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEZvbGRlciA9IGZvbGRlci5wYXRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gdGFyZ2V0Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKCcjc2FtZUZvbGRlck1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coey4uLiQoXCIjbW92ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI21vdmVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXM6IG1lZGlhTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXI6IHNvdXJjZUZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlcjogdGFyZ2V0Rm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnKTsgLy8gTWVkaWFBcHAgd2lsbCBsaXN0ZW4gdG8gdGhpcywgYW5kIHRoZW4gaXQgd2lsbCByZWxvYWQgcGFnZSBzbyB0aGUgbW92ZWQgbWVkaWFzIHdvbid0IGJlIHRoZXJlIGFueW1vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcsIGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtZ3JpZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLWdyaWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxvbCBjbGFzcz1cInJvdyBtZWRpYS1pdGVtcy1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtIG1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkXCJcclxuICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IHRodW1iU2l6ZSArIDIgKyAncHgnfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBpc01lZGlhU2VsZWN0ZWQobWVkaWEpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiB2LW9uOmRyYWdzdGFydD1cImRyYWdTdGFydChtZWRpYSwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKydweCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aCgnaW1hZ2UnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsncHgnLCBtYXhXaWR0aDogdGh1bWJTaXplICsncHgnfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSBjbGFzcz1cImZhIGZhLWZpbGUtbyBmYS1sZ1wiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LXJpZ2h0IGlubGluZS1tZWRpYS1idXR0b24gZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1yaWdodCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LXJpZ2h0IGlubGluZS1tZWRpYS1idXR0b24gdmlldy1idXR0b25cIlwiPjxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgPC9vbD5cclxuICAgICAgICBgLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULmVkaXRCdXR0b24gPSAkKCcjdC1lZGl0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kZWxldGVCdXR0b24gPSAkKCcjdC1kZWxldGUtYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFUb2dnbGVSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW5hbWVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVuYW1lTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgbWVkaWEsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxtZWRpYS1pdGVtcy10YWJsZT4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhLWl0ZW1zLXRhYmxlJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtZWRpYS1pdGVtcy10YWJsZSBtLTBcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPnt7IFQuaW1hZ2VIZWFkZXIgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCduYW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICB7eyBULm5hbWVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibmFtZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbGFzdE1vZGlmeScpXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubGFzdE1vZGlmeUhlYWRlciB9fSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibGFzdE1vZGlmeVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+IFxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdzaXplJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25hbC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQuc2l6ZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJzaXplXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ21pbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBULnR5cGVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwibWltZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciB2LWZvcj1cIm1lZGlhIGluIGZpbHRlcmVkTWVkaWFJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzTWVkaWFTZWxlY3RlZChtZWRpYSl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiIHYtb246ZHJhZ3N0YXJ0PVwiZHJhZ1N0YXJ0KG1lZGlhLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRodW1ibmFpbC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKCdpbWFnZScpXCIgZHJhZ2dhYmxlPVwiZmFsc2VcIiA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYSBmYS1maWxlLW8gZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLW5hbWUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZFwiPiB7eyBtZWRpYS5uYW1lIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIG1yLTEgZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj4ge3sgVC5lZGl0QnV0dG9uIH19IDwvYSA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIGRlbGV0ZS1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJkZWxldGVNZWRpYShtZWRpYSlcIj4ge3sgVC5kZWxldGVCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgOmhyZWY9XCJtZWRpYS51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gdmlldy1idXR0b25cIj4ge3sgVC52aWV3QnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbFwiPiB7eyBwcmludERhdGVUaW1lKG1lZGlhLmxhc3RNb2RpZnkpIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+IHt7IGlzTmFOKG1lZGlhLnNpemUpPyAwIDogTWF0aC5yb3VuZChtZWRpYS5zaXplIC8gMTAyNCkgfX0gS0I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPnt7IG1lZGlhLm1pbWUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIHNvcnRCeTogU3RyaW5nLFxyXG4gICAgICAgIHNvcnRBc2M6IEJvb2xlYW4sXHJcbiAgICAgICAgZmlsdGVyZWRNZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhczogQXJyYXksXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXJcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHNlbGYuVC5pbWFnZUhlYWRlciA9ICQoJyN0LWltYWdlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5uYW1lSGVhZGVyID0gJCgnI3QtbmFtZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubGFzdE1vZGlmeUhlYWRlciA9ICQoJyN0LWxhc3RNb2RpZnktaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnNpemVIZWFkZXIgPSAkKCcjdC1zaXplLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC50eXBlSGVhZGVyID0gJCgnI3QtdHlwZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudmlld0J1dHRvbiA9ICQoJyN0LXZpZXctYnV0dG9uJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzTWVkaWFTZWxlY3RlZDogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNlbGVjdGVkTWVkaWFzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQudXJsLnRvTG93ZXJDYXNlKCkgPT09IG1lZGlhLnVybC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdzb3J0Q2hhbmdlUmVxdWVzdGVkJywgbmV3U29ydCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmludERhdGVUaW1lOiBmdW5jdGlvbiAoZGF0ZW1pbGxpcyl7XHJcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoZGF0ZW1pbGxpcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBkLnRvTG9jYWxlU3RyaW5nKCk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gVGhpcyBjb21wb25lbnQgcmVjZWl2ZXMgYSBsaXN0IG9mIGFsbCB0aGUgaXRlbXMsIHVucGFnZWQuXHJcbi8vIEFzIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBwYWdlciwgaXQgcmFpc2VzIGV2ZW50cyB3aXRoIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBwYWdlLlxyXG4vLyBJdCdzIHRoZSBwYXJlbnQncyByZXNwb25zaWJpbGl0eSB0byBsaXN0ZW4gZm9yIHRoZXNlIGV2ZW50cyBhbmQgZGlzcGxheSB0aGUgcmVjZWl2ZWQgaXRlbXNcclxuLy8gPHBhZ2VyPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgncGFnZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdj5cclxuICAgICAgICA8bmF2IGlkPVwibWVkaWEtcGFnZXJcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgYXJpYS1sYWJlbD1cIlBhZ2luYXRpb24gTmF2aWdhdGlvblwiIHJvbGU9XCJuYXZpZ2F0aW9uXCIgOmRhdGEtY29tcHV0ZWQtdHJpZ2dlcj1cIml0ZW1zSW5DdXJyZW50UGFnZS5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBwYWdpbmF0aW9uLXNtIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWZpcnN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0ZpcnN0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb0ZpcnN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvRmlyc3RcIj57eyBULnBhZ2VyRmlyc3RCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvUHJldn1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9QcmV2ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cInByZXZpb3VzXCI+e3sgVC5wYWdlclByZXZpb3VzQnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSB2LWlmPVwibGluayAhPT0gLTFcIiBjbGFzcz1cInBhZ2UtaXRlbSBwYWdlLW51bWJlclwiICA6Y2xhc3M9XCJ7YWN0aXZlIDogY3VycmVudCA9PSBsaW5rIC0gMX1cIiB2LWZvcj1cImxpbmsgaW4gcGFnZUxpbmtzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIHYtb246Y2xpY2s9XCJnb1RvKGxpbmsgLSAxKVwiIDphcmlhLWxhYmVsPVwiJ0dvdG8gUGFnZScgKyBsaW5rXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGlua319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJjdXJyZW50ID09IGxpbmsgLTFcIiBjbGFzcz1cInNyLW9ubHlcIj4oY3VycmVudCk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb05leHR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvTmV4dCA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJuZXh0XCI+e3sgVC5wYWdlck5leHRCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1lZGlhLWxhc3QtYnV0dG9uXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvTGFzdH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9MYXN0ID8gMCA6IC0xXCIgdi1vbjpjbGljaz1cImdvTGFzdFwiPnt7IFQucGFnZXJMYXN0QnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtbC00IHBhZ2Utc2l6ZS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgcGFnZS1zaXplLWxhYmVsXCI+e3sgVC5wYWdlclBhZ2VTaXplTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwYWdlU2l6ZVNlbGVjdFwiIGNsYXNzPVwicGFnZS1saW5rXCIgdi1tb2RlbD1cInBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwib3B0aW9uIGluIHBhZ2VTaXplT3B0aW9uc1wiIHYtYmluZDp2YWx1ZT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9ufX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPG5hdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInBhZ2luYXRpb24gcGFnaW5hdGlvbi1zbSBtLTAgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1sLTQgcGFnZS1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBcIj57eyBULnBhZ2VyUGFnZUxhYmVsIH19IHt7Y3VycmVudCArIDF9fS97e3RvdGFsUGFnZXN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWwtNCB0b3RhbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdlLWxpbmsgZGlzYWJsZWQgdGV4dC1tdXRlZCBcIj4ge3sgVC5wYWdlclRvdGFsTGFiZWwgfX0ge3t0b3RhbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L25hdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBgLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBzb3VyY2VJdGVtczogQXJyYXlcclxuICAgIH0sXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcGFnZVNpemU6IDEwLFxyXG4gICAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMzAsIDUwLCAxMDBdLFxyXG4gICAgICAgICAgICBjdXJyZW50OiAwLFxyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQucGFnZXJGaXJzdEJ1dHRvbiA9ICQoJyN0LXBhZ2VyLWZpcnN0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclByZXZpb3VzQnV0dG9uID0gJCgnI3QtcGFnZXItcHJldmlvdXMtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyTmV4dEJ1dHRvbiA9ICQoJyN0LXBhZ2VyLW5leHQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyTGFzdEJ1dHRvbiA9ICQoJyN0LXBhZ2VyLWxhc3QtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyUGFnZVNpemVMYWJlbCA9ICQoJyN0LXBhZ2VyLXBhZ2Utc2l6ZS1sYWJlbCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclBhZ2VMYWJlbCA9ICQoJyN0LXBhZ2VyLXBhZ2UtbGFiZWwnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJUb3RhbExhYmVsID0gJCgnI3QtcGFnZXItdG90YWwtbGFiZWwnKS52YWwoKTsgICAgICAgIFxyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMuY3VycmVudCArIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwcmV2aW91czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgLSAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ29GaXJzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ29MYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHRoaXMudG90YWxQYWdlcyAtIDE7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnb1RvOiBmdW5jdGlvbiAodGFyZ2V0UGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0YXJnZXRQYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjb21wdXRlZDoge1xyXG4gICAgICAgIHRvdGFsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNvdXJjZUl0ZW1zID8gdGhpcy5zb3VyY2VJdGVtcy5sZW5ndGggOiAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG90YWxQYWdlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgcGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMucGFnZVNpemUpO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFnZXMgPiAwID8gcGFnZXMgOiAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNMYXN0UGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50ICsgMSA+PSB0aGlzLnRvdGFsUGFnZXM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc0ZpcnN0UGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50ID09PSAwO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9OZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0xhc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9QcmV2OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0ZpcnN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvRmlyc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzRmlyc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuRG9MYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0xhc3RQYWdlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gdGhpcyBjb21wdXRlZCBpcyBvbmx5IHRvIGhhdmUgYSBjZW50cmFsIHBsYWNlIHdoZXJlIHdlIGRldGVjdCBjaGFuZ2VzIGFuZCBsZXZlcmFnZSBWdWUgSlMgcmVhY3Rpdml0eSB0byByYWlzZSBvdXIgZXZlbnQuXHJcbiAgICAgICAgLy8gVGhhdCBldmVudCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIHBhcmVudCBtZWRpYSBhcHAgdG8gZGlzcGxheSB0aGUgaXRlbXMgaW4gdGhlIHBhZ2UuXHJcbiAgICAgICAgLy8gdGhpcyBsb2dpYyB3aWxsIG5vdCBydW4gaWYgdGhlIGNvbXB1dGVkIHByb3BlcnR5IGlzIG5vdCB1c2VkIGluIHRoZSB0ZW1wbGF0ZS4gV2UgdXNlIGEgZHVtbXkgXCJkYXRhLWNvbXB1dGVkLXRyaWdnZXJcIiBhdHRyaWJ1dGUgZm9yIHRoYXQuXHJcbiAgICAgICAgaXRlbXNJbkN1cnJlbnRQYWdlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMucGFnZVNpemUgKiB0aGlzLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgIHZhciBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnNvdXJjZUl0ZW1zLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3BhZ2VyRXZlbnQnLCByZXN1bHQpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFnZUxpbmtzOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlua3MgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGxpbmtzLnB1c2godGhpcy5jdXJyZW50ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgMiBpdGVtcyBiZWZvcmUgY3VycmVudFxyXG4gICAgICAgICAgICB2YXIgYmVmb3JlQ3VycmVudCA9IHRoaXMuY3VycmVudCA+IDAgPyB0aGlzLmN1cnJlbnQgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MudW5zaGlmdChiZWZvcmVDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBiZWZvcmVCZWZvcmVDdXJyZW50ID0gdGhpcy5jdXJyZW50ID4gMSA/IHRoaXMuY3VycmVudCAtIDEgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MudW5zaGlmdChiZWZvcmVCZWZvcmVDdXJyZW50KTtcclxuXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgMiBpdGVtcyBhZnRlciBjdXJyZW50XHJcbiAgICAgICAgICAgIHZhciBhZnRlckN1cnJlbnQgPSB0aGlzLnRvdGFsUGFnZXMgLSB0aGlzLmN1cnJlbnQgPiAxID8gdGhpcy5jdXJyZW50ICsgMiA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKGFmdGVyQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYWZ0ZXJBZnRlckN1cnJlbnQgPSB0aGlzLnRvdGFsUGFnZXMgLSB0aGlzLmN1cnJlbnQgPiAyID8gdGhpcy5jdXJyZW50ICsgMyA6IC0xO1xyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKGFmdGVyQWZ0ZXJDdXJyZW50KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBsaW5rcztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBzb3VyY2VJdGVtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSAwOyAvLyByZXNldHRpbmcgY3VycmVudCBwYWdlIGFmdGVyIHJlY2VpdmluZyBhIG5ldyBsaXN0IG9mIHVucGFnZWQgaXRlbXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2VTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHNvcnQtaW5kaWNhdG9yPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnc29ydEluZGljYXRvcicsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiB2LXNob3c9XCJpc0FjdGl2ZVwiIGNsYXNzPVwic29ydC1pbmRpY2F0b3JcIj5cclxuICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiYXNjXCI+PGkgY2xhc3M9XCJzbWFsbCBmYSBmYS1jaGV2cm9uLXVwXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiIWFzY1wiPjxpIGNsYXNzPVwic21hbGwgZmEgZmEtY2hldnJvbi1kb3duXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBgLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBjb2xuYW1lOiBTdHJpbmcsXHJcbiAgICAgICAgc2VsZWN0ZWRjb2xuYW1lOiBTdHJpbmcsXHJcbiAgICAgICAgYXNjOiBCb29sZWFuXHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBpc0FjdGl2ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb2xuYW1lLnRvTG93ZXJDYXNlKCkgPT0gdGhpcy5zZWxlY3RlZGNvbG5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCJmdW5jdGlvbiBpbml0aWFsaXplQXR0YWNoZWRNZWRpYUZpZWxkKGVsLCBpZE9mVXBsb2FkQnV0dG9uLCB1cGxvYWRBY3Rpb24sIG1lZGlhSXRlbVVybCwgYWxsb3dNdWx0aXBsZSwgYWxsb3dNZWRpYVRleHQsIGFsbG93QW5jaG9ycywgdGVtcFVwbG9hZEZvbGRlcikge1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIG1lZGlhRmllbGRBcHBzLnB1c2gobWVkaWFGaWVsZEFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgIGVsOiBtZWRpYUZpZWxkRWRpdG9yLmdldCgwKSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBzZWxlY3RlZE1lZGlhOiBudWxsLFxyXG4gICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkUHJlZml4OiBpZHByZWZpeCxcclxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd01lZGlhVGV4dDogYWxsb3dNZWRpYVRleHQsXHJcbiAgICAgICAgICAgIGJhY2t1cE1lZGlhVGV4dDogJycsXHJcbiAgICAgICAgICAgIGFsbG93QW5jaG9yczogYWxsb3dBbmNob3JzLFxyXG4gICAgICAgICAgICBiYWNrdXBBbmNob3I6IG51bGxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5jdXJyZW50UHJlZnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICBwYXRoczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluaXRpYWxQYXRocyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm1lZGlhUGF0aCA9PT0gJ25vdC1mb3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLnB1c2goeyBwYXRoOiB4Lm1lZGlhUGF0aCwgaXNSZW1vdmVkOiB4LmlzUmVtb3ZlZCwgaXNOZXc6IHguaXNOZXcsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1lZGlhUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IHZhbHVlcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmFsID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJyAnICsgeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnJywgYW5jaG9yOiB4LmFuY2hvciB9KTsgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBzcGFjZS4gU29tZXRoaW5nIGRpZmZlcmVudCBpcyBuZWVkZWQgb3IgaXQgd29udCByZWFjdCB3aGVuIHRoZSByZWFsIG5hbWUgYXJyaXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9ICQud2hlbihzaWduYWwpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhSXRlbVVybCArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoeC5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudnVla2V5ID0gZGF0YS5uYW1lICsgaS50b1N0cmluZygpOyAvLyBCZWNhdXNlIGEgdW5pcXVlIGtleSBpcyByZXF1aXJlZCBieSBWdWUgb24gdi1mb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCB7IG5hbWU6IHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJ25vdC1mb3VuZCcsIG1lZGlhVGV4dDogJycsIGFuY2hvcjogeyB4OiAwLjUsIHk6IDAuNSB9IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbm9uUmVtb3ZlZE1lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1lZGlhSXRlbXNbaV0uaXNSZW1vdmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vblJlbW92ZWRNZWRpYUl0ZW1zLnB1c2godGhpcy5tZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9ICcjJyArIGlkT2ZVcGxvYWRCdXR0b247XHJcbiAgICAgICAgICAgIHZhciBlZGl0b3JJZCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cignaWQnKTtcclxuXHJcbiAgICAgICAgICAgICQoc2VsZWN0b3IpLmZpbGV1cGxvYWQoe1xyXG4gICAgICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgICAgICBkcm9wWm9uZTogJCgnIycgKyBlZGl0b3JJZCksXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxyXG4gICAgICAgICAgICAgICAgdXJsOiB1cGxvYWRBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5maWxlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWxlc1tpXS51cGxvYWROYW1lID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0VW5pcXVlSWQoKSArIGRhdGEuZmlsZXNbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zdWJtaXQoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXRoJywgdmFsdWU6IHRlbXBVcGxvYWRGb2xkZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9XHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9ybXNnID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEucmVzdWx0LmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJlc3VsdC5maWxlc1tpXS5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmIGVycm9yIGlzIGRlZmluZWQgcHJvYmFibHkgdGhlIGZpbGUgdHlwZSBpcyBub3QgYWxsb3dlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciA9PT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdNZWRpYUl0ZW1zLnB1c2goZGF0YS5yZXN1bHQuZmlsZXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ybXNnICs9IGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yICsgXCJcXG5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3Jtc2cgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoZXJyb3Jtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdNZWRpYUl0ZW1zLmxlbmd0aCA+IDEgJiYgYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2gobmV3TWVkaWFJdGVtc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQobmV3TWVkaWFJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBvbiB1cGxvYWQhIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGpxWEhSKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0ZXh0U3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvclRocm93bik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBtZWRpYTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZ2V0VW5pcXVlSWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVtb3ZlU2VsZWN0ZWQ6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB7fTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoW2luZGV4XSwgMSwgcmVtb3ZlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZW1vdmUgYnV0dG9uIGNhbiBhbHNvIHJlbW92ZSBhIHVuaXF1ZSBtZWRpYSBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEsIHJlbW92ZWQpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpLm1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cE1lZGlhVGV4dCA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbE1lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCkubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgIHNob3dBbmNob3JNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpLm1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICB4OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLngsXHJcbiAgICAgICAgICAgICAgICAgIHk6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBBbmNob3IgPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCkubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB0aGlzLmJhY2t1cEFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHsgeDogMC41LCB5OiAwLjUgfTtcclxuICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTcpIHsgLy8gQWRqdXN0IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIDg7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICBcclxuICAgICAgICAgICAgYW5jaG9yVG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnkgKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCAxNSkgeyAvLyBBZGp1c3RtZW50IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIDU7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgIFxyXG4gICAgICAgICAgICBhZGRNZWRpYUZpbGVzOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZmlsZXMubGVuZ3RoID4gMSkgJiYgKGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGJlY2F1c2Ugc29tZXRpbWVzIFxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlU2VsZWN0ZWQgd2FzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGUgbWVkaWEgd2FzIHNldC5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIHByZXZpZXcgcmVuZGVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ICQoZG9jdW1lbnQpLnRyaWdnZXIoJ2NvbnRlbnRwcmV2aWV3OnJlbmRlcicpOyB9LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUZpZWxkUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSkpO1xyXG59XHJcbiIsImZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUZpZWxkKGVsLCBtb2RhbEJvZHlFbGVtZW50LCBtZWRpYUl0ZW1VcmwsIGFsbG93TXVsdGlwbGUsIGFsbG93TWVkaWFUZXh0LCBhbGxvd0FuY2hvcnMpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgcGF0aHM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbml0aWFsUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5tZWRpYVBhdGggPT09ICdub3QtZm91bmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5wdXNoKHsgcGF0aDogeC5tZWRpYVBhdGgsIG1lZGlhVGV4dDogeC5tZWRpYVRleHQsIGFuY2hvcjogeC5hbmNob3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG1lZGlhUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IHZhbHVlcyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbmFsID0gJC5EZWZlcnJlZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoeCwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJyAnICsgeC5wYXRoLCBtaW1lOiAnJywgbWVkaWFQYXRoOiAnJyB9KTsgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBzcGFjZS4gU29tZXRoaW5nIGRpZmZlcmVudCBpcyBuZWVkZWQgb3IgaXQgd29udCByZWFjdCB3aGVuIHRoZSByZWFsIG5hbWUgYXJyaXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9ICQud2hlbihzaWduYWwpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhSXRlbVVybCArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoeC5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudnVla2V5ID0gZGF0YS5uYW1lICsgaS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCB7IG5hbWU6IHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJ25vdC1mb3VuZCcsIG1lZGlhVGV4dDogJycsIGFuY2hvcjogeyB4OiAwLCB5OiAwIH0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzaWduYWwucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWxlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5zZWxlY3RlZE1lZGlhLnNpemUgLyAxMDI0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuQWRkTWVkaWE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAwIHx8IHRoaXMubWVkaWFJdGVtcy5sZW5ndGggPiAwICYmIGFsbG93TXVsdGlwbGU7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc21hbGxUaHVtYnMgPyAxMjAgOiAyNDA7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnNcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnBhdGhzID0gaW5pdGlhbFBhdGhzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0TWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdmaWxlc1VwbG9hZGVkJywgZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMoZmlsZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jYW5BZGRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjbWVkaWFBcHBcIikuZGV0YWNoKCkuYXBwZW5kVG8oJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubW9kYWwtYm9keScpKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI21lZGlhQXBwXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSAkKG1vZGFsQm9keUVsZW1lbnQpLm1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChtb2RhbEJvZHlFbGVtZW50KS5maW5kKCcubWVkaWFGaWVsZFNlbGVjdEJ1dHRvbicpLm9mZignY2xpY2snKS5vbignY2xpY2snLCBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZE1lZGlhRmlsZXMobWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0aGUgaW5jbHVkZWQgbWVkaWFzIHRvIGJlIHN0aWxsIHNlbGVjdGVkIHRoZSBuZXh0IHRpbWUgd2Ugb3BlbiB0aGUgbW9kYWwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCkubW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwTWVkaWFUZXh0ID0gdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuY2VsTWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dCA9IHRoaXMuYmFja3VwTWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93QW5jaG9yTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKS5tb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgY2FuY2VsQW5jaG9yaW5nTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHRoaXMuYmFja3VwQW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0geyB4OiAwLjUsIHk6IDAuNSB9O1xyXG4gICAgICAgICAgICB9LCAgXHJcbiAgICAgICAgICAgIG9uQW5jaG9yRHJvcDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhbmNob3JMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLiRyZWZzLm1vZGFsQm9keSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGltYWdlIGlzIHNocnVuayBjb21wYXJlIGFnYWluc3QgdGhlIG1vZGFsIGJvZHkuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRyZWZzLm1vZGFsQm9keS5jbGllbnRXaWR0aCAtIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAodGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFuY2hvckljb24gPSBNYXRoLnJvdW5kKHRoaXMuJHJlZnMubW9kYWxCb2R5LnF1ZXJ5U2VsZWN0b3IoJy5pY29uLW1lZGlhLWFuY2hvcicpLmNsaWVudFdpZHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIuaXNJbnRlZ2VyKGFuY2hvckljb24pKVxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiAtIGFuY2hvckljb24vMjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgYW5jaG9yVG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnkgKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICBcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLm1lZGlhSXRlbXMgJiYgdGhpcy5tZWRpYUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZE1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGJlY2F1c2Ugc29tZXRpbWVzIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlciAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTsgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG4iLCIvLyBkaWZmZXJlbnQgbWVkaWEgZmllbGQgZWRpdG9ycyB3aWxsIGFkZCB0aGVtc2VsdmVzIHRvIHRoaXMgYXJyYXlcclxudmFyIG1lZGlhRmllbGRBcHBzID0gW107XHJcbiIsIi8vIDxtZWRpYS1maWVsZC10aHVtYnMtY29udGFpbmVyPiBjb21wb25lbnQgXHJcbi8vIGRpZmZlcmVudCBtZWRpYSBmaWVsZCBlZGl0b3JzIHNoYXJlIHRoaXMgY29tcG9uZW50IHRvIHByZXNlbnQgdGhlIHRodW1icy5cclxuVnVlLmNvbXBvbmVudCgnbWVkaWFGaWVsZFRodW1ic0NvbnRhaW5lcicsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgIDxkaXYgOmlkPVwiaWRQcmVmaXggKyBcXCdfbWVkaWFDb250YWluZXJNYWluXFwnXCIgdi1jbG9haz5cXFxyXG4gICAgICAgICA8ZGl2IHYtaWY9XCJtZWRpYUl0ZW1zLmxlbmd0aCA8IDFcIiBjbGFzcz1cImNhcmQgdGV4dC1jZW50ZXJcIj5cXFxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz0gXCJjYXJkLWJvZHlcIiA+XFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGludFwiPnt7VC5ub0ltYWdlc319PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICA8ZHJhZ2dhYmxlIDpsaXN0PVwibWVkaWFJdGVtc1wiIHRhZz1cIm9sXCIgY2xhc3M9XCJyb3cgbWVkaWEtaXRlbXMtZ3JpZFwiID5cXFxyXG4gICAgICAgICAgICA8bGkgdi1mb3I9XCJtZWRpYSBpbiBtZWRpYUl0ZW1zXCJcXFxyXG4gICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLnZ1ZWtleVwiIFxcXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWxpc3QtaXRlbSBjYXJkXCJcXFxyXG4gICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgXFwncHhcXCd9XCJcXFxyXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBzZWxlY3RlZE1lZGlhID09IG1lZGlhfVwiXFxcclxuICAgICAgICAgICAgICAgIHYtb246Y2xpY2s9XCJzZWxlY3RNZWRpYShtZWRpYSlcIiB2LWlmPVwiIW1lZGlhLmlzUmVtb3ZlZFwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWEubWVkaWFQYXRoIT09IFxcJ25vdC1mb3VuZFxcJ1wiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXJcIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIiA+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aChcXCdpbWFnZVxcJylcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie21heEhlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCcgLCBtYXhXaWR0aDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIvPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYSBmYS1maWxlLW8gZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtcmlnaHQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1yaWdodCBpbmxpbmUtbWVkaWEtYnV0dG9uIHZpZXctYnV0dG9uXCJcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbFwiIDp0aXRsZT1cIm1lZGlhLm1lZGlhUGF0aFwiPnt7IG1lZGlhLmlzTmV3ID8gbWVkaWEubmFtZS5zdWJzdHIoMzYpIDogbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1lbHNlPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYi1jb250YWluZXIgZmxleC1jb2x1bW5cIiA6c3R5bGU9XCJ7aGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYW4gdGV4dC1kYW5nZXIgZC1ibG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrXCI+e3sgVC5tZWRpYU5vdEZvdW5kIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyIHNtYWxsIGQtYmxvY2sgdGV4dC1jZW50ZXJcIj57eyBULmRpc2NhcmRXYXJuaW5nIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1yaWdodCBpbmxpbmUtbWVkaWEtYnV0dG9uIGRlbGV0ZS1idXR0b25cIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwic2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsIHRleHQtZGFuZ2VyXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgIDwvbGk+XFxcclxuICAgICAgICAgPC9kcmFnZ2FibGU+XFxcclxuICAgICAgIDwvZGl2PlxcXHJcbiAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWE6IE9iamVjdCxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlcixcclxuICAgICAgICBpZFByZWZpeDogU3RyaW5nXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULm1lZGlhTm90Rm91bmQgPSAkKCcjdC1tZWRpYS1ub3QtZm91bmQnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGlzY2FyZFdhcm5pbmcgPSAkKCcjdC1kaXNjYXJkLXdhcm5pbmcnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubm9JbWFnZXMgPSAkKCcjdC1uby1pbWFnZXMnKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NlbGVjdEFuZERlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZD4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3VwbG9hZCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IDpjbGFzcz1cInsgXFwndXBsb2FkLXdhcm5pbmdcXCcgOiBtb2RlbC5lcnJvck1lc3NhZ2UgfVwiIGNsYXNzPVwidXBsb2FkIG0tMiBwLTIgcHQtMFwiPiBcXFxyXG4gICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgdi1vbjpjbGljaz1cImRpc21pc3NXYXJuaW5nKClcIiBjbGFzcz1cImNsb3NlLXdhcm5pbmdcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiA8L3NwYW4+XFxcclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ1cGxvYWQtbmFtZVwiIDp0aXRsZT1cIm1vZGVsLmVycm9yTWVzc2FnZVwiPnt7IG1vZGVsLm5hbWUgfX08L3A+IFxcXHJcbiAgICAgICAgICAgIDxkaXY+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFtb2RlbC5lcnJvck1lc3NhZ2VcIiA6c3R5bGU9XCJ7IHdpZHRoOiBtb2RlbC5wZXJjZW50YWdlICsgXFwnJVxcJ31cIiBjbGFzcz1cInByb2dyZXNzLWJhclwiPiA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj4gRXJyb3I6IHt7IG1vZGVsLmVycm9yTWVzc2FnZSB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICcsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3RcclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICQoJyNmaWxldXBsb2FkJykuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICAgc2VsZi5tb2RlbC5wZXJjZW50YWdlID0gcGFyc2VJbnQoZGF0YS5sb2FkZWQgLyBkYXRhLnRvdGFsICogMTAwLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJyNmaWxldXBsb2FkJykuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5yZXN1bHQuZmlsZXNbMF0uZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRmFpbHVyZShkYXRhLmZpbGVzWzBdLm5hbWUsIGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgIFxyXG4gICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW1vdmFsUmVxdWVzdCcsIHNlbGYubW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJyNmaWxldXBsb2FkJykuYmluZCgnZmlsZXVwbG9hZGZhaWwnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lICwgZGF0YS50ZXh0U3RhdHVzKTsgICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaGFuZGxlRmFpbHVyZTogZnVuY3Rpb24gKGZpbGVOYW1lLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSAhPT0gdGhpcy5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5lcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ0Vycm9yT25VcGxvYWQnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpc21pc3NXYXJuaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8dXBsb2FkLWxpc3Q+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWRMaXN0Jywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtbGlzdFwiIHYtc2hvdz1cImZpbGVzLmxlbmd0aCA+IDBcIj4gXFxcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiIEBjbGljaz1cImV4cGFuZGVkID0gIWV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgVC51cGxvYWRzIH19IDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cInBlbmRpbmdDb3VudFwiPiAoUGVuZGluZzoge3sgcGVuZGluZ0NvdW50IH19KSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJlcnJvckNvdW50XCIgOmNsYXNzPVwieyBcXCd0ZXh0LWRhbmdlclxcJyA6IGVycm9yQ291bnQgfVwiPiAoIHt7IFQuZXJyb3JzIH19OiB7eyBlcnJvckNvdW50IH19IC8gPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHYtb246Y2xpY2suc3RvcD1cImNsZWFyRXJyb3JzXCIgPiB7eyBULmNsZWFyRXJyb3JzIH19IDwvYT4pPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnV0dG9uXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LXNob3c9XCJleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtc2hvdz1cIiFleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIiB2LXNob3c9XCJleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXBcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8dXBsb2FkIHYtZm9yPVwiZiBpbiBmaWxlc1wiIDprZXk9XCJmLm5hbWVcIiAgOm1vZGVsPVwiZlwiPjwvdXBsb2FkPiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXYgPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZpbGVzOiBbXSxcclxuICAgICAgICAgICAgVDoge30sXHJcbiAgICAgICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcGVuZGluZ0NvdW50OiAwLFxyXG4gICAgICAgICAgICBlcnJvckNvdW50OiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQudXBsb2FkcyA9ICQoJyN0LXVwbG9hZHMnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZXJyb3JzID0gJCgnI3QtZXJyb3JzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmNsZWFyRXJyb3JzID0gJCgnI3QtY2xlYXItZXJyb3JzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICBmaWxlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAkKCcjZmlsZXVwbG9hZCcpLmJpbmQoJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEuZmlsZXMpIHsgXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChuZXdGaWxlKSB7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdmFyIGFscmVhZHlJbkxpc3QgPSBzZWxmLmZpbGVzLnNvbWUoZnVuY3Rpb24gKGYpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5uYW1lID09IG5ld0ZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghYWxyZWFkeUluTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZXMucHVzaCh7IG5hbWU6IG5ld0ZpbGUubmFtZSwgcGVyY2VudGFnZTogMCwgZXJyb3JNZXNzYWdlOiAnJyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBhbHJlYWR5IG9uIHRoZSBxdWV1ZTonICsgbmV3RmlsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICBcclxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ3JlbW92YWxSZXF1ZXN0JywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLm5hbWUgPT0gZmlsZVVwbG9hZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1cy4kb24oJ0Vycm9yT25VcGxvYWQnLCBmdW5jdGlvbiAoZmlsZVVwbG9hZCkge1xyXG4gICAgICAgICAgICBzZWxmLnVwZGF0ZUNvdW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHVwZGF0ZUNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3JDb3VudCA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgIT0gJyc7XHJcbiAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ291bnQgPSB0aGlzLmZpbGVzLmxlbmd0aCAtIHRoaXMuZXJyb3JDb3VudDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjbGVhckVycm9yczogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmVycm9yTWVzc2FnZSA9PSAnJztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgZmlsZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiJdfQ== +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJTaGFyZWQvdXBsb2FkQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZExpc3RDb21wb25lbnQuanMiLCJNZWRpYUFwcC9hcHAuanMiLCJNZWRpYUFwcC9maWxldXBsb2FkLmpzIiwiTWVkaWFBcHAvZm9sZGVyQ29tcG9uZW50LmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc0dyaWRDb21wb25lbnQuanMiLCJNZWRpYUFwcC9tZWRpYUl0ZW1zVGFibGVDb21wb25lbnQuanMiLCJNZWRpYUFwcC9wYWdlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL3NvcnRJbmRpY2F0b3JDb21wb25lbnQuanMiLCJNZWRpYUZpZWxkL2F0dGFjaGVkTWVkaWFGaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZHNBcHBzQXJyYXkuanMiLCJNZWRpYUZpZWxkL21lZGlhRmllbGRUaHVtYnNDb250YWluZXIuanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJyZXF1aXJlIiwid2luZG93IiwialF1ZXJ5IiwiJCIsInN1cHBvcnQiLCJmaWxlSW5wdXQiLCJSZWdFeHAiLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwicHJvcCIsInhockZpbGVVcGxvYWQiLCJQcm9ncmVzc0V2ZW50IiwiRmlsZVJlYWRlciIsInhockZvcm1EYXRhRmlsZVVwbG9hZCIsIkZvcm1EYXRhIiwiYmxvYlNsaWNlIiwiQmxvYiIsInByb3RvdHlwZSIsInNsaWNlIiwid2Via2l0U2xpY2UiLCJtb3pTbGljZSIsImdldERyYWdIYW5kbGVyIiwidHlwZSIsImlzRHJhZ092ZXIiLCJlIiwiZGF0YVRyYW5zZmVyIiwib3JpZ2luYWxFdmVudCIsImluQXJyYXkiLCJ0eXBlcyIsIl90cmlnZ2VyIiwiRXZlbnQiLCJkZWxlZ2F0ZWRFdmVudCIsInByZXZlbnREZWZhdWx0IiwiZHJvcEVmZmVjdCIsIndpZGdldCIsIm9wdGlvbnMiLCJkcm9wWm9uZSIsImRvY3VtZW50IiwicGFzdGVab25lIiwidW5kZWZpbmVkIiwicmVwbGFjZUZpbGVJbnB1dCIsInBhcmFtTmFtZSIsInNpbmdsZUZpbGVVcGxvYWRzIiwibGltaXRNdWx0aUZpbGVVcGxvYWRzIiwibGltaXRNdWx0aUZpbGVVcGxvYWRTaXplIiwibGltaXRNdWx0aUZpbGVVcGxvYWRTaXplT3ZlcmhlYWQiLCJzZXF1ZW50aWFsVXBsb2FkcyIsImxpbWl0Q29uY3VycmVudFVwbG9hZHMiLCJmb3JjZUlmcmFtZVRyYW5zcG9ydCIsInJlZGlyZWN0IiwicmVkaXJlY3RQYXJhbU5hbWUiLCJwb3N0TWVzc2FnZSIsIm11bHRpcGFydCIsIm1heENodW5rU2l6ZSIsInVwbG9hZGVkQnl0ZXMiLCJyZWNhbGN1bGF0ZVByb2dyZXNzIiwicHJvZ3Jlc3NJbnRlcnZhbCIsImJpdHJhdGVJbnRlcnZhbCIsImF1dG9VcGxvYWQiLCJ1bmlxdWVGaWxlbmFtZXMiLCJtZXNzYWdlcyIsImkxOG4iLCJtZXNzYWdlIiwiY29udGV4dCIsInRvU3RyaW5nIiwiZWFjaCIsImtleSIsInZhbHVlIiwicmVwbGFjZSIsImZvcm1EYXRhIiwiZm9ybSIsInNlcmlhbGl6ZUFycmF5IiwiYWRkIiwiZGF0YSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImZpbGV1cGxvYWQiLCJwcm9jZXNzIiwiZG9uZSIsInN1Ym1pdCIsInByb2Nlc3NEYXRhIiwiY29udGVudFR5cGUiLCJjYWNoZSIsInRpbWVvdXQiLCJfcHJvbWlzZVBpcGUiLCJwYXJ0cyIsImZuIiwianF1ZXJ5Iiwic3BsaXQiLCJOdW1iZXIiLCJfc3BlY2lhbE9wdGlvbnMiLCJfYmxvYlNsaWNlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfQml0cmF0ZVRpbWVyIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImdldFRpbWUiLCJsb2FkZWQiLCJiaXRyYXRlIiwiZ2V0Qml0cmF0ZSIsImludGVydmFsIiwidGltZURpZmYiLCJfaXNYSFJVcGxvYWQiLCJfZ2V0Rm9ybURhdGEiLCJpc0FycmF5IiwibmFtZSIsInB1c2giLCJfZ2V0VG90YWwiLCJmaWxlcyIsInRvdGFsIiwiaW5kZXgiLCJmaWxlIiwic2l6ZSIsIl9pbml0UHJvZ3Jlc3NPYmplY3QiLCJvYmoiLCJwcm9ncmVzcyIsIl9wcm9ncmVzcyIsImV4dGVuZCIsIl9pbml0UmVzcG9uc2VPYmplY3QiLCJfcmVzcG9uc2UiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJfb25Qcm9ncmVzcyIsImxlbmd0aENvbXB1dGFibGUiLCJfdGltZSIsIk1hdGgiLCJmbG9vciIsImNodW5rU2l6ZSIsIl9iaXRyYXRlVGltZXIiLCJfaW5pdFByb2dyZXNzTGlzdGVuZXIiLCJ0aGF0IiwieGhyIiwiYWpheFNldHRpbmdzIiwidXBsb2FkIiwib24iLCJvZSIsIl9kZWluaXRQcm9ncmVzc0xpc3RlbmVyIiwib2ZmIiwiX2lzSW5zdGFuY2VPZiIsIl9nZXRVbmlxdWVGaWxlbmFtZSIsIm1hcCIsIlN0cmluZyIsIl8iLCJwMSIsInAyIiwiZXh0IiwiX2luaXRYSFJEYXRhIiwiaGVhZGVycyIsImNvbnRlbnRSYW5nZSIsImJsb2IiLCJlbmNvZGVVUkkiLCJ1cGxvYWROYW1lIiwiZmllbGQiLCJhcHBlbmQiLCJmaWxlTmFtZSIsIl9pbml0SWZyYW1lU2V0dGluZ3MiLCJ0YXJnZXRIb3N0IiwidXJsIiwiZGF0YVR5cGUiLCJsb2NhdGlvbiIsImhvc3QiLCJfaW5pdERhdGFTZXR0aW5ncyIsIl9jaHVua2VkVXBsb2FkIiwiX2dldFBhcmFtTmFtZSIsImlucHV0IiwiaSIsImxlbmd0aCIsIl9pbml0Rm9ybVNldHRpbmdzIiwiaHJlZiIsInRvVXBwZXJDYXNlIiwiZm9ybUFjY2VwdENoYXJzZXQiLCJhdHRyIiwiX2dldEFKQVhTZXR0aW5ncyIsIl9nZXREZWZlcnJlZFN0YXRlIiwiZGVmZXJyZWQiLCJzdGF0ZSIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiX2VuaGFuY2VQcm9taXNlIiwicHJvbWlzZSIsInN1Y2Nlc3MiLCJlcnJvciIsImZhaWwiLCJjb21wbGV0ZSIsImFsd2F5cyIsIl9nZXRYSFJQcm9taXNlIiwicmVzb2x2ZU9yUmVqZWN0IiwiYXJncyIsImRmZCIsIkRlZmVycmVkIiwicmVzb2x2ZVdpdGgiLCJyZWplY3RXaXRoIiwiYWJvcnQiLCJfYWRkQ29udmVuaWVuY2VNZXRob2RzIiwiZ2V0UHJvbWlzZSIsInJlc29sdmVGdW5jIiwicmVqZWN0RnVuYyIsIl9wcm9jZXNzUXVldWUiLCJlcnJvclRocm93biIsImpxWEhSIiwiX29uU2VuZCIsInByb2Nlc3NpbmciLCJyZXNwb25zZSIsIl9nZXRVcGxvYWRlZEJ5dGVzIiwicmFuZ2UiLCJnZXRSZXNwb25zZUhlYWRlciIsInVwcGVyQnl0ZXNQb3MiLCJwYXJzZUludCIsInRlc3RPbmx5IiwiZnMiLCJ1YiIsIm1jcyIsIm8iLCJjdXJyZW50TG9hZGVkIiwiYWpheCIsInJlc3VsdCIsInRleHRTdGF0dXMiLCJfYmVmb3JlU2VuZCIsIl9hY3RpdmUiLCJfb25Eb25lIiwiX29uRmFpbCIsIl9vbkFsd2F5cyIsImpxWEhSb3JSZXN1bHQiLCJqcVhIUm9yRXJyb3IiLCJhYm9ydGVkIiwic2xvdCIsInBpcGUiLCJzZW5kIiwiX3NlbmRpbmciLCJuZXh0U2xvdCIsIl9zbG90cyIsInNoaWZ0IiwicmVzb2x2ZSIsIl9zZXF1ZW5jZSIsIl9vbkFkZCIsImZpbGVzTGVuZ3RoIiwibGltaXQiLCJsaW1pdFNpemUiLCJvdmVyaGVhZCIsImJhdGNoU2l6ZSIsInBhcmFtTmFtZVNldCIsInBhcmFtTmFtZVNsaWNlIiwiZmlsZVNldCIsImoiLCJvcmlnaW5hbEZpbGVzIiwiZWxlbWVudCIsIm5ld0RhdGEiLCJfcmVwbGFjZUZpbGVJbnB1dCIsImlucHV0Q2xvbmUiLCJjbG9uZSIsInJlc3RvcmVGb2N1cyIsImlzIiwiYWN0aXZlRWxlbWVudCIsImZpbGVJbnB1dENsb25lIiwicmVzZXQiLCJhZnRlciIsImRldGFjaCIsInRyaWdnZXIiLCJjbGVhbkRhdGEiLCJlbCIsIl9oYW5kbGVGaWxlVHJlZUVudHJ5IiwiZW50cnkiLCJwYXRoIiwiZW50cmllcyIsImRpclJlYWRlciIsImVycm9ySGFuZGxlciIsInN1Y2Nlc3NIYW5kbGVyIiwiX2hhbmRsZUZpbGVUcmVlRW50cmllcyIsInJlYWRFbnRyaWVzIiwicmVzdWx0cyIsImNvbmNhdCIsImlzRmlsZSIsIl9maWxlIiwicmVsYXRpdmVQYXRoIiwiaXNEaXJlY3RvcnkiLCJjcmVhdGVSZWFkZXIiLCJ3aGVuIiwiQXJyYXkiLCJfZ2V0RHJvcHBlZEZpbGVzIiwiaXRlbXMiLCJ3ZWJraXRHZXRBc0VudHJ5IiwiZ2V0QXNFbnRyeSIsIml0ZW0iLCJnZXRBc0ZpbGUiLCJtYWtlQXJyYXkiLCJfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXMiLCJmaWxlU2l6ZSIsIl9nZXRGaWxlSW5wdXRGaWxlcyIsIl9vbkNoYW5nZSIsInRhcmdldCIsIl9vblBhc3RlIiwiY2xpcGJvYXJkRGF0YSIsIl9vbkRyb3AiLCJfb25EcmFnT3ZlciIsIl9vbkRyYWdFbnRlciIsIl9vbkRyYWdMZWF2ZSIsIl9pbml0RXZlbnRIYW5kbGVycyIsIl9vbiIsImRyYWdvdmVyIiwiZHJvcCIsImRyYWdlbnRlciIsImRyYWdsZWF2ZSIsInBhc3RlIiwiY2hhbmdlIiwiX2Rlc3Ryb3lFdmVudEhhbmRsZXJzIiwiX29mZiIsIl9kZXN0cm95IiwiX3NldE9wdGlvbiIsInJlaW5pdCIsIl9zdXBlciIsIl9pbml0U3BlY2lhbE9wdGlvbnMiLCJmaW5kIiwiX2dldFJlZ0V4cCIsInN0ciIsIm1vZGlmaWVycyIsInBvcCIsImpvaW4iLCJfaXNSZWdFeHBPcHRpb24iLCJfaW5pdERhdGFBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsInRvTG93ZXJDYXNlIiwiY2hhckF0IiwiX2NyZWF0ZSIsImFjdGl2ZSIsImRpc2FibGVkIiwicmVqZWN0IiwidGhlbiIsImNvdW50ZXIiLCJqc29uQVBJIiwianNvblBhcnNlIiwiSlNPTiIsImFqYXhUcmFuc3BvcnQiLCJhc3luYyIsImluaXRpYWxJZnJhbWVTcmMiLCJpZnJhbWUiLCJhZGRQYXJhbUNoYXIiLCJjb21wbGV0ZUNhbGxiYWNrIiwiZmlsZUlucHV0Q2xvbmVzIiwicGFyYW1OYW1lcyIsImNvbnRlbnRzIiwiZmlyc3RDaGlsZCIsIkVycm9yIiwiYXBwZW5kVG8iLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwidmFsIiwicmVtb3ZlQXR0ciIsInJlcGxhY2VXaXRoIiwiYm9keSIsImFqYXhTZXR1cCIsImNvbnZlcnRlcnMiLCJ0ZXh0IiwiaHRtbCIsInhtbERvYyIsImlzWE1MRG9jIiwicGFyc2VYTUwiLCJYTUxEb2N1bWVudCIsInhtbCIsImdsb2JhbEV2YWwiLCJWdWUiLCJjb21wb25lbnQiLCJ0ZW1wbGF0ZSIsInByb3BzIiwibW9kZWwiLCJtb3VudGVkIiwic2VsZiIsImJpbmQiLCJwZXJjZW50YWdlIiwiaGFuZGxlRmFpbHVyZSIsImJ1cyIsIiRlbWl0IiwibWV0aG9kcyIsImVycm9yTWVzc2FnZSIsImRpc21pc3NXYXJuaW5nIiwiVCIsImV4cGFuZGVkIiwicGVuZGluZ0NvdW50IiwiZXJyb3JDb3VudCIsImNyZWF0ZWQiLCJ1cGxvYWRzIiwiZXJyb3JzIiwiY2xlYXJFcnJvcnMiLCJjb21wdXRlZCIsImZpbGVDb3VudCIsImZvckVhY2giLCJuZXdGaWxlIiwiYWxyZWFkeUluTGlzdCIsInNvbWUiLCJmIiwiY29uc29sZSIsIiRvbiIsImZpbGVVcGxvYWQiLCJhcnJheSIsInNwbGljZSIsInVwZGF0ZUNvdW50IiwiZmlsdGVyIiwid2F0Y2giLCJpbml0aWFsaXplZCIsIm1lZGlhQXBwIiwiaW5pdGlhbGl6ZU1lZGlhQXBwbGljYXRpb24iLCJkaXNwbGF5TWVkaWFBcHBsaWNhdGlvbiIsIm1lZGlhQXBwbGljYXRpb25VcmwiLCJwYXRoQmFzZSIsIm1ldGhvZCIsImNvbnRlbnQiLCJyb290IiwiZm9sZGVyIiwic2VsZWN0ZWRGb2xkZXIiLCJtZWRpYUl0ZW1zIiwic2VsZWN0ZWRNZWRpYXMiLCJkcmFnRHJvcFRodW1ibmFpbCIsIkltYWdlIiwic21hbGxUaHVtYnMiLCJncmlkVmlldyIsIm1lZGlhRmlsdGVyIiwic29ydEJ5Iiwic29ydEFzYyIsIml0ZW1zSW5QYWdlIiwic3JjIiwic2VsZWN0Um9vdCIsInNlbGVjdGVkIiwibG9hZEZvbGRlciIsImVycm9ySW5mbyIsIm5ld05hbWUiLCJuZXdQYXRoIiwib2xkUGF0aCIsIm1lZGlhIiwibWVkaWFQYXRoIiwiY3JlYXRlRm9sZGVyIiwiZGVsZXRlRm9sZGVyIiwibmV3U29ydCIsImNoYW5nZVNvcnQiLCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhIiwicmVuYW1lTWVkaWEiLCJkZWxldGVNZWRpYUl0ZW0iLCJoYW5kbGVEcmFnU3RhcnQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiY3VycmVudFByZWZzIiwicGFyc2UiLCJpc0hvbWUiLCJwYXJlbnRzIiwicCIsInBhcmVudEZvbGRlciIsInVuc2hpZnQiLCJwYXJlbnQiLCJmaWx0ZXJlZE1lZGlhSXRlbXMiLCJmaWx0ZXJlZCIsImluZGV4T2YiLCJzb3J0IiwiYSIsImIiLCJtaW1lIiwibG9jYWxlQ29tcGFyZSIsImxhc3RNb2RpZnkiLCJoaWRkZW5Db3VudCIsInRodW1iU2l6ZSIsImdldCIsInNldCIsIm5ld1ByZWZzIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsIm5ld0ZvbGRlciIsIiRyZWZzIiwicm9vdEZvbGRlciIsInRvZ2dsZSIsInVwbG9hZFVybCIsImVuY29kZVVSSUNvbXBvbmVudCIsIm9wZW4iLCJsb2ciLCJzZWxlY3RBbGwiLCJ1blNlbGVjdEFsbCIsImludmVydFNlbGVjdGlvbiIsInRlbXAiLCJpc01lZGlhU2VsZWN0ZWQiLCJjb25maXJtRGlhbG9nIiwiY2FsbGJhY2siLCJyZXNwIiwiX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4iLCJyZXNwb25zZVRleHQiLCJlbXB0eSIsIm1vZGFsIiwiZm9jdXMiLCJzZWxlY3RBbmREZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhIiwiZGVsZXRlTWVkaWFMaXN0IiwibWVkaWFMaXN0IiwicGF0aHMiLCJtZWRpYU5hbWVzIiwic2V0RGF0YSIsInNldERyYWdJbWFnZSIsImVmZmVjdEFsbG93ZWQiLCJoYW5kbGVTY3JvbGxXaGlsZURyYWciLCJjbGllbnRZIiwic2Nyb2xsQnkiLCJpbm5lckhlaWdodCIsImtleXByZXNzIiwid2hpY2giLCJjbGljayIsIm9sZE5hbWUiLCJjdXJyZW50Rm9sZGVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJzdHlsZSIsImRpc3BsYXkiLCJhbnRpRm9yZ2VyeVRva2VuIiwiZHQiLCJjb250YWlucyIsImRyb3Bab25lVGltZW91dCIsImNsZWFyVGltZW91dCIsImFkZENsYXNzIiwiaG92ZXJlZERyb3Bab25lIiwiY2xvc2VzdCIsInJlbW92ZUNsYXNzIiwiZGlyIiwic2VsZWN0ZWRJbk1lZGlhQXBwIiwibGV2ZWwiLCJjaGlsZHJlbiIsImlzSG92ZXJlZCIsInBhZGRpbmciLCJpc1NlbGVjdGVkIiwiaXNSb290IiwiaXNBbmNlc3Rvck9mU2VsZWN0ZWRGb2xkZXIiLCJsb2FkQ2hpbGRyZW4iLCJzZWxlY3QiLCJjIiwiZW10cHkiLCJoYW5kbGVEcmFnT3ZlciIsImhhbmRsZURyYWdMZWF2ZSIsIm1vdmVNZWRpYVRvRm9sZGVyIiwiZ2V0RGF0YSIsInNvdXJjZUZvbGRlciIsInRhcmdldEZvbGRlciIsImFsZXJ0IiwiZWRpdEJ1dHRvbiIsImRlbGV0ZUJ1dHRvbiIsImJ1aWxkTWVkaWFVcmwiLCJkcmFnU3RhcnQiLCJCb29sZWFuIiwiaW1hZ2VIZWFkZXIiLCJuYW1lSGVhZGVyIiwibGFzdE1vZGlmeUhlYWRlciIsInNpemVIZWFkZXIiLCJ0eXBlSGVhZGVyIiwidmlld0J1dHRvbiIsInByaW50RGF0ZVRpbWUiLCJkYXRlbWlsbGlzIiwiZCIsInRvTG9jYWxlU3RyaW5nIiwic291cmNlSXRlbXMiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImN1cnJlbnQiLCJwYWdlckZpcnN0QnV0dG9uIiwicGFnZXJQcmV2aW91c0J1dHRvbiIsInBhZ2VyTmV4dEJ1dHRvbiIsInBhZ2VyTGFzdEJ1dHRvbiIsInBhZ2VyUGFnZVNpemVMYWJlbCIsInBhZ2VyUGFnZUxhYmVsIiwicGFnZXJUb3RhbExhYmVsIiwibmV4dCIsInByZXZpb3VzIiwiZ29GaXJzdCIsImdvTGFzdCIsInRvdGFsUGFnZXMiLCJnb1RvIiwidGFyZ2V0UGFnZSIsInBhZ2VzIiwiY2VpbCIsImlzTGFzdFBhZ2UiLCJpc0ZpcnN0UGFnZSIsImNhbkRvTmV4dCIsImNhbkRvUHJldiIsImNhbkRvRmlyc3QiLCJjYW5Eb0xhc3QiLCJpdGVtc0luQ3VycmVudFBhZ2UiLCJzdGFydCIsImVuZCIsInBhZ2VMaW5rcyIsImxpbmtzIiwiYmVmb3JlQ3VycmVudCIsImJlZm9yZUJlZm9yZUN1cnJlbnQiLCJhZnRlckN1cnJlbnQiLCJhZnRlckFmdGVyQ3VycmVudCIsImNvbG5hbWUiLCJzZWxlY3RlZGNvbG5hbWUiLCJhc2MiLCJpc0FjdGl2ZSIsImluaXRpYWxpemVBdHRhY2hlZE1lZGlhRmllbGQiLCJpZE9mVXBsb2FkQnV0dG9uIiwidXBsb2FkQWN0aW9uIiwibWVkaWFJdGVtVXJsIiwiYWxsb3dNdWx0aXBsZSIsImFsbG93TWVkaWFUZXh0IiwiYWxsb3dBbmNob3JzIiwidGVtcFVwbG9hZEZvbGRlciIsImluaXRpYWxQYXRocyIsIm1lZGlhRmllbGRFZGl0b3IiLCJpZHByZWZpeCIsIm1lZGlhRmllbGRBcHAiLCJtZWRpYUZpZWxkQXBwcyIsInNlbGVjdGVkTWVkaWEiLCJpZFByZWZpeCIsImJhY2t1cE1lZGlhVGV4dCIsImJhY2t1cEFuY2hvciIsIm1lZGlhUGF0aHMiLCJ4IiwiaXNSZW1vdmVkIiwiaXNOZXciLCJtZWRpYVRleHQiLCJhbmNob3IiLCJ2YWx1ZXMiLCJzaWduYWwiLCJ2dWVrZXkiLCJ5Iiwicm91bmQiLCJjYW5BZGRNZWRpYSIsIm5vblJlbW92ZWRNZWRpYUl0ZW1zIiwic2VsZWN0TWVkaWEiLCJzZWxlY3RvciIsImVkaXRvcklkIiwiY291bnQiLCJnZXRVbmlxdWVJZCIsIm5ld01lZGlhSXRlbXMiLCJlcnJvcm1zZyIsInIiLCJyYW5kb20iLCJ2IiwicmVtb3ZlU2VsZWN0ZWQiLCJldmVudCIsInJlbW92ZWQiLCJzaG93TWVkaWFUZXh0TW9kYWwiLCJtZWRpYVRleHRNb2RhbCIsImNhbmNlbE1lZGlhVGV4dE1vZGFsIiwic2hvd0FuY2hvck1vZGFsIiwiYW5jaG9yaW5nTW9kYWwiLCJjYW5jZWxBbmNob3JpbmdNb2RhbCIsInJlc2V0QW5jaG9yIiwib25BbmNob3JEcm9wIiwiaW1hZ2UiLCJhbmNob3JJbWFnZSIsIm9mZnNldFgiLCJjbGllbnRXaWR0aCIsIm9mZnNldFkiLCJjbGllbnRIZWlnaHQiLCJhbmNob3JMZWZ0IiwibW9kYWxCb2R5Iiwib2Zmc2V0IiwicG9zaXRpb24iLCJhbmNob3JUb3AiLCJzZXRBbmNob3IiLCJhZGRNZWRpYUZpbGVzIiwiZGVlcCIsImhhbmRsZXIiLCJpbml0aWFsaXplTWVkaWFGaWVsZCIsIm1vZGFsQm9keUVsZW1lbnQiLCJzaG93TW9kYWwiLCJzaG93IiwiYW5jaG9ySWNvbiIsInF1ZXJ5U2VsZWN0b3IiLCJpc0ludGVnZXIiLCJtZWRpYU5vdEZvdW5kIiwiZGlzY2FyZFdhcm5pbmciLCJub0ltYWdlcyIsIiRwYXJlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFDQTtBQUVBLENBQUMsVUFBVUEsT0FBVixFQUFtQjtBQUNsQjs7QUFDQSxNQUFJLE9BQU9DLE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0MsR0FBM0MsRUFBZ0Q7QUFDOUM7QUFDQUQsSUFBQUEsTUFBTSxDQUFDLENBQUMsUUFBRCxFQUFXLHFCQUFYLENBQUQsRUFBb0NELE9BQXBDLENBQU47QUFDRCxHQUhELE1BR08sSUFBSSxRQUFPRyxPQUFQLHlDQUFPQSxPQUFQLE9BQW1CLFFBQXZCLEVB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QixDQUFDLENBQXJCLEdBQXlCLEdBQXpCLEdBQStCLEdBQW5DLENBQUgsR0FBNkMsUUFBN0MsR0FBd0RRLFNBQXhELEdBQW9FLFVBQXBFLEdBQWlGQSxTQUF4RjtBQUNIO0FBVEk7QUFsRThCLENBQTNDIiwiZmlsZSI6Im1lZGlhLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDEwLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknLCAnanF1ZXJ5LXVpL3VpL3dpZGdldCddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JyksIHJlcXVpcmUoJy4vdmVuZG9yL2pxdWVyeS51aS53aWRnZXQnKSk7XG4gIH0gZWxzZSB7XG4gICAgLy8gQnJvd3NlciBnbG9iYWxzOlxuICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gIH1cbn0pKGZ1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBEZXRlY3QgZmlsZSBpbnB1dCBzdXBwb3J0LCBiYXNlZCBvblxuICAvLyBodHRwczovL3ZpbGphbWlzLmNvbS8yMDEyL2ZpbGUtdXBsb2FkLXN1cHBvcnQtb24tbW9iaWxlL1xuICAkLnN1cHBvcnQuZmlsZUlucHV0ID0gIShcbiAgICBuZXcgUmVnRXhwKFxuICAgICAgLy8gSGFuZGxlIGRldmljZXMgd2hpY2ggZ2l2ZSBmYWxzZSBwb3NpdGl2ZXMgZm9yIHRoZSBmZWF0dXJlIGRldGVjdGlvbjpcbiAgICAgICcoQW5kcm9pZCAoMVxcXFwuWzAxNTZdfDJcXFxcLlswMV0pKScgK1xuICAgICAgICAnfChXaW5kb3dzIFBob25lIChPUyA3fDhcXFxcLjApKXwoWEJMV1ApfChadW5lV1ApfChXUERlc2t0b3ApJyArXG4gICAgICAgICd8KHcoZWIpP09TQnJvd3Nlcil8KHdlYk9TKScgK1xuICAgICAgICAnfChLaW5kbGUvKDFcXFxcLjB8MlxcXFwuWzA1XXwzXFxcXC4wKSknXG4gICAgKS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KSB8fFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZvciBhbGwgb3RoZXIgZGV2aWNlczpcbiAgICAkKCc8aW5wdXQgdHlwZT1cImZpbGVcIi8+JykucHJvcCgnZGlzYWJsZWQnKVxuICApO1xuXG4gIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLFxuICAvLyBhcyBzb21lIFNhZmFyaSB2ZXJzaW9ucyAoNT8pIHN1cHBvcnQgWEhSIGZpbGUgdXBsb2FkcyB2aWEgdGhlIEZvcm1EYXRhIEFQSSxcbiAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHMuXG4gIC8vIHdpbmRvdy5YTUxIdHRwUmVxdWVzdFVwbG9hZCBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTAsIHNvIHdlIGNoZWNrIGZvclxuICAvLyB3aW5kb3cuUHJvZ3Jlc3NFdmVudCBpbnN0ZWFkIHRvIGRldGVjdCBYSFIyIGZpbGUgdXBsb2FkIGNhcGFiaWxpdHk6XG4gICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkID0gISEod2luZG93LlByb2dyZXNzRXZlbnQgJiYgd2luZG93LkZpbGVSZWFkZXIpO1xuICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkID0gISF3aW5kb3cuRm9ybURhdGE7XG5cbiAgLy8gRGV0ZWN0IHN1cHBvcnQgZm9yIEJsb2Igc2xpY2luZyAocmVxdWlyZWQgZm9yIGNodW5rZWQgdXBsb2Fkcyk6XG4gICQuc3VwcG9ydC5ibG9iU2xpY2UgPVxuICAgIHdpbmRvdy5CbG9iICYmXG4gICAgKEJsb2IucHJvdG90eXBlLnNsaWNlIHx8XG4gICAgICBCbG9iLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpO1xuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGRyYWcgaGFuZGxlcnMgZm9yIGRyYWdvdmVyL2RyYWdlbnRlci9kcmFnbGVhdmVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgRXZlbnQgdHlwZVxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IERyYWcgaGFuZGxlclxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0RHJhZ0hhbmRsZXIodHlwZSkge1xuICAgIHZhciBpc0RyYWdPdmVyID0gdHlwZSA9PT0gJ2RyYWdvdmVyJztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXI7XG4gICAgICBpZiAoXG4gICAgICAgIGRhdGFUcmFuc2ZlciAmJlxuICAgICAgICAkLmluQXJyYXkoJ0ZpbGVzJywgZGF0YVRyYW5zZmVyLnR5cGVzKSAhPT0gLTEgJiZcbiAgICAgICAgdGhpcy5fdHJpZ2dlcih0eXBlLCAkLkV2ZW50KHR5cGUsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSkpICE9PSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKGlzRHJhZ092ZXIpIHtcbiAgICAgICAgICBkYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBUaGUgZmlsZXVwbG9hZCB3aWRnZXQgbGlzdGVucyBmb3IgY2hhbmdlIGV2ZW50cyBvbiBmaWxlIGlucHV0IGZpZWxkcyBkZWZpbmVkXG4gIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLlxuICAvLyBJbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBqUXVlcnkgV2lkZ2V0IG1ldGhvZHMsIHRoZSBmaWxldXBsb2FkIHdpZGdldFxuICAvLyBleHBvc2VzIHRoZSBcImFkZFwiIGFuZCBcInNlbmRcIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZ1xuICAvLyB0aGUgZmlsZXVwbG9hZCBBUEkuXG4gIC8vIEJ5IGRlZmF1bHQsIGZpbGVzIGFkZGVkIHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgcGFzdGUsIGRyYWcgJiBkcm9wIG9yXG4gIC8vIFwiYWRkXCIgbWV0aG9kIGFyZSB1cGxvYWRlZCBpbW1lZGlhdGVseSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIG92ZXJyaWRlXG4gIC8vIHRoZSBcImFkZFwiIGNhbGxiYWNrIG9wdGlvbiB0byBxdWV1ZSBmaWxlIHVwbG9hZHMuXG4gICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7XG4gICAgb3B0aW9uczoge1xuICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDpcbiAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSxcbiAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdW5kZWZpbmVkLlxuICAgICAgLy8gU2V0IHRvIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IG9iamVjdCB0byBlbmFibGUgZmlsZSBwYXN0aW5nOlxuICAgICAgcGFzdGVab25lOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZmlsZSBpbnB1dCBmaWVsZChzKSwgdGhhdCBhcmUgbGlzdGVuZWQgdG8gZm9yIGNoYW5nZSBldmVudHMuXG4gICAgICAvLyBJZiB1bmRlZmluZWQsIGl0IGlzIHNldCB0byB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgaW5zaWRlXG4gICAgICAvLyBvZiB0aGUgd2lkZ2V0IGVsZW1lbnQgb24gcGx1Z2luIGluaXRpYWxpemF0aW9uLlxuICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSB0aGUgY2hhbmdlIGxpc3RlbmVyLlxuICAgICAgZmlsZUlucHV0OiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIGEgY2xvbmUgYWZ0ZXJcbiAgICAgIC8vIGVhY2ggaW5wdXQgZmllbGQgY2hhbmdlIGV2ZW50LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpZnJhbWUgdHJhbnNwb3J0XG4gICAgICAvLyBxdWV1ZXMgYW5kIGFsbG93cyBjaGFuZ2UgZXZlbnRzIHRvIGJlIGZpcmVkIGZvciB0aGUgc2FtZSBmaWxlXG4gICAgICAvLyBzZWxlY3Rpb24sIGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBmYWxzZTpcbiAgICAgIHJlcGxhY2VGaWxlSW5wdXQ6IHRydWUsXG4gICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSBmaWxlIGZvcm0gZGF0YSAodGhlIHJlcXVlc3QgYXJndW1lbnQgbmFtZSkuXG4gICAgICAvLyBJZiB1bmRlZmluZWQgb3IgZW1wdHksIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzXG4gICAgICAvLyB1c2VkLCBvciBcImZpbGVzW11cIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksXG4gICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczpcbiAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWxcbiAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOlxuICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgb3B0aW9uIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lXG4gICAgICAvLyBYSFIgcmVxdWVzdCB0byBrZWVwIHRoZSByZXF1ZXN0IHNpemUgdW5kZXIgb3IgZXF1YWwgdG8gdGhlIGRlZmluZWRcbiAgICAgIC8vIGxpbWl0IGluIGJ5dGVzOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplOiB1bmRlZmluZWQsXG4gICAgICAvLyBNdWx0aXBhcnQgZmlsZSB1cGxvYWRzIGFkZCBhIG51bWJlciBvZiBieXRlcyB0byBlYWNoIHVwbG9hZGVkIGZpbGUsXG4gICAgICAvLyB0aGVyZWZvcmUgdGhlIGZvbGxvd2luZyBvcHRpb24gYWRkcyBhbiBvdmVyaGVhZCBmb3IgZWFjaCBmaWxlIHVzZWRcbiAgICAgIC8vIGluIHRoZSBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemUgY29uZmlndXJhdGlvbjpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkOiA1MTIsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBpc3N1ZSBhbGwgZmlsZSB1cGxvYWQgcmVxdWVzdHNcbiAgICAgIC8vIGluIGEgc2VxdWVudGlhbCBvcmRlcjpcbiAgICAgIHNlcXVlbnRpYWxVcGxvYWRzOiBmYWxzZSxcbiAgICAgIC8vIFRvIGxpbWl0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzLFxuICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6XG4gICAgICBsaW1pdENvbmN1cnJlbnRVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdHJ1ZSB0byBmb3JjZSBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBmb3JjZUlmcmFtZVRyYW5zcG9ydDogZmFsc2UsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcmVkaXJlY3QgdXJsIG9uIHRoZVxuICAgICAgLy8gb3JpZ2luIHNlcnZlciwgZm9yIGNyb3NzLWRvbWFpbiBpZnJhbWUgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICByZWRpcmVjdDogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgcmVkaXJlY3QgdXJsLCBzZW50IGFzIHBhcnQgb2YgdGhlIGZvcm1cbiAgICAgIC8vIGRhdGEgYW5kIHNldCB0byAncmVkaXJlY3QnIGlmIHRoaXMgb3B0aW9uIGlzIGVtcHR5OlxuICAgICAgcmVkaXJlY3RQYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSBwb3N0TWVzc2FnZSB3aW5kb3csXG4gICAgICAvLyB0byBlbmFibGUgcG9zdE1lc3NhZ2UgdHJhbnNwb3J0IHVwbG9hZHM6XG4gICAgICBwb3N0TWVzc2FnZTogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgWEhSIGZpbGUgdXBsb2FkcyBhcmUgc2VudCBhcyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgaXMgYWx3YXlzIHVzaW5nIG11bHRpcGFydC9mb3JtLWRhdGEuXG4gICAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZW5hYmxlIG5vbi1tdWx0aXBhcnQgWEhSIHVwbG9hZHM6XG4gICAgICBtdWx0aXBhcnQ6IHRydWUsXG4gICAgICAvLyBUbyB1cGxvYWQgbGFyZ2UgZmlsZXMgaW4gc21hbGxlciBjaHVua3MsIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvblxuICAgICAgLy8gdG8gYSBwcmVmZXJyZWQgbWF4aW11bSBjaHVuayBzaXplLiBJZiBzZXQgdG8gMCwgbnVsbCBvciB1bmRlZmluZWQsXG4gICAgICAvLyBvciB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBCbG9iIEFQSSwgZmlsZXMgd2lsbFxuICAgICAgLy8gYmUgdXBsb2FkZWQgYXMgYSB3aG9sZS5cbiAgICAgIG1heENodW5rU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gV2hlbiBhIG5vbi1tdWx0aXBhcnQgdXBsb2FkIG9yIGEgY2h1bmtlZCBtdWx0aXBhcnQgdXBsb2FkIGhhcyBiZWVuXG4gICAgICAvLyBhYm9ydGVkLCB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byByZXN1bWUgdGhlIHVwbG9hZCBieSBzZXR0aW5nXG4gICAgICAvLyBpdCB0byB0aGUgc2l6ZSBvZiB0aGUgYWxyZWFkeSB1cGxvYWRlZCBieXRlcy4gVGhpcyBvcHRpb24gaXMgbW9zdFxuICAgICAgLy8gdXNlZnVsIHdoZW4gbW9kaWZ5aW5nIHRoZSBvcHRpb25zIG9iamVjdCBpbnNpZGUgb2YgdGhlIFwiYWRkXCIgb3JcbiAgICAgIC8vIFwic2VuZFwiIGNhbGxiYWNrcywgYXMgdGhlIG9wdGlvbnMgYXJlIGNsb25lZCBmb3IgZWFjaCBmaWxlIHVwbG9hZC5cbiAgICAgIHVwbG9hZGVkQnl0ZXM6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGZpbGUgdXBsb2FkcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuICAgICAgLy8gZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uLiBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2UgdG9cbiAgICAgIC8vIHByZXZlbnQgcmVjYWxjdWxhdGluZyB0aGUgZ2xvYmFsIHByb2dyZXNzIGRhdGE6XG4gICAgICByZWNhbGN1bGF0ZVByb2dyZXNzOiB0cnVlLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBhbmQgdHJpZ2dlciBwcm9ncmVzcyBldmVudHM6XG4gICAgICBwcm9ncmVzc0ludGVydmFsOiAxMDAsXG4gICAgICAvLyBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgdG8gY2FsY3VsYXRlIHByb2dyZXNzIGJpdHJhdGU6XG4gICAgICBiaXRyYXRlSW50ZXJ2YWw6IDUwMCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIHVwbG9hZHMgYXJlIHN0YXJ0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFkZGluZyBmaWxlczpcbiAgICAgIGF1dG9VcGxvYWQ6IHRydWUsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBkdXBsaWNhdGUgZmlsZSBuYW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCBvblxuICAgICAgLy8gdGhlIHNlcnZlci1zaWRlLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSAoZS5nLiB3aGVuIHVwbG9hZGluZ1xuICAgICAgLy8gZmlsZXMgZGlyZWN0bHkgdG8gQW1hem9uIFMzKSwgdGhlIGZvbGxvd2luZyBvcHRpb24gY2FuIGJlIHNldCB0b1xuICAgICAgLy8gYW4gZW1wdHkgb2JqZWN0IG9yIGFuIG9iamVjdCBtYXBwaW5nIGV4aXN0aW5nIGZpbGVuYW1lcywgZS5nLjpcbiAgICAgIC8vIHsgXCJpbWFnZS5qcGdcIjogdHJ1ZSwgXCJpbWFnZSAoMSkuanBnXCI6IHRydWUgfVxuICAgICAgLy8gSWYgaXQgaXMgc2V0LCBhbGwgZmlsZXMgd2lsbCBiZSB1cGxvYWRlZCB3aXRoIHVuaXF1ZSBmaWxlbmFtZXMsXG4gICAgICAvLyBhZGRpbmcgaW5jcmVhc2luZyBudW1iZXIgc3VmZml4ZXMgaWYgbmVjZXNzYXJ5LCBlLmcuOlxuICAgICAgLy8gXCJpbWFnZSAoMikuanBnXCJcbiAgICAgIHVuaXF1ZUZpbGVuYW1lczogdW5kZWZpbmVkLFxuXG4gICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczpcbiAgICAgIG1lc3NhZ2VzOiB7XG4gICAgICAgIHVwbG9hZGVkQnl0ZXM6ICdVcGxvYWRlZCBieXRlcyBleGNlZWQgZmlsZSBzaXplJ1xuICAgICAgfSxcblxuICAgICAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb24sIGdldHMgdGhlIG1lc3NhZ2Uga2V5IHRvIGJlIHRyYW5zbGF0ZWRcbiAgICAgIC8vIGFuZCBhbiBvYmplY3Qgd2l0aCBjb250ZXh0IHNwZWNpZmljIGRhdGEgYXMgYXJndW1lbnRzOlxuICAgICAgaTE4bjogZnVuY3Rpb24gKG1lc3NhZ2UsIGNvbnRleHQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgneycgKyBrZXkgKyAnfScsIHZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXRcbiAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZFxuICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YVxuICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC5cbiAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjpcbiAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkge1xuICAgICAgICByZXR1cm4gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuICAgICAgfSxcblxuICAgICAgLy8gVGhlIGFkZCBjYWxsYmFjayBpcyBpbnZva2VkIGFzIHNvb24gYXMgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBmaWxldXBsb2FkXG4gICAgICAvLyB3aWRnZXQgKHZpYSBmaWxlIGlucHV0IHNlbGVjdGlvbiwgZHJhZyAmIGRyb3AsIHBhc3RlIG9yIGFkZCBBUEkgY2FsbCkuXG4gICAgICAvLyBJZiB0aGUgc2luZ2xlRmlsZVVwbG9hZHMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgY2FsbGJhY2sgd2lsbCBiZVxuICAgICAgLy8gY2FsbGVkIG9uY2UgZm9yIGVhY2ggZmlsZSBpbiB0aGUgc2VsZWN0aW9uIGZvciBYSFIgZmlsZSB1cGxvYWRzLCBlbHNlXG4gICAgICAvLyBvbmNlIGZvciBlYWNoIGZpbGUgc2VsZWN0aW9uLlxuICAgICAgLy9cbiAgICAgIC8vIFRoZSB1cGxvYWQgc3RhcnRzIHdoZW4gdGhlIHN1Ym1pdCBtZXRob2QgaXMgaW52b2tlZCBvbiB0aGUgZGF0YSBwYXJhbWV0ZXIuXG4gICAgICAvLyBUaGUgZGF0YSBvYmplY3QgY29udGFpbnMgYSBmaWxlcyBwcm9wZXJ0eSBob2xkaW5nIHRoZSBhZGRlZCBmaWxlc1xuICAgICAgLy8gYW5kIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgcGx1Z2luIG9wdGlvbnMgYXMgd2VsbCBhcyBkZWZpbmUgYWpheCBzZXR0aW5ncy5cbiAgICAgIC8vXG4gICAgICAvLyBMaXN0ZW5lcnMgZm9yIHRoaXMgY2FsbGJhY2sgY2FuIGFsc28gYmUgYm91bmQgdGhlIGZvbGxvd2luZyB3YXk6XG4gICAgICAvLyAub24oJ2ZpbGV1cGxvYWRhZGQnLCBmdW5jKTtcbiAgICAgIC8vXG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBhbmQgYWxsb3dzIHRvIGF0dGFjaCBhZGRpdGlvbmFsXG4gICAgICAvLyBoYW5kbGVycyB1c2luZyBqUXVlcnkncyBEZWZlcnJlZCBjYWxsYmFja3M6XG4gICAgICAvLyBkYXRhLnN1Ym1pdCgpLmRvbmUoZnVuYykuZmFpbChmdW5jKS5hbHdheXMoZnVuYyk7XG4gICAgICBhZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhLmF1dG9VcGxvYWQgfHxcbiAgICAgICAgICAoZGF0YS5hdXRvVXBsb2FkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgJCh0aGlzKS5maWxldXBsb2FkKCdvcHRpb24nLCAnYXV0b1VwbG9hZCcpKVxuICAgICAgICApIHtcbiAgICAgICAgICBkYXRhLnByb2Nlc3MoKS5kb25lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIE90aGVyIGNhbGxiYWNrczpcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdWJtaXQgZXZlbnQgb2YgZWFjaCBmaWxlIHVwbG9hZDpcbiAgICAgIC8vIHN1Ym1pdDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHNlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgdXBsb2FkczpcbiAgICAgIC8vIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZG9uZScsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZmFpbGVkIChhYm9ydCBvciBlcnJvcikgdXBsb2FkczpcbiAgICAgIC8vIGZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6XG4gICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkYWx3YXlzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3M6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3MnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGdsb2JhbCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgLy8gcHJvZ3Jlc3NhbGw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdGFydCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkcyBzdG9wLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAvLyBzdG9wOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZHN0b3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNoYW5nZSBldmVudHMgb2YgdGhlIGZpbGVJbnB1dChzKTpcbiAgICAgIC8vIGNoYW5nZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOlxuICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkcGFzdGUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyb3AgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyb3A6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkZHJvcCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgZHJhZ292ZXIgZXZlbnRzIG9mIHRoZSBkcm9wWm9uZShzKTpcbiAgICAgIC8vIGRyYWdvdmVyOiBmdW5jdGlvbiAoZSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGJlZm9yZSB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdCAoYmVmb3JlIGZvcm0gZGF0YSBpbml0aWFsaXphdGlvbik6XG4gICAgICAvLyBjaHVua2JlZm9yZXNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDpcbiAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua3NlbmQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHN1Y2Nlc3NmdWwgY2h1bmsgdXBsb2FkczpcbiAgICAgIC8vIGNodW5rZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2RvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2ZhaWw6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6XG4gICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRjaHVua2Fsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBUaGUgcGx1Z2luIG9wdGlvbnMgYXJlIHVzZWQgYXMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGUgYWpheCBjYWxscy5cbiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXJlIGpRdWVyeSBhamF4IHNldHRpbmdzIHJlcXVpcmVkIGZvciB0aGUgZmlsZSB1cGxvYWRzOlxuICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgdGltZW91dDogMFxuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgdmVyc2lvbnMgYmVmb3JlIDEuOCByZXF1aXJlIHByb21pc2UucGlwZSBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzXG4gICAgLy8gdXNlZCwgYXMgcHJvbWlzZS50aGVuIGluIG9sZGVyIHZlcnNpb25zIGhhcyBhIGRpZmZlcmVudCBiZWhhdmlvciwgc2VlOlxuICAgIC8vIGh0dHBzOi8vYmxvZy5qcXVlcnkuY29tLzIwMTIvMDgvMDkvanF1ZXJ5LTEtOC1yZWxlYXNlZC9cbiAgICAvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTEwMTBcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvcHVsbC8zNDM1XG4gICAgX3Byb21pc2VQaXBlOiAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcnRzID0gJC5mbi5qcXVlcnkuc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBOdW1iZXIocGFydHNbMF0pID4gMSB8fCBOdW1iZXIocGFydHNbMV0pID4gNyA/ICd0aGVuJyA6ICdwaXBlJztcbiAgICB9KSgpLFxuXG4gICAgLy8gQSBsaXN0IG9mIG9wdGlvbnMgdGhhdCByZXF1aXJlIHJlaW5pdGlhbGl6aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQvb3JcbiAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6XG4gICAgX3NwZWNpYWxPcHRpb25zOiBbXG4gICAgICAnZmlsZUlucHV0JyxcbiAgICAgICdkcm9wWm9uZScsXG4gICAgICAncGFzdGVab25lJyxcbiAgICAgICdtdWx0aXBhcnQnLFxuICAgICAgJ2ZvcmNlSWZyYW1lVHJhbnNwb3J0J1xuICAgIF0sXG5cbiAgICBfYmxvYlNsaWNlOlxuICAgICAgJC5zdXBwb3J0LmJsb2JTbGljZSAmJlxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2xpY2UgPSB0aGlzLnNsaWNlIHx8IHRoaXMud2Via2l0U2xpY2UgfHwgdGhpcy5tb3pTbGljZTtcbiAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9LFxuXG4gICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50aW1lc3RhbXAgPSBEYXRlLm5vdyA/IERhdGUubm93KCkgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHRoaXMubG9hZGVkID0gMDtcbiAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7XG4gICAgICAgIHZhciB0aW1lRGlmZiA9IG5vdyAtIHRoaXMudGltZXN0YW1wO1xuICAgICAgICBpZiAoIXRoaXMuYml0cmF0ZSB8fCAhaW50ZXJ2YWwgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IChsb2FkZWQgLSB0aGlzLmxvYWRlZCkgKiAoMTAwMCAvIHRpbWVEaWZmKSAqIDg7XG4gICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYml0cmF0ZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIF9pc1hIUlVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFvcHRpb25zLmZvcmNlSWZyYW1lVHJhbnNwb3J0ICYmXG4gICAgICAgICgoIW9wdGlvbnMubXVsdGlwYXJ0ICYmICQuc3VwcG9ydC54aHJGaWxlVXBsb2FkKSB8fFxuICAgICAgICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpXG4gICAgICApO1xuICAgIH0sXG5cbiAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZm9ybURhdGE7XG4gICAgICBpZiAoJC50eXBlKG9wdGlvbnMuZm9ybURhdGEpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhKG9wdGlvbnMuZm9ybSk7XG4gICAgICB9XG4gICAgICBpZiAoJC5pc0FycmF5KG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybURhdGEgPSBbXTtcbiAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIGZvcm1EYXRhLnB1c2goeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybURhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcblxuICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICB2YXIgdG90YWwgPSAwO1xuICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgdG90YWwgKz0gZmlsZS5zaXplIHx8IDE7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0b3RhbDtcbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc09iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb2dyZXNzID0ge1xuICAgICAgICBsb2FkZWQ6IDAsXG4gICAgICAgIHRvdGFsOiAwLFxuICAgICAgICBiaXRyYXRlOiAwXG4gICAgICB9O1xuICAgICAgaWYgKG9iai5fcHJvZ3Jlc3MpIHtcbiAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9wcm9ncmVzcyA9IHByb2dyZXNzO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFJlc3BvbnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICB2YXIgcHJvcDtcbiAgICAgIGlmIChvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmouX3Jlc3BvbnNlLCBwcm9wKSkge1xuICAgICAgICAgICAgZGVsZXRlIG9iai5fcmVzcG9uc2VbcHJvcF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouX3Jlc3BvbnNlID0ge307XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXG4gICAgICAgICAgbG9hZGVkO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5fdGltZSAmJlxuICAgICAgICAgIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJlxuICAgICAgICAgIG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fdGltZSA9IG5vdztcbiAgICAgICAgbG9hZGVkID1cbiAgICAgICAgICBNYXRoLmZsb29yKFxuICAgICAgICAgICAgKGUubG9hZGVkIC8gZS50b3RhbCkgKiAoZGF0YS5jaHVua1NpemUgfHwgZGF0YS5fcHJvZ3Jlc3MudG90YWwpXG4gICAgICAgICAgKSArIChkYXRhLnVwbG9hZGVkQnl0ZXMgfHwgMCk7XG4gICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZVxuICAgICAgICAvLyB0byB0aGUgZ2xvYmFsIGxvYWRlZCBjb3VudGVyOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gbG9hZGVkIC0gZGF0YS5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICB0aGlzLl9wcm9ncmVzcy5iaXRyYXRlID0gdGhpcy5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoXG4gICAgICAgICAgbm93LFxuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCxcbiAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbFxuICAgICAgICApO1xuICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IGRhdGEuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXRcbiAgICAgICAgLy8gdG8gdGhlIGZpbGUgc2l6ZShzKSBvZiB0aGUgY3VycmVudCB1cGxvYWQgYW5kIGEgbG9hZGVkIGRhdGFcbiAgICAgICAgLy8gcHJvcGVydHkgY2FsY3VsYXRlZCBhY2NvcmRpbmdseTpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBnbG9iYWwgcHJvZ3Jlc3MgZXZlbnQgZm9yIGFsbCBjdXJyZW50IGZpbGUgdXBsb2FkcyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczpcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAncHJvZ3Jlc3NhbGwnLFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzYWxsJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgLy8gQWNjZXNzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDpcbiAgICAgIGlmICh4aHIudXBsb2FkKSB7XG4gICAgICAgICQoeGhyLnVwbG9hZCkub24oJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgb2UgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjpcbiAgICAgICAgICBlLmxlbmd0aENvbXB1dGFibGUgPSBvZS5sZW5ndGhDb21wdXRhYmxlO1xuICAgICAgICAgIGUubG9hZGVkID0gb2UubG9hZGVkO1xuICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDtcbiAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKGUsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy54aHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHhocjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2RlaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9mZigncHJvZ3Jlc3MnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2lzSW5zdGFuY2VPZjogZnVuY3Rpb24gKHR5cGUsIG9iaikge1xuICAgICAgLy8gQ3Jvc3MtZnJhbWUgaW5zdGFuY2VvZiBjaGVja1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCAnICsgdHlwZSArICddJztcbiAgICB9LFxuXG4gICAgX2dldFVuaXF1ZUZpbGVuYW1lOiBmdW5jdGlvbiAobmFtZSwgbWFwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAobWFwW25hbWVdKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKFxuICAgICAgICAgIC8oPzogXFwoKFtcXGRdKylcXCkpPyhcXC5bXi5dKyk/JC8sXG4gICAgICAgICAgZnVuY3Rpb24gKF8sIHAxLCBwMikge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gcDEgPyBOdW1iZXIocDEpICsgMSA6IDE7XG4gICAgICAgICAgICB2YXIgZXh0ID0gcDIgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gJyAoJyArIGluZGV4ICsgJyknICsgZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFVuaXF1ZUZpbGVuYW1lKG5hbWUsIG1hcCk7XG4gICAgICB9XG4gICAgICBtYXBbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0WEhSRGF0YTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLFxuICAgICAgICAvLyBJZ25vcmUgbm9uLW11bHRpcGFydCBzZXR0aW5nIGlmIG5vdCBzdXBwb3J0ZWQ6XG4gICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMubXVsdGlwYXJ0IHx8ICEkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCxcbiAgICAgICAgcGFyYW1OYW1lID1cbiAgICAgICAgICAkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknXG4gICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lWzBdXG4gICAgICAgICAgICA6IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0gJC5leHRlbmQoe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LVJhbmdlJ10gPSBvcHRpb25zLmNvbnRlbnRSYW5nZTtcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0IHx8IG9wdGlvbnMuYmxvYiB8fCAhdGhpcy5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkpIHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPVxuICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZT1cIicgK1xuICAgICAgICAgIGVuY29kZVVSSShmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lKSArXG4gICAgICAgICAgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmICghbXVsdGlwYXJ0KSB7XG4gICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IG9wdGlvbnMuYmxvYiB8fCBmaWxlO1xuICAgICAgfSBlbHNlIGlmICgkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gd2luZG93LnBvc3RNZXNzYWdlIGRvZXMgbm90IGFsbG93IHNlbmRpbmcgRm9ybURhdGFcbiAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG9cbiAgICAgICAgICAvLyB0aGUgZm9ybURhdGEgYXJyYXkgYW5kIGxldCB0aGUgcG9zdE1lc3NhZ2Ugd2luZG93XG4gICAgICAgICAgLy8gY3JlYXRlIHRoZSBGb3JtRGF0YSBvYmplY3Qgb3V0IG9mIHRoaXMgYXJyYXk6XG4gICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5ibG9iXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOlxuICAgICAgICAgICAgICAgICAgKCQudHlwZShvcHRpb25zLnBhcmFtTmFtZSkgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWxlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0Zvcm1EYXRhJywgb3B0aW9ucy5mb3JtRGF0YSkpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKSwgZnVuY3Rpb24gKGluZGV4LCBmaWVsZCkge1xuICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmllbGQubmFtZSwgZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICBvcHRpb25zLmJsb2IsXG4gICAgICAgICAgICAgIGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBhbGxvd3MgdGhlIHRlc3RzIHRvIHJ1biB3aXRoXG4gICAgICAgICAgICAgIC8vIGR1bW15IG9iamVjdHM6XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX2lzSW5zdGFuY2VPZignQmxvYicsIGZpbGUpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGUudXBsb2FkTmFtZSB8fCBmaWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHRoYXQuX2dldFVuaXF1ZUZpbGVuYW1lKFxuICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51bmlxdWVGaWxlbmFtZXNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lLFxuICAgICAgICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgLy8gQmxvYiByZWZlcmVuY2UgaXMgbm90IG5lZWRlZCBhbnltb3JlLCBmcmVlIG1lbW9yeTpcbiAgICAgIG9wdGlvbnMuYmxvYiA9IG51bGw7XG4gICAgfSxcblxuICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTtcbiAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0OlxuICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YTpcbiAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTtcbiAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOlxuICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLFxuICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnJlZGlyZWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaW5pdERhdGFTZXR0aW5nczogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NodW5rZWRVcGxvYWQob3B0aW9ucywgdHJ1ZSkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFhIUkRhdGEob3B0aW9ucyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnBvc3RNZXNzYWdlKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGVcbiAgICAgICAgICAvLyBwb3N0TWVzc2FnZSB0cmFuc3BvcnQ6XG4gICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdwb3N0bWVzc2FnZSAnICsgKG9wdGlvbnMuZGF0YVR5cGUgfHwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRQYXJhbU5hbWU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCksXG4gICAgICAgIHBhcmFtTmFtZSA9IG9wdGlvbnMucGFyYW1OYW1lO1xuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gW107XG4gICAgICAgIGZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLFxuICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsXG4gICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGkpIHtcbiAgICAgICAgICAgIHBhcmFtTmFtZS5wdXNoKG5hbWUpO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtTmFtZSA9IFtmaWxlSW5wdXQucHJvcCgnbmFtZScpIHx8ICdmaWxlc1tdJ107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtwYXJhbU5hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmFtTmFtZTtcbiAgICB9LFxuXG4gICAgX2luaXRGb3JtU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAvLyBSZXRyaWV2ZSBtaXNzaW5nIG9wdGlvbnMgZnJvbSB0aGUgaW5wdXQgZmllbGQgYW5kIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBmb3JtLCBpZiBhdmFpbGFibGU6XG4gICAgICBpZiAoIW9wdGlvbnMuZm9ybSB8fCAhb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7XG4gICAgICAgIC8vIElmIHRoZSBnaXZlbiBmaWxlIGlucHV0IGRvZXNuJ3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGZvcm0sXG4gICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCB3aWRnZXQgZmlsZSBpbnB1dCdzIGZvcm06XG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkge1xuICAgICAgICAgIG9wdGlvbnMuZm9ybSA9ICQodGhpcy5vcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy51cmwpIHtcbiAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLmZvcm0ucHJvcCgnYWN0aW9uJykgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgXCJQT1NUXCIgb3IgXCJQVVRcIjpcbiAgICAgIG9wdGlvbnMudHlwZSA9IChcbiAgICAgICAgb3B0aW9ucy50eXBlIHx8XG4gICAgICAgICgkLnR5cGUob3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICBvcHRpb25zLmZvcm0ucHJvcCgnbWV0aG9kJykpIHx8XG4gICAgICAgICcnXG4gICAgICApLnRvVXBwZXJDYXNlKCk7XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BPU1QnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BVVCcgJiZcbiAgICAgICAgb3B0aW9ucy50eXBlICE9PSAnUEFUQ0gnXG4gICAgICApIHtcbiAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KSB7XG4gICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2dldEFKQVhTZXR0aW5nczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSk7XG4gICAgICB0aGlzLl9pbml0Rm9ybVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgdGhpcy5faW5pdERhdGFTZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sXG5cbiAgICAvLyBqUXVlcnkgMS42IGRvZXNuJ3QgcHJvdmlkZSAuc3RhdGUoKSxcbiAgICAvLyB3aGlsZSBqUXVlcnkgMS44KyByZW1vdmVkIC5pc1JlamVjdGVkKCkgYW5kIC5pc1Jlc29sdmVkKCk6XG4gICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkge1xuICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZC5zdGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmVycmVkLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICByZXR1cm4gJ3Jlc29sdmVkJztcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIH0sXG5cbiAgICAvLyBNYXBzIGpxWEhSIGNhbGxiYWNrcyB0byB0aGUgZXF1aXZhbGVudFxuICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0OlxuICAgIF9lbmhhbmNlUHJvbWlzZTogZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgIHByb21pc2Uuc3VjY2VzcyA9IHByb21pc2UuZG9uZTtcbiAgICAgIHByb21pc2UuZXJyb3IgPSBwcm9taXNlLmZhaWw7XG4gICAgICBwcm9taXNlLmNvbXBsZXRlID0gcHJvbWlzZS5hbHdheXM7XG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9LFxuXG4gICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGhcbiAgICAvLyB0aGUganFYSFIgbWV0aG9kcyBhYm9ydCwgc3VjY2VzcywgZXJyb3IgYW5kIGNvbXBsZXRlOlxuICAgIF9nZXRYSFJQcm9taXNlOiBmdW5jdGlvbiAocmVzb2x2ZU9yUmVqZWN0LCBjb250ZXh0LCBhcmdzKSB7XG4gICAgICB2YXIgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgdGhpcy5vcHRpb25zLmNvbnRleHQgfHwgcHJvbWlzZTtcbiAgICAgIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IHRydWUpIHtcbiAgICAgICAgZGZkLnJlc29sdmVXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfSBlbHNlIGlmIChyZXNvbHZlT3JSZWplY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlO1xuICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpO1xuICAgIH0sXG5cbiAgICAvLyBBZGRzIGNvbnZlbmllbmNlIG1ldGhvZHMgdG8gdGhlIGRhdGEgY2FsbGJhY2sgYXJndW1lbnQ6XG4gICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZ2V0UHJvbWlzZSA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBhcmdzKS5wcm9taXNlKCk7XG4gICAgICAgIH07XG4gICAgICBkYXRhLnByb2Nlc3MgPSBmdW5jdGlvbiAocmVzb2x2ZUZ1bmMsIHJlamVjdEZ1bmMpIHtcbiAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHtcbiAgICAgICAgICBkYXRhLl9wcm9jZXNzUXVldWUgPSB0aGlzLl9wcm9jZXNzUXVldWUgPSAodGhpcy5fcHJvY2Vzc1F1ZXVlIHx8XG4gICAgICAgICAgICBnZXRQcm9taXNlKFt0aGlzXSkpXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlamVjdFdpdGgodGhhdCwgW2RhdGFdKS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGdldFByb21pc2UoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBbdGhhdC5fcHJvbWlzZVBpcGVdKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1F1ZXVlIHx8IGdldFByb21pc2UoW3RoaXNdKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUoKSAhPT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPVxuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ3N1Ym1pdCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIHRoaXNcbiAgICAgICAgICAgICkgIT09IGZhbHNlICYmIHRoYXQuX29uU2VuZChlLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5qcVhIUiB8fCB0aGF0Ll9nZXRYSFJQcm9taXNlKCk7XG4gICAgICB9O1xuICAgICAgZGF0YS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5qcVhIUi5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXJyb3JUaHJvd24gPSAnYWJvcnQnO1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdmYWlsJywgbnVsbCwgdGhpcyk7XG4gICAgICAgIHJldHVybiB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5qcVhIUikge1xuICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wcm9jZXNzUXVldWUpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF0aGlzLmpxWEhSICYmXG4gICAgICAgICAgdGhpcy5fcHJvY2Vzc1F1ZXVlICYmXG4gICAgICAgICAgdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLl9wcm9jZXNzUXVldWUpID09PSAncGVuZGluZydcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBkYXRhLnByb2dyZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgICB9O1xuICAgICAgZGF0YS5yZXNwb25zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlO1xuICAgICAgfTtcbiAgICB9LFxuXG4gICAgLy8gUGFyc2VzIHRoZSBSYW5nZSBoZWFkZXIgZnJvbSB0aGUgc2VydmVyIHJlc3BvbnNlXG4gICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOlxuICAgIF9nZXRVcGxvYWRlZEJ5dGVzOiBmdW5jdGlvbiAoanFYSFIpIHtcbiAgICAgIHZhciByYW5nZSA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCdSYW5nZScpLFxuICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksXG4gICAgICAgIHVwcGVyQnl0ZXNQb3MgPSBwYXJ0cyAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnNlSW50KHBhcnRzWzFdLCAxMCk7XG4gICAgICByZXR1cm4gdXBwZXJCeXRlc1BvcyAmJiB1cHBlckJ5dGVzUG9zICsgMTtcbiAgICB9LFxuXG4gICAgLy8gVXBsb2FkcyBhIGZpbGUgaW4gbXVsdGlwbGUsIHNlcXVlbnRpYWwgcmVxdWVzdHNcbiAgICAvLyBieSBzcGxpdHRpbmcgdGhlIGZpbGUgdXAgaW4gbXVsdGlwbGUgYmxvYiBjaHVua3MuXG4gICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZVxuICAgIC8vIHNob3VsZCBiZSB1cGxvYWRlZCBpbiBjaHVua3MsIGJ1dCBkb2VzIG5vdCBpbnZva2UgYW55XG4gICAgLy8gdXBsb2FkIHJlcXVlc3RzOlxuICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHtcbiAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgZnMgPSBmaWxlLnNpemUsXG4gICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLFxuICAgICAgICBtY3MgPSBvcHRpb25zLm1heENodW5rU2l6ZSB8fCBmcyxcbiAgICAgICAgc2xpY2UgPSB0aGlzLl9ibG9iU2xpY2UsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgIGpxWEhSLFxuICAgICAgICB1cGxvYWQ7XG4gICAgICBpZiAoXG4gICAgICAgICEoXG4gICAgICAgICAgdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykgJiZcbiAgICAgICAgICBzbGljZSAmJlxuICAgICAgICAgICh1YiB8fCAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3Mob3B0aW9ucykgOiBtY3MpIDwgZnMpXG4gICAgICAgICkgfHxcbiAgICAgICAgb3B0aW9ucy5kYXRhXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRlc3RPbmx5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHViID49IGZzKSB7XG4gICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgW1xuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBmaWxlLmVycm9yXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGNodW5rIHVwbG9hZCBtZXRob2Q6XG4gICAgICB1cGxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6XG4gICAgICAgIHZhciBvID0gJC5leHRlbmQoe30sIG9wdGlvbnMpLFxuICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIG8uYmxvYiA9IHNsaWNlLmNhbGwoXG4gICAgICAgICAgZmlsZSxcbiAgICAgICAgICB1YixcbiAgICAgICAgICB1YiArICgkLnR5cGUobWNzKSA9PT0gJ2Z1bmN0aW9uJyA/IG1jcyhvKSA6IG1jcyksXG4gICAgICAgICAgZmlsZS50eXBlXG4gICAgICAgICk7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZlxuICAgICAgICAvLyB3aWxsIGJlIGRlcmVmZXJlbmNlZCBhZnRlciBkYXRhIHByb2Nlc3Npbmc6XG4gICAgICAgIG8uY2h1bmtTaXplID0gby5ibG9iLnNpemU7XG4gICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6XG4gICAgICAgIG8uY29udGVudFJhbmdlID1cbiAgICAgICAgICAnYnl0ZXMgJyArIHViICsgJy0nICsgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzO1xuICAgICAgICAvLyBUcmlnZ2VyIGNodW5rYmVmb3Jlc2VuZCB0byBhbGxvdyBmb3JtIGRhdGEgdG8gYmUgdXBkYXRlZCBmb3IgdGhpcyBjaHVua1xuICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2JlZm9yZXNlbmQnLCBudWxsLCBvKTtcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgdXBsb2FkIGRhdGEgKHRoZSBibG9iIGFuZCBwb3RlbnRpYWwgZm9ybSBkYXRhKTpcbiAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7XG4gICAgICAgIC8vIEFkZCBwcm9ncmVzcyBsaXN0ZW5lcnMgZm9yIHRoaXMgY2h1bmsgdXBsb2FkOlxuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAganFYSFIgPSAoXG4gICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8XG4gICAgICAgICAgdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgby5jb250ZXh0KVxuICAgICAgICApXG4gICAgICAgICAgLmRvbmUoZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgIHViID0gdGhhdC5fZ2V0VXBsb2FkZWRCeXRlcyhqcVhIUikgfHwgdWIgKyBvLmNodW5rU2l6ZTtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWRcbiAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0aGF0Ll9vblByb2dyZXNzKFxuICAgICAgICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsXG4gICAgICAgICAgICAgICAgICB0b3RhbDogdWIgLSBvLnVwbG9hZGVkQnl0ZXNcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvLnVwbG9hZGVkQnl0ZXMgPSB1YjtcbiAgICAgICAgICAgIG8ucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgby50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rZG9uZScsIG51bGwsIG8pO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmthbHdheXMnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIGlmICh1YiA8IGZzKSB7XG4gICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIG5vdCB5ZXQgY29tcGxldGUsXG4gICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6XG4gICAgICAgICAgICAgIHVwbG9hZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmVXaXRoKG8uY29udGV4dCwgW3Jlc3VsdCwgdGV4dFN0YXR1cywganFYSFJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAgIG8uanFYSFIgPSBqcVhIUjtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2ZhaWwnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBkZmQucmVqZWN0V2l0aChvLmNvbnRleHQsIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC5fZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lcihvKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgfTtcbiAgICAgIHVwbG9hZCgpO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIF9iZWZvcmVTZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PT0gMCkge1xuICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0c1xuICAgICAgICAvLyBhbmQgbm8gb3RoZXIgdXBsb2FkcyBhcmUgY3VycmVudGx5IHJ1bm5pbmcsXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7XG4gICAgICAgIC8vIFNldCB0aW1lciBmb3IgZ2xvYmFsIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX2JpdHJhdGVUaW1lciA9IG5ldyB0aGlzLl9CaXRyYXRlVGltZXIoKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCA9IHRoaXMuX3Byb2dyZXNzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRhaW5lciBvYmplY3RzIGZvciB0aGUgLnJlc3BvbnNlKCkgYW5kXG4gICAgICAvLyAucHJvZ3Jlc3MoKSBtZXRob2RzIG9uIHRoZSBkYXRhIG9iamVjdCBhcmUgYXZhaWxhYmxlXG4gICAgICAvLyBhbmQgcmVzZXQgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZTpcbiAgICAgIHRoaXMuX2luaXRSZXNwb25zZU9iamVjdChkYXRhKTtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdChkYXRhKTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmxvYWRlZCA9IGRhdGEubG9hZGVkID0gZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDA7XG4gICAgICBkYXRhLl9wcm9ncmVzcy50b3RhbCA9IGRhdGEudG90YWwgPSB0aGlzLl9nZXRUb3RhbChkYXRhLmZpbGVzKSB8fCAxO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MuYml0cmF0ZSA9IGRhdGEuYml0cmF0ZSA9IDA7XG4gICAgICB0aGlzLl9hY3RpdmUgKz0gMTtcbiAgICAgIC8vIEluaXRpYWxpemUgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6XG4gICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgKz0gZGF0YS5sb2FkZWQ7XG4gICAgICB0aGlzLl9wcm9ncmVzcy50b3RhbCArPSBkYXRhLnRvdGFsO1xuICAgIH0sXG5cbiAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykge1xuICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsXG4gICAgICAgIHJlc3BvbnNlID0gb3B0aW9ucy5fcmVzcG9uc2U7XG4gICAgICBpZiAob3B0aW9ucy5fcHJvZ3Jlc3MubG9hZGVkIDwgdG90YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgcHJvZ3Jlc3MgZXZlbnQgaWYgbm8gZmluYWwgcHJvZ3Jlc3MgZXZlbnRcbiAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOlxuICAgICAgICB0aGlzLl9vblByb2dyZXNzKFxuICAgICAgICAgICQuRXZlbnQoJ3Byb2dyZXNzJywge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGxvYWRlZDogdG90YWwsXG4gICAgICAgICAgICB0b3RhbDogdG90YWxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5yZXN1bHQgPSBvcHRpb25zLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICB0aGlzLl90cmlnZ2VyKCdkb25lJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkZhaWw6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpIHtcbiAgICAgIHZhciByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMucmVjYWxjdWxhdGVQcm9ncmVzcykge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb21cbiAgICAgICAgLy8gdGhlIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkIC09IG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7XG4gICAgICB9XG4gICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjtcbiAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247XG4gICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vbkFsd2F5czogZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvciwgb3B0aW9ucykge1xuICAgICAgLy8ganFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cyBhbmQganFYSFJvckVycm9yIGFyZSBhZGRlZCB0byB0aGVcbiAgICAgIC8vIG9wdGlvbnMgb2JqZWN0IHZpYSBkb25lIGFuZCBmYWlsIGNhbGxiYWNrc1xuICAgICAgdGhpcy5fdHJpZ2dlcignYWx3YXlzJywgbnVsbCwgb3B0aW9ucyk7XG4gICAgfSxcblxuICAgIF9vblNlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICBpZiAoIWRhdGEuc3VibWl0KSB7XG4gICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAganFYSFIsXG4gICAgICAgIGFib3J0ZWQsXG4gICAgICAgIHNsb3QsXG4gICAgICAgIHBpcGUsXG4gICAgICAgIG9wdGlvbnMgPSB0aGF0Ll9nZXRBSkFYU2V0dGluZ3MoZGF0YSksXG4gICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhhdC5fc2VuZGluZyArPSAxO1xuICAgICAgICAgIC8vIFNldCB0aW1lciBmb3IgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjpcbiAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgICAganFYSFIgPVxuICAgICAgICAgICAganFYSFIgfHxcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgKChhYm9ydGVkIHx8XG4gICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICAgICAgICdzZW5kJyxcbiAgICAgICAgICAgICAgICAgICQuRXZlbnQoJ3NlbmQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICAgICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCkpIHx8XG4gICAgICAgICAgICAgIHRoYXQuX2NodW5rZWRVcGxvYWQob3B0aW9ucykgfHxcbiAgICAgICAgICAgICAgJC5hamF4KG9wdGlvbnMpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25Eb25lKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hbHdheXMoZnVuY3Rpb24gKGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSb3JFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdGhhdC5fb25BbHdheXMoXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGV4dFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGpxWEhSb3JFcnJvcixcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgLT0gMTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiZcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IHRoYXQuX3NlbmRpbmdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsXG4gICAgICAgICAgICAgICAgICAvLyB0aGF0IGhhcyBub3QgYmVlbiBhYm9ydGVkOlxuICAgICAgICAgICAgICAgICAgdmFyIG5leHRTbG90ID0gdGhhdC5fc2xvdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgIG5leHRTbG90LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBzdG9wIGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFsbCB1cGxvYWRzIGhhdmVcbiAgICAgICAgICAgICAgICAgIC8vIGJlZW4gY29tcGxldGVkLCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0b3AgZXZlbnQ6XG4gICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ganFYSFI7XG4gICAgICAgIH07XG4gICAgICB0aGlzLl9iZWZvcmVTZW5kKGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm9wdGlvbnMuc2VxdWVudGlhbFVwbG9hZHMgfHxcbiAgICAgICAgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPD0gdGhpcy5fc2VuZGluZylcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiAxKSB7XG4gICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTtcbiAgICAgICAgICB0aGlzLl9zbG90cy5wdXNoKHNsb3QpO1xuICAgICAgICAgIHBpcGUgPSBzbG90W3RoYXQuX3Byb21pc2VQaXBlXShzZW5kKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlW3RoYXQuX3Byb21pc2VQaXBlXShzZW5kLCBzZW5kKTtcbiAgICAgICAgICBwaXBlID0gdGhpcy5fc2VxdWVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsXG4gICAgICAgIC8vIHdoaWNoIGlzIGRlbGVnYXRlZCB0byB0aGUganFYSFIgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHVwbG9hZCxcbiAgICAgICAgLy8gYW5kIGpxWEhSIGNhbGxiYWNrcyBtYXBwZWQgdG8gdGhlIGVxdWl2YWxlbnQgUHJvbWlzZSBtZXRob2RzOlxuICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGFib3J0ZWQgPSBbdW5kZWZpbmVkLCAnYWJvcnQnLCAnYWJvcnQnXTtcbiAgICAgICAgICBpZiAoIWpxWEhSKSB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICBzbG90LnJlamVjdFdpdGgob3B0aW9ucy5jb250ZXh0LCBhYm9ydGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocGlwZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZCgpO1xuICAgIH0sXG5cbiAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKSxcbiAgICAgICAgZmlsZXMgPSBkYXRhLmZpbGVzLFxuICAgICAgICBmaWxlc0xlbmd0aCA9IGZpbGVzLmxlbmd0aCxcbiAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcyxcbiAgICAgICAgbGltaXRTaXplID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemUsXG4gICAgICAgIG92ZXJoZWFkID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZCxcbiAgICAgICAgYmF0Y2hTaXplID0gMCxcbiAgICAgICAgcGFyYW1OYW1lID0gdGhpcy5fZ2V0UGFyYW1OYW1lKG9wdGlvbnMpLFxuICAgICAgICBwYXJhbU5hbWVTZXQsXG4gICAgICAgIHBhcmFtTmFtZVNsaWNlLFxuICAgICAgICBmaWxlU2V0LFxuICAgICAgICBpLFxuICAgICAgICBqID0gMDtcbiAgICAgIGlmICghZmlsZXNMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGxpbWl0U2l6ZSAmJiBmaWxlc1swXS5zaXplID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGltaXRTaXplID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICAhKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQgfHwgbGltaXRTaXplKSB8fFxuICAgICAgICAhdGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucylcbiAgICAgICkge1xuICAgICAgICBmaWxlU2V0ID0gW2ZpbGVzXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyB8fCBsaW1pdFNpemUpICYmIGxpbWl0KSB7XG4gICAgICAgIGZpbGVTZXQgPSBbXTtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWxlc0xlbmd0aDsgaSArPSBsaW1pdCkge1xuICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShpLCBpICsgbGltaXQpKTtcbiAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShpLCBpICsgbGltaXQpO1xuICAgICAgICAgIGlmICghcGFyYW1OYW1lU2xpY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYW1OYW1lU2V0LnB1c2gocGFyYW1OYW1lU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0U2l6ZSkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgPSBpICsgMSkge1xuICAgICAgICAgIGJhdGNoU2l6ZSArPSBmaWxlc1tpXS5zaXplICsgb3ZlcmhlYWQ7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaSArIDEgPT09IGZpbGVzTGVuZ3RoIHx8XG4gICAgICAgICAgICBiYXRjaFNpemUgKyBmaWxlc1tpICsgMV0uc2l6ZSArIG92ZXJoZWFkID4gbGltaXRTaXplIHx8XG4gICAgICAgICAgICAobGltaXQgJiYgaSArIDEgLSBqID49IGxpbWl0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZmlsZVNldC5wdXNoKGZpbGVzLnNsaWNlKGosIGkgKyAxKSk7XG4gICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZS5zbGljZShqLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICBwYXJhbU5hbWVTbGljZSA9IHBhcmFtTmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgICAgIGJhdGNoU2l6ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBwYXJhbU5hbWU7XG4gICAgICB9XG4gICAgICBkYXRhLm9yaWdpbmFsRmlsZXMgPSBmaWxlcztcbiAgICAgICQuZWFjaChmaWxlU2V0IHx8IGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIG5ld0RhdGEgPSAkLmV4dGVuZCh7fSwgZGF0YSk7XG4gICAgICAgIG5ld0RhdGEuZmlsZXMgPSBmaWxlU2V0ID8gZWxlbWVudCA6IFtlbGVtZW50XTtcbiAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdO1xuICAgICAgICB0aGF0Ll9pbml0UmVzcG9uc2VPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2luaXRQcm9ncmVzc09iamVjdChuZXdEYXRhKTtcbiAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpO1xuICAgICAgICByZXN1bHQgPSB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICQuRXZlbnQoJ2FkZCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgbmV3RGF0YVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBfcmVwbGFjZUZpbGVJbnB1dDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciBpbnB1dCA9IGRhdGEuZmlsZUlucHV0LFxuICAgICAgICBpbnB1dENsb25lID0gaW5wdXQuY2xvbmUodHJ1ZSksXG4gICAgICAgIHJlc3RvcmVGb2N1cyA9IGlucHV0LmlzKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgLy8gQWRkIGEgcmVmZXJlbmNlIGZvciB0aGUgbmV3IGNsb25lZCBmaWxlIGlucHV0IHRvIHRoZSBkYXRhIGFyZ3VtZW50OlxuICAgICAgZGF0YS5maWxlSW5wdXRDbG9uZSA9IGlucHV0Q2xvbmU7XG4gICAgICAkKCc8Zm9ybT48L2Zvcm0+JykuYXBwZW5kKGlucHV0Q2xvbmUpWzBdLnJlc2V0KCk7XG4gICAgICAvLyBEZXRhY2hpbmcgYWxsb3dzIHRvIGluc2VydCB0aGUgZmlsZUlucHV0IG9uIGFub3RoZXIgZm9ybVxuICAgICAgLy8gd2l0aG91dCBsb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6XG4gICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTtcbiAgICAgIC8vIElmIHRoZSBmaWxlSW5wdXQgaGFkIGZvY3VzIGJlZm9yZSBpdCB3YXMgZGV0YWNoZWQsXG4gICAgICAvLyByZXN0b3JlIGZvY3VzIHRvIHRoZSBpbnB1dENsb25lLlxuICAgICAgaWYgKHJlc3RvcmVGb2N1cykge1xuICAgICAgICBpbnB1dENsb25lLnRyaWdnZXIoJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBtZW1vcnkgbGVha3Mgd2l0aCB0aGUgZGV0YWNoZWQgZmlsZSBpbnB1dDpcbiAgICAgICQuY2xlYW5EYXRhKGlucHV0Lm9mZigncmVtb3ZlJykpO1xuICAgICAgLy8gUmVwbGFjZSB0aGUgb3JpZ2luYWwgZmlsZSBpbnB1dCBlbGVtZW50IGluIHRoZSBmaWxlSW5wdXRcbiAgICAgIC8vIGVsZW1lbnRzIHNldCB3aXRoIHRoZSBjbG9uZSwgd2hpY2ggaGFzIGJlZW4gY29waWVkIGluY2x1ZGluZ1xuICAgICAgLy8gZXZlbnQgaGFuZGxlcnM6XG4gICAgICB0aGlzLm9wdGlvbnMuZmlsZUlucHV0ID0gdGhpcy5vcHRpb25zLmZpbGVJbnB1dC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gICAgICAgIGlmIChlbCA9PT0gaW5wdXRbMF0pIHtcbiAgICAgICAgICByZXR1cm4gaW5wdXRDbG9uZVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9KTtcbiAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLFxuICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6XG4gICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBpbnB1dENsb25lO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyeTogZnVuY3Rpb24gKGVudHJ5LCBwYXRoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgZW50cmllcyA9IFtdLFxuICAgICAgICBkaXJSZWFkZXIsXG4gICAgICAgIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKGUgJiYgIWUuZW50cnkpIHtcbiAgICAgICAgICAgIGUuZW50cnkgPSBlbnRyeTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2luY2UgJC53aGVuIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgb25lXG4gICAgICAgICAgLy8gRGVmZXJyZWQgaXMgcmVqZWN0ZWQsIHdlIHVzZSByZXNvbHZlIGluc3RlYWQuXG4gICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXNcbiAgICAgICAgICAvLyB0byBiZSByZXR1cm5lZCB0b2dldGhlciBpbiBvbmUgc2V0OlxuICAgICAgICAgIGRmZC5yZXNvbHZlKFtlXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NIYW5kbGVyID0gZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgICAgICB0aGF0XG4gICAgICAgICAgICAuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzLCBwYXRoICsgZW50cnkubmFtZSArICcvJylcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZEVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlyUmVhZGVyLnJlYWRFbnRyaWVzKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NIYW5kbGVyKGVudHJpZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW50cmllcyA9IGVudHJpZXMuY29uY2F0KHJlc3VsdHMpO1xuICAgICAgICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHBhdGggPSBwYXRoIHx8ICcnO1xuICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xuICAgICAgICBpZiAoZW50cnkuX2ZpbGUpIHtcbiAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzVcbiAgICAgICAgICBlbnRyeS5fZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgIGRmZC5yZXNvbHZlKGVudHJ5Ll9maWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnJlbGF0aXZlUGF0aCA9IHBhdGg7XG4gICAgICAgICAgICBkZmQucmVzb2x2ZShmaWxlKTtcbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpO1xuICAgICAgICByZWFkRW50cmllcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zXG4gICAgICAgIC8vIG90aGVyIHRoYW4gZmlsZXMgb3IgZGlyZWN0b3JpZXM6XG4gICAgICAgIGRmZC5yZXNvbHZlKFtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZmQucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoXG4gICAgICAgICAgJCxcbiAgICAgICAgICAkLm1hcChlbnRyaWVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGF0Ll9oYW5kbGVGaWxlVHJlZUVudHJ5KGVudHJ5LCBwYXRoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBkYXRhVHJhbnNmZXIgPSBkYXRhVHJhbnNmZXIgfHwge307XG4gICAgICB2YXIgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1zICYmXG4gICAgICAgIGl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fCBpdGVtc1swXS5nZXRBc0VudHJ5KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoXG4gICAgICAgICAgJC5tYXAoaXRlbXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgICAgICBpZiAoaXRlbS53ZWJraXRHZXRBc0VudHJ5KSB7XG4gICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNTpcbiAgICAgICAgICAgICAgICBlbnRyeS5fZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNFbnRyeSgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoJC5tYWtlQXJyYXkoZGF0YVRyYW5zZmVyLmZpbGVzKSkucHJvbWlzZSgpO1xuICAgIH0sXG5cbiAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZmlsZUlucHV0ID0gJChmaWxlSW5wdXQpO1xuICAgICAgdmFyIGVudHJpZXMgPSBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLFxuICAgICAgICBmaWxlcyxcbiAgICAgICAgdmFsdWU7XG4gICAgICBpZiAoZW50cmllcyAmJiBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7XG4gICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IGZpbGVJbnB1dC5wcm9wKCd2YWx1ZScpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKFtdKS5wcm9taXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90XG4gICAgICAgIC8vIHN1cHBvcnQgdGhlIEZpbGUgQVBJIGFuZCB3ZSBhZGQgYSBwc2V1ZG8gRmlsZSBvYmplY3Qgd2l0aFxuICAgICAgICAvLyB0aGUgaW5wdXQgdmFsdWUgYXMgbmFtZSB3aXRoIHBhdGggaW5mb3JtYXRpb24gcmVtb3ZlZDpcbiAgICAgICAgZmlsZXMgPSBbeyBuYW1lOiB2YWx1ZS5yZXBsYWNlKC9eLipcXFxcLywgJycpIH1dO1xuICAgICAgfSBlbHNlIGlmIChmaWxlc1swXS5uYW1lID09PSB1bmRlZmluZWQgJiYgZmlsZXNbMF0uZmlsZU5hbWUpIHtcbiAgICAgICAgLy8gRmlsZSBub3JtYWxpemF0aW9uIGZvciBTYWZhcmkgNCBhbmQgRmlyZWZveCAzOlxuICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xuICAgICAgICAgIGZpbGUubmFtZSA9IGZpbGUuZmlsZU5hbWU7XG4gICAgICAgICAgZmlsZS5zaXplID0gZmlsZS5maWxlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoZmlsZXMpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcyhmaWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQud2hlblxuICAgICAgICAuYXBwbHkoJCwgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykpXG4gICAgICAgIFt0aGlzLl9wcm9taXNlUGlwZV0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcmd1bWVudHMpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkYXRhID0ge1xuICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksXG4gICAgICAgICAgZm9ybTogJChlLnRhcmdldC5mb3JtKVxuICAgICAgICB9O1xuICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICBpZiAodGhhdC5vcHRpb25zLnJlcGxhY2VGaWxlSW5wdXQpIHtcbiAgICAgICAgICB0aGF0Ll9yZXBsYWNlRmlsZUlucHV0KGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgJ2NoYW5nZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdjaGFuZ2UnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX29uUGFzdGU6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgaXRlbXMgPVxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudCAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmXG4gICAgICAgICAgZS5vcmlnaW5hbEV2ZW50LmNsaXBib2FyZERhdGEuaXRlbXMsXG4gICAgICAgIGRhdGEgPSB7IGZpbGVzOiBbXSB9O1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgIHZhciBmaWxlID0gaXRlbS5nZXRBc0ZpbGUgJiYgaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5maWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyKFxuICAgICAgICAgICAgJ3Bhc3RlJyxcbiAgICAgICAgICAgICQuRXZlbnQoJ3Bhc3RlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLl9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Ecm9wOiBmdW5jdGlvbiAoZSkge1xuICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZS5kYXRhVHJhbnNmZXIsXG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9nZXREcm9wcGVkRmlsZXMoZGF0YVRyYW5zZmVyKS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdkcm9wJyxcbiAgICAgICAgICAgICAgJC5FdmVudCgnZHJvcCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgICkgIT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25EcmFnT3ZlcjogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdvdmVyJyksXG5cbiAgICBfb25EcmFnRW50ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnZW50ZXInKSxcblxuICAgIF9vbkRyYWdMZWF2ZTogZ2V0RHJhZ0hhbmRsZXIoJ2RyYWdsZWF2ZScpLFxuXG4gICAgX2luaXRFdmVudEhhbmRsZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQodGhpcy5vcHRpb25zKSkge1xuICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHtcbiAgICAgICAgICBkcmFnb3ZlcjogdGhpcy5fb25EcmFnT3ZlcixcbiAgICAgICAgICBkcm9wOiB0aGlzLl9vbkRyb3AsXG4gICAgICAgICAgLy8gZXZlbnQucHJldmVudERlZmF1bHQoKSBvbiBkcmFnZW50ZXIgaXMgcmVxdWlyZWQgZm9yIElFMTArOlxuICAgICAgICAgIGRyYWdlbnRlcjogdGhpcy5fb25EcmFnRW50ZXIsXG4gICAgICAgICAgLy8gZHJhZ2xlYXZlIGlzIG5vdCByZXF1aXJlZCwgYnV0IGFkZGVkIGZvciBjb21wbGV0ZW5lc3M6XG4gICAgICAgICAgZHJhZ2xlYXZlOiB0aGlzLl9vbkRyYWdMZWF2ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLnBhc3RlWm9uZSwge1xuICAgICAgICAgIHBhc3RlOiB0aGlzLl9vblBhc3RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuc3VwcG9ydC5maWxlSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmZpbGVJbnB1dCwge1xuICAgICAgICAgIGNoYW5nZTogdGhpcy5fb25DaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZXN0cm95RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5kcm9wWm9uZSwgJ2RyYWdlbnRlciBkcmFnbGVhdmUgZHJhZ292ZXIgZHJvcCcpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsICdwYXN0ZScpO1xuICAgICAgdGhpcy5fb2ZmKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsICdjaGFuZ2UnKTtcbiAgICB9LFxuXG4gICAgX2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveUV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3N1cGVyKGtleSwgdmFsdWUpO1xuICAgICAgaWYgKHJlaW5pdCkge1xuICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRTcGVjaWFsT3B0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5maWxlSW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXRbdHlwZT1cImZpbGVcIl0nKVxuICAgICAgICAgID8gdGhpcy5lbGVtZW50XG4gICAgICAgICAgOiB0aGlzLmVsZW1lbnQuZmluZCgnaW5wdXRbdHlwZT1cImZpbGVcIl0nKTtcbiAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ID0gJChvcHRpb25zLmZpbGVJbnB1dCk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLmRyb3Bab25lIGluc3RhbmNlb2YgJCkpIHtcbiAgICAgICAgb3B0aW9ucy5kcm9wWm9uZSA9ICQob3B0aW9ucy5kcm9wWm9uZSk7XG4gICAgICB9XG4gICAgICBpZiAoIShvcHRpb25zLnBhc3RlWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRSZWdFeHA6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnLycpLFxuICAgICAgICBtb2RpZmllcnMgPSBwYXJ0cy5wb3AoKTtcbiAgICAgIHBhcnRzLnNoaWZ0KCk7XG4gICAgICByZXR1cm4gbmV3IFJlZ0V4cChwYXJ0cy5qb2luKCcvJyksIG1vZGlmaWVycyk7XG4gICAgfSxcblxuICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGtleSAhPT0gJ3VybCcgJiZcbiAgICAgICAgJC50eXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgL15cXC8uKlxcL1tpZ21dezAsM30kLy50ZXN0KHZhbHVlKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICBkYXRhID0gdGhpcy5lbGVtZW50LmRhdGEoKTtcbiAgICAgIC8vIEluaXRpYWxpemUgb3B0aW9ucyBzZXQgdmlhIEhUTUw1IGRhdGEtYXR0cmlidXRlczpcbiAgICAgICQuZWFjaCh0aGlzLmVsZW1lbnRbMF0uYXR0cmlidXRlcywgZnVuY3Rpb24gKGluZGV4LCBhdHRyKSB7XG4gICAgICAgIHZhciBrZXkgPSBhdHRyLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2YWx1ZTtcbiAgICAgICAgaWYgKC9eZGF0YS0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgaHlwaGVuLWF0ZWQga2V5IHRvIGNhbWVsQ2FzZTpcbiAgICAgICAgICBrZXkgPSBrZXkuc2xpY2UoNSkucmVwbGFjZSgvLVthLXpdL2csIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKHRoYXQuX2lzUmVnRXhwT3B0aW9uKGtleSwgdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoYXQuX2dldFJlZ0V4cCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuXG4gICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7XG4gICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Nsb3RzID0gW107XG4gICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7XG4gICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDtcbiAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTtcbiAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyB0byBxdWVyeVxuICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6XG4gICAgYWN0aXZlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgd2lkZ2V0IHVwbG9hZCBwcm9ncmVzcy5cbiAgICAvLyBJdCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGxvYWRlZCwgdG90YWwgYW5kIGJpdHJhdGUgcHJvcGVydGllc1xuICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOlxuICAgIHByb2dyZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3M7XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6XG4gICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgYWRkOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgaWYgKCFkYXRhIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHtcbiAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7XG4gICAgICAgICAgdGhhdC5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICB0aGlzLl9vbkFkZChudWxsLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXNcbiAgICAvLyB1c2luZyB0aGUgZmlsZXVwbG9hZCBBUEkuIFRoZSBkYXRhIHBhcmFtZXRlciBhY2NlcHRzIGFuIG9iamVjdCB3aGljaFxuICAgIC8vIG11c3QgaGF2ZSBhIGZpbGVzIG9yIGZpbGVJbnB1dCBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTtcbiAgICAvLyBUaGUgbWV0aG9kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBmb3IgdGhlIGZpbGUgdXBsb2FkIGNhbGwuXG4gICAgc2VuZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhICYmICF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgZGZkID0gJC5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCksXG4gICAgICAgICAgICBqcVhIUixcbiAgICAgICAgICAgIGFib3J0ZWQ7XG4gICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGpxWEhSKSB7XG4gICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGZkLnJlamVjdChudWxsLCAnYWJvcnQnLCAnYWJvcnQnKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGlmIChhYm9ydGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRmZC5yZWplY3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgICAganFYSFIgPSB0aGF0Ll9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICBqcVhIUi50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgZGZkLnJlamVjdChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7XG4gICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9vblNlbmQobnVsbCwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7XG4gICAgfVxuICB9KTtcbn0pO1xuIiwiLypcbiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkXG4gKlxuICogQ29weXJpZ2h0IDIwMTEsIFNlYmFzdGlhbiBUc2NoYW5cbiAqIGh0dHBzOi8vYmx1ZWltcC5uZXRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi8qIGdsb2JhbCBkZWZpbmUsIHJlcXVpcmUgKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICd1c2Ugc3RyaWN0JztcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOlxuICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBOb2RlL0NvbW1vbkpTOlxuICAgIGZhY3RvcnkocmVxdWlyZSgnanF1ZXJ5JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gSGVscGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSB1bmlxdWUgbmFtZXMgZm9yIHRoZSB0cmFuc3BvcnQgaWZyYW1lczpcbiAgdmFyIGNvdW50ZXIgPSAwLFxuICAgIGpzb25BUEkgPSAkLFxuICAgIGpzb25QYXJzZSA9ICdwYXJzZUpTT04nO1xuXG4gIGlmICgnSlNPTicgaW4gd2luZG93ICYmICdwYXJzZScgaW4gSlNPTikge1xuICAgIGpzb25BUEkgPSBKU09OO1xuICAgIGpzb25QYXJzZSA9ICdwYXJzZSc7XG4gIH1cblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGZvdXIgYWRkaXRpb25hbCBvcHRpb25zOlxuICAvLyBvcHRpb25zLmZpbGVJbnB1dDogYSBqUXVlcnkgY29sbGVjdGlvbiBvZiBmaWxlIGlucHV0IGZpZWxkc1xuICAvLyBvcHRpb25zLnBhcmFtTmFtZTogdGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEsXG4gIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksXG4gIC8vICBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAgLy8gb3B0aW9ucy5mb3JtRGF0YTogYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIG5hbWUgYW5kIHZhbHVlIHByb3BlcnRpZXMsXG4gIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjpcbiAgLy8gIFt7bmFtZTogJ2EnLCB2YWx1ZTogMX0sIHtuYW1lOiAnYicsIHZhbHVlOiAyfV1cbiAgLy8gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjOiB0aGUgVVJMIG9mIHRoZSBpbml0aWFsIGlmcmFtZSBzcmMsXG4gIC8vICBieSBkZWZhdWx0IHNldCB0byBcImphdmFzY3JpcHQ6ZmFsc2U7XCJcbiAgJC5hamF4VHJhbnNwb3J0KCdpZnJhbWUnLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmFzeW5jKSB7XG4gICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGluaXRpYWwgaWZyYW1lIHNyY1xuICAgICAgLy8gcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2OlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNjcmlwdC11cmxcbiAgICAgIHZhciBpbml0aWFsSWZyYW1lU3JjID0gb3B0aW9ucy5pbml0aWFsSWZyYW1lU3JjIHx8ICdqYXZhc2NyaXB0OmZhbHNlOycsXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlmcmFtZSxcbiAgICAgICAgYWRkUGFyYW1DaGFyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VuZDogZnVuY3Rpb24gKF8sIGNvbXBsZXRlQ2FsbGJhY2spIHtcbiAgICAgICAgICBmb3JtID0gJCgnPGZvcm0gc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCI+PC9mb3JtPicpO1xuICAgICAgICAgIGZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnLCBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0KTtcbiAgICAgICAgICBhZGRQYXJhbUNoYXIgPSAvXFw/Ly50ZXN0KG9wdGlvbnMudXJsKSA/ICcmJyA6ICc/JztcbiAgICAgICAgICAvLyBYRG9tYWluUmVxdWVzdCBvbmx5IHN1cHBvcnRzIEdFVCBhbmQgUE9TVDpcbiAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQVVQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UFVUJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ1BBVENIJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBBVENIJztcbiAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2ZcbiAgICAgICAgICAvLyBlbGVtZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSBET00sXG4gICAgICAgICAgLy8gc28gd2Ugc2V0IHRoZSBuYW1lIGFsb25nIHdpdGggdGhlIGlmcmFtZSBIVE1MIG1hcmt1cDpcbiAgICAgICAgICBjb3VudGVyICs9IDE7XG4gICAgICAgICAgaWZyYW1lID0gJChcbiAgICAgICAgICAgICc8aWZyYW1lIHNyYz1cIicgK1xuICAgICAgICAgICAgICBpbml0aWFsSWZyYW1lU3JjICtcbiAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJpZnJhbWUtdHJhbnNwb3J0LScgK1xuICAgICAgICAgICAgICBjb3VudGVyICtcbiAgICAgICAgICAgICAgJ1wiPjwvaWZyYW1lPidcbiAgICAgICAgICApLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGZpbGVJbnB1dENsb25lcyxcbiAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSlcbiAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyYW1OYW1lXG4gICAgICAgICAgICAgICAgOiBbb3B0aW9ucy5wYXJhbU5hbWVdO1xuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2U7XG4gICAgICAgICAgICAgIC8vIFdyYXAgaW4gYSB0cnkvY2F0Y2ggYmxvY2sgdG8gY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd25cbiAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gYWNjZXNzIGNyb3NzLWRvbWFpbiBpZnJhbWUgY29udGVudHM6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBpZnJhbWUuY29udGVudHMoKTtcbiAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhblxuICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgaWZyYW1lLmNvbnRlbnRzKCkgb25cbiAgICAgICAgICAgICAgICAvLyBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNvIHdlIHVuaWZ5IHRoZSByZXNwb25zZTpcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gVGhlIGNvbXBsZXRlIGNhbGxiYWNrIHJldHVybnMgdGhlXG4gICAgICAgICAgICAgIC8vIGlmcmFtZSBjb250ZW50IGRvY3VtZW50IGFzIHJlc3BvbnNlIG9iamVjdDpcbiAgICAgICAgICAgICAgY29tcGxldGVDYWxsYmFjaygyMDAsICdzdWNjZXNzJywgeyBpZnJhbWU6IHJlc3BvbnNlIH0pO1xuICAgICAgICAgICAgICAvLyBGaXggZm9yIElFIGVuZGxlc3MgcHJvZ3Jlc3MgYmFyIGFjdGl2aXR5IGJ1Z1xuICAgICAgICAgICAgICAvLyAoaGFwcGVucyBvbiBmb3JtIHN1Ym1pdHMgdG8gaWZyYW1lIHRhcmdldHMpOlxuICAgICAgICAgICAgICAkKCc8aWZyYW1lIHNyYz1cIicgKyBpbml0aWFsSWZyYW1lU3JjICsgJ1wiPjwvaWZyYW1lPicpLmFwcGVuZFRvKFxuICAgICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5XG4gICAgICAgICAgICAgICAgLy8gdGhlIHJlc3BvbnNlIHJlc3VsdFxuICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIC5wcm9wKCd0YXJnZXQnLCBpZnJhbWUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpXG4gICAgICAgICAgICAgIC5wcm9wKCdtZXRob2QnLCBvcHRpb25zLnR5cGUpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZm9ybURhdGEsIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgICAkKCc8aW5wdXQgdHlwZT1cImhpZGRlblwiLz4nKVxuICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKVxuICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0ICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPT09ICdQT1NUJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZpbGVJbnB1dENsb25lcyA9IG9wdGlvbnMuZmlsZUlucHV0LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmFmdGVyKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1OYW1lKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnbmFtZScsIHBhcmFtTmFtZXNbaW5kZXhdIHx8IG9wdGlvbnMucGFyYW1OYW1lKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBBcHBlbmRpbmcgdGhlIGZpbGUgaW5wdXQgZmllbGRzIHRvIHRoZSBoaWRkZW4gZm9ybVxuICAgICAgICAgICAgICAvLyByZW1vdmVzIHRoZW0gZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbjpcbiAgICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAgIC5hcHBlbmQob3B0aW9ucy5maWxlSW5wdXQpXG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY3R5cGUnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG4gICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6XG4gICAgICAgICAgICAgICAgLnByb3AoJ2VuY29kaW5nJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBIVE1MNSBmb3JtIGF0dHJpYnV0ZSBmcm9tIHRoZSBpbnB1dChzKTpcbiAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQucmVtb3ZlQXR0cignZm9ybScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAvLyBTdWJtaXR0aW5nIHRoZSBmb3JtIGluIGEgc2V0VGltZW91dCBjYWxsIGZpeGVzIGFuIGlzc3VlIHdpdGhcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIDEzIG5vdCB0cmlnZ2VyaW5nIHRoZSBpZnJhbWUgbG9hZCBldmVudCBhZnRlciByZXNldHRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGxvYWQgZXZlbnQgaGFuZGxlciwgc2VlIGFsc286XG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMvMzYzM1xuICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIGZpbGUgaW5wdXQgZmllbGRzIGF0IHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9uXG4gICAgICAgICAgICAgIC8vIGJ5IHJlcGxhY2luZyB0aGUgY2xvbmVzIHdpdGggdGhlIG9yaWdpbmFsczpcbiAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSAkKGZpbGVJbnB1dENsb25lc1tpbmRleF0pO1xuICAgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSBhbmQgZm9ybSBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgICAgJChpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3JtJywgY2xvbmUuYXR0cignZm9ybScpKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lLnJlcGxhY2VXaXRoKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoaWZyYW1lKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoaWZyYW1lKSB7XG4gICAgICAgICAgICAvLyBqYXZhc2NyaXB0OmZhbHNlIGFzIGlmcmFtZSBzcmMgYWJvcnRzIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAvLyBhbmQgcHJldmVudHMgd2FybmluZyBwb3B1cHMgb24gSFRUUFMgaW4gSUU2LlxuICAgICAgICAgICAgaWZyYW1lLm9mZignbG9hZCcpLnByb3AoJ3NyYycsIGluaXRpYWxJZnJhbWVTcmMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgZm9ybS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS5cbiAgLy8gVGhlIGZvbGxvd2luZyBhZGRzIGNvbnZlcnRlcnMgZnJvbSBpZnJhbWUgdG8gdGV4dCwganNvbiwgaHRtbCwgeG1sXG4gIC8vIGFuZCBzY3JpcHQuXG4gIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW5cbiAgLy8gb3IgdGV4dC9odG1sLCBpZiB0aGUgYnJvd3NlciBkb2Vzbid0IGluY2x1ZGUgYXBwbGljYXRpb24vanNvbiBpbiB0aGVcbiAgLy8gQWNjZXB0IGhlYWRlciwgZWxzZSBJRSB3aWxsIHNob3cgYSBkb3dubG9hZCBkaWFsb2cuXG4gIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5c1xuICAvLyBhcHBsaWNhdGlvbi94bWwgb3IgdGV4dC94bWwsIHNvIElFIHByb3Blcmx5IHBhcnNlcyB0aGUgWE1MIHJlc3BvbnNlLlxuICAvLyBTZWUgYWxzb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb25cbiAgJC5hamF4U2V0dXAoe1xuICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSBqc29uJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmIGpzb25BUElbanNvblBhcnNlXSgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkKGlmcmFtZVswXS5ib2R5KS5odG1sKCk7XG4gICAgICB9LFxuICAgICAgJ2lmcmFtZSB4bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHZhciB4bWxEb2MgPSBpZnJhbWUgJiYgaWZyYW1lWzBdO1xuICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKVxuICAgICAgICAgID8geG1sRG9jXG4gICAgICAgICAgOiAkLnBhcnNlWE1MKFxuICAgICAgICAgICAgICAoeG1sRG9jLlhNTERvY3VtZW50ICYmIHhtbERvYy5YTUxEb2N1bWVudC54bWwpIHx8XG4gICAgICAgICAgICAgICAgJCh4bWxEb2MuYm9keSkuaHRtbCgpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICByZXR1cm4gaWZyYW1lICYmICQuZ2xvYmFsRXZhbCgkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbiIsIi8vIDx1cGxvYWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWQnLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICAgPGRpdiA6Y2xhc3M9XCJ7IFxcJ3VwbG9hZC13YXJuaW5nXFwnIDogbW9kZWwuZXJyb3JNZXNzYWdlIH1cIiBjbGFzcz1cInVwbG9hZCBtLTIgcC0yIHB0LTBcIj4gXFxcclxuICAgICAgICAgICAgPHNwYW4gdi1pZj1cIm1vZGVsLmVycm9yTWVzc2FnZVwiIHYtb246Y2xpY2s9XCJkaXNtaXNzV2FybmluZygpXCIgY2xhc3M9XCJjbG9zZS13YXJuaW5nXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gPC9zcGFuPlxcXHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwidXBsb2FkLW5hbWVcIiA6dGl0bGU9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIj57eyBtb2RlbC5uYW1lIH19PC9wPiBcXFxyXG4gICAgICAgICAgICA8ZGl2PiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCIhbW9kZWwuZXJyb3JNZXNzYWdlXCIgOnN0eWxlPVwieyB3aWR0aDogbW9kZWwucGVyY2VudGFnZSArIFxcJyVcXCd9XCIgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIj4gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwibW9kZWwuZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgOnRpdGxlPVwibW9kZWwuZXJyb3JNZXNzYWdlXCI+IEVycm9yOiB7eyBtb2RlbC5lcnJvck1lc3NhZ2UgfX0gPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAnLFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtb2RlbDogT2JqZWN0XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAkKCcjZmlsZXVwbG9hZCcpLmJpbmQoJ2ZpbGV1cGxvYWRwcm9ncmVzcycsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHNlbGYubW9kZWwucGVyY2VudGFnZSA9IHBhcnNlSW50KGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCAqIDEwMCwgMTApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcjZmlsZXVwbG9hZCcpLmJpbmQoJ2ZpbGV1cGxvYWRkb25lJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzWzBdLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lLCBkYXRhLnJlc3VsdC5maWxlc1swXS5lcnJvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7ICBcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCBzZWxmLm1vZGVsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcjZmlsZXVwbG9hZCcpLmJpbmQoJ2ZpbGV1cGxvYWRmYWlsJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZmlsZXNbMF0ubmFtZSAhPT0gc2VsZi5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVGYWlsdXJlKGRhdGEuZmlsZXNbMF0ubmFtZSAsIGRhdGEudGV4dFN0YXR1cyk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGhhbmRsZUZhaWx1cmU6IGZ1bmN0aW9uIChmaWxlTmFtZSwgbWVzc2FnZSkge1xyXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUgIT09IHRoaXMubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuZXJyb3JNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdFcnJvck9uVXBsb2FkJywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkaXNtaXNzV2FybmluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbW92YWxSZXF1ZXN0JywgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPHVwbG9hZC1saXN0PiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgndXBsb2FkTGlzdCcsIHtcclxuICAgIHRlbXBsYXRlOiAnXFxcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWxpc3RcIiB2LXNob3c9XCJmaWxlcy5sZW5ndGggPiAwXCI+IFxcXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIiBAY2xpY2s9XCJleHBhbmRlZCA9ICFleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4+IHt7IFQudXBsb2FkcyB9fSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJwZW5kaW5nQ291bnRcIj4gKFBlbmRpbmc6IHt7IHBlbmRpbmdDb3VudCB9fSkgPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiZXJyb3JDb3VudFwiIDpjbGFzcz1cInsgXFwndGV4dC1kYW5nZXJcXCcgOiBlcnJvckNvdW50IH1cIj4gKCB7eyBULmVycm9ycyB9fToge3sgZXJyb3JDb3VudCB9fSAvIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB2LW9uOmNsaWNrLnN0b3A9XCJjbGVhckVycm9yc1wiID4ge3sgVC5jbGVhckVycm9ycyB9fSA8L2E+KTwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LXNob3c9XCIhZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgdi1zaG93PVwiZXhwYW5kZWRcIj4gXFxcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPHVwbG9hZCB2LWZvcj1cImYgaW4gZmlsZXNcIiA6a2V5PVwiZi5uYW1lXCIgIDptb2RlbD1cImZcIj48L3VwbG9hZD4gXFxcclxuICAgICAgICAgICAgICAgIDwvZGl2ID4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWxlczogW10sXHJcbiAgICAgICAgICAgIFQ6IHt9LFxyXG4gICAgICAgICAgICBleHBhbmRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHBlbmRpbmdDb3VudDogMCxcclxuICAgICAgICAgICAgZXJyb3JDb3VudDogMFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULnVwbG9hZHMgPSAkKCcjdC11cGxvYWRzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmVycm9ycyA9ICQoJyN0LWVycm9ycycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5jbGVhckVycm9ycyA9ICQoJyN0LWNsZWFyLWVycm9ycycpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZmlsZUNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgJCgnI2ZpbGV1cGxvYWQnKS5iaW5kKCdmaWxldXBsb2FkYWRkJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhLmZpbGVzKSB7IFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdGEuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAobmV3RmlsZSkgeyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZhciBhbHJlYWR5SW5MaXN0ID0gc2VsZi5maWxlcy5zb21lKGZ1bmN0aW9uIChmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSA9PSBuZXdGaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWFscmVhZHlJbkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzLnB1c2goeyBuYW1lOiBuZXdGaWxlLm5hbWUsIHBlcmNlbnRhZ2U6IDAsIGVycm9yTWVzc2FnZTogJycgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaXMgYWxyZWFkeSBvbiB0aGUgcXVldWU6JyArIG5ld0ZpbGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgXHJcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdyZW1vdmFsUmVxdWVzdCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYuZmlsZXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5uYW1lID09IGZpbGVVcGxvYWQubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBidXMuJG9uKCdFcnJvck9uVXBsb2FkJywgZnVuY3Rpb24gKGZpbGVVcGxvYWQpIHtcclxuICAgICAgICAgICAgc2VsZi51cGRhdGVDb3VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICB1cGRhdGVDb3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yQ291bnQgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlICE9ICcnO1xyXG4gICAgICAgICAgICB9KS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NvdW50ID0gdGhpcy5maWxlcy5sZW5ndGggLSB0aGlzLmVycm9yQ291bnQ7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2xlYXJFcnJvcnM6IGZ1bmN0aW9uICgpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5maWxlcyA9IHRoaXMuZmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5lcnJvck1lc3NhZ2UgPT0gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB3YXRjaDoge1xyXG4gICAgICAgIGZpbGVzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCJ2YXIgaW5pdGlhbGl6ZWQ7XHJcbnZhciBtZWRpYUFwcDtcclxuXHJcbnZhciBidXMgPSBuZXcgVnVlKCk7XHJcblxyXG5mdW5jdGlvbiBpbml0aWFsaXplTWVkaWFBcHBsaWNhdGlvbihkaXNwbGF5TWVkaWFBcHBsaWNhdGlvbiwgbWVkaWFBcHBsaWNhdGlvblVybCwgcGF0aEJhc2UpIHtcclxuXHJcbiAgICBpZiAoaW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmICghbWVkaWFBcHBsaWNhdGlvblVybCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ21lZGlhQXBwbGljYXRpb25VcmwgdmFyaWFibGUgaXMgbm90IGRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHVybDogbWVkaWFBcHBsaWNhdGlvblVybCxcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgICQoJy50YS1jb250ZW50JykuYXBwZW5kKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcignbWVkaWFhcHBsaWNhdGlvbjpyZWFkeScpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJvb3QgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAgJCgnI3QtbWVkaWFMaWJyYXJ5JykudGV4dCgpLFxyXG4gICAgICAgICAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgICAgICAgICBmb2xkZXI6ICcnLFxyXG4gICAgICAgICAgICAgICAgaXNEaXJlY3Rvcnk6IHRydWVcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIG1lZGlhQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgICAgICAgICBlbDogJyNtZWRpYUFwcCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWVkaWFzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRyYWdEcm9wVGh1bWJuYWlsOiBuZXcgSW1hZ2UoKSxcclxuICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsdGVyOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0Qnk6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRBc2M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNJblBhZ2U6IFtdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kcmFnRHJvcFRodW1ibmFpbC5zcmMgPSAocGF0aEJhc2UgfHwgJycpICsgJy9PcmNoYXJkQ29yZS5NZWRpYS9JbWFnZXMvZHJhZy10aHVtYm5haWwucG5nJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlckRlbGV0ZWQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJBZGRlZCcsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IGZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9sZGVyLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignYmVmb3JlRm9sZGVyQWRkZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZEZvbGRlcihmb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYUxpc3RNb3ZlZCcsIGZ1bmN0aW9uIChlcnJvckluZm8pIHsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkRm9sZGVyKHNlbGYuc2VsZWN0ZWRGb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5wdXNoKGVycm9ySW5mbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVJlbmFtZWQnLCBmdW5jdGlvbiAobmV3TmFtZSwgbmV3UGF0aCwgb2xkUGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWEgPSBzZWxmLm1lZGlhSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWVkaWFQYXRoID09PSBvbGRQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLm1lZGlhUGF0aCA9IG5ld1BhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhLm5hbWUgPSBuZXdOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVGb2xkZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZGVsZXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbW1vbiBoYW5kbGVycyBmb3IgYWN0aW9ucyBpbiBib3RoIGdyaWQgYW5kIHRhYmxlIHZpZXcuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignc29ydENoYW5nZVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChuZXdTb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlU29ydChuZXdTb3J0KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFUb2dnbGVSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbigncmVuYW1lTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW5hbWVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlTWVkaWFJdGVtKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVEcmFnU3RhcnQobWVkaWEsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlciBmb3IgcGFnZXIgZXZlbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbigncGFnZXJFdmVudCcsIGZ1bmN0aW9uIChpdGVtc0luUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1zSW5QYWdlID0gaXRlbXNJblBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycpKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb21wdXRlZDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzSG9tZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvbGRlciA9PSByb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50czogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyICYmIHBhcmVudEZvbGRlci5wYXRoICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnVuc2hpZnQocGFyZW50Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm9vdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkTWVkaWFJdGVtczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBzZWxmLm1lZGlhSXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWxmLm1lZGlhRmlsdGVyLnRvTG93ZXJDYXNlKCkpID4gLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc2VsZi5zb3J0QnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NpemUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEuc2l6ZSAtIGIuc2l6ZSA6IGIuc2l6ZSAtIGEuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbWUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubWltZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5taW1lLnRvTG93ZXJDYXNlKCkpIDogYi5taW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShhLm1pbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsYXN0TW9kaWZ5JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvcnRBc2MgPyBhLmxhc3RNb2RpZnkgLSBiLmxhc3RNb2RpZnkgOiBiLmxhc3RNb2RpZnkgLSBhLmxhc3RNb2RpZnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ydEFzYyA/IGEubmFtZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lLnRvTG93ZXJDYXNlKCkpIDogYi5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShhLm5hbWUudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbkNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoIC0gdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTAwIDogMjQwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1icyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjogdGhpcy5zZWxlY3RlZEZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkVmlldzogdGhpcy5ncmlkVmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5ld1ByZWZzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkVmlldyA9IG5ld1ByZWZzLmdyaWRWaWV3O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByZWZzOiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhQXBwbGljYXRpb25QcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZvbGRlcjogZnVuY3Rpb24gKG5ld0ZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhRmlsdGVyID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBuZXdGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcihuZXdGb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHJlZnMucm9vdEZvbGRlci50b2dnbGUoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkVXJsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRm9sZGVyID8gJCgnI3VwbG9hZEZpbGVzJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2VsZWN0ZWRGb2xkZXIucGF0aCkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0Um9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gdGhpcy5yb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZEZvbGRlcjogZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2dldE1lZGlhSXRlbXNVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoZm9sZGVyLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcyA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ydEJ5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3J0QXNjID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIGxvYWRpbmcgZm9sZGVyOicgKyBmb2xkZXIucGF0aCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTsgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkTWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdW5TZWxlY3RBbGw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJ0U2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSkgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSB0ZW1wO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTWVkaWFTZWxlY3RlZChtZWRpYSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5zcGxpY2UodGhpcy5zZWxlY3RlZE1lZGlhcy5pbmRleE9mKG1lZGlhKSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2gobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBpc01lZGlhU2VsZWN0ZWQ6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcy5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnVybC50b0xvd2VyQ2FzZSgpID09PSBtZWRpYS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGRlciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJvb3QgZm9sZGVyIGNhbid0IGJlIGRlbGV0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRlciA9PSB0aGlzLnJvb3QubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7Li4uJChcIiNkZWxldGVGb2xkZXJcIikuZGF0YSgpLCBjYWxsYmFjazogZnVuY3Rpb24gKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlRm9sZGVyVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGZvbGRlci5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVGb2xkZXInLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKS5tb2RhbCgnc2hvdycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwoJycpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW5hbWVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsJykubW9kYWwoJ3Nob3cnKTsgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjb2xkLWl0ZW0tbmFtZScpLnZhbChtZWRpYS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwobWVkaWEubmFtZSkuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGVNZWRpYSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlTWVkaWFMaXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWFzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVkaWFMaXN0Lmxlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7Li4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRocy5wdXNoKG1lZGlhTGlzdFtpXS5tZWRpYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogcGF0aHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZE1lZGlhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYubWVkaWFJdGVtcyAmJiBzZWxmLm1lZGlhSXRlbXMuaW5kZXhPZihzZWxmLnNlbGVjdGVkTWVkaWFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURlbGV0ZWQnLCBzZWxmLnNlbGVjdGVkTWVkaWFzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVNZWRpYUl0ZW06IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7Li4uJChcIiNkZWxldGVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYVVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYS5tZWRpYVBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW46ICQoXCJpbnB1dFtuYW1lPSdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbiddXCIpLnZhbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2YobWVkaWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgbWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9zZWxmLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlRHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFydCBvZiBtb3ZlIG1lZGlhIHRvIGZvbGRlcjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlcGFyZSB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgZm9sZGVyIGNvbXBvbmVudCBvbiBkcm9wIGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYU5hbWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgdXNlciBkcmFncyBhbiB1bnNlbGVjdGVkIGl0ZW0sIHdlIHNlbGVjdCBpdCBmaXJzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01lZGlhU2VsZWN0ZWQobWVkaWEpID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzLnB1c2gobWVkaWEubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2gobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCdtZWRpYU5hbWVzJywgSlNPTi5zdHJpbmdpZnkobWVkaWFOYW1lcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCdzb3VyY2VGb2xkZXInLCB0aGlzLnNlbGVjdGVkRm9sZGVyLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UodGhpcy5kcmFnRHJvcFRodW1ibmFpbCwgMTAsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJzsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNjcm9sbFdoaWxlRHJhZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2xpZW50WSA8IDE1MCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtMTApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jbGllbnRZID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlU29ydDogZnVuY3Rpb24gKG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc29ydEJ5ID09IG5ld1NvcnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEFzYyA9ICF0aGlzLnNvcnRBc2M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRBc2MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QnkgPSBuZXdTb3J0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNjcmVhdGUtZm9sZGVyLW5hbWUnKS5rZXlwcmVzcyhmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGUud2hpY2g7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09IDEzKSB7ICAvLyB0aGUgZW50ZXIga2V5IGNvZGVcclxuICAgICAgICAgICAgICAgICAgICAkKCcjbW9kYWxGb290ZXJPaycpLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJyNtb2RhbEZvb3Rlck9rJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gJCgnI2NyZWF0ZS1mb2xkZXItbmFtZScpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjY3JlYXRlRm9sZGVyVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGgpICsgXCImbmFtZT1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdhZGRGb2xkZXInLCBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlciwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbCcpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNjcmVhdGVGb2xkZXJNb2RhbC1lcnJvcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3TmFtZSA9ICQoJyNuZXctaXRlbS1uYW1lJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkTmFtZSA9ICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld05hbWUgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoICsgXCIvXCIgO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb2xkZXIgPT09IFwiL1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvbGRlciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG5ld1BhdGggPSBjdXJyZW50Rm9sZGVyICsgbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGRQYXRoID0gY3VycmVudEZvbGRlciArIG9sZE5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5ld1BhdGgudG9Mb3dlckNhc2UoKSA9PT0gb2xkUGF0aC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI3JlbmFtZU1lZGlhVXJsJykudmFsKCkgKyBcIj9vbGRQYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG9sZFBhdGgpICsgXCImbmV3UGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChuZXdQYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3JlbmFtZU1lZGlhTW9kYWwnKS5tb2RhbCgnaGlkZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhUmVuYW1lZCcsIG5ld05hbWUsIG5ld1BhdGgsIG9sZFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICQoJyNmaWxldXBsb2FkJykuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgZHJvcFpvbmU6ICQoJyNtZWRpYUFwcCcpLFxyXG4gICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgdXJsOiAkKCcjdXBsb2FkRmlsZXMnKS52YWwoKSxcclxuICAgICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdwYXRoJywgdmFsdWU6IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGggfSxcclxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfSxcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgJC5lYWNoKGRhdGEucmVzdWx0LmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZmlsZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG5cclxuJChkb2N1bWVudCkuYmluZCgnZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIGR0ID0gZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgIGlmIChkdC50eXBlcyAmJiAoZHQudHlwZXMuaW5kZXhPZiA/IGR0LnR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT0gLTEgOiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpIHtcclxuICAgICAgICB2YXIgZHJvcFpvbmUgPSAkKCcjY3VzdG9tZHJvcHpvbmUnKSxcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG92ZXJlZERyb3Bab25lID0gJChlLnRhcmdldCkuY2xvc2VzdChkcm9wWm9uZSk7XHJcbiAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgZHJvcFpvbmUucmVtb3ZlQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH0gICAgXHJcbn0pOyIsIi8vIDxmb2xkZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdmb2xkZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxsaSA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzU2VsZWN0ZWR9XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdsZWF2ZS5wcmV2ZW50ID0gXCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ292ZXIucHJldmVudC5zdG9wPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJvcC5wcmV2ZW50LnN0b3AgPSBcIm1vdmVNZWRpYVRvRm9sZGVyKG1vZGVsLCAkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIntmb2xkZXJob3ZlcmVkOiBpc0hvdmVyZWQgLCB0cmVlcm9vdDogbGV2ZWwgPT0gMX1cIiA+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgOnN0eWxlPVwieyBwYWRkaW5nJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwifTpwYWRkaW5nICsgJ3B4JyB9XCIgdi1vbjpjbGljaz1cInNlbGVjdFwiICBkcmFnZ2FibGU9XCJmYWxzZVwiIGNsYXNzPVwiZm9sZGVyLW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVcIiBjbGFzcz1cImV4cGFuZFwiIDpjbGFzcz1cIntvcGVuZWQ6IG9wZW4sIGNsb3NlZDogIW9wZW4sIGVtcHR5OiBlbXB0eX1cIj48aSB2LWlmPVwib3BlblwiIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwifVwiPjwvaT48L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9sZGVyLW5hbWUgbWwtMlwiPnt7bW9kZWwubmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmb2xkZXItYWN0aW9uc1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHYtY2xvYWsgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHYtb246Y2xpY2s9XCJjcmVhdGVGb2xkZXJcIiB2LWlmPVwiaXNTZWxlY3RlZCB8fCBpc1Jvb3RcIj48aSBjbGFzcz1cImZhcyBmYS1wbHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHYtY2xvYWsgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHYtb246Y2xpY2s9XCJkZWxldGVGb2xkZXJcIiB2LWlmPVwiaXNTZWxlY3RlZCAmJiAhaXNSb290XCI+PGkgY2xhc3M9XCJmYXMgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG9sIHYtc2hvdz1cIm9wZW5cIj5cclxuICAgICAgICAgICAgICAgIDxmb2xkZXIgdi1mb3I9XCJmb2xkZXIgaW4gY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZm9sZGVyLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWw9XCJmb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQtaW4tbWVkaWEtYXBwPVwic2VsZWN0ZWRJbk1lZGlhQXBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZvbGRlcj5cclxuICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgc2VsZWN0ZWRJbk1lZGlhQXBwOiBPYmplY3QsXHJcbiAgICAgICAgbGV2ZWw6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsIC8vIG5vdCBpbml0aWFsaXplZCBzdGF0ZSAoZm9yIGxhenktbG9hZGluZylcclxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpc0hvdmVyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAubmFtZSA9PSB0aGlzLm1vZGVsLm5hbWUpICYmICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5wYXRoID09IHRoaXMubW9kZWwucGF0aCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1Jvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucGF0aCA9PT0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuaXNSb290ID09IGZhbHNlKSAmJiAodGhpcy5pc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcigpKSl7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcgPSB0aGlzLmxldmVsIDwgMyA/ICAxNiA6IDE2ICsgKHRoaXMubGV2ZWwgKiA4KTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlcicsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYuY2hpbGRyZW4gJiYgc2VsZi5jaGlsZHJlbi5pbmRleE9mKGZvbGRlcilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJEZWxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignYWRkRm9sZGVyJywgZnVuY3Rpb24gKHRhcmdldCwgZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLm1vZGVsID09IHRhcmdldCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnYmVmb3JlRm9sZGVyQWRkZWQnLCBzZWxmLm1vZGVsKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoaWxkcmVuICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5wdXNoKGZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyLnBhcmVudCA9IHNlbGYubW9kZWw7XHJcbiAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ2ZvbGRlckFkZGVkJywgZm9sZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBpc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgd2hpbGUgKHBhcmVudEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEZvbGRlci5wYXRoID09IHRoaXMubW9kZWwucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXJlbnRGb2xkZXIgPSBwYXJlbnRGb2xkZXIucGFyZW50O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiAmJiAhdGhpcy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc2VsZWN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyU2VsZWN0ZWQnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4oKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNyZWF0ZUZvbGRlcjogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnY3JlYXRlRm9sZGVyUmVxdWVzdGVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxvYWRDaGlsZHJlbjogZnVuY3Rpb24gKCkgeyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogJCgnI2dldEZvbGRlcnNVcmwnKS52YWwoKSArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoc2VsZi5tb2RlbC5wYXRoKSxcclxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4gPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjLnBhcmVudCA9IHNlbGYubW9kZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGVtdHB5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdPdmVyOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBoYW5kbGVEcmFnTGVhdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3ZlTWVkaWFUb0ZvbGRlcjogZnVuY3Rpb24gKGZvbGRlciwgZSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZWxmLmlzSG92ZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgdmFyIG1lZGlhTmFtZXMgPSBKU09OLnBhcnNlKGUuZGF0YVRyYW5zZmVyLmdldERhdGEoJ21lZGlhTmFtZXMnKSk7IFxyXG5cclxuICAgICAgICAgICAgaWYgKG1lZGlhTmFtZXMubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgc291cmNlRm9sZGVyID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnc291cmNlRm9sZGVyJyk7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXRGb2xkZXIgPSBmb2xkZXIucGF0aDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VGb2xkZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXIgPSAncm9vdCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRGb2xkZXIgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRGb2xkZXIgPSAncm9vdCc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VGb2xkZXIgPT09IHRhcmdldEZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoJCgnI3NhbWVGb2xkZXJNZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25maXJtRGlhbG9nKHsuLi4kKFwiI21vdmVNZWRpYVwiKS5kYXRhKCksIGNhbGxiYWNrOiBmdW5jdGlvbiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNtb3ZlTWVkaWFMaXN0VXJsJykudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzOiBtZWRpYU5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRm9sZGVyOiBzb3VyY2VGb2xkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRGb2xkZXI6IHRhcmdldEZvbGRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhTGlzdE1vdmVkJyk7IC8vIE1lZGlhQXBwIHdpbGwgbGlzdGVuIHRvIHRoaXMsIGFuZCB0aGVuIGl0IHdpbGwgcmVsb2FkIHBhZ2Ugc28gdGhlIG1vdmVkIG1lZGlhcyB3b24ndCBiZSB0aGVyZSBhbnltb3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnLCBlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLWdyaWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdtZWRpYS1pdGVtcy1ncmlkJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8b2wgY2xhc3M9XCJyb3cgbWVkaWEtaXRlbXMtZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEubmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtaXRlbSBtZWRpYS1jb250YWluZXItbWFpbi1saXN0LWl0ZW0gY2FyZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgOnN0eWxlPVwie3dpZHRoOiB0aHVtYlNpemUgKyAyICsgJ3B4J31cIlxyXG4gICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsncHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArJ3B4JywgbWF4V2lkdGg6IHRodW1iU2l6ZSArJ3B4J31cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSB2LWVsc2UgY2xhc3M9XCJmYSBmYS1maWxlLW8gZmEtbGdcIiA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1pdGVtLXRpdGxlIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1yaWdodCBpbmxpbmUtbWVkaWEtYnV0dG9uIGVkaXQtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwicmVuYW1lTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYSBmYS1lZGl0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtcmlnaHQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1yaWdodCBpbmxpbmUtbWVkaWEtYnV0dG9uIHZpZXctYnV0dG9uXCJcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGxcIiA6dGl0bGU9XCJtZWRpYS5uYW1lXCI+e3sgbWVkaWEubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvb2w+XHJcbiAgICAgICAgYCxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIGZpbHRlcmVkTWVkaWFJdGVtczogQXJyYXksXHJcbiAgICAgICAgc2VsZWN0ZWRNZWRpYXM6IEFycmF5LFxyXG4gICAgICAgIHRodW1iU2l6ZTogTnVtYmVyXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5lZGl0QnV0dG9uID0gJCgnI3QtZWRpdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGVsZXRlQnV0dG9uID0gJCgnI3QtZGVsZXRlLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBpc01lZGlhU2VsZWN0ZWQ6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcy5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnVybC50b0xvd2VyQ2FzZSgpID09PSBtZWRpYS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZE1lZGlhVXJsOiBmdW5jdGlvbiAodXJsLCB0aHVtYlNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybCArICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArICd3aWR0aD0nICsgdGh1bWJTaXplICsgJyZoZWlnaHQ9JyArIHRodW1iU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZVNlbGVjdGlvbk9mTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIG1lZGlhLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8bWVkaWEtaXRlbXMtdGFibGU+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdtZWRpYS1pdGVtcy10YWJsZScsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbWVkaWEtaXRlbXMtdGFibGUgbS0wXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cImhlYWRlci1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiBjbGFzcz1cInRodW1ibmFpbC1jb2x1bW5cIj57eyBULmltYWdlSGVhZGVyIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5uYW1lSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cIm5hbWVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ2xhc3RNb2RpZnknKVwiPiBcclxuICAgICAgICAgICAgICAgICAgICAgICB7eyBULmxhc3RNb2RpZnlIZWFkZXIgfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cImxhc3RNb2RpZnlcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPiBcclxuICAgICAgICAgICAgICAgICAgICA8L3RoPiBcclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnc2l6ZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBULnNpemVIZWFkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3J0LWluZGljYXRvciBjb2xuYW1lPVwic2l6ZVwiIDpzZWxlY3RlZGNvbG5hbWU9XCJzb3J0QnlcIiA6YXNjPVwic29ydEFzY1wiPjwvc29ydC1pbmRpY2F0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdtaW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb25hbC1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC50eXBlSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cIm1pbWVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCJtZWRpYSBpbiBmaWx0ZXJlZE1lZGlhSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwie3NlbGVjdGVkOiBpc01lZGlhU2VsZWN0ZWQobWVkaWEpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYShtZWRpYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiB2LW9uOmRyYWdzdGFydD1cImRyYWdTdGFydChtZWRpYSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cIm1lZGlhLm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgdi1pZj1cIm1lZGlhLm1pbWUuc3RhcnRzV2l0aCgnaW1hZ2UnKVwiIGRyYWdnYWJsZT1cImZhbHNlXCIgOnNyYz1cImJ1aWxkTWVkaWFVcmwobWVkaWEudXJsLCB0aHVtYlNpemUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIGNsYXNzPVwiZmEgZmEtZmlsZS1vIGZhLWxnXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1uYW1lLWNlbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFrLXdvcmRcIj4ge3sgbWVkaWEubmFtZSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbSBtci0xIGVkaXQtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwicmVuYW1lTWVkaWEobWVkaWEpXCI+IHt7IFQuZWRpdEJ1dHRvbiB9fSA8L2EgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbSBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+IHt7IFQuZGVsZXRlQnV0dG9uIH19IDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHZpZXctYnV0dG9uXCI+IHt7IFQudmlld0J1dHRvbiB9fSA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2xcIj4ge3sgcHJpbnREYXRlVGltZShtZWRpYS5sYXN0TW9kaWZ5KSB9fSA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sIG9wdGlvbmFsLWNvbFwiPiB7eyBpc05hTihtZWRpYS5zaXplKT8gMCA6IE1hdGgucm91bmQobWVkaWEuc2l6ZSAvIDEwMjQpIH19IEtCPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbCBvcHRpb25hbC1jb2xcIj57eyBtZWRpYS5taW1lIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIGAsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBzb3J0Qnk6IFN0cmluZyxcclxuICAgICAgICBzb3J0QXNjOiBCb29sZWFuLFxyXG4gICAgICAgIGZpbHRlcmVkTWVkaWFJdGVtczogQXJyYXksXHJcbiAgICAgICAgc2VsZWN0ZWRNZWRpYXM6IEFycmF5LFxyXG4gICAgICAgIHRodW1iU2l6ZTogTnVtYmVyXHJcbiAgICB9LFxyXG4gICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLlQuaW1hZ2VIZWFkZXIgPSAkKCcjdC1pbWFnZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQubmFtZUhlYWRlciA9ICQoJyN0LW5hbWUtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmxhc3RNb2RpZnlIZWFkZXIgPSAkKCcjdC1sYXN0TW9kaWZ5LWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5zaXplSGVhZGVyID0gJCgnI3Qtc2l6ZS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQudHlwZUhlYWRlciA9ICQoJyN0LXR5cGUtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmVkaXRCdXR0b24gPSAkKCcjdC1lZGl0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kZWxldGVCdXR0b24gPSAkKCcjdC1kZWxldGUtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnZpZXdCdXR0b24gPSAkKCcjdC12aWV3LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBpc01lZGlhU2VsZWN0ZWQ6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zZWxlY3RlZE1lZGlhcy5zb21lKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnVybC50b0xvd2VyQ2FzZSgpID09PSBtZWRpYS51cmwudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZE1lZGlhVXJsOiBmdW5jdGlvbiAodXJsLCB0aHVtYlNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybCArICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArICd3aWR0aD0nICsgdGh1bWJTaXplICsgJyZoZWlnaHQ9JyArIHRodW1iU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNoYW5nZVNvcnQ6IGZ1bmN0aW9uIChuZXdTb3J0KSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnc29ydENoYW5nZVJlcXVlc3RlZCcsIG5ld1NvcnQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFUb2dnbGVSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICByZW5hbWVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVuYW1lTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnZGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkcmFnU3RhcnQ6IGZ1bmN0aW9uIChtZWRpYSwgZSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhRHJhZ1N0YXJ0UmVxdWVzdGVkJywgbWVkaWEsIGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJpbnREYXRlVGltZTogZnVuY3Rpb24gKGRhdGVtaWxsaXMpe1xyXG4gICAgICAgICAgICB2YXIgZCA9IG5ldyBEYXRlKGRhdGVtaWxsaXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZC50b0xvY2FsZVN0cmluZygpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIFRoaXMgY29tcG9uZW50IHJlY2VpdmVzIGEgbGlzdCBvZiBhbGwgdGhlIGl0ZW1zLCB1bnBhZ2VkLlxyXG4vLyBBcyB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZXIsIGl0IHJhaXNlcyBldmVudHMgd2l0aCB0aGUgaXRlbXMgaW4gdGhlIGN1cnJlbnQgcGFnZS5cclxuLy8gSXQncyB0aGUgcGFyZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gbGlzdGVuIGZvciB0aGVzZSBldmVudHMgYW5kIGRpc3BsYXkgdGhlIHJlY2VpdmVkIGl0ZW1zXHJcbi8vIDxwYWdlcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3BhZ2VyJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXY+XHJcbiAgICAgICAgPG5hdiBpZD1cIm1lZGlhLXBhZ2VyXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiIGFyaWEtbGFiZWw9XCJQYWdpbmF0aW9uIE5hdmlnYXRpb25cIiByb2xlPVwibmF2aWdhdGlvblwiIDpkYXRhLWNvbXB1dGVkLXRyaWdnZXI9XCJpdGVtc0luQ3VycmVudFBhZ2UubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInBhZ2luYXRpb24gcGFnaW5hdGlvbi1zbSBtLTBcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtZWRpYS1maXJzdC1idXR0b25cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9GaXJzdH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgOnRhYmluZGV4PVwiY2FuRG9GaXJzdCA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJnb0ZpcnN0XCI+e3sgVC5wYWdlckZpcnN0QnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb1ByZXZ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvUHJldiA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJwcmV2aW91c1wiPnt7IFQucGFnZXJQcmV2aW91c0J1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgdi1pZj1cImxpbmsgIT09IC0xXCIgY2xhc3M9XCJwYWdlLWl0ZW0gcGFnZS1udW1iZXJcIiAgOmNsYXNzPVwie2FjdGl2ZSA6IGN1cnJlbnQgPT0gbGluayAtIDF9XCIgdi1mb3I9XCJsaW5rIGluIHBhZ2VMaW5rc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiB2LW9uOmNsaWNrPVwiZ29UbyhsaW5rIC0gMSlcIiA6YXJpYS1sYWJlbD1cIidHb3RvIFBhZ2UnICsgbGlua1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xpbmt9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiY3VycmVudCA9PSBsaW5rIC0xXCIgY2xhc3M9XCJzci1vbmx5XCI+KGN1cnJlbnQpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9OZXh0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb05leHQgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwibmV4dFwiPnt7IFQucGFnZXJOZXh0QnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtZWRpYS1sYXN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0xhc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvTGFzdCA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJnb0xhc3RcIj57eyBULnBhZ2VyTGFzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWwtNCBwYWdlLXNpemUtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIHBhZ2Utc2l6ZS1sYWJlbFwiPnt7IFQucGFnZXJQYWdlU2l6ZUxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cInBhZ2UtbGlua1wiIHYtbW9kZWw9XCJwYWdlU2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIm9wdGlvbiBpbiBwYWdlU2l6ZU9wdGlvbnNcIiB2LWJpbmQ6dmFsdWU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDxuYXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtbC00IHBhZ2UtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+e3sgVC5wYWdlclBhZ2VMYWJlbCB9fSB7e2N1cnJlbnQgKyAxfX0ve3t0b3RhbFBhZ2VzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1sLTQgdG90YWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+IHt7IFQucGFnZXJUb3RhbExhYmVsIH19IHt7dG90YWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IEFycmF5XHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDMwLCA1MCwgMTAwXSxcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyRmlyc3RCdXR0b24gPSAkKCcjdC1wYWdlci1maXJzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQcmV2aW91c0J1dHRvbiA9ICQoJyN0LXBhZ2VyLXByZXZpb3VzLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlck5leHRCdXR0b24gPSAkKCcjdC1wYWdlci1uZXh0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckxhc3RCdXR0b24gPSAkKCcjdC1wYWdlci1sYXN0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclBhZ2VTaXplTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLXNpemUtbGFiZWwnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyVG90YWxMYWJlbCA9ICQoJyN0LXBhZ2VyLXRvdGFsLWxhYmVsJykudmFsKCk7ICAgICAgICBcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgKyAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50IC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvRmlyc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnRvdGFsUGFnZXMgLSAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ29UbzogZnVuY3Rpb24gKHRhcmdldFBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGFyZ2V0UGFnZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICB0b3RhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJdGVtcyA/IHRoaXMuc291cmNlSXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvdGFsUGFnZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhZ2VzID4gMCA/IHBhZ2VzIDogMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzTGFzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCArIDEgPj0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNGaXJzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCA9PT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvUHJldjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0ZpcnN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHRoaXMgY29tcHV0ZWQgaXMgb25seSB0byBoYXZlIGEgY2VudHJhbCBwbGFjZSB3aGVyZSB3ZSBkZXRlY3QgY2hhbmdlcyBhbmQgbGV2ZXJhZ2UgVnVlIEpTIHJlYWN0aXZpdHkgdG8gcmFpc2Ugb3VyIGV2ZW50LlxyXG4gICAgICAgIC8vIFRoYXQgZXZlbnQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgbWVkaWEgYXBwIHRvIGRpc3BsYXkgdGhlIGl0ZW1zIGluIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIHRoaXMgbG9naWMgd2lsbCBub3QgcnVuIGlmIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBpcyBub3QgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIFdlIHVzZSBhIGR1bW15IFwiZGF0YS1jb21wdXRlZC10cmlnZ2VyXCIgYXR0cmlidXRlIGZvciB0aGF0LlxyXG4gICAgICAgIGl0ZW1zSW5DdXJyZW50UGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50O1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zb3VyY2VJdGVtcy5zbGljZShzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdwYWdlckV2ZW50JywgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2VMaW5rczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpbmtzID0gW107XHJcblxyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMuY3VycmVudCArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYmVmb3JlIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAwID8gdGhpcy5jdXJyZW50IDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmVmb3JlQmVmb3JlQ3VycmVudCA9IHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgLSAxIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQmVmb3JlQ3VycmVudCk7XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYWZ0ZXIgY3VycmVudFxyXG4gICAgICAgICAgICB2YXIgYWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMSA/IHRoaXMuY3VycmVudCArIDIgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFmdGVyQWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMiA/IHRoaXMuY3VycmVudCArIDMgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckFmdGVyQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsgLy8gcmVzZXR0aW5nIGN1cnJlbnQgcGFnZSBhZnRlciByZWNlaXZpbmcgYSBuZXcgbGlzdCBvZiB1bnBhZ2VkIGl0ZW1zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxzb3J0LWluZGljYXRvcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3NvcnRJbmRpY2F0b3InLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgdi1zaG93PVwiaXNBY3RpdmVcIiBjbGFzcz1cInNvcnQtaW5kaWNhdG9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImFzY1wiPjxpIGNsYXNzPVwic21hbGwgZmEgZmEtY2hldnJvbi11cFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tZG93blwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIHNlbGVjdGVkY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIGFzYzogQm9vbGVhblxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbmFtZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuc2VsZWN0ZWRjb2xuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZUF0dGFjaGVkTWVkaWFGaWVsZChlbCwgaWRPZlVwbG9hZEJ1dHRvbiwgdXBsb2FkQWN0aW9uLCBtZWRpYUl0ZW1VcmwsIGFsbG93TXVsdGlwbGUsIGFsbG93TWVkaWFUZXh0LCBhbGxvd0FuY2hvcnMsIHRlbXBVcGxvYWRGb2xkZXIpIHtcclxuXHJcbiAgICB2YXIgdGFyZ2V0ID0gJChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgkKGVsKS5kYXRhKCdmb3InKSkpO1xyXG4gICAgdmFyIGluaXRpYWxQYXRocyA9IHRhcmdldC5kYXRhKFwiaW5pdFwiKTtcclxuXHJcbiAgICB2YXIgbWVkaWFGaWVsZEVkaXRvciA9ICQoZWwpO1xyXG4gICAgdmFyIGlkcHJlZml4ID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKFwiaWRcIik7XHJcbiAgICB2YXIgbWVkaWFGaWVsZEFwcDtcclxuXHJcbiAgICBtZWRpYUZpZWxkQXBwcy5wdXNoKG1lZGlhRmllbGRBcHAgPSBuZXcgVnVlKHtcclxuICAgICAgICBlbDogbWVkaWFGaWVsZEVkaXRvci5nZXQoMCksXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgc2VsZWN0ZWRNZWRpYTogbnVsbCxcclxuICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBpZFByZWZpeDogaWRwcmVmaXgsXHJcbiAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNZWRpYVRleHQ6IGFsbG93TWVkaWFUZXh0LFxyXG4gICAgICAgICAgICBiYWNrdXBNZWRpYVRleHQ6ICcnLFxyXG4gICAgICAgICAgICBhbGxvd0FuY2hvcnM6IGFsbG93QW5jaG9ycyxcclxuICAgICAgICAgICAgYmFja3VwQW5jaG9yOiBudWxsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJykpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgcGF0aHM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYVBhdGhzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShpbml0aWFsUGF0aHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5tZWRpYVBhdGggPT09ICdub3QtZm91bmQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFQYXRocy5wdXNoKHsgcGF0aDogeC5tZWRpYVBhdGgsIGlzUmVtb3ZlZDogeC5pc1JlbW92ZWQsIGlzTmV3OiB4LmlzTmV3LCBtZWRpYVRleHQ6IHgubWVkaWFUZXh0LCBhbmNob3I6IHguYW5jaG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZWRpYVBhdGhzKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSB2YWx1ZXMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hbCA9ICQuRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICcgJyArIHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJycsIGFuY2hvcjogeC5hbmNob3IgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTsgLy8gQmVjYXVzZSBhIHVuaXF1ZSBrZXkgaXMgcmVxdWlyZWQgYnkgVnVlIG9uIHYtZm9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lZGlhVGV4dCA9IHgubWVkaWFUZXh0OyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuYW5jaG9yID0geC5hbmNob3I7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuc3BsaWNlKGksIDEsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMC41LCB5OiAwLjUgfSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hbC5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbGVTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkTWVkaWEuc2l6ZSAvIDEwMjQpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5BZGRNZWRpYTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG5vblJlbW92ZWRNZWRpYUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubWVkaWFJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZWRpYUl0ZW1zW2ldLmlzUmVtb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBub25SZW1vdmVkTWVkaWFJdGVtcy5wdXNoKHRoaXMubWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBub25SZW1vdmVkTWVkaWFJdGVtcy5sZW5ndGggPT09IDAgfHwgbm9uUmVtb3ZlZE1lZGlhSXRlbXMubGVuZ3RoID4gMCAmJiBhbGxvd011bHRpcGxlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTIwIDogMjQwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5wYXRocyA9IGluaXRpYWxQYXRocztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdE1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSAnIycgKyBpZE9mVXBsb2FkQnV0dG9uO1xyXG4gICAgICAgICAgICB2YXIgZWRpdG9ySWQgPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoJ2lkJyk7XHJcblxyXG4gICAgICAgICAgICAkKHNlbGVjdG9yKS5maWxldXBsb2FkKHtcclxuICAgICAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IDIwLFxyXG4gICAgICAgICAgICAgICAgZHJvcFpvbmU6ICQoJyMnICsgZWRpdG9ySWQpLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICAgICAgICAgIHVybDogdXBsb2FkQWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGRhdGEuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXNbaV0udXBsb2FkTmFtZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFVuaXF1ZUlkKCkgKyBkYXRhLmZpbGVzW2ldLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc3VibWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgYW50aUZvcmdlcnlUb2tlbiA9ICQoXCJpbnB1dFtuYW1lPV9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuXVwiKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiB0ZW1wVXBsb2FkRm9sZGVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJywgdmFsdWU6IGFudGlGb3JnZXJ5VG9rZW4gfVxyXG4gICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWVkaWFJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvcm1zZyA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXN1bHQuZmlsZXNbaV0uaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBlcnJvciBpcyBkZWZpbmVkIHByb2JhYmx5IHRoZSBmaWxlIHR5cGUgaXMgbm90IGFsbG93ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSB1bmRlZmluZWQgfHwgZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgPT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWVkaWFJdGVtcy5wdXNoKGRhdGEucmVzdWx0LmZpbGVzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcm1zZyArPSBkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ybXNnICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KGVycm9ybXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdNZWRpYUl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3TWVkaWFJdGVtcy5sZW5ndGggPiAxICYmIGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKG5ld01lZGlhSXRlbXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Igb24gdXBsb2FkISEnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhqcVhIUik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGV4dFN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3JUaHJvd24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgc2VsZWN0TWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGdldFVuaXF1ZUlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0ge307XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHRoaXMubWVkaWFJdGVtc1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQuaXNSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzLm1lZGlhSXRlbXMuc3BsaWNlKFtpbmRleF0sIDEsIHJlbW92ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVtb3ZlIGJ1dHRvbiBjYW4gYWxzbyByZW1vdmUgYSB1bmlxdWUgbWVkaWEgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0aGlzLm1lZGlhSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmlzUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxLCByZW1vdmVkKTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEgPSBudWxsO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TWVkaWFUZXh0TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKS5tb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0ID0gdGhpcy5iYWNrdXBNZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sIFxyXG4gICAgICAgICAgICBzaG93QW5jaG9yTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzLiRyZWZzLmFuY2hvcmluZ01vZGFsKS5tb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gQ2F1c2UgYSByZWZyZXNoIHRvIHJlY2FsYyBoZWlnaHRzLlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmFja3VwQW5jaG9yID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjYW5jZWxBbmNob3JpbmdNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpLm1vZGFsKCdoaWRlJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0gdGhpcy5iYWNrdXBBbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7IHg6IDAuNSwgeTogMC41IH07XHJcbiAgICAgICAgICAgIH0sIFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA8IDE3KSB7IC8vIEFkanVzdCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE3O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSA4OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMTUpIHsgLy8gQWRqdXN0bWVudCBzbyB0aGUgdGFyZ2V0IGRvZXNuJ3Qgc2hvdyBvdXRzaWRlIGltYWdlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IDE1O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyA1OyAvLyBBZGp1c3QgdG8gaGl0IHRoZSBtb3VzZSBwb2ludGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gKyAncHgnO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZXZlbnQub2Zmc2V0WCAvIGltYWdlLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgICAgICAgICBcclxuICAgICAgICAgICAgYWRkTWVkaWFGaWxlczogZnVuY3Rpb24gKGZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGZpbGVzLmxlbmd0aCA+IDEpICYmIChhbGxvd011bHRpcGxlID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5wdXNoKGZpbGVzWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zID0gbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLmNvbmNhdChmaWxlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyBcclxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZVNlbGVjdGVkIHdhcyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIG1lZGlhIHdhcyBzZXQuXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZVNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICBtZWRpYUl0ZW1zOiB7XHJcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFuZGxlciAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBwcmV2aWV3IHJlbmRlcmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyAkKGRvY3VtZW50KS50cmlnZ2VyKCdjb250ZW50cHJldmlldzpyZW5kZXInKTsgfSwgMTAwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG4iLCJmdW5jdGlvbiBpbml0aWFsaXplTWVkaWFGaWVsZChlbCwgbW9kYWxCb2R5RWxlbWVudCwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzKSB7XHJcblxyXG4gICAgdmFyIHRhcmdldCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJChlbCkuZGF0YSgnZm9yJykpKTtcclxuICAgIHZhciBpbml0aWFsUGF0aHMgPSB0YXJnZXQuZGF0YShcImluaXRcIik7XHJcblxyXG4gICAgdmFyIG1lZGlhRmllbGRFZGl0b3IgPSAkKGVsKTtcclxuICAgIHZhciBpZHByZWZpeCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cihcImlkXCIpO1xyXG4gICAgdmFyIG1lZGlhRmllbGRBcHA7XHJcblxyXG4gICAgbWVkaWFGaWVsZEFwcHMucHVzaChtZWRpYUZpZWxkQXBwID0gbmV3IFZ1ZSh7XHJcbiAgICAgICAgZWw6IG1lZGlhRmllbGRFZGl0b3IuZ2V0KDApLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczogW10sXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWE6IG51bGwsXHJcbiAgICAgICAgICAgIHNtYWxsVGh1bWJzOiBmYWxzZSxcclxuICAgICAgICAgICAgaWRQcmVmaXg6IGlkcHJlZml4LFxyXG4gICAgICAgICAgICBpbml0aWFsaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TWVkaWFUZXh0OiBhbGxvd01lZGlhVGV4dCxcclxuICAgICAgICAgICAgYmFja3VwTWVkaWFUZXh0OiAnJyxcclxuICAgICAgICAgICAgYWxsb3dBbmNob3JzOiBhbGxvd0FuY2hvcnMsXHJcbiAgICAgICAgICAgIGJhY2t1cEFuY2hvcjogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFBhdGhzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubWVkaWFQYXRoID09PSAnbm90LWZvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMucHVzaCh7IHBhdGg6IHgubWVkaWFQYXRoLCBtZWRpYVRleHQ6IHgubWVkaWFUZXh0LCBhbmNob3I6IHguYW5jaG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZWRpYVBhdGhzKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSB2YWx1ZXMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hbCA9ICQuRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICcgJyArIHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJycgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZWRpYVRleHQgPSB4Lm1lZGlhVGV4dDsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFuY2hvciA9IHguYW5jaG9yOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMCwgeTogMCB9IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID4gMCAmJiBhbGxvd011bHRpcGxlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTIwIDogMjQwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5wYXRocyA9IGluaXRpYWxQYXRocztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdE1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignZmlsZXNVcGxvYWRlZCcsIGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5hZGRNZWRpYUZpbGVzKGZpbGVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FuQWRkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmRldGFjaCgpLmFwcGVuZFRvKCQobW9kYWxCb2R5RWxlbWVudCkuZmluZCgnLm1vZGFsLWJvZHknKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gJChtb2RhbEJvZHlFbGVtZW50KS5tb2RhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQobW9kYWxCb2R5RWxlbWVudCkuZmluZCgnLm1lZGlhRmllbGRTZWxlY3RCdXR0b24nKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRNZWRpYUZpbGVzKG1lZGlhQXBwLnNlbGVjdGVkTWVkaWFzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdGhlIGluY2x1ZGVkIG1lZGlhcyB0byBiZSBzdGlsbCBzZWxlY3RlZCB0aGUgbmV4dCB0aW1lIHdlIG9wZW4gdGhlIG1vZGFsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpLm1vZGFsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cE1lZGlhVGV4dCA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbE1lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcy4kcmVmcy5tZWRpYVRleHRNb2RhbCkubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCkubW9kYWwoKTtcclxuICAgICAgICAgICAgICAgIC8vIENhdXNlIGEgcmVmcmVzaCB0byByZWNhbGMgaGVpZ2h0cy5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCxcclxuICAgICAgICAgICAgICAgICAgeTogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cEFuY2hvciA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3I7XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNhbmNlbEFuY2hvcmluZ01vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCkubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB0aGlzLmJhY2t1cEFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHsgeDogMC41LCB5OiAwLjUgfTtcclxuICAgICAgICAgICAgfSwgIFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbmNob3JJY29uID0gTWF0aC5yb3VuZCh0aGlzLiRyZWZzLm1vZGFsQm9keS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1tZWRpYS1hbmNob3InKS5jbGllbnRXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoTnVtYmVyLmlzSW50ZWdlcihhbmNob3JJY29uKSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSBhbmNob3JJY29uLzI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgXHJcbiAgICAgICAgICAgIGFkZE1lZGlhRmlsZXM6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChmaWxlcy5sZW5ndGggPiAxKSAmJiAoYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZW1vdmVTZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlbW92ZSBidXR0b24gY2FuIGFsc28gcmVtb3ZlIGEgdW5pcXVlIG1lZGlhIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyByZW1vdmVTZWxlY3RlZCB3YXMgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBtZWRpYSB3YXMgc2V0LlxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczoge1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIgKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgcHJldmlldyByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkudHJpZ2dlcignY29udGVudHByZXZpZXc6cmVuZGVyJyk7IH0sIDEwMCk7IFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgd2lsbCBhZGQgdGhlbXNlbHZlcyB0byB0aGlzIGFycmF5XHJcbnZhciBtZWRpYUZpZWxkQXBwcyA9IFtdO1xyXG4iLCIvLyA8bWVkaWEtZmllbGQtdGh1bWJzLWNvbnRhaW5lcj4gY29tcG9uZW50IFxyXG4vLyBkaWZmZXJlbnQgbWVkaWEgZmllbGQgZWRpdG9ycyBzaGFyZSB0aGlzIGNvbXBvbmVudCB0byBwcmVzZW50IHRoZSB0aHVtYnMuXHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhRmllbGRUaHVtYnNDb250YWluZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICA8ZGl2IDppZD1cImlkUHJlZml4ICsgXFwnX21lZGlhQ29udGFpbmVyTWFpblxcJ1wiIHYtY2xvYWs+XFxcclxuICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWFJdGVtcy5sZW5ndGggPCAxXCIgY2xhc3M9XCJjYXJkIHRleHQtY2VudGVyXCI+XFxcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9IFwiY2FyZC1ib2R5XCIgPlxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhpbnRcIj57e1Qubm9JbWFnZXN9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgPGRyYWdnYWJsZSA6bGlzdD1cIm1lZGlhSXRlbXNcIiB0YWc9XCJvbFwiIGNsYXNzPVwicm93IG1lZGlhLWl0ZW1zLWdyaWRcIiA+XFxcclxuICAgICAgICAgICAgPGxpIHYtZm9yPVwibWVkaWEgaW4gbWVkaWFJdGVtc1wiXFxcclxuICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS52dWVrZXlcIiBcXFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1saXN0LWl0ZW0gY2FyZFwiXFxcclxuICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogdGh1bWJTaXplICsgMiArIFxcJ3B4XFwnfVwiXFxcclxuICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogc2VsZWN0ZWRNZWRpYSA9PSBtZWRpYX1cIlxcXHJcbiAgICAgICAgICAgICAgICB2LW9uOmNsaWNrPVwic2VsZWN0TWVkaWEobWVkaWEpXCIgdi1pZj1cIiFtZWRpYS5pc1JlbW92ZWRcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cIm1lZGlhLm1lZGlhUGF0aCE9PSBcXCdub3QtZm91bmRcXCdcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCIgPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoXFwnaW1hZ2VcXCcpXCIgXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGF0YS1taW1lPVwibWVkaWEubWltZVwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInttYXhIZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnICwgbWF4V2lkdGg6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiLz5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIGNsYXNzPVwiZmEgZmEtZmlsZS1vIGZhLWxnXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsb2F0LXJpZ2h0IGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1vbjpjbGljay5zdG9wPVwic2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtcmlnaHQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGxcIiA6dGl0bGU9XCJtZWRpYS5tZWRpYVBhdGhcIj57eyBtZWRpYS5pc05ldyA/IG1lZGlhLm5hbWUuc3Vic3RyKDM2KSA6IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyIGZsZXgtY29sdW1uXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFuIHRleHQtZGFuZ2VyIGQtYmxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGwgZC1ibG9ja1wiPnt7IFQubWVkaWFOb3RGb3VuZCB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrIHRleHQtY2VudGVyXCI+e3sgVC5kaXNjYXJkV2FybmluZyB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtcmlnaHQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInNlbGVjdEFuZERlbGV0ZU1lZGlhKG1lZGlhKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lZGlhLWZpbGVuYW1lIGNhcmQtdGV4dCBzbWFsbCB0ZXh0LWRhbmdlclwiIDp0aXRsZT1cIm1lZGlhLm5hbWVcIj57eyBtZWRpYS5uYW1lIH19PC9zcGFuPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICA8L2xpPlxcXHJcbiAgICAgICAgIDwvZHJhZ2dhYmxlPlxcXHJcbiAgICAgICA8L2Rpdj5cXFxyXG4gICAgJyxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBUOiB7fVxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBtZWRpYUl0ZW1zOiBBcnJheSxcclxuICAgICAgICBzZWxlY3RlZE1lZGlhOiBPYmplY3QsXHJcbiAgICAgICAgdGh1bWJTaXplOiBOdW1iZXIsXHJcbiAgICAgICAgaWRQcmVmaXg6IFN0cmluZ1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyByZXRyaWV2aW5nIGxvY2FsaXplZCBzdHJpbmdzIGZyb20gdmlld1xyXG4gICAgICAgIHNlbGYuVC5tZWRpYU5vdEZvdW5kID0gJCgnI3QtbWVkaWEtbm90LWZvdW5kJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRpc2NhcmRXYXJuaW5nID0gJCgnI3QtZGlzY2FyZC13YXJuaW5nJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5vSW1hZ2VzID0gJCgnI3Qtbm8taW1hZ2VzJykudmFsKCk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJ1aWxkTWVkaWFVcmw6IGZ1bmN0aW9uICh1cmwsIHRodW1iU2l6ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgKHVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgJ3dpZHRoPScgKyB0aHVtYlNpemUgKyAnJmhlaWdodD0nICsgdGh1bWJTaXplO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiJdfQ== 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 9bf8b021de0..a188f91618d 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 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(){var e=this.slice||this.webkitSlice||this.mozSlice;return e.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(),m=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),m=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,m+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,m=d.limitMultiFileUploads,p=d.limitMultiFileUploadSize,h=d.limitMultiFileUploadSizeOverhead,f=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(r=[],n=[],o=0;op||m&&o+1-v>=m)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,f=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("beforeFolderAdded",(function(t){e.loadFolder(t)})),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(){return this.selectedFolder?$("#uploadFiles").val()+"?path="+encodeURIComponent(this.selectedFolder.path):null},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this;$.ajax({url:$("#getMediaItemsUrl").val()+"?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),$("#createFolderModal").modal("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;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){$("#renameMediaModal").modal("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"))}}):$("#renameMediaModal").modal("hide")}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}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=d,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=c.attr("id");$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),l.mediaItems.push(i[0]),l.initialized=!0):(l.mediaItems=l.mediaItems.concat(i),l.initialized=!0)):alert(n)},error:function(e,t,i){console.log("error on upload!!"),console.log(e),console.log(t),console.log(i)}})},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.$refs.mediaTextModal).modal(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){$(this.$refs.mediaTextModal).modal("hide"),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){$(this.$refs.anchoringModal).modal(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){$(this.$refs.anchoringModal).modal("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()),l.mediaItems.push(e[0]),l.initialized=!0):(l.mediaItems=l.mediaItems.concat(e),l.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){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");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},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").detach().appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=$(t).modal();$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.modal("hide"),!0}))}},showMediaTextModal:function(e){$(this.$refs.mediaTextModal).modal(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){$(this.$refs.mediaTextModal).modal("hide"),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){$(this.$refs.anchoringModal).modal(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){$(this.$refs.anchoringModal).modal("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(){$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),formData:function(){var e=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}})})),$(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&&(bus.$emit("beforeFolderAdded",e.model),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},mounted:function(){var e=this;$("#fileupload").bind("fileuploadprogress",(function(t,i){i.files[0].name===e.model.name&&(e.model.percentage=parseInt(i.loaded/i.total*100,10))})),$("#fileupload").bind("fileuploaddone",(function(t,i){i.files[0].name===e.model.name&&(i.result.files[0].error?e.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",e.model))})),$("#fileupload").bind("fileuploadfail",(function(t,i){i.files[0].name===e.model.name&&e.handleFailure(i.files[0].name,i.textStatus)}))},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}},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=this;$("#fileupload").bind("fileuploadadd",(function(t,i){i.files&&i.files.forEach((function(t){e.files.some((function(e){return e.name==t.name}))?console.error("A file with the same name is already on the queue:"+t.name):e.files.push({name:t.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(t){e.files.forEach((function(e,i,n){e.name==t.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(t){e.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 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(){var e=this.slice||this.webkitSlice||this.mozSlice;return e.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(),m=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),m=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,m+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,m=d.limitMultiFileUploads,p=d.limitMultiFileUploadSize,h=d.limitMultiFileUploadSizeOverhead,f=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(r=[],n=[],o=0;op||m&&o+1-v>=m)&&(r.push(c.slice(v,o+1)),(a=g.slice(v,o+1)).length||(a=g),n.push(a),v=o+1,f=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())}}})})),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object},mounted:function(){var e=this;$("#fileupload").bind("fileuploadprogress",(function(t,i){i.files[0].name===e.model.name&&(e.model.percentage=parseInt(i.loaded/i.total*100,10))})),$("#fileupload").bind("fileuploaddone",(function(t,i){i.files[0].name===e.model.name&&(i.result.files[0].error?e.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",e.model))})),$("#fileupload").bind("fileuploadfail",(function(t,i){i.files[0].name===e.model.name&&e.handleFailure(i.files[0].name,i.textStatus)}))},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}},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=this;$("#fileupload").bind("fileuploadadd",(function(t,i){i.files&&i.files.forEach((function(t){e.files.some((function(e){return e.name==t.name}))?console.error("A file with the same name is already on the queue:"+t.name):e.files.push({name:t.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(t){e.files.forEach((function(e,i,n){e.name==t.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(t){e.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("beforeFolderAdded",(function(t){e.loadFolder(t)})),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(){return this.selectedFolder?$("#uploadFiles").val()+"?path="+encodeURIComponent(this.selectedFolder.path):null},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this;$.ajax({url:$("#getMediaItemsUrl").val()+"?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),$("#createFolderModal").modal("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;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){$("#renameMediaModal").modal("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"))}}):$("#renameMediaModal").modal("hide")}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}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=d,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,r=c.attr("id");$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+r),dataType:"json",url:i,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var r=0;r1&&!1===a?(alert($("#onlyOneItemMessage").val()),l.mediaItems.push(i[0]),l.initialized=!0):(l.mediaItems=l.mediaItems.concat(i),l.initialized=!0)):alert(n)},error:function(e,t,i){console.log("error on upload!!"),console.log(e),console.log(t),console.log(i)}})},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.$refs.mediaTextModal).modal(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){$(this.$refs.mediaTextModal).modal("hide"),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){$(this.$refs.anchoringModal).modal(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){$(this.$refs.anchoringModal).modal("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()),l.mediaItems.push(e[0]),l.initialized=!0):(l.mediaItems=l.mediaItems.concat(e),l.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){var o,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");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},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").detach().appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=$(t).modal();$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.modal("hide"),!0}))}},showMediaTextModal:function(e){$(this.$refs.mediaTextModal).modal(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){$(this.$refs.mediaTextModal).modal("hide"),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){$(this.$refs.anchoringModal).modal(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){$(this.$refs.anchoringModal).modal("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(){$("#fileupload").fileupload({dropZone:$("#mediaApp"),limitConcurrentUploads:20,dataType:"json",url:$("#uploadFiles").val(),formData:function(){var e=$("input[name=__RequestVerificationToken]").val();return[{name:"path",value:mediaApp.selectedFolder.path},{name:"__RequestVerificationToken",value:e}]},done:function(e,t){$.each(t.result.files,(function(e,t){t.error||mediaApp.mediaItems.push(t)}))}})})),$(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&&(bus.$emit("beforeFolderAdded",e.model),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}}});