diff --git a/CHANGELOG.md b/CHANGELOG.md index 17a21726..3b113dfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Better support for array field key/value when either key or value is stored empty [#1972](https://github.com/getgrav/grav-plugin-admin/issues/1972) * Remember the open state of the sidebar [#1973](https://github.com/getgrav/grav-plugin-admin/issues/1973) * Upgraded node dependencies to latest version. Improved speed of JS compilation. + * Added modal to confirm updating Grav as well as cool down counter before enabling Update button [#1257](https://github.com/getgrav/grav-plugin-admin/issues/1257) 1. [](#bugfix) * Fixed Safari issue with new ACL picker field [#1955](https://github.com/getgrav/grav-plugin-admin/issues/1955) * Stop propagation of ACL add button in ACL picker [flex-objects#83](https://github.com/trilbymedia/grav-plugin-flex-objects/issues/83) diff --git a/languages/en.yaml b/languages/en.yaml index 6fd389e8..36d2082d 100644 --- a/languages/en.yaml +++ b/languages/en.yaml @@ -54,6 +54,7 @@ PLUGIN_ADMIN: MODAL_CHANGED_DETECTED_DESC: "You have unsaved changes. Are you sure you want to leave without saving?" MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: "Confirmation Required" MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: "Are you sure you want to delete this file? This action cannot be undone." + MODAL_UPDATE_GRAV_CONFIRMATION_REQUIRED_DESC: "You are about to upgrade Grav to the latest version available. Would you like to continue?" ADD_FILTERS: "Add Filters" SEARCH_PAGES: "Search Pages" VERSION: "Version" diff --git a/themes/grav/app/updates/index.js b/themes/grav/app/updates/index.js index 0c4e5985..31f5151e 100644 --- a/themes/grav/app/updates/index.js +++ b/themes/grav/app/updates/index.js @@ -1,9 +1,9 @@ import $ from 'jquery'; import unique from 'mout/array/unique'; import { config, translations } from 'grav-config'; -import formatBytes from '../utils/formatbytes'; import { Instance as gpm } from '../utils/gpm'; import Notifications from './notifications'; + import Feed from './feed'; import './check'; import './update'; @@ -13,6 +13,7 @@ export default class Updates { constructor(payload = {}) { this.setPayload(payload); this.task = `task${config.param_sep}`; + this.updateURL = ''; } setPayload(payload = {}) { @@ -47,7 +48,8 @@ export default class Updates { let bar = ''; if (!payload.isSymlink) { - bar += ``; + this.updateURL = `${config.base_url_relative}/update.json/${task}updategrav/admin-nonce${config.param_sep}${config.admin_nonce}`; + bar += ``; } else { bar += ``; } @@ -65,14 +67,22 @@ export default class Updates { element .addClass('grav') .html(`${bar}`) - .slideDown(150) + .slideDown(150, function() { + var c = 5; + var x = setInterval(function() { + c -= 1; + element.find('.pointer-events-none .cnt-down').text('(' + c + 's)'); + }, 1000); + + setTimeout(function() { + clearInterval(x); + element.find('.pointer-events-none .cnt-down').remove(); + element.find('.pointer-events-none').removeClass('pointer-events-none'); + }, 5000); + }) .parent('#messages').addClass('default-box-shadow'); } - $('#grav-update-button').on('click', function() { - $(this).html(`${translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT} ${formatBytes(payload.assets['grav-update'].size)}..`); - }); - return this; } diff --git a/themes/grav/app/updates/update.js b/themes/grav/app/updates/update.js index fa4da70d..851486a8 100644 --- a/themes/grav/app/updates/update.js +++ b/themes/grav/app/updates/update.js @@ -1,14 +1,17 @@ import $ from 'jquery'; +import { translations } from 'grav-config'; +import formatBytes from '../utils/formatbytes'; import request from '../utils/request'; +import { Instance as Update } from './index'; // Dashboard update and Grav update -$('body').on('click', '[data-maintenance-update]', function() { - let element = $(this); - let url = element.data('maintenanceUpdate'); +$(document).on('click.remodal', '[data-remodal-id="update-grav"] [data-remodal-action="confirm"]', () => { + const element = $('#grav-update-button'); + element.html(`${translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT} ${formatBytes(Update.payload.grav.assets['grav-update'].size)}..`); element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin'); - request(url, (response) => { + request(Update.updateURL, (response) => { if (response.type === 'updategrav') { $('[data-gpm-grav]').remove(); $('#footer .grav-version').html(response.version); diff --git a/themes/grav/css-compiled/nucleus.css b/themes/grav/css-compiled/nucleus.css index 1269450e..803d00c8 100644 --- a/themes/grav/css-compiled/nucleus.css +++ b/themes/grav/css-compiled/nucleus.css @@ -1,2 +1,3 @@ -*,::after,::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-webkit-viewport{width:device-width}@-moz-viewport{width:device-width}@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0;text-decoration:none}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:.65rem;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0}pre{overflow:auto}code,kbd,pre,samp{font-size:.9rem}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0;table-layout:fixed;width:100%}td,th,tr{vertical-align:middle}td,th{padding:.375rem 0}th{text-align:left}.container{width:75em;margin:0 auto;padding:0}@media only all and (min-width:60em) and (max-width:74.938em){.container{width:60em}}@media only all and (min-width:48em) and (max-width:59.938em){.container{width:48em}}@media only all and (min-width:30.063em) and (max-width:47.938em){.container{width:30em}}@media only all and (max-width:30em){.container{width:100%}}.grid{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row;-moz-flex-flow:row;flex-flow:row;list-style:none;margin:0;padding:0}@media only all and (max-width:47.938em){.grid{-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;flex-flow:row wrap}}.block{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}@media only all and (max-width:47.938em){.block{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 100%;-moz-flex:0 100%;-ms-flex:0 100%;flex:0 100%}}.content{margin:.625rem;padding:.938rem}@media only all and (max-width:47.938em){body [class*=size-]{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 100%;-moz-flex:0 100%;-ms-flex:0 100%;flex:0 100%}}.size-1-2{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 50%;-moz-flex:0 50%;-ms-flex:0 50%;flex:0 50%}.size-1-3{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 33.33333%;-moz-flex:0 33.33333%;-ms-flex:0 33.33333%;flex:0 33.33333%}.size-1-4{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 25%;-moz-flex:0 25%;-ms-flex:0 25%;flex:0 25%}.size-1-5{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 20%;-moz-flex:0 20%;-ms-flex:0 20%;flex:0 20%}.size-1-6{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 16.66667%;-moz-flex:0 16.66667%;-ms-flex:0 16.66667%;flex:0 16.66667%}.size-1-7{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 14.28571%;-moz-flex:0 14.28571%;-ms-flex:0 14.28571%;flex:0 14.28571%}.size-1-8{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 12.5%;-moz-flex:0 12.5%;-ms-flex:0 12.5%;flex:0 12.5%}.size-1-9{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 11.11111%;-moz-flex:0 11.11111%;-ms-flex:0 11.11111%;flex:0 11.11111%}.size-1-10{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 10%;-moz-flex:0 10%;-ms-flex:0 10%;flex:0 10%}.size-1-11{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 9.09091%;-moz-flex:0 9.09091%;-ms-flex:0 9.09091%;flex:0 9.09091%}.size-1-12{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 8.33333%;-moz-flex:0 8.33333%;-ms-flex:0 8.33333%;flex:0 8.33333%}@media only all and (min-width:48em) and (max-width:59.938em){.size-tablet-1-2{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 50%;-moz-flex:0 50%;-ms-flex:0 50%;flex:0 50%}.size-tablet-1-3{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 33.33333%;-moz-flex:0 33.33333%;-ms-flex:0 33.33333%;flex:0 33.33333%}.size-tablet-1-4{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 25%;-moz-flex:0 25%;-ms-flex:0 25%;flex:0 25%}.size-tablet-1-5{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 20%;-moz-flex:0 20%;-ms-flex:0 20%;flex:0 20%}.size-tablet-1-6{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 16.66667%;-moz-flex:0 16.66667%;-ms-flex:0 16.66667%;flex:0 16.66667%}.size-tablet-1-7{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 14.28571%;-moz-flex:0 14.28571%;-ms-flex:0 14.28571%;flex:0 14.28571%}.size-tablet-1-8{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 12.5%;-moz-flex:0 12.5%;-ms-flex:0 12.5%;flex:0 12.5%}.size-tablet-1-9{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 11.11111%;-moz-flex:0 11.11111%;-ms-flex:0 11.11111%;flex:0 11.11111%}.size-tablet-1-10{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 10%;-moz-flex:0 10%;-ms-flex:0 10%;flex:0 10%}.size-tablet-1-11{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 9.09091%;-moz-flex:0 9.09091%;-ms-flex:0 9.09091%;flex:0 9.09091%}.size-tablet-1-12{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 8.33333%;-moz-flex:0 8.33333%;-ms-flex:0 8.33333%;flex:0 8.33333%}}@media only all and (max-width:47.938em){@supports not (flex-wrap:wrap){.grid{display:block;-webkit-box-lines:inherit;-moz-box-lines:inherit;box-lines:inherit;-webkit-flex-wrap:inherit;-moz-flex-wrap:inherit;-ms-flex-wrap:inherit;flex-wrap:inherit}.block{display:block;-webkit-box-flex:inherit;-moz-box-flex:inherit;box-flex:inherit;-webkit-flex:inherit;-moz-flex:inherit;-ms-flex:inherit;flex:inherit}}}.first-block{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-block{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.fixed-blocks{-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;flex-flow:row wrap}.fixed-blocks .block{-webkit-box-flex:inherit;-moz-box-flex:inherit;box-flex:inherit;-webkit-flex:inherit;-moz-flex:inherit;-ms-flex:inherit;flex:inherit;width:25%}@media only all and (min-width:60em) and (max-width:74.938em){.fixed-blocks .block{width:33.33333%}}@media only all and (min-width:48em) and (max-width:59.938em){.fixed-blocks .block{width:50%}}@media only all and (max-width:47.938em){.fixed-blocks .block{width:100%}}@supports not (flex-wrap:wrap){.fixed-blocks{display:block;-webkit-flex-flow:inherit;-moz-flex-flow:inherit;flex-flow:inherit}}body{font-size:.9rem;line-height:1.5}h1,h2,h3,h4,h5,h6{margin:1.5rem 0 .75rem 0;text-rendering:optimizeLegibility}h1{font-size:3.1rem}h2{font-size:2.4rem}h3{font-size:2rem}h4{font-size:1.65rem}h5{font-size:1.25rem}h6{font-size:.75rem}p{margin:.75rem 0 1.5rem}ol,ul{margin-top:1.5rem;margin-bottom:1.5rem}ol ol,ol ul,ul ol,ul ul{margin-top:0;margin-bottom:0}blockquote{margin:1.5rem 0;padding:.5rem}blockquote p:last-child{margin:0}cite{display:block;font-size:.775rem}cite:before{content:"\2014 \0020"}pre{margin:1.5rem 0;padding:.938rem}code{vertical-align:bottom}small{font-size:.775rem}hr{border-left:none;border-right:none;border-top:none;margin:1.5rem 0}fieldset{border:0;padding:.938rem;margin:0 0 1.5rem 0}input,label,select{display:block}label{margin-bottom:.375rem}label.required:after{content:"*"}label abbr{display:none}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select[multiple=multiple],textarea{-webkit-transition:border-color;-moz-transition:border-color;transition:border-color;border-radius:.1875rem;padding:.375rem .375rem;width:100%}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select[multiple=multiple]:focus,textarea:focus{outline:0}textarea{resize:vertical}input[type=checkbox],input[type=radio]{display:inline;margin-right:.375rem}input[type=file]{width:100%}select{width:auto;max-width:100%;margin-bottom:1.5rem}button,input[type=submit]{cursor:pointer;user-select:none;vertical-align:middle;white-space:nowrap;border:inherit} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm51Y2xldXMvX2NvcmUuc2NzcyIsInZlbmRvci9ib3VyYm9uL2FkZG9ucy9fcHJlZml4ZXIuc2NzcyIsImNvbmZpZ3VyYXRpb24vbnVjbGV1cy9fdHlwb2dyYXBoeS5zY3NzIiwibnVjbGV1cy9fZmxleC5zY3NzIiwiY29uZmlndXJhdGlvbi9udWNsZXVzL19icmVha3BvaW50cy5zY3NzIiwibnVjbGV1cy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCJ2ZW5kb3IvYm91cmJvbi9jc3MzL19mbGV4LWJveC5zY3NzIiwiY29uZmlndXJhdGlvbi9udWNsZXVzL19sYXlvdXQuc2NzcyIsIm51Y2xldXMvX3R5cG9ncmFwaHkuc2NzcyIsIm51Y2xldXMvX2Zvcm1zLnNjc3MiLCJ2ZW5kb3IvYm91cmJvbi9mdW5jdGlvbnMvX3B4LXRvLXJlbS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEVBQWMsUUFBWCxTQ1NLLG1CRFJhLFdDYWIsZ0JEYmEsV0M0QmIsV0Q1QmEsV0FDcEIsa0JBRWlCLE1BQU0sYUFDeEIsZUFBZSxNQUFNLGFBQ3JCLGNBQWMsTUFBTSxhQUNwQixhQUFhLE1BQU0sYUFDbkIsVUFBVSxNQUFNLGFBRWhCLEtBQ0MsVUFBVyxLQUNYLHFCQUFzQixLQUN0Qix5QkFBMEIsS0FDMUIsS0FHQSxPQUFRLEVBQ1IsUUFHRCxNQUNBLFFBQ0EsV0FDQSxPQUNBLE9BQ0EsT0FDQSxPQUNBLEtBQ0EsSUFDQSxRQUNBLFFBQ0MsUUFBUyxNQUNULE1BR0QsT0FDQSxTQUNBLE1BQ0MsUUFBUyxhQUNULGVBQWdCLFNBQ2hCLHNCQUdBLFFBQVMsS0FDVCxPQUFRLEVBQ1IsU0FHRCxTQUNDLFFBQVMsS0FDVCxFQUdBLFdBQVksSUFDWixnQkFBaUIsS0FDakIsU0FHRCxRQUNDLFFBQVMsRUFDVCxZQUdBLGNBQWUsSUFBQSxPQUNmLEVBR0QsT0FDQyxZQUFhLElBQ2IsSUFHQSxXQUFZLE9BQ1osS0FHQSxXQUFZLEtBQ1osTUFBTyxLQUNQLElBR0QsSUFDQyxVQUFXLE9BQ1gsWUFBYSxFQUNiLFNBQVUsU0FDVixlQUFnQixTQUNoQixJQUdBLElBQUssTUFDTCxJQUdBLE9BQVEsT0FDUixJQUdBLE9BQVEsRUFDUixVQUFXLEtBQ1gsZUFHQSxTQUFVLE9BQ1YsT0FHQSxPQUFRLElBQUEsS0FDUixHQUdBLE9BQVEsRUFDUixJQUdBLFNBQVUsS0FDVixLQUdELElBQ0EsSUFDQSxLQUNDLFVFekhtQixNRjBIbkIsT0FHRCxNQUNBLFNBQ0EsT0FDQSxTQUNDLE1BQU8sUUFDUCxLQUFNLFFBQ04sT0FBUSxFQUNSLE9BR0EsU0FBVSxRQUNWLE9BR0QsT0FDQyxlQUFnQixLQUNoQixPQUdELHdCQUNBLGtCQUNBLG1CQUNDLG1CQUFvQixPQUNwQixPQUFRLFFBQ1IsaUJBR0QscUJBQ0MsT0FBUSxRQUNSLHlCQUdELHdCQUNDLE9BQVEsRUFDUixRQUFTLEVBQ1QsTUFHQSxZQUFhLE9BQ2IscUJBR0Qsa0JBQ0MsUUFBUyxFQUNULDhDQUdELDhDQUNDLE9BQVEsS0FDUixtQkFHQSxtQkFBb0IsVUFDcEIsaURBR0QsOENBQ0MsbUJBQW9CLEtBQ3BCLE9BR0EsT0FBUSxFQUNSLFFBQVMsRUFDVCxTQUdBLFNBQVUsS0FDVixTQUdBLFlBQWEsSUFDYixNQUdBLGdCQUFpQixTQUNqQixlQUFnQixFQUNoQixhQUFjLE1BQ2QsTUFBTyxLQUdKLEdBQUksR0FGUCxHQUdBLGVBQWdCLE9BR2IsR0FGSCxHQUdBLFFBQVMsUUFBc0IsRUFDL0IsR0FHQSxXQUFZLEtBQ1osV0d0TkEsTUNEMEIsS0RFMUIsT0FBUSxFQUFBLEtBQ1IsUUFBUyxFRUdFLDhERk5aLFdBS0UsTUNKcUIsTUNRWCw4REZUWixXQVFFLE1DTm9CLE1DVVYsa0VGWlosV0FXRSxNQ1J3QixNQ2VkLHFDRmxCWixXQWNFLE1DVm9CLE1EZXRCLE1HaURRLFFBQVMsWUFDVCxRQUFTLFNBQ1QsUUFBUyxJQUdULFFBQVMsYUFDVCxRQUFTLFVBQ1QsUUFBUyxZQUNULFFBQVMsS0xwRVQsa0JFYVksSUZSWixlRVFZLElGT1osVUVQWSxJQUNuQixXQUFZLEtBQ1osT0FBUSxFQUNSLFFBQVMsRUVBRSx5Q0ZMWixNRlhRLGtCRWtCYSxJQUFJLEtGYmpCLGVFYWEsSUFBSSxLRkVqQixVRUZhLElBQUksTUFJekIsT0Z0QlEsaUJFdUJPLEVGbEJQLGNFa0JPLEVGSFAsU0VHTyxFRnZCUCxhRXVCTyxFRmxCUCxVRWtCTyxFRmJQLFNFYU8sRUZIUCxLRUdPLEVFUEgseUNGTVosT0Z0QlEsaUJFeUJRLEVGcEJSLGNFb0JRLEVGTFIsU0VLUSxFRnpCUixhRXlCUSxFQUFFLEtGcEJWLFVFb0JRLEVBQUUsS0ZmVixTRWVRLEVBQUUsS0ZMVixLRUtRLEVBQUUsTUFLbEIsU0FDQyxPSXZDbUIsUUp3Q25CLFFJdkNvQixRRnVCVCx5Q0ZtQlosb0JGbkNRLGlCRXFDUSxFRmhDUixjRWdDUSxFRmpCUixTRWlCUSxFRnJDUixhRXFDUSxFQUFFLEtGaENWLFVFZ0NRLEVBQUUsS0YzQlYsU0UyQlEsRUFBRSxLRmpCVixLRWlCUSxFQUFFLE1BS2xCLFVGMUNRLGlCRTJDTyxFRnRDUCxjRXNDTyxFRnZCUCxTRXVCTyxFRjNDUCxhRTJDTyxFQUFFLElGdENULFVFc0NPLEVBQUUsSUZqQ1QsU0VpQ08sRUFBRSxJRnZCVCxLRXVCTyxFQUFFLElBQ2hCLFVGNUNPLGlCRStDTyxFRjFDUCxjRTBDTyxFRjNCUCxTRTJCTyxFRi9DUCxhRStDTyxFQUFFLFVGMUNULFVFMENPLEVBQUUsVUZyQ1QsU0VxQ08sRUFBRSxVRjNCVCxLRTJCTyxFQUFFLFVBQ2hCLFVGaERPLGlCRW1ETyxFRjlDUCxjRThDTyxFRi9CUCxTRStCTyxFRm5EUCxhRW1ETyxFQUFFLElGOUNULFVFOENPLEVBQUUsSUZ6Q1QsU0V5Q08sRUFBRSxJRi9CVCxLRStCTyxFQUFFLElBQ2hCLFVGcERPLGlCRXVETyxFRmxEUCxjRWtETyxFRm5DUCxTRW1DTyxFRnZEUCxhRXVETyxFQUFFLElGbERULFVFa0RPLEVBQUUsSUY3Q1QsU0U2Q08sRUFBRSxJRm5DVCxLRW1DTyxFQUFFLElBQ2hCLFVGeERPLGlCRTJETyxFRnREUCxjRXNETyxFRnZDUCxTRXVDTyxFRjNEUCxhRTJETyxFQUFFLFVGdERULFVFc0RPLEVBQUUsVUZqRFQsU0VpRE8sRUFBRSxVRnZDVCxLRXVDTyxFQUFFLFVBQ2hCLFVGNURPLGlCRStETyxFRjFEUCxjRTBETyxFRjNDUCxTRTJDTyxFRi9EUCxhRStETyxFQUFFLFVGMURULFVFMERPLEVBQUUsVUZyRFQsU0VxRE8sRUFBRSxVRjNDVCxLRTJDTyxFQUFFLFVBQ2hCLFVGaEVPLGlCRW1FTyxFRjlEUCxjRThETyxFRi9DUCxTRStDTyxFRm5FUCxhRW1FTyxFQUFFLE1GOURULFVFOERPLEVBQUUsTUZ6RFQsU0V5RE8sRUFBRSxNRi9DVCxLRStDTyxFQUFFLE1BQ2hCLFVGcEVPLGlCRXVFTyxFRmxFUCxjRWtFTyxFRm5EUCxTRW1ETyxFRnZFUCxhRXVFTyxFQUFFLFVGbEVULFVFa0VPLEVBQUUsVUY3RFQsU0U2RE8sRUFBRSxVRm5EVCxLRW1ETyxFQUFFLFVBQ2hCLFdGeEVPLGlCRTJFTyxFRnRFUCxjRXNFTyxFRnZEUCxTRXVETyxFRjNFUCxhRTJFTyxFQUFFLElGdEVULFVFc0VPLEVBQUUsSUZqRVQsU0VpRU8sRUFBRSxJRnZEVCxLRXVETyxFQUFFLElBQ2hCLFdGNUVPLGlCRStFTyxFRjFFUCxjRTBFTyxFRjNEUCxTRTJETyxFRi9FUCxhRStFTyxFQUFFLFNGMUVULFVFMEVPLEVBQUUsU0ZyRVQsU0VxRU8sRUFBRSxTRjNEVCxLRTJETyxFQUFFLFNBQ2hCLFdGaEZPLGlCRW1GTyxFRjlFUCxjRThFTyxFRi9EUCxTRStETyxFRm5GUCxhRW1GTyxFQUFFLFNGOUVULFVFOEVPLEVBQUUsU0Z6RVQsU0V5RU8sRUFBRSxTRi9EVCxLRStETyxFQUFFLFNFbEZMLDhERnNGWCxpQkZ2Rk8saUJFd0ZRLEVGbkZSLGNFbUZRLEVGcEVSLFNFb0VRLEVGeEZSLGFFd0ZRLEVBQUUsSUZuRlYsVUVtRlEsRUFBRSxJRjlFVixTRThFUSxFQUFFLElGcEVWLEtFb0VRLEVBQUUsSUFDaEIsaUJGekZNLGlCRTRGUSxFRnZGUixjRXVGUSxFRnhFUixTRXdFUSxFRjVGUixhRTRGUSxFQUFFLFVGdkZWLFVFdUZRLEVBQUUsVUZsRlYsU0VrRlEsRUFBRSxVRnhFVixLRXdFUSxFQUFFLFVBQ2hCLGlCRjdGTSxpQkVnR1EsRUYzRlIsY0UyRlEsRUY1RVIsU0U0RVEsRUZoR1IsYUVnR1EsRUFBRSxJRjNGVixVRTJGUSxFQUFFLElGdEZWLFNFc0ZRLEVBQUUsSUY1RVYsS0U0RVEsRUFBRSxJQUNoQixpQkZqR00saUJFb0dRLEVGL0ZSLGNFK0ZRLEVGaEZSLFNFZ0ZRLEVGcEdSLGFFb0dRLEVBQUUsSUYvRlYsVUUrRlEsRUFBRSxJRjFGVixTRTBGUSxFQUFFLElGaEZWLEtFZ0ZRLEVBQUUsSUFDaEIsaUJGckdNLGlCRXdHUSxFRm5HUixjRW1HUSxFRnBGUixTRW9GUSxFRnhHUixhRXdHUSxFQUFFLFVGbkdWLFVFbUdRLEVBQUUsVUY5RlYsU0U4RlEsRUFBRSxVRnBGVixLRW9GUSxFQUFFLFVBQ2hCLGlCRnpHTSxpQkU0R1EsRUZ2R1IsY0V1R1EsRUZ4RlIsU0V3RlEsRUY1R1IsYUU0R1EsRUFBRSxVRnZHVixVRXVHUSxFQUFFLFVGbEdWLFNFa0dRLEVBQUUsVUZ4RlYsS0V3RlEsRUFBRSxVQUNoQixpQkY3R00saUJFZ0hRLEVGM0dSLGNFMkdRLEVGNUZSLFNFNEZRLEVGaEhSLGFFZ0hRLEVBQUUsTUYzR1YsVUUyR1EsRUFBRSxNRnRHVixTRXNHUSxFQUFFLE1GNUZWLEtFNEZRLEVBQUUsTUFDaEIsaUJGakhNLGlCRW9IUSxFRi9HUixjRStHUSxFRmhHUixTRWdHUSxFRnBIUixhRW9IUSxFQUFFLFVGL0dWLFVFK0dRLEVBQUUsVUYxR1YsU0UwR1EsRUFBRSxVRmhHVixLRWdHUSxFQUFFLFVBQ2hCLGtCRnJITSxpQkV3SFEsRUZuSFIsY0VtSFEsRUZwR1IsU0VvR1EsRUZ4SFIsYUV3SFEsRUFBRSxJRm5IVixVRW1IUSxFQUFFLElGOUdWLFNFOEdRLEVBQUUsSUZwR1YsS0VvR1EsRUFBRSxJQUNoQixrQkZ6SE0saUJFNEhRLEVGdkhSLGNFdUhRLEVGeEdSLFNFd0dRLEVGNUhSLGFFNEhRLEVBQUUsU0Z2SFYsVUV1SFEsRUFBRSxTRmxIVixTRWtIUSxFQUFFLFNGeEdWLEtFd0dRLEVBQUUsU0FDaEIsa0JGN0hNLGlCRWdJUSxFRjNIUixjRTJIUSxFRjVHUixTRTRHUSxFRmhJUixhRWdJUSxFQUFFLFNGM0hWLFVFMkhRLEVBQUUsU0Z0SFYsU0VzSFEsRUFBRSxTRjVHVixLRTRHUSxFQUFFLFVFaEhOLHlDRnNIb0IsK0JBQzlCLE1BQ0MsUUFBUyxNRnhJSixrQkV5SWMsUUZwSWQsZUVvSWMsUUZySGQsVUVxSGMsUUZ6SWQsa0JFeUljLFFGcElkLGVFb0ljLFFGL0hkLGNFK0hjLFFGckhkLFVFcUhjLFFBQ25CLE9BRUEsUUFBUyxNRjVJSixpQkU2SVMsUUZ4SVQsY0V3SVMsUUZ6SFQsU0V5SFMsUUY3SVQsYUU2SVMsUUZ4SVQsVUV3SVMsUUZuSVQsU0VtSVMsUUZ6SFQsS0V5SFMsVUFNakIsYUFDRSwwQkFBMkIsRUFDM0IsY0FBZSxHQUNmLGVBQWdCLEdBQ2hCLE1BQU8sR0FDUixZQUdDLDBCQUEyQixFQUMzQixjQUFlLEVBQ2YsZUFBZ0IsRUFDaEIsTUFBTyxFQUNSLGNGL0pPLGtCRW1LWSxJQUFJLEtGOUpoQixlRThKWSxJQUFJLEtGL0loQixVRStJWSxJQUFJLEtBRHhCLHFCRmxLUSxpQkVxS1EsUUZoS1IsY0VnS1EsUUZqSlIsU0VpSlEsUUZyS1IsYUVxS1EsUUZoS1IsVUVnS1EsUUYzSlIsU0UySlEsUUZqSlIsS0VpSlEsUUFDZCxNSTFLb0IsSUZFViw4REZvS1oscUJBTUcsTUkzS3FCLFdGSVosOERGaUtaLHFCQVNHLE1JN0tvQixLRmtCWCx5Q0ZrSloscUJBWUcsTUFBTyxNQU1xQiwrQkFDOUIsY0FDQyxRQUFTLE1GdExILGtCRXVMYSxRRmxMYixlRWtMYSxRRm5LYixVRW1LYSxTSy9MckIsS0FDQyxVTkRtQixNTUVuQixZTkRxQixJTUVyQixHQUdHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FDbkIsT05LbUIsT01MSyxFQUFFLE9BQW9CLEVBQzlDLGVBQWdCLG1CQUNoQixHQUdBLFVOUmtCLE9NU2xCLEdBR0EsVU5Ya0IsT01ZbEIsR0FHQSxVTmRrQixLTWVsQixHQUdBLFVOakJrQixRTWtCbEIsR0FHQSxVTnBCa0IsUU1xQmxCLEdBR0EsVU52QmtCLE9Nd0JsQixFQUlBLE9BQVEsT0FBb0IsRU56QlQsT002QmhCLEdBSEgsR0FJQSxXTjlCbUIsT00rQm5CLGNOL0JtQixPTTZCaEIsTUFBQSxNQUFKLE1BQUEsTUFJRSxXQUFZLEVBQ1osY0FBZSxFQUNmLFdBS0QsT054Q21CLE9Nd0NLLEVBQ3JCLFFBQVMsTUFGYix3QkFJUSxPQUFRLEVBQ1gsS0FJSixRQUFTLE1BQ1QsVUFBVyxRQUZaLFlBSU0sUUFBUyxjQUNWLElBS0osT056RG1CLE9NeURLLEVBQ3ZCLFFEckVtQixRQ3NFcEIsS0FHQSxlQUFnQixPQUNoQixNQUlBLFVBQVcsUUFDWCxHQUdBLFlBQWEsS0FDYixhQUFjLEtBQ2QsV0FBWSxLQUNaLE9OMUVtQixPTTBFSyxFQUN4QixTQ3ZGQSxPQUFRLEVBQ1IsUUZBb0IsUUVDcEIsT0FBUSxFQUFFLEVQVVMsT09WUyxFQUM1QixNQUdELE1BQ0EsT0FDQyxRQUFTLE1BQ1QsTUFHQSxjQUFlLFFBRGhCLHFCQUlFLFFBQVMsSUFKWCxXQVFFLFFBQVMsS0FJMkksa0JBQW9CLGlCQUEwQywyQkFBdkIscUJBQW5MLGtCQUF1TyxrQkFBbk4sbUJBQXFCLHFCQUF1QixtQkFBcUIsZ0JBQWtCLGlCQUFvSixpQkFBakksZ0JBQW9KLGlCQUFvQiwwQkFIMVMsU1JaTSxtQlFnQmEsYVJYYixnQlFXYSxhUkliLFdRSmEsYUFDcEIsY0NiUyxTRGNULFFBQVMsUUFBc0IsUUFDL0IsTUFBTyxLQUo4SSx3QkFBb0IsdUJBQTBDLGlDQUF2QiwyQkFBbkwsd0JBQXVPLHdCQUFuTix5QkFBcUIsMkJBQXVCLHlCQUFxQixzQkFBa0IsdUJBQW9KLHVCQUFqSSxzQkFBb0osdUJBQW9CLGdDQUE1UyxlQU9FLFFBQVMsRUFDVCxTQUlELE9BQVEsU0FDUixxQkFFdUIsa0JBQ3ZCLFFBQVMsT0FDVCxhQUFjLFFBQ2QsaUJBR0EsTUFBTyxLQUNQLE9BR0EsTUFBTyxLQUNQLFVBQVcsS0FDWCxjUHRDbUIsT091Q25CLE9BR0QsbUJBQ0MsT0FBUSxRQUNSLFlBQWEsS0FDYixlQUFnQixPQUNoQixZQUFhLE9BQ2IsT0FBUSIsImZpbGUiOiJudWNsZXVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiosICo6OmJlZm9yZSwgKjo6YWZ0ZXIge1xuXHRAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xufVxuXG5ALXdlYmtpdC12aWV3cG9ydHt3aWR0aDpkZXZpY2Utd2lkdGh9XG5ALW1vei12aWV3cG9ydHt3aWR0aDpkZXZpY2Utd2lkdGh9XG5ALW1zLXZpZXdwb3J0e3dpZHRoOmRldmljZS13aWR0aH1cbkAtby12aWV3cG9ydHt3aWR0aDpkZXZpY2Utd2lkdGh9XG5Admlld3BvcnR7d2lkdGg6ZGV2aWNlLXdpZHRofVxuXG5odG1sIHtcblx0Zm9udC1zaXplOiAxMDAlO1xuXHQtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcblx0LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xufVxuXG5ib2R5IHtcblx0bWFyZ2luOiAwO1xufVxuXG5hcnRpY2xlLFxuYXNpZGUsXG5kZXRhaWxzLFxuZmlnY2FwdGlvbixcbmZpZ3VyZSxcbmZvb3RlcixcbmhlYWRlcixcbmhncm91cCxcbm1haW4sXG5uYXYsXG5zZWN0aW9uLFxuc3VtbWFyeSB7XG5cdGRpc3BsYXk6IGJsb2NrO1xufVxuXG5hdWRpbyxcbmNhbnZhcyxcbnByb2dyZXNzLFxudmlkZW8ge1xuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbn1cblxuYXVkaW86bm90KFtjb250cm9sc10pIHtcblx0ZGlzcGxheTogbm9uZTtcblx0aGVpZ2h0OiAwO1xufVxuXG5baGlkZGVuXSxcbnRlbXBsYXRlIHtcblx0ZGlzcGxheTogbm9uZTtcbn1cblxuYSB7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbmE6YWN0aXZlLFxuYTpob3ZlciB7XG5cdG91dGxpbmU6IDA7XG59XG5cbmFiYnJbdGl0bGVdIHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDtcbn1cblxuYixcbnN0cm9uZyB7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG5kZm4ge1xuXHRmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbm1hcmsge1xuXHRiYWNrZ3JvdW5kOiAjZmYwO1xuXHRjb2xvcjogIzAwMDtcbn1cblxuc3ViLFxuc3VwIHtcblx0Zm9udC1zaXplOiAkY29yZS1mb250LXNpemUgLSAwLjI1MDtcblx0bGluZS1oZWlnaHQ6IDA7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xufVxuXG5zdXAge1xuXHR0b3A6IC0wLjVlbTtcbn1cblxuc3ViIHtcblx0Ym90dG9tOiAtMC4yNWVtO1xufVxuXG5pbWcge1xuXHRib3JkZXI6IDA7XG5cdG1heC13aWR0aDogMTAwJTtcbn1cblxuc3ZnOm5vdCg6cm9vdCkge1xuXHRvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5maWd1cmUge1xuXHRtYXJnaW46IDFlbSA0MHB4O1xufVxuXG5ociB7XG5cdGhlaWdodDogMDtcbn1cblxucHJlIHtcblx0b3ZlcmZsb3c6IGF1dG87XG59XG5cbmNvZGUsXG5rYmQsXG5wcmUsXG5zYW1wIHtcblx0Zm9udC1zaXplOiAkY29yZS1mb250LXNpemU7XG59XG5cbmJ1dHRvbixcbmlucHV0LFxub3B0Z3JvdXAsXG5zZWxlY3QsXG50ZXh0YXJlYSB7XG5cdGNvbG9yOiBpbmhlcml0O1xuXHRmb250OiBpbmhlcml0O1xuXHRtYXJnaW46IDA7XG59XG5cbmJ1dHRvbiB7XG5cdG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG5idXR0b24sXG5zZWxlY3Qge1xuXHR0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbn1cblxuYnV0dG9uLFxuaHRtbCBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLFxuaW5wdXRbdHlwZT1cInJlc2V0XCJdLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG5cdC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG59XG5cbmJ1dHRvbltkaXNhYmxlZF0sXG5odG1sIGlucHV0W2Rpc2FibGVkXSB7XG5cdGN1cnNvcjogZGVmYXVsdDtcbn1cblxuYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xuXHRib3JkZXI6IDA7XG5cdHBhZGRpbmc6IDA7XG59XG5cbmlucHV0IHtcblx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcblx0cGFkZGluZzogMDtcbn1cblxuaW5wdXRbdHlwZT1cIm51bWJlclwiXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuXHRoZWlnaHQ6IGF1dG87XG59XG5cbmlucHV0W3R5cGU9XCJzZWFyY2hcIl0ge1xuXHQtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbn1cblxuaW5wdXRbdHlwZT1cInNlYXJjaFwiXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcbmlucHV0W3R5cGU9XCJzZWFyY2hcIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24ge1xuXHQtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG5cbmxlZ2VuZCB7XG5cdGJvcmRlcjogMDtcblx0cGFkZGluZzogMDtcbn1cblxudGV4dGFyZWEge1xuXHRvdmVyZmxvdzogYXV0bztcbn1cblxub3B0Z3JvdXAge1xuXHRmb250LXdlaWdodDogYm9sZDtcbn1cblxudGFibGUge1xuXHRib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuXHRib3JkZXItc3BhY2luZzogMDtcblx0dGFibGUtbGF5b3V0OiBmaXhlZDtcblx0d2lkdGg6IDEwMCU7XG59XG5cbnRyLCB0ZCwgdGgge1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG50aCwgdGQge1xuXHRwYWRkaW5nOiAoJGxlYWRpbmctbWFyZ2luIC8gNCkgMDtcbn1cblxudGgge1xuXHR0ZXh0LWFsaWduOiBsZWZ0O1xufVxuIiwiLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovL1xuLy8gRXhhbXBsZTogQGluY2x1ZGUgcHJlZml4ZXIoYm9yZGVyLXJhZGl1cywgJHJhZGlpLCB3ZWJraXQgbXMgc3BlYyk7XG4vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4vLyBWYXJpYWJsZXMgbG9jYXRlZCBpbiAvc2V0dGluZ3MvX3ByZWZpeGVyLnNjc3NcblxuQG1peGluIHByZWZpeGVyICgkcHJvcGVydHksICR2YWx1ZSwgJHByZWZpeGVzKSB7XG4gIEBlYWNoICRwcmVmaXggaW4gJHByZWZpeGVzIHtcbiAgICBAaWYgJHByZWZpeCA9PSB3ZWJraXQge1xuICAgICAgQGlmICRwcmVmaXgtZm9yLXdlYmtpdCB7XG4gICAgICAgIC13ZWJraXQtI3skcHJvcGVydHl9OiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIGlmICRwcmVmaXggPT0gbW96IHtcbiAgICAgIEBpZiAkcHJlZml4LWZvci1tb3ppbGxhIHtcbiAgICAgICAgLW1vei0jeyRwcm9wZXJ0eX06ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2UgaWYgJHByZWZpeCA9PSBtcyB7XG4gICAgICBAaWYgJHByZWZpeC1mb3ItbWljcm9zb2Z0IHtcbiAgICAgICAgLW1zLSN7JHByb3BlcnR5fTogJHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSBpZiAkcHJlZml4ID09IG8ge1xuICAgICAgQGlmICRwcmVmaXgtZm9yLW9wZXJhIHtcbiAgICAgICAgLW8tI3skcHJvcGVydHl9OiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIGlmICRwcmVmaXggPT0gc3BlYyB7XG4gICAgICBAaWYgJHByZWZpeC1mb3Itc3BlYyB7XG4gICAgICAgICN7JHByb3BlcnR5fTogJHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSAge1xuICAgICAgQHdhcm4gXCJVbnJlY29nbml6ZWQgcHJlZml4OiAjeyRwcmVmaXh9XCI7XG4gICAgfVxuICB9XG59XG5cbkBtaXhpbiBkaXNhYmxlLXByZWZpeC1mb3ItYWxsKCkge1xuICAkcHJlZml4LWZvci13ZWJraXQ6ICAgIGZhbHNlICFnbG9iYWw7XG4gICRwcmVmaXgtZm9yLW1vemlsbGE6ICAgZmFsc2UgIWdsb2JhbDtcbiAgJHByZWZpeC1mb3ItbWljcm9zb2Z0OiBmYWxzZSAhZ2xvYmFsO1xuICAkcHJlZml4LWZvci1vcGVyYTogICAgIGZhbHNlICFnbG9iYWw7XG4gICRwcmVmaXgtZm9yLXNwZWM6ICAgICAgZmFsc2UgIWdsb2JhbDtcbn1cbiIsIi8vIEJhc2UgU2l6ZXNcbiRjb3JlLWZvbnQtc2l6ZTpcdFx0XHRcdC45cmVtICFkZWZhdWx0O1xuJGNvcmUtbGluZS1oZWlnaHQ6XHRcdFx0XHQxLjUgIWRlZmF1bHQ7XG5cbi8vIEhlYWRpbmcgU2l6ZXNcbiRoMS1mb250LXNpemU6XHRcdFx0XHRcdCRjb3JlLWZvbnQtc2l6ZSArIDIuMjAgIWRlZmF1bHQ7XG4kaDItZm9udC1zaXplOlx0XHRcdFx0XHQkY29yZS1mb250LXNpemUgKyAxLjUwICFkZWZhdWx0O1xuJGgzLWZvbnQtc2l6ZTpcdFx0XHRcdFx0JGNvcmUtZm9udC1zaXplICsgMS4xMCAhZGVmYXVsdDtcbiRoNC1mb250LXNpemU6XHRcdFx0XHRcdCRjb3JlLWZvbnQtc2l6ZSArIDAuNzUgIWRlZmF1bHQ7XG4kaDUtZm9udC1zaXplOlx0XHRcdFx0XHQkY29yZS1mb250LXNpemUgKyAwLjM1ICFkZWZhdWx0O1xuJGg2LWZvbnQtc2l6ZTpcdFx0XHRcdFx0JGNvcmUtZm9udC1zaXplIC0gMC4xNSAhZGVmYXVsdDtcblxuLy8gU3BhY2luZ1xuJGxlYWRpbmctbWFyZ2luOlx0XHRcdFx0JGNvcmUtbGluZS1oZWlnaHQgKiAxcmVtICFkZWZhdWx0O1xuIiwiLy8gUGFnZSBDb250YWluZXJcbi5jb250YWluZXIge1xuXHR3aWR0aDogJGxhcmdlLWRlc2t0b3AtY29udGFpbmVyO1xuXHRtYXJnaW46IDAgYXV0bztcblx0cGFkZGluZzogMDtcblx0QGluY2x1ZGUgYnJlYWtwb2ludChkZXNrdG9wLXJhbmdlKSB7XG5cdFx0d2lkdGg6ICRkZXNrdG9wLWNvbnRhaW5lcjtcblx0fVxuXHRAaW5jbHVkZSBicmVha3BvaW50KHRhYmxldC1yYW5nZSkge1xuXHRcdHdpZHRoOiAkdGFibGV0LWNvbnRhaW5lcjtcblx0fVxuXHRAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlLW1vYmlsZS1yYW5nZSkge1xuXHRcdHdpZHRoOiAkbGFyZ2UtbW9iaWxlLWNvbnRhaW5lcjtcblx0fVxuXHRAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsLW1vYmlsZS1yYW5nZSkge1xuXHRcdHdpZHRoOiAkbW9iaWxlLWNvbnRhaW5lcjtcblx0fVxufVxuXG4vLyBHcmlkIFJvdyBhbmQgQ29sdW1uIFNldHVwXG4uZ3JpZCB7XG5cdEBpbmNsdWRlIGRpc3BsYXkoZmxleCk7XG5cdEBpbmNsdWRlIGZsZXgtZmxvdyhyb3cpO1xuXHRsaXN0LXN0eWxlOiBub25lO1xuXHRtYXJnaW46IDA7XG5cdHBhZGRpbmc6IDA7XG5cdEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcblx0XHRAaW5jbHVkZSBmbGV4LWZsb3cocm93IHdyYXApO1xuXHR9XG59XG5cbi5ibG9jayB7XG5cdEBpbmNsdWRlIGZsZXgoMSk7XG5cdEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcblx0XHRAaW5jbHVkZSBmbGV4KDAgMTAwJSk7XG5cdH1cbn1cblxuLy8gQ29udGVudCBCbG9jayBTcGFjaW5nXG4uY29udGVudCB7XG5cdG1hcmdpbjogJGNvbnRlbnQtbWFyZ2luO1xuXHRwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xufVxuXG5ib2R5IFtjbGFzcyo9XCJzaXplLVwiXSB7XG5cdEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcblx0XHRAaW5jbHVkZSBmbGV4KDAgMTAwJSk7XG5cdH1cbn1cblxuLy8gQ3VzdG9tIFNpemUgTW9kaWZpZXJzXG4uc2l6ZS0xLTIge1xuXHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzIpKTtcbn1cblxuLnNpemUtMS0zIHtcblx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS8zKSk7XG59XG5cbi5zaXplLTEtNCB7XG5cdEBpbmNsdWRlIGZsZXgoMCBwZXJjZW50YWdlKDEvNCkpO1xufVxuXG4uc2l6ZS0xLTUge1xuXHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzUpKTtcbn1cblxuLnNpemUtMS02IHtcblx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS82KSk7XG59XG5cbi5zaXplLTEtNyB7XG5cdEBpbmNsdWRlIGZsZXgoMCBwZXJjZW50YWdlKDEvNykpO1xufVxuXG4uc2l6ZS0xLTgge1xuXHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzgpKTtcbn1cblxuLnNpemUtMS05IHtcblx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS85KSk7XG59XG5cbi5zaXplLTEtMTAge1xuXHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzEwKSk7XG59XG5cbi5zaXplLTEtMTEge1xuXHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzExKSk7XG59XG5cbi5zaXplLTEtMTIge1xuXHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzEyKSk7XG59XG5cbkBpbmNsdWRlIGJyZWFrcG9pbnQodGFibGV0LXJhbmdlKSB7XG5cdC5zaXplLXRhYmxldC0xLTIge1xuXHRcdEBpbmNsdWRlIGZsZXgoMCBwZXJjZW50YWdlKDEvMikpO1xuXHR9XG5cblx0LnNpemUtdGFibGV0LTEtMyB7XG5cdFx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS8zKSk7XG5cdH1cblxuXHQuc2l6ZS10YWJsZXQtMS00IHtcblx0XHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzQpKTtcblx0fVxuXG5cdC5zaXplLXRhYmxldC0xLTUge1xuXHRcdEBpbmNsdWRlIGZsZXgoMCBwZXJjZW50YWdlKDEvNSkpO1xuXHR9XG5cblx0LnNpemUtdGFibGV0LTEtNiB7XG5cdFx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS82KSk7XG5cdH1cblxuXHQuc2l6ZS10YWJsZXQtMS03IHtcblx0XHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzcpKTtcblx0fVxuXG5cdC5zaXplLXRhYmxldC0xLTgge1xuXHRcdEBpbmNsdWRlIGZsZXgoMCBwZXJjZW50YWdlKDEvOCkpO1xuXHR9XG5cblx0LnNpemUtdGFibGV0LTEtOSB7XG5cdFx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS85KSk7XG5cdH1cblxuXHQuc2l6ZS10YWJsZXQtMS0xMCB7XG5cdFx0QGluY2x1ZGUgZmxleCgwIHBlcmNlbnRhZ2UoMS8xMCkpO1xuXHR9XG5cblx0LnNpemUtdGFibGV0LTEtMTEge1xuXHRcdEBpbmNsdWRlIGZsZXgoMCBwZXJjZW50YWdlKDEvMTEpKTtcblx0fVxuXG5cdC5zaXplLXRhYmxldC0xLTEyIHtcblx0XHRAaW5jbHVkZSBmbGV4KDAgcGVyY2VudGFnZSgxLzEyKSk7XG5cdH1cbn1cblxuLy8gRml4IGZvciBGaXJlZm94IHZlcnNpb25zIDI3IGFuZCBiZWxvd1xuQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuXHRAc3VwcG9ydHMgbm90IChmbGV4LXdyYXA6IHdyYXApIHtcblx0XHQuZ3JpZCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRcdEBpbmNsdWRlIGZsZXgtd3JhcChpbmhlcml0KTtcblx0XHR9XG5cdFx0LmJsb2NrIHtcblx0XHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdFx0QGluY2x1ZGUgZmxleChpbmhlcml0KTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmVvcmRlcmluZ1xuLmZpcnN0LWJsb2NrIHtcbiAgLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cDogMDtcbiAgLXdlYmtpdC1vcmRlcjogLTE7XG4gIC1tcy1mbGV4LW9yZGVyOiAtMTtcbiAgb3JkZXI6IC0xO1xufVxuXG4ubGFzdC1ibG9jayB7XG4gIC13ZWJraXQtYm94LW9yZGluYWwtZ3JvdXA6IDI7XG4gIC13ZWJraXQtb3JkZXI6IDE7XG4gIC1tcy1mbGV4LW9yZGVyOiAxO1xuICBvcmRlcjogMTtcbn1cblxuLy8gRml4ZWQgR3JpZCBTdHlsZVxuLmZpeGVkLWJsb2NrcyB7XG5cdEBpbmNsdWRlIGZsZXgtZmxvdyhyb3cgd3JhcCk7XG5cdC5ibG9jayB7XG5cdFx0QGluY2x1ZGUgZmxleChpbmhlcml0KTtcblx0XHR3aWR0aDogJGZpeGVkLWJsb2NrLWZ1bGw7XG5cdFx0QGluY2x1ZGUgYnJlYWtwb2ludChkZXNrdG9wLXJhbmdlKSB7XG5cdFx0XHR3aWR0aDogJGZpeGVkLWJsb2NrLWRlc2t0b3A7XG5cdFx0fVxuXHRcdEBpbmNsdWRlIGJyZWFrcG9pbnQodGFibGV0LXJhbmdlKSB7XG5cdFx0XHR3aWR0aDogJGZpeGVkLWJsb2NrLXRhYmxldDtcblx0XHR9XG5cdFx0QGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuXHRcdFx0d2lkdGg6IDEwMCU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIEZpeCBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGZsZXgtd3JhcFxuQHN1cHBvcnRzIG5vdCAoZmxleC13cmFwOiB3cmFwKSB7XG5cdC5maXhlZC1ibG9ja3Mge1xuXHRcdGRpc3BsYXk6IGJsb2NrO1xuXHRcdEBpbmNsdWRlIGZsZXgtZmxvdyhpbmhlcml0KTtcblx0fVxufSIsIi8vIE1lZGlhIERldmljZSBCcmVha3BvaW50c1xuJGxhcmdlLWRlc2t0b3AtY29udGFpbmVyOlx0XHQ3NS4wMDBlbSAhZGVmYXVsdDtcbiRkZXNrdG9wLWNvbnRhaW5lcjpcdFx0XHRcdDYwLjAwMGVtICFkZWZhdWx0O1xuJHRhYmxldC1jb250YWluZXI6XHRcdFx0XHQ0OC4wMDBlbSAhZGVmYXVsdDtcbiRsYXJnZS1tb2JpbGUtY29udGFpbmVyOlx0XHQzMC4wMDBlbSAhZGVmYXVsdDtcbiRtb2JpbGUtY29udGFpbmVyOlx0XHRcdFx0MTAwJSAhZGVmYXVsdDtcblxuLy8gQnJlYWtwb2ludCBWYXJpYWJsZXMgRm9yIFBhcnRpY2xlc1xuJG1lZGlhOiBcImFsbFwiICFkZWZhdWx0O1xuJG1vYmlsZS1vbmx5OiBcIiN7JG1lZGlhfSBhbmQgKG1heC13aWR0aDojeyR0YWJsZXQtY29udGFpbmVyIC0gMC4wNjJ9KVwiICFkZWZhdWx0O1xuJG5vLW1vYmlsZTogXCIjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6I3skdGFibGV0LWNvbnRhaW5lcn0pXCIgIWRlZmF1bHQ7XG4kc21hbGwtbW9iaWxlLXJhbmdlOiBcIiN7JG1lZGlhfSBhbmQgKG1heC13aWR0aDojeyRsYXJnZS1tb2JpbGUtY29udGFpbmVyfSlcIiAhZGVmYXVsdDtcbiRsYXJnZS1tb2JpbGUtcmFuZ2U6IFwiI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiN7JGxhcmdlLW1vYmlsZS1jb250YWluZXIgKyAwLjA2M30pIGFuZCAobWF4LXdpZHRoOiN7JHRhYmxldC1jb250YWluZXIgLSAwLjA2Mn0pXCIgIWRlZmF1bHQ7XG4kdGFibGV0LXJhbmdlOiBcIiN7JG1lZGlhfSBhbmQgKG1pbi13aWR0aDojeyR0YWJsZXQtY29udGFpbmVyfSkgYW5kIChtYXgtd2lkdGg6I3skZGVza3RvcC1jb250YWluZXIgLSAwLjA2Mn0pXCIgIWRlZmF1bHQ7XG4kZGVza3RvcC1yYW5nZTogXCIjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6I3skZGVza3RvcC1jb250YWluZXJ9KSBhbmQgKG1heC13aWR0aDojeyRsYXJnZS1kZXNrdG9wLWNvbnRhaW5lciAtIDAuMDYyfSlcIiAhZGVmYXVsdDtcbiRsYXJnZS1kZXNrdG9wLXJhbmdlOiBcIiN7JG1lZGlhfSBhbmQgKG1pbi13aWR0aDojeyRsYXJnZS1kZXNrdG9wLWNvbnRhaW5lcn0pXCIgIWRlZmF1bHQ7XG4iLCIvLyBCcmVha3BvaW50c1xuQG1peGluIGJyZWFrcG9pbnQoJGJyZWFrcG9pbnRzLCAkbWVkaWE6IGFsbCkge1xuICAgIEBlYWNoICRicmVha3BvaW50IGluICRicmVha3BvaW50cyB7XG4gICAgICAgIEBpZiAkYnJlYWtwb2ludCA9PSBsYXJnZS1kZXNrdG9wLXJhbmdlIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1pbi13aWR0aDogJGxhcmdlLWRlc2t0b3AtY29udGFpbmVyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gZGVza3RvcC1yYW5nZSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICRkZXNrdG9wLWNvbnRhaW5lcikgYW5kIChtYXgtd2lkdGg6ICRsYXJnZS1kZXNrdG9wLWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gdGFibGV0LXJhbmdlIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1pbi13aWR0aDogJHRhYmxldC1jb250YWluZXIpIGFuZCAobWF4LXdpZHRoOiAkZGVza3RvcC1jb250YWluZXIgLSAwLjA2MikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IGxhcmdlLW1vYmlsZS1yYW5nZSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICRsYXJnZS1tb2JpbGUtY29udGFpbmVyICsgMC4wNjMpIGFuZCAobWF4LXdpZHRoOiAkdGFibGV0LWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gbWluaS1uYXYtcmFuZ2Uge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkdGFibGV0LWNvbnRhaW5lciAtIDAuMDYyKSBhbmQgKG1heC13aWR0aDogJGxhcmdlLWRlc2t0b3AtY29udGFpbmVyIC0gMC4wNjIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSBzbWFsbC1tb2JpbGUtcmFuZ2Uge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWF4LXdpZHRoOiAkbGFyZ2UtbW9iaWxlLWNvbnRhaW5lcikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IG5vLW1vYmlsZSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICR0YWJsZXQtY29udGFpbmVyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gbW9iaWxlLW9ubHkge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWF4LXdpZHRoOiAkdGFibGV0LWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gZGVza3RvcC1vbmx5IHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1heC13aWR0aDogJGRlc2t0b3AtY29udGFpbmVyIC0gMC4wNjIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSBtb2JpbGUtcGx1cyB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICRtb2JpbGUtY29udGFpbmVyIC0gMC4wNjIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSB0YWJsZXQtcGx1cyB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICR0YWJsZXQtY29udGFpbmVyIC0gMC4wNjIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSBkZXNrdG9wLXBsdXMge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkZGVza3RvcC1jb250YWluZXIgLSAwLjA2MikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IGxhcmdlLWRlc2t0b3AtcGx1cyB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICRsYXJnZS1kZXNrdG9wLWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDU1MzIEZsZXhpYmxlIEJveCBNb2RlbCBhbmQgcHJvcGVydHkgZGVmYXVsdHNcblxuLy8gQ3VzdG9tIHNob3J0aGFuZCBub3RhdGlvbiBmb3IgZmxleGJveFxuQG1peGluIGJveCgkb3JpZW50OiBpbmxpbmUtYXhpcywgJHBhY2s6IHN0YXJ0LCAkYWxpZ246IHN0cmV0Y2gpIHtcbiAgQGluY2x1ZGUgZGlzcGxheS1ib3g7XG4gIEBpbmNsdWRlIGJveC1vcmllbnQoJG9yaWVudCk7XG4gIEBpbmNsdWRlIGJveC1wYWNrKCRwYWNrKTtcbiAgQGluY2x1ZGUgYm94LWFsaWduKCRhbGlnbik7XG59XG5cbkBtaXhpbiBkaXNwbGF5LWJveCB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtbW96LWJveDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7IC8vIElFIDEwXG4gIGRpc3BsYXk6IGJveDtcbn1cblxuQG1peGluIGJveC1vcmllbnQoJG9yaWVudDogaW5saW5lLWF4aXMpIHtcbi8vIGhvcml6b250YWx8dmVydGljYWx8aW5saW5lLWF4aXN8YmxvY2stYXhpc3xpbmhlcml0XG4gIEBpbmNsdWRlIHByZWZpeGVyKGJveC1vcmllbnQsICRvcmllbnQsIHdlYmtpdCBtb3ogc3BlYyk7XG59XG5cbkBtaXhpbiBib3gtcGFjaygkcGFjazogc3RhcnQpIHtcbi8vIHN0YXJ0fGVuZHxjZW50ZXJ8anVzdGlmeVxuICBAaW5jbHVkZSBwcmVmaXhlcihib3gtcGFjaywgJHBhY2ssIHdlYmtpdCBtb3ogc3BlYyk7XG4gIC1tcy1mbGV4LXBhY2s6ICRwYWNrOyAvLyBJRSAxMFxufVxuXG5AbWl4aW4gYm94LWFsaWduKCRhbGlnbjogc3RyZXRjaCkge1xuLy8gc3RhcnR8ZW5kfGNlbnRlcnxiYXNlbGluZXxzdHJldGNoXG4gIEBpbmNsdWRlIHByZWZpeGVyKGJveC1hbGlnbiwgJGFsaWduLCB3ZWJraXQgbW96IHNwZWMpO1xuICAtbXMtZmxleC1hbGlnbjogJGFsaWduOyAvLyBJRSAxMFxufVxuXG5AbWl4aW4gYm94LWRpcmVjdGlvbigkZGlyZWN0aW9uOiBub3JtYWwpIHtcbi8vIG5vcm1hbHxyZXZlcnNlfGluaGVyaXRcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWRpcmVjdGlvbiwgJGRpcmVjdGlvbiwgd2Via2l0IG1veiBzcGVjKTtcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiAkZGlyZWN0aW9uOyAvLyBJRSAxMFxufVxuXG5AbWl4aW4gYm94LWxpbmVzKCRsaW5lczogc2luZ2xlKSB7XG4vLyBzaW5nbGV8bXVsdGlwbGVcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWxpbmVzLCAkbGluZXMsIHdlYmtpdCBtb3ogc3BlYyk7XG59XG5cbkBtaXhpbiBib3gtb3JkaW5hbC1ncm91cCgkaW50OiAxKSB7XG4gIEBpbmNsdWRlIHByZWZpeGVyKGJveC1vcmRpbmFsLWdyb3VwLCAkaW50LCB3ZWJraXQgbW96IHNwZWMpO1xuICAtbXMtZmxleC1vcmRlcjogJGludDsgLy8gSUUgMTBcbn1cblxuQG1peGluIGJveC1mbGV4KCR2YWx1ZTogMC4wKSB7XG4gIEBpbmNsdWRlIHByZWZpeGVyKGJveC1mbGV4LCAkdmFsdWUsIHdlYmtpdCBtb3ogc3BlYyk7XG4gIC1tcy1mbGV4OiAkdmFsdWU7IC8vIElFIDEwXG59XG5cbkBtaXhpbiBib3gtZmxleC1ncm91cCgkaW50OiAxKSB7XG4gIEBpbmNsdWRlIHByZWZpeGVyKGJveC1mbGV4LWdyb3VwLCAkaW50LCB3ZWJraXQgbW96IHNwZWMpO1xufVxuXG4vLyBDU1MzIEZsZXhpYmxlIEJveCBNb2RlbCBhbmQgcHJvcGVydHkgZGVmYXVsdHNcbi8vIFVuaWZpZWQgYXR0cmlidXRlcyBmb3IgMjAwOSwgMjAxMSwgYW5kIDIwMTIgZmxhdm91cnMuXG5cbi8vIDIwMDkgLSBkaXNwbGF5IChib3ggfCBpbmxpbmUtYm94KVxuLy8gMjAxMSAtIGRpc3BsYXkgKGZsZXhib3ggfCBpbmxpbmUtZmxleGJveClcbi8vIDIwMTIgLSBkaXNwbGF5IChmbGV4IHwgaW5saW5lLWZsZXgpXG5AbWl4aW4gZGlzcGxheSgkdmFsdWUpIHtcbi8vICBmbGV4IHwgaW5saW5lLWZsZXhcbiAgICBAaWYgJHZhbHVlID09IFwiZmxleFwiIHtcbiAgICAgICAgLy8gMjAwOVxuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgZGlzcGxheTogLW1vei1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGJveDtcblxuICAgICAgICAvLyAyMDEyXG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcbiAgICAgICAgZGlzcGxheTogLW1vei1mbGV4O1xuICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsgLy8gMjAxMSAoSUUgMTApXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJpbmxpbmUtZmxleFwiIHtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYm94O1xuICAgICAgICBkaXNwbGF5OiAtbW96LWlubGluZS1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ib3g7XG5cbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDtcbiAgICAgICAgZGlzcGxheTogLW1vei1pbmxpbmUtZmxleDtcbiAgICAgICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICB9XG5cbiAgICBAZWxzZSB7XG4gICAgICAgIGRpc3BsYXk6ICR2YWx1ZTtcbiAgICB9XG59XG5cbi8vIDIwMDkgLSBib3gtZmxleCAoaW50ZWdlcilcbi8vIDIwMTEgLSBmbGV4IChkZWNpbWFsIHwgd2lkdGggZGVjaW1hbClcbi8vIDIwMTIgLSBmbGV4IChpbnRlZ2VyIGludGVnZXIgd2lkdGgpXG5AbWl4aW4gZmxleCgkdmFsdWUpIHtcblxuICAgIC8vIEdyYWIgZmxleC1ncm93IGZvciBvbGRlciBicm93c2Vycy5cbiAgICAkZmxleC1ncm93OiBudGgoJHZhbHVlLCAxKTtcblxuICAgIC8vIDIwMDlcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihib3gtZmxleCwgJGZsZXgtZ3Jvdywgd2Via2l0IG1veiBzcGVjKTtcblxuICAgIC8vIDIwMTEgKElFIDEwKSwgMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgsICR2YWx1ZSwgd2Via2l0IG1veiBtcyBzcGVjKTtcbn1cblxuLy8gMjAwOSAtIGJveC1vcmllbnQgKCBob3Jpem9udGFsIHwgdmVydGljYWwgfCBpbmxpbmUtYXhpcyB8IGJsb2NrLWF4aXMpXG4vLyAgICAgIC0gYm94LWRpcmVjdGlvbiAobm9ybWFsIHwgcmV2ZXJzZSkgICAgICBcbi8vIDIwMTEgLSBmbGV4LWRpcmVjdGlvbiAocm93IHwgcm93LXJldmVyc2UgfCBjb2x1bW4gfCBjb2x1bW4tcmV2ZXJzZSlcbi8vIDIwMTIgLSBmbGV4LWRpcmVjdGlvbiAocm93IHwgcm93LXJldmVyc2UgfCBjb2x1bW4gfCBjb2x1bW4tcmV2ZXJzZSlcbkBtaXhpbiBmbGV4LWRpcmVjdGlvbigkdmFsdWU6IHJvdykge1xuXG4gICAgLy8gQWx0IHZhbHVlcy5cbiAgICAkdmFsdWUtMjAwOTogJHZhbHVlO1xuICAgICR2YWx1ZS0yMDExOiAkdmFsdWU7XG4gICAgJGRpcmVjdGlvbjogXCJub3JtYWxcIjtcblxuICAgIEBpZiAkdmFsdWUgPT0gcm93IHtcbiAgICAgICAgJHZhbHVlLTIwMDk6IGhvcml6b250YWw7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJyb3ctcmV2ZXJzZVwiIHtcbiAgICAgICAgJHZhbHVlLTIwMDk6IGhvcml6b250YWw7XG4gICAgICAgICRkaXJlY3Rpb246IHJldmVyc2U7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gY29sdW1uIHtcbiAgICAgICAgJHZhbHVlLTIwMDk6IHZlcnRpY2FsO1xuICAgIH1cblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwiY29sdW1uLXJldmVyc2VcIiB7XG4gICAgICAgICR2YWx1ZS0yMDA5OiB2ZXJ0aWNhbDtcbiAgICAgICAgJGRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICB9XG5cbiAgICAvLyAyMDA5XG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LW9yaWVudCwgJHZhbHVlLTIwMDksIHdlYmtpdCBtb3ogc3BlYyk7XG4gICAgQGlmICRkaXJlY3Rpb24gPT0gXCJyZXZlcnNlXCIge1xuICAgICAgICBAaW5jbHVkZSBwcmVmaXhlcihib3gtZGlyZWN0aW9uLCAkZGlyZWN0aW9uLCB3ZWJraXQgbW96IHNwZWMpO1xuICAgIH1cblxuICAgIC8vIDIwMTJcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihmbGV4LWRpcmVjdGlvbiwgJHZhbHVlLCB3ZWJraXQgbW96IHNwZWMpO1xuXG4gICAgLy8gMjAxMSAoSUUgMTApXG4gICAgLW1zLWZsZXgtZGlyZWN0aW9uOiAkdmFsdWU7XG59XG5cbi8vIDIwMDkgLSBib3gtbGluZXMgKHNpbmdsZSB8IG11bHRpcGxlKVxuLy8gMjAxMSAtIGZsZXgtd3JhcCAobm93cmFwIHwgd3JhcCB8IHdyYXAtcmV2ZXJzZSlcbi8vIDIwMTIgLSBmbGV4LXdyYXAgKG5vd3JhcCB8IHdyYXAgfCB3cmFwLXJldmVyc2UpXG5AbWl4aW4gZmxleC13cmFwKCR2YWx1ZTogbm93cmFwKSB7XG5cbiAgICAvLyBBbHQgdmFsdWVzLlxuICAgICRhbHQtdmFsdWU6ICR2YWx1ZTtcbiAgICBAaWYgJHZhbHVlID09IG5vd3JhcCB7XG4gICAgICAgICRhbHQtdmFsdWU6IHNpbmdsZTtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSB3cmFwIHtcbiAgICAgICAgJGFsdC12YWx1ZTogbXVsdGlwbGU7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJ3cmFwLXJldmVyc2VcIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IG11bHRpcGxlO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGJveC1saW5lcywgJGFsdC12YWx1ZSwgd2Via2l0IG1veiBzcGVjKTtcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihmbGV4LXdyYXAsICR2YWx1ZSwgd2Via2l0IG1veiBtcyBzcGVjKTtcbn1cblxuLy8gMjAwOSAtIFRPRE86IHBhcnNlIHZhbHVlcyBpbnRvIGZsZXgtZGlyZWN0aW9uL2ZsZXgtd3JhcFxuLy8gMjAxMSAtIFRPRE86IHBhcnNlIHZhbHVlcyBpbnRvIGZsZXgtZGlyZWN0aW9uL2ZsZXgtd3JhcFxuLy8gMjAxMiAtIGZsZXgtZmxvdyAoZmxleC1kaXJlY3Rpb24gfHwgZmxleC13cmFwKVxuQG1peGluIGZsZXgtZmxvdygkdmFsdWUpIHtcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihmbGV4LWZsb3csICR2YWx1ZSwgd2Via2l0IG1veiBzcGVjKTtcbn1cblxuLy8gMjAwOSAtIGJveC1vcmRpbmFsLWdyb3VwIChpbnRlZ2VyKVxuLy8gMjAxMSAtIGZsZXgtb3JkZXIgKGludGVnZXIpXG4vLyAyMDEyIC0gb3JkZXIgKGludGVnZXIpXG5AbWl4aW4gb3JkZXIoJGludDogMCkge1xuICAgIC8vIDIwMDlcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihib3gtb3JkaW5hbC1ncm91cCwgJGludCwgd2Via2l0IG1veiBzcGVjKTtcblxuICAgIC8vIDIwMTJcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihvcmRlciwgJGludCwgd2Via2l0IG1veiBzcGVjKTtcblxuICAgIC8vIDIwMTEgKElFIDEwKVxuICAgIC1tcy1mbGV4LW9yZGVyOiAkaW50O1xufVxuXG4vLyAyMDEyIC0gZmxleC1ncm93IChudW1iZXIpXG5AbWl4aW4gZmxleC1ncm93KCRudW1iZXI6IDApIHtcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihmbGV4LWdyb3csICRudW1iZXIsIHdlYmtpdCBtb3ogc3BlYyk7XG4gICAgLW1zLWZsZXgtcG9zaXRpdmU6ICRudW1iZXI7XG59XG5cbi8vIDIwMTIgLSBmbGV4LXNocmluayAobnVtYmVyKVxuQG1peGluIGZsZXgtc2hyaW5rKCRudW1iZXI6IDEpIHtcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihmbGV4LXNocmluaywgJG51bWJlciwgd2Via2l0IG1veiBzcGVjKTtcbiAgICAtbXMtZmxleC1uZWdhdGl2ZTogJG51bWJlcjtcbn1cblxuLy8gMjAxMiAtIGZsZXgtYmFzaXMgKG51bWJlcilcbkBtaXhpbiBmbGV4LWJhc2lzKCR3aWR0aDogYXV0bykge1xuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgtYmFzaXMsICR3aWR0aCwgd2Via2l0IG1veiBzcGVjKTtcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogJHdpZHRoO1xufVxuXG4vLyAyMDA5IC0gYm94LXBhY2sgKHN0YXJ0IHwgZW5kIHwgY2VudGVyIHwganVzdGlmeSlcbi8vIDIwMTEgLSBmbGV4LXBhY2sgKHN0YXJ0IHwgZW5kIHwgY2VudGVyIHwganVzdGlmeSlcbi8vIDIwMTIgLSBqdXN0aWZ5LWNvbnRlbnQgKGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmQpXG5AbWl4aW4ganVzdGlmeS1jb250ZW50ICgkdmFsdWU6IGZsZXgtc3RhcnQpIHtcblxuICAgIC8vIEFsdCB2YWx1ZXMuXG4gICAgJGFsdC12YWx1ZTogJHZhbHVlO1xuICAgIEBpZiAkdmFsdWUgPT0gXCJmbGV4LXN0YXJ0XCIge1xuICAgICAgICAkYWx0LXZhbHVlOiBzdGFydDtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcImZsZXgtZW5kXCIge1xuICAgICAgICAkYWx0LXZhbHVlOiBlbmQ7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJzcGFjZS1iZXR3ZWVuXCIge1xuICAgICAgICAkYWx0LXZhbHVlOiBqdXN0aWZ5O1xuICAgIH1cblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwic3BhY2UtYXJvdW5kXCIge1xuICAgICAgICAkYWx0LXZhbHVlOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLy8gMjAwOVxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGJveC1wYWNrLCAkYWx0LXZhbHVlLCB3ZWJraXQgbW96IHNwZWMpO1xuXG4gICAgLy8gMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGp1c3RpZnktY29udGVudCwgJHZhbHVlLCB3ZWJraXQgbW96IG1zIG8gc3BlYyk7XG5cbiAgICAvLyAyMDExIChJRSAxMClcbiAgICAtbXMtZmxleC1wYWNrOiAkYWx0LXZhbHVlO1xufVxuXG4vLyAyMDA5IC0gYm94LWFsaWduIChzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaClcbi8vIDIwMTEgLSBmbGV4LWFsaWduIChzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaClcbi8vIDIwMTIgLSBhbGlnbi1pdGVtcyAoZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgYmFzZWxpbmUgfCBzdHJldGNoKVxuQG1peGluIGFsaWduLWl0ZW1zKCR2YWx1ZTogc3RyZXRjaCkge1xuXG4gICAgJGFsdC12YWx1ZTogJHZhbHVlO1xuXG4gICAgQGlmICR2YWx1ZSA9PSBcImZsZXgtc3RhcnRcIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IHN0YXJ0O1xuICAgIH0gICAgXG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcImZsZXgtZW5kXCIge1xuICAgICAgICAkYWx0LXZhbHVlOiBlbmQ7XG4gICAgfVxuXG4gICAgLy8gMjAwOVxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGJveC1hbGlnbiwgJGFsdC12YWx1ZSwgd2Via2l0IG1veiBzcGVjKTtcblxuICAgIC8vIDIwMTJcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihhbGlnbi1pdGVtcywgJHZhbHVlLCB3ZWJraXQgbW96IG1zIG8gc3BlYyk7XG4gICAgXG4gICAgLy8gMjAxMSAoSUUgMTApXG4gICAgLW1zLWZsZXgtYWxpZ246ICRhbHQtdmFsdWU7ICAgIFxufVxuXG4vLyAyMDExIC0gZmxleC1pdGVtLWFsaWduIChhdXRvIHwgc3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2gpXG4vLyAyMDEyIC0gYWxpZ24tc2VsZiAoYXV0byB8IGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaClcbkBtaXhpbiBhbGlnbi1zZWxmKCR2YWx1ZTogYXV0bykge1xuXG4gICAgJHZhbHVlLTIwMTE6ICR2YWx1ZTtcbiAgICBAaWYgJHZhbHVlID09IFwiZmxleC1zdGFydFwiIHtcbiAgICAgICAgJHZhbHVlLTIwMTE6IHN0YXJ0O1xuICAgIH0gICAgXG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcImZsZXgtZW5kXCIge1xuICAgICAgICAkdmFsdWUtMjAxMTogZW5kO1xuICAgIH1cblxuICAgIC8vIDIwMTJcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihhbGlnbi1zZWxmLCAkdmFsdWUsIHdlYmtpdCBtb3ogc3BlYyk7XG5cbiAgICAvLyAyMDExIChJRSAxMClcbiAgICAtbXMtZmxleC1pdGVtLWFsaWduOiAkdmFsdWUtMjAxMTtcbn1cblxuLy8gMjAxMSAtIGZsZXgtbGluZS1wYWNrIChzdGFydCB8IGVuZCB8IGNlbnRlciB8IGp1c3RpZnkgfCBkaXN0cmlidXRlIHwgc3RyZXRjaClcbi8vIDIwMTIgLSBhbGlnbi1jb250ZW50IChmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBzcGFjZS1iZXR3ZWVuIHwgc3BhY2UtYXJvdW5kIHwgc3RyZXRjaClcbkBtaXhpbiBhbGlnbi1jb250ZW50KCR2YWx1ZTogc3RyZXRjaCkge1xuXG4gICAgJHZhbHVlLTIwMTE6ICR2YWx1ZTtcbiAgICBAaWYgJHZhbHVlID09IFwiZmxleC1zdGFydFwiIHtcbiAgICAgICAgJHZhbHVlLTIwMTE6IHN0YXJ0O1xuICAgIH0gICAgXG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcImZsZXgtZW5kXCIge1xuICAgICAgICAkdmFsdWUtMjAxMTogZW5kO1xuICAgIH1cblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwic3BhY2UtYmV0d2VlblwiIHtcbiAgICAgICAgJHZhbHVlLTIwMTE6IGp1c3RpZnk7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJzcGFjZS1hcm91bmRcIiB7XG4gICAgICAgICR2YWx1ZS0yMDExOiBkaXN0cmlidXRlO1xuICAgIH1cblxuICAgIC8vIDIwMTJcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihhbGlnbi1jb250ZW50LCAkdmFsdWUsIHdlYmtpdCBtb3ogc3BlYyk7XG5cbiAgICAvLyAyMDExIChJRSAxMClcbiAgICAtbXMtZmxleC1saW5lLXBhY2s6ICR2YWx1ZS0yMDExO1xufVxuXG4iLCIvLyBDb250ZW50IEJsb2NrIFNwYWNpbmcgVmFyaWFibGVzXG4kY29udGVudC1tYXJnaW46XHRcdFx0XHQwLjYyNXJlbSAhZGVmYXVsdDtcbiRjb250ZW50LXBhZGRpbmc6XHRcdFx0XHQwLjkzOHJlbSAhZGVmYXVsdDtcblxuLy8gRml4ZWQgQmxvY2sgVmFyaWFibGVzXG4kZml4ZWQtYmxvY2stZnVsbDpcdFx0XHRcdHBlcmNlbnRhZ2UoMS80KSAhZGVmYXVsdDtcbiRmaXhlZC1ibG9jay1kZXNrdG9wOlx0XHRcdHBlcmNlbnRhZ2UoMS8zKSAhZGVmYXVsdDtcbiRmaXhlZC1ibG9jay10YWJsZXQ6XHRcdFx0cGVyY2VudGFnZSgxLzIpICFkZWZhdWx0OyIsIi8vIEJvZHkgQmFzZVxuYm9keSB7XG5cdGZvbnQtc2l6ZTogJGNvcmUtZm9udC1zaXplO1xuXHRsaW5lLWhlaWdodDogJGNvcmUtbGluZS1oZWlnaHQ7XG59XG5cbi8vIEhlYWRpbmdzXG5oMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHtcblx0bWFyZ2luOiAkbGVhZGluZy1tYXJnaW4gMCAkbGVhZGluZy1tYXJnaW4gLyAyIDA7XG5cdHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG59XG5cbmgxIHtcblx0Zm9udC1zaXplOiAkaDEtZm9udC1zaXplO1xufVxuXG5oMiB7XG5cdGZvbnQtc2l6ZTogJGgyLWZvbnQtc2l6ZTtcbn1cblxuaDMge1xuXHRmb250LXNpemU6ICRoMy1mb250LXNpemU7XG59XG5cbmg0IHtcblx0Zm9udC1zaXplOiAkaDQtZm9udC1zaXplO1xufVxuXG5oNSB7XG5cdGZvbnQtc2l6ZTogJGg1LWZvbnQtc2l6ZTtcbn1cblxuaDYge1xuXHRmb250LXNpemU6ICRoNi1mb250LXNpemU7XG59XG5cbi8vIFBhcmFncmFwaFxucCB7XG5cdG1hcmdpbjogJGxlYWRpbmctbWFyZ2luIC8gMiAwICRsZWFkaW5nLW1hcmdpbiA7XG59XG5cbi8vIExpc3RzXG51bCwgb2wge1xuXHRtYXJnaW4tdG9wOiAkbGVhZGluZy1tYXJnaW47XG5cdG1hcmdpbi1ib3R0b206ICRsZWFkaW5nLW1hcmdpbjtcblx0dWwsIG9sIHtcblx0XHRtYXJnaW4tdG9wOiAwO1xuXHRcdG1hcmdpbi1ib3R0b206IDA7XG5cdH1cbn1cblxuLy8gQmxvY2txdW90ZVxuYmxvY2txdW90ZSB7XG5cdG1hcmdpbjogJGxlYWRpbmctbWFyZ2luIDA7XG4gICAgcGFkZGluZzogJGxlYWRpbmctbWFyZ2luIC8gMztcbiAgICBwOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG5jaXRlIHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGZvbnQtc2l6ZTogJGNvcmUtZm9udC1zaXplIC0gMC4xMjU7XG5cdCY6YmVmb3JlIHtcbiAgICAgIGNvbnRlbnQ6IFwiXFwyMDE0IFxcMDAyMFwiO1xuICAgIH1cbn1cblxuLy8gSW5saW5lIGFuZCBDb2RlXG5wcmUge1xuXHRtYXJnaW46ICRsZWFkaW5nLW1hcmdpbiAwO1xuIFx0cGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbn1cblxuY29kZSB7XG5cdHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG5cbi8vIEV4dHJhc1xuc21hbGwge1xuXHRmb250LXNpemU6ICRjb3JlLWZvbnQtc2l6ZSAtIDAuMTI1O1xufVxuXG5ociB7XG5cdGJvcmRlci1sZWZ0OiBub25lO1xuXHRib3JkZXItcmlnaHQ6IG5vbmU7XG5cdGJvcmRlci10b3A6IG5vbmU7XG5cdG1hcmdpbjogJGxlYWRpbmctbWFyZ2luIDA7XG59XG4iLCJmaWVsZHNldCB7XG5cdGJvcmRlcjogMDtcblx0cGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcblx0bWFyZ2luOiAwIDAgJGxlYWRpbmctbWFyZ2luIDA7XG59XG5cbmlucHV0LFxubGFiZWwsXG5zZWxlY3Qge1xuXHRkaXNwbGF5OiBibG9jaztcbn1cblxubGFiZWwge1xuXHRtYXJnaW4tYm90dG9tOiAkbGVhZGluZy1tYXJnaW4gLyA0O1xuXG5cdCYucmVxdWlyZWQ6YWZ0ZXIge1xuXHRcdGNvbnRlbnQ6IFwiKlwiO1xuXHR9XG5cblx0YWJiciB7XG5cdFx0ZGlzcGxheTogbm9uZTtcblx0fVxufVxuXG50ZXh0YXJlYSwgI3skYWxsLXRleHQtaW5wdXRzfSwgc2VsZWN0W211bHRpcGxlPW11bHRpcGxlXSB7XG5cdEBpbmNsdWRlIHRyYW5zaXRpb24oYm9yZGVyLWNvbG9yKTtcblx0Ym9yZGVyLXJhZGl1czogJGNvcmUtYm9yZGVyLXJhZGl1cztcblx0cGFkZGluZzogKCRsZWFkaW5nLW1hcmdpbiAvIDQpICgkbGVhZGluZy1tYXJnaW4gLyA0KTtcblx0d2lkdGg6IDEwMCU7XG5cblx0Jjpmb2N1cyB7XG5cdFx0b3V0bGluZTogbm9uZTtcblx0fVxufVxuXG50ZXh0YXJlYSB7XG5cdHJlc2l6ZTogdmVydGljYWw7XG59XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSwgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcblx0ZGlzcGxheTogaW5saW5lO1xuXHRtYXJnaW4tcmlnaHQ6ICRsZWFkaW5nLW1hcmdpbiAvIDQ7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcblx0d2lkdGg6IDEwMCU7XG59XG5cbnNlbGVjdCB7XG5cdHdpZHRoOiBhdXRvO1xuXHRtYXgtd2lkdGg6IDEwMCU7XG5cdG1hcmdpbi1ib3R0b206ICRsZWFkaW5nLW1hcmdpbjtcbn1cblxuYnV0dG9uLFxuaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSB7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0dXNlci1zZWxlY3Q6IG5vbmU7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cdGJvcmRlcjogaW5oZXJpdDtcbn1cbiIsIi8vIENvbnZlcnQgcGl4ZWxzIHRvIHJlbXNcbi8vIGVnLiBmb3IgYSByZWxhdGlvbmFsIHZhbHVlIG9mIDEycHggd3JpdGUgcmVtKDEyKVxuLy8gQXNzdW1lcyAkZW0tYmFzZSBpcyB0aGUgZm9udC1zaXplIG9mIDxodG1sPlxuXG5AZnVuY3Rpb24gcmVtKCRweHZhbCkge1xuICBAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuICAgICAgJHB4dmFsOiBzdHJpcC11bml0cygkcHh2YWwpO1xuICB9XG5cbiAgJGJhc2U6ICRlbS1iYXNlO1xuICBAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG4gICAgICAkYmFzZTogc3RyaXAtdW5pdHMoJGJhc2UpO1xuICB9XG4gIEByZXR1cm4gKCRweHZhbCAvICRiYXNlKSAqIDFyZW07XG59XG4iXX0= */ +*,*::before,*::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-webkit-viewport{width:device-width}@-moz-viewport{width:device-width}@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}html{font-size:100%;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent;text-decoration:none}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:.65rem;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0}pre{overflow:auto}code,kbd,pre,samp{font-size:.9rem}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0;table-layout:fixed;width:100%}tr,td,th{vertical-align:middle}th,td{padding:.375rem 0}th{text-align:left}.container{width:75em;margin:0 auto;padding:0}@media only all and (min-width: 60em) and (max-width: 74.938em){.container{width:60em}}@media only all and (min-width: 48em) and (max-width: 59.938em){.container{width:48em}}@media only all and (min-width: 30.063em) and (max-width: 47.938em){.container{width:30em}}@media only all and (max-width: 30em){.container{width:100%}}.grid{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row;-moz-flex-flow:row;flex-flow:row;list-style:none;margin:0;padding:0}@media only all and (max-width: 47.938em){.grid{-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;flex-flow:row wrap}}.block{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}@media only all and (max-width: 47.938em){.block{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 100%;-moz-flex:0 100%;-ms-flex:0 100%;flex:0 100%}}.content{margin:.625rem;padding:.938rem}@media only all and (max-width: 47.938em){body [class*="size-"]{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 100%;-moz-flex:0 100%;-ms-flex:0 100%;flex:0 100%}}.size-1-2{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 50%;-moz-flex:0 50%;-ms-flex:0 50%;flex:0 50%}.size-1-3{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 33.33333%;-moz-flex:0 33.33333%;-ms-flex:0 33.33333%;flex:0 33.33333%}.size-1-4{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 25%;-moz-flex:0 25%;-ms-flex:0 25%;flex:0 25%}.size-1-5{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 20%;-moz-flex:0 20%;-ms-flex:0 20%;flex:0 20%}.size-1-6{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 16.66667%;-moz-flex:0 16.66667%;-ms-flex:0 16.66667%;flex:0 16.66667%}.size-1-7{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 14.28571%;-moz-flex:0 14.28571%;-ms-flex:0 14.28571%;flex:0 14.28571%}.size-1-8{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 12.5%;-moz-flex:0 12.5%;-ms-flex:0 12.5%;flex:0 12.5%}.size-1-9{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 11.11111%;-moz-flex:0 11.11111%;-ms-flex:0 11.11111%;flex:0 11.11111%}.size-1-10{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 10%;-moz-flex:0 10%;-ms-flex:0 10%;flex:0 10%}.size-1-11{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 9.09091%;-moz-flex:0 9.09091%;-ms-flex:0 9.09091%;flex:0 9.09091%}.size-1-12{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 8.33333%;-moz-flex:0 8.33333%;-ms-flex:0 8.33333%;flex:0 8.33333%}@media only all and (min-width: 48em) and (max-width: 59.938em){.size-tablet-1-2{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 50%;-moz-flex:0 50%;-ms-flex:0 50%;flex:0 50%}.size-tablet-1-3{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 33.33333%;-moz-flex:0 33.33333%;-ms-flex:0 33.33333%;flex:0 33.33333%}.size-tablet-1-4{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 25%;-moz-flex:0 25%;-ms-flex:0 25%;flex:0 25%}.size-tablet-1-5{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 20%;-moz-flex:0 20%;-ms-flex:0 20%;flex:0 20%}.size-tablet-1-6{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 16.66667%;-moz-flex:0 16.66667%;-ms-flex:0 16.66667%;flex:0 16.66667%}.size-tablet-1-7{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 14.28571%;-moz-flex:0 14.28571%;-ms-flex:0 14.28571%;flex:0 14.28571%}.size-tablet-1-8{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 12.5%;-moz-flex:0 12.5%;-ms-flex:0 12.5%;flex:0 12.5%}.size-tablet-1-9{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 11.11111%;-moz-flex:0 11.11111%;-ms-flex:0 11.11111%;flex:0 11.11111%}.size-tablet-1-10{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 10%;-moz-flex:0 10%;-ms-flex:0 10%;flex:0 10%}.size-tablet-1-11{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 9.09091%;-moz-flex:0 9.09091%;-ms-flex:0 9.09091%;flex:0 9.09091%}.size-tablet-1-12{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0 8.33333%;-moz-flex:0 8.33333%;-ms-flex:0 8.33333%;flex:0 8.33333%}}@media only all and (max-width: 47.938em){@supports not (flex-wrap: wrap){.grid{display:block;-webkit-box-lines:inherit;-moz-box-lines:inherit;box-lines:inherit;-webkit-flex-wrap:inherit;-moz-flex-wrap:inherit;-ms-flex-wrap:inherit;flex-wrap:inherit}.block{display:block;-webkit-box-flex:inherit;-moz-box-flex:inherit;box-flex:inherit;-webkit-flex:inherit;-moz-flex:inherit;-ms-flex:inherit;flex:inherit}}}.first-block{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.last-block{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.fixed-blocks{-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;flex-flow:row wrap}.fixed-blocks .block{-webkit-box-flex:inherit;-moz-box-flex:inherit;box-flex:inherit;-webkit-flex:inherit;-moz-flex:inherit;-ms-flex:inherit;flex:inherit;width:25%}@media only all and (min-width: 60em) and (max-width: 74.938em){.fixed-blocks .block{width:33.33333%}}@media only all and (min-width: 48em) and (max-width: 59.938em){.fixed-blocks .block{width:50%}}@media only all and (max-width: 47.938em){.fixed-blocks .block{width:100%}}@supports not (flex-wrap: wrap){.fixed-blocks{display:block;-webkit-flex-flow:inherit;-moz-flex-flow:inherit;flex-flow:inherit}}body{font-size:.9rem;line-height:1.5}h1,h2,h3,h4,h5,h6{margin:1.5rem 0 .75rem 0;text-rendering:optimizeLegibility}h1{font-size:3.1rem}h2{font-size:2.4rem}h3{font-size:2rem}h4{font-size:1.65rem}h5{font-size:1.25rem}h6{font-size:.75rem}p{margin:.75rem 0 1.5rem}ul,ol{margin-top:1.5rem;margin-bottom:1.5rem}ul ul,ul ol,ol ul,ol ol{margin-top:0;margin-bottom:0}blockquote{margin:1.5rem 0;padding:.5rem}blockquote p:last-child{margin:0}cite{display:block;font-size:.775rem}cite:before{content:"\2014 \0020"}pre{margin:1.5rem 0;padding:.938rem}code{vertical-align:bottom}small{font-size:.775rem}hr{border-left:none;border-right:none;border-top:none;margin:1.5rem 0}fieldset{border:0;padding:.938rem;margin:0 0 1.5rem 0}input,label,select{display:block}label{margin-bottom:.375rem}label.required:after{content:"*"}label abbr{display:none}textarea,input[type="email"],input[type="number"],input[type="password"],input[type="search"],input[type="tel"],input[type="text"],input[type="url"],input[type="color"],input[type="date"],input[type="datetime"],input[type="datetime-local"],input[type="month"],input[type="time"],input[type="week"],select[multiple=multiple]{-webkit-transition:border-color;-moz-transition:border-color;transition:border-color;border-radius:.1875rem;padding:.375rem .375rem;width:100%}textarea:focus,input[type="email"]:focus,input[type="number"]:focus,input[type="password"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="text"]:focus,input[type="url"]:focus,input[type="color"]:focus,input[type="date"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,select[multiple=multiple]:focus{outline:none}textarea{resize:vertical}input[type="checkbox"],input[type="radio"]{display:inline;margin-right:.375rem}input[type="file"]{width:100%}select{width:auto;max-width:100%;margin-bottom:1.5rem}button,input[type="submit"]{cursor:pointer;user-select:none;vertical-align:middle;white-space:nowrap;border:inherit} + +/*# sourceMappingURL=nucleus.css.map */ diff --git a/themes/grav/css-compiled/preset.css b/themes/grav/css-compiled/preset.css index 52f1ac8b..9e72fa14 100644 --- a/themes/grav/css-compiled/preset.css +++ b/themes/grav/css-compiled/preset.css @@ -1,2 +1,3 @@ -body{background:#f6f6f6;color:#6f7b8a}a{color:#0090d9}a:hover{color:#007fc0}.text-gray,.text-grey{color:#b7b9bd}.text-update{color:#77559d}blockquote{border-left:10px solid #ededed;background:#fafafa}blockquote p{color:#646e7c}blockquote cite{color:#6f7b8a}code{background:#f9f2f4;color:#9c1d3d}pre{background:#f6f6f6;border:1px solid #ddd}pre code{color:#237794}hr{border-bottom:2px solid #f7f7f7}.label{background:#0090d9;color:#fff}.badge{background:#77559d;color:#fff}.light-border{border-color:#f7f7f7!important}.subtle-text{color:#8b95a1!important}td,thead th{border-bottom:1px solid #f7f7f7}tr td.gpm-details{background-color:#fafafa}.tab-bar{background:#e3e3e3;color:gray}.tab-bar li.active a,.tab-bar li.active span{background:#fff;color:#6f7b8a}.tab-bar a,.tab-bar span{color:gray}.tab-bar a:hover,.tab-bar span:hover{color:#9a9a9a;background:#fdfdfd}.button{color:rgba(255,255,255,.85);border-radius:4px;background:#0090d9}.button:focus,.button:hover{background:#26a1df;color:#fff}.button.dropdown-toggle{border-left:1px solid #007fc0}.button.dropdown-toggle{border-left:1px solid #007fc0}.button.secondary{color:rgba(255,255,255,.85);border-radius:4px;background:#0073ae}.button.secondary:focus,.button.secondary:hover{background:#2688ba;color:#fff}.button.secondary.dropdown-toggle{border-left:1px solid #006295}.button.secondary.dropdown-toggle{border-left:1px solid #006295}.button.danger{color:rgba(255,255,255,.85);border-radius:4px;background:#f45857}.button.danger:focus,.button.danger:hover{background:#cf4b4a;color:#fff}.button.danger.dropdown-toggle{border-left:1px solid #f6706f}.button-group .dropdown-menu{background-color:#0090d9;box-shadow:0 6px 12px rgba(0,0,0,.175)}.button-group .dropdown-menu .divider{background-color:#0090d9}.button-group .dropdown-menu li>a{color:#fff}.button-group .dropdown-menu li>a:focus,.button-group .dropdown-menu li>a:hover{color:#fff}.button-group .dropdown-menu li>a:focus:hover,.button-group .dropdown-menu li>a:hover:hover{background:#26a1df}.button-group .dropdown-menu.language-switcher a.active{background-color:#0daeff}#admin-main .admin-block a.gumroad-button{background:#f45857!important;color:#fff!important}#admin-login-wrapper{background:radial-gradient(circle at center,#535a6b 40%,#272a31 100%)}#admin-login{background:#3d424e}#admin-login.wide form label{color:#b7b9bd}#admin-login.wide form input::-webkit-input-placeholder{color:rgba(183,185,189,.5)}#admin-login.wide form input::-moz-placeholder{color:rgba(183,185,189,.5)}#admin-login.wide form input:-moz-placeholder{color:rgba(183,185,189,.5)}#admin-login.wide form input:-ms-input-placeholder{color:rgba(183,185,189,.5)}#admin-login .wrapper-spacer h3{color:rgba(255,255,255,.4);border-bottom:3px solid rgba(255,255,255,.1)}#admin-login .instructions,#admin-login p{color:rgba(183,185,189,.8)}#admin-login h1{background-color:#323640}#admin-login h1.text-logo{color:#fff}#admin-login h1 svg path:first-child{fill:#2b2f37}#admin-login h1 svg path:last-child{fill:rgba(255,255,255,.9)!important}#admin-login h5{color:#b7b9bd}#admin-login form input{background:#444957;color:#fff;border:1px solid #31353e}#admin-login form input::-webkit-input-placeholder{color:rgba(183,185,189,.5)}#admin-login form input::-moz-placeholder{color:rgba(183,185,189,.5)}#admin-login form input:-moz-placeholder{color:rgba(183,185,189,.5)}#admin-login form input:-ms-input-placeholder{color:rgba(183,185,189,.5)}#admin-sidebar{background:#3d424e}#admin-sidebar a{color:rgba(255,255,255,.9)}#admin-sidebar a:hover{color:#fff}#admin-logo{background-color:#323640}#admin-logo .grav-logo path{fill:rgba(255,255,255,.9)!important}#admin-logo .grav-logo:hover path{fill:#fff!important}#admin-logo a,#admin-logo i{color:#e6e6e6}#admin-logo a:hover,#admin-logo i:hover{color:#fff}#open-handle{background-color:#272a32;border-left:1px solid #3d424e}#open-handle i{color:rgba(255,255,255,.6)}#open-handle i:hover{color:rgba(255,255,255,.8)}#admin-nav-quick-tray{background:#393d48;border-bottom:1px solid #363b45;color:#fff}#admin-nav-quick-tray i:hover{color:#fff}.block-userinfo img{border:4px solid #e6e6e6}#offline-status{background-color:#77559d;color:#fff}#admin-user-details,.admin-user-details{border-bottom:1px solid #484e5c}#admin-user-details:hover img,.admin-user-details:hover img{box-shadow:0 0 0 50px #444957}#admin-user-details .admin-user-names h4,#admin-user-details .admin-user-names h5,.admin-user-details .admin-user-names h4,.admin-user-details .admin-user-names h5{color:#fff}#admin-menu li .badges .count{color:#fff;background-color:#323640}#admin-menu li .badges .updates{color:#fff;background-color:#06a599}#admin-menu li a:hover{background:#434753;color:#fff}#admin-menu li a:hover .fa{color:#fff}#admin-menu li.selected a{background:#323640;color:#fff;border-left:9px solid #007ab8}#admin-menu li.selected a .fa{color:#fff}#admin-main .grav-update{background:#77559d;color:#fff}#admin-main .grav-update a.button,#admin-main .grav-update button.button,#admin-main .grav-update span.button{color:rgba(255,255,255,.85);border-radius:4px;background:#5f447e}#admin-main .grav-update a.button:focus,#admin-main .grav-update a.button:hover,#admin-main .grav-update button.button:focus,#admin-main .grav-update button.button:hover,#admin-main .grav-update span.button:focus,#admin-main .grav-update span.button:hover{background:#513a6b;color:#fff}#admin-main .grav-update a.button.dropdown-toggle,#admin-main .grav-update button.button.dropdown-toggle,#admin-main .grav-update span.button.dropdown-toggle{border-left:1px solid #6b4d8f}#admin-main .titlebar{background:#fff;color:#3d424e}#admin-main .titlebar .button-bar .button{color:rgba(255,255,255,.85);border-radius:4px;background:#0090d9}#admin-main .titlebar .button-bar .button:focus,#admin-main .titlebar .button-bar .button:hover{background:#26a1df;color:#fff}#admin-main .titlebar .button-bar .button.dropdown-toggle{border-left:1px solid #007fc0}#admin-main .titlebar .button-bar .button.danger{color:rgba(255,255,255,.85);border-radius:4px;background:#f45857}#admin-main .titlebar .button-bar .button.danger:focus,#admin-main .titlebar .button-bar .button.danger:hover{background:#cf4b4a;color:#fff}#admin-main .titlebar .button-bar .button.danger.dropdown-toggle{border-left:1px solid #f6706f}#admin-main .titlebar .button-bar .button.success{color:rgba(255,255,255,.85);border-radius:4px;background:#77559d}#admin-main .titlebar .button-bar .button.success:focus,#admin-main .titlebar .button-bar .button.success:hover{background:#8b6fac;color:#fff}#admin-main .titlebar .button-bar .button.success.dropdown-toggle{border-left:1px solid #6a4c8c}#admin-main .titlebar .button-bar .button.success.dropdown-toggle{border-left-color:#654886}#admin-main .titlebar .button-bar .button.success+.dropdown-menu{background-color:#77559d}#admin-main .titlebar .button-bar span.button{color:rgba(255,255,255,.45);border-radius:4px;background:rgba(0,144,217,.5)}#admin-main .titlebar .button-bar span.button:focus,#admin-main .titlebar .button-bar span.button:hover{background:rgba(88,182,230,.575);color:rgba(255,255,255,.6)}#admin-main .titlebar .button-bar span.button.dropdown-toggle{border-left:1px solid rgba(0,127,192,.5)}#admin-main .lines-button{background:rgba(0,0,0,.1)}#admin-main .lines-button .lines,#admin-main .lines-button .lines:after,#admin-main .lines-button .lines:before{background:#3d424e}#admin-main .admin-block{background:#fff;color:#6f7b8a}#admin-main .admin-block a:not(.button){color:#0090d9}#admin-main .admin-block a:not(.button):hover{color:#007fc0}#admin-main .admin-block h1{color:#414147;border-bottom:1px solid #f7f7f7}#admin-main .danger.button-bar,#admin-main .success.button-bar{background:#f7f7f7}#admin-main .danger .button{color:rgba(255,255,255,.85);border-radius:4px;background:#f45857}#admin-main .danger .button:focus,#admin-main .danger .button:hover{background:#cf4b4a;color:#fff}#admin-main .danger .button.dropdown-toggle{border-left:1px solid #f6706f}#admin-main .content-padding div[class*=notifications-container] .alert.note{background:#fff;color:#6f7b8a}#admin-main .content-padding div[class*=notifications-container] .alert.note.alert{border-bottom:2px solid #f2f2f2}#admin-main .content-padding div[class*=notifications-container] .alert.note a:not(.button){color:#0090d9}#admin-main .content-padding div[class*=notifications-container] .alert.note a:not(.button):hover{color:#007fc0}#admin-main .content-padding div[class*=notifications-container] .alert.warning{background:#f45857;color:#fff}#admin-main .content-padding div[class*=notifications-container] .alert.warning.alert{border-bottom:2px solid #f2403f}#admin-main .content-padding div[class*=notifications-container] .alert.warning a{color:#fff}#admin-main .content-padding div[class*=notifications-container] .alert.warning a:hover{color:#fff}#admin-main #notifications .badge.alert.note{background:#06a599;color:#fff}#admin-main #notifications .badge.alert.warning{background:#f45857;color:#fff}.sidebar-mobile-open #admin-main .lines-button .lines,.sidebar-mobile-open #admin-main .lines-button .lines:after,.sidebar-mobile-open #admin-main .lines-button .lines:before{background:#fff}#dependency-missing{margin-bottom:1.75rem}#dependency-missing .alert{padding:1rem 1.5rem}#dependency-missing .alert h1{color:#fff;border-bottom:0;display:inline}#admin-dashboard .admin-block li{border-bottom:1px solid #f7f7f7}#admin-dashboard .primary-accent{background-color:#0078b5;background-image:-webkit-linear-gradient(#0078b5,#0090d9);background-image:linear-gradient(#0078b5,#0090d9)}#admin-dashboard .primary-accent h1{color:#fff;border-bottom:0}#admin-dashboard .primary-accent p{color:rgba(255,255,255,.95)}#admin-dashboard .primary-accent .stat i{color:rgba(255,255,255,.75)}#admin-dashboard .primary-accent .numeric em{color:rgba(255,255,255,.85)}#admin-dashboard .primary-accent .chart-loader{color:#0073ae}#admin-dashboard .secondary-accent{background-color:#058379;background-image:-webkit-linear-gradient(#058379,#06a599);background-image:linear-gradient(#058379,#06a599)}#admin-dashboard .secondary-accent h1{color:#fff;border-bottom:0}#admin-dashboard .secondary-accent p{color:rgba(255,255,255,.95)}#admin-dashboard .secondary-accent .stat i{color:rgba(255,255,255,.75)}#admin-dashboard .secondary-accent .numeric em{color:rgba(255,255,255,.85)}#admin-dashboard .secondary-accent .chart-loader{color:#05847a}.sidebar-mobile-open #admin-main .lines-button .lines,.sidebar-mobile-open #admin-main .lines-button .lines:after,.sidebar-mobile-open #admin-main .lines-button .lines:before{background:#fff}form h1,form h3{border-bottom:3px solid #f7f7f7}form h1,form h2,form h3,form h4,form h5{color:#414147}form .note{color:#f45857}form .required{color:#da4b46}form .overlay{background:#fafafa}form .overlay pre{background:#fefefe}form .form-border{border:1px solid #e6e6e6}form .form-field-colors{background-color:#fcfcfc;color:#646e7c}form .form-select-wrapper:after,form .selectize-control.single .selectize-input:after{color:#646e7c}form .selectize-control.multi .selectize-input,form .selectize-control.multi .selectize-input.active,form .selectize-control.multi .selectize-input.full,form .selectize-control.multi .selectize-input.items,form .selectize-control.single .selectize-input,form .selectize-control.single .selectize-input.active,form .selectize-control.single .selectize-input.full,form .selectize-control.single .selectize-input.items{color:#646e7c;border-color:#e6e6e6;background-color:#fcfcfc}form .selectize-control.multi .selectize-input input,form .selectize-control.single .selectize-input input{color:#646e7c}form .selectize-control.multi .selectize-input a.remove,form .selectize-control.single .selectize-input a.remove{color:#f6f6f6!important}form .form-input-wrapper .form-input-addon{border:1px solid #e6e6e6;background:#fff}form .form-input-wrapper .form-input-addon.copy-to-clipboard{background:#0090d9;color:#fff}form .form-input-wrapper .form-input-addon.copy-to-clipboard:hover{background:#007fc0}form .selectize-control.multi .selectize-input .item,form .selectize-control.multi .selectize-input .remove-single,form .selectize-control.single.plugin-remove_button .selectize-input .item,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single{color:#fff!important;background:#6f7b8a}form .selectize-control.multi .selectize-input .item.active,form .selectize-control.multi .selectize-input .remove-single.active,form .selectize-control.single.plugin-remove_button .selectize-input .item.active,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single.active{background:#06a599;color:#fff}form select{border:1px solid #e6e6e6;background:#fcfcfc;color:#646e7c}form input[type=color],form input[type=date],form input[type=email],form input[type=month],form input[type=number],form input[type=password],form input[type=tel],form input[type=text],form input[type=time],form input[type=url],form input[type=week]{border:1px solid #e6e6e6;background:#fcfcfc;color:#646e7c}form input[readonly=readonly]{background:#fff}form textarea{color:#646e7c;border:1px solid #e6e6e6;background:#fcfcfc}form .form-frontmatter-wrapper{border:1px solid #e6e6e6}form .button-bar{background:#f7f7f7}form .checkboxes label:before{background:#fcfcfc;border:1px solid #e6e6e6}form input::-webkit-input-placeholder,form select::-webkit-input-placeholder,form textarea::-webkit-input-placeholder{color:rgba(100,110,124,.4)}form input::-moz-placeholder,form select::-moz-placeholder,form textarea::-moz-placeholder{color:rgba(100,110,124,.4)}form input:-moz-placeholder,form select:-moz-placeholder,form textarea:-moz-placeholder{color:rgba(100,110,124,.4)}form input:-ms-input-placeholder,form select:-ms-input-placeholder,form textarea:-ms-input-placeholder{color:rgba(100,110,124,.4)}form .g-colorpicker{width:230px}form .g-colorpicker .g-colorpicker-preview-wrap{border-color:#e6e6e6}form .form-input-file{border:2px dashed #e6e6e6}form .form-input-file p{color:#646e7c}form .form-input-file ul{color:#fff;background:#0090d9}form .file-thumbnail-remove{background:#0090d9}form .file-thumbnail-remove .fa{color:#fff}form .file-thumbnail-remove:hover{background:#fff}form .file-thumbnail-remove:hover .fa{color:#0090d9}form input[type=range]::-webkit-slider-runnable-track{background:#fafafa;border:1px solid #e6e6e6}form input[type=range]::-webkit-slider-thumb{border:1px solid #e6e6e6;background:#0090d9}form input[type=range]:focus::-webkit-slider-runnable-track{background:#fafafa}form input[type=range]::-moz-range-track{background:#fafafa;border:1px solid #e6e6e6}form input[type=range]::-moz-range-progress{background:#fafafa}form input[type=range]::-moz-range-thumb{border:1px solid #e6e6e6;background:#0090d9}form input[type=range]::-ms-fill-lower,form input[type=range]::-ms-fill-upper{background:#fafafa;border:1px solid #e6e6e6}form input[type=range]::-ms-thumb{border:1px solid #e6e6e6;background:#0090d9}form input[type=range]:focus::-ms-fill-lower,form input[type=range]:focus::-ms-fill-upper{background:#fafafa}form .form-display-wrapper table{border:1px solid #e6e6e6}form .form-display-wrapper table th{background-color:#f5f5f5;border-bottom:3px solid #e6e6e6;border-right:1px solid #e6e6e6}form .form-display-wrapper table td{border-right:1px solid #e6e6e6}form .form-display-wrapper table tr{border-bottom:1px solid #e6e6e6}.grav-editor-resizer{background-color:#e6e6e6}.form-order-wrapper ul.orderable li{border:1px solid #e6e6e6;background:#fff;color:#6f7b8a}.form-order-wrapper ul.orderable li.drag-handle{background:#fcfcfc;color:#646e7c}.form-order-wrapper ul.orderable li[data-active-id]{border-color:#0090d9}.form-order-wrapper ul.orderable.disabled li{opacity:.7}.form-list-wrapper ul[data-collection-holder]>li{border:1px solid #e6e6e6;background:#fff;color:#8b95a1}.form-list-wrapper ul[data-collection-holder]>li .item-actions{color:#58626e}.form-list-wrapper .collection-sort{background:#fafafa;border-right:1px solid #e6e6e6}.form-fieldset{background-color:#fcfcfc;border:1px solid #e6e6e6}.form-fieldset--label{background-color:#f5f5f5}.form-fieldset input:checked+.form-fieldset--label,.form-fieldset--label:hover{background-color:#f0f0f0}#admin-main #admin-topbar{background:#e3e3e3}#admin-main .form-tabs{background:#e3e3e3}#admin-main .form-tabs.side-tabs>.tabs-nav{background:#fff}#admin-main .form-tabs.side-tabs>.tabs-nav a{color:#0090d9;cursor:pointer}#admin-main .form-tabs.side-tabs>.tabs-nav a:hover{background:#f6f6f6}#admin-main .form-tabs.side-tabs>.tabs-nav a.active{background:#f0f0f0;color:gray}#admin-main .form-tabs.side-tabs>.tabs-content{box-shadow:-20px 0 50px -40px rgba(0,0,0,.3)}#admin-main .form-tabs .tabs-nav a{color:gray}#admin-main .form-tabs .tabs-nav a:hover{color:#737373;background:#d6d6d6}#admin-main .form-tabs .tabs-nav a.active{background:#fff;color:#6f7b8a}#admin-main .form-tabs.subtle{background:#fff}#admin-main .form-tabs.subtle .tabs-nav{background:linear-gradient(to bottom,rgba(255,255,255,0),#f7f7f7)}#admin-main .form-tabs.subtle a{color:#646f7c;border:0 solid transparent;border-bottom:1px solid #e6e6e6}#admin-main .form-tabs.subtle a:hover{color:#59626e;background:linear-gradient(to bottom,rgba(255,255,255,0),#ededed)}#admin-main .form-tabs.subtle a.active{border-top:1px solid #e6e6e6;border-left:1px solid #e6e6e6;border-right:1px solid #e6e6e6;border-bottom:0}#admin-main .form-tabs.subtle a.active:hover{background:#fff}#admin-main .form-tabs.subtle a.active:first-child{border-left:0}#admin-main .form-tabs.subtle a.active:last-child{border-right:0}#admin-main .form-tabs .tabs-content{background:#fff}.switch-grav{background-color:#fcfcfc;border:1px solid #e6e6e6}.switch-grav label{color:#6f7b8a;transition:background-color .5s ease}.switch-grav.switch-toggle input.highlight:checked+label{background:#0090d9;color:#fff}.switch-grav.switch-toggle input:checked+label{color:#fff;background:#6f7b8a}.toast{background-color:#030303}.toast-success{background-color:#77559d}.toast-success .button{background:#8462aa;color:rgba(255,255,255,.85);border-radius:4px;background:#9172b3}.toast-success .button:focus,.toast-success .button:hover{background:#7b6198;color:#fff}.toast-success .button.dropdown-toggle{border-left:1px solid #9e83bc}.toast-error{background-color:#f45857}.toast-error .button{background-color:#f12827;color:rgba(255,255,255,.85);border-radius:4px;background:#d70f0e}.toast-error .button:focus,.toast-error .button:hover{background:#dd3332;color:#fff}.toast-error .button.dropdown-toggle{border-left:1px solid #bf0e0d}.toast-info{background-color:#06a599}.toast-info .button{background-color:#04746b;color:rgba(255,255,255,.85);border-radius:4px;background:#02433e}.toast-info .button:focus,.toast-info .button:hover{background:#285f5b;color:#fff}.toast-info .button.dropdown-toggle{border-left:1px solid #022a27}.info{background:#77559d;color:#fff}.info a{color:#f2f2f2}.info a:hover{color:#fff}.info a.button,.info button.button,.info span.button{color:rgba(255,255,255,.85);border-radius:4px;background:#5f447e}.info a.button:focus,.info a.button:hover,.info button.button:focus,.info button.button:hover,.info span.button:focus,.info span.button:hover{background:#513a6b;color:#fff}.info a.button.dropdown-toggle,.info button.button.dropdown-toggle,.info span.button.dropdown-toggle{border-left:1px solid #6b4d8f}.info-reverse{color:#77559d}.note,.notice{background:#06a599;color:#fff}.note a,.notice a{color:#f2f2f2}.note a:hover,.notice a:hover{color:#fff}.note a.button,.note button.button,.note span.button,.notice a.button,.notice button.button,.notice span.button{color:rgba(255,255,255,.85);border-radius:4px;background:#05847a}.note a.button:focus,.note a.button:hover,.note button.button:focus,.note button.button:hover,.note span.button:focus,.note span.button:hover,.notice a.button:focus,.notice a.button:hover,.notice button.button:focus,.notice button.button:hover,.notice span.button:focus,.notice span.button:hover{background:#047068;color:#fff}.note a.button.dropdown-toggle,.note button.button.dropdown-toggle,.note span.button.dropdown-toggle,.notice a.button.dropdown-toggle,.notice button.button.dropdown-toggle,.notice span.button.dropdown-toggle{border-left:1px solid #069d91}.note-reverse,.notice-reverse{color:#06a599}.error,.warning{background:#f45857;color:#fff}.error a,.warning a{color:#f2f2f2}.error a:hover,.warning a:hover{color:#fff}.error a.button,.error button.button,.error span.button,.warning a.button,.warning button.button,.warning span.button{color:rgba(255,255,255,.85);border-radius:4px;background:#c34646}.error a.button:focus,.error a.button:hover,.error button.button:focus,.error button.button:hover,.error span.button:focus,.error span.button:hover,.warning a.button:focus,.warning a.button:hover,.warning button.button:focus,.warning button.button:hover,.warning span.button:focus,.warning span.button:hover{background:#a63c3c;color:#fff}.error a.button.dropdown-toggle,.error button.button.dropdown-toggle,.error span.button.dropdown-toggle,.warning a.button.dropdown-toggle,.warning button.button.dropdown-toggle,.warning span.button.dropdown-toggle{border-left:1px solid #c95959}.error-reverse,.warning-reverse{color:#f45857}.primary-accent{background:#007fc0;color:#fff}.primary-accent .button-bar{background:#0078b5}.primary-accent .button{color:rgba(255,255,255,.85);border-radius:4px;background:#0090d9}.primary-accent .button:focus,.primary-accent .button:hover{background:#26a1df;color:#fff}.primary-accent .button.dropdown-toggle{border-left:1px solid #007fc0}.secondary-accent{background:#058c82;color:#fff}.secondary-accent .button-bar{background:#058379}.secondary-accent .button{color:rgba(255,255,255,.85);border-radius:4px;background:#06a599}.secondary-accent .button:focus,.secondary-accent .button:hover{background:#2bb3a8;color:#fff}.secondary-accent .button.dropdown-toggle{border-left:1px solid #058c82}.secondary-accent .button-group .dropdown-menu{background:#06a599}.secondary-accent .button-group .dropdown-menu li a:hover{background:#2bb3a8}.card-item{border:1px solid #e6e6e6;background:#fff}.card-item .gpm-actions{background:#fafafa}.card-item.active-theme{border:1px solid #06a599}.card-item.active-theme .gpm-actions{background:#06a599;color:#fff}.user-details h2{color:#414147}.user-details h2 span{color:#6f7b8a}.user-details .gravatar{color:#a7afb8}.user-details .gravatar a{color:#6f7b8a!important}#admin-main .grav-editor-toolbar .dropdown-menu{box-shadow:0 3px 6px rgba(0,0,0,.075);border:1px solid #e6e6e6;background:#fff}#admin-main .grav-editor-toolbar{border:1px solid #e6e6e6;border-top-right-radius:4px;border-top-left-radius:4px;background:#fff}#admin-main .grav-editor-toolbar ul a{color:#6f7b8a}#admin-main .grav-editor-toolbar ul a:focus,#admin-main .grav-editor-toolbar ul a:hover{background:#f7f7f7;color:#646e7c;border-top:1px solid #e6e6e6}#admin-main .grav-editor-toolbar ul .editor-active a{cursor:auto;background:#fff;border-top:1px solid #e6e6e6;border-left:1px solid #e6e6e6;border-right:1px solid #e6e6e6}#admin-main .grav-editor-toolbar ul .editor-active a:hover{background:#f7f7f7;color:#646e7c;border-top:0;border-bottom:1px solid #e6e6e6}#admin-main .grav-editor-toolbar ul .editor-active:last-child a,#admin-main .grav-editor-toolbar ul .editor-active:last-child a:hover{border-right:1px solid transparent}#admin-main .grav-editor-toolbar ul .button-disabled a{color:rgba(111,123,138,.5)}#admin-main .grav-editor-toolbar ul .button-disabled a:focus,#admin-main .grav-editor-toolbar ul .button-disabled a:hover{background:#fff;color:#6f7b8a;border-left:1px solid transparent;border-right:1px solid transparent}#admin-main .grav-editor-hide-toolbar+div{border:1px solid #e6e6e6}.grav-editor-content,.grav-editor-preview{border:1px solid #e6e6e6;border-top:0}.grav-mdeditor-content{border:1px solid #e6e6e6}[data-mode=split] .grav-mdeditor-code{border-right:1px solid #e6e6e6}.primary-accent .ct-chart .ct-series.ct-series-a .ct-bar{stroke:rgba(255,255,255,.85)!important}.primary-accent .ct-chart .ct-series.ct-series-a .ct-slice-donut{stroke:#fff!important}.primary-accent .ct-chart .ct-series.ct-series-b .ct-slice-donut{stroke:rgba(255,255,255,.2)!important}.primary-accent .ct-chart .ct-label{fill:rgba(255,255,255,.5);color:rgba(255,255,255,.5)}.primary-accent .ct-chart .ct-grid{stroke:rgba(255,255,255,.2)}.secondary-accent .ct-chart .ct-series.ct-series-a .ct-bar{stroke:rgba(255,255,255,.85)!important}.secondary-accent .ct-chart .ct-series.ct-series-a .ct-slice-donut{stroke:#fff!important}.secondary-accent .ct-chart .ct-series.ct-series-b .ct-slice-donut{stroke:rgba(255,255,255,.2)!important}.secondary-accent .ct-chart .ct-label{fill:rgba(255,255,255,.5);color:rgba(255,255,255,.5)}.secondary-accent .ct-chart .ct-grid{stroke:rgba(255,255,255,.2)}.dropzone{background:#fcfcfc;border:1px #e6e6e6 solid}.dropzone.dz-drag-hover{border-color:#ccc;background:rgba(0,0,0,.04)}.dropzone .dz-preview{border:1px solid #f2f2f2}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{color:#fff}.dropzone .dz-preview .dz-success-mark{background-color:#0daeff}.dropzone .dz-preview .dz-error-mark{background-color:#f45857}.dropzone .dz-preview .dz-progress{background:#d7d7d7}.dropzone .dz-preview .dz-progress .dz-upload{background-color:#0daeff}.dropzone .dz-preview .dz-error-message{background:#fff;color:#f45857}.dropzone .dz-preview:hover .dz-details{box-shadow:0 0 20px -5px rgba(0,0,0,.4)}.dropzone .dz-preview .dz-insert,.dropzone .dz-preview .dz-metadata,.dropzone .dz-preview .dz-remove,.dropzone .dz-preview .dz-unset,.dropzone .dz-preview .dz-view{background:#ededed}.dropzone .dz-preview .dz-insert:hover:after,.dropzone .dz-preview .dz-metadata:hover:after,.dropzone .dz-preview .dz-remove:hover:after,.dropzone .dz-preview .dz-unset:hover:after,.dropzone .dz-preview .dz-view:hover:after{color:#0090d9}.dropzone .dz-preview .dz-insert:after,.dropzone .dz-preview .dz-metadata:after,.dropzone .dz-preview .dz-remove:after,.dropzone .dz-preview .dz-unset:after,.dropzone .dz-preview .dz-view:after{color:#6f7b8a}.dropzone .dz-preview .dz-remove:hover:after{color:#f45857}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message span{color:#a7afb8}.dropzone.dz-clickable .dz-message .dz-button,.dropzone.dz-clickable .dz-message span .dz-button{background-color:#f2f2f2}.gpm>table>tbody>tr{border-bottom:1px solid #f7f7f7}.gpm>table>tbody>tr:hover{background:#fff}.gpm .gpm-name{color:#99a2ad}.gpm .gpm-version{color:#8b95a1}.gpm .badge.update,.gpm .gpm-ribbon{background:#77559d}.gpm .badge.update,.gpm .badge.update a,.gpm .gpm-ribbon,.gpm .gpm-ribbon a{color:#fff!important}.gpm .badge.update a:hover,.gpm .badge.update:hover,.gpm .gpm-ribbon a:hover,.gpm .gpm-ribbon:hover{background:#654885}.gpm .gpm-update .gpm-name{color:#0090d9}.gpm .gpm-item-info{border-bottom:3px solid #f7f7f7}.gpm .gpm-item-info .gpm-item-icon{color:#fafafa}.gpm .gpm-actions .disabled{color:#8b95a1}.gpm .gpm-testing{background-color:#06a599;color:#fff}.pages-list{border-top:1px solid #f7f7f7}.pages-list .row{border-bottom:1px solid #f7f7f7}.pages-list .row:hover{background:#fff}.pages-list .row p.page-route{color:#6f7b8a}.pages-list .row p.page-route .spacer{color:#6f7b8a}.pages-list .row .badge.lang{background-color:#e3e3e3;color:gray}.pages-list .row .badge.lang.info{background-color:#77559d;color:#fff}.pages-list .page-home{color:#8b95a1}.pages-list .page-info{color:#8b95a1}#admin-topbar #admin-lang-toggle{z-index:3}#admin-topbar #admin-lang-toggle button{color:rgba(255,255,255,.85);border-radius:4px;background:#77559d}#admin-topbar #admin-lang-toggle button:focus,#admin-topbar #admin-lang-toggle button:hover{background:#8b6fac;color:#fff}#admin-topbar #admin-lang-toggle button.dropdown-toggle{border-left:1px solid #6a4c8c}#admin-topbar #admin-lang-toggle .dropdown-menu{background:#77559d}#admin-topbar .switch-grav{background-color:#fdfdfd}#admin-topbar .switch-toggle input:checked+label{color:#fff}#admin-topbar .switch-toggle input+label{color:gray;background:#d6d6d6}#admin-topbar .switch-toggle input.highlight:checked+label{background:#0090d9}body .selectize-dropdown .optgroup-header{color:#000;border-bottom:1px solid #eee;background-color:#fafafa}body .bootstrap-datetimepicker-widget.dropdown-menu.bottom{background-color:#fcfcfc;color:#646e7c;border-color:#e6e6e6}body .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-bottom-color:#e6e6e6}body .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-bottom-color:#fcfcfc}body .bootstrap-datetimepicker-widget table td span:hover,body .bootstrap-datetimepicker-widget table td.day:hover,body .bootstrap-datetimepicker-widget table th:hover{background:#f5f5f5!important}body .bootstrap-datetimepicker-widget table td.active,body .bootstrap-datetimepicker-widget table td.active:hover{background-color:#77559d!important;color:#fff!important}.scheduler-content pre{background:#fafafa;border-color:#e6e6e6}.scheduler-content pre code{color:#414147}#phpinfo th{background:#fcfcfc}#phpinfo td{word-wrap:break-word}#phpinfo td:first-child{color:#414147}.remodal{background:#fff;color:#6f7b8a}.remodal-close{color:#6f7b8a}.remodal-close:focus,.remodal-close:hover{color:#424951}*{scrollbar-width:thin;scrollbar-color:rgba(111,123,138,.4) #fff}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:#fff}::-webkit-scrollbar-thumb{background-color:rgba(111,123,138,.4)}.simplebar-scrollbar:before{background-color:#6f7b8a}#admin-sidebar .simplebar-scrollbar:before{background-color:#b7b9bd}#page-filtering .page-shortcuts .button{color:rgba(255,255,255,.85);border-radius:4px;background:rgba(100,110,124,.5)}#page-filtering .page-shortcuts .button:focus,#page-filtering .page-shortcuts .button:hover{background:rgba(153,160,169,.575);color:#fff}#page-filtering .page-shortcuts .button.dropdown-toggle{border-left:1px solid rgba(88,98,110,.5)}.reports-content .report-output table thead tr th{background-color:#fafafa;color:#414147}.preview-wrapper iframe{border:1px solid #eee}#backups-stats .backups-usage-wrapper>div{background:linear-gradient(-90deg,#006ea6 0,#005d8d 100%)}#backups-stats .backups-usage-wrapper>div.full{background:linear-gradient(-90deg,#f2403f 0,#8f0a09 100%)}.logs-output table.noflex td.level .badge.alert,.logs-output table.noflex td.level .badge.critical,.logs-output table.noflex td.level .badge.error{background-color:#dc3023;color:#fff}.logs-output table.noflex td.level .badge.notice,.logs-output table.noflex td.level .badge.warning{background-color:#e08a1e;color:#fff}.logs-output table.noflex td.level .badge.debug{background-color:#26a65b;color:#fff}.logs-output table.noflex td.level .badge.info{background-color:#22a7f0;color:#fff}.logs-output table.noflex td.level .badge.emergency{background-color:#8e44ad;color:#fff}.permission-container{overflow:hidden}[data-grav-field=parents] .form-input-wrapper:hover{color:#0090d9}.grav-loader,.grav-loader:after{border-radius:50%;width:10em;height:10em}.grav-loader{margin:60px auto;font-size:10px;position:relative;text-indent:-9999em;border-top:1.1em solid rgba(111,123,138,.2);border-right:1.1em solid rgba(111,123,138,.2);border-bottom:1.1em solid rgba(111,123,138,.2);border-left:1.1em solid #6f7b8a;transform:translateZ(0);animation:gravloader 1.1s infinite linear}@-webkit-keyframes gravloader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes gravloader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}input[type=range].rangefield{display:inline-block;vertical-align:middle;-webkit-appearance:none;margin:10px 0;width:230px;background:0 0}input[type=range].rangefield:focus{outline:0}input[type=range].rangefield::-webkit-slider-runnable-track{width:230px;height:20px;cursor:pointer;animate:.2s;border-radius:25px}input[type=range].rangefield::-webkit-slider-thumb{height:24px;width:35px;border-radius:6px;cursor:pointer;-webkit-appearance:none;margin-top:-3px}input[type=range].rangefield::-moz-focus-outer{border:0}input[type=range].rangefield::-moz-range-track{width:230px;height:20px;cursor:pointer;animate:.2s;border-radius:25px}input[type=range].rangefield::-moz-range-progress{height:20px;border-radius:25px}input[type=range].rangefield::-moz-range-thumb{height:24px;width:35px;border-radius:6px;cursor:pointer}input[type=range].rangefield::-ms-track{width:230px;height:20px;cursor:pointer;animate:.2s;background:0 0;border-color:transparent;color:transparent}input[type=range].rangefield input[type=range]::-ms-fill-upper,input[type=range].rangefield::-ms-fill-lower{border-radius:50px}input[type=range].rangefield::-ms-thumb{height:24px;width:35px;border-radius:6px;cursor:pointer}input[type=range].rangefield~input[type=number].rangefield{background:0 0;display:inline-block;width:60px;text-align:right;border:0;line-height:16px;vertical-align:middle;padding:0 0 0 5px}span.range-append{display:inline-block;line-height:20px;vertical-align:middle;margin-left:-3px}#pages-filters{background:#3d424e;color:rgba(183,185,189,.9)}#pages-filters .button-border{color:#b7b9bd;border-radius:4px;border:1px solid #535a6b;color:#b7b9bd!important}#pages-filters .button-border:hover{border-color:#6d7381;color:#b7b9bd}#pages-filters .button-border.dropdown-toggle{border-left:1px solid #484e5c}#pages-filters .filters-bar input{color:#fff;border-color:#585f70;background-color:#4a515f}#pages-filters .filters-bar input::-webkit-input-placeholder{color:rgba(183,185,189,.5)}#pages-filters .filters-bar input::-moz-placeholder{color:rgba(183,185,189,.5)}#pages-filters .filters-bar input:-moz-placeholder{color:rgba(183,185,189,.5)}#pages-filters .filters-bar input:-ms-input-placeholder{color:rgba(183,185,189,.5)}#pages-filters .filters-advanced fieldset{border:1px solid #484e5c}#pages-filters .filters-advanced fieldset legend{background:#3d424e;color:#b7b9bd;font-weight:700}#pages-filters form .checkboxes label:before{background-color:#4f5565;border-color:#585f70;color:#fff}#pages-columns{background:#fff;border-top:1px solid rgba(230,230,230,.5)}#pages-columns.fjs-container .fjs-col{border-right:1px solid rgba(230,230,230,.5);border-bottom:1px solid rgba(230,230,230,.5)}#pages-columns .fjs-item:hover .fjs-info>b{color:#0090d9}#pages-columns .fjs-item:hover .fjs-action-toggle,#pages-columns .fjs-item:hover .fjs-children{color:#0090d9!important}#pages-columns .fjs-item .fjs-icon{background-color:#999;box-shadow:0 0 0 1px #fff}#pages-columns .fjs-item .fjs-icon.home{background-color:#2980b9}#pages-columns .fjs-item .fjs-icon.visible{background-color:#3498db}#pages-columns .fjs-item .fjs-icon.lock{background-color:#e67e22}#pages-columns .fjs-item .fjs-icon.modular{background-color:#9b59b6}#pages-columns .fjs-item .fjs-icon:after{border:1px solid #fff}#pages-columns .fjs-item .fjs-icon.badge-published:after{background-color:#27ae60}#pages-columns .fjs-item .fjs-icon.badge-unpublished:after{background-color:#e74c3c}#pages-columns .fjs-item .fjs-icon .badge-lang{background-color:#dedede;color:#737373;border:1px solid #fff}#pages-columns .fjs-item .fjs-icon .badge-lang.translated{background-color:#77559d;color:#fff}#pages-columns .fjs-item .fjs-icon .badge-lang.not-available{background-color:#323640;color:#fff}#pages-columns .fjs-item .fjs-info>b{color:#6f7b8a}#pages-columns .fjs-item .fjs-info>em{color:#8b95a1}#pages-columns .fjs-item .fjs-actions .child-count{background-color:#e6e6e6;color:#6f7b8a}#pages-columns .fjs-item .fjs-action-toggle{color:#0090d9}#pages-columns .fjs-item .fjs-action-toggle,#pages-columns .fjs-item .fjs-children{color:rgba(111,123,138,.5);border-radius:4px;border:1px solid #e6e6e6}#pages-columns .fjs-item .fjs-action-toggle:hover,#pages-columns .fjs-item .fjs-children:hover{border-color:#c3c3c3;color:rgba(111,123,138,.5)}#pages-columns .fjs-item .fjs-action-toggle.dropdown-toggle,#pages-columns .fjs-item .fjs-children.dropdown-toggle{border-left:1px solid #f2f2f2}#pages-columns .fjs-item .fjs-action-toggle:hover,#pages-columns .fjs-item .fjs-children:hover{border-color:#d9d9d9}#pages-columns .fjs-item>a{position:relative}#pages-columns .fjs-item.fjs-active>.fjs-item-wrapper{background-color:#f5f5f5}#pages-columns .fjs-item.fjs-active>.fjs-item-wrapper a{background:0 0}#pages-columns .fjs-item.filters-hit>.fjs-item-wrapper{background-color:#ffffeb}#pages-columns .fjs-item.filters-hit.fjs-active>.fjs-item-wrapper{background-color:#ffffd6}#pages-columns .tags .tag{margin:0 .15rem}#pages-columns .tags .tag-published{background-color:#219e0d}#pages-columns .tags .tag-visible{background-color:#018fd9}#pages-columns .tags .tag-non-routable{background-color:#ff392a}#pages-columns .langs .badge{align-items:center;background-color:#dedede;color:#737373}#pages-columns .langs .lang:hover .badge{background-color:#0090d9;color:#f6f6f6}#pages-columns .langs .lang-translated .fa{color:#219e0d}#pages-columns .langs .lang-non-translated .fa{color:#ff392a}#pages-columns .dropdown-menu{background-color:#f2f2f2!important}#pages-columns .dropdown-menu .divider{border-top:1px solid #e6e6e6}#pages-columns .dropdown-menu td,#pages-columns .dropdown-menu thead th{border-bottom:1px solid #e6e6e6}#pages-columns .dropdown-menu .dropdown-item{color:#6f7b8a;background-color:inherit}#pages-columns .dropdown-menu .dropdown-item:hover{color:#0090d9;background-color:#ebebeb!important}#pages-columns .dropdown-menu .dropdown-item.danger .fa{color:#f45857}#pages-columns .dropdown-menu .dropdown-item.danger:hover{background-color:#f45857!important}#pages-columns .dropdown-menu .dropdown-item.danger:hover .fa{color:#fff}#pages-columns .dropdown-menu .action-bar{background:#ececec}#pages-columns .dropdown-menu .action-bar a{color:#6f7b8a}#pages-columns .dropdown-menu .action-bar a:hover{background:#f6f6f6!important;color:#0090d9!important}#pages-columns .dropdown-menu .fa{color:#999}#pages-columns .dropdown-menu a:not(.lang):hover .fa{color:#0090d9}#pages-columns .dropdown-menu .infos tr td{color:#6f7b8a}#pages-columns .dropdown-menu .infos tr td:first-child{color:#8b95a1}#pages-content-wrapper .fjs-path-bar{background-color:#fff}.breadcrumb-node:hover span{text-decoration:none;color:#0090d9}.breadcrumb-node>i:not(.fa){background-color:#999;box-shadow:0 0 0 1px #fff}.breadcrumb-node>i:not(.fa).home{background-color:#2980b9}.breadcrumb-node>i:not(.fa).visible{background-color:#3498db}.breadcrumb-node>i:not(.fa).lock{background-color:#e67e22}.breadcrumb-node>i:not(.fa).modular{background-color:#9b59b6}[data-remodal-id].parents-container form>h1{border-bottom:1px solid #e6e6e6}[data-remodal-id].parents-container .fjs-col{border-right:1px solid #e6e6e6}[data-remodal-id].parents-container .fjs-item a{color:#0090d9}.parents-content.fjs-container .fjs-active{background-color:#f5f5f5}.permissions-container .switch-toggle input.label0:checked+label{color:#fff;background:#c0392b!important}.permissions-container .switch-toggle input.label1:checked+label{color:#fff;background-color:#3d9970!important}.permissions-container .badge.badge-denied{background:#c0392b!important}.permissions-container .badge.badge-access{background-color:#3d9970!important}.permissions-container .badge.badge-super{background-color:#8e44ad!important}.permissions-container fieldset{border:1px solid #e6e6e6}.permissions-container fieldset legend{background-color:#fff;color:#414147}.permissions-container fieldset fieldset legend{border-bottom:1px solid #e6e6e6}.permissions-container .crudp-container .checkboxes.toggleable label{border-color:#e6e6e6;background-color:#fcfcfc}.permissions-container .crudp-container .checkboxes input[type=checkbox]+label:before{color:rgba(111,123,138,.3)}.permissions-container .crudp-container .checkboxes[data-_check-status="1"] input[type=checkbox]+label{background-color:#3d9970;color:#fff}.permissions-container .crudp-container .checkboxes[data-_check-status="1"] input[type=checkbox]+label:before{color:#fff}.permissions-container .crudp-container .checkboxes[data-_check-status="2"] input[type=checkbox]+label{background-color:#c0392b;color:#fff}.permissions-container .crudp-container .checkboxes[data-_check-status="2"] input[type=checkbox]+label:before{color:#fff}.permission-container .permission-name span:not(.badge){background-color:#fff}.permission-container .permission-name span.badge{border:2px solid #fff}.icon-set{background:#fff}.jqCron-cross,.jqCron-selector-title{border:1px solid #e6e6e6}.jqCron-container.disable .jqCron-cross:hover,.jqCron-container.disable .jqCron-selector-title:hover,.jqCron-cross,.jqCron-selector-title{background:#fcfcfc;border-color:#e6e6e6}.jqCron-cross:hover,.jqCron-selector-title:hover{background-color:#e3e3e3}.jqCron-selector-list{background-color:#e3e3e3;border:1px solid #e6e6e6}.jqCron-selector-list li.selected{background:#0090d9;color:#fff}.jqCron-selector-list li:hover{background:#fcfcfc}.jqCron-error .jqCron-selector-title{background:#f45857;border:1px solid #f12827;color:#fff}.jqCron-container.disable *{color:#363c43}.jqCron-container.disable .jqCron-selector-title{background:#fff!important} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXNldC5zY3NzIiwiY29uZmlndXJhdGlvbi90ZW1wbGF0ZS9fY29sb3JzLnNjc3MiLCJ0ZW1wbGF0ZS9tb2R1bGVzL19idXR0b25zLnNjc3MiLCJjb25maWd1cmF0aW9uL3RlbXBsYXRlL192YXJpYWJsZXMuc2NzcyIsInRlbXBsYXRlL21vZHVsZXMvX2JvdXJib25fZXNzZW50aWFscy5zY3NzIiwidGVtcGxhdGUvbW9kdWxlcy9fc2Nyb2xsYmFycy5zY3NzIiwidGVtcGxhdGUvbW9kdWxlcy9faW5wdXQtcmFuZ2Uuc2NzcyIsInRlbXBsYXRlL19jb2xvcnMuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnSUEsS0FDSSxXQXhHNEIsUUF5RzVCLE1BeEc0QixRQXlHL0IsRUFHRyxNQTNHNEIsUUEwR2hDLFFBR1EsTUFBTyxRQUNWLFdBR08sV0FDUixNQWhJNEIsUUFpSS9CLGFBR0csTUFsRzRCLFFBbUcvQixXQUlHLFlBQWEsS0FBSyxNQUFNLFFBQ3hCLFdBQVksUUFGaEIsYUFJUSxNQUFPLFFBSmYsZ0JBT1EsTUFsSXdCLFFBbUkzQixLQUlELFdDeEpXLFFEeUpYLE1BQU8sUUFDVixJQUdHLFdDM0pVLFFENEpWLE9BQVEsSUFBSSxNQ3BLQyxLRGtLakIsU0FJUSxNQy9KUSxRRGdLWCxHQUlELGNBQWUsSUFBSSxNQXJEUCxRQXNEZixPQUdHLFdBdko0QixRQXdKNUIsTUNsTFUsS0RtTGIsT0FHRyxXQXhJNEIsUUF5STVCLE1BeEk0QixLQXlJL0IsY0FHRyxhQW5FWSxrQkFvRWYsYUFHRyxNQXRFYyxrQkF1RWpCLEdBR0csU0FDQSxjQUFlLElBQUksTUE1RVAsUUE2RWYsa0JBS1csaUJBQWtCLFFBQ3JCLFNBTUwsV0EvSzRCLFFBZ0w1QixNQS9LNEIsS0E2S2hDLHFCQUFBLHdCQU9nQixXQTFMZ0IsS0EyTGhCLE1BMUxnQixRQWtMaEMsV0FBQSxjQWNRLE1BM0x3QixLQTZLaEMsaUJBQUEsb0JBZ0JZLE1BQU8sUUFDUCxXQUFZLFFBQ2YsUUVq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QlAwckVkLDJDQWlCWSxXT25xRU8sa0JQa3BFbkIsMkNBcUJZLGlCTy9zRUUsa0JQMHJFZCwwQ0F3QlksaUJPdHJFSSxrQlA4cEVoQixnQ0E2QlEsT0FBUSxJQUFJLE1BM21FRixRQThrRWxCLHVDQWdDWSxpQkFyc0VvQixLQXNzRXBCLE1BbHNFb0IsUUFpcUVoQyxnREFzQ2dCLGNBQWUsSUFBSSxNQXBuRWpCLFFBOGtFbEIscUVBK0NnQixhQTduRUUsUUE4bkVGLGlCQTduRUksUUE2a0VwQixzRkFxRFksTUF6dEVvQixxQkFvcUVoQyx1R0F3RFksaUJPbHZFRSxRUG12RUYsTUMzdkVFLEtEa3NFZCw4R0EyRGdCLE1DN3ZFRixLRGtzRWQsdUdBK0RZLGlCT2p0RU8sUVBrdEVQLE1DbHdFRSxLRGtzRWQsOEdBa0VnQixNQ3B3RUYsS0Rxd0VELHdEQU9ELGlCQS91RW9CLEtBNHVFaEMsa0RBTVksT0FBUSxJQUFJLE1BbHZFUSxLQW12RXZCLFVBTUwsV0FBWSxLQUNmLGNBS0QsdUJBQ0ksT0FBUSxJQUFJLE1BenFFRSxRQTBxRWpCLDhDQUVELHVEQUNBLGNBQ0EsdUJBQ0ksV0E5cUVnQixRQStxRWhCLGFBaHJFYyxRQWlyRWpCLG9CQUVELDZCQUNJLGlCQUFrQixRQUNyQixzQkFFRyxpQkFBa0IsUUFDbEIsT0FBUSxJQUFJLE1BeHJFRSxRQXlyRWpCLGtDQUVHLFdBendFNEIsUUEwd0U1QixNQXp3RTRCLEtBMHdFL0IsK0JBRUcsV0E5ckVnQixRQStyRW5CLHFDQUVHLFdBcHdFNEIsUUFxd0U1QixPQUFRLElBQUksTUFBTSxRQUNsQixNQXJ3RTRCLEtBc3dFL0IsNEJBRUcsTUFBTyxRQUNWLGlEQUVHLFdBanlFNEIiLCJmaWxlIjoicHJlc2V0LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExvYWQgVGhpcmQgUGFydHkgTGlicmFyaWVzXG5AaW1wb3J0IFwiY29uZmlndXJhdGlvbi90ZW1wbGF0ZS9iYXNlXCI7XG5AaW1wb3J0IFwidGVtcGxhdGUvbW9kdWxlcy9zY3JvbGxiYXJzXCI7XG5AaW1wb3J0IFwidGVtcGxhdGUvbW9kdWxlcy9ib3VyYm9uX2Vzc2VudGlhbHNcIjtcbkBpbXBvcnQgXCJ0ZW1wbGF0ZS9tb2R1bGVzL2J1dHRvbnNcIjtcbkBpbXBvcnQgXCJ0ZW1wbGF0ZS9jb2xvcnNcIjtcblxuLy8gTG9nb1xuJGxvZ28tYmc6ICAgICAgICAgICAgICAgICAgICAgICAjMzIzNjQwICFkZWZhdWx0O1xuJGxvZ28tbGluazogICAgICAgICAgICAgICAgICAgICAjRkZGRkZGICFkZWZhdWx0O1xuXG4vLyBOYXZcbiRuYXYtYmc6ICAgICAgICAgICAgICAgICAgICAgICAgIzNENDI0RSAhZGVmYXVsdDtcbiRuYXYtdGV4dDogICAgICAgICAgICAgICAgICAgICAgI0I3QjlCRCAhZGVmYXVsdDtcbiRuYXYtbGluazogICAgICAgICAgICAgICAgICAgICAgI2ZmZmZmZiAhZGVmYXVsdDtcbiRuYXYtc2VsZWN0ZWQtYmc6ICAgICAgICAgICAgICAgIzMyMzY0MCAhZGVmYXVsdDtcbiRuYXYtc2VsZWN0ZWQtbGluazogICAgICAgICAgICAgI2ZmZmZmZiAhZGVmYXVsdDtcbiRuYXYtaG92ZXItYmc6ICAgICAgICAgICAgICAgICAgIzQzNDc1MyAhZGVmYXVsdDtcbiRuYXYtaG92ZXItbGluazogICAgICAgICAgICAgICAgI2ZmZmZmZiAhZGVmYXVsdDtcblxuLy8gVG9vbGJhclxuJHRvb2xiYXItYmc6ICAgICAgICAgICAgICAgICAgICAjZmZmZmZmICFkZWZhdWx0O1xuJHRvb2xiYXItdGV4dDogICAgICAgICAgICAgICAgICAjM0Q0MjRFICFkZWZhdWx0O1xuXG4vLyBQYWdlXG4kcGFnZS1iZzogICAgICAgICAgICAgICAgICAgICAgICNGNkY2RjYgIWRlZmF1bHQ7XG4kcGFnZS10ZXh0OiAgICAgICAgICAgICAgICAgICAgICM2ZjdiOGEgIWRlZmF1bHQ7XG4kcGFnZS1saW5rOiAgICAgICAgICAgICAgICAgICAgICMwMDkwRDkgIWRlZmF1bHQ7XG5cbi8vIENvbnRlbnRcbiRjb250ZW50LWJnOiAgICAgICAgICAgICAgICAgICAgI2ZmZmZmZiAhZGVmYXVsdDtcbiRjb250ZW50LXRleHQ6ICAgICAgICAgICAgICAgICAgIzZmN2I4YSAhZGVmYXVsdDtcbiRjb250ZW50LWxpbms6ICAgICAgICAgICAgICAgICAgIzAwOTBEOSAhZGVmYXVsdDtcbiRjb250ZW50LWxpbmsyOiAgICAgICAgICAgICAgICAgI2RhNGI0NiAhZGVmYXVsdDtcbiRjb250ZW50LWhlYWRlcjogICAgICAgICAgICAgICAgIzQxNDE0NyAhZGVmYXVsdDtcbiRjb250ZW50LXRhYnMtYmc6ICAgICAgICAgICAgICAgI2UzZTNlMyAhZGVmYXVsdDtcbiRjb250ZW50LXRhYnMtdGV4dDogICAgICAgICAgICAgIzgwODA4MCAhZGVmYXVsdDtcblxuLy8gQnV0dG9uc1xuJGJ1dHRvbi1iZzogICAgICAgICAgICAgICAgICAgICAjMDA5MEQ5ICFkZWZhdWx0O1xuJGJ1dHRvbi10ZXh0OiAgICAgICAgICAgICAgICAgICAjZmZmZmZmICFkZWZhdWx0O1xuXG4vLyBOb3RpY2VcbiRub3RpY2UtYmc6ICAgICAgICAgICAgICAgICAgICAgIzA2QTU5OSAhZGVmYXVsdDtcbiRub3RpY2UtdGV4dDogICAgICAgICAgICAgICAgICAgI2ZmZmZmZiAhZGVmYXVsdDtcblxuLy8gVXBkYXRlc1xuJHVwZGF0ZS1iZzogICAgICAgICAgICAgICAgICAgICAjNzc1NTlEICFkZWZhdWx0O1xuJHVwZGF0ZS10ZXh0OiAgICAgICAgICAgICAgICAgICAjZmZmZmZmICFkZWZhdWx0O1xuXG4vLyBDcml0aWNhbFxuJGNyaXRpY2FsLWJnOiAgICAgICAgICAgICAgICAgICAjRjQ1ODU3ICFkZWZhdWx0O1xuJGNyaXRpY2FsLXRleHQ6ICAgICAgICAgICAgICAgICAjZmZmZmZmICFkZWZhdWx0O1xuXG4vLyBDYWxjdWxhdGVkIHZhbHVlc1xuJHByaW1hcnktYWNjZW50OiAgICAgICAgICAgICAgICBidXR0b24gICAhZGVmYXVsdDtcbiRzZWNvbmRhcnktYWNjZW50OiAgICAgICAgICAgICAgbm90aWNlICAgIWRlZmF1bHQ7XG4kdGVydGlhcnktYWNjZW50OiAgICAgICAgICAgICAgIGNyaXRpY2FsICFkZWZhdWx0O1xuXG4vLyBJbml0aWFsIHZhbHVlc1xuJHByaW1hcnktYWNjZW50LWJnOiAgICAgICAgICAgICAkbm90aWNlLWJnO1xuJHByaW1hcnktYWNjZW50LWZnOiAgICAgICAgICAgICAkbm90aWNlLXRleHQ7XG4kc2Vjb25kYXJ5LWFjY2VudC1iZzogICAgICAgICAgICRub3RpY2UtYmc7XG4kc2Vjb25kYXJ5LWFjY2VudC1mZzogICAgICAgICAgICRub3RpY2UtdGV4dDtcbiR0ZXJ0aWFyeS1hY2NlbnQtYmc6ICAgICAgICAgICAgJG5vdGljZS1iZztcbiR0ZXJ0aWFyeS1hY2NlbnQtZmc6ICAgICAgICAgICAgJG5vdGljZS10ZXh0O1xuXG4kZWxlbWVudC1tYXA6IChcbiAgICBidXR0b246ICRidXR0b24tYmcgJGJ1dHRvbi10ZXh0LFxuICAgIG5vdGljZTogJG5vdGljZS1iZyAkbm90aWNlLXRleHQsXG4gICAgY29udGVudDogJGNvbnRlbnQtYmcgJGNvbnRlbnQtdGV4dCxcbiAgICB0YWJzOiAkY29udGVudC10YWJzLWJnICRjb250ZW50LXRhYnMtdGV4dCxcbiAgICB1cGRhdGU6ICR1cGRhdGUtYmcgICR1cGRhdGUtdGV4dCxcbiAgICBjcml0aWNhbDogJGNyaXRpY2FsLWJnICRjcml0aWNhbC10ZXh0LFxuICAgIHBhZ2U6ICRwYWdlLWJnICRwYWdlLXRleHQsXG4gICAgbmF2OiAkbmF2LWJnICRuYXYtdGV4dCxcbiAgICB0b29sYmFyOiAkdG9vbGJhci1iZyAkdG9vbGJhci10ZXh0LFxuICAgIGxvZ286ICRsb2dvLWJnICRsb2dvLWxpbmtcbik7XG5cbi8vIFNldCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG5AZWFjaCAkZWxlbWVudCwgJGVsZW1lbnQtcGFydHMgaW4gJGVsZW1lbnQtbWFwIHtcbiAgICBAaWYgJHByaW1hcnktYWNjZW50ID09ICRlbGVtZW50IHtcbiAgICAgICAgJHByaW1hcnktYWNjZW50LWJnOiBudGgoJGVsZW1lbnQtcGFydHMsIDEpO1xuICAgICAgICAkcHJpbWFyeS1hY2NlbnQtZmc6IG50aCgkZWxlbWVudC1wYXJ0cywgMik7XG4gICAgfVxufVxuXG5AZWFjaCAkZWxlbWVudCwgJGVsZW1lbnQtcGFydHMgaW4gJGVsZW1lbnQtbWFwIHtcbiAgICBAaWYgJHNlY29uZGFyeS1hY2NlbnQgPT0gJGVsZW1lbnQge1xuICAgICAgICAkc2Vjb25kYXJ5LWFjY2VudC1iZzogbnRoKCRlbGVtZW50LXBhcnRzLCAxKTtcbiAgICAgICAgJHNlY29uZGFyeS1hY2NlbnQtZmc6IG50aCgkZWxlbWVudC1wYXJ0cywgMik7XG4gICAgfVxufVxuXG5AZWFjaCAkZWxlbWVudCwgJGVsZW1lbnQtcGFydHMgaW4gJGVsZW1lbnQtbWFwIHtcbiAgICBAaWYgJHRlcnRpYXJ5LWFjY2VudCA9PSAkZWxlbWVudCB7XG4gICAgICAgICR0ZXJ0aWFyeS1hY2NlbnQtYmc6IG50aCgkZWxlbWVudC1wYXJ0cywgMSk7XG4gICAgICAgICR0ZXJ0aWFyeS1hY2NlbnQtZmc6IG50aCgkZWxlbWVudC1wYXJ0cywgMik7XG4gICAgfVxufVxuXG4kZm9ybS1ib3JkZXI6ICNmMDA7XG4kZm9ybS1maWVsZC1iZzogIzAwZjtcbiRmb3JtLWZpZWxkLXRleHQ6ICMwZjA7XG4kdW5kZXJsaW5lOiAjZmYwO1xuJHN1YnRsZS10ZXh0OiAjMGZmO1xuJGlyLXNsaWRlci1iZzogI2YwZjtcblxuQGlmIChsaWdodG5lc3MoJGNvbnRlbnQtYmcpIDwgNTApIHtcbiAgICAkZm9ybS1ib3JkZXI6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDEwJSk7XG4gICAgJGZvcm0tZmllbGQtYmc6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDElKTtcbiAgICAkaXItc2xpZGVyLWJnOiBsaWdodGVuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgJGZvcm0tZmllbGQtdGV4dDogbGlnaHRlbigkY29udGVudC10ZXh0LCA1JSk7XG4gICAgJHVuZGVybGluZTogbGlnaHRlbigkY29udGVudC1iZywgMyUpO1xuICAgICRzdWJ0bGUtdGV4dDogZGFya2VuKCRjb250ZW50LXRleHQsIDEwJSk7XG59IEBlbHNlIHtcbiAgICAkZm9ybS1ib3JkZXI6IGRhcmtlbigkY29udGVudC1iZywgMTAlKTtcbiAgICAkZm9ybS1maWVsZC1iZzogZGFya2VuKCRjb250ZW50LWJnLCAxJSk7XG4gICAgJGlyLXNsaWRlci1iZzogZGFya2VuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgJGZvcm0tZmllbGQtdGV4dDogZGFya2VuKCRjb250ZW50LXRleHQsIDUlKTtcbiAgICAkdW5kZXJsaW5lOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDMlKTtcbiAgICAkc3VidGxlLXRleHQ6IGxpZ2h0ZW4oJGNvbnRlbnQtdGV4dCwgMTAlKTtcbn1cblxuJGZvcm0tYm9yZGVyLXdpZHRoOiAxcHg7XG5cbi8vIENvcmVcbmJvZHkge1xuICAgIGJhY2tncm91bmQ6ICRwYWdlLWJnO1xuICAgIGNvbG9yOiAkcGFnZS10ZXh0O1xufVxuXG5hIHtcbiAgICBjb2xvcjogJHBhZ2UtbGluaztcbiAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IGRhcmtlbigkcGFnZS1saW5rLCA1JSk7XG4gICAgfVxufVxuXG4udGV4dC1ncmF5LCAudGV4dC1ncmV5IHtcbiAgICBjb2xvcjogJG5hdi10ZXh0O1xufVxuXG4udGV4dC11cGRhdGUge1xuICAgIGNvbG9yOiAkdXBkYXRlLWJnO1xufVxuXG4vLyBUeXBvZ3JhcGh5XG5ibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogMTBweCBzb2xpZCBkYXJrZW4oJGNvbnRlbnQtYmcsIDclKTtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDIlKTtcbiAgICBwIHtcbiAgICAgICAgY29sb3I6IGRhcmtlbigkcGFnZS10ZXh0LCA1JSk7XG4gICAgfVxuICAgIGNpdGUge1xuICAgICAgICBjb2xvcjogJHBhZ2UtdGV4dDtcbiAgICB9XG59XG5cbmNvZGUge1xuICAgIGJhY2tncm91bmQ6ICRjb2RlLWJnO1xuICAgIGNvbG9yOiBkYXJrZW4oJGNvZGUtdGV4dCwxMCUpO1xufVxuXG5wcmUge1xuICAgIGJhY2tncm91bmQ6ICRwcmUtYmc7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGNvcmUtYm9yZGVyLWNvbG9yO1xuICAgIGNvZGUge1xuICAgICAgICBjb2xvcjogJHByZS10ZXh0O1xuICAgIH1cbn1cblxuaHIge1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkdW5kZXJsaW5lO1xufVxuXG4ubGFiZWwge1xuICAgIGJhY2tncm91bmQ6ICRwYWdlLWxpbms7XG4gICAgY29sb3I6ICR3aGl0ZTtcbn1cblxuLmJhZGdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkdXBkYXRlLWJnO1xuICAgIGNvbG9yOiAkdXBkYXRlLXRleHQ7XG59XG5cbi5saWdodC1ib3JkZXIge1xuICAgIGJvcmRlci1jb2xvcjogJHVuZGVybGluZSAhaW1wb3J0YW50O1xufVxuXG4uc3VidGxlLXRleHQge1xuICAgIGNvbG9yOiAkc3VidGxlLXRleHQgIWltcG9ydGFudDtcbn1cblxuLy8gVGFibGVzXG50ZCwgdGhlYWQgdGgge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkdW5kZXJsaW5lO1xufVxuXG50ciB7XG4gICAgdGQge1xuICAgICAgICAmLmdwbS1kZXRhaWxzIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY29udGVudC1iZywyJSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFRhYnNcbi50YWItYmFyIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC10YWJzLWJnO1xuICAgIGNvbG9yOiAkY29udGVudC10YWJzLXRleHQ7XG5cbiAgICBsaSB7XG4gICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgIHNwYW4sIGEge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC10ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3BhbiwgYSB7XG4gICAgICAgIGNvbG9yOiAkY29udGVudC10YWJzLXRleHQ7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6IGxpZ2h0ZW4oJGNvbnRlbnQtdGFicy10ZXh0LCAxMCUpO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29udGVudC10YWJzLWJnLDEwJSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gQnV0dG9uc1xuLmJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKCRidXR0b24tYmcpO1xuXG4gICAgJi5kcm9wZG93bi10b2dnbGUge1xuICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGRhcmtlbigkYnV0dG9uLWJnLCA1JSk7XG4gICAgfVxuXG4gICAgJi5zZWNvbmRhcnkge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3Ioc2hhZGUoJGJ1dHRvbi1iZywgMjAlKSk7XG5cbiAgICAgICAgJi5kcm9wZG93bi10b2dnbGUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oc2hhZGUoJGJ1dHRvbi1iZywgMjAlKSwgNSUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5kYW5nZXIge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3IoJGNyaXRpY2FsLWJnKTtcbiAgICB9XG59XG5cbi5idXR0b24tZ3JvdXAge1xuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJ1dHRvbi1iZztcbiAgICAgICAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIC4xNzUpO1xuXG4gICAgICAgIC5kaXZpZGVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRidXR0b24tYmc7XG4gICAgICAgIH1cblxuICAgICAgICBsaSA+IGEge1xuICAgICAgICAgICAgY29sb3I6ICRidXR0b24tdGV4dDtcblxuICAgICAgICAgICAgJjpmb2N1cywgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRidXR0b24tdGV4dDtcbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdGludCgkYnV0dG9uLWJnLDE1JSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5sYW5ndWFnZS1zd2l0Y2hlciB7XG4gICAgICAgICAgICBhLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkYnV0dG9uLWJnLCAxMCUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiAuYWRtaW4tYmxvY2sgYS5ndW1yb2FkLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZDogJGNyaXRpY2FsLWJnICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICRjcml0aWNhbC10ZXh0ICFpbXBvcnRhbnQ7XG59XG5cblxuI2FkbWluLWxvZ2luLXdyYXBwZXIge1xuICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgY2VudGVyLCBsaWdodGVuKCRuYXYtYmcsIDEwJSkgNDAlLCBkYXJrZW4oJG5hdi1iZywgMTAlKSAxMDAlKTtcbn1cblxuI2FkbWluLWxvZ2luIHtcbiAgICBiYWNrZ3JvdW5kOiAkbmF2LWJnO1xuXG4gICAgJi53aWRlIGZvcm0ge1xuXG4gICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2LXRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCB7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgkbmF2LXRleHQsIDAuNSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC53cmFwcGVyLXNwYWNlciB7XG4gICAgICAgIGgzIHtcbiAgICAgICAgICAgIGNvbG9yOiByZ2JhKHdoaXRlLCAwLjQpO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHJnYmEoJG5hdi1saW5rLCAwLjEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmluc3RydWN0aW9ucywgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKCRuYXYtdGV4dCwwLjgpO1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGxvZ28tYmc7XG5cbiAgICAgICAgJi50ZXh0LWxvZ28ge1xuICAgICAgICAgICAgY29sb3I6ICRsb2dvLWxpbms7XG4gICAgICAgIH1cblxuICAgICAgICBzdmcge1xuICAgICAgICAgICAgcGF0aDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgZmlsbDogZGFya2VuKCRsb2dvLWJnLCAzJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIGZpbGw6IHJnYmEoJGxvZ28tbGluaywgMC45KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaDUge1xuICAgICAgICBjb2xvcjogJG5hdi10ZXh0O1xuICAgIH1cblxuICAgIGZvcm0ge1xuICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRuYXYtYmcsIDMlKTtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2LWxpbms7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBzaGFkZSgkbmF2LWJnLCAyMCUpO1xuICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKCRuYXYtdGV4dCwgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuI2FkbWluLXNpZGViYXIge1xuICAgIGJhY2tncm91bmQ6ICRuYXYtYmc7XG4gICAgYSB7XG4gICAgICAgIGNvbG9yOiByZ2JhKCRuYXYtbGluaywgMC45KTtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogJG5hdi1saW5rO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tbG9nbyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGxvZ28tYmc7XG5cbiAgICAuZ3Jhdi1sb2dvIHtcbiAgICAgICAgcGF0aCB7XG4gICAgICAgICAgICBmaWxsOiByZ2JhKCRsb2dvLWxpbmssIDAuOSkgIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgcGF0aCB7XG4gICAgICAgICAgICAgICAgZmlsbDogJGxvZ28tbGluayAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGEsIGkge1xuICAgICAgICBjb2xvcjogc2hhZGUoJGxvZ28tbGluaywgMTAlKTtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBjb2xvcjogJGxvZ28tbGluaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuI29wZW4taGFuZGxlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGxvZ28tYmcsIDUlKTtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGxpZ2h0ZW4oJGxvZ28tYmcsIDUlKTtcblxuICAgIGkge1xuICAgICAgICBjb2xvcjogcmdiYSgkbG9nby1saW5rLCAwLjYpO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiByZ2JhKCRsb2dvLWxpbmssIDAuOCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNhZG1pbi1uYXYtcXVpY2stdHJheSB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRuYXYtYmcsIDIlKTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKCRuYXYtYmcsIDMlKTtcbiAgICBjb2xvcjogJG5hdi1saW5rO1xuXG4gICAgaTpob3ZlciB7XG4gICAgICAgIEBpZiAobGlnaHRuZXNzKCRuYXYtYmcpIDwgNTApIHtcbiAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKCRuYXYtbGluaywgMTAlKTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBjb2xvcjogZGFya2VuKCRuYXYtbGluaywgMTAlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmJsb2NrLXVzZXJpbmZvIHtcbiAgICBpbWcge1xuICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgfVxufVxuI29mZmxpbmUtc3RhdHVzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdXBkYXRlLWJnO1xuICAgIGNvbG9yOiAkdXBkYXRlLXRleHQ7XG59XG5cbiNhZG1pbi11c2VyLWRldGFpbHMsIC5hZG1pbi11c2VyLWRldGFpbHMge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBsaWdodGVuKCRuYXYtYmcsIDUlKTtcblxuICAgICY6aG92ZXIgaW1nIHtcbiAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCAwIDUwcHggbGlnaHRlbigkbmF2LWJnLCAzJSk7XG4gICAgfVxuXG4gICAgLmFkbWluLXVzZXItbmFtZXMge1xuICAgICAgICBoNCwgaDUge1xuICAgICAgICAgICAgY29sb3I6ICRuYXYtbGluaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuI2FkbWluLW1lbnUge1xuICAgIGxpIHtcbiAgICAgICAgLmJhZGdlcyB7XG4gICAgICAgICAgICAuY291bnQge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkbmF2LWxpbms7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRuYXYtYmcsIDUlKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudXBkYXRlcyB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRub3RpY2UtdGV4dDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbm90aWNlLWJnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYSB7XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2LWhvdmVyLWJnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkbmF2LWhvdmVyLWxpbms7XG5cbiAgICAgICAgICAgICAgICAuZmEge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJG5hdi1ob3Zlci1saW5rO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYuc2VsZWN0ZWQge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJG5hdi1zZWxlY3RlZC1iZztcbiAgICAgICAgICAgICAgICBjb2xvcjogJG5hdi1zZWxlY3RlZC1saW5rO1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA5cHggc29saWQgc2hhZGUoJGJ1dHRvbi1iZywgMTUlKTtcblxuICAgICAgICAgICAgICAgIC5mYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkbmF2LXNlbGVjdGVkLWxpbms7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiB7XG5cbiAgICAuZ3Jhdi11cGRhdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkdXBkYXRlLWJnO1xuICAgICAgICBjb2xvcjogJHVwZGF0ZS10ZXh0O1xuICAgICAgICBhLmJ1dHRvbiwgc3Bhbi5idXR0b24sIGJ1dHRvbi5idXR0b24ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKHNoYWRlKCR1cGRhdGUtYmcsIDIwJSksICR1cGRhdGUtdGV4dCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAudGl0bGViYXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkdG9vbGJhci1iZztcbiAgICAgICAgY29sb3I6ICR0b29sYmFyLXRleHQ7XG4gICAgICAgIC5idXR0b24tYmFyIHtcbiAgICAgICAgICAgIC5idXR0b24ge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1jb2xvcigkYnV0dG9uLWJnLCAkYnV0dG9uLXRleHQsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICYuZGFuZ2VyIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKCRjcml0aWNhbC1iZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5zdWNjZXNzIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKCR1cGRhdGUtYmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBkYXJrZW4oJHVwZGF0ZS1iZywgNyUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgJiArIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR1cGRhdGUtYmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLmJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKHJnYmEoJGJ1dHRvbi1iZywgMC41KSwgcmdiYSgkYnV0dG9uLXRleHQsIDAuNikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmxpbmVzLWJ1dHRvbiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoJGJsYWNrLCAwLjEpOyAvLyBtb3ZlIHRoaXNcbiAgICAgICAgLmxpbmVzLCAubGluZXM6YmVmb3JlLCAubGluZXM6YWZ0ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHRvb2xiYXItdGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5hZG1pbi1ibG9jayB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnO1xuICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcblxuICAgICAgICBhOm5vdCguYnV0dG9uKSAge1xuICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LWxpbms7XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogZGFya2VuKCRjb250ZW50LWxpbmssIDUlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC1oZWFkZXI7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHVuZGVybGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vLmJ1dHRvbiB7XG4gICAgICAgIC8vICAgIEBpbmNsdWRlIGJ1dHRvbi1jb2xvcigkYnV0dG9uLWJnKTtcbiAgICAgICAgLy99XG4gICAgfVxuXG4gICAgLmRhbmdlciwgLnN1Y2Nlc3Mge1xuICAgICAgICAmLmJ1dHRvbi1iYXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRjb250ZW50LWJnLCAzJSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZGFuZ2VyIHtcbiAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3IoJGNyaXRpY2FsLWJnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE5vdGlmaWNhdGlvbnNcbiAgICAuY29udGVudC1wYWRkaW5nIHtcbiAgICAgICAgZGl2W2NsYXNzKj1ub3RpZmljYXRpb25zLWNvbnRhaW5lcl0ge1xuXG4gICAgICAgICAgICAuYWxlcnQubm90ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtYmc7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LXRleHQ7XG5cbiAgICAgICAgICAgICAgICAmLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGRhcmtlbigkY29udGVudC1iZywgNSUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGE6bm90KC5idXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LWxpbms7XG4gICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtlbigkY29udGVudC1saW5rLCA1JSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hbGVydC53YXJuaW5nIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkY3JpdGljYWxfYmc7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjcml0aWNhbF90ZXh0O1xuXG4gICAgICAgICAgICAgICAgJi5hbGVydCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBkYXJrZW4oJGNyaXRpY2FsX2JnLCA1JSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkY3JpdGljYWxfdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogbGlnaHRlbigkY3JpdGljYWxfdGV4dCwgMTAlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICNub3RpZmljYXRpb25zIHtcbiAgICAgICAgLmJhZGdlLmFsZXJ0IHtcbiAgICAgICAgICAgICYubm90ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJG5vdGljZS1iZztcbiAgICAgICAgICAgICAgICBjb2xvcjogJG5vdGljZS10ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi53YXJuaW5nIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkY3JpdGljYWxfYmc7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjcml0aWNhbF90ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG59XG5cbi5zaWRlYmFyLW1vYmlsZS1vcGVuIHtcbiAgICAjYWRtaW4tbWFpbiB7XG4gICAgICAgIC5saW5lcy1idXR0b24ge1xuICAgICAgICAgICAgLmxpbmVzLCAubGluZXM6YmVmb3JlLCAubGluZXM6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICRsb2dvLWxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNkZXBlbmRlbmN5LW1pc3Npbmcge1xuICAgIG1hcmdpbi1ib3R0b206IDEuNzVyZW07XG5cbiAgICAuYWxlcnQge1xuICAgICAgICBwYWRkaW5nOiAxcmVtIDEuNXJlbTtcbiAgICAgICAgaDEge1xuICAgICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNhZG1pbi1kYXNoYm9hcmQge1xuXG4gICAgLmFkbWluLWJsb2NrIHtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR1bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG4gICAgLnByaW1hcnktYWNjZW50IHtcbiAgICAgICAgQGluY2x1ZGUgbGluZWFyLWdyYWRpZW50KGRhcmtlbigkcHJpbWFyeS1hY2NlbnQtYmcsIDclKSwgJHByaW1hcnktYWNjZW50LWJnKTtcblxuICAgICAgICBoMSB7XG4gICAgICAgICAgICBjb2xvcjogJHByaW1hcnktYWNjZW50LWZnO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHAge1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoJHByaW1hcnktYWNjZW50LWZnLCAwLjk1KTtcbiAgICAgICAgfVxuICAgICAgICAuc3RhdCB7XG4gICAgICAgICAgICBpIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgkcHJpbWFyeS1hY2NlbnQtZmcsIDAuNzUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC5udW1lcmljIHtcbiAgICAgICAgICAgIGVtIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgkcHJpbWFyeS1hY2NlbnQtZmcsIC44NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuY2hhcnQtbG9hZGVyIHtcbiAgICAgICAgICAgIGNvbG9yOiBzaGFkZSgkcHJpbWFyeS1hY2NlbnQtYmcsIDIwJSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2Vjb25kYXJ5LWFjY2VudCB7XG4gICAgICAgIEBpbmNsdWRlIGxpbmVhci1ncmFkaWVudChkYXJrZW4oJHNlY29uZGFyeS1hY2NlbnQtYmcsIDclKSwgJHNlY29uZGFyeS1hY2NlbnQtYmcpO1xuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGNvbG9yOiAkc2Vjb25kYXJ5LWFjY2VudC1mZztcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGNvbG9yOiByZ2JhKCRzZWNvbmRhcnktYWNjZW50LWZnLCAwLjk1KTtcbiAgICAgICAgfVxuICAgICAgICAuc3RhdCB7XG4gICAgICAgICAgICBpIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgkc2Vjb25kYXJ5LWFjY2VudC1mZywgMC43NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLm51bWVyaWMge1xuICAgICAgICAgICAgZW0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiByZ2JhKCRzZWNvbmRhcnktYWNjZW50LWZnLCAuODUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmNoYXJ0LWxvYWRlciB7XG4gICAgICAgICAgICBjb2xvcjogc2hhZGUoJHNlY29uZGFyeS1hY2NlbnQtYmcsIDIwJSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuXG4uc2lkZWJhci1tb2JpbGUtb3BlbiB7XG4gICAgI2FkbWluLW1haW4ge1xuICAgICAgICAubGluZXMtYnV0dG9uIHtcbiAgICAgICAgICAgIC5saW5lcywgLmxpbmVzOmJlZm9yZSwgLmxpbmVzOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkbG9nby1saW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBGb3Jtc1xuZm9ybSB7XG4gICAgaDEsIGgzIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICR1bmRlcmxpbmU7XG4gICAgfVxuXG4gICAgaDEsIGgyLCBoMywgaDQsIGg1IHtcbiAgICAgICAgY29sb3I6ICRjb250ZW50LWhlYWRlcjtcbiAgICB9XG5cbiAgICAubm90ZSB7XG4gICAgICAgIGNvbG9yOiAkY3JpdGljYWwtYmc7XG4gICAgfVxuXG4gICAgLnJlcXVpcmVkIHtcbiAgICAgICAgY29sb3I6ICRjb250ZW50LWxpbmsyO1xuICAgIH1cblxuICAgIC5vdmVybGF5IHtcbiAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRjb250ZW50LWJnLCAyJSk7XG5cbiAgICAgICAgcHJlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJHByZS1iZywgMyUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZvcm0tYm9yZGVyIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgIH1cblxuICAgIC5mb3JtLWZpZWxkLWNvbG9ycyB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLWZpZWxkLWJnO1xuICAgICAgICBjb2xvcjogJGZvcm0tZmllbGQtdGV4dDtcbiAgICB9XG5cbiAgICAuZm9ybS1zZWxlY3Qtd3JhcHBlciwgLnNlbGVjdGl6ZS1jb250cm9sLnNpbmdsZSAuc2VsZWN0aXplLWlucHV0IHtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBjb2xvcjogJGZvcm0tZmllbGQtdGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zZWxlY3RpemUtY29udHJvbCB7XG4gICAgICAgICYuc2luZ2xlLCAmLm11bHRpIHtcbiAgICAgICAgICAgIC5zZWxlY3RpemUtaW5wdXQge1xuICAgICAgICAgICAgICAgICYsICYuZnVsbCwgJi5pdGVtcywgJi5hY3RpdmUge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGZvcm0tZmllbGQtdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLWZpZWxkLWJnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkZm9ybS1maWVsZC10ZXh0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEucmVtb3ZlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRwYWdlLWJnICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZvcm0taW5wdXQtd3JhcHBlciB7XG4gICAgICAgIC5mb3JtLWlucHV0LWFkZG9uIHtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnO1xuXG4gICAgICAgICAgICAmLmNvcHktdG8tY2xpcGJvYXJkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWJnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYnV0dG9uLXRleHQ7XG5cbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRidXR0b24tYmcsIDUlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUucGx1Z2luLXJlbW92ZV9idXR0b24gLnNlbGVjdGl6ZS1pbnB1dCxcbiAgICAuc2VsZWN0aXplLWNvbnRyb2wubXVsdGkgLnNlbGVjdGl6ZS1pbnB1dCB7XG4gICAgICAgIC5pdGVtLCAucmVtb3ZlLXNpbmdsZSB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtYmcgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LXRleHQ7XG4gICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJG5vdGljZS1iZztcbiAgICAgICAgICAgICAgICBjb2xvcjogJG5vdGljZS10ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0IHtcbiAgICAgICAgYm9yZGVyOiAkZm9ybS1ib3JkZXItd2lkdGggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkZm9ybS1maWVsZC1iZztcbiAgICAgICAgY29sb3I6ICRmb3JtLWZpZWxkLXRleHQ7XG4gICAgfVxuXG4gICAgaW5wdXRbdHlwZT10ZXh0XSxcbiAgICBpbnB1dFt0eXBlPXBhc3N3b3JkXSxcbiAgICBpbnB1dFt0eXBlPWVtYWlsXSxcbiAgICBpbnB1dFt0eXBlPWRhdGVdLFxuICAgIGlucHV0W3R5cGU9dGVsXSxcbiAgICBpbnB1dFt0eXBlPXRpbWVdLFxuICAgIGlucHV0W3R5cGU9d2Vla10sXG4gICAgaW5wdXRbdHlwZT1tb250aF0sXG4gICAgaW5wdXRbdHlwZT1udW1iZXJdLFxuICAgIGlucHV0W3R5cGU9Y29sb3JdLFxuICAgIGlucHV0W3R5cGU9dXJsXSB7XG4gICAgICAgIGJvcmRlcjogJGZvcm0tYm9yZGVyLXdpZHRoIHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgYmFja2dyb3VuZDogJGZvcm0tZmllbGQtYmc7XG4gICAgICAgIGNvbG9yOiAkZm9ybS1maWVsZC10ZXh0O1xuICAgIH1cblxuICAgIGlucHV0W3JlYWRvbmx5PXJlYWRvbmx5XSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnO1xuICAgIH1cblxuICAgIHRleHRhcmVhIHtcbiAgICAgICAgY29sb3I6ICRmb3JtLWZpZWxkLXRleHQ7XG4gICAgICAgIGJvcmRlcjogJGZvcm0tYm9yZGVyLXdpZHRoIHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgYmFja2dyb3VuZDogJGZvcm0tZmllbGQtYmc7XG4gICAgfVxuXG4gICAgLmZvcm0tZnJvbnRtYXR0ZXItd3JhcHBlciB7XG4gICAgICAgIGJvcmRlcjogJGZvcm0tYm9yZGVyLXdpZHRoIHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICB9XG5cbiAgICAuYnV0dG9uLWJhciB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGZvcm0tYm9yZGVyLDclKTtcbiAgICB9XG5cbiAgICAuY2hlY2tib3hlcyB7XG4gICAgICAgIGxhYmVsOmJlZm9yZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkZm9ybS1maWVsZC1iZztcbiAgICAgICAgICAgIGJvcmRlcjogJGZvcm0tYm9yZGVyLXdpZHRoIHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IHtcbiAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgY29sb3I6IHJnYmEoJGZvcm0tZmllbGQtdGV4dCwgMC40KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5nLWNvbG9ycGlja2VyIHtcbiAgICAgICAgd2lkdGg6IDIzMHB4O1xuICAgICAgICAuZy1jb2xvcnBpY2tlci1wcmV2aWV3LXdyYXAge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAkZm9ybS1ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQge1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZm9ybS1pbnB1dC1maWxlIHtcbiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICRmb3JtLWJvcmRlcjtcblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGNvbG9yOiAkZm9ybS1maWVsZC10ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgdWwge1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5LWFjY2VudC1mZztcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWFjY2VudC1iZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5maWxlLXRodW1ibmFpbC1yZW1vdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWJnO1xuXG4gICAgICAgIC5mYSB7XG4gICAgICAgICAgICBjb2xvcjogJGJ1dHRvbi10ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLXRleHQ7XG4gICAgICAgICAgICAuZmEge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYnV0dG9uLWJnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmFuZ2VcbiAgICBpbnB1dFt0eXBlPXJhbmdlXSB7XG4gICAgICAgICY6Oi13ZWJraXQtc2xpZGVyLXJ1bm5hYmxlLXRyYWNrIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRpci1zbGlkZXItYmc7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgIH1cbiAgICAgICAgJjo6LXdlYmtpdC1zbGlkZXItdGh1bWIge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1iZztcbiAgICAgICAgfVxuICAgICAgICAmOmZvY3VzOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkaXItc2xpZGVyLWJnO1xuICAgICAgICB9XG4gICAgICAgICY6Oi1tb3otcmFuZ2UtdHJhY2sge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGlyLXNsaWRlci1iZztcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgfVxuICAgICAgICAmOjotbW96LXJhbmdlLXByb2dyZXNzIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRpci1zbGlkZXItYmc7XG4gICAgICAgIH1cbiAgICAgICAgJjo6LW1vei1yYW5nZS10aHVtYiB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWJnO1xuICAgICAgICB9XG4gICAgICAgICY6Oi1tcy1maWxsLWxvd2VyLCAmOjotbXMtZmlsbC11cHBlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkaXItc2xpZGVyLWJnO1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICB9XG4gICAgICAgICY6Oi1tcy10aHVtYiB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWJnO1xuICAgICAgICB9XG4gICAgICAgICY6Zm9jdXM6Oi1tcy1maWxsLWxvd2VyLCAmOmZvY3VzOjotbXMtZmlsbC11cHBlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkaXItc2xpZGVyLWJnO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBEaXNwbGF5IFJFU0VUXG5mb3JtIHtcbiAgICAuZm9ybS1kaXNwbGF5LXdyYXBwZXIge1xuXG4gICAgICAgIHRhYmxlIHtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcblxuICAgICAgICAgICAgdGgge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oJGZvcm0tYm9yZGVyLCA2JSk7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgICRmb3JtLWJvcmRlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cblxuLmdyYXYtZWRpdG9yLXJlc2l6ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRmb3JtLWJvcmRlcjtcbiAgICAvL0BpbmNsdWRlIGxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoMjEzLDIxMywyMTMsMSkgMCUsIHJnYmEoMjEzLDIxMywyMTMsMSkgMjAlLCByZ2JhKDIzNywyMzcsMjM3LDEpIDIwJSwgcmdiYSgyMzcsMjM3LDIzNywxKSA0MCUsIHJnYmEoMjEzLDIxMywyMTMsMSkgNDAlLCByZ2JhKDIxMywyMTMsMjEzLDEpIDYwJSwgcmdiYSgyMzcsMjM3LDIzNywxKSA2MCUsIHJnYmEoMjM3LDIzNywyMzcsMSkgODAlLCByZ2JhKDIxMywyMTMsMjEzLDEpIDgwJSwgcmdiYSgyMTMsMjEzLDIxMywxKSAxMDAlKTtcbn1cblxuLmZvcm0tb3JkZXItd3JhcHBlciB7XG4gICAgdWwub3JkZXJhYmxlIHtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcblxuICAgICAgICAgICAgJi5kcmFnLWhhbmRsZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGZvcm0tZmllbGQtYmc7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRmb3JtLWZpZWxkLXRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICZbZGF0YS1hY3RpdmUtaWRdIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICRjb250ZW50LWxpbms7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgICYuZGlzYWJsZWQgbGkge1xuICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uZm9ybS1saXN0LXdyYXBwZXIge1xuICAgIHVsW2RhdGEtY29sbGVjdGlvbi1ob2xkZXJdIHtcbiAgICAgICAgPiBsaSB7XG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb250ZW50LWJnLCA0JSk7XG4gICAgICAgICAgICBjb2xvcjogbGlnaHRlbigkY29udGVudC10ZXh0LCAxMCUpO1xuXG4gICAgICAgICAgICAuaXRlbS1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogZGFya2VuKCRjb250ZW50LXRleHQsIDEwJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY29sbGVjdGlvbi1zb3J0IHtcbiAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICB9XG59XG5cbi5mb3JtLWZpZWxkc2V0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDElKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG59XG5cbi5mb3JtLWZpZWxkc2V0LS1sYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LWJnLCA0JSk7XG5cbiAgICAmOmhvdmVyLFxuICAgIC5mb3JtLWZpZWxkc2V0IGlucHV0OmNoZWNrZWQgKyAmIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LWJnLCA2JSk7XG4gICAgfVxufVxuI2FkbWluLW1haW4ge1xuXG4gICAgI2FkbWluLXRvcGJhciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LXRhYnMtYmc7XG4gICAgfVxuXG4gICAgLmZvcm0tdGFicyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LXRhYnMtYmc7XG5cbiAgICAgICAgJi5zaWRlLXRhYnMge1xuICAgICAgICAgICAgPiAudGFicy1uYXYge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnO1xuXG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC1saW5rO1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgJjpob3ZlciAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHBhZ2UtYmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29udGVudC10YWJzLWJnLCA1JSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGFicy10ZXh0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA+IC50YWJzLWNvbnRlbnQge1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IC0yMHB4IDAgNTBweCAtNDBweCByZ2JhKCMwMDAsIDAuMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAudGFicy1uYXYge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LXRhYnMtdGV4dDtcbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IGRhcmtlbigkY29udGVudC10YWJzLXRleHQsIDUlKTtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRjb250ZW50LXRhYnMtYmcsNSUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtYmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC10ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYuc3VidGxlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnO1xuXG4gICAgICAgICAgICAudGFicy1uYXYge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoJGNvbnRlbnQtYmcsMCksIHNoYWRlKCRjb250ZW50LWJnLDMlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBzaGFkZSgkY29udGVudC10ZXh0LCAxMCUpO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMCBzb2xpZCB0cmFuc3BhcmVudDtcblxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogc2hhZGUoJGNvbnRlbnQtdGV4dCwgMjAlKTtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgkY29udGVudC1iZywwKSwgc2hhZGUoJGNvbnRlbnQtYmcsNyUpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuXG4gICAgICAgICAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtYmc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuXG4gICAgICAgIC50YWJzLWNvbnRlbnQge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtYmc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuXG5cbi5zd2l0Y2gtZ3JhdiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tZmllbGQtYmc7XG4gICAgYm9yZGVyOiAkZm9ybS1ib3JkZXItd2lkdGggc29saWQgJGZvcm0tYm9yZGVyO1xuXG4gICAgbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjVzIGVhc2U7XG4gICAgfVxuXG4gICAgJi5zd2l0Y2gtdG9nZ2xlIGlucHV0LmhpZ2hsaWdodDpjaGVja2VkICsgbGFiZWwge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWJnO1xuICAgICAgICBjb2xvcjogJGJ1dHRvbi10ZXh0O1xuICAgIH1cblxuICAgICYuc3dpdGNoLXRvZ2dsZSBpbnB1dDpjaGVja2VkICsgbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbnRlbnQtYmc7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LXRleHQ7XG4gICAgfVxuXG59XG5cbi8vIFRvYXN0ZXJcbi50b2FzdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzAzMDMwMztcbn1cbi50b2FzdC1zdWNjZXNzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdXBkYXRlLWJnO1xuXG4gICAgLmJ1dHRvbiB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJHVwZGF0ZS1iZywgNSUpO1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3IobGlnaHRlbigkdXBkYXRlLWJnLCAxMCUpKTtcbiAgICB9XG5cbn1cbi50b2FzdC1lcnJvciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGNyaXRpY2FsLWJnO1xuXG4gICAgLmJ1dHRvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY3JpdGljYWwtYmcsIDEwKTtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKGRhcmtlbigkY3JpdGljYWwtYmcsIDIwKSk7XG4gICAgfVxufVxuLnRvYXN0LWluZm8ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRub3RpY2UtYmc7XG5cbiAgICAuYnV0dG9uIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRub3RpY2UtYmcsIDEwKTtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKGRhcmtlbigkbm90aWNlLWJnLCAyMCkpO1xuICAgIH1cbn1cblxuLy8gSW5mb1xuLmluZm8ge1xuICAgIGJhY2tncm91bmQ6ICR1cGRhdGUtYmc7XG4gICAgY29sb3I6ICR1cGRhdGUtdGV4dDtcblxuICAgIGEge1xuICAgICAgICBjb2xvcjogZGFya2VuKCR1cGRhdGUtdGV4dCwgNSUpO1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkdXBkYXRlLXRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhLmJ1dHRvbiwgc3Bhbi5idXR0b24sIGJ1dHRvbi5idXR0b24ge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3Ioc2hhZGUoJHVwZGF0ZS1iZywgMjAlKSwgJHVwZGF0ZS10ZXh0LCB0cnVlKTtcbiAgICB9XG59XG5cbi5pbmZvLXJldmVyc2Uge1xuICAgIGNvbG9yOiAkdXBkYXRlLWJnO1xufVxuXG4ubm90aWNlLCAubm90ZSB7XG4gICAgYmFja2dyb3VuZDogJG5vdGljZS1iZztcbiAgICBjb2xvcjogJG5vdGljZS10ZXh0O1xuXG4gICAgYSB7XG4gICAgICAgIGNvbG9yOiBkYXJrZW4oJG5vdGljZS10ZXh0LCA1JSk7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICRub3RpY2UtdGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGEuYnV0dG9uLCBzcGFuLmJ1dHRvbiwgYnV0dG9uLmJ1dHRvbiB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1jb2xvcihzaGFkZSgkbm90aWNlLWJnLCAyMCUpLCAkbm90aWNlLXRleHQsIHRydWUpO1xuICAgIH1cbn1cblxuLm5vdGljZS1yZXZlcnNlLCAubm90ZS1yZXZlcnNlIHtcbiAgICBjb2xvcjogJG5vdGljZS1iZztcbn1cblxuLmVycm9yLCAud2FybmluZyB7XG4gICAgYmFja2dyb3VuZDogJGNyaXRpY2FsLWJnO1xuICAgIGNvbG9yOiAkY3JpdGljYWwtdGV4dDtcblxuICAgIGEge1xuICAgICAgICBjb2xvcjogZGFya2VuKCRjcml0aWNhbC10ZXh0LCA1JSk7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICRjcml0aWNhbC10ZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYS5idXR0b24sIHNwYW4uYnV0dG9uLCBidXR0b24uYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKHNoYWRlKCRjcml0aWNhbC1iZywgMjAlKSwgJGNyaXRpY2FsLXRleHQsIHRydWUpO1xuICAgIH1cbn1cblxuLmVycm9yLXJldmVyc2UsIC53YXJuaW5nLXJldmVyc2Uge1xuICAgIGNvbG9yOiAkY3JpdGljYWwtYmc7XG59XG5cbi5wcmltYXJ5LWFjY2VudCB7XG4gICAgYmFja2dyb3VuZDogZGFya2VuKCRwcmltYXJ5LWFjY2VudC1iZywgNSUpO1xuICAgIGNvbG9yOiAkcHJpbWFyeS1hY2NlbnQtZmc7XG5cbiAgICAuYnV0dG9uLWJhciB7XG4gICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkcHJpbWFyeS1hY2NlbnQtYmcsIDclKTtcbiAgICB9XG5cbiAgICAuYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgYnV0dG9uLWNvbG9yKCRwcmltYXJ5LWFjY2VudC1iZywgJHByaW1hcnktYWNjZW50LWZnKTtcbiAgICB9XG59XG5cbi5zZWNvbmRhcnktYWNjZW50IHtcbiAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJHNlY29uZGFyeS1hY2NlbnQtYmcsIDUlKTtcbiAgICBjb2xvcjogJHNlY29uZGFyeS1hY2NlbnQtZmc7XG5cbiAgICAuYnV0dG9uLWJhciB7XG4gICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkc2Vjb25kYXJ5LWFjY2VudC1iZywgNyUpO1xuICAgIH1cblxuICAgIC5idXR0b24ge1xuICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3IoJHNlY29uZGFyeS1hY2NlbnQtYmcsICRzZWNvbmRhcnktYWNjZW50LWZnKTtcbiAgICB9XG5cbiAgICAuYnV0dG9uLWdyb3VwIHtcbiAgICAgICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHNlY29uZGFyeS1hY2NlbnQtYmc7XG4gICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdGludCgkc2Vjb25kYXJ5LWFjY2VudC1iZywxNSUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4uY2FyZC1pdGVtIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29udGVudC1iZywgMyUpO1xuXG4gICAgLmdwbS1hY3Rpb25zIHtcbiAgICAgICAgYmFja2dyb3VuZDogZGFya2VuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgfVxuXG5cbiAgICAmLmFjdGl2ZS10aGVtZSB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRub3RpY2UtYmc7XG5cbiAgICAgICAgLmdwbS1hY3Rpb25zIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRub3RpY2UtYmc7XG4gICAgICAgICAgICBjb2xvcjogJG5vdGljZS10ZXh0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4udXNlci1kZXRhaWxzIHtcbiAgICBoMiB7XG4gICAgICAgIGNvbG9yOiAkY29udGVudC1oZWFkZXI7XG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5ncmF2YXRhciB7XG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCRjb250ZW50LXRleHQsMjAlKTtcbiAgICAgICAgYSB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiAuZ3Jhdi1lZGl0b3ItdG9vbGJhciAuZHJvcGRvd24tbWVudSB7XG4gICAgYm94LXNoYWRvdzogMCAzcHggNnB4IHJnYmEoMCwgMCwgMCwgLjA3NSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDUlKTtcbn1cblxuI2FkbWluLW1haW4gLmdyYXYtZWRpdG9yLXRvb2xiYXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29udGVudC1iZywgNSUpO1xuXG4gICAgdWwge1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC10ZXh0O1xuXG4gICAgICAgICAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDMlKTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGZvcm0tZmllbGQtdGV4dDtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmVkaXRvci1hY3RpdmUge1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBhdXRvO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDglKTtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcblxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDMlKTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRmb3JtLWZpZWxkLXRleHQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmxhc3QtY2hpbGQgYSwgJjpsYXN0LWNoaWxkIGE6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmJ1dHRvbi1kaXNhYmxlZCBhIHtcbiAgICAgICAgICAgIGNvbG9yOiByZ2JhKCRjb250ZW50LXRleHQsIDAuNSk7XG5cbiAgICAgICAgICAgICY6aG92ZXIsICY6Zm9jdXMge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDUlKTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiAuZ3Jhdi1lZGl0b3ItaGlkZS10b29sYmFyICsgZGl2IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG5cbn1cblxuLmdyYXYtZWRpdG9yLWNvbnRlbnQsIC5ncmF2LWVkaXRvci1wcmV2aWV3IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgYm9yZGVyLXRvcDogMDtcblxufVxuXG4uZ3Jhdi1tZGVkaXRvci1jb250ZW50IHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG59XG5cbltkYXRhLW1vZGU9c3BsaXRdIHtcbiAgICAuZ3Jhdi1tZGVkaXRvci1jb2RlIHtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xuICAgIH1cbn1cblxuLnByaW1hcnktYWNjZW50IHtcbiAgICAuY3QtY2hhcnQge1xuICAgICAgICAuY3Qtc2VyaWVzIHtcbiAgICAgICAgICAgICYuY3Qtc2VyaWVzLWEge1xuICAgICAgICAgICAgICAgIC5jdC1iYXIge1xuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IHJnYmEoJHByaW1hcnktYWNjZW50LWZnLCAwLjg1KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAuY3Qtc2xpY2UtZG9udXQge1xuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICRwcmltYXJ5LWFjY2VudC1mZyAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYuY3Qtc2VyaWVzLWIge1xuICAgICAgICAgICAgICAgIC5jdC1zbGljZS1kb251dCB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogcmdiYSgkcHJpbWFyeS1hY2NlbnQtZmcsIDAuMikgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuY3QtbGFiZWwge1xuICAgICAgICAgICAgZmlsbDogcmdiYSgkcHJpbWFyeS1hY2NlbnQtZmcsIDAuNSk7XG4gICAgICAgICAgICBjb2xvcjogcmdiYSgkcHJpbWFyeS1hY2NlbnQtZmcsIDAuNSk7XG4gICAgICAgIH1cblxuICAgICAgICAuY3QtZ3JpZCB7XG4gICAgICAgICAgICBzdHJva2U6IHJnYmEoJHByaW1hcnktYWNjZW50LWZnLCAwLjIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uc2Vjb25kYXJ5LWFjY2VudCB7XG4gICAgLmN0LWNoYXJ0IHtcbiAgICAgICAgLmN0LXNlcmllcyB7XG4gICAgICAgICAgICAmLmN0LXNlcmllcy1hIHtcbiAgICAgICAgICAgICAgICAuY3QtYmFyIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiByZ2JhKCRzZWNvbmRhcnktYWNjZW50LWZnLCAwLjg1KSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAuY3Qtc2xpY2UtZG9udXQge1xuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICRzZWNvbmRhcnktYWNjZW50LWZnICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5jdC1zZXJpZXMtYiB7XG4gICAgICAgICAgICAgICAgLmN0LXNsaWNlLWRvbnV0IHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiByZ2JhKCRzZWNvbmRhcnktYWNjZW50LWZnLCAwLjIpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmN0LWxhYmVsIHtcbiAgICAgICAgICAgIGZpbGw6IHJnYmEoJHNlY29uZGFyeS1hY2NlbnQtZmcsIDAuNSk7XG4gICAgICAgICAgICBjb2xvcjogcmdiYSgkc2Vjb25kYXJ5LWFjY2VudC1mZywgMC41KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jdC1ncmlkIHtcbiAgICAgICAgICAgIHN0cm9rZTogcmdiYSgkc2Vjb25kYXJ5LWFjY2VudC1mZywgMC4yKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4uZHJvcHpvbmUge1xuICAgIGJhY2tncm91bmQ6ICRmb3JtLWZpZWxkLWJnO1xuICAgIGJvcmRlcjogMXB4ICRmb3JtLWJvcmRlciBzb2xpZDtcblxuICAgICYuZHotZHJhZy1ob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRmb3JtLWJvcmRlciwgMTAlKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA0KTtcbiAgICB9XG5cbiAgICAuZHotcHJldmlldyB7XG4gICAgICAgIGJvcmRlcjoxcHggc29saWQgZGFya2VuKCRjb250ZW50LWJnLDUlKTtcblxuICAgICAgICAuZHotc3VjY2Vzcy1tYXJrLCAuZHotZXJyb3ItbWFyayB7XG4gICAgICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmR6LXN1Y2Nlc3MtbWFyayB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRidXR0b24tYmcsMTAlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1lcnJvci1tYXJrIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjcml0aWNhbC1iZztcbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1wcm9ncmVzcyB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZDdkN2Q3O1xuXG4gICAgICAgICAgICAuZHotdXBsb2FkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRidXR0b24tYmcsMTAlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1lcnJvci1tZXNzYWdlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsMyUpO1xuICAgICAgICAgICAgY29sb3I6ICRjcml0aWNhbC1iZztcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgLmR6LWRldGFpbHMge1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMjBweCAtNXB4IHJnYmEoMCwwLDAsMC40KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1yZW1vdmUsIC5kei11bnNldCwgLmR6LXZpZXcsIC5kei1pbnNlcnQsIC5kei1tZXRhZGF0YSB7XG5cbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29udGVudC1iZyw3JSk7XG5cbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtbGluaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC10ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmR6LXJlbW92ZSB7XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRjcml0aWNhbC1iZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgJi5kei1jbGlja2FibGUge1xuICAgICAgICAuZHotbWVzc2FnZSwgLmR6LW1lc3NhZ2Ugc3BhbiB7XG4gICAgICAgICAgICBAaWYgKGxpZ2h0bmVzcygkZm9ybS1maWVsZC1iZykgPCA1MCkge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKCRjb250ZW50LXRleHQsMjAlKTtcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKCRjb250ZW50LXRleHQsMjAlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmR6LWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgQGlmIChsaWdodG5lc3MoJGZvcm0tZmllbGQtYmcpIDwgNTApIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkY29udGVudC1iZywgNSUpO1xuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDUlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmdwbSB7XG5cbiAgICA+IHRhYmxlID4gdGJvZHkge1xuICAgICAgICA+IHRyIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkdW5kZXJsaW5lO1xuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3BtLW5hbWUge1xuICAgICAgICBjb2xvcjogbGlnaHRlbigkY29udGVudC10ZXh0LCAxNSUpO1xuICAgIH1cblxuICAgIC5ncG0tdmVyc2lvbiB7XG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCRjb250ZW50LXRleHQsIDEwJSk7XG4gICAgfVxuXG4gICAgLmdwbS1yaWJib24sIC5iYWRnZS51cGRhdGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkdXBkYXRlLWJnO1xuICAgICAgICBhLCAmIHtcbiAgICAgICAgICAgIGNvbG9yOiAkdXBkYXRlLXRleHQgIWltcG9ydGFudDtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHNoYWRlKCR1cGRhdGUtYmcsIDE1JSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3BtLXVwZGF0ZSB7XG4gICAgICAgIC5ncG0tbmFtZSB7XG4gICAgICAgICAgICBjb2xvcjogJGJ1dHRvbi1iZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5ncG0taXRlbS1pbmZvIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICR1bmRlcmxpbmU7XG4gICAgICAgIC5ncG0taXRlbS1pY29uIHtcbiAgICAgICAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDIlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5ncG0tYWN0aW9ucyB7XG4gICAgICAgIC5kaXNhYmxlZCB7XG4gICAgICAgICAgICBjb2xvcjogbGlnaHRlbigkY29udGVudC10ZXh0LCAxMCUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmdwbS10ZXN0aW5nIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1hY2NlbnQtYmc7XG4gICAgICAgIGNvbG9yOiAkc2Vjb25kYXJ5LWFjY2VudC1mZztcbiAgICB9XG59XG5cbi5wYWdlcy1saXN0IHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHVuZGVybGluZTtcblxuICAgIC5yb3cge1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHVuZGVybGluZTtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDIlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAucGFnZS1yb3V0ZSB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcblxuICAgICAgICAgICAgLnNwYWNlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LXRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYmFkZ2UubGFuZyB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29udGVudC10YWJzLWJnO1xuICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LXRhYnMtdGV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5iYWRnZS5sYW5nLmluZm8ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVwZGF0ZS1iZztcbiAgICAgICAgICAgIGNvbG9yOiAkdXBkYXRlLXRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAucGFnZS1ob21lIHtcbiAgICAgICAgY29sb3I6ICRzdWJ0bGUtdGV4dDtcbiAgICB9XG5cbiAgICAucGFnZS1pbmZvIHtcbiAgICAgICAgY29sb3I6ICRzdWJ0bGUtdGV4dDtcbiAgICB9XG59XG5cbiNhZG1pbi10b3BiYXIge1xuICAgICNhZG1pbi1sYW5nLXRvZ2dsZSB7XG4gICAgICAgIHotaW5kZXg6IDM7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3IoJHVwZGF0ZS1iZyk7XG4gICAgICAgIH1cbiAgICAgICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJHVwZGF0ZS1iZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zd2l0Y2gtZ3JhdiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0ZW4oJGNvbnRlbnQtdGFicy1iZywxMCUpO1xuICAgIH1cblxuICAgIC5zd2l0Y2gtdG9nZ2xlIHtcbiAgICAgICAgaW5wdXQ6Y2hlY2tlZCArIGxhYmVsIHtcbiAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCArIGxhYmVsIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC10YWJzLXRleHQ7XG4gICAgICAgICAgICBAaWYgKGxpZ2h0bmVzcygkY29udGVudC10YWJzLWJnKSA8IDUwKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29udGVudC10YWJzLWJnLDUlKTtcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29udGVudC10YWJzLWJnLDUlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0LmhpZ2hsaWdodDpjaGVja2VkICsgbGFiZWwge1xuICAgICAgICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1iZztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYm9keSAuc2VsZWN0aXplLWRyb3Bkb3duIC5vcHRncm91cC1oZWFkZXIge1xuICAgIGNvbG9yOiAkYmxhY2s7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTtcbn1cblxuYm9keSAuYm9vdHN0cmFwLWRhdGV0aW1lcGlja2VyLXdpZGdldCB7XG5cbiAgICAmLmRyb3Bkb3duLW1lbnUuYm90dG9tIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZvcm0tZmllbGQtYmc7XG4gICAgICAgIGNvbG9yOiAkZm9ybS1maWVsZC10ZXh0O1xuICAgICAgICBib3JkZXItY29sb3I6ICRmb3JtLWJvcmRlcjtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkZm9ybS1ib3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRmb3JtLWZpZWxkLWJnO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhYmxlIHtcbiAgICAgICAgdGQgc3Bhbjpob3ZlciwgdGg6aG92ZXIsIHRkLmRheTpob3ZlciB7XG4gICAgICAgICAgICBAaWYgKGxpZ2h0bmVzcygkZm9ybS1maWVsZC1iZykgPCA1MCkge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGZvcm0tZmllbGQtYmcsNSUpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJGZvcm0tZmllbGQtYmcsMyUpICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGQuYWN0aXZlLCB0ZC5hY3RpdmU6aG92ZXIge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVwZGF0ZS1iZyAhaW1wb3J0YW50O1xuICAgICAgICAgICAgY29sb3I6ICR1cGRhdGUtdGV4dCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uc2NoZWR1bGVyLWNvbnRlbnQge1xuICAgIHByZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGRhcmtlbigkY29udGVudC1iZywgMiUpO1xuICAgICAgICBib3JkZXItY29sb3I6ICRmb3JtLWJvcmRlcjtcbiAgICAgICAgY29kZSB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtaGVhZGVyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4jcGhwaW5mbyB7XG4gICAgdGgge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkZm9ybS1maWVsZC1iZztcbiAgICB9XG5cbiAgICB0ZCB7XG4gICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtaGVhZGVyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ucmVtb2RhbCB7XG4gICAgQGlmIChsaWdodG5lc3MoJGNvbnRlbnQtYmcpIDwgNTApIHtcbiAgICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29udGVudC1iZywgMyUpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1iZztcbiAgICB9XG5cbiAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcbiAgICAvLyBib3gtc2hhZG93OiAwIDEwcHggMjBweCByZ2JhKDAsMCwwLDAuNSk7XG59XG5cbi5yZW1vZGFsLWNsb3NlIHtcbiAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcbn1cblxuLnJlbW9kYWwtY2xvc2U6aG92ZXIsXG4ucmVtb2RhbC1jbG9zZTpmb2N1cyB7XG4gICAgY29sb3I6IGRhcmtlbigkY29udGVudC10ZXh0LCAyMCUpO1xufVxuXG4vLyBTY3JvbGxiYXJzXG4qIHtcbiAgICBAaW5jbHVkZSBuYXRpdmUtc2Nyb2xsYmFycyhyZ2JhKCRjb250ZW50LXRleHQsIDAuNCksICRjb250ZW50LWJnKTtcbn1cblxuLnNpbXBsZWJhci1zY3JvbGxiYXI6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkcGFnZS10ZXh0O1xufVxuXG4jYWRtaW4tc2lkZWJhciAuc2ltcGxlYmFyLXNjcm9sbGJhcjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRuYXYtdGV4dDtcbn1cblxuI3BhZ2UtZmlsdGVyaW5nIHtcbiAgICAucGFnZS1zaG9ydGN1dHMge1xuICAgICAgICAuYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1jb2xvcihyZ2JhKGRhcmtlbigkY29udGVudC10ZXh0LDUlKSwgMC41KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5yZXBvcnRzLWNvbnRlbnQge1xuICAgIC5yZXBvcnQtb3V0cHV0IHtcbiAgICAgICAgdGFibGUge1xuICAgICAgICAgICAgdGhlYWQge1xuICAgICAgICAgICAgICAgIHRyIHtcbiAgICAgICAgICAgICAgICAgICAgdGgge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LWJnLCAyJSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtaGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ucHJldmlldy13cmFwcGVyIHtcbiAgICBpZnJhbWUge1xuICAgICAgICBAaWYgKGxpZ2h0bmVzcygkcGFnZS1iZykgPCA1MCkge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgbGlnaHRlbigkcGFnZS1iZywgMyUpXG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRwYWdlLWJnLCAzJSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuI2JhY2t1cHMtc3RhdHMge1xuICAgIC5iYWNrdXBzLXVzYWdlLXdyYXBwZXIge1xuICAgICAgICA+IGRpdiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoLTkwZGVnLCBkYXJrZW4oJHByaW1hcnktYWNjZW50LWJnLCAxMCUpIDAsIGRhcmtlbigkcHJpbWFyeS1hY2NlbnQtYmcsIDE1JSkgMTAwJSk7XG5cbiAgICAgICAgICAgICYuZnVsbCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KC05MGRlZywgZGFya2VuKCRjcml0aWNhbC1iZywgNSUpIDAsIGRhcmtlbigkY3JpdGljYWwtYmcsIDM1JSkgMTAwJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIExvZyBWaWV3ZXJcbi5sb2dzLW91dHB1dCB7XG4gICAgdGFibGUubm9mbGV4IHtcblxuICAgICAgICB0ZC5sZXZlbCAuYmFkZ2Uge1xuICAgICAgICAgICAgJi5lcnJvciwgJi5jcml0aWNhbCwgJi5hbGVydCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0RDMzAyMztcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICYubm90aWNlLCAmLndhcm5pbmcge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNFMDhBMUU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLmRlYnVnIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjZBNjVCO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5pbmZvIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjJBN0YwO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5lbWVyZ2VuY3kge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM4RTQ0QUQ7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5wZXJtaXNzaW9uLWNvbnRhaW5lciB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuW2RhdGEtZ3Jhdi1maWVsZD1cInBhcmVudHNcIl0ge1xuICAgIC5mb3JtLWlucHV0LXdyYXBwZXIge1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC1saW5rO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBsb2FkZXJcbi5ncmF2LWxvYWRlcixcbi5ncmF2LWxvYWRlcjphZnRlciB7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHdpZHRoOiAxMGVtO1xuICAgIGhlaWdodDogMTBlbTtcbn1cbi5ncmF2LWxvYWRlciB7XG4gICAgbWFyZ2luOiA2MHB4IGF1dG87XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0ZXh0LWluZGVudDogLTk5OTllbTtcbiAgICBib3JkZXItdG9wOiAxLjFlbSBzb2xpZCB0cmFuc3BhcmVudGl6ZSgkY29udGVudC10ZXh0LCAwLjgpO1xuICAgIGJvcmRlci1yaWdodDogMS4xZW0gc29saWQgdHJhbnNwYXJlbnRpemUoJGNvbnRlbnQtdGV4dCwgMC44KTtcbiAgICBib3JkZXItYm90dG9tOiAxLjFlbSBzb2xpZCB0cmFuc3BhcmVudGl6ZSgkY29udGVudC10ZXh0LCAwLjgpO1xuICAgIGJvcmRlci1sZWZ0OiAxLjFlbSBzb2xpZCAkY29udGVudC10ZXh0O1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTtcbiAgICBhbmltYXRpb246IGdyYXZsb2FkZXIgMS4xcyBpbmZpbml0ZSBsaW5lYXI7XG59XG5ALXdlYmtpdC1rZXlmcmFtZXMgZ3JhdmxvYWRlciB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICB9XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgICB9XG59XG5Aa2V5ZnJhbWVzIGdyYXZsb2FkZXIge1xuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxufVxuXG4vLyBSYW5nZS1maWVsZFxuQGltcG9ydCBcInRlbXBsYXRlL21vZHVsZXMvaW5wdXQtcmFuZ2VcIjtcblxuLy8gUGFnZSBDb2x1bW4gVmlld1xuI3BhZ2VzLWZpbHRlcnMge1xuXG4gICAgYmFja2dyb3VuZDogJG5hdi1iZztcbiAgICBjb2xvcjogcmdiYSgkbmF2LXRleHQsIDAuOSk7XG5cbiAgICAuYnV0dG9uLWJvcmRlciB7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1jb2xvci1ib3JkZXIobGlnaHRlbigkbmF2LWJnLCAxMCUpLCAkbmF2LXRleHQpO1xuICAgICAgICBjb2xvcjogJG5hdi10ZXh0ICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmZpbHRlcnMtYmFyIHtcbiAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgY29sb3I6ICRuYXYtbGluaztcbiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogbGlnaHRlbigkbmF2LWJnLCAxMiUpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkbmF2LWJnLCA2JSk7XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmdiYSgkbmF2LXRleHQsIDAuNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZmlsdGVycy1hZHZhbmNlZCB7XG4gICAgICAgIGZpZWxkc2V0IHtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0ZW4oJG5hdi1iZywgNSUpO1xuICAgICAgICAgICAgbGVnZW5kIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkbmF2LWJnO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkbmF2LXRleHQ7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JtIHtcbiAgICAgICAgLmNoZWNrYm94ZXMge1xuICAgICAgICAgICAgbGFiZWw6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRuYXYtYmcsIDglKTtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGxpZ2h0ZW4oJG5hdi1iZywgMTIlKTtcbiAgICAgICAgICAgICAgICBjb2xvcjogJG5hdi1saW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jcGFnZXMtY29sdW1ucyB7XG4gICAgYmFja2dyb3VuZDogJGNvbnRlbnQtYmc7XG5cbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgkZm9ybS1ib3JkZXIsIDAuNSk7XG5cblxuICAgICYuZmpzLWNvbnRhaW5lciB7XG4gICAgICAgIC5manMtY29sIHtcbiAgICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoJGZvcm0tYm9yZGVyLCAwLjUpO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoJGZvcm0tYm9yZGVyLCAwLjUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZqcy1pdGVtIHtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIC5manMtaW5mbyA+IGIge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC1saW5rO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmpzLWFjdGlvbi10b2dnbGUsIC5manMtY2hpbGRyZW4ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC1saW5rICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZmpzLWljb24ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMHB4IDFweCBsaWdodGVuKCRmb3JtLWJvcmRlciwgMjAlKTtcblxuICAgICAgICAgICAgJi5ob21lIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmxhdC1ibHVlLTI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYudmlzaWJsZSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZsYXQtYmx1ZS0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmxvY2sge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmbGF0LW9yYW5nZS0yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1vZHVsYXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmbGF0LXB1cnBsZS0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkY29udGVudC1iZztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5iYWRnZS1wdWJsaXNoZWQ6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmbGF0LWdyZWVuLTQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYuYmFkZ2UtdW5wdWJsaXNoZWQ6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmbGF0LXJlZC0xO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYmFkZ2UtbGFuZyB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LXRhYnMtYmcsIDIlKTtcbiAgICAgICAgICAgICAgICBjb2xvcjogZGFya2VuKCRjb250ZW50LXRhYnMtdGV4dCwgNSUpO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb250ZW50LWJnO1xuXG4gICAgICAgICAgICAgICAgJi50cmFuc2xhdGVkIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHVwZGF0ZS1iZztcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICR1cGRhdGUtdGV4dDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLm5vdC1hdmFpbGFibGUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkbmF2LXNlbGVjdGVkLWJnO1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJG5hdi1zZWxlY3RlZC1saW5rO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5manMtaW5mbyB7XG5cbiAgICAgICAgICAgID4gYiB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LXRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgID4gZW0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBsaWdodGVuKCRjb250ZW50LXRleHQsIDEwJSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZmpzLWFjdGlvbnMge1xuICAgICAgICAgICAgLmNoaWxkLWNvdW50IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGNvbnRlbnQtYmcsIDEwJSk7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LXRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZmpzLWFjdGlvbi10b2dnbGUge1xuICAgICAgICAgICAgY29sb3I6ICRwcmltYXJ5LWFjY2VudC1iZztcbiAgICAgICAgfVxuXG4gICAgICAgIC5manMtYWN0aW9uLXRvZ2dsZSwgLmZqcy1jaGlsZHJlbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBidXR0b24tY29sb3ItYm9yZGVyKCRmb3JtLWJvcmRlciwgcmdiYSgkcGFnZS10ZXh0LCAwLjUpKTtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIEBpZiAobGlnaHRuZXNzKCRmb3JtLWZpZWxkLWJnKSA8IDUwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogbGlnaHRlbigkZm9ybS1ib3JkZXIsIDUlKTtcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBkYXJrZW4oJGZvcm0tYm9yZGVyLCA1JSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPiBhIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgJi5manMtYWN0aXZlIHtcbiAgICAgICAgICAgICYgPiAuZmpzLWl0ZW0td3JhcHBlciB7XG5cbiAgICAgICAgICAgICAgICBAaWYgKGxpZ2h0bmVzcygkZm9ybS1maWVsZC1iZykgPCA1MCkge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRjb250ZW50LWJnLCA0JSk7XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY29udGVudC1iZywgNCUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJGhpZ2hsaWdodC1jb2xvcjogI0ZGRkYwMDtcblxuICAgICAgICAmLmZpbHRlcnMtaGl0IHtcbiAgICAgICAgICAgICYgPiAuZmpzLWl0ZW0td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkaGlnaGxpZ2h0LWNvbG9yLCA0NiUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmZqcy1hY3RpdmUgPiAuZmpzLWl0ZW0td3JhcHBlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkaGlnaGxpZ2h0LWNvbG9yLCA0MiUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cblxuICAgIC50YWdzIHtcbiAgICAgICAgLnRhZyB7XG4gICAgICAgICAgICBtYXJnaW46IDAgLjE1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhZy1wdWJsaXNoZWQge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIxOWUwZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50YWctdmlzaWJsZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDE4ZmQ5O1xuICAgICAgICB9XG5cbiAgICAgICAgLnRhZy1ub24tcm91dGFibGUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmMzkyYTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5sYW5ncyB7XG4gICAgICAgIC5iYWRnZSB7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LXRhYnMtYmcsIDIlKTtcbiAgICAgICAgICAgIGNvbG9yOiBkYXJrZW4oJGNvbnRlbnQtdGFicy10ZXh0LCA1JSk7XG4gICAgICAgIH1cblxuICAgICAgICAubGFuZzpob3ZlciB7XG4gICAgICAgICAgICAuYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRwYWdlLWxpbms7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwYWdlLWJnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmxhbmctdHJhbnNsYXRlZCB7XG4gICAgICAgICAgICAuZmEgeyBjb2xvcjogIzIxOWUwZDsgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmxhbmctbm9uLXRyYW5zbGF0ZWQge1xuICAgICAgICAgICAgLmZhIHsgY29sb3I6ICNmZjM5MmE7IH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LWJnLCA1JSkgIWltcG9ydGFudDtcblxuICAgICAgICAuZGl2aWRlciB7XG4gICAgICAgICAgICBAaWYgKGxpZ2h0bmVzcygkZm9ybS1maWVsZC1iZykgPCA1MCkge1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBkYXJrZW4oJGZvcm0tYm9yZGVyLDglKTtcbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0ZCwgdGhlYWQgdGgge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kcm9wZG93bi1pdGVtIHtcbiAgICAgICAgICAgIGNvbG9yOiAkY29udGVudC10ZXh0O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcblxuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwYWdlLWxpbms7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKCRjb250ZW50LWJnLCA4JSkgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5kYW5nZXIge1xuICAgICAgICAgICAgICAgIC5mYSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkY3JpdGljYWwtYmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY3JpdGljYWwtYmcgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLmZhIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkY3JpdGljYWwtdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aW9uLWJhciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBkYXJrZW4oJHBhZ2UtYmcsIDQlKTtcblxuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRwYWdlLXRleHQ7XG5cbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJHBhZ2UtYmcgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRwYWdlLWxpbmsgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZmEge1xuICAgICAgICAgICAgY29sb3I6ICM5OTk7XG4gICAgICAgIH1cblxuICAgICAgICBhOm5vdCgubGFuZyk6aG92ZXIgLmZhIHtcbiAgICAgICAgICAgIGNvbG9yOiAkcGFnZS1saW5rO1xuICAgICAgICB9XG5cbiAgICAgICAgLmluZm9zIHtcbiAgICAgICAgICAgIHRyIHRkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGNvbnRlbnQtdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyIHRkOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogbGlnaHRlbigkY29udGVudC10ZXh0LCAxMCUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jcGFnZXMtY29udGVudC13cmFwcGVyIHtcbiAgICAuZmpzLXBhdGgtYmFyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbnRlbnQtYmc7XG4gICAgfVxufVxuXG4vLyBGbGV4IFBhZ2VzIEJyZWFkY3J1bWJzXG4uYnJlYWRjcnVtYi1ub2RlIHtcblxuICAgICY6aG92ZXIgc3BhbiB7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgY29sb3I6ICRjb250ZW50LWxpbms7XG4gICAgfVxuXG4gICAgJiA+IGk6bm90KC5mYSkge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTk5O1xuICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDBweCAxcHggI2ZmZjtcblxuICAgICAgICAmLmhvbWUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZsYXQtYmx1ZS0yO1xuICAgICAgICB9XG5cbiAgICAgICAgJi52aXNpYmxlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRmbGF0LWJsdWUtMTtcbiAgICAgICAgfVxuXG4gICAgICAgICYubG9jayB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmxhdC1vcmFuZ2UtMjtcbiAgICAgICAgfVxuXG4gICAgICAgICYubW9kdWxhciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmxhdC1wdXJwbGUtMTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gTmV3IFBhcmVudHMgRmllbGRcbltkYXRhLXJlbW9kYWwtaWRdLnBhcmVudHMtY29udGFpbmVyIHtcblxuICAgICRyZW1vZGFsX2JvcmRlcjogI2YwMDtcbiAgICBAaWYgKGxpZ2h0bmVzcygkY29udGVudC1iZykgPCA1MCkge1xuICAgICAgICAkcmVtb2RhbF9ib3JkZXI6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDEwJSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgICRyZW1vZGFsX2JvcmRlcjogZGFya2VuKCRjb250ZW50LWJnLCAxMCUpO1xuICAgIH1cblxuICAgIGZvcm0gPiBoMSB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkcmVtb2RhbF9ib3JkZXI7XG4gICAgfVxuXG4gICAgLmZqcy1jb2wge1xuICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAkcmVtb2RhbF9ib3JkZXI7XG4gICAgfVxuXG4gICAgLmZqcy1pdGVtIGEge1xuICAgICAgICBjb2xvcjogJGNvbnRlbnQtbGluaztcbiAgICB9XG59XG5cbi5wYXJlbnRzLWNvbnRlbnQuZmpzLWNvbnRhaW5lciB7XG4gICAgLmZqcy1hY3RpdmUge1xuICAgICAgICBAaWYgKGxpZ2h0bmVzcygkZm9ybS1maWVsZC1iZykgPCA1MCkge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkY29udGVudC1iZywgNCUpO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkY29udGVudC1iZywgNCUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBOZXcgMS43IFBlcm1pc3Npb25zXG4ucGVybWlzc2lvbnMtY29udGFpbmVyIHtcbiAgICAuc3dpdGNoLXRvZ2dsZSB7XG4gICAgICAgICBpbnB1dDpjaGVja2VkK2xhYmVsIHtcblxuICAgICAgICAgfVxuICAgICAgICAgaW5wdXQubGFiZWwwOmNoZWNrZWQrbGFiZWwge1xuICAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICAgYmFja2dyb3VuZDogJGZsYXQtcG9tZWdyYW5hdGUgIWltcG9ydGFudDtcbiAgICAgICAgIH1cbiAgICAgICAgIGlucHV0LmxhYmVsMTpjaGVja2VkK2xhYmVsIHtcbiAgICAgICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1vbGl2ZSAhaW1wb3J0YW50O1xuICAgICAgICAgfVxuICAgICB9XG5cbiAgICAuYmFkZ2Uge1xuICAgICAgICAmLmJhZGdlLWRlbmllZCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkZmxhdC1wb21lZ3JhbmF0ZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5iYWRnZS1hY2Nlc3Mge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLW9saXZlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgJi5iYWRnZS1zdXBlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZmxhdC13aXN0ZXJpYSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmllbGRzZXQge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG5cbiAgICAgICAgbGVnZW5kIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb250ZW50LWJnO1xuICAgICAgICAgICAgY29sb3I6ICRjb250ZW50LWhlYWRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkc2V0IHtcbiAgICAgICAgICAgIGxlZ2VuZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRmb3JtLWJvcmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAuY3J1ZHAtY29udGFpbmVyIHtcblxuICAgICAgICAuY2hlY2tib3hlcy50b2dnbGVhYmxlIHtcblxuICAgICAgICAgICAgbGFiZWwge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJGZvcm0tYm9yZGVyIDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkZm9ybS1maWVsZC1iZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5jaGVja2JveGVzIGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbG9yOiByZ2JhKCRjb250ZW50LXRleHQsIDAuMyk7XG4gICAgICAgIH1cbiAgICAgICAgLmNoZWNrYm94ZXNbZGF0YS1fY2hlY2stc3RhdHVzPVwiMVwiXSBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1vbGl2ZTtcbiAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuY2hlY2tib3hlc1tkYXRhLV9jaGVjay1zdGF0dXM9XCIyXCJdIGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWwge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGZsYXQtcG9tZWdyYW5hdGU7XG4gICAgICAgICAgICBjb2xvcjogJHdoaXRlO1xuICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4ucGVybWlzc2lvbi1jb250YWluZXIge1xuICAgIC5wZXJtaXNzaW9uLW5hbWUge1xuICAgICAgICBzcGFuOm5vdCguYmFkZ2UpIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb250ZW50LWJnO1xuICAgICAgICB9XG4gICAgICAgIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgJGNvbnRlbnQtYmc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIEljb24gUGlja2VyXG4uaWNvbi1zZXQge1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oJGNvbnRlbnQtYmcsIDIlKTtcbn1cblxuXG4vLyBDcm9uIGZpZWxkXG4uanFDcm9uLWNyb3NzLFxuLmpxQ3Jvbi1zZWxlY3Rvci10aXRsZSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJGZvcm0tYm9yZGVyO1xufVxuLmpxQ3Jvbi1jb250YWluZXIuZGlzYWJsZSAuanFDcm9uLWNyb3NzOmhvdmVyLFxuLmpxQ3Jvbi1jb250YWluZXIuZGlzYWJsZSAuanFDcm9uLXNlbGVjdG9yLXRpdGxlOmhvdmVyLFxuLmpxQ3Jvbi1jcm9zcyxcbi5qcUNyb24tc2VsZWN0b3ItdGl0bGUge1xuICAgIGJhY2tncm91bmQ6ICRmb3JtLWZpZWxkLWJnO1xuICAgIGJvcmRlci1jb2xvcjogJGZvcm0tYm9yZGVyO1xufVxuLmpxQ3Jvbi1jcm9zczpob3Zlcixcbi5qcUNyb24tc2VsZWN0b3ItdGl0bGU6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigkZm9ybS1maWVsZC1iZywxMCUpO1xufVxuLmpxQ3Jvbi1zZWxlY3Rvci1saXN0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJGZvcm0tZmllbGQtYmcsMTAlKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAkZm9ybS1ib3JkZXI7XG59XG4uanFDcm9uLXNlbGVjdG9yLWxpc3QgbGkuc2VsZWN0ZWQge1xuICAgIGJhY2tncm91bmQ6ICRwcmltYXJ5LWFjY2VudC1iZztcbiAgICBjb2xvcjogJHByaW1hcnktYWNjZW50LWZnO1xufVxuLmpxQ3Jvbi1zZWxlY3Rvci1saXN0IGxpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAkZm9ybS1maWVsZC1iZztcbn1cbi5qcUNyb24tZXJyb3IgLmpxQ3Jvbi1zZWxlY3Rvci10aXRsZSB7XG4gICAgYmFja2dyb3VuZDogJGNyaXRpY2FsLWJnO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkY3JpdGljYWwtYmcsIDEwJSk7XG4gICAgY29sb3I6ICRjcml0aWNhbC10ZXh0O1xufVxuLmpxQ3Jvbi1jb250YWluZXIuZGlzYWJsZSAqIHtcbiAgICBjb2xvcjogZGFya2VuKCRmb3JtLWZpZWxkLXRleHQsIDIwJSk7XG59XG4uanFDcm9uLWNvbnRhaW5lci5kaXNhYmxlIC5qcUNyb24tc2VsZWN0b3ItdGl0bGUge1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWJnICFpbXBvcnRhbnQ7XG59XG5cblxuXG4iLCIvLyBDb3JlXG4kd2hpdGU6XHRcdFx0XHRcdFx0XHQjZmZmZmZmO1xuJGJsYWNrOlx0XHRcdFx0XHRcdFx0IzAwMDAwMDtcbiRsaWdodC1ncmF5Olx0XHRcdFx0XHQjZGRkZGRkO1xuXG4kY29yZS1ib3JkZXItY29sb3I6XHRcdFx0XHQkbGlnaHQtZ3JheTtcbiRjb3JlLWJvcmRlci1jb2xvci1ob3ZlcjogXHRcdGRhcmtlbigkY29yZS1ib3JkZXItY29sb3IsIDEwKTtcblxuJGNvZGUtdGV4dDpcdFx0XHRcdFx0XHQjYzcyNTRlO1xuJGNvZGUtYmc6XHRcdFx0XHRcdFx0I2Y5ZjJmNDtcbiRwcmUtdGV4dDpcdFx0XHRcdFx0XHQjMjM3Nzk0O1xuJHByZS1iZzpcdFx0XHRcdFx0XHQjZjZmNmY2O1xuXG4vLyBTaGFkb3dzXG4kY29yZS1ib3gtc2hhZG93OiBcdFx0XHRcdGluc2V0IDAgMXB4IDNweCBoc2xhKDAsIDAlLCAwJSwgMC4wNik7XG4iLCIlYnV0dG9uIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICAgIG1hcmdpbjogMXB4IDAgLTFweCAwO1xuICAgIH1cblxuICAgIGkge1xuICAgICAgICAvL21hcmdpbi1yaWdodDogNXB4O1xuICAgIH1cblxuICAgICYuYnV0dG9uLXNtYWxsIHtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgZm9udC1zaXplOiA5NSU7XG4gICAgfVxuXG4gICAgJi5idXR0b24teC1zbWFsbCB7XG4gICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogOTAlO1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBvcGFjaXR5OiAuNjtcbiAgICAgICAgY3Vyc29yOiBuby1kcm9wO1xuICAgIH1cblxufVxuXG5AbWl4aW4gYnV0dG9uLWNvbG9yKCRjb2xvciwgJHRleHQ6JHdoaXRlLCAkbGlnaHRlcjpudWxsKSB7XG4gICAgY29sb3I6IHJnYmEocmVkKCR0ZXh0KSwgZ3JlZW4oJHRleHQpLCBibHVlKCR0ZXh0KSwgb3BhY2l0eSgkdGV4dCkgLSAwLjE1KTtcblxuXHRib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG5cbiAgICBAaWYgKCRsaWdodGVyID09IG51bGwpIHtcbiAgICAgICAgJGxpZ2h0ZXI6IGxpZ2h0bmVzcygkY29sb3IpID4gNTA7XG4gICAgfVxuXG4gICAgQGlmICgkbGlnaHRlcikge1xuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHNoYWRlKCRjb2xvciwxNSUpO1xuICAgICAgICAgICAgY29sb3I6ICR0ZXh0O1xuICAgICAgICB9XG4gICAgICAgICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgbGlnaHRlbigkY29sb3IsIDUlKTtcbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRpbnQoJGNvbG9yLDE1JSk7XG4gICAgICAgICAgICBjb2xvcjogJHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgJi5kcm9wZG93bi10b2dnbGUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBidXR0b24tY29sb3ItYm9yZGVyKCRjb2xvciwgJHRleHQ6JHdoaXRlLCAkbGlnaHRlcjpudWxsKSB7XG4gICAgY29sb3I6ICR0ZXh0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvcjtcblxuICAgIEBpZiAoJGxpZ2h0ZXIgPT0gbnVsbCkge1xuICAgICAgICAkbGlnaHRlcjogbGlnaHRuZXNzKCRjb2xvcikgPiA1MDtcbiAgICB9XG5cbiAgICBAaWYgKCRsaWdodGVyKSB7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBzaGFkZSgkY29sb3IsMTUlKTtcbiAgICAgICAgICAgIGNvbG9yOiAkdGV4dDtcbiAgICAgICAgfVxuICAgICAgICAmLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNvbG9yLCA1JSk7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6IHRpbnQoJGNvbG9yLDE1JSk7XG4gICAgICAgICAgICBjb2xvcjogJHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgJi5kcm9wZG93bi10b2dnbGUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBTaXplc1xuJGhlYWRlci1oZWlnaHQ6IDVyZW07XG4kZm9vdGVyLWhlaWdodDogNnJlbTtcbiRib3JkZXItcmFkaXVzOiA0cHg7XG5cbi8vIEZvbnQgV2VpZ2h0c1xuJGZvbnQtd2VpZ2h0LWJvbGQ6IDYwMDtcbiRmb250LXdlaWdodC1yZWd1bGFyOiA0MDA7XG4kZm9udC13ZWlnaHQtbGlnaHQ6MzAwO1xuXG4vLyBHbG9iYWwgUGFkZGluZ3NcbiRwYWRkaW5nLWRlZmF1bHQ6IDEuNXJlbTtcbiRwYWRkaW5nLWhvcml6OiA3cmVtO1xuJHBhZGRpbmctdmVydDogM3JlbTtcblxuLy9Gb3Jtc1xuJGZvcm0tbGFiZWwtd2lkdGg6IDMwJTtcbiRmb3JtLWJvcmRlci1yYWRpdXM6IDRweDtcbiRmb3JtLWJvcmRlci13aWR0aDogMXB4O1xuJGZvcm0tbGFiZWwtcGFkOiA1cHggMCA1cHggM3JlbTtcbiRmb3JtLWlucHV0LXBhZDogNXB4IDEwcHg7XG4kZm9ybS1zZWxlY3QtcGFkOiA1cHggMzBweCA1cHggMTBweDtcbiIsIi8vIEFkZCBwZXJjZW50YWdlIG9mIHdoaXRlIHRvIGEgY29sb3JcbkBmdW5jdGlvbiB0aW50KCRjb2xvciwgJHBlcmNlbnQpIHtcbiAgICBAcmV0dXJuIG1peCh3aGl0ZSwgJGNvbG9yLCAkcGVyY2VudCk7XG59XG5cbi8vIEFkZCBwZXJjZW50YWdlIG9mIGJsYWNrIHRvIGEgY29sb3JcbkBmdW5jdGlvbiBzaGFkZSgkY29sb3IsICRwZXJjZW50KSB7XG4gICAgQHJldHVybiBtaXgoYmxhY2ssICRjb2xvciwgJHBlcmNlbnQpO1xufVxuXG5AZnVuY3Rpb24gX2xpbmVhci1wb3NpdGlvbnMtcGFyc2VyKCRwb3MpIHtcbiAgICAkdHlwZTogdHlwZS1vZihudGgoJHBvcywgMSkpO1xuICAgICRzcGVjOiBudWxsO1xuICAgICRkZWdyZWU6IG51bGw7XG4gICAgJHNpZGU6IG51bGw7XG4gICAgJGNvcm5lcjogbnVsbDtcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJHBvcyk7XG4gICAgLy8gUGFyc2UgU2lkZSBhbmQgY29ybmVyIHBvc2l0aW9uc1xuICAgIEBpZiAoJGxlbmd0aCA+IDEpIHtcbiAgICAgICAgQGlmIG50aCgkcG9zLCAxKSA9PSBcInRvXCIgeyAvLyBOZXdlciBzeW50YXhcbiAgICAgICAgICAgICRzaWRlOiBudGgoJHBvcywgMik7XG5cbiAgICAgICAgICAgIEBpZiAkbGVuZ3RoID09IDIgeyAvLyBlZy4gdG8gdG9wXG4gICAgICAgICAgICAgICAgLy8gU3dhcCBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHlcbiAgICAgICAgICAgICAgICAkZGVncmVlOiBfcG9zaXRpb24tZmxpcHBlcihudGgoJHBvcywgMikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGVsc2UgaWYgJGxlbmd0aCA9PSAzIHsgLy8gZWcuIHRvIHRvcCBsZWZ0XG4gICAgICAgICAgICAgICAgJGNvcm5lcjogbnRoKCRwb3MsIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRsZW5ndGggPT0gMiB7IC8vIE9sZGVyIHN5bnRheCAoXCJ0b3AgbGVmdFwiKVxuICAgICAgICAgICAgJHNpZGU6IF9wb3NpdGlvbi1mbGlwcGVyKG50aCgkcG9zLCAxKSk7XG4gICAgICAgICAgICAkY29ybmVyOiBfcG9zaXRpb24tZmxpcHBlcihudGgoJHBvcywgMikpO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChcIiN7JHNpZGV9ICN7JGNvcm5lcn1cIiA9PSBcImxlZnQgdG9wXCIpIG9yIChcIiN7JHNpZGV9ICN7JGNvcm5lcn1cIiA9PSBcInRvcCBsZWZ0XCIpIHtcbiAgICAgICAgICAgICRkZWdyZWU6IF9wb3NpdGlvbi1mbGlwcGVyKCN7JHNpZGV9KSBfcG9zaXRpb24tZmxpcHBlcigjeyRjb3JuZXJ9KTtcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAoXCIjeyRzaWRlfSAjeyRjb3JuZXJ9XCIgPT0gXCJyaWdodCB0b3BcIikgb3IgKFwiI3skc2lkZX0gI3skY29ybmVyfVwiID09IFwidG9wIHJpZ2h0XCIpIHtcbiAgICAgICAgICAgICRkZWdyZWU6IF9wb3NpdGlvbi1mbGlwcGVyKCN7JHNpZGV9KSBfcG9zaXRpb24tZmxpcHBlcigjeyRjb3JuZXJ9KTtcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAoXCIjeyRzaWRlfSAjeyRjb3JuZXJ9XCIgPT0gXCJyaWdodCBib3R0b21cIikgb3IgKFwiI3skc2lkZX0gI3skY29ybmVyfVwiID09IFwiYm90dG9tIHJpZ2h0XCIpIHtcbiAgICAgICAgICAgICRkZWdyZWU6IF9wb3NpdGlvbi1mbGlwcGVyKCN7JHNpZGV9KSBfcG9zaXRpb24tZmxpcHBlcigjeyRjb3JuZXJ9KTtcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAoXCIjeyRzaWRlfSAjeyRjb3JuZXJ9XCIgPT0gXCJsZWZ0IGJvdHRvbVwiKSBvciAoXCIjeyRzaWRlfSAjeyRjb3JuZXJ9XCIgPT0gXCJib3R0b20gbGVmdFwiKSB7XG4gICAgICAgICAgICAkZGVncmVlOiBfcG9zaXRpb24tZmxpcHBlcigjeyRzaWRlfSkgX3Bvc2l0aW9uLWZsaXBwZXIoI3skY29ybmVyfSk7XG4gICAgICAgIH1cbiAgICAgICAgJHNwZWM6IHRvICRzaWRlICRjb3JuZXI7XG4gICAgfVxuICAgIEBlbHNlIGlmICRsZW5ndGggPT0gMSB7XG4gICAgICAgIC8vIFN3YXAgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5XG4gICAgICAgIEBpZiAkdHlwZSA9PSBzdHJpbmcge1xuICAgICAgICAgICAgJGRlZ3JlZTogJHBvcztcbiAgICAgICAgICAgICRzcGVjOiB0byBfcG9zaXRpb24tZmxpcHBlcigkcG9zKTtcbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAkZGVncmVlOiAtMjcwIC0gJHBvczsgLy9yb3RhdGUgdGhlIGdyYWRpZW50IG9wcG9zaXRlIGZyb20gc3BlY1xuICAgICAgICAgICAgJHNwZWM6ICRwb3M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJGRlZ3JlZTogdW5xdW90ZSgkZGVncmVlICsgXCIsXCIpO1xuICAgICRzcGVjOiAgIHVucXVvdGUoJHNwZWMgKyBcIixcIik7XG4gICAgQHJldHVybiAkZGVncmVlICRzcGVjO1xufVxuXG5AZnVuY3Rpb24gX3Bvc2l0aW9uLWZsaXBwZXIoJHBvcykge1xuICAgIEByZXR1cm4gaWYoJHBvcyA9PSBsZWZ0LCByaWdodCwgbnVsbClcbiAgICBpZigkcG9zID09IHJpZ2h0LCBsZWZ0LCBudWxsKVxuICAgIGlmKCRwb3MgPT0gdG9wLCBib3R0b20sIG51bGwpXG4gICAgaWYoJHBvcyA9PSBib3R0b20sIHRvcCwgbnVsbCk7XG59XG5cblxuQG1peGluIHBsYWNlaG9sZGVyIHtcbiAgICAkcGxhY2Vob2xkZXJzOiBcIjotd2Via2l0LWlucHV0XCIgXCI6LW1velwiIFwiLW1velwiIFwiLW1zLWlucHV0XCI7XG4gICAgQGVhY2ggJHBsYWNlaG9sZGVyIGluICRwbGFjZWhvbGRlcnMge1xuICAgICAgICAmOiN7JHBsYWNlaG9sZGVyfS1wbGFjZWhvbGRlciB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuQG1peGluIGxpbmVhci1ncmFkaWVudCgkcG9zLCAkRzEsICRHMjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgJEczOiBudWxsLCAkRzQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICRHNTogbnVsbCwgJEc2OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAkRzc6IG51bGwsICRHODogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgJEc5OiBudWxsLCAkRzEwOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAkZmFsbGJhY2s6IG51bGwpIHtcbiAgICAvLyBEZXRlY3Qgd2hhdCB0eXBlIG9mIHZhbHVlIGV4aXN0cyBpbiAkcG9zXG4gICAgJHBvcy10eXBlOiB0eXBlLW9mKG50aCgkcG9zLCAxKSk7XG4gICAgJHBvcy1zcGVjOiBudWxsO1xuICAgICRwb3MtZGVncmVlOiBudWxsO1xuXG4gICAgLy8gSWYgJHBvcyBpcyBtaXNzaW5nIGZyb20gbWl4aW4sIHJlYXNzaWduIHZhcnMgYW5kIGFkZCBkZWZhdWx0IHBvc2l0aW9uXG4gICAgQGlmICgkcG9zLXR5cGUgPT0gY29sb3IpIG9yIChudGgoJHBvcywgMSkgPT0gXCJ0cmFuc3BhcmVudFwiKSAge1xuICAgICAgICAkRzEwOiAkRzk7ICRHOTogJEc4OyAkRzg6ICRHNzsgJEc3OiAkRzY7ICRHNjogJEc1O1xuICAgICAgICAkRzU6ICRHNDsgJEc0OiAkRzM7ICRHMzogJEcyOyAkRzI6ICRHMTsgJEcxOiAkcG9zO1xuICAgICAgICAkcG9zOiBudWxsO1xuICAgIH1cblxuICAgIEBpZiAkcG9zIHtcbiAgICAgICAgJHBvc2l0aW9uczogX2xpbmVhci1wb3NpdGlvbnMtcGFyc2VyKCRwb3MpO1xuICAgICAgICAkcG9zLWRlZ3JlZTogbnRoKCRwb3NpdGlvbnMsIDEpO1xuICAgICAgICAkcG9zLXNwZWM6ICAgbnRoKCRwb3NpdGlvbnMsIDIpO1xuICAgIH1cblxuICAgICRmdWxsOiAkRzEsICRHMiwgJEczLCAkRzQsICRHNSwgJEc2LCAkRzcsICRHOCwgJEc5LCAkRzEwO1xuXG4gICAgLy8gU2V0ICRHMSBhcyB0aGUgZGVmYXVsdCBmYWxsYmFjayBjb2xvclxuICAgICRmYWxsYmFjay1jb2xvcjogbnRoKCRHMSwgMSk7XG5cbiAgICAvLyBJZiAkZmFsbGJhY2sgaXMgYSBjb2xvciB1c2UgdGhhdCBjb2xvciBhcyB0aGUgZmFsbGJhY2sgY29sb3JcbiAgICBAaWYgKHR5cGUtb2YoJGZhbGxiYWNrKSA9PSBjb2xvcikgb3IgKCRmYWxsYmFjayA9PSBcInRyYW5zcGFyZW50XCIpIHtcbiAgICAgICAgJGZhbGxiYWNrLWNvbG9yOiAkZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGZhbGxiYWNrLWNvbG9yO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCRwb3MtZGVncmVlICRmdWxsKTsgLy8gU2FmYXJpIDUuMSssIENocm9tZVxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVucXVvdGUoXCJsaW5lYXItZ3JhZGllbnQoI3skcG9zLXNwZWN9I3skZnVsbH0pXCIpO1xufVxuIiwiQG1peGluIG5hdGl2ZS1zY3JvbGxiYXJzKCRiYXIsICR0cmFjaykge1xuICAgICYge1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogJGJhciAkdHJhY2s7XG4gICAgfVxuXG4gICAgLyogV29ya3Mgb24gQ2hyb21lL0VkZ2UvU2FmYXJpICovXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogNnB4O1xuICAgICAgICBoZWlnaHQ6IDZweDtcbiAgICB9XG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkdHJhY2s7XG4gICAgfVxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhcjtcbiAgICB9XG59XG4iLCIkaXJfc2xpZGVyX3dpZHRoOiAyMzBweDtcbiRpcl9zbGlkZXJfaGVpZ2h0OiAyMHB4O1xuJGlyX2NvdW50ZXJfd2lkdGg6IDYwcHg7XG4kaXJfbWFyZ2luOiAxMHB4IDA7XG5cbmlucHV0W3R5cGU9cmFuZ2VdLnJhbmdlZmllbGQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46ICRpcl9tYXJnaW47XG4gICAgd2lkdGg6ICRpcl9zbGlkZXJfd2lkdGg7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcblxuICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgIH1cbiAgICAmOjotd2Via2l0LXNsaWRlci1ydW5uYWJsZS10cmFjayB7XG4gICAgICAgIHdpZHRoOiAkaXJfc2xpZGVyX3dpZHRoO1xuICAgICAgICBoZWlnaHQ6ICRpcl9zbGlkZXJfaGVpZ2h0O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGFuaW1hdGU6IDAuMnM7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7XG4gICAgfVxuICAgICY6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICB3aWR0aDogMzVweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICB9XG4gICAgJjo6LW1vei1mb2N1cy1vdXRlciB7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICB9XG4gICAgJjo6LW1vei1yYW5nZS10cmFjayB7XG4gICAgICAgIHdpZHRoOiAkaXJfc2xpZGVyX3dpZHRoO1xuICAgICAgICBoZWlnaHQ6ICRpcl9zbGlkZXJfaGVpZ2h0O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGFuaW1hdGU6IDAuMnM7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7XG4gICAgfVxuICAgICY6Oi1tb3otcmFuZ2UtcHJvZ3Jlc3Mge1xuICAgICAgICBoZWlnaHQ6ICRpcl9zbGlkZXJfaGVpZ2h0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xuICAgIH1cbiAgICAmOjotbW96LXJhbmdlLXRodW1iIHtcbiAgICAgICAgaGVpZ2h0OiAyNHB4O1xuICAgICAgICB3aWR0aDogMzVweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgICY6Oi1tcy10cmFjayB7XG4gICAgICAgIHdpZHRoOiAkaXJfc2xpZGVyX3dpZHRoO1xuICAgICAgICBoZWlnaHQ6ICRpcl9zbGlkZXJfaGVpZ2h0O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGFuaW1hdGU6IDAuMnM7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgICY6Oi1tcy1maWxsLWxvd2VyLCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtdXBwZXIge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MHB4O1xuICAgIH1cbiAgICAmOjotbXMtdGh1bWIge1xuICAgICAgICBoZWlnaHQ6IDI0cHg7XG4gICAgICAgIHdpZHRoOiAzNXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgJiB+IGlucHV0W3R5cGU9bnVtYmVyXS5yYW5nZWZpZWxkIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogJGlyX2NvdW50ZXJfd2lkdGg7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICBwYWRkaW5nOiAwIDAgMCA1cHg7XG4gICAgfVxuICB9XG5cbnNwYW4ucmFuZ2UtYXBwZW5kIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBtYXJnaW4tbGVmdDogLTNweDtcbn1cbiIsIi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuLy8gfCBGbGF0IENvbG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbi8vIEdyZWVuc1xuJGNvbG9yLW5hdnk6ICMwMDFmM2Y7XG4kY29sb3ItYmx1ZTogIzAwNzREOTtcbiRjb2xvci1hcXVhOiAjN0ZEQkZGO1xuJGNvbG9yLXRlYWw6ICMzOUNDQ0M7XG4kY29sb3Itb2xpdmU6ICMzRDk5NzA7XG4kY29sb3ItZ3JlZW46ICMyRUNDNDA7XG4kY29sb3ItbGltZTogIzAxRkY3MDtcbiRjb2xvci15ZWxsb3c6ICNGRkRDMDA7XG4kY29sb3Itb3JhbmdlOiAjRkY4NTFCO1xuJGNvbG9yLXJlZDogI0ZGNDEzNjtcbiRjb2xvci1tYXJvb246ICM4NTE0NGI7XG4kY29sb3ItZnVjaHNpYTogI0YwMTJCRTtcbiRjb2xvci1wdXJwbGU6ICNCMTBEQzk7XG5cbi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuLy8gfCBGbGF0IFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuLy8gR3JlZW5zXG4kZmxhdC10dXJxdW9pc2U6ICMxQUJDOUM7XG4kZmxhdC1ncmVlbi1zZWE6ICMxNkEwODU7XG4kZmxhdC1lbWVyYWxkOiAjMkVDQzcxO1xuJGZsYXQtbmVwaHJpdGlzOiAjMjdBRTYwO1xuXG4vLyBCbHVlc1xuJGZsYXQtcGV0ZXItcml2ZXI6ICMzNDk4REI7XG4kZmxhdC1iZWxpemUtaG9sZTogIzI5ODBCOTtcbiRmbGF0LXdldC1hc3BoYWx0OiAjMzQ0OTVFO1xuJGZsYXQtbWlkbmlnaHQtYmx1ZTogIzJDM0U1MDtcblxuLy8gUHVycGxlc1xuJGZsYXQtYW1ldGh5c3Q6ICM5QjU5QjY7XG4kZmxhdC13aXN0ZXJpYTogIzhFNDRBRDtcblxuLy8gWWVsbG93c1xuJGZsYXQtc3VuZmxvd2VyOiAjRjFDNDBGO1xuXG4vLyBPcmFuZ2VzXG4kZmxhdC1vcmFuZ2U6ICNGMzlDMTI7XG4kZmxhdC1jYXJyb3Q6ICNFNjdFMjI7XG4kZmxhdC1wdW1wa2luOiAjRDM1NDAwO1xuXG4vLyBSZWRzXG4kZmxhdC1hbGl6YXJpbjogI0U3NEMzQztcbiRmbGF0LXBvbWVncmFuYXRlOiAjQzAzOTJCO1xuXG4vLyBHcmF5c1xuJGZsYXQtY2xvdWRzOiAjRUNGMEYxO1xuJGZsYXQtc2lsdmVyOiAjQkRDM0M3O1xuJGZsYXQtY29uY3JldGU6ICM5NUE1QTY7XG4kZmxhdC1hc2Jlc3RvczogIzdGOEM4RDtcblxuLy8gQWxpYXNlcyBtYWtlIGNvbG9ycyBlYXNpZXIgdG8gcmVtZW1iZXIuXG5cbi8vIEdyZWVuc1xuJGZsYXQtZ3JlZW4tMTogJGZsYXQtdHVycXVvaXNlO1xuJGZsYXQtZ3JlZW4tMjogJGZsYXQtZ3JlZW4tc2VhO1xuJGZsYXQtZ3JlZW4tMzogJGZsYXQtZW1lcmFsZDtcbiRmbGF0LWdyZWVuLTQ6ICRmbGF0LW5lcGhyaXRpcztcblxuLy8gQmx1ZXNcbiRmbGF0LWJsdWUtMTogJGZsYXQtcGV0ZXItcml2ZXI7XG4kZmxhdC1ibHVlLTI6ICRmbGF0LWJlbGl6ZS1ob2xlO1xuJGZsYXQtYmx1ZS0zOiAkZmxhdC13ZXQtYXNwaGFsdDtcbiRmbGF0LWJsdWUtNDogJGZsYXQtbWlkbmlnaHQtYmx1ZTtcblxuLy8gUHVycGxlc1xuJGZsYXQtcHVycGxlLTE6ICRmbGF0LWFtZXRoeXN0O1xuJGZsYXQtcHVycGxlLTI6ICRmbGF0LXdpc3RlcmlhO1xuXG4vLyBZZWxsb3dzXG4kZmxhdC15ZWxsb3ctMTogJGZsYXQtc3VuZmxvd2VyO1xuXG4vLyBPcmFuZ2VzXG4kZmxhdC1vcmFuZ2UtMTogJGZsYXQtb3JhbmdlO1xuJGZsYXQtb3JhbmdlLTI6ICRmbGF0LWNhcnJvdDtcbiRmbGF0LW9yYW5nZS0zOiAkZmxhdC1wdW1wa2luO1xuXG4vLyBSZWZzXG4kZmxhdC1yZWQtMTogJGZsYXQtYWxpemFyaW47XG4kZmxhdC1yZWQtMjogJGZsYXQtcG9tZWdyYW5hdGU7XG5cbi8vIEdyYXlzXG4kZmxhdC1ncmF5LTE6ICRmbGF0LWNsb3VkcztcbiRmbGF0LWdyYXktMjogJGZsYXQtc2lsdmVyO1xuJGZsYXQtZ3JheS0zOiAkZmxhdC1jb25jcmV0ZTtcbiRmbGF0LWdyYXktNDogJGZsYXQtYXNiZXN0b3M7XG5cbiJdfQ== */ +body{background:#F6F6F6;color:#6f7b8a}a{color:#0090D9}a:hover{color:#007fc0}.text-gray,.text-grey{color:#B7B9BD}.text-update{color:#77559D}blockquote{border-left:10px solid #ededed;background:#fafafa}blockquote p{color:#646e7c}blockquote cite{color:#6f7b8a}code{background:#f9f2f4;color:#9c1d3d}pre{background:#f6f6f6;border:1px solid #ddd}pre code{color:#237794}hr{border-bottom:2px solid #f7f7f7}.label{background:#0090D9;color:#fff}.badge{background:#77559D;color:#fff}.light-border{border-color:#f7f7f7 !important}.subtle-text{color:#8b95a1 !important}td,thead th{border-bottom:1px solid #f7f7f7}tr td.gpm-details{background-color:#fafafa}.tab-bar{background:#e3e3e3;color:gray}.tab-bar li.active span,.tab-bar li.active a{background:#fff;color:#6f7b8a}.tab-bar span,.tab-bar a{color:gray}.tab-bar span:hover,.tab-bar a:hover{color:#9a9a9a;background:#fdfdfd}.button{color:rgba(255,255,255,0.85);border-radius:4px;background:#0090D9}.button:focus,.button:hover{background:#26a1df;color:#fff}.button.dropdown-toggle{border-left:1px solid #007fc0}.button.dropdown-toggle{border-left:1px solid #007fc0}.button.secondary{color:rgba(255,255,255,0.85);border-radius:4px;background:#0073ae}.button.secondary:focus,.button.secondary:hover{background:#2688ba;color:#fff}.button.secondary.dropdown-toggle{border-left:1px solid #006295}.button.secondary.dropdown-toggle{border-left:1px solid #006295}.button.danger{color:rgba(255,255,255,0.85);border-radius:4px;background:#F45857}.button.danger:focus,.button.danger:hover{background:#cf4b4a;color:#fff}.button.danger.dropdown-toggle{border-left:1px solid #f6706f}.button-group .dropdown-menu{background-color:#0090D9;box-shadow:0 6px 12px rgba(0,0,0,0.175)}.button-group .dropdown-menu .divider{background-color:#0090D9}.button-group .dropdown-menu li>a{color:#fff}.button-group .dropdown-menu li>a:focus,.button-group .dropdown-menu li>a:hover{color:#fff}.button-group .dropdown-menu li>a:focus:hover,.button-group .dropdown-menu li>a:hover:hover{background:#26a1df}.button-group .dropdown-menu.language-switcher a.active{background-color:#0daeff}#admin-main .admin-block a.gumroad-button{background:#F45857 !important;color:#fff !important}#admin-login-wrapper{background:radial-gradient(circle at center, #535a6b 40%, #272a31 100%)}#admin-login{background:#3D424E}#admin-login.wide form label{color:#B7B9BD}#admin-login.wide form input::-webkit-input-placeholder{color:rgba(183,185,189,0.5)}#admin-login.wide form input::-moz-placeholder{color:rgba(183,185,189,0.5)}#admin-login.wide form input:-moz-placeholder{color:rgba(183,185,189,0.5)}#admin-login.wide form input:-ms-input-placeholder{color:rgba(183,185,189,0.5)}#admin-login .wrapper-spacer h3{color:rgba(255,255,255,0.4);border-bottom:3px solid rgba(255,255,255,0.1)}#admin-login .instructions,#admin-login p{color:rgba(183,185,189,0.8)}#admin-login h1{background-color:#323640}#admin-login h1.text-logo{color:#fff}#admin-login h1 svg path:first-child{fill:#2b2f37}#admin-login h1 svg path:last-child{fill:rgba(255,255,255,0.9) !important}#admin-login h5{color:#B7B9BD}#admin-login form input{background:#444957;color:#fff;border:1px solid #31353e}#admin-login form input::-webkit-input-placeholder{color:rgba(183,185,189,0.5)}#admin-login form input::-moz-placeholder{color:rgba(183,185,189,0.5)}#admin-login form input:-moz-placeholder{color:rgba(183,185,189,0.5)}#admin-login form input:-ms-input-placeholder{color:rgba(183,185,189,0.5)}#admin-sidebar{background:#3D424E}#admin-sidebar a{color:rgba(255,255,255,0.9)}#admin-sidebar a:hover{color:#fff}#admin-logo{background-color:#323640}#admin-logo .grav-logo path{fill:rgba(255,255,255,0.9) !important}#admin-logo .grav-logo:hover path{fill:#fff !important}#admin-logo a,#admin-logo i{color:#e6e6e6}#admin-logo a:hover,#admin-logo i:hover{color:#fff}#open-handle{background-color:#272a32;border-left:1px solid #3d424e}#open-handle i{color:rgba(255,255,255,0.6)}#open-handle i:hover{color:rgba(255,255,255,0.8)}#admin-nav-quick-tray{background:#393d48;border-bottom:1px solid #363b45;color:#fff}#admin-nav-quick-tray i:hover{color:#fff}.block-userinfo img{border:4px solid #e6e6e6}#offline-status{background-color:#77559D;color:#fff}#admin-user-details,.admin-user-details{border-bottom:1px solid #484e5c}#admin-user-details:hover img,.admin-user-details:hover img{box-shadow:0px 0px 0 50px #444957}#admin-user-details .admin-user-names h4,#admin-user-details .admin-user-names h5,.admin-user-details .admin-user-names h4,.admin-user-details .admin-user-names h5{color:#fff}#admin-menu li .badges .count{color:#fff;background-color:#323640}#admin-menu li .badges .updates{color:#fff;background-color:#06A599}#admin-menu li a:hover{background:#434753;color:#fff}#admin-menu li a:hover .fa{color:#fff}#admin-menu li.selected a{background:#323640;color:#fff;border-left:9px solid #007ab8}#admin-menu li.selected a .fa{color:#fff}#admin-main .grav-update{background:#77559D;color:#fff}#admin-main .grav-update a.button,#admin-main .grav-update span.button,#admin-main .grav-update button.button{color:rgba(255,255,255,0.85);border-radius:4px;background:#5f447e}#admin-main .grav-update a.button:focus,#admin-main .grav-update a.button:hover,#admin-main .grav-update span.button:focus,#admin-main .grav-update span.button:hover,#admin-main .grav-update button.button:focus,#admin-main .grav-update button.button:hover{background:#513a6b;color:#fff}#admin-main .grav-update a.button.dropdown-toggle,#admin-main .grav-update span.button.dropdown-toggle,#admin-main .grav-update button.button.dropdown-toggle{border-left:1px solid #6b4d8f}#admin-main .titlebar{background:#fff;color:#3D424E}#admin-main .titlebar .button-bar .button{color:rgba(255,255,255,0.85);border-radius:4px;background:#0090D9}#admin-main .titlebar .button-bar .button:focus,#admin-main .titlebar .button-bar .button:hover{background:#26a1df;color:#fff}#admin-main .titlebar .button-bar .button.dropdown-toggle{border-left:1px solid #007fc0}#admin-main .titlebar .button-bar .button.danger{color:rgba(255,255,255,0.85);border-radius:4px;background:#F45857}#admin-main .titlebar .button-bar .button.danger:focus,#admin-main .titlebar .button-bar .button.danger:hover{background:#cf4b4a;color:#fff}#admin-main .titlebar .button-bar .button.danger.dropdown-toggle{border-left:1px solid #f6706f}#admin-main .titlebar .button-bar .button.success{color:rgba(255,255,255,0.85);border-radius:4px;background:#77559D}#admin-main .titlebar .button-bar .button.success:focus,#admin-main .titlebar .button-bar .button.success:hover{background:#8b6fac;color:#fff}#admin-main .titlebar .button-bar .button.success.dropdown-toggle{border-left:1px solid #6a4c8c}#admin-main .titlebar .button-bar .button.success.dropdown-toggle{border-left-color:#654886}#admin-main .titlebar .button-bar .button.success+.dropdown-menu{background-color:#77559D}#admin-main .titlebar .button-bar span.button{color:rgba(255,255,255,0.45);border-radius:4px;background:rgba(0,144,217,0.5)}#admin-main .titlebar .button-bar span.button:focus,#admin-main .titlebar .button-bar span.button:hover{background:rgba(88,182,230,0.575);color:rgba(255,255,255,0.6)}#admin-main .titlebar .button-bar span.button.dropdown-toggle{border-left:1px solid rgba(0,127,192,0.5)}#admin-main .lines-button{background:rgba(0,0,0,0.1)}#admin-main .lines-button .lines,#admin-main .lines-button .lines:before,#admin-main .lines-button .lines:after{background:#3D424E}#admin-main .admin-block{background:#fff;color:#6f7b8a}#admin-main .admin-block a:not(.button){color:#0090D9}#admin-main .admin-block a:not(.button):hover{color:#007fc0}#admin-main .admin-block h1{color:#414147;border-bottom:1px solid #f7f7f7}#admin-main .danger.button-bar,#admin-main .success.button-bar{background:#f7f7f7}#admin-main .danger .button{color:rgba(255,255,255,0.85);border-radius:4px;background:#F45857}#admin-main .danger .button:focus,#admin-main .danger .button:hover{background:#cf4b4a;color:#fff}#admin-main .danger .button.dropdown-toggle{border-left:1px solid #f6706f}#admin-main .content-padding div[class*=notifications-container] .alert.note{background:#fff;color:#6f7b8a}#admin-main .content-padding div[class*=notifications-container] .alert.note.alert{border-bottom:2px solid #f2f2f2}#admin-main .content-padding div[class*=notifications-container] .alert.note a:not(.button){color:#0090D9}#admin-main .content-padding div[class*=notifications-container] .alert.note a:not(.button):hover{color:#007fc0}#admin-main .content-padding div[class*=notifications-container] .alert.warning{background:#F45857;color:#fff}#admin-main .content-padding div[class*=notifications-container] .alert.warning.alert{border-bottom:2px solid #f2403f}#admin-main .content-padding div[class*=notifications-container] .alert.warning a{color:#fff}#admin-main .content-padding div[class*=notifications-container] .alert.warning a:hover{color:#fff}#admin-main #notifications .badge.alert.note{background:#06A599;color:#fff}#admin-main #notifications .badge.alert.warning{background:#F45857;color:#fff}.sidebar-mobile-open #admin-main .lines-button .lines,.sidebar-mobile-open #admin-main .lines-button .lines:before,.sidebar-mobile-open #admin-main .lines-button .lines:after{background:#fff}#dependency-missing{margin-bottom:1.75rem}#dependency-missing .alert{padding:1rem 1.5rem}#dependency-missing .alert h1{color:#fff;border-bottom:0;display:inline}#admin-dashboard .admin-block li{border-bottom:1px solid #f7f7f7}#admin-dashboard .primary-accent{background-color:#0078b5;background-image:-webkit-linear-gradient(#0078b5,#0090D9);background-image:linear-gradient(#0078b5,#0090D9)}#admin-dashboard .primary-accent h1{color:#fff;border-bottom:0}#admin-dashboard .primary-accent p{color:rgba(255,255,255,0.95)}#admin-dashboard .primary-accent .stat i{color:rgba(255,255,255,0.75)}#admin-dashboard .primary-accent .numeric em{color:rgba(255,255,255,0.85)}#admin-dashboard .primary-accent .chart-loader{color:#0073ae}#admin-dashboard .secondary-accent{background-color:#058379;background-image:-webkit-linear-gradient(#058379,#06A599);background-image:linear-gradient(#058379,#06A599)}#admin-dashboard .secondary-accent h1{color:#fff;border-bottom:0}#admin-dashboard .secondary-accent p{color:rgba(255,255,255,0.95)}#admin-dashboard .secondary-accent .stat i{color:rgba(255,255,255,0.75)}#admin-dashboard .secondary-accent .numeric em{color:rgba(255,255,255,0.85)}#admin-dashboard .secondary-accent .chart-loader{color:#05847a}.sidebar-mobile-open #admin-main .lines-button .lines,.sidebar-mobile-open #admin-main .lines-button .lines:before,.sidebar-mobile-open #admin-main .lines-button .lines:after{background:#fff}form h1,form h3{border-bottom:3px solid #f7f7f7}form h1,form h2,form h3,form h4,form h5{color:#414147}form .note{color:#F45857}form .required{color:#da4b46}form .overlay{background:#fafafa}form .overlay pre{background:#fefefe}form .form-border{border:1px solid #e6e6e6}form .form-field-colors{background-color:#fcfcfc;color:#646e7c}form .form-select-wrapper:after,form .selectize-control.single .selectize-input:after{color:#646e7c}form .selectize-control.single .selectize-input,form .selectize-control.single .selectize-input.full,form .selectize-control.single .selectize-input.items,form .selectize-control.single .selectize-input.active,form .selectize-control.multi .selectize-input,form .selectize-control.multi .selectize-input.full,form .selectize-control.multi .selectize-input.items,form .selectize-control.multi .selectize-input.active{color:#646e7c;border-color:#e6e6e6;background-color:#fcfcfc}form .selectize-control.single .selectize-input input,form .selectize-control.multi .selectize-input input{color:#646e7c}form .selectize-control.single .selectize-input a.remove,form .selectize-control.multi .selectize-input a.remove{color:#F6F6F6 !important}form .form-input-wrapper .form-input-addon{border:1px solid #e6e6e6;background:#fff}form .form-input-wrapper .form-input-addon.copy-to-clipboard{background:#0090D9;color:#fff}form .form-input-wrapper .form-input-addon.copy-to-clipboard:hover{background:#007fc0}form .selectize-control.single.plugin-remove_button .selectize-input .item,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single,form .selectize-control.multi .selectize-input .item,form .selectize-control.multi .selectize-input .remove-single{color:#fff !important;background:#6f7b8a}form .selectize-control.single.plugin-remove_button .selectize-input .item.active,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single.active,form .selectize-control.multi .selectize-input .item.active,form .selectize-control.multi .selectize-input .remove-single.active{background:#06A599;color:#fff}form select{border:1px solid #e6e6e6;background:#fcfcfc;color:#646e7c}form input[type=text],form input[type=password],form input[type=email],form input[type=date],form input[type=tel],form input[type=time],form input[type=week],form input[type=month],form input[type=number],form input[type=color],form input[type=url]{border:1px solid #e6e6e6;background:#fcfcfc;color:#646e7c}form input[readonly=readonly]{background:#fff}form textarea{color:#646e7c;border:1px solid #e6e6e6;background:#fcfcfc}form .form-frontmatter-wrapper{border:1px solid #e6e6e6}form .button-bar{background:#f7f7f7}form .checkboxes label:before{background:#fcfcfc;border:1px solid #e6e6e6}form input::-webkit-input-placeholder,form textarea::-webkit-input-placeholder,form select::-webkit-input-placeholder{color:rgba(100,110,124,0.4)}form input::-moz-placeholder,form textarea::-moz-placeholder,form select::-moz-placeholder{color:rgba(100,110,124,0.4)}form input:-moz-placeholder,form textarea:-moz-placeholder,form select:-moz-placeholder{color:rgba(100,110,124,0.4)}form input:-ms-input-placeholder,form textarea:-ms-input-placeholder,form select:-ms-input-placeholder{color:rgba(100,110,124,0.4)}form .g-colorpicker{width:230px}form .g-colorpicker .g-colorpicker-preview-wrap{border-color:#e6e6e6}form .form-input-file{border:2px dashed #e6e6e6}form .form-input-file p{color:#646e7c}form .form-input-file ul{color:#fff;background:#0090D9}form .file-thumbnail-remove{background:#0090D9}form .file-thumbnail-remove .fa{color:#fff}form .file-thumbnail-remove:hover{background:#fff}form .file-thumbnail-remove:hover .fa{color:#0090D9}form input[type=range]::-webkit-slider-runnable-track{background:#fafafa;border:1px solid #e6e6e6}form input[type=range]::-webkit-slider-thumb{border:1px solid #e6e6e6;background:#0090D9}form input[type=range]:focus::-webkit-slider-runnable-track{background:#fafafa}form input[type=range]::-moz-range-track{background:#fafafa;border:1px solid #e6e6e6}form input[type=range]::-moz-range-progress{background:#fafafa}form input[type=range]::-moz-range-thumb{border:1px solid #e6e6e6;background:#0090D9}form input[type=range]::-ms-fill-lower,form input[type=range]::-ms-fill-upper{background:#fafafa;border:1px solid #e6e6e6}form input[type=range]::-ms-thumb{border:1px solid #e6e6e6;background:#0090D9}form input[type=range]:focus::-ms-fill-lower,form input[type=range]:focus::-ms-fill-upper{background:#fafafa}form .form-display-wrapper table{border:1px solid #e6e6e6}form .form-display-wrapper table th{background-color:#f5f5f5;border-bottom:3px solid #e6e6e6;border-right:1px solid #e6e6e6}form .form-display-wrapper table td{border-right:1px solid #e6e6e6}form .form-display-wrapper table tr{border-bottom:1px solid #e6e6e6}.grav-editor-resizer{background-color:#e6e6e6}.form-order-wrapper ul.orderable li{border:1px solid #e6e6e6;background:#fff;color:#6f7b8a}.form-order-wrapper ul.orderable li.drag-handle{background:#fcfcfc;color:#646e7c}.form-order-wrapper ul.orderable li[data-active-id]{border-color:#0090D9}.form-order-wrapper ul.orderable.disabled li{opacity:0.7}.form-list-wrapper ul[data-collection-holder]>li{border:1px solid #e6e6e6;background:#fff;color:#8b95a1}.form-list-wrapper ul[data-collection-holder]>li .item-actions{color:#58626e}.form-list-wrapper .collection-sort{background:#fafafa;border-right:1px solid #e6e6e6}.form-fieldset{background-color:#fcfcfc;border:1px solid #e6e6e6}.form-fieldset--label{background-color:#f5f5f5}.form-fieldset--label:hover,.form-fieldset input:checked+.form-fieldset--label{background-color:#f0f0f0}#admin-main #admin-topbar{background:#e3e3e3}#admin-main .form-tabs{background:#e3e3e3}#admin-main .form-tabs.side-tabs>.tabs-nav{background:#fff}#admin-main .form-tabs.side-tabs>.tabs-nav a{color:#0090D9;cursor:pointer}#admin-main .form-tabs.side-tabs>.tabs-nav a:hover{background:#F6F6F6}#admin-main .form-tabs.side-tabs>.tabs-nav a.active{background:#f0f0f0;color:gray}#admin-main .form-tabs.side-tabs>.tabs-content{box-shadow:-20px 0 50px -40px rgba(0,0,0,0.3)}#admin-main .form-tabs .tabs-nav a{color:gray}#admin-main .form-tabs .tabs-nav a:hover{color:#737373;background:#d6d6d6}#admin-main .form-tabs .tabs-nav a.active{background:#fff;color:#6f7b8a}#admin-main .form-tabs.subtle{background:#fff}#admin-main .form-tabs.subtle .tabs-nav{background:linear-gradient(to bottom, rgba(255,255,255,0), #f7f7f7)}#admin-main .form-tabs.subtle a{color:#646f7c;border:0 solid transparent;border-bottom:1px solid #e6e6e6}#admin-main .form-tabs.subtle a:hover{color:#59626e;background:linear-gradient(to bottom, rgba(255,255,255,0), #ededed)}#admin-main .form-tabs.subtle a.active{border-top:1px solid #e6e6e6;border-left:1px solid #e6e6e6;border-right:1px solid #e6e6e6;border-bottom:0}#admin-main .form-tabs.subtle a.active:hover{background:#fff}#admin-main .form-tabs.subtle a.active:first-child{border-left:0}#admin-main .form-tabs.subtle a.active:last-child{border-right:0}#admin-main .form-tabs .tabs-content{background:#fff}.switch-grav{background-color:#fcfcfc;border:1px solid #e6e6e6}.switch-grav label{color:#6f7b8a;transition:background-color 0.5s ease}.switch-grav.switch-toggle input.highlight:checked+label{background:#0090D9;color:#fff}.switch-grav.switch-toggle input:checked+label{color:#fff;background:#6f7b8a}.toast{background-color:#030303}.toast-success{background-color:#77559D}.toast-success .button{background:#8462aa;color:rgba(255,255,255,0.85);border-radius:4px;background:#9172b3}.toast-success .button:focus,.toast-success .button:hover{background:#7b6198;color:#fff}.toast-success .button.dropdown-toggle{border-left:1px solid #9e83bc}.toast-error{background-color:#F45857}.toast-error .button{background-color:#f12827;color:rgba(255,255,255,0.85);border-radius:4px;background:#d70f0e}.toast-error .button:focus,.toast-error .button:hover{background:#dd3332;color:#fff}.toast-error .button.dropdown-toggle{border-left:1px solid #bf0e0d}.toast-info{background-color:#06A599}.toast-info .button{background-color:#04746b;color:rgba(255,255,255,0.85);border-radius:4px;background:#02433e}.toast-info .button:focus,.toast-info .button:hover{background:#285f5b;color:#fff}.toast-info .button.dropdown-toggle{border-left:1px solid #022a27}.info{background:#77559D;color:#fff}.info a{color:#f2f2f2}.info a:hover{color:#fff}.info a.button,.info span.button,.info button.button{color:rgba(255,255,255,0.85);border-radius:4px;background:#5f447e}.info a.button:focus,.info a.button:hover,.info span.button:focus,.info span.button:hover,.info button.button:focus,.info button.button:hover{background:#513a6b;color:#fff}.info a.button.dropdown-toggle,.info span.button.dropdown-toggle,.info button.button.dropdown-toggle{border-left:1px solid #6b4d8f}.info-reverse{color:#77559D}.notice,.note{background:#06A599;color:#fff}.notice a,.note a{color:#f2f2f2}.notice a:hover,.note a:hover{color:#fff}.notice a.button,.notice span.button,.notice button.button,.note a.button,.note span.button,.note button.button{color:rgba(255,255,255,0.85);border-radius:4px;background:#05847a}.notice a.button:focus,.notice a.button:hover,.notice span.button:focus,.notice span.button:hover,.notice button.button:focus,.notice button.button:hover,.note a.button:focus,.note a.button:hover,.note span.button:focus,.note span.button:hover,.note button.button:focus,.note button.button:hover{background:#047068;color:#fff}.notice a.button.dropdown-toggle,.notice span.button.dropdown-toggle,.notice button.button.dropdown-toggle,.note a.button.dropdown-toggle,.note span.button.dropdown-toggle,.note button.button.dropdown-toggle{border-left:1px solid #069d91}.notice-reverse,.note-reverse{color:#06A599}.error,.warning{background:#F45857;color:#fff}.error a,.warning a{color:#f2f2f2}.error a:hover,.warning a:hover{color:#fff}.error a.button,.error span.button,.error button.button,.warning a.button,.warning span.button,.warning button.button{color:rgba(255,255,255,0.85);border-radius:4px;background:#c34646}.error a.button:focus,.error a.button:hover,.error span.button:focus,.error span.button:hover,.error button.button:focus,.error button.button:hover,.warning a.button:focus,.warning a.button:hover,.warning span.button:focus,.warning span.button:hover,.warning button.button:focus,.warning button.button:hover{background:#a63c3c;color:#fff}.error a.button.dropdown-toggle,.error span.button.dropdown-toggle,.error button.button.dropdown-toggle,.warning a.button.dropdown-toggle,.warning span.button.dropdown-toggle,.warning button.button.dropdown-toggle{border-left:1px solid #c95959}.error-reverse,.warning-reverse{color:#F45857}.primary-accent{background:#007fc0;color:#fff}.primary-accent .button-bar{background:#0078b5}.primary-accent .button{color:rgba(255,255,255,0.85);border-radius:4px;background:#0090D9}.primary-accent .button:focus,.primary-accent .button:hover{background:#26a1df;color:#fff}.primary-accent .button.dropdown-toggle{border-left:1px solid #007fc0}.secondary-accent{background:#058c82;color:#fff}.secondary-accent .button-bar{background:#058379}.secondary-accent .button{color:rgba(255,255,255,0.85);border-radius:4px;background:#06A599}.secondary-accent .button:focus,.secondary-accent .button:hover{background:#2bb3a8;color:#fff}.secondary-accent .button.dropdown-toggle{border-left:1px solid #058c82}.secondary-accent .button-group .dropdown-menu{background:#06A599}.secondary-accent .button-group .dropdown-menu li a:hover{background:#2bb3a8}.card-item{border:1px solid #e6e6e6;background:#fff}.card-item .gpm-actions{background:#fafafa}.card-item.active-theme{border:1px solid #06A599}.card-item.active-theme .gpm-actions{background:#06A599;color:#fff}.user-details h2{color:#414147}.user-details h2 span{color:#6f7b8a}.user-details .gravatar{color:#a7afb8}.user-details .gravatar a{color:#6f7b8a !important}#admin-main .grav-editor-toolbar .dropdown-menu{box-shadow:0 3px 6px rgba(0,0,0,0.075);border:1px solid #e6e6e6;background:#fff}#admin-main .grav-editor-toolbar{border:1px solid #e6e6e6;border-top-right-radius:4px;border-top-left-radius:4px;background:#fff}#admin-main .grav-editor-toolbar ul a{color:#6f7b8a}#admin-main .grav-editor-toolbar ul a:hover,#admin-main .grav-editor-toolbar ul a:focus{background:#f7f7f7;color:#646e7c;border-top:1px solid #e6e6e6}#admin-main .grav-editor-toolbar ul .editor-active a{cursor:auto;background:#fff;border-top:1px solid #e6e6e6;border-left:1px solid #e6e6e6;border-right:1px solid #e6e6e6}#admin-main .grav-editor-toolbar ul .editor-active a:hover{background:#f7f7f7;color:#646e7c;border-top:0;border-bottom:1px solid #e6e6e6}#admin-main .grav-editor-toolbar ul .editor-active:last-child a,#admin-main .grav-editor-toolbar ul .editor-active:last-child a:hover{border-right:1px solid transparent}#admin-main .grav-editor-toolbar ul .button-disabled a{color:rgba(111,123,138,0.5)}#admin-main .grav-editor-toolbar ul .button-disabled a:hover,#admin-main .grav-editor-toolbar ul .button-disabled a:focus{background:#fff;color:#6f7b8a;border-left:1px solid transparent;border-right:1px solid transparent}#admin-main .grav-editor-hide-toolbar+div{border:1px solid #e6e6e6}.grav-editor-content,.grav-editor-preview{border:1px solid #e6e6e6;border-top:0}.grav-mdeditor-content{border:1px solid #e6e6e6}[data-mode=split] .grav-mdeditor-code{border-right:1px solid #e6e6e6}.primary-accent .ct-chart .ct-series.ct-series-a .ct-bar{stroke:rgba(255,255,255,0.85) !important}.primary-accent .ct-chart .ct-series.ct-series-a .ct-slice-donut{stroke:#fff !important}.primary-accent .ct-chart .ct-series.ct-series-b .ct-slice-donut{stroke:rgba(255,255,255,0.2) !important}.primary-accent .ct-chart .ct-label{fill:rgba(255,255,255,0.5);color:rgba(255,255,255,0.5)}.primary-accent .ct-chart .ct-grid{stroke:rgba(255,255,255,0.2)}.secondary-accent .ct-chart .ct-series.ct-series-a .ct-bar{stroke:rgba(255,255,255,0.85) !important}.secondary-accent .ct-chart .ct-series.ct-series-a .ct-slice-donut{stroke:#fff !important}.secondary-accent .ct-chart .ct-series.ct-series-b .ct-slice-donut{stroke:rgba(255,255,255,0.2) !important}.secondary-accent .ct-chart .ct-label{fill:rgba(255,255,255,0.5);color:rgba(255,255,255,0.5)}.secondary-accent .ct-chart .ct-grid{stroke:rgba(255,255,255,0.2)}.dropzone{background:#fcfcfc;border:1px #e6e6e6 solid}.dropzone.dz-drag-hover{border-color:#ccc;background:rgba(0,0,0,0.04)}.dropzone .dz-preview{border:1px solid #f2f2f2}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{color:#fff}.dropzone .dz-preview .dz-success-mark{background-color:#0daeff}.dropzone .dz-preview .dz-error-mark{background-color:#F45857}.dropzone .dz-preview .dz-progress{background:#d7d7d7}.dropzone .dz-preview .dz-progress .dz-upload{background-color:#0daeff}.dropzone .dz-preview .dz-error-message{background:#fff;color:#F45857}.dropzone .dz-preview:hover .dz-details{box-shadow:0px 0px 20px -5px rgba(0,0,0,0.4)}.dropzone .dz-preview .dz-remove,.dropzone .dz-preview .dz-unset,.dropzone .dz-preview .dz-view,.dropzone .dz-preview .dz-insert,.dropzone .dz-preview .dz-metadata{background:#ededed}.dropzone .dz-preview .dz-remove:hover:after,.dropzone .dz-preview .dz-unset:hover:after,.dropzone .dz-preview .dz-view:hover:after,.dropzone .dz-preview .dz-insert:hover:after,.dropzone .dz-preview .dz-metadata:hover:after{color:#0090D9}.dropzone .dz-preview .dz-remove:after,.dropzone .dz-preview .dz-unset:after,.dropzone .dz-preview .dz-view:after,.dropzone .dz-preview .dz-insert:after,.dropzone .dz-preview .dz-metadata:after{color:#6f7b8a}.dropzone .dz-preview .dz-remove:hover:after{color:#F45857}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message span{color:#a7afb8}.dropzone.dz-clickable .dz-message .dz-button,.dropzone.dz-clickable .dz-message span .dz-button{background-color:#f2f2f2}.gpm>table>tbody>tr{border-bottom:1px solid #f7f7f7}.gpm>table>tbody>tr:hover{background:#fff}.gpm .gpm-name{color:#99a2ad}.gpm .gpm-version{color:#8b95a1}.gpm .gpm-ribbon,.gpm .badge.update{background:#77559D}.gpm .gpm-ribbon a,.gpm .gpm-ribbon,.gpm .badge.update a,.gpm .badge.update{color:#fff !important}.gpm .gpm-ribbon a:hover,.gpm .gpm-ribbon:hover,.gpm .badge.update a:hover,.gpm .badge.update:hover{background:#654885}.gpm .gpm-update .gpm-name{color:#0090D9}.gpm .gpm-item-info{border-bottom:3px solid #f7f7f7}.gpm .gpm-item-info .gpm-item-icon{color:#fafafa}.gpm .gpm-actions .disabled{color:#8b95a1}.gpm .gpm-testing{background-color:#06A599;color:#fff}.pages-list{border-top:1px solid #f7f7f7}.pages-list .row{border-bottom:1px solid #f7f7f7}.pages-list .row:hover{background:#fff}.pages-list .row p.page-route{color:#6f7b8a}.pages-list .row p.page-route .spacer{color:#6f7b8a}.pages-list .row .badge.lang{background-color:#e3e3e3;color:gray}.pages-list .row .badge.lang.info{background-color:#77559D;color:#fff}.pages-list .page-home{color:#8b95a1}.pages-list .page-info{color:#8b95a1}#admin-topbar #admin-lang-toggle{z-index:3}#admin-topbar #admin-lang-toggle button{color:rgba(255,255,255,0.85);border-radius:4px;background:#77559D}#admin-topbar #admin-lang-toggle button:focus,#admin-topbar #admin-lang-toggle button:hover{background:#8b6fac;color:#fff}#admin-topbar #admin-lang-toggle button.dropdown-toggle{border-left:1px solid #6a4c8c}#admin-topbar #admin-lang-toggle .dropdown-menu{background:#77559D}#admin-topbar .switch-grav{background-color:#fdfdfd}#admin-topbar .switch-toggle input:checked+label{color:#fff}#admin-topbar .switch-toggle input+label{color:gray;background:#d6d6d6}#admin-topbar .switch-toggle input.highlight:checked+label{background:#0090D9}body .selectize-dropdown .optgroup-header{color:#000;border-bottom:1px solid #eee;background-color:#fafafa}body .bootstrap-datetimepicker-widget.dropdown-menu.bottom{background-color:#fcfcfc;color:#646e7c;border-color:#e6e6e6}body .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-bottom-color:#e6e6e6}body .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-bottom-color:#fcfcfc}body .bootstrap-datetimepicker-widget table td span:hover,body .bootstrap-datetimepicker-widget table th:hover,body .bootstrap-datetimepicker-widget table td.day:hover{background:#f5f5f5 !important}body .bootstrap-datetimepicker-widget table td.active,body .bootstrap-datetimepicker-widget table td.active:hover{background-color:#77559D !important;color:#fff !important}.scheduler-content pre{background:#fafafa;border-color:#e6e6e6}.scheduler-content pre code{color:#414147}#phpinfo th{background:#fcfcfc}#phpinfo td{word-wrap:break-word}#phpinfo td:first-child{color:#414147}.remodal{background:#fff;color:#6f7b8a}.remodal-close{color:#6f7b8a}.remodal-close:hover,.remodal-close:focus{color:#424951}*{scrollbar-width:thin;scrollbar-color:rgba(111,123,138,0.4) #fff}*::-webkit-scrollbar{width:6px;height:6px}*::-webkit-scrollbar-track{background:#fff}*::-webkit-scrollbar-thumb{background-color:rgba(111,123,138,0.4)}.simplebar-scrollbar:before{background-color:#6f7b8a}#admin-sidebar .simplebar-scrollbar:before{background-color:#B7B9BD}#page-filtering .page-shortcuts .button{color:rgba(255,255,255,0.85);border-radius:4px;background:rgba(100,110,124,0.5)}#page-filtering .page-shortcuts .button:focus,#page-filtering .page-shortcuts .button:hover{background:rgba(153,160,169,0.575);color:#fff}#page-filtering .page-shortcuts .button.dropdown-toggle{border-left:1px solid rgba(88,98,110,0.5)}.reports-content .report-output table thead tr th{background-color:#fafafa;color:#414147}.preview-wrapper iframe{border:1px solid #eee}#backups-stats .backups-usage-wrapper>div{background:linear-gradient(-90deg, #006ea6 0, #005d8d 100%)}#backups-stats .backups-usage-wrapper>div.full{background:linear-gradient(-90deg, #f2403f 0, #8f0a09 100%)}.logs-output table.noflex td.level .badge.error,.logs-output table.noflex td.level .badge.critical,.logs-output table.noflex td.level .badge.alert{background-color:#DC3023;color:#fff}.logs-output table.noflex td.level .badge.notice,.logs-output table.noflex td.level .badge.warning{background-color:#E08A1E;color:#fff}.logs-output table.noflex td.level .badge.debug{background-color:#26A65B;color:#fff}.logs-output table.noflex td.level .badge.info{background-color:#22A7F0;color:#fff}.logs-output table.noflex td.level .badge.emergency{background-color:#8E44AD;color:#fff}.permission-container{overflow:hidden}[data-grav-field="parents"] .form-input-wrapper:hover{color:#0090D9}.grav-loader,.grav-loader:after{border-radius:50%;width:10em;height:10em}.grav-loader{margin:60px auto;font-size:10px;position:relative;text-indent:-9999em;border-top:1.1em solid rgba(111,123,138,0.2);border-right:1.1em solid rgba(111,123,138,0.2);border-bottom:1.1em solid rgba(111,123,138,0.2);border-left:1.1em solid #6f7b8a;transform:translateZ(0);animation:gravloader 1.1s infinite linear}@-webkit-keyframes gravloader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes gravloader{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}input[type=range].rangefield{display:inline-block;vertical-align:middle;-webkit-appearance:none;margin:10px 0;width:230px;background:none}input[type=range].rangefield:focus{outline:none}input[type=range].rangefield::-webkit-slider-runnable-track{width:230px;height:20px;cursor:pointer;animate:0.2s;border-radius:25px}input[type=range].rangefield::-webkit-slider-thumb{height:24px;width:35px;border-radius:6px;cursor:pointer;-webkit-appearance:none;margin-top:-3px}input[type=range].rangefield::-moz-focus-outer{border:0}input[type=range].rangefield::-moz-range-track{width:230px;height:20px;cursor:pointer;animate:0.2s;border-radius:25px}input[type=range].rangefield::-moz-range-progress{height:20px;border-radius:25px}input[type=range].rangefield::-moz-range-thumb{height:24px;width:35px;border-radius:6px;cursor:pointer}input[type=range].rangefield::-ms-track{width:230px;height:20px;cursor:pointer;animate:0.2s;background:transparent;border-color:transparent;color:transparent}input[type=range].rangefield::-ms-fill-lower,input[type=range].rangefield input[type=range]::-ms-fill-upper{border-radius:50px}input[type=range].rangefield::-ms-thumb{height:24px;width:35px;border-radius:6px;cursor:pointer}input[type=range].rangefield ~ input[type=number].rangefield{background:none;display:inline-block;width:60px;text-align:right;border:0;line-height:16px;vertical-align:middle;padding:0 0 0 5px}span.range-append{display:inline-block;line-height:20px;vertical-align:middle;margin-left:-3px}#pages-filters{background:#3D424E;color:rgba(183,185,189,0.9)}#pages-filters .button-border{color:#B7B9BD;border-radius:4px;border:1px solid #535a6b;color:#B7B9BD !important}#pages-filters .button-border:hover{border-color:#6d7381;color:#B7B9BD}#pages-filters .button-border.dropdown-toggle{border-left:1px solid #484e5c}#pages-filters .filters-bar input{color:#fff;border-color:#585f70;background-color:#4a515f}#pages-filters .filters-bar input::-webkit-input-placeholder{color:rgba(183,185,189,0.5)}#pages-filters .filters-bar input::-moz-placeholder{color:rgba(183,185,189,0.5)}#pages-filters .filters-bar input:-moz-placeholder{color:rgba(183,185,189,0.5)}#pages-filters .filters-bar input:-ms-input-placeholder{color:rgba(183,185,189,0.5)}#pages-filters .filters-advanced fieldset{border:1px solid #484e5c}#pages-filters .filters-advanced fieldset legend{background:#3D424E;color:#B7B9BD;font-weight:bold}#pages-filters form .checkboxes label:before{background-color:#4f5565;border-color:#585f70;color:#fff}#pages-columns{background:#fff;border-top:1px solid rgba(230,230,230,0.5)}#pages-columns.fjs-container .fjs-col{border-right:1px solid rgba(230,230,230,0.5);border-bottom:1px solid rgba(230,230,230,0.5)}#pages-columns .fjs-item:hover .fjs-info>b{color:#0090D9}#pages-columns .fjs-item:hover .fjs-action-toggle,#pages-columns .fjs-item:hover .fjs-children{color:#0090D9 !important}#pages-columns .fjs-item .fjs-icon{background-color:#999;box-shadow:0px 0px 0px 1px #fff}#pages-columns .fjs-item .fjs-icon.home{background-color:#2980B9}#pages-columns .fjs-item .fjs-icon.visible{background-color:#3498DB}#pages-columns .fjs-item .fjs-icon.lock{background-color:#E67E22}#pages-columns .fjs-item .fjs-icon.modular{background-color:#9B59B6}#pages-columns .fjs-item .fjs-icon:after{border:1px solid #fff}#pages-columns .fjs-item .fjs-icon.badge-published:after{background-color:#27AE60}#pages-columns .fjs-item .fjs-icon.badge-unpublished:after{background-color:#E74C3C}#pages-columns .fjs-item .fjs-icon .badge-lang{background-color:#dedede;color:#737373;border:1px solid #fff}#pages-columns .fjs-item .fjs-icon .badge-lang.translated{background-color:#77559D;color:#fff}#pages-columns .fjs-item .fjs-icon .badge-lang.not-available{background-color:#323640;color:#fff}#pages-columns .fjs-item .fjs-info>b{color:#6f7b8a}#pages-columns .fjs-item .fjs-info>em{color:#8b95a1}#pages-columns .fjs-item .fjs-actions .child-count{background-color:#e6e6e6;color:#6f7b8a}#pages-columns .fjs-item .fjs-action-toggle{color:#0090D9}#pages-columns .fjs-item .fjs-action-toggle,#pages-columns .fjs-item .fjs-children{color:rgba(111,123,138,0.5);border-radius:4px;border:1px solid #e6e6e6}#pages-columns .fjs-item .fjs-action-toggle:hover,#pages-columns .fjs-item .fjs-children:hover{border-color:#c3c3c3;color:rgba(111,123,138,0.5)}#pages-columns .fjs-item .fjs-action-toggle.dropdown-toggle,#pages-columns .fjs-item .fjs-children.dropdown-toggle{border-left:1px solid #f2f2f2}#pages-columns .fjs-item .fjs-action-toggle:hover,#pages-columns .fjs-item .fjs-children:hover{border-color:#d9d9d9}#pages-columns .fjs-item>a{position:relative}#pages-columns .fjs-item.fjs-active>.fjs-item-wrapper{background-color:#f5f5f5}#pages-columns .fjs-item.fjs-active>.fjs-item-wrapper a{background:none}#pages-columns .fjs-item.filters-hit>.fjs-item-wrapper{background-color:#ffffeb}#pages-columns .fjs-item.filters-hit.fjs-active>.fjs-item-wrapper{background-color:#ffffd6}#pages-columns .tags .tag{margin:0 .15rem}#pages-columns .tags .tag-published{background-color:#219e0d}#pages-columns .tags .tag-visible{background-color:#018fd9}#pages-columns .tags .tag-non-routable{background-color:#ff392a}#pages-columns .langs .badge{align-items:center;background-color:#dedede;color:#737373}#pages-columns .langs .lang:hover .badge{background-color:#0090D9;color:#F6F6F6}#pages-columns .langs .lang-translated .fa{color:#219e0d}#pages-columns .langs .lang-non-translated .fa{color:#ff392a}#pages-columns .dropdown-menu{background-color:#f2f2f2 !important}#pages-columns .dropdown-menu .divider{border-top:1px solid #e6e6e6}#pages-columns .dropdown-menu td,#pages-columns .dropdown-menu thead th{border-bottom:1px solid #e6e6e6}#pages-columns .dropdown-menu .dropdown-item{color:#6f7b8a;background-color:inherit}#pages-columns .dropdown-menu .dropdown-item:hover{color:#0090D9;background-color:#ebebeb !important}#pages-columns .dropdown-menu .dropdown-item.danger .fa{color:#F45857}#pages-columns .dropdown-menu .dropdown-item.danger:hover{background-color:#F45857 !important}#pages-columns .dropdown-menu .dropdown-item.danger:hover .fa{color:#fff}#pages-columns .dropdown-menu .action-bar{background:#ececec}#pages-columns .dropdown-menu .action-bar a{color:#6f7b8a}#pages-columns .dropdown-menu .action-bar a:hover{background:#F6F6F6 !important;color:#0090D9 !important}#pages-columns .dropdown-menu .fa{color:#999}#pages-columns .dropdown-menu a:not(.lang):hover .fa{color:#0090D9}#pages-columns .dropdown-menu .infos tr td{color:#6f7b8a}#pages-columns .dropdown-menu .infos tr td:first-child{color:#8b95a1}#pages-content-wrapper .fjs-path-bar{background-color:#fff}.breadcrumb-node:hover span{text-decoration:none;color:#0090D9}.breadcrumb-node>i:not(.fa){background-color:#999;box-shadow:0px 0px 0px 1px #fff}.breadcrumb-node>i:not(.fa).home{background-color:#2980B9}.breadcrumb-node>i:not(.fa).visible{background-color:#3498DB}.breadcrumb-node>i:not(.fa).lock{background-color:#E67E22}.breadcrumb-node>i:not(.fa).modular{background-color:#9B59B6}[data-remodal-id].parents-container form>h1{border-bottom:1px solid #e6e6e6}[data-remodal-id].parents-container .fjs-col{border-right:1px solid #e6e6e6}[data-remodal-id].parents-container .fjs-item a{color:#0090D9}.parents-content.fjs-container .fjs-active{background-color:#f5f5f5}.permissions-container .switch-toggle input.label0:checked+label{color:#fff;background:#C0392B !important}.permissions-container .switch-toggle input.label1:checked+label{color:#fff;background-color:#3D9970 !important}.permissions-container .badge.badge-denied{background:#C0392B !important}.permissions-container .badge.badge-access{background-color:#3D9970 !important}.permissions-container .badge.badge-super{background-color:#8E44AD !important}.permissions-container fieldset{border:1px solid #e6e6e6}.permissions-container fieldset legend{background-color:#fff;color:#414147}.permissions-container fieldset fieldset legend{border-bottom:1px solid #e6e6e6}.permissions-container .crudp-container .checkboxes.toggleable label{border-color:#e6e6e6;background-color:#fcfcfc}.permissions-container .crudp-container .checkboxes input[type=checkbox]+label:before{color:rgba(111,123,138,0.3)}.permissions-container .crudp-container .checkboxes[data-_check-status="1"] input[type=checkbox]+label{background-color:#3D9970;color:#fff}.permissions-container .crudp-container .checkboxes[data-_check-status="1"] input[type=checkbox]+label:before{color:#fff}.permissions-container .crudp-container .checkboxes[data-_check-status="2"] input[type=checkbox]+label{background-color:#C0392B;color:#fff}.permissions-container .crudp-container .checkboxes[data-_check-status="2"] input[type=checkbox]+label:before{color:#fff}.permission-container .permission-name span:not(.badge){background-color:#fff}.permission-container .permission-name span.badge{border:2px solid #fff}.icon-set{background:#fff}.jqCron-cross,.jqCron-selector-title{border:1px solid #e6e6e6}.jqCron-container.disable .jqCron-cross:hover,.jqCron-container.disable .jqCron-selector-title:hover,.jqCron-cross,.jqCron-selector-title{background:#fcfcfc;border-color:#e6e6e6}.jqCron-cross:hover,.jqCron-selector-title:hover{background-color:#e3e3e3}.jqCron-selector-list{background-color:#e3e3e3;border:1px solid #e6e6e6}.jqCron-selector-list li.selected{background:#0090D9;color:#fff}.jqCron-selector-list li:hover{background:#fcfcfc}.jqCron-error .jqCron-selector-title{background:#F45857;border:1px solid #f12827;color:#fff}.jqCron-container.disable *{color:#363c43}.jqCron-container.disable .jqCron-selector-title{background:#fff !important} + +/*# sourceMappingURL=preset.css.map */ diff --git a/themes/grav/css-compiled/simple-fonts.css b/themes/grav/css-compiled/simple-fonts.css index c363c4fd..ff123046 100644 --- a/themes/grav/css-compiled/simple-fonts.css +++ b/themes/grav/css-compiled/simple-fonts.css @@ -1,2 +1,3 @@ -#admin-menu li,.badge,.fontfamily-sans .CodeMirror pre,.form-tabs>label,.grav-mdeditor-preview,.label,.note,.selectize-input,body,button,h1,h2,h3,h4,h5,h6,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Tahoma,Geneva,Arial,sans-serif}.CodeMirror pre,.mono,code,kbd,pre,samp{font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,Courier,monospace} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNpbXBsZS1mb250cy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLGVBSkEsT0FHQSxpQ0FDZ0IsaUJBSkQsdUJBSXFCLE9BSjVCLE1BQ3lCLGlCQUZqQyxLQUV5QixPQUN6QixHQUFJLEdBQUksR0FBSSxHQUhOLEdBQUksR0FFVixNQUFPLE9BQVEsU0FJWCxZQUFhLGdCQUFBLENBQUEsU0FBQSxDQUFBLE1BQUEsQ0FBQSxNQUFBLENBQUEsS0FBQSxDQUFBLFdBQ2hCLGdCQUdxQixNQUF0QixLQUFNLElBQUssSUFBSyxLQUNaLFlBQWEsY0FBQSxDQUFBLFFBQUEsQ0FBQSxpQkFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLENBQUEiLCJmaWxlIjoic2ltcGxlLWZvbnRzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImJvZHksIGg1LCBoNixcbi5iYWRnZSwgLm5vdGUsIC5ncmF2LW1kZWRpdG9yLXByZXZpZXcsXG5pbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCAuc2VsZWN0aXplLWlucHV0LFxuaDEsIGgyLCBoMywgaDQsXG4uZm9udGZhbWlseS1zYW5zIC5Db2RlTWlycm9yIHByZSxcbiNhZG1pbi1tZW51IGxpLCAuZm9ybS10YWJzID4gbGFiZWwsIC5sYWJlbCwge1xuICAgIGZvbnQtZmFtaWx5OiBcIkhlbHZldGljYSBOZXVlXCIsIFwiSGVsdmV0aWNhXCIsIFwiVGFob21hXCIsIFwiR2VuZXZhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZjtcbn1cbi8vLmNrLWVkaXRvciBzaG9ydGNvZGUsIC5jay1lZGl0b3IgdHdpZyxcbi5Db2RlTWlycm9yIHByZSxcbmNvZGUsIGtiZCwgcHJlLCBzYW1wLCAubW9ubyAge1xuICAgIGZvbnQtZmFtaWx5OiBcIlNGTW9uby1SZWd1bGFyXCIsIENvbnNvbGFzLCBcIkxpYmVyYXRpb24gTW9ub1wiLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlO1xufVxuIl19 */ +body,h5,h6,.badge,.note,.grav-mdeditor-preview,input,select,textarea,button,.selectize-input,h1,h2,h3,h4,.fontfamily-sans .CodeMirror pre,#admin-menu li,.form-tabs>label,.label{font-family:"Helvetica Neue", "Helvetica", "Tahoma", "Geneva", "Arial", sans-serif}.CodeMirror pre,code,kbd,pre,samp,.mono{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace} + +/*# sourceMappingURL=simple-fonts.css.map */ diff --git a/themes/grav/css-compiled/template.css b/themes/grav/css-compiled/template.css index 1105caf1..fc3e5105 100644 --- a/themes/grav/css-compiled/template.css +++ b/themes/grav/css-compiled/template.css @@ -1,6 +1,7 @@ -#admin-dashboard #updates .numeric,#admin-dashboard .chart-loader .fa,#admin-login,#admin-main .danger.button-bar .button,#admin-main .success.button-bar .button,#admin-main .titlebar .button-bar,#admin-main .titlebar h1,#admin-topbar #admin-lang-toggle,#admin-topbar #admin-mode-toggle{position:relative;top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.button{display:inline-block;padding:.5rem 1rem;font-weight:400;cursor:pointer;vertical-align:middle;outline:0}.button:active{margin:1px 0 -1px 0}.button-small.button{padding:4px 8px;font-size:95%}.button-x-small.button{padding:2px 5px;font-size:90%}.button:disabled{opacity:.6;cursor:no-drop}.g-colorpicker{position:relative;border-radius:.1875rem;max-width:100%;display:flex}.g-colorpicker input{flex-basis:75%}.g-colorpicker i{position:absolute;top:15px;right:10px;z-index:2}.g-colorpicker .g-colorpicker-preview-wrap{cursor:default;position:relative;border-radius:3px;border:1px solid #fff;margin-left:5px;width:41px}.g-colorpicker .g-colorpicker-preview{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:3px}.cp-sprite{background-image:url(data:image/png;base64,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)}.cp-wrapper{position:absolute;width:173px;height:211px;background:#fff;border:solid 1px #ccc;box-shadow:0 0 20px rgba(0,0,0,.2);z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:none}.cp-wrapper.cp-visible{display:block}.cp-position-top .cp-wrapper{top:-154px}.cp-position-right .cp-wrapper{right:0}.cp-position-bottom .cp-wrapper{top:auto}.cp-position-left .cp-wrapper{left:0}.cp-with-opacity.cp-wrapper{width:194px}.cp-wrapper .cp-grid{position:absolute;top:1px;left:1px;width:150px;height:150px;background-position:-120px 0;cursor:crosshair}.cp-wrapper .cp-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.cp-mode-saturation .cp-grid{background-position:-420px 0}.cp-mode-saturation .cp-grid-inner{background-position:-270px 0;background-image:inherit}.cp-mode-brightness .cp-grid{background-position:-570px 0}.cp-mode-brightness .cp-grid-inner{background-color:#000}.cp-mode-wheel .cp-grid{background-position:-720px 0}.cp-opacity-slider,.cp-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:#fff;background-position:0 0;cursor:row-resize}.cp-mode-saturation .cp-slider{background-position:-60px 0}.cp-mode-brightness .cp-slider{background-position:-20px 0}.cp-mode-wheel .cp-slider{background-position:-20px 0}.cp-opacity-slider{left:173px;background-position:-40px 0;display:none}.cp-with-opacity .cp-opacity-slider{display:block}.cp-grid .cp-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:solid 1px #000;border-radius:10px;margin-top:-6px;margin-left:-6px;background:0 0}.cp-grid .cp-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:solid 2px #fff;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.cp-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:#fff;border:solid 1px #000;margin-top:-2px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;z-index:2}.cp-tabs{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;bottom:0;color:#777;left:0;right:0;background:#eee}.cp-tabs>div{display:inline-block;padding:6px 0 4px;font-family:Helvetica,sans-serif;font-size:11px;border-left:1px solid #ddd;width:48px;border-right:0;text-align:center;cursor:pointer}.cp-tabs>div:first-child{border-left:0}.cp-tabs>div.active{background-color:#fff}.cp-tabs>div.cp-tab-transp{width:100%;border-top:1px solid #ddd}.cp-theme-default.cp-wrapper{width:auto;display:inline-block}.cp-theme-default .cp-input{height:20px;width:auto;display:inline-block;padding-left:26px}.cp-theme-default.cp-position-right .cp-input{padding-right:26px;padding-left:inherit}.input-group .cp-theme-bootstrap:not(:first-child) .cp-input{border-top-left-radius:0;border-bottom-left-radius:0}.g-colorpicker-preview-wrap{background-image:url(data:image/jpeg;base64,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)}.datetime-picker-wrapper{position:relative}.datetime-picker-wrapper input{padding-right:2.5rem}.datetime-picker-wrapper .field-icons{position:absolute;top:0;right:10px;bottom:0;line-height:2.5rem}.collapse{display:none}.collapse.in{display:block}tr .collapse.in{display:table-row}tbody .collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease,visibility .35s ease;-moz-transition:height .35s ease,visibility .35s ease;transition:height .35s ease,visibility .35s ease}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after,.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after,.bootstrap-datetimepicker-widget .btn[data-action=today]::after,.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.next::after,.bootstrap-datetimepicker-widget table th.prev::after,.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.bootstrap-datetimepicker-widget.dropdown-menu{position:absolute;z-index:1000;display:none;float:left;min-width:160px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.bootstrap-datetimepicker-widget .list-unstyled{padding-left:0;list-style:none}.bootstrap-datetimepicker-widget .collapse{display:none;visibility:hidden}.bootstrap-datetimepicker-widget .collapse.in{display:block;visibility:visible}.bootstrap-datetimepicker-widget .datepicker-years .picker-switch{cursor:default!important;background:inherit!important}.bootstrap-datetimepicker-widget .table-condensed>thead>tr>th{padding:5px}.bootstrap-datetimepicker-widget table{display:table}.bootstrap-datetimepicker-widget table thead{display:table-header-group}.bootstrap-datetimepicker-widget table tbody{display:table-row-group}.bootstrap-datetimepicker-widget table tr{display:table-row}.bootstrap-datetimepicker-widget table tr:hover{background:inherit}.bootstrap-datetimepicker-widget table tr td,.bootstrap-datetimepicker-widget table tr th{border:0;display:table-cell}.bootstrap-datetimepicker-widget table tr td:first-child,.bootstrap-datetimepicker-widget table tr th:first-child{padding-left:inherit}.bootstrap-datetimepicker-widget table tr td:last-child,.bootstrap-datetimepicker-widget table tr th:last-child{padding-right:inherit}/*! +#admin-login,#admin-main .titlebar h1,#admin-main .titlebar .button-bar,#admin-main .danger.button-bar .button,#admin-main .success.button-bar .button,#admin-dashboard .chart-loader .fa,#admin-dashboard #updates .numeric,#admin-topbar #admin-mode-toggle,#admin-topbar #admin-lang-toggle{position:relative;top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-o-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.button{display:inline-block;padding:0.5rem 1rem;font-weight:400;cursor:pointer;vertical-align:middle;outline:none}.button:active{margin:1px 0 -1px 0}.button-small.button{padding:4px 8px;font-size:95%}.button-x-small.button{padding:2px 5px;font-size:90%}.button:disabled{opacity:.6;cursor:no-drop}.g-colorpicker{position:relative;border-radius:.1875rem;max-width:100%;display:flex}.g-colorpicker input{flex-basis:75%}.g-colorpicker i{position:absolute;top:15px;right:10px;z-index:2}.g-colorpicker .g-colorpicker-preview-wrap{cursor:default;position:relative;border-radius:3px;border:1px solid #fff;margin-left:5px;width:41px}.g-colorpicker .g-colorpicker-preview{position:absolute;top:0px;right:0px;bottom:0px;left:0px;border-radius:3px}.cp-sprite{background-image:url(data:image/png;base64,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)}.cp-wrapper{position:absolute;width:173px;height:211px;background:white;border:solid 1px #CCC;box-shadow:0 0 20px rgba(0,0,0,0.2);z-index:99999;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:none}.cp-wrapper.cp-visible{display:block}.cp-position-top .cp-wrapper{top:-154px}.cp-position-right .cp-wrapper{right:0}.cp-position-bottom .cp-wrapper{top:auto}.cp-position-left .cp-wrapper{left:0}.cp-with-opacity.cp-wrapper{width:194px}.cp-wrapper .cp-grid{position:absolute;top:1px;left:1px;width:150px;height:150px;background-position:-120px 0;cursor:crosshair}.cp-wrapper .cp-grid-inner{position:absolute;top:0;left:0;width:150px;height:150px}.cp-mode-saturation .cp-grid{background-position:-420px 0}.cp-mode-saturation .cp-grid-inner{background-position:-270px 0;background-image:inherit}.cp-mode-brightness .cp-grid{background-position:-570px 0}.cp-mode-brightness .cp-grid-inner{background-color:black}.cp-mode-wheel .cp-grid{background-position:-720px 0}.cp-slider,.cp-opacity-slider{position:absolute;top:1px;left:152px;width:20px;height:150px;background-color:white;background-position:0 0;cursor:row-resize}.cp-mode-saturation .cp-slider{background-position:-60px 0}.cp-mode-brightness .cp-slider{background-position:-20px 0}.cp-mode-wheel .cp-slider{background-position:-20px 0}.cp-opacity-slider{left:173px;background-position:-40px 0;display:none}.cp-with-opacity .cp-opacity-slider{display:block}.cp-grid .cp-picker{position:absolute;top:70px;left:70px;width:12px;height:12px;border:solid 1px black;border-radius:10px;margin-top:-6px;margin-left:-6px;background:none}.cp-grid .cp-picker>div{position:absolute;top:0;left:0;width:8px;height:8px;border-radius:8px;border:solid 2px white;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.cp-picker{position:absolute;top:0;left:0;width:18px;height:2px;background:white;border:solid 1px black;margin-top:-2px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;z-index:2}.cp-tabs{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;bottom:0;color:#777;left:0;right:0;background:#eee}.cp-tabs>div{display:inline-block;padding:6px 0 4px;font-family:Helvetica, sans-serif;font-size:11px;border-left:1px solid #ddd;width:48px;border-right:0;text-align:center;cursor:pointer}.cp-tabs>div:first-child{border-left:0}.cp-tabs>div.active{background-color:#fff}.cp-tabs>div.cp-tab-transp{width:100%;border-top:1px solid #ddd}.cp-theme-default.cp-wrapper{width:auto;display:inline-block}.cp-theme-default .cp-input{height:20px;width:auto;display:inline-block;padding-left:26px}.cp-theme-default.cp-position-right .cp-input{padding-right:26px;padding-left:inherit}.input-group .cp-theme-bootstrap:not(:first-child) .cp-input{border-top-left-radius:0;border-bottom-left-radius:0}.g-colorpicker-preview-wrap{background-image:url(data:image/jpeg;base64,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)}.datetime-picker-wrapper{position:relative}.datetime-picker-wrapper input{padding-right:2.5rem}.datetime-picker-wrapper .field-icons{position:absolute;top:0;right:10px;bottom:0;line-height:2.5rem}.collapse{display:none}.collapse.in{display:block}tr .collapse.in{display:table-row}tbody .collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease,visibility 0.35s ease;-moz-transition:height 0.35s ease,visibility 0.35s ease;transition:height 0.35s ease,visibility 0.35s ease}.sr-only,.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after,.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after,.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after,.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after,.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after,.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after,.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after,.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after,.bootstrap-datetimepicker-widget .btn[data-action="today"]::after,.bootstrap-datetimepicker-widget .picker-switch::after,.bootstrap-datetimepicker-widget table th.prev::after,.bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.bootstrap-datetimepicker-widget.dropdown-menu{position:absolute;z-index:1000;display:none;float:left;min-width:160px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,0.175)}.bootstrap-datetimepicker-widget .list-unstyled{padding-left:0;list-style:none}.bootstrap-datetimepicker-widget .collapse{display:none;visibility:hidden}.bootstrap-datetimepicker-widget .collapse.in{display:block;visibility:visible}.bootstrap-datetimepicker-widget .datepicker-years .picker-switch{cursor:default !important;background:inherit !important}.bootstrap-datetimepicker-widget .table-condensed>thead>tr>th{padding:5px}.bootstrap-datetimepicker-widget table{display:table}.bootstrap-datetimepicker-widget table thead{display:table-header-group}.bootstrap-datetimepicker-widget table tbody{display:table-row-group}.bootstrap-datetimepicker-widget table tr{display:table-row}.bootstrap-datetimepicker-widget table tr:hover{background:inherit}.bootstrap-datetimepicker-widget table tr th,.bootstrap-datetimepicker-widget table tr td{border:0;display:table-cell}.bootstrap-datetimepicker-widget table tr th:first-child,.bootstrap-datetimepicker-widget table tr td:first-child{padding-left:inherit}.bootstrap-datetimepicker-widget table tr th:last-child,.bootstrap-datetimepicker-widget table tr td:last-child{padding-right:inherit}/*! * Datetimepicker for Bootstrap 3 * ! version : 4.7.14 * https://github.com/Eonasdan/bootstrap-datetimepicker/ - */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:3px}.bootstrap-datetimepicker-widget table th{height:29px;line-height:29px;width:29px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#ccc;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ddd}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#ccc}.bootstrap-datetimepicker-widget table td.day{height:29px;line-height:29px;width:29px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#ddd;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#ccc}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:0 0 7px 7px solid transparent;border-bottom-color:#fff;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#fff;color:#00f;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#ccc;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:3px}.bootstrap-datetimepicker-widget table td span:hover{background:#ddd}.bootstrap-datetimepicker-widget table td span.active{background-color:#fff;color:#00f;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#ccc}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#ccc;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}.fjs-container{display:flex;font-size:.9em;min-height:400px;overflow:auto;overflow-x:scroll}.fjs-container:focus{outline:0}.fjs-container .fjs-col{border-right:solid 1px #d3d3d3;max-height:600px;min-height:inherit;min-width:200px;overflow-y:auto}.fjs-container .fjs-item a{color:#000;justify-content:space-between;padding:5px;text-decoration:none;display:flex;align-items:center}.fjs-container .fjs-item a:focus{outline:0}.fjs-container .fjs-item a span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fjs-container .fjs-item a span i{padding-right:5px}.fjs-container .info-container{display:flex;align-items:center}.fjs-container .fjs-list{list-style:none;margin:0;padding:0}.fjs-container .fjs-item-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fjs-container .fa-caret-right{padding:0 0 0 .5em}.fjs-container .leaf-col{align-items:center;border-right:0;display:flex;flex:2;justify-content:center;padding:0 1.5em}.fjs-container .leaf-row{display:flex;flex-direction:column;font-size:1.3em;text-align:center}.fjs-container .leaf-row .fa{font-size:4em;margin:20px 0}.fjs-container .leaf-row .fa-refresh{font-size:2em}.fjs-container .leaf-col .meta{font-size:.7em}.fjs-container .leaf-col .meta strong{font-weight:400}.fjs-container .leaf-col .meta:first-of-type{margin-top:1.5em}.fjs-path-bar{font-size:.9em;padding:.25rem .5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fjs-path-bar [data-breadcrumb-node]{cursor:pointer}.fjs-path-bar [data-breadcrumb-node]:hover span{text-decoration:underline}.fjs-path-bar .fa-chevron-right{font-size:.8em}[data-parents-field-name]{font-weight:700}.fjs-container .fa-folder,.fjs-path-bar .fa-folder{color:#90e4ff}.fjs-container .fa-file-o,.fjs-path-bar .fa-file-o{color:#a7a7a7}.fjs-container .fa-external-link,.fjs-path-bar .fa-external-link{color:#629eff;font-size:smaller}.switch-toggle{display:inline-block;display:inline-flex;overflow:hidden;border-radius:4px;line-height:35px}.switch-toggle input[type=radio]{position:absolute;visibility:hidden;display:none}.switch-toggle label{display:inline-block;cursor:pointer;padding:0 15px;white-space:nowrap}body,html{height:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden}b,strong{font-weight:600}.bigger{font-size:1.2rem}.button-bar{text-align:right;float:right;z-index:0}.alert{font-size:1rem;padding:.5rem 1.5rem;position:relative}@media only all and (max-width:47.938em){.alert{padding:.5rem 1rem}}.badge,.gpm .gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges .updates{display:inline-block;font-size:.8rem;font-weight:500;border-radius:10px;padding:0 6px;min-width:20px;line-height:20px;text-align:center}.empty-state{margin:0 auto;text-align:center;padding-top:100px}.default-animation,.scheduler-content #cron-install{-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease}.pulse{animation-name:pulse_animation;animation-duration:2s;transform-origin:70% 70%;animation-iteration-count:infinite;animation-timing-function:linear}@keyframes pulse_animation{0%{transform:scale(1)}30%{transform:scale(1)}40%{transform:scale(1.08)}50%{transform:scale(1)}60%{transform:scale(1)}70%{transform:scale(1.05)}80%{transform:scale(1)}100%{transform:scale(1)}}.default-border-radius{border-radius:4px}.default-glow-shadow{box-shadow:0 0 20px rgba(0,0,0,.2)}.default-box-shadow{box-shadow:0 0 10px 2px rgba(0,0,0,.03)}.login-box-shadow{box-shadow:0 10px 100px 0 rgba(0,0,0,.4)}.padding-horiz{padding-left:7rem;padding-right:7rem}@media only all and (max-width:59.938em){.padding-horiz{padding-left:4rem;padding-right:4rem}}@media only all and (max-width:47.938em){.padding-horiz{padding-left:1rem;padding-right:1rem}}.padding-vert{padding-top:3rem;padding-bottom:3rem}@media only all and (max-width:47.938em){.hidden-mobile{display:none!important}}body{font-weight:400}@media only all and (max-width:47.938em){body{font-size:.8rem}}h1,h2,h3,h4,h5,h6{font-weight:400;text-rendering:optimizeLegibility;letter-spacing:0}h1{font-size:3.1rem}@media only all and (max-width:47.938em){h1{font-size:2.5rem;line-height:1.2;margin-bottom:2.5rem}}@media only all and (min-width:48em) and (max-width:59.938em){h2{font-size:2rem}}@media only all and (max-width:47.938em){h2{font-size:1.9rem}}@media only all and (min-width:48em) and (max-width:59.938em){h3{font-size:1.6rem}}@media only all and (max-width:47.938em){h3{font-size:1.5rem}}@media only all and (min-width:48em) and (max-width:59.938em){h4{font-size:1.25rem}}@media only all and (max-width:47.938em){h4{font-size:1.15rem}}h1{letter-spacing:-3px}h2{letter-spacing:-2px}h3{letter-spacing:-1px}i.fa.fa-heart-o.pulse,i.fa.fa-heart.pulse{color:#920}code{vertical-align:inherit}pre{padding:2rem;border-radius:3px}pre code{background:inherit}.label{vertical-align:middle;border-radius:100%;height:1rem;min-width:1rem;line-height:1rem;display:inline-block;text-align:center;font-size:.6rem;margin-right:.75rem}form .form-display-wrapper h1{padding:0!important;font-size:1.7rem!important;border-bottom-width:2px!important}form .form-display-wrapper h2{padding:0!important;font-size:1.5rem!important;border-bottom-width:1px!important}form .form-display-wrapper h3{padding:0!important;font-size:1.3rem!important;border-bottom-width:1px!important}form .form-display-wrapper h4{padding:0!important;font-size:1.1rem!important}form .form-display-wrapper blockquote{padding:15px}form .form-display-wrapper blockquote p{font-size:.9rem;color:inherit}form .form-display-wrapper blockquote p:last-child{margin-bottom:0}form .form-display-wrapper code,form .form-display-wrapper pre{font-size:.8rem}form .form-display-wrapper table{border-collapse:collapse;width:100%}form .form-display-wrapper table th{padding:10px!important}form .form-display-wrapper table th:last-child{border-right:none}form .form-display-wrapper table td{padding:10px!important}form .form-display-wrapper table td:last-child{border-right:none}form .form-display-wrapper table tr:last-child{border-bottom:none}form .form-spacer h3,form h1,form h3{padding:0 1.5rem .5rem;margin:0 0 1rem;font-size:1.5rem;text-align:left;letter-spacing:-1px}form h3{padding-left:0}form p{padding:0 1.5rem}form pre{padding:1.5rem 3rem}form .nowrap{white-space:nowrap}form .form-description p{padding:0}@media only all and (max-width:47.938em){form .button{padding:.25rem .5rem}}form .form-field{margin-bottom:1rem;padding-left:1.5rem}@media only all and (max-width:47.938em){form .form-field{padding-left:1rem}}form .form-field .file-thumbnail-wrapper{display:inline-block;position:relative}form .form-field .file-thumbnail{max-height:150px;vertical-align:top;display:inline-block;margin-bottom:10px}form .form-field .file-thumbnail-remove{position:absolute;text-align:center;display:block;top:3px;right:3px;width:25px;height:25px;border-radius:100%}form .form-field .file-thumbnail-remove .fa{font-size:20px;line-height:25px;vertical-align:top}form .form-data{padding-right:1.5rem}@media only all and (max-width:47.938em){form .form-data{padding-right:1rem}}form .form-input-addon-wrapper{display:flex}form .form-input-addon-wrapper .form-input-addon{display:flex;padding:0 5px;justify-content:center;align-items:center}form .form-input-addon-wrapper .form-input-addon.copy-to-clipboard{cursor:pointer}form .form-input-addon-wrapper input{height:35px;display:table-cell}form .form-input-addon-wrapper .form-input-prepend{border-radius:4px 0 0 4px;border-right-width:0!important}form .form-input-addon-wrapper .form-input-append{border-radius:0 4px 4px 0;border-left-width:0!important}form .form-input-addon-wrapper input:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}form .form-input-addon-wrapper input:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}form .overlay{padding-top:1rem;padding-bottom:1px}form .overlay.bottom{margin:2rem auto -2rem auto}form .required{display:inline-block;font-family:helvetica,arial,sans-serif;vertical-align:middle;line-height:0;font-size:30px;margin-left:0;margin-bottom:-5px}form label{padding:5px 0;font-weight:400;margin:0}form label p{margin:0}form label [data-hint]{display:inline}form label.inline{display:inline;vertical-align:middle;margin-right:15px}form label.toggleable{display:inline}form .form-sublabel p{opacity:.8;font-size:.9rem;margin:10px 20px 0 0;padding:0}form .selectize-input,form button,form input,form select,form textarea{font-size:.9rem;line-height:1.5;border-radius:4px;-webkit-font-smoothing:antialiased}form .form-input-file{position:relative;min-height:70px;border-radius:4px}form .form-input-file ul{margin:1rem 0;text-align:left;font-size:1rem;border-radius:4px}form .form-input-file p{display:block;height:100%;text-align:center;margin:0;padding:.8rem 1rem 0;font-size:1.2rem}form .form-input-file input{display:none}form .selectize-dropdown{z-index:100000}form .grid.vertical{-webkit-flex-flow:column;-moz-flex-flow:column;flex-flow:column}form .compact .form-field{margin-bottom:.2rem}form .compact .form-list-wrapper li{display:flex;flex-wrap:wrap;justify-content:flex-start}form .compact .form-list-wrapper li .form-field{width:50%}@media only all and (max-width:47.938em){form .compact .form-list-wrapper li .form-field{width:100%}}form .form-select-wrapper,form .selectize-control.single .selectize-input{position:relative}form .form-select-wrapper:after,form .selectize-control.single .selectize-input:after{margin-top:0;border:0;position:absolute;content:'\f078';font-family:FontAwesome;right:12px;top:50%;line-height:0;pointer-events:none}form .selectize-input{display:block!important;box-shadow:none;padding:5px 30px 5px 10px;margin:0}form .selectize-input>input{font-size:.9rem;line-height:1.5}form .selectize-control.single.plugin-remove_button .selectize-input .item,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;display:inline-block;border-radius:2px 0 0 2px!important}form .selectize-control.single.plugin-remove_button .selectize-input .remove-single{border-radius:0 2px 2px 0!important;margin-left:-2px}form .selectize-control.multi .selectize-input,form .selectize-control.single.plugin-remove_button .selectize-input{padding:.375rem .375rem}form .selectize-control.multi .selectize-input.has-items,form .selectize-control.single.plugin-remove_button .selectize-input.has-items{padding-top:6px;padding-bottom:4px}form .selectize-control.multi .selectize-input .item,form .selectize-control.multi .selectize-input .remove-single,form .selectize-control.single.plugin-remove_button .selectize-input .item,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single{border-radius:2px;line-height:1.5}form .selectize-control.multi .selectize-input .item>img,form .selectize-control.single.plugin-remove_button .selectize-input .item>img{max-height:20px!important;max-width:inherit!important}form .selectize-control.single .selectize-input:after{right:27px}form .selectize-control.single .selectize-input.dropdown-active:after{content:'\f077'}form .x-small{max-width:5rem!important}form .x-small.form-input-addon-wrapper{max-width:inherit!important}form .x-small.form-input-addon-wrapper input{max-width:5rem!important}form .small{max-width:10rem!important}form .small.form-input-addon-wrapper{max-width:inherit!important}form .small.form-input-addon-wrapper input{max-width:10rem!important}form .medium.form-input-addon-wrapper input,form .medium:not(.switch-toggle){max-width:20rem}form .medium.form-input-addon-wrapper input textarea,form .medium:not(.switch-toggle) textarea{height:7rem}form .medium.form-input-addon-wrapper input[data-grav-array-type=container],form .medium:not(.switch-toggle)[data-grav-array-type=container]{max-width:100%!important}form .medium.form-input-addon-wrapper input[data-grav-array-type=container] input[type=text],form .medium:not(.switch-toggle)[data-grav-array-type=container] input[type=text]{width:calc(70% - 110px)}form .large,form .large.form-input-addon-wrapper input{max-width:30rem!important}form .large textarea,form .large.form-input-addon-wrapper input textarea{height:10rem}form .large.form-input-addon-wrapper input[data-grav-array-type=container],form .large[data-grav-array-type=container]{max-width:100%!important}form .large.form-input-addon-wrapper input[data-grav-array-type=container] input[type=text],form .large[data-grav-array-type=container] input[type=text]{width:calc(100% - 110px)}form select{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:5px 30px 5px 10px;cursor:pointer;margin:0}form input[type=color],form input[type=date],form input[type=email],form input[type=month],form input[type=number],form input[type=password],form input[type=tel],form input[type=text],form input[type=time],form input[type=url],form input[type=week]{width:100%}form textarea{width:100%}form .form-frontmatter-wrapper{border-radius:4px}form .switch-toggle label{cursor:pointer}form .switch-toggle a,form .switch-toggle label{outline:0!important}form .dynfields input[type=text],form [data-grav-field=array] input[type=text],form [data-grav-field=multilevel] input[type=text]{width:40%;float:left;margin:0 5px 5px 0}form .dynfields .form-row,form [data-grav-field=array] .form-row,form [data-grav-field=multilevel] .form-row{display:inline-block;width:100%;margin-right:0;max-width:100%!important}form .dynfields .form-row span,form [data-grav-field=array] .form-row span,form [data-grav-field=multilevel] .form-row span{padding:.5rem;display:inline-block;line-height:1.5;cursor:pointer}form .dynfields .form-row span[data-grav-array-action=sort],form [data-grav-field=array] .form-row span[data-grav-array-action=sort],form [data-grav-field=multilevel] .form-row span[data-grav-array-action=sort]{float:left;cursor:move}form .dynfields .form-row.array-field-value_only,form [data-grav-field=array] .form-row.array-field-value_only,form [data-grav-field=multilevel] .form-row.array-field-value_only{width:100%}form [data-grav-field=multilevel] input:disabled{background-color:#d3d3d3}form [data-grav-array-type=container].one-child [data-grav-array-action=sort]{display:none}form .button-bar{margin-top:1rem;padding:1.2rem 3rem;width:100%;border-bottom-left-radius:5px;border-bottom-right-radius:5px}form .checkboxes{display:inline-block;padding:5px 0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form .checkboxes label{display:inline;cursor:pointer;position:relative;padding:0 0 0 2rem;margin-right:15px}form .checkboxes label:before{content:"";display:inline-block;width:1.5rem;height:1.5rem;top:50%;left:0;margin-top:-.75rem;margin-right:10px;position:absolute;border-radius:4px}form .checkboxes input[type=checkbox]{display:none}form .checkboxes input[type=checkbox]:checked+label:before{content:"\f00c";font-family:FontAwesome,sans-serif;font-size:1.2rem;line-height:1;text-align:center}form .checkboxes.toggleable label{margin-right:0}.form-display-wrapper p{padding-left:0;padding-right:0}.form-display-wrapper p:first-child{margin-top:0}div.frontmatter{margin-bottom:3rem}[data-grav-field=parents] .form-input-wrapper{cursor:pointer}[data-grav-field=parents] .form-input-wrapper i{margin-right:.25rem}[data-remodal-id].parents-container form{overflow:hidden}[data-remodal-id].parents-container form>h1{margin-bottom:0;border-bottom:1px solid #eee}[data-remodal-id].parents-container form>.button-bar{margin-top:0}[data-remodal-id].parents-container .fjs-list{overflow:auto;overflow-y:scroll;max-height:400px;min-height:100%}[data-remodal-id].parents-container .fjs-item{margin-left:0;list-style-type:none;text-align:left}[data-remodal-id].parents-container .parents-content:empty{display:none}textarea.frontmatter{height:130px!important}textarea.frontmatter+.CodeMirror{height:130px}[data-grav-field=parents] .form-input-wrapper{cursor:pointer}[data-grav-field=parents] .form-input-wrapper i{margin-right:.25rem}[data-remodal-id].parents-container form{overflow:hidden}[data-remodal-id].parents-container form>h1{margin-bottom:0;border-bottom:1px solid #eee}[data-remodal-id].parents-container form>.button-bar{margin-top:0}[data-remodal-id].parents-container .fjs-list{overflow:auto;overflow-y:scroll;max-height:400px;min-height:100%}[data-remodal-id].parents-container .fjs-item{margin-left:0;list-style-type:none;text-align:left}[data-remodal-id].parents-container .parents-content:empty{display:none}.form-order-wrapper .notice{padding:5px}.form-order-wrapper ul.orderable{list-style:none;margin:0;padding:0}.form-order-wrapper ul.orderable li{padding:.2rem 1rem;border-radius:4px;margin:3px 0;position:relative}.form-order-wrapper ul.orderable li.drag-handle{cursor:move}.form-order-wrapper ul.orderable li.drag-handle::after{content:'\f0c9';font-family:FontAwesome;position:absolute;right:10px}.form-order-wrapper ul.orderable li i{font-size:.8rem}.form-list-wrapper ul[data-collection-holder]{list-style:none;margin:0;padding:0}.form-list-wrapper ul[data-collection-holder]>li{padding:1rem;border-radius:4px;margin:3px 0;position:relative}.form-list-wrapper ul[data-collection-holder]>li .item-actions{position:absolute;right:10px;top:4px}.form-list-wrapper ul[data-collection-holder]>li .item-actions .fa{cursor:pointer}.form-list-wrapper ul[data-collection-holder]>li.collection-collapsed{height:70px;overflow:hidden;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}@media only all and (max-width:47.938em){.form-list-wrapper ul[data-collection-holder]>li.collection-collapsed{height:120px}}.form-list-wrapper ul[data-collection-holder][data-collection-nosort]>li{cursor:default}.form-list-wrapper .collection-actions{text-align:right}.form-list-wrapper .collection-sort{position:absolute;top:0;left:0;width:32px;bottom:0;cursor:move}@media only all and (max-width:47.938em){.form-list-wrapper .collection-sort{width:20px}.form-list-wrapper .collection-sort .fa{font-size:.8rem}}.form-list-wrapper .collection-sort .fa{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.form-list-wrapper [data-collection-nosort] .collection-sort{display:none}.form-label.block{position:relative}.form-label.block:hover{z-index:2}.form-label.block label{z-index:2}#admin-main .admin-block h2{font-size:1.25rem;margin:0 0 .5rem;letter-spacing:normal}.form-fieldset{margin:1rem 1.5rem}.form-fieldset--label label{display:table;font-size:1.25rem;padding:.5rem 1rem;width:100%}.form-fieldset--label h2{margin:0!important}.form-fieldset--label .actions{font-size:initial;display:table-cell;text-align:right;vertical-align:middle}.form-fieldset--label+.form-data{margin-top:1rem;padding:0}.form-fieldset--cursor{cursor:pointer}.form-fieldset--info{font-size:small}.form-fieldset input:checked~.form-label .form-fieldset--collapsible .close,.form-fieldset--collapsible .open,.form-fieldset>input:checked~.form-data{display:block}.form-fieldset input:checked~.form-label .form-fieldset--collapsible .open,.form-fieldset--collapsible .close,.form-fieldset>.form-data{display:none}.filepicker-field-image{width:30px;vertical-align:middle;margin-right:5px}.filepicker-field-name{vertical-align:middle}.permissions-container .permission-value{width:50%;float:left;margin:0 5px 5px 0;height:39px}.permissions-container .switch-toggle{line-height:37px;margin:0 5px 5px 0}.permissions-container .crudp-container{display:flex}.permissions-container .crudp-container .checkboxes.toggleable{display:block}.permissions-container .crudp-container .checkboxes.toggleable label{display:inline-flex;padding:inherit;padding-left:1.5rem;padding-right:.5rem;font-weight:700;border-top-width:1px;border-bottom-width:1px;border-right-width:1px;border-left-width:0;border-style:solid}.permissions-container .crudp-container .checkboxes.toggleable label:before{border:none;background:0 0}.permissions-container .crudp-container .checkboxes.toggleable input[type=checkbox]+label:before{content:"\f023";font-family:FontAwesome;font-size:.8rem;line-height:1.8;text-align:center}.permissions-container .crudp-container .checkboxes.toggleable[data-_check-status="1"] input[type=checkbox]+label:before{content:"\f00c";font-family:FontAwesome}.permissions-container .crudp-container .checkboxes.toggleable[data-_check-status="2"] input[type=checkbox]+label:before{content:"\f05e"}.permissions-container .crudp-container>div:first-child .checkboxes.toggleable label{border-left-width:1px;border-radius:4px 0 0 4px}.permissions-container .crudp-container>div:last-of-type .checkboxes.toggleable label{border-right-width:1px;border-radius:0 4px 4px 0}[data-grav-field=cron]{display:flex;align-items:center}.cron-install{margin:1rem;padding:0;border-radius:4px}form .cron-install pre{padding:1rem;margin:0 1.5rem;line-height:1}.cron-install .setup-status{font-weight:700}.backups-history,.cron-status{margin-bottom:4rem}.backups-history .cron-at code,.cron-status .cron-at code{font-size:120%;padding:2px 10px;border-radius:2px}.backups-history .badge,.backups-history .gpm .gpm-testing,.backups-history .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.cron-status .badge,.cron-status .gpm .gpm-testing,.cron-status .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.gpm .backups-history .gpm-testing,.gpm .cron-status .gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges .backups-history .updates,.sidebar-open #admin-sidebar #admin-menu li .badges .cron-status .updates{white-space:nowrap}.backups-history tr.deleting,.cron-status tr.deleting{background:#efefef;color:#bbb;text-shadow:0 1px #fff}.backups-history tr.deleting .button,.backups-history tr.deleting button,.cron-status tr.deleting .button,.cron-status tr.deleting button{background:#777;pointer-events:none}form .backups-list li,form .cron-job-list li{display:flex;flex-direction:row;flex-wrap:wrap}form .backups-list .form-field.grid,form .cron-job-list .form-field.grid{width:calc(50% - 5px)}@media only all and (max-width:47.938em){form .backups-list .form-field.grid,form .cron-job-list .form-field.grid{width:100%}}table,tbody,thead{display:inline-block;width:100%}.gpm-details{width:100%;-webkit-box-flex:auto;-moz-box-flex:auto;box-flex:auto;-webkit-flex:auto;-moz-flex:auto;-ms-flex:auto;flex:auto}td{border:0}tr{-webkit-transition:all .2s ease;-moz-transition:all .2s ease;transition:all .2s ease;display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-lines:multiple;-moz-box-lines:multiple;box-lines:multiple;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-moz-box-align:center;box-align:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center;-ms-flex-align:center}tr td,tr th{display:block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}tr td.shrink,tr th.shrink{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0;-moz-flex:0;-ms-flex:0;flex:0}tr td.double,tr th.double{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;-webkit-flex:2;-moz-flex:2;-ms-flex:2;flex:2}tr td.triple,tr th.triple{-webkit-box-flex:3;-moz-box-flex:3;box-flex:3;-webkit-flex:3;-moz-flex:3;-ms-flex:3;flex:3}tr td.quadruple,tr th.quadruple{-webkit-box-flex:4;-moz-box-flex:4;box-flex:4;-webkit-flex:4;-moz-flex:4;-ms-flex:4;flex:4}tr td.quintuple,tr th.quintuple{-webkit-box-flex:5;-moz-box-flex:5;box-flex:5;-webkit-flex:5;-moz-flex:5;-ms-flex:5;flex:5}tr td.sextuple,tr th.sextuple{-webkit-box-flex:6;-moz-box-flex:6;box-flex:6;-webkit-flex:6;-moz-flex:6;-ms-flex:6;flex:6}tr td.septuple,tr th.septuple{-webkit-box-flex:7;-moz-box-flex:7;box-flex:7;-webkit-flex:7;-moz-flex:7;-ms-flex:7;flex:7}tr td.octuple,tr th.octuple{-webkit-box-flex:8;-moz-box-flex:8;box-flex:8;-webkit-flex:8;-moz-flex:8;-ms-flex:8;flex:8}tr td.nontuple,tr th.nontuple{-webkit-box-flex:9;-moz-box-flex:9;box-flex:9;-webkit-flex:9;-moz-flex:9;-ms-flex:9;flex:9}tr td.dectuple,tr th.dectuple{-webkit-box-flex:10;-moz-box-flex:10;box-flex:10;-webkit-flex:10;-moz-flex:10;-ms-flex:10;flex:10}tr td:first-child,tr th:first-child{padding-left:1.5rem}@media only all and (max-width:47.938em){tr td:first-child,tr th:first-child{padding-left:1rem}}tr td:last-child,tr th:last-child{padding-right:1.5rem}@media only all and (max-width:47.938em){tr td:last-child,tr th:last-child{padding-right:1rem}}tr td.left,tr th.left{text-align:left}tr td.center,tr th.center{text-align:center}tr td.right,tr th.right{text-align:right}tr td.right.pad,tr th.right.pad{padding-right:1.5rem}tr td.right.pad .form-data,tr th.right.pad .form-data{padding-right:0}tr td.left.pad,tr th.left.pad{padding-left:1.5rem}tr td.ellipsis,tr th.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}tr td.ellipsis.rtl,tr th.ellipsis.rtl{text-align:left}tr td.rtl,tr th.rtl{direction:rtl}tr th{font-weight:700}tr td.gpm-actions{line-height:1;text-align:right;position:relative;padding-right:2.5rem;min-height:38px}tr td.gpm-actions .gpm-details-expand{position:absolute;top:12px;right:12px}tr td.gpm-details{margin:0;padding:0}@media only all and (max-width:47.938em){tr td.gpm-details{word-wrap:break-word}}tr td.gpm-details>.table-wrapper{display:none}tr td.gpm-details>.table-wrapper td{border-bottom:0}tr td.gpm-details tbody{width:100%}tr:last-child td{border-bottom:0}table.noflex{display:table;table-layout:auto}table.noflex thead{display:table-header-group}table.noflex tbody{display:table-row-group}table.noflex tr{display:table-row}table.noflex tr td,table.noflex tr th{flex:none;display:table-cell}.button-group{position:relative;display:inline-block;vertical-align:top}.button-group>.button:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0!important;border-bottom-right-radius:0!important}.button-group>.button:first-child{margin-left:0!important}.button-group>.button+.dropdown-toggle{text-align:center;padding-right:8px;padding-left:8px}.button-group>.button+.dropdown-toggle i{margin:0}.button-group>.button:last-child:not(:first-child),.button-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0!important;border-bottom-left-radius:0!important}.button-group .button+.button,.button-group .button+.button-group,.button-group .button-group+.button,.button-group .button-group+.button-group{margin-left:-3px}.button-group:last-child .dropdown-menu{left:inherit;right:0}.button-group .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:150px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:4px}.button-group .dropdown-menu .button{margin-right:0!important}.button-group .dropdown-menu.language-switcher{min-width:50px}.button-group .dropdown-menu.lang-switcher{min-width:150px;left:inherit;right:0}.button-group .dropdown-menu.lang-switcher button{width:100%}.button-group .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden}.button-group .dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143}.button-group .dropdown-menu li>a:focus,.button-group .dropdown-menu li>a:hover{text-decoration:none}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}#admin-main .admin-block a.gumroad-button{padding:.5rem 1rem!important;font-size:inherit!important;font-weight:400!important;line-height:inherit!important;font-family:inherit!important;border-radius:4px!important;box-shadow:inherit!important}#admin-main .admin-block a.gumroad-button .gumroad-button-logo{display:none!important;background-image:none!important}#error{text-align:center;display:flex;align-items:center;justify-content:center;height:100%;padding-bottom:6rem}#error h1{font-size:4.9rem}#error p{margin:1rem 0}#admin-login{max-width:24rem;margin:0 auto}#admin-login.wide{max-width:50rem}#admin-login.wide h1{height:100px}#admin-login.wide h1.custom-logo img{height:80px}#admin-login.wide form>.padding{padding:3rem 2rem 8rem 2rem}#admin-login.wide form>.padding>div{width:49%;display:inline-block}@media only all and (max-width:47.938em){#admin-login.wide form>.padding>div{width:100%;margin-right:0}}#admin-login.wide form>.padding .form-field{padding:0 1rem}#admin-login.wide form label{padding:0}#admin-login.wide form input{margin-bottom:1rem;text-align:left}#admin-login.wide form input::-webkit-input-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide form input::-moz-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide form input:-moz-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide form input:-ms-input-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide .grid{display:block}#admin-login.wide .form-data,#admin-login.wide .form-label{display:block;width:100%;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}#admin-login .form-field{padding-left:0;margin-bottom:0}#admin-login .form-label{display:none}#admin-login .form-data{padding-right:0}#admin-login .wrapper-spacer{width:100%!important;display:block!important;padding:0 1rem}#admin-login .wrapper-spacer h3{padding-left:1rem}#admin-login .instructions{display:block;padding:2rem 3rem 0;margin:0;font-size:1.3rem}#admin-login .instructions p{margin:0}#admin-login h1{font-size:0;color:transparent;height:216px;margin:0;overflow:hidden;display:flex;align-items:center;justify-content:center}#admin-login h1.text-logo{text-align:center;font-size:4rem}#admin-login h1.custom-logo img{max-height:160px}#admin-login h1.default-logo svg{height:320px}#admin-login h5{margin-top:0;text-align:center}#admin-login form{position:relative}#admin-login form .padding{padding:3rem 3rem 6rem 3rem}#admin-login form input{margin-bottom:2rem;font-size:1.4rem;line-height:1.5;text-align:center;font-weight:300;-webkit-font-smoothing:auto}#admin-login form .form-actions{display:block!important;width:100%!important;text-align:center;position:absolute;bottom:0;left:0;right:0;padding:1.5rem 0}#admin-login form .form-actions .button{margin-bottom:2px}#admin-login form .form-actions button:first-child{margin-right:1rem}#admin-login .alert{text-align:center;padding:1rem 3rem}.twofa-secret-code{font-weight:700}.twofa-wrapper{margin-top:5px}.twofa-secret{position:absolute;opacity:0;visibility:hidden;transition:opacity .6s,visibility .6s}.twofa-secret.show{position:static;visibility:visible;opacity:1}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar{float:left;visibility:visible;opacity:1;width:4.2rem}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-logo h3{font-size:0}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-logo h3:first-letter{font-size:2.5rem}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .custom-logo{margin-right:0;padding-right:15px}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .custom-logo img{padding:0 5px}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #grav-logo-small{display:inline-block}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #grav-logo-large{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .front-end{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-user-details{padding:15px 0 15px 10px;text-align:left}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .admin-user-names{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-menu em{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-menu li .badges .updates{border-radius:100%;position:absolute;top:4px;right:10px;font-size:9px;line-height:12px;padding:1px 3px;min-width:15px}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-menu li .badges .count{display:none}@media only all and (min-width:74.938em){.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #open-handle .fa-angle-right:before{content:"\f105"}}.sidebar-closed:not(.sidebar-quickopen) #admin-main{margin-left:4.2rem}.sidebar-open #admin-sidebar{z-index:10001;float:left;visibility:visible;opacity:1;width:240px}.sidebar-open #admin-sidebar h3{font-size:1.2rem}.sidebar-open #admin-sidebar h3:first-letter{font-size:1.2rem}.sidebar-open #admin-sidebar #grav-logo-small{display:none}.sidebar-open #admin-sidebar #grav-logo-large{display:inline-block}.sidebar-open #admin-sidebar #admin-user-details{padding:15px 10px;text-align:left}.sidebar-open #admin-sidebar .admin-user-names{display:block}.sidebar-open #admin-sidebar .front-end{display:inline-block}.sidebar-open #admin-sidebar #admin-menu em{display:inline}.sidebar-open #admin-sidebar #admin-menu li .badges .updates{border-bottom-right-radius:0;border-top-right-radius:0;position:relative;top:auto;right:auto}.sidebar-open #admin-sidebar #admin-menu li .badges .count{display:inline-block}@media only all and (min-width:47.938em) and (max-width:74.938em){.sidebar-open #admin-sidebar #open-handle .fa-angle-right:before{content:"\f104"}}#admin-sidebar{position:absolute;left:0;top:0;bottom:0;width:100%;max-height:100vh;opacity:0;z-index:3}#admin-sidebar #open-handle{display:block;position:absolute;cursor:pointer;right:0;top:0;width:15px;height:4.2rem;text-align:center;line-height:4.2rem;font-size:12px;border-top-right-radius:3px;border-bottom-right-radius:3px}@media only all and (min-width:74.938em){#admin-sidebar #open-handle .fa-angle-right:before{content:"\f104"}}#admin-sidebar.sidebar-is-visible{opacity:1;visibility:visible}@media only all and (max-width:47.938em){#admin-sidebar{z-index:5}}@media only all and (min-width:47.938em){#admin-sidebar{float:left;visibility:visible;opacity:1;width:4.2rem}}@media only all and (min-width:74.938em){#admin-sidebar{float:left;visibility:visible;opacity:1;width:240px}}#admin-logo{height:4.2rem;display:flex;align-items:center;justify-content:center}#admin-logo.nav-hover .admin-logo{margin-right:0}#admin-logo .admin-logo{margin-right:-10px;display:flex;align-items:center}@media only all and (min-width:47.938em){#admin-logo .admin-logo{margin-right:0}#admin-logo .admin-logo.custom-logo{padding-right:15px}#admin-logo .admin-logo.custom-logo img{padding:0 5px}}#admin-logo .admin-logo a:not(.front-end){display:inherit}#admin-logo .admin-logo.custom-logo img{max-height:30px}#admin-logo .front-end{margin-left:15px;opacity:.6}@media only all and (max-width:47.938em){#admin-logo .front-end{display:none}}@media only all and (min-width:47.938em){#admin-logo .front-end{display:none}}@media only all and (min-width:74.938em){#admin-logo .front-end{display:inline-block}}#admin-logo #grav-logo-small{height:30px;display:none}@media only all and (min-width:47.938em){#admin-logo #grav-logo-small{display:inline-block}}@media only all and (min-width:74.938em){#admin-logo #grav-logo-small{display:none}}#admin-logo #grav-logo-large{height:30px}@media only all and (min-width:47.938em){#admin-logo #grav-logo-large{display:none}}@media only all and (min-width:74.938em){#admin-logo #grav-logo-large{display:inline-block}}#admin-logo h3{font-size:1.5rem;margin:0}@media only all and (min-width:47.938em){#admin-logo h3{font-size:0}#admin-logo h3:first-letter{font-size:2.5rem}}@media only all and (min-width:74.938em){#admin-logo h3{font-size:1.5rem}#admin-logo h3:first-letter{font-size:1.5rem}}#admin-logo h3 i{font-size:1rem;vertical-align:middle;margin-top:-1px}.block-userinfo img{width:200px;height:200px;object-fit:cover}.block-userinfo~.block-file{margin-top:-5rem!important}#offline-status{padding:.2rem 1rem;text-align:center;display:none}#offline-status .fa-plane{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}#admin-user-details img{width:47px;height:47px;object-fit:cover}#admin-user-details,.admin-user-details{padding:15px 10px;min-height:80px;overflow:hidden;text-align:left}@media only all and (min-width:47.938em) and (max-width:74.938em){#admin-user-details,.admin-user-details{padding:1rem 10px;text-align:center}}#admin-user-details img,.admin-user-details img{-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease;border-radius:100%;float:left}#admin-user-details .admin-user-names,.admin-user-details .admin-user-names{margin-left:60px;margin-top:5px;display:block}@media only all and (min-width:47.938em) and (max-width:74.938em){#admin-user-details .admin-user-names,.admin-user-details .admin-user-names{display:none}}#admin-user-details .admin-user-names h4,#admin-user-details .admin-user-names h5,.admin-user-details .admin-user-names h4,.admin-user-details .admin-user-names h5{margin:0;font-size:1rem;line-height:1.3}#admin-user-details .admin-user-names .badge,#admin-user-details .admin-user-names .gpm .gpm-testing,#admin-user-details .admin-user-names .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.admin-user-details .admin-user-names .badge,.admin-user-details .admin-user-names .gpm .gpm-testing,.admin-user-details .admin-user-names .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.gpm #admin-user-details .admin-user-names .gpm-testing,.gpm .admin-user-details .admin-user-names .gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges #admin-user-details .admin-user-names .updates,.sidebar-open #admin-sidebar #admin-menu li .badges .admin-user-details .admin-user-names .updates{font-size:.8rem}#admin-user-details .admin-user-names h5,.admin-user-details .admin-user-names h5{opacity:.7;font-size:.9rem}#admin-nav-quick-tray{margin:0;list-style:none;padding-left:26px;padding-right:10px}#admin-nav-quick-tray li{cursor:pointer;width:24px;margin:3px 0 5px}#admin-nav-quick-tray i{transition:all .2s ease-in-out}#admin-nav-quick-tray i:hover{transform:scale(1.2)}.content-padding #messages.default-box-shadow{margin-bottom:1.5rem}@media only all and (max-width:47.938em){.content-padding #messages.default-box-shadow{margin-bottom:.5rem}}.admin-menu-wrapper{height:calc(100vh - 180px)}@media only all and (min-width:47.938em) and (max-width:74.938em){.admin-menu-wrapper{height:calc(100vh - 136px)}}#admin-menu{display:block;margin:0;padding:0;list-style:none}#admin-menu em{font-style:normal}@media only all and (min-width:47.938em) and (max-width:74.938em){#admin-menu em{display:none}}#admin-menu li .badges{float:right;margin-right:1rem}#admin-menu li .badges .badge,#admin-menu li .badges .gpm .gpm-testing,.gpm #admin-menu li .badges .gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges .updates{display:inline-block;margin-right:-5px}#admin-menu li .badges .updates{display:none}@media only all and (min-width:47.938em) and (max-width:74.938em){#admin-menu li .badges .count{display:none}}#admin-menu li .badges.with-updates .count{border-bottom-left-radius:0;border-top-left-radius:0}#admin-menu li .badges.with-updates .updates{border-bottom-right-radius:0;border-top-right-radius:0;display:inline-block}@media only all and (min-width:47.938em) and (max-width:74.938em){#admin-menu li .badges.with-updates .updates{border-radius:100%;position:absolute;top:4px;right:10px;font-size:9px;line-height:12px;padding:1px 3px;min-width:15px}}#admin-menu li a{-webkit-transition:all .2s ease;-moz-transition:all .2s ease;transition:all .2s ease;display:block;padding-left:25px;padding-top:.7rem;padding-bottom:.7rem;position:relative}#admin-menu li a .fa{-webkit-transition:all .2s ease;-moz-transition:all .2s ease;transition:all .2s ease;margin-right:8px}#admin-menu li.selected a{padding-left:16px}@media only all and (min-width:74.938em){body.sidebar-quickopen #admin-main{margin-left:4.2rem}}@media only all and (min-width:47.938em){#admin-main{margin-left:4.2rem}}@media only all and (min-width:74.938em){#admin-main{margin-left:240px}}#admin-main .form-label label .hint:after,#admin-main .form-label label [data-hint]:after{max-width:300px;min-width:150px;display:inline-table;white-space:initial;line-height:1.2}#admin-main h1{margin:0;font-size:1.3rem;text-align:left;letter-spacing:-1px;line-height:1.5}#admin-main .padding{padding:1.5rem}#admin-main .lines-button{display:none;margin-left:.375rem}#admin-main .lines-button:focus{outline:0}@media only all and (max-width:47.938em){#admin-main .lines-button{display:inline-block}}#admin-main .button{white-space:nowrap}#admin-main .titlebar{position:relative;height:4.2rem;padding:0 1.5rem;z-index:4;box-shadow:0 3px 15px 0 rgba(0,0,0,.1)}@media only all and (max-width:47.938em){#admin-main .titlebar{padding:0 .375rem 0 4rem}}#admin-main .titlebar h1{display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis}@media only all and (max-width:47.938em){#admin-main .titlebar h1{font-size:18px}#admin-main .titlebar h1 i{display:none}}#admin-main .titlebar .button-bar{padding:0;white-space:nowrap;z-index:4}#admin-main .titlebar .preview{font-size:90%}#admin-main .titlebar .button{padding:.5rem .4rem;vertical-align:top;margin-right:-2px}@media only all and (max-width:47.938em){#admin-main .titlebar .button{font-size:0;padding:.5rem .5rem;min-height:36px}#admin-main .titlebar .button i{font-size:20px;margin-right:0}}@media only all and (max-width:20.875em){#admin-main .titlebar .button{padding:.5rem .2rem}}#admin-main .titlebar span.button{cursor:default;pointer-events:none}@media only all and (max-width:47.938em){#admin-main .titlebar .dropdown-menu .button{font-size:.9rem}}#admin-main .admin-block .alert{margin-top:-2rem;margin-bottom:2rem}#admin-main .alert:before{font-family:FontAwesome;margin-right:5px}#admin-main .alert.info:before{content:"\f0a1"}#admin-main .alert.warning:before{content:"\f071"}#admin-main .alert.note:before{content:"\f24a"}#admin-main .alert.grav:before{font-family:FontAwesome,sans-serif;content:"\f2d6";vertical-align:bottom}#admin-main .alert.grav #grav-update-button{margin-top:-3px;float:right}#admin-main .grav-update{padding:0 1.5rem;margin-top:-2rem;margin-bottom:1rem;display:none}#admin-main .grav-update:after{content:"";display:table;clear:both}@media only all and (max-width:47.938em){#admin-main .grav-update{padding:0 1rem}}#admin-main .grav-update .button{float:right;margin-top:.6rem;margin-left:1rem;line-height:1.5}#admin-main .grav-update p{line-height:3rem;margin:0;display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis}#admin-main .grav-update span[class=hint--left]::after{line-height:1.5}#admin-main .grav-update i{padding-right:.5rem}#admin-main .grav-update.grav+.content-wrapper{height:calc(100vh - 4.2rem - 3rem)}#admin-main .content-wrapper{position:relative;height:calc(100vh - 4.2rem)}#admin-main .content-padding{padding:1.5rem}@media only all and (max-width:47.938em){#admin-main .content-padding{padding:0}}#admin-main .admin-block{padding:1rem 0}#admin-main .admin-block:empty{padding:0}#admin-main .admin-block h1{padding:0 1.5rem .5rem;margin:0 0 1rem}@media only all and (max-width:47.938em){#admin-main .admin-block h1{padding:0 1rem .5rem}}#admin-main .admin-block h1.no_underline{border-bottom:0}#admin-main .admin-block .button-bar{margin:0 1.5rem}@media only all and (max-width:47.938em){#admin-main .admin-block .button-bar{margin:-1rem 0 1rem 0;padding:0 1rem;text-align:center}#admin-main .admin-block .button-bar .button{width:100%}}#admin-main .flush-bottom.button-bar{margin:1rem -1.5rem -1rem;padding:1rem;float:none;display:flex}@media only all and (max-width:47.938em){#admin-main .flush-bottom.button-bar.stats-bar{font-size:90%}#admin-main .flush-bottom.button-bar.stats-bar b{font-size:1.5rem}}#admin-main .flush-bottom.button-bar .button{margin:0;height:37px}#admin-main .flush-bottom.button-bar .button.dropdown-toggle{margin-left:-4px}#admin-main .danger,#admin-main .success{position:relative}#admin-main .danger.button-bar,#admin-main .success.button-bar{margin:2rem 0 -1rem;height:70px;padding:1rem;float:none}.content-padding #admin-dashboard .dashboard-item-flex:nth-of-type(2n) .dashboard-item{margin-right:0;margin-left:.75rem}.content-padding #admin-dashboard .dashboard-item-flex:nth-of-type(2n+1) .dashboard-item{margin-left:0;margin-right:.75rem}.content-padding #admin-dashboard .dashboard-item{margin-bottom:1.5rem}#admin-dashboard{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;flex-flow:row wrap}#admin-dashboard .dashboard-item-flex{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column nowrap;-moz-flex-flow:column nowrap;flex-flow:column nowrap;width:50%}@media only all and (max-width:47.938em){#admin-dashboard .dashboard-item-flex{width:100%}#admin-dashboard .dashboard-item-flex .dashboard-item{margin-right:0!important;margin-left:0!important;margin-bottom:10px!important}}#admin-dashboard .dashboard-item>div:not(.widget-content){padding:1rem 1.5rem}#admin-dashboard .dashboard-item h1 .right{float:right}#admin-dashboard .dashboard-item.admin-block{padding:1rem 0}#admin-dashboard .dashboard-item.admin-block ul{margin:0 0 1rem 0;padding:0;list-style:none}#admin-dashboard .dashboard-item.admin-block li{margin:0;padding:.425rem 1.5rem .2rem 1.5rem}#admin-dashboard .dashboard-item.admin-block li:last-child{border-bottom:0}#admin-dashboard .chart-loader{position:relative;text-align:center}#admin-dashboard .chart-loader .fa{display:block;position:absolute;width:100%;text-align:center;font-size:4rem;margin-top:-2rem}#admin-dashboard .widget-content{position:relative;min-height:335px;padding:0}#admin-dashboard .widget-loader{position:absolute;text-align:center;top:50%;left:50%;width:100%;transform:translate(-50%,-50%)}#admin-dashboard .widget-loader .fa{font-size:4rem}#admin-dashboard #updates p{text-align:center;margin:0}#admin-dashboard #updates .updates-chart{width:50%;float:left}#admin-dashboard #updates .flush-bottom.button-bar{height:70px;flex-direction:row-reverse}#admin-dashboard #updates .chart-wrapper{position:relative}#admin-dashboard #updates .backups-chart{position:relative;width:50%;float:left}#admin-dashboard #updates .ct-chart{min-height:157px}#admin-dashboard #updates .numeric{display:block;position:absolute;width:100%;text-align:center;font-size:1.5rem;line-height:1}#admin-dashboard #updates .numeric em{display:block;font-style:normal;font-size:1rem}#admin-dashboard #updates .admin-update-charts{min-height:191px}#admin-dashboard #updates .admin-update-charts:after{content:"";display:table;clear:both}#admin-dashboard #updates .button-bar>.button:not(.dropdown-toggle){margin-left:4px;height:37px}#admin-dashboard #popularity .ct-chart{min-height:171px}#admin-dashboard #popularity .button-bar{height:100px;padding:0 1rem;display:flex}#admin-dashboard .dashboard-item .admin-statistics-chart{position:relative}#admin-dashboard .dashboard-item p{text-align:center;margin:0}#admin-dashboard .dashboard-item .stat{width:33%;text-align:center;display:flex;flex-direction:column;justify-content:center}#admin-dashboard .dashboard-item .stat b{display:block;font-size:2.5rem;line-height:1;font-weight:300}#admin-dashboard .dashboard-item .stat i{display:block;font-style:normal}#admin-dashboard #news-feed .date{float:right;z-index:1}#admin-dashboard #news-feed li a{display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis;z-index:0}#admin-dashboard #news-feed li a:before{font-family:FontAwesome;margin-right:10px;content:"\f1ea"}.card-item,.no-flick{-webkit-transform:translate3d(0,0,0)}.card-row{-webkit-box-pack:justify;-moz-box-pack:justify;box-pack:justify;-webkit-justify-content:space-between;-moz-justify-content:space-between;-ms-justify-content:space-between;-o-justify-content:space-between;justify-content:space-between;-ms-flex-pack:justify}.card-item{overflow:hidden;padding:1rem;margin:0;position:relative;width:31%;max-width:21rem;margin-bottom:2rem}@media only all and (min-width:48em) and (max-width:59.938em){.card-item{width:48%}}@media only all and (max-width:47.938em){.card-item{width:100%}}.card-item h4{font-size:1.2rem;line-height:1.2}.user-details{text-align:left}.user-details img{border-radius:100%}.user-details h2{margin:0;font-size:2.1rem!important;margin:1rem 0 0!important;line-height:1.5}.user-details h2 span{font-size:1.2rem}.user-details h5{font-size:1.1rem;margin:0;linep-height:1.2}.user-details .gravatar{font-size:.9rem;padding:0}@media only all and (max-width:47.938em){.user-details{text-align:center}}#footer{text-align:center;padding:3rem 0 1rem}#footer p{margin:0}.ct-chart .ct-series .ct-bar{stroke-width:20px}#popularity .ct-chart{margin:0 -10px -10px}#popularity .ct-chart .ct-chart-bar{padding:4px 6px 1px 10px}#latest .page-route,#latest .page-title{overflow:auto}#overlay{position:fixed;width:25%;height:100%;z-index:999999;left:75%;top:0;display:none}@media only all and (max-width:47.938em){#overlay{display:none!important}}.gpm-item-info+#blueprints .block-tabs{padding-top:16px}.plugins-notifications-container,.themes-notifications-container{margin-bottom:2rem}.package-dependencies-container li{height:35px}.package-dependencies-container li .button{height:30px;float:right;margin-right:10px;line-height:20px}.pointer-events-disabled{pointer-events:none}.updates-checked .button-reinstall-package{display:inline-block!important}.updates-checked.has-updates .button-reinstall-package{display:none!important}.preview-wrapper .content-padding{position:absolute;top:0;bottom:0;right:0;left:0}@media only all and (max-width:47.938em){#admin-main .config-wrapper-system .form-tabs.side-tabs>.tabs-nav{display:none;width:0}#admin-main .config-wrapper-system .form-tabs.side-tabs>.tabs-content{width:100%}#admin-main .config-wrapper-system .form-tabs.side-tabs>.tabs-content .tab__content{display:block}}.logs-output form .form-data{display:flex;margin:0 -.5rem}@media only all and (max-width:30em){.logs-output form .form-data{display:block}}.logs-output form .forms-select-wrapper{display:block;flex:1;margin:.5rem .5rem}.logs-output h1{margin-top:2rem!important}.logs-output h3{padding:.5rem 1.5rem;font-size:1.1rem}@media only all and (max-width:47.938em){.logs-output h3{padding:.5rem 1rem}}.logs-output table.noflex td{vertical-align:top}.logs-output table.noflex td.date,.logs-output table.noflex td.level{white-space:nowrap}.logs-output table.noflex td.date{opacity:.7}.logs-output table.noflex td.level,.logs-output table.noflex th.level{padding:.375rem 30px}.logs-output table.noflex td.level{font-weight:700}.gpm .logs-output table.noflex td.level span.gpm-testing,.logs-output table.noflex td.level .gpm span.gpm-testing,.logs-output table.noflex td.level .sidebar-open #admin-sidebar #admin-menu li .badges span.updates,.logs-output table.noflex td.level span.badge,.sidebar-open #admin-sidebar #admin-menu li .badges .logs-output table.noflex td.level span.updates{font-size:.7rem}.logs-output table.noflex td.message{width:100%;word-break:break-all}.logs-output table.noflex .trace ol{margin:10px 0;padding:0;font-size:.7rem}.logs-output table.noflex .trace ol code{font-size:.7rem;display:block;white-space:pre-wrap}.permissions-container{max-width:800px}.gpm .permissions-container .gpm-testing .icon-super,.permissions-container .badge .icon-super,.permissions-container .gpm .gpm-testing .icon-super,.permissions-container .sidebar-open #admin-sidebar #admin-menu li .badges .updates .icon-super,.sidebar-open #admin-sidebar #admin-menu li .badges .permissions-container .updates .icon-super{display:block;height:20px;width:14px;line-height:1.5}.gpm .permissions-container .gpm-testing .icon-super:before,.permissions-container .badge .icon-super:before,.permissions-container .gpm .gpm-testing .icon-super:before,.permissions-container .sidebar-open #admin-sidebar #admin-menu li .badges .updates .icon-super:before,.sidebar-open #admin-sidebar #admin-menu li .badges .permissions-container .updates .icon-super:before{content:url(../images/icons/crown.svg)}.permissions-container .switch-toggle input+label:before{font-family:FontAwesome;margin-right:5px}.permissions-container .switch-toggle input.label0+label:before{content:"\f05e"}.permissions-container .switch-toggle input.label1+label:before{content:"\f00c"}.permissions-container fieldset{margin:0 0 1rem 0;padding:1rem;border-radius:4px}.permissions-container fieldset legend{padding:0 .5rem;margin-left:-.5rem;font-size:120%}.permissions-container fieldset fieldset{margin:0;border:0;padding:.5rem 0 0 2rem}.permissions-container fieldset fieldset legend{padding:0;margin:0}.permission-container{display:flex}.permission-container .permission-name{flex-grow:1;position:relative;overflow:hidden;margin-right:8px;padding-top:9px}.permission-container .permission-name span:not(.badge){position:relative;padding-right:5px}.gpm .permission-container .permission-name span.gpm-testing,.permission-container .permission-name .gpm span.gpm-testing,.permission-container .permission-name .sidebar-open #admin-sidebar #admin-menu li .badges span.updates,.permission-container .permission-name span.badge,.sidebar-open #admin-sidebar #admin-menu li .badges .permission-container .permission-name span.updates{position:relative;float:right;font-size:100%;border-radius:20px;margin-right:-2px}.permission-container .permission-name:before{content:"........................................................................................................................................";height:1px;position:absolute;right:100%;left:0}.reports-content .report-output table,.reports-content .report-output tbody,.reports-content .report-output thead{display:table;width:100%}.reports-content .report-output table thead tr th{display:table-cell}.reports-content .report-output table tbody tr td{display:table-cell}#pages-filters{margin-bottom:1rem;margin-top:-1rem;padding:1rem}#pages-filters .button-border{padding:.375rem .375rem;white-space:nowrap}#pages-filters .button-border.adv-options:after{content:"\f078";font-family:FontAwesome,sans-serif;margin-left:5px}#pages-filters .button-border.adv-options.open:after{content:"\f077"}#pages-filters .filters-bar{display:flex;align-items:center}#pages-filters .filters-bar .button-border{margin-left:.5rem}#pages-filters .filters-advanced{overflow:hidden;transition:max-height .3s ease-out;height:auto;max-height:600px}#pages-filters .filters-advanced.hide{max-height:0}#pages-filters .filters-advanced .button-border{display:inline-block;margin-top:.5rem}#pages-filters .filters-advanced fieldset{margin:1rem 0 0;border-radius:4px}#pages-filters .filters-advanced fieldset legend{margin-left:-.5rem;padding:0 .5rem}#pages-filters .filters-advanced fieldset .checkboxes{margin-right:1.5rem}#pages-filters .filters-advanced fieldset .checkboxes label{padding-left:1.7rem}#pages-filters .filters-advanced fieldset .checkboxes label:before{margin-top:-.6rem;margin-right:0;width:1.25rem;height:1.25rem}#pages-content-wrapper .grav-loading{min-height:600px}#pages-content-wrapper .grav-loading .grav-loader{margin:0 auto;position:relative;top:230px}#pages-content-wrapper .fjs-path-bar{margin-bottom:-1rem;border-bottom:0;padding:.5rem}#pages-content-wrapper .fjs-col{width:33.33333334%;min-width:300px}#pages-content-wrapper .fjs-item{max-width:100%}#pages-content-wrapper .fjs-item>.fjs-item-wrapper{display:flex;justify-content:flex-start;padding:0;margin:1px 0;border-top:1px solid transparent;border-bottom:1px solid transparent;outline:0}#pages-content-wrapper .fjs-item a{padding:7px 2px 7px 5px}#pages-content-wrapper .fjs-item a *{-webkit-transition:all .5s ease;-moz-transition:all .5s ease;transition:all .5s ease}#pages-content-wrapper .fjs-item .fjs-title{display:flex;align-items:center;flex-grow:1;max-width:100%;overflow:auto}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-toggle{padding:0;background:0 0;border:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu{top:inherit;left:inherit;right:inherit;bottom:inherit;position:fixed;cursor:default;padding:0 0 .5rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;width:350px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .tags{padding-top:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu a{cursor:pointer}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table{display:table}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table tbody{width:100%;display:inherit}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table tr{display:table-row}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table td{display:table-cell;text-align:left;flex:none;word-break:break-all;white-space:normal}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table td:first-child{padding-left:0;width:80px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table td:last-child{padding-right:0;width:calc(100% - 80px)}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .divider{height:0;margin:.5rem 0;overflow:hidden}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar{border-radius:4px 4px 0 0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar+.divider{margin-top:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a.dropdown-item:hover{border-radius:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a.dropdown-item:hover:first-child{border-top-left-radius:4px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a.dropdown-item:hover:last-child{border-top-right-radius:4px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .dropdown-item{display:block;width:100%;padding:.5rem;clear:both;font-weight:400;text-align:inherit;white-space:nowrap;border:0;border-radius:4px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .dropdown-item:hover{text-decoration:none}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .fa{display:inline-block;width:16px;height:inherit;text-align:left}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar{display:flex}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a,#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar i{text-align:center}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .details,#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .langs,#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .tags{padding:0 .5rem 0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .infos{margin:0 .15rem}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .infos ul{margin:0;padding:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .langs .lang{display:inline-block}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .langs .lang .fa{font-size:.6rem;padding:0 .15rem}#pages-content-wrapper .fjs-item .fjs-title>a{flex-grow:1;overflow:hidden}#pages-content-wrapper .fjs-item .button-group .fa{font-size:.9rem;width:28px;height:28px;display:flex;justify-content:center;align-items:center}#pages-content-wrapper .fjs-item .button-group .fa.disabled{opacity:0}#pages-content-wrapper .fjs-item .fjs-icon{position:relative;display:flex;justify-content:center;align-items:center;overflow:visible!important;width:34px;height:34px;min-width:34px;border-radius:50%;margin-right:5px;margin-left:5px}#pages-content-wrapper .fjs-item .fjs-icon:before{position:relative;content:url(../images/icons/book-edit.svg);flex:1;max-width:20px;margin-right:0;margin-bottom:-2px}#pages-content-wrapper .fjs-item .fjs-icon.modular:before{content:url(../images/icons/module-four.svg)}#pages-content-wrapper .fjs-item .fjs-icon.home:before{content:url(../images/icons/house.svg)}#pages-content-wrapper .fjs-item .fjs-icon.lock:before{content:url(../images/icons/touchid-lock.svg)}#pages-content-wrapper .fjs-item .fjs-icon.badge-published:after,#pages-content-wrapper .fjs-item .fjs-icon.badge-unpublished:after{content:''}#pages-content-wrapper .fjs-item .fjs-icon .badge-clock,#pages-content-wrapper .fjs-item .fjs-icon:after{display:block;position:absolute;top:-2px;right:-2px;height:12px;width:12px;border-radius:50%}#pages-content-wrapper .fjs-item .fjs-icon .badge-clock{border-radius:0;content:url(../images/icons/clock-hands.svg);z-index:2}#pages-content-wrapper .fjs-item .fjs-icon .badge-lang{position:absolute;bottom:-4px;bottom:-4px;left:50%;transform:translateX(-50%);line-height:1.2;font-weight:600;font-size:.6rem;border-radius:4px;padding:0 3px}#pages-content-wrapper .fjs-item .fjs-info{flex-grow:1;flex-direction:column;line-height:1.2}#pages-content-wrapper .fjs-item .fjs-info>b,#pages-content-wrapper .fjs-item .fjs-info>em{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-style:normal}#pages-content-wrapper .fjs-item .fjs-info>b{font-size:110%}#pages-content-wrapper .fjs-item .fjs-actions{display:flex;align-items:center;padding-right:3px;position:relative}#pages-content-wrapper .fjs-item .fjs-actions>*{margin-right:3px}#pages-content-wrapper .fjs-item .fjs-actions>:last-child{margin-right:0}#pages-content-wrapper .fjs-children{position:relative;display:flex;align-items:center;justify-content:center;height:28px;min-width:50px;outline:0;background-color:transparent}#pages-content-wrapper .fjs-children .badge,#pages-content-wrapper .fjs-children .gpm .gpm-testing,#pages-content-wrapper .fjs-children .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.gpm #pages-content-wrapper .fjs-children .gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges #pages-content-wrapper .fjs-children .updates{font-size:.7rem;margin-right:5px;padding:0 3px;line-height:1.3}#pages-content-wrapper .fjs-children .fa{display:inline-block!important;width:auto!important;font-size:14px}#pages-content-wrapper .breadcrumb-node{font-size:.9rem}#pages-content-wrapper .breadcrumb-node:hover span{text-decoration:none}#pages-content-wrapper .breadcrumb-node>i.fa{margin:0 .4rem -4px}#pages-content-wrapper .breadcrumb-node>i:not(.fa){position:relative;display:inline-flex;justify-content:center;align-items:center;overflow:inherit;width:16px;height:16px;border-radius:50%;margin-right:.35rem}#pages-content-wrapper .breadcrumb-node>i:not(.fa):before{position:relative;content:url(../images/icons/book-edit.svg);flex:1;max-width:10px}#pages-content-wrapper .breadcrumb-node>i:not(.fa).modular:before{content:url(../images/icons/module-four.svg)}#pages-content-wrapper .breadcrumb-node>i:not(.fa).home:before{content:url(../images/icons/house.svg)}#pages-content-wrapper .breadcrumb-node>i:not(.fa).lock:before{content:url(../images/icons/touchid-lock.svg)}#pages-content-wrapper .breadcrumb-node>i:not(.fa).badge-published:after,#pages-content-wrapper .breadcrumb-node>i:not(.fa).badge-unpublished:after{content:''}.pages-list{list-style:none;margin:0;padding:0}.pages-list ul{list-style:none;margin:0;padding:0}.pages-list li{margin:0;padding:0}.pages-list .row{-webkit-transition:all .2s ease;-moz-transition:all .2s ease;transition:all .2s ease;line-height:2.5rem;padding-right:3rem}@media only all and (max-width:47.938em){.pages-list .row{padding-right:1rem}}.pages-list .row [data-hint]:after{line-height:1!important;width:auto!important;white-space:nowrap!important}.pages-list .row p.page-route{display:block;margin:0;line-height:1;font-size:.9rem;word-break:break-all}.pages-list .row p.page-route .spacer{display:inline-block;margin:0 .3rem}.pages-list .row .hint--bottom:after,.pages-list .row .hint--bottom:before{left:4px}.pages-list .row .hint:after,.pages-list .row [data-hint]:after{border-radius:2px}.gpm .pages-list .row .lang.gpm-testing,.pages-list .row .badge.lang,.pages-list .row .gpm .lang.gpm-testing,.pages-list .row .sidebar-open #admin-sidebar #admin-menu li .badges .lang.updates,.sidebar-open #admin-sidebar #admin-menu li .badges .pages-list .row .lang.updates{margin-left:8px}.pages-list .page-home{font-size:1.4rem;margin-left:10px;vertical-align:middle}.pages-list .page-info{font-size:1.1rem;margin-left:10px;vertical-align:middle}.pages-list .page-edit{text-overflow:ellipsis;display:inline-block;max-width:100%;white-space:nowrap;overflow-x:hidden}.pages-list .page-item__row{display:flex}.pages-list .page-item__toggle{width:25px;line-height:1;padding-top:7px}.pages-list .page-item__content{padding:5px 0;width:calc(100% - 50px)}.pages-list .page-item__content-name{line-height:1}.pages-list .page-item__content-hint{line-height:1.3;vertical-align:middle;max-width:100%}.pages-list .page-item__tools{width:90px;text-align:right;font-size:1.4rem}.pages-list .page-item__tools .page-view{margin-right:4px}.pages-list .page-icon{color:#0082ba;font-weight:700}.pages-list .page-icon.children-open:before{content:'\f056'}.pages-list .page-icon.children-closed:before{content:'\f055'}.pages-list .page-icon.not-routable{color:#ce431d}.pages-list .page-icon.not-visible{color:#999}.pages-list .page-icon.modular{color:#9055af}.pages-list #pages-legend{margin-top:1.5rem;text-align:center}.pages-list #pages-legend h2,.pages-list #pages-legend li,.pages-list #pages-legend ul{display:inline-block}.pages-list #pages-legend li{margin-right:.75rem}#page-filtering{margin:0 1.5rem 1rem}#page-filtering:after{content:"";display:table;clear:both}@media only all and (max-width:47.938em){#page-filtering{margin:-1rem 1rem 1rem}}#page-filtering .page-filters{width:60%;float:left}@media only all and (max-width:47.938em){#page-filtering .page-filters{width:100%}}#page-filtering .page-search{position:relative;width:40%;float:left;padding-left:2rem;text-indent:2.5rem}#page-filtering .page-search:after{position:absolute;right:15px;top:10px;content:'\f002';font-family:FontAwesome}@media only all and (max-width:47.938em){#page-filtering .page-search{width:100%;padding-top:1rem;padding-left:0}#page-filtering .page-search:after{top:1.5rem}}#page-filtering .page-shortcuts{clear:both;padding-top:5px}#page-filtering .page-shortcuts:after{content:"";display:table;clear:both}#page-filtering .selectize-control.multi .selectize-input,#page-filtering .selectize-control.single.plugin-remove_button .selectize-input{padding:.375rem .375rem}#page-filtering .selectize-control.multi .selectize-input.has-items,#page-filtering .selectize-control.single.plugin-remove_button .selectize-input.has-items{padding-top:6px;padding-bottom:4px}#page-filtering .selectize-control.multi .selectize-input input,#page-filtering .selectize-control.single.plugin-remove_button .selectize-input input{font-size:.9rem;line-height:1.5}#page-filtering .selectize-control.multi .selectize-input .item,#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item{color:#777;background:#eee;padding:2px 10px}#page-filtering .selectize-control.multi .selectize-input .item[data-value=Routable],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=Routable]{background:#ce431d;color:#fff}#page-filtering .selectize-control.multi .selectize-input .item[data-value=NonRoutable],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=NonRoutable]{color:#ce431d}#page-filtering .selectize-control.multi .selectize-input .item[data-value=Visible],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=Visible]{background:#0082ba;color:#fff}#page-filtering .selectize-control.multi .selectize-input .item[data-value=NonVisible],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=NonVisible]{color:#0082ba}#page-filtering .selectize-control.multi .selectize-input .item[data-value=Modular],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=Modular]{background:#9055af;color:#fff}#page-filtering .selectize-control.multi .selectize-input .item[data-value=NonModular],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=NonModular]{color:#9055af}#page-filtering .selectize-control.multi .selectize-input .item[data-value=Published],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=Published]{background:#0093b8;color:#fff}#page-filtering .selectize-control.multi .selectize-input .item[data-value=NonPublished],#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value=NonPublished]{color:#0093b8}.admin-form-wrapper{position:relative}#admin-topbar{position:absolute;right:5px;height:50px}@media only all and (max-width:47.938em){#admin-topbar{position:relative;width:100%;right:0;padding:0 .5rem;margin:-2rem 0 2rem 0}}#admin-topbar #admin-lang-toggle,#admin-topbar #admin-mode-toggle{height:38px;display:inline-flex;vertical-align:inherit}@media only all and (max-width:47.938em){#admin-topbar #admin-lang-toggle,#admin-topbar #admin-mode-toggle{float:right}}#admin-topbar #admin-lang-toggle{z-index:3;float:left;margin-right:5px}#admin-topbar #admin-lang-toggle button{padding:.3rem .5rem;height:100%}#admin-topbar #admin-lang-toggle .dropdown-menu button{width:100%}#admin-topbar .switch-grav{border:0;line-height:38px}@media only all and (max-width:47.938em){#admin-topbar .switch-toggle{width:100%}}.depth-0 .row{padding-left:3rem}@media only all and (max-width:47.938em){.depth-0 .row{padding-left:1rem}}.depth-1 .row{padding-left:6rem}@media only all and (max-width:47.938em){.depth-1 .row{padding-left:2rem}}.depth-2 .row{padding-left:9rem}@media only all and (max-width:47.938em){.depth-2 .row{padding-left:3rem}}.depth-3 .row{padding-left:12rem}@media only all and (max-width:47.938em){.depth-3 .row{padding-left:4rem}}.depth-4 .row{padding-left:15rem}@media only all and (max-width:47.938em){.depth-4 .row{padding-left:5rem}}.depth-5 .row{padding-left:18rem}@media only all and (max-width:47.938em){.depth-5 .row{padding-left:6rem}}.depth-6 .row{padding-left:21rem}@media only all and (max-width:47.938em){.depth-6 .row{padding-left:7rem}}.depth-7 .row{padding-left:24rem}@media only all and (max-width:47.938em){.depth-7 .row{padding-left:8rem}}.depth-8 .row{padding-left:27rem}@media only all and (max-width:47.938em){.depth-8 .row{padding-left:9rem}}.depth-9 .row{padding-left:30rem}@media only all and (max-width:47.938em){.depth-9 .row{padding-left:10rem}}.selectize-route-option{display:flex}.selectize-route-option>:first-child{flex:0 0 auto;width:auto;margin-right:10px}.selectize-route-option>:last-child{flex:1 1 auto}.selectize-route-option>:last-child>*{display:block}.hidden{display:none!important}.switch-toggle input[type=radio]{display:none!important}[data-acl_picker] .permissions-item{display:flex;align-items:center;vertical-align:center}[data-acl_picker] .permissions-item .selectize-control,[data-acl_picker] .permissions-item a,[data-acl_picker] .permissions-item button,[data-acl_picker] .permissions-item input{display:inline-flex;margin:0 .5rem;align-items:center;vertical-align:center}[data-acl_picker] .permissions-item .selectize-control{flex-grow:1}[data-acl_picker] .permissions-item .selectize-control{margin-left:0}[data-acl_picker] .permissions-item .switch-toggle{margin:0}[data-acl_picker] .permissions-item:last-child{margin-right:0}html.remodal-is-locked{overflow:hidden;touch-action:none}.remodal,[data-remodal-id]{display:none}.remodal-overlay{position:fixed;z-index:99999;top:-5000px;right:-5000px;bottom:-5000px;left:-5000px;display:none}.remodal-wrapper{position:fixed;z-index:100000;top:0;right:0;bottom:0;left:0;display:none;overflow:auto;text-align:center;-webkit-overflow-scrolling:touch}.remodal-wrapper:after{display:inline-block;height:100%;margin-left:-.05em;content:''}.remodal-overlay,.remodal-wrapper{backface-visibility:hidden}.remodal{position:relative;outline:0;text-size-adjust:100%}.remodal-is-initialized{display:inline-block}.remodal-bg.remodal-is-opened,.remodal-bg.remodal-is-opening{-webkit-filter:blur(3px);filter:blur(3px)}.remodal-overlay{background:rgba(43,46,56,.9)}.remodal-overlay.remodal-is-closing,.remodal-overlay.remodal-is-opening{animation-duration:.3s;animation-fill-mode:forwards}.remodal-overlay.remodal-is-opening{animation-name:remodal-overlay-opening-keyframes}.remodal-overlay.remodal-is-closing{animation-name:remodal-overlay-closing-keyframes}.remodal-wrapper{padding:10px 10px 0}.remodal{box-sizing:border-box;width:100%;margin-bottom:10px;padding:35px;transform:translate3d(0,0,0)}.remodal.remodal-is-closing,.remodal.remodal-is-opening{animation-duration:.3s;animation-fill-mode:forwards}.remodal.remodal-is-opening{animation-name:remodal-opening-keyframes}.remodal.remodal-is-closing{animation-name:remodal-closing-keyframes}.remodal,.remodal-wrapper:after{vertical-align:middle}.remodal-close{position:absolute;top:0;left:0;display:block;overflow:visible;width:35px;height:35px;margin:0;padding:0;cursor:pointer;transition:color .2s;text-decoration:none;border:0;outline:0;background:0 0}.remodal-close:before{font-family:Arial,"Helvetica CY","Nimbus Sans L",sans-serif!important;font-size:25px;line-height:35px;position:absolute;top:0;left:0;display:block;width:35px;content:"\00d7";text-align:center}@keyframes remodal-opening-keyframes{from{transform:scale(1.05);opacity:0}to{transform:none;opacity:1}}@keyframes remodal-closing-keyframes{from{transform:scale(1);opacity:1}to{transform:scale(.95);opacity:0}}@keyframes remodal-overlay-opening-keyframes{from{opacity:0}to{opacity:1}}@keyframes remodal-overlay-closing-keyframes{from{opacity:1}to{opacity:0}}@media only screen and (min-width:641px){.remodal{max-width:700px}}.lt-ie9 .remodal-overlay{background:#2b2e38}.lt-ie9 .remodal{width:700px}.remodal{padding:35px 0 0;text-align:left;box-shadow:0 10px 20px rgba(0,0,0,.3);border-radius:3px}.remodal ul li{margin-left:27px;list-style-type:square}.admin-pages .form-tabs:first-child{margin-top:-1rem}.admin-pages .form-tabs .tabs-nav{margin-right:180px}@media only all and (max-width:47.938em){.admin-pages .form-tabs .tabs-nav{margin-right:0!important}}.form-tabs .tabs-nav{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;padding-top:1px}.form-tabs .tabs-nav a{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1;transition:color .5s ease,background .5s ease;cursor:pointer;min-height:50px;text-align:center;padding:4px;display:flex;align-items:center;justify-content:center}.form-tabs .tabs-nav span{display:inline-block;line-height:1.1}.form-tabs.subtle .tabs-nav{margin-right:0!important}.form-tabs .tabs-content .tab__content{display:none;padding-top:2rem}.form-tabs .tabs-content .tab__content.active{display:block}.form-tabs.side-tabs{display:flex;background:0 0}.form-tabs.side-tabs>.tabs-nav{width:20%;display:block;padding-top:1.5rem}.form-tabs.side-tabs>.tabs-nav a{text-align:left;flex:none;justify-content:left;padding-left:15px}.form-tabs.side-tabs>.tabs-content{width:80%}.grav-editor-content{position:relative}.grav-editor [data-grav-editor]{height:300px}.grav-editor [data-grav-editor].code-mirrored{padding:0;border:0;position:absolute;z-index:-1;display:block!important}.grav-editor .CodeMirror .CodeMirror-hscrollbar,.grav-editor .CodeMirror .CodeMirror-vscrollbar{z-index:1}.grav-editor .CodeMirror .CodeMirror-hscrollbar:focus,.grav-editor .CodeMirror .CodeMirror-vscrollbar:focus{outline:0}.grav-editor .CodeMirror-scroll{position:static;padding-bottom:15px}.grav-editor .grav-editor-resizer{height:6px;cursor:row-resize;border-radius:0 0 3px 3px;position:relative;z-index:1}.grav-editor .CodeMirror-selected{background:#d6e8ff}.grav-editor .CodeMirror-gutters{height:100%!important}.grav-editor-fullscreen{position:fixed;top:4.2rem;left:0;bottom:0;right:0;z-index:3;padding:0!important;margin:0!important;display:flex;flex-direction:column}.grav-editor-fullscreen .grav-editor-content{display:flex;flex-direction:column;flex:1 0 0;overflow-y:auto}.grav-editor-fullscreen .CodeMirror-wrap,.grav-editor-fullscreen .grav-editor-content,.grav-editor-fullscreen .grav-editor-preview{height:100%!important}.grav-editor-fullscreen .grav-editor-toolbar{flex:0 0 auto}.grav-editor-fullscreen .grav-editor-toolbar,.grav-editor-fullscreen .grav-editor-toolbar ul li:first-child a,.grav-editor-fullscreen .grav-editor-toolbar-flip ul li:last-child a{border-radius:0!important}.grav-editor-fullscreen .grav-editor-resizer{display:none}.grav-editor-fullscreen .grav-editor-content.is-active{display:flex}.grav-editor-toolbar{-webkit-box-align:stretch;-moz-box-align:stretch;box-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;-ms-align-items:stretch;-o-align-items:stretch;align-items:stretch;-ms-flex-align:stretch;display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;flex-direction:row;-ms-flex-direction:row}.grav-editor-toolbar .grav-editor-actions{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}.grav-editor-toolbar .grav-editor-modes{flex-shrink:0;margin-right:2px}.grav-editor-toolbar .grav-editor-modes ul{float:right}.grav-editor-toolbar:after{content:"";display:table;clear:both}.grav-editor-toolbar ul{list-style:none;margin:0;padding:0}.grav-editor-toolbar ul li{display:inline-block}.grav-editor-toolbar ul li:first-child a{border-top-left-radius:4px}.grav-editor-toolbar ul a{display:inline-block;cursor:pointer;background-color:transparent;border-radius:0;padding:.4rem;margin-top:-1px;border:1px solid transparent}.grav-editor-toolbar ul a,.grav-editor-toolbar ul a:active,.grav-editor-toolbar ul a:focus,.grav-editor-toolbar ul a:hover{outline:0}.grav-editor-toolbar .dropdown-menu li{width:50%}.grav-editor-hide-toolbar{display:none}.grav-editor-toolbar .grav-editor-modes li:first-child a{border-top-left-radius:0}.grav-editor-toolbar .grav-editor-modes li:last-child a{border-top-right-radius:4px}.grav-editor-toolbar-flip{float:right}.grav-editor-toolbar-flip ul li:last-child a{border-top-right-radius:4px}.grav-editor-content,.grav-editor-preview{cursor:text;display:none}.grav-editor-content:after,.grav-editor-preview:after{content:"";display:table;clear:both}.grav-editor-content.is-active,.grav-editor-preview.is-active{display:block}.grav-editor-content .CodeMirror-lines{padding:10px 0}.grav-editor-content.fontsize-lg{font-size:16px}.grav-editor-content.fontsize-lg.fontfamily-sans{font-size:18px}.grav-editor-content.fontsize-md{font-size:14px}.grav-editor-content.fontsize-md.fontfamily-sans{font-size:16px}.grav-editor-content.font-size-sm{font-size:12px}.grav-editor-content.font-size-sm.fontfamily-sans{font-size:14px}#admin-main .admin-block .grav-editor-preview{padding:20px;overflow-y:scroll;position:relative;line-height:1.5;background:#fff!important;color:#555!important}#admin-main .admin-block .grav-editor-preview a{color:#1c90fb!important}#admin-main .admin-block .grav-editor-preview h1{font-size:36px}#admin-main .admin-block .grav-editor-preview h2{font-size:28px}#admin-main .admin-block .grav-editor-preview h3{font-size:22px}#admin-main .admin-block .grav-editor-preview h4{font-size:18px}#admin-main .admin-block .grav-editor-preview h5{font-size:16px}#admin-main .admin-block .grav-editor-preview h6{font-size:14px}#admin-main .admin-block .grav-editor-preview h1,#admin-main .admin-block .grav-editor-preview h2,#admin-main .admin-block .grav-editor-preview h3,#admin-main .admin-block .grav-editor-preview h4,#admin-main .admin-block .grav-editor-preview h5,#admin-main .admin-block .grav-editor-preview h6{padding:0;margin:.5rem 0;border-bottom:0!important;color:#333!important;font-weight:700}#admin-main .admin-block .grav-editor-preview p{padding:0;margin:.5rem 0 1rem}#admin-main .admin-block .grav-editor-preview pre code{color:#1c90fb;font-size:14px}#admin-main .admin-block .grav-editor-preview blockquote{border-color:#ccc!important;background-color:#f0f0f0!important}#admin-main .admin-block .grav-editor-preview blockquote p{color:#444!important}#admin-main .admin-block .grav-editor-preview hr{border-color:#eee!important}#admin-main .admin-block .grav-editor-preview table td,#admin-main .admin-block .grav-editor-preview table th,#admin-main .admin-block .grav-editor-preview table tr{border-color:#eee!important}.grav-editor-toolbar [data-hint]:after{white-space:nowrap!important;max-width:300px;width:auto!important}.grav-editor-toolbar p{margin-top:10px;margin-bottom:10px;padding-left:20px}.dropzone{position:relative;border-radius:4px;min-height:4rem}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-drag-hover{border-color:rgba(0,0,0,.15);background:rgba(0,0,0,.04)}.dropzone.dz-started .dz-message{display:none}.dropzone .dz-message{opacity:1;-ms-filter:none;filter:none}.dropzone .dz-preview{position:relative;display:inline-block;margin:1rem 1rem 1.5rem 1rem;vertical-align:top}.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail]{display:none}.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{font-family:FontAwesome;display:none;position:absolute;width:22px;height:22px;font-size:18px;line-height:25px;border-radius:100%;text-align:center;right:2px;top:2px}.dropzone .dz-preview .dz-error-mark span,.dropzone .dz-preview .dz-success-mark span{display:none}.dropzone .dz-preview:hover .dz-error-mark,.dropzone .dz-preview:hover .dz-success-mark{display:none}.dropzone .dz-preview .dz-success-mark::after{content:'\f00c'}.dropzone .dz-preview .dz-error-mark::after{content:'\f12a'}.dropzone .dz-preview .dz-progress{position:absolute;top:150px;left:0;right:0;height:4px;display:none}.dropzone .dz-preview .dz-progress .dz-upload{display:block;position:absolute;top:0;bottom:0;left:0;width:0%}.dropzone .dz-preview .dz-error-message{display:none;position:absolute;top:0;left:0;right:0;font-size:.9rem;line-height:1.2;padding:8px 10px;z-index:500}.dropzone .dz-preview.dz-processing .dz-progress{display:block}.dropzone .dz-preview:hover .dz-insert,.dropzone .dz-preview:hover .dz-metadata,.dropzone .dz-preview:hover .dz-remove,.dropzone .dz-preview:hover .dz-unset,.dropzone .dz-preview:hover .dz-view{display:block}.dropzone .dz-preview.dz-processing:hover .dz-unset{display:none}.dropzone .dz-preview:hover.dz-error .dz-error-message{display:block}.dropzone .dz-preview .dz-filename{position:absolute;z-index:1;bottom:0;width:100%;padding:0 5px;background:rgba(0,0,0,.3);color:#fff;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-insert,.dropzone .dz-preview .dz-metadata,.dropzone .dz-preview .dz-remove,.dropzone .dz-preview .dz-unset,.dropzone .dz-preview .dz-view{display:none;position:absolute;width:25px;height:25px;right:-26px;font-size:0;cursor:pointer}.dropzone .dz-preview .dz-insert:hover:after,.dropzone .dz-preview .dz-metadata:hover:after,.dropzone .dz-preview .dz-remove:hover:after,.dropzone .dz-preview .dz-unset:hover:after,.dropzone .dz-preview .dz-view:hover:after{color:#fff}.dropzone .dz-preview .dz-insert:after,.dropzone .dz-preview .dz-metadata:after,.dropzone .dz-preview .dz-remove:after,.dropzone .dz-preview .dz-unset:after,.dropzone .dz-preview .dz-view:after{text-align:center;display:block;color:#999;font-family:FontAwesome;font-size:18px;line-height:25px}.dropzone .dz-preview .dz-insert{top:-1px;border-top-right-radius:4px}.dropzone .dz-preview .dz-insert:after{content:'\f055'}.dropzone .dz-preview .dz-view{top:24px}.dropzone .dz-preview .dz-view:after{content:'\f06e'}.dropzone .dz-preview .dz-remove{top:72px}.dropzone .dz-preview .dz-remove:after{content:'\f1f8'}.dropzone .dz-preview .dz-unset{top:96px;border-bottom-right-radius:4px}.dropzone .dz-preview .dz-unset:after{content:'\f00d'}.dropzone .dz-preview .dz-metadata{top:49px}.dropzone .dz-preview .dz-metadata:after{content:'\f05a'}.dropzone .dz-preview.dz-no-editor .dz-view{top:-1px;border-top-right-radius:4px}.dropzone .dz-preview.dz-no-editor .dz-remove{top:24px}.dropzone .dz-preview.dz-no-editor .dz-unset{top:72px}.dropzone .dz-preview:hover .dz-remove.file-thumbnail-remove,.dropzone .dz-preview:hover .dz-unset.file-thumbnail-remove{display:block}.dropzone .dz-preview:hover .dz-remove:not(.file-thumbnail-remove),.dropzone .dz-preview:hover .dz-unset:not(.file-thumbnail-remove){border-left:0}.dropzone .dz-preview.dz-processing .dz-details{overflow:hidden}.dropzone .dz-preview .dz-details{width:200px;height:150px;position:relative;font-size:.8rem;background-image:url(../images/transparent.png)}.dropzone .dz-preview .dz-details img{position:absolute;object-fit:contain;top:0;left:0;width:200px;height:150px}.dropzone .dz-preview .dz-details .dz-size{position:absolute;bottom:-28px;left:0;right:0;text-align:center;font-size:.8rem;height:28px;line-height:28px}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message span{cursor:pointer;text-align:center;font-size:1.2rem;line-height:1.4;margin:1rem 0}.dropzone *{cursor:default}.toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:5rem;right:1.5rem}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;color:#fff;opacity:.9}#toast-container>:hover{opacity:1;cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin:auto}.toast-warning{background-color:#f89406}.toast-warning .button{background-color:#c67605;color:rgba(255,255,255,.85);border-radius:4px;background:#945904}.toast-warning .button:focus,.toast-warning .button:hover{background:#a47229;color:#fff}.toast-warning .button.dropdown-toggle{border-left:1px solid #7c4a03}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.gpm td{border:0}.gpm .gpm-search{position:relative;padding:0 3rem .5rem 1.5rem;text-indent:2.5rem}.gpm .gpm-search:after{position:absolute;right:60px;top:10px;content:'\f002';font-family:FontAwesome}@media only all and (max-width:47.938em){.gpm .gpm-search{padding-left:1rem}}.gpm .sort-actions{float:right;margin:0 24px}@media only all and (max-width:47.938em){.gpm .sort-actions{float:none}}.gpm .sort-actions>*{font-size:1rem;display:inline-block;vertical-align:middle}.gpm .sort-actions .sort-icon{cursor:pointer}.gpm .sort-actions select{margin:0;display:none}.gpm .sort-actions .selectize-input{width:9rem;vertical-align:middle;line-height:21px}.gpm .sort-actions .selectize-input input{line-height:21px}.gpm .gpm-name{white-space:nowrap}@media only all and (max-width:47.938em){.gpm .gpm-name{white-space:normal}}.gpm .gpm-version{padding-left:.5rem;font-size:.9rem}.gpm .gpm-testing{border-radius:3px;padding:0 4px;font-size:.75rem}.gpm .theme .gpm-testing{line-height:1rem;position:absolute;top:0;right:0;border-radius:0 0 0 3px;line-height:1.3}.gpm .gpm-actions .disabled,.gpm .gpm-actions .enabled{font-size:1.6rem}.gpm .gpm-item-info{position:relative;padding-bottom:1rem;margin-bottom:3rem;overflow:hidden}.gpm .gpm-item-info .gpm-item-icon{position:absolute;right:1.5rem;font-size:20rem}.gpm .gpm-item-info table{position:relative}.gpm .gpm-item-info td{border:0;text-align:left!important}.gpm .gpm-item-info td.double{padding-left:2rem}.gpm .gpm-item-info td:first-child{white-space:nowrap}@media only all and (max-width:47.938em){.gpm .gpm-item-info td{word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}}.gpm .gpm-item-info tr:hover{background:inherit}.gpm .badge.update,.gpm .sidebar-open #admin-sidebar #admin-menu li .badges .update.updates,.gpm .update.gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges .gpm .update.updates{display:inline-block;border-radius:4px;padding:2px 10px;margin-left:1rem}.gpm .gpm-ribbon{overflow:hidden;white-space:nowrap;position:absolute;top:1rem;right:-2rem;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gpm .gpm-ribbon a{display:block;font-weight:700;font-size:.9rem;padding:5px 40px;text-align:center}.gpm .themes{padding:1.5rem}.gpm .themes .card-item{padding:1rem 1rem 4rem}.gpm .themes .gpm-screenshot{text-align:center}.gpm .themes .gpm-screenshot img{margin:0 auto;max-height:300px}.gpm .themes .gpm-name{margin-bottom:.5rem;white-space:inherit}.gpm .themes .gpm-actions{margin:1rem -1rem -1rem -1rem;height:4rem;text-align:center;padding:1rem;font-size:1rem;font-weight:700;position:absolute;left:0;right:0;bottom:1rem}.gpm .themes .active-theme .gpm-actions,.gpm .themes.inactive-theme .gpm-actions{line-height:2rem}.gpm .themes .inactive-theme .gpm-actions{display:block;font-weight:400}.gpm #gpm-release-toggle{float:right;margin-right:3rem}#phpinfo img{display:none}#phpinfo table{margin:1rem 0 0}#phpinfo tr:hover{background:0 0}#phpinfo td{word-wrap:break-word;overflow:hidden}#phpinfo td h1{margin:0 -1.5rem 0!important}#phpinfo hr{border-bottom:0}#phpinfo h1{font-size:2.3rem}#phpinfo h2{font-size:1.7rem;margin:3rem 1.5rem 0!important}.lines-button{display:inline-block;padding:.5rem .5rem 1rem;transition:.3s;cursor:pointer;user-select:none;border-radius:.4rem;position:absolute;z-index:100002;top:10px;background:0 0}.lines-button:hover{opacity:1}.lines-button:active{transition:none;background:rgba(0,0,0,.1)}.lines{position:relative;display:inline-block;width:2rem;height:.28571rem;border-radius:.14286rem;transition:.3s}.lines:after,.lines:before{display:inline-block;width:2rem;height:.28571rem;border-radius:.14286rem;transition:.3s;position:absolute;left:0;content:'';transform-origin:.14286rem center}.lines:before{top:.5rem}.lines:after{top:-.5rem}.sidebar-mobile-open .lines-button.x .lines{background:0 0!important}.sidebar-mobile-open .lines-button.x .lines:after,.sidebar-mobile-open .lines-button.x .lines:before{transform-origin:50% 50%;top:0;width:2rem}.sidebar-mobile-open .lines-button.x .lines:before{transform:rotate3d(0,0,1,45deg)}.sidebar-mobile-open .lines-button.x .lines:after{transform:rotate3d(0,0,1,-45deg)}.single-notification.alert{position:relative}.hide-notification{right:1rem;position:absolute}.alert.raw{padding:0!important}#admin-dashboard #notifications .admin-block{padding:1rem 0}#admin-dashboard #notifications li{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis}.dashboard-notifications-container,.plugins-notifications-container,.themes-notifications-container{margin-bottom:1rem}.dashboard-notifications-container .raw,.plugins-notifications-container .raw,.themes-notifications-container .raw{position:relative}.dashboard-notifications-container .raw .hide-notification,.plugins-notifications-container .raw .hide-notification,.themes-notifications-container .raw .hide-notification{position:absolute;top:5px;right:5px;line-height:1;font-size:1.2rem;color:#333;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}.dashboard-notifications-container:empty,.plugins-notifications-container:empty,.themes-notifications-container:empty{margin:0}#admin-main .content-padding div[class*=notifications-container] .alert a:hover{text-decoration:underline}#admin-main .content-padding div[class*=notifications-container] .alert a.button,#admin-main .content-padding div[class*=notifications-container] .alert button.button,#admin-main .content-padding div[class*=notifications-container] .alert span.button{float:right;text-decoration:none}#admin-main .content-padding .top-notifications-container{margin-bottom:1rem}#admin-main .content-padding .top-notifications-container .alert a{cursor:pointer}@media only all and (max-width:47.938em){#admin-main .content-padding .top-notifications-container{padding-bottom:20px}}#admin-main #notifications td:last-child{position:relative}#admin-main #notifications td:last-child span{position:absolute;display:block;right:2rem;top:6px}#admin-main #notifications .badge.alert,#admin-main #notifications .gpm .alert.gpm-testing,#admin-main #notifications .sidebar-open #admin-sidebar #admin-menu li .badges .alert.updates,.gpm #admin-main #notifications .alert.gpm-testing,.sidebar-open #admin-sidebar #admin-menu li .badges #admin-main #notifications .alert.updates{margin:0;font-size:.7rem;text-transform:uppercase;margin-right:5px;border-radius:4px;vertical-align:middle;line-height:1.7}#admin-main #notifications .badge.alert i,#admin-main #notifications .gpm .alert.gpm-testing i,#admin-main #notifications .sidebar-open #admin-sidebar #admin-menu li .badges .alert.updates i,.gpm #admin-main #notifications .alert.gpm-testing i,.sidebar-open #admin-sidebar #admin-menu li .badges #admin-main #notifications .alert.updates i{margin-right:3px}body .changelog{text-align:left;margin-top:-2rem}body .changelog .remodal-close{display:none}body .changelog code{white-space:pre-wrap;vertical-align:inherit;font-size:.8rem}body .changelog h1{text-align:center;font-size:2rem;margin:1rem 0;letter-spacing:-1px}body .changelog .remodal-confirm{float:right}body .changelog .changelog-overflow{max-height:500px;overflow:auto;margin-bottom:1em;border:1px solid #ddd;border-radius:3px;background:#fff;padding:1em}body .changelog h3,body .changelog h4{text-align:center;font-weight:700}body .changelog h3{font-size:1.3rem;margin:1.3rem 0 0 0;line-height:1}body .changelog h3+h4{font-size:1rem;margin:0 0 1rem 0;color:#666}body .changelog ol{list-style:none;padding:0;margin:0 0 3rem 0}body .changelog ol a[href='#new']+ul>li:before{background-color:#207de5;content:'New'}body .changelog ol a[href='#improved']+ul>li:before{background-color:#fbca04;color:#333;content:'Improved'}body .changelog ol a[href='#bugfix']+ul>li:before{background-color:#fc2929;content:'Bugfix'}body .changelog ul{list-style:none;padding:0}body .changelog ul li{margin-bottom:.5rem;padding-left:6rem;margin-left:0;list-style:none}body .changelog ul li:before{margin-left:-6rem;display:inline-block;border-radius:2px;color:#fff;font-weight:700;margin-right:1rem;text-align:center;width:5rem;font-size:.8rem;padding:2px 0;font-style:normal}.pages-list-container{width:30%;flex:none!important;padding:0!important}.pages-list-container .pages-list{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pages-list-container .pages-list.depth-0 .row{padding-left:.5rem}.pages-list-container .pages-list .depth-1 .row{padding-left:1rem}.pages-list-container .pages-list .page-item .page-link{cursor:pointer}.pages-list-container .pages-list .row.active{background-color:rgba(0,166,207,.1)}.media-page-dropzone{width:100%;margin-bottom:20px}.media-container.size-2-3{flex:none!important;width:70%}.media-container .filters{padding-bottom:30px;width:100%}.media-container .filters .filter-wrapper{margin-left:10px;margin-right:10px}.media-container .filters .filter-wrapper:after{margin-top:-25px;border:0 none;content:"\f078";font-family:FontAwesome;right:12px;top:50%;line-height:0;color:#9ba2a6;pointer-events:none;float:right;padding-right:10px}.media-container .filters .filter option{padding:8px}.media-container .files{padding-left:30px;padding-right:30px}.media-container .admin-media-title{color:#333;margin:0;font-size:.8rem;line-height:1.3}.media-container .card-item{width:49%}.media-container .card-item.empty-space{background:rgba(255,255,255,.4);border:1px solid rgba(0,0,0,.1)!important;color:rgba(0,0,0,.3);max-width:none;display:block;text-align:center;top:20%;height:10rem!important;width:50%!important;margin:0 auto!important;font-size:2rem;line-height:8rem;transform:translateY(-50%)}.media-container .media-details{text-align:center}.media-container .media-details img{width:50%}.media-container .media-details h2{margin:0;font-size:1.8rem}.media-container .media-details h5{color:#9ba2a6;font-size:1.1rem;margin:0}.media-container h1{padding:0 2rem .5rem!important}.media-container .admin-form-wrapper{width:100%;padding-bottom:20px}.spinning-wheel{text-align:center}.media-container.in-modal h1{font-size:30px!important;margin-top:0}.media-container.in-modal a{color:#333}.media-container.in-modal .pages-list li{list-style-type:none;margin-left:0}.remodal.remodal-mediapicker{max-width:70vw;padding:0}.media-container{height:70vh}.media-container .grid{justify-content:flex-start}.media-container.in-modal .gm-scrollbar{background:rgba(255,255,255,.2)}.media-container.in-modal .gm-scrollbar .thumb{background-color:rgba(0,0,0,.2)!important}.media-container.in-modal .gm-scrollbar .thumb.active,.media-container.in-modal .gm-scrollbar .thumb:hover{background-color:rgba(0,0,0,.3)!important}.media-container h5{border-bottom:1px solid #ddd;padding:.5rem 15px;margin:0;height:55px}.media-container .filter-wrapper{float:right;margin-right:5px;margin-top:10px}.media-container .filter-date{width:150px}.media-container .filter-type{width:100px;margin-right:15px}.media-container .pages-list-container{position:relative}.media-container .pages-list-container .pages-list{border-top:0;padding-right:10px;font-size:90%}.media-container .pages-list-container .pages-list .row{transition:none!important;line-height:2rem}.media-container .pages-list-container .pages-list .depth-1 .row{padding-left:2rem}.media-container .pages-list-container .pages-list .depth-2 .row{padding-left:3rem}.media-container .pages-list-container .pages-list .depth-3 .row{padding-left:4rem}.media-container .pages-list-container .pages-list .depth-4 .row{padding-left:5rem}.media-container .pages-list-container .pages-list .depth-5 .row{padding-left:6rem}.media-container .pages-list-container .pages-list .depth-6 .row{padding-left:7rem}.media-container .pages-list-container .pages-list .depth-7 .row{padding-left:8rem}.media-container .pages-list-container .pages-list .depth-8 .row{padding-left:9rem}.media-container .pages-list-container .pages-list .depth-9 .row{padding-left:10rem}.media-container .pages-list-container .mediapicker-scroll{position:absolute;top:55px;bottom:3px;height:inherit}.media-container .thumbs-list-container{position:relative}.media-container .thumbs-list-container .media-range{position:absolute;right:15px;bottom:5px}.media-container .thumbs-list-container .mediapicker-scroll{position:absolute;top:55px;bottom:30px;height:inherit}.media-container .thumbs-list-container .gm-scrollbar.-horizontal{display:none}.media-container #admin-media{padding:15px;height:100%;align-items:flex-start;align-content:flex-start}.media-container #admin-media .card-item{width:100px;padding:2px;margin:0 5px 5px 0;border:0}.media-container #admin-media .card-item img{display:block}.media-container #admin-media .admin-media-details{position:relative}.media-container #admin-media .admin-media-details .admin-media-title{position:absolute;width:100%;bottom:0;background:rgba(0,0,0,.3);color:#fff;font-size:10px;overflow:hidden;line-height:2;text-indent:2px;white-space:nowrap}[data-remodal-id=metadata] h1>*{vertical-align:middle}[data-remodal-id=metadata] h1 strong{display:inline-block;max-width:75%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-remodal-id=metadata] .metadata-preview{display:flex;margin:0 3rem}[data-remodal-id=metadata] .metadata-preview .meta-preview{max-width:200px}[data-remodal-id=metadata] .metadata-preview .meta-content ul{margin:0}.jqCron-selector{position:relative}.jqCron-cross,.jqCron-selector-title{cursor:pointer;border-radius:3px;margin:0 .2em;padding:0 .5em}.jqCron-cross{border-radius:1em;font-size:80%;padding:0 .3em}.jqCron-selector-list{left:.2em;list-style:none;margin:0;padding:0;position:absolute;top:1.5em;z-index:5}.jqCron-selector-list li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;cursor:default;display:inline-block!important;margin:0;padding:.1em .4em;width:100%}.jqCron-selector-list.cols2{width:4em}.jqCron-selector-list.cols2 li{width:50%}.jqCron-selector-list.cols3{width:6em}.jqCron-selector-list.cols3 li{width:33%}.jqCron-selector-list.cols4{width:8em}.jqCron-selector-list.cols4 li{width:25%}.jqCron-selector-list.cols5{width:10em}.jqCron-selector-list.cols5 li{width:20%}#backups-stats #backups-usage{position:relative;margin-bottom:1.5rem}#backups-stats #backups-usage h1{position:absolute;right:1rem;top:5px}#backups-stats .backups-usage-wrapper{height:40px;background:linear-gradient(90deg,#2ecc40 0,#01ff70 20%,#ffdc00 40%,#ff851b 60%,#ff4136 80%,#85144b 100%)}#backups-stats .backups-usage-wrapper>div{float:right;height:40px}#backups-stats .backups-usage-wrapper>div.full{width:100%}.backups-content #admin-dashboard{display:block}.backups-content #admin-dashboard #backups-stats{margin-left:1rem;margin-right:1rem}.backups-content #admin-dashboard #backups-stats h1{padding:0}@media only all and (max-width:47.938em){.backups-content #admin-dashboard #backups-stats h1{font-size:1.1rem}}#admin-main .admin-block .scheduler-content .alert{margin-top:-1rem;margin-bottom:2rem}.scheduler-content .secondary-accent .button{float:right;margin-top:-3px}.scheduler-content #cron-install{padding:0 1.5rem}.scheduler-content #cron-install pre{padding:.5rem}.scheduler-content #cron-install.hide{display:none}#admin-main .admin-block .report-output .alert{margin-top:0;margin-bottom:0}.report-output td .key{font-weight:700}.direct-install-content{padding:30px}.direct-install-content .button{margin-top:10px;margin-bottom:50px}.colorbar [data-hint]:after{width:300px!important;margin-left:-300px}.colorbar.current-scheme,.colorbar.predefined-scheme{padding-bottom:10px}.colorbar.current-scheme span,.colorbar.predefined-scheme span{color:transparent}.colorbar.predefined-scheme:hover{cursor:pointer}.colorbar.predefined-scheme:hover span{color:#fff}.colorbar.predefined-scheme:hover .light span{color:#000}.colorbar .colorbar-element-container{width:9rem;float:left;display:block;text-align:center;background:#fff;margin-bottom:1px;margin-right:1px}.colorbar .colorbar-element{width:100%;text-align:center;height:4rem;border-top:0;color:#333}.colorbar .colorbar-element span{font-size:.7rem}.colorbar .colorbar-element input{color:#333;width:100%!important}.colorbar .colorbar-element.light-text{color:#fff}.colorbar .colorbar-element.light-text input{color:#fff}.colorbar .colorbar-title{font-size:.8rem;font-weight:700;padding:1px;background-color:rgba(0,0,0,.05)}.colorbar input{width:100%;border:none;font-size:.8rem;text-align:center;border-radius:0;height:35px;position:absolute;background:0 0}.colorbar input:focus{outline:0}.colorbar .choose-predefined-scheme{cursor:pointer}.admin-preview-wrapper{display:inline-block;width:8rem;position:relative;margin-right:2rem}.admin-preview-title{text-align:center}.admin-preview{height:10rem;position:relative;border-radius:4px;border-width:2px!important}.ap-overlay{cursor:pointer;opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;border-radius:4px;z-index:2;text-align:center;transition:opacity .4s ease}.ap-overlay:hover{opacity:1;background:rgba(0,0,0,.4)}.ap-overlay b{display:inline-block;font-weight:400;margin-top:4rem;background:#111;color:#bbb;border-radius:4px;padding:4px 10px}.ap-overlay b:hover{color:#fff;background:#000}.ap-sidebar{position:absolute;width:25%;top:0;left:0;bottom:0}.ap-logo{height:10%;text-align:center}.ap-logo::after{display:block;position:relative;top:50%;margin:0 auto;transform:translateY(-50%);content:'';height:8px;width:25%}.ap-nav{padding:5px 10px}.ap-text,.ap-text::after,.ap-text::before{margin-top:4px;position:relative;display:block;margin-bottom:3px;height:2px;content:''}.ap-text::before{margin-top:0;top:7px}.ap-text::after{margin-top:0;top:9px}.ap-active{display:block;margin:19px -10px 0;margin-bottom:5px;padding:5px 10px 5px 7px;border-left-width:3px;border-left-style:solid}.ap-active::after{display:block;content:'';height:2px}.ap-toolbar{position:absolute;left:25%;right:0;height:10%;padding:0 10px}.ap-toolbar::after{display:block;position:relative;top:50%;transform:translateY(-50%);content:'';width:33%;height:4px}.ap-button{float:right;position:relative;top:50%;transform:translateY(-50%);height:8px;width:25px}.ap-page{position:absolute;top:10%;left:25%;right:0;bottom:0;padding:10px}.ap-content{height:100%;overflow:hidden}.ap-title{display:block;height:4px;width:25%;margin:8px 10px 5px}.ap-content .ap-text{margin-left:10px;margin-right:10px}.ap-critical,.ap-notice,.ap-update{margin-top:19px;display:block;content:'';padding:5px 10px}.ap-critical::after,.ap-notice::after,.ap-update::after{display:block;content:'';height:2px;width:50%}.ap-update{margin-top:3px}[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity .2s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.3;transition:opacity 0s linear}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.jquery-horizontal-scroll-wrap{position:relative}.jquery-horizontal-scroll-wrap .nav-next,.jquery-horizontal-scroll-wrap .nav-prev{position:absolute;z-index:5;top:50%;font-size:20px;line-height:20px;display:block;padding:30px 8px;color:#fff!important;background:#000;background:rgba(0,0,0,.65);cursor:pointer;margin-top:-40px}.jquery-horizontal-scroll-wrap .nav-next.hide,.jquery-horizontal-scroll-wrap .nav-prev.hide{display:none}.jquery-horizontal-scroll-wrap .nav-next:focus,.jquery-horizontal-scroll-wrap .nav-next:hover,.jquery-horizontal-scroll-wrap .nav-prev:focus,.jquery-horizontal-scroll-wrap .nav-prev:hover{opacity:1}.jquery-horizontal-scroll-wrap .nav-next:before,.jquery-horizontal-scroll-wrap .nav-prev:before{display:inline;font-family:FontAwesome}.jquery-horizontal-scroll-wrap .nav-next{right:0}.jquery-horizontal-scroll-wrap .nav-next:before{content:"\f105"}.jquery-horizontal-scroll-wrap .nav-prev{left:0}.jquery-horizontal-scroll-wrap .nav-prev:before{content:"\f104"}.jquery-horizontal-scroll-wrap .jquery-horizontal-scroll{overflow:auto;position:relative} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlbXBsYXRlL19hZG1pbi5zY3NzIiwibnVjbGV1cy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwidGVtcGxhdGUvX3BhZ2VzLnNjc3MiLCJ0ZW1wbGF0ZS9tb2R1bGVzL19idXR0b25zLnNjc3MiLCJ0ZW1wbGF0ZS9tb2R1bGVzL19jb2xvcnBpY2tlci5zY3NzIiwidmVuZG9yL2JvdXJib24vZnVuY3Rpb25zL19weC10by1yZW0uc2NzcyIsInZlbmRvci9ib3VyYm9uL2FkZG9ucy9fcHJlZml4ZXIuc2NzcyIsInRlbXBsYXRlL21vZHVsZXMvX2RhdGV0aW1lcGlja2VyLnNjc3MiLCJ0ZW1wbGF0ZS9tb2R1bGVzL19maW5kZXJqcy5zY3NzIiwidGVtcGxhdGUvbW9kdWxlcy9fdG9nZ2xlLXN3aXRjaC5zY3NzIiwiY29uZmlndXJhdGlvbi90ZW1wbGF0ZS9fdmFyaWFibGVzLnNjc3MiLCJ0ZW1wbGF0ZS9fY29yZS5zY3NzIiwibnVjbGV1cy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCJ0ZW1wbGF0ZS9fZ3BtLnNjc3MiLCJ0ZW1wbGF0ZS9fdG9vbHMuc2NzcyIsInRlbXBsYXRlL19leHRlbnNpb25zLnNjc3MiLCJ0ZW1wbGF0ZS9fdXRpbGl0aWVzLnNjc3MiLCJ0ZW1wbGF0ZS9fdHlwb2dyYXBoeS5zY3NzIiwiY29uZmlndXJhdGlvbi9udWNsZXVzL190eXBvZ3JhcGh5LnNjc3MiLCJ0ZW1wbGF0ZS9fZm9ybXMuc2NzcyIsInRlbXBsYXRlL190YWJsZXMuc2NzcyIsInZlbmRvci9ib3VyYm9uL2NzczMvX2ZsZXgtYm94LnNjc3MiLCJ0ZW1wbGF0ZS9fYnV0dG9ucy5zY3NzIiwidGVtcGxhdGUvX2Vycm9ycy5zY3NzIiwidGVtcGxhdGUvX2xvZ2luLnNjc3MiLCJ2ZW5kb3IvYm91cmJvbi9jc3MzL19wbGFjZWhvbGRlci5zY3NzIiwidmVuZG9yL2JvdXJib24vYWRkb25zL19jbGVhcmZpeC5zY3NzIiwiY29uZmlndXJhdGlvbi90ZW1wbGF0ZS9fY29sb3JzLnNjc3MiLCJ0ZW1wbGF0ZS9fcmVtb2RhbC5zY3NzIiwidGVtcGxhdGUvX3RhYnMuc2NzcyIsInRlbXBsYXRlL19lZGl0b3Iuc2NzcyIsInRlbXBsYXRlL19kcm9wem9uZS5zY3NzIiwidGVtcGxhdGUvX3RvYXN0ci5zY3NzIiwidmVuZG9yL2JvdXJib24vZnVuY3Rpb25zL190aW50LXNoYWRlLnNjc3MiLCJ0ZW1wbGF0ZS9fcGhwaW5mby5zY3NzIiwidGVtcGxhdGUvX25hdi10b2dnbGUuc2NzcyIsInRlbXBsYXRlL19ub3RpZmljYXRpb25zLnNjc3MiLCJ0ZW1wbGF0ZS9fY2hhbmdlbG9nLnNjc3MiLCJ0ZW1wbGF0ZS9fbWVkaWEuc2NzcyIsInZlbmRvci9ib3VyYm9uL2FkZG9ucy9fZWxsaXBzaXMuc2NzcyIsInRlbXBsYXRlL19qcWNyb24uc2NzcyIsInRlbXBsYXRlL193aGl0ZWxhYmVsLnNjc3MiLCJ0ZW1wbGF0ZS9fc2Nyb2xsYmFycy5zY3NzIiwidGVtcGxhdGUvX2hvcml6b250YWwtc2Nyb2xsLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNDBCQSxtQ0FBQSxtQ0NsMEJBLGFEeWdCQSx1Q0FBQSx3Q0FBQSxrQ0FBQSx5QkU0TEEsaUNBQUEsaUNEcHNCQyxTQUFVLFNBQ1YsSUFBSyxJQUNMLGtCQUFtQixpQkFDbkIsZUFBZ0IsaUJBQ2hCLGFBQWMsaUJBQ2QsY0FBZSxpQkFDZixVQUFXLGlCQUNYLFFFakJBLFFBQVMsYUFDVCxRQUFTLE1BQUEsS0FDTixZQUFhLElBQ2IsT0FBUSxRQUNSLGVBQWdCLE9BQ2hCLFFBQVMsRUFFVCxlQUNJLE9BQVEsSUFBQSxFQUFBLEtBQUEsRUFDWCxxQkFPRyxRQUFTLElBQUEsSUFDVCxVQUFXLElBQ2QsdUJBR0csUUFBUyxJQUFBLElBQ1QsVUFBVyxJQUNkLGlCQUdHLFFBQVMsR0FDVCxPQUFRLFFBQ1gsZUM1QkQsU0FBVSxTQUNWLGNDV00sU0RWTixVQUFXLEtBQ1gsUUFBUyxLQUpiLHFCQVFRLFdBQVksSUFScEIsaUJBWVEsU0FBVSxTQUNW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ZElkLFNjSmMsRWRoQmQsYWNnQmMsRWRYZCxVY1djLEVkTmQsU2NNYyxFZElkLEtjSmMsRUFUdEIsYUFBQSxhZFBRLGlCY21Ca0IsRWRkbEIsY2Nja0IsRWRDbEIsU2NEa0IsRWRuQmxCLGFjbUJrQixFZGRsQixVY2NrQixFZFRsQixTY1NrQixFZENsQixLY0RrQixFQVoxQixhQUFBLGFkUFEsaUJjdUJrQixFZGxCbEIsY2NrQmtCLEVkSGxCLFNjR2tCLEVkdkJsQixhY3VCa0IsRWRsQmxCLFVja0JrQixFZGJsQixTY2FrQixFZEhsQixLY0drQixFQWhCMUIsYUFBQSxhZFBRLGlCYzJCa0IsRWR0QmxCLGNjc0JrQixFZFBsQixTY09rQixFZDNCbEIsYWMyQmtCLEVkdEJsQixVY3NCa0IsRWRqQmxCLFNjaUJrQixFZFBsQixLY09rQixFQXBCMUIsZ0JBQUEsZ0JkUFEsaUJjK0JrQixFZDFCbEIsY2MwQmtCLEVkWGxCLFNjV2tCLEVkL0JsQixhYytCa0IsRWQxQmxCLFVjMEJrQixFZHJCbEIsU2NxQmtCLEVkWGxCLEtjV2tCLEVBeEIxQixnQkFBQSxnQmRQUSxpQmNtQ2tCLEVkOUJsQixjYzhCa0IsRWRmbEIsU2Nla0IsRWRuQ2xCLGFjbUNrQixFZDlCbEIsVWM4QmtCLEVkekJsQixTY3lCa0IsRWRmbEIsS2Nla0IsRUE1QjFCLGVBQUEsZWRQUSxpQmN1Q2tCLEVkbENsQixjY2tDa0IsRWRuQmxCLFNjbUJrQixFZHZDbEIsYWN1Q2tCLEVkbENsQixVY2tDa0IsRWQ3QmxCLFNjNkJrQixFZG5CbEIsS2NtQmtCLEVBaEMxQixlQUFBLGVkUFEsaUJjMkNrQixFZHRDbEIsY2NzQ2tCLEVkdkJsQixTY3VCa0IsRWQzQ2xCLGFjMkNrQixFZHRDbEIsVWNzQ2tCLEVkakNsQixTY2lDa0IsRWR2QmxCLEtjdUJrQixFQXBDMUIsY0FBQSxjZFBRLGlCYytDa0IsRWQxQ2xCLGNjMENrQixFZDNCbEIsU2MyQmtCLEVkL0NsQixhYytDa0IsRWQxQ2xCLFVjMENrQixFZHJDbEIsU2NxQ2tCLEVkM0JsQixLYzJCa0IsRUF4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QVUsU0FEZCx5Q0FBQSx5Q0FJUSxTQUFVLFNBQ1YsUUFBUyxFQUNULElBQUssSUFDTCxVQUFXLEtBQ1gsWUFBYSxLQUNiLFFBQVMsTUFDVCxRQUFTLEtBQUEsSUFDVCxNQUFPLGVBQ1AsV0FBWSxLQUNaLFdBQVksZ0JBQ1osT0FBUSxRQUNSLFdBQVksTUFmcEIsOENBQUEsOENBa0JZLFFBQVMsS0FsQnJCLCtDQUFBLCtDQUFBLCtDQUFBLCtDQXNCWSxRQUFTLEVBdEJyQixnREFBQSxnREEwQlksUUFBUyxPQUNULFlBQWEsWUEzQnpCLHlDQWdDUSxNQUFPLEVBaENmLGdEQW1DWSxRQUFTLFFBbkNyQix5Q0F5Q1EsS0FBTSxFQXpDZCxnREE0Q1ksUUFBUyxRQTVDckIseURBa0RRLFNBQVUsS0FDVixTQUFVIiwiZmlsZSI6InRlbXBsYXRlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIiR0b3BiYXItaGVpZ2h0OiA0LjJyZW07XG4kdXBkYXRlLWhlaWdodDogM3JlbTtcbiRzaWRlYmFyLXdpZHRoLWxhcmdlOiAyNDBweDtcbiRzaWRlYmFyLXdpZHRoLXNtYWxsOiAkdG9wYmFyLWhlaWdodDtcbiRzaWRlYmFyLXBhZGRpbmc6IDJyZW07XG4kY29udGVudC1wYWRkaW5nOiAxLjVyZW07XG5cbi8vIFNwZWNpYWwgY2FzZXNcbi5zaWRlYmFyLWNsb3NlZDpub3QoLnNpZGViYXItcXVpY2tvcGVuKSB7XG4gICAgI2FkbWluLXNpZGViYXIge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgd2lkdGg6ICRzaWRlYmFyLXdpZHRoLXNtYWxsO1xuXG4gICAgICAgICNhZG1pbi1sb2dvIHtcbiAgICAgICAgICAgIGgzIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDA7XG4gICAgICAgICAgICAgICAgJjpmaXJzdC1sZXR0ZXIge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuY3VzdG9tLWxvZ28ge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTVweDtcblxuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNncmF2LWxvZ28tc21hbGwge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgI2dyYXYtbG9nby1sYXJnZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZyb250LWVuZCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgI2FkbWluLXVzZXItZGV0YWlscyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDAgMTVweCAxMHB4O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hZG1pbi11c2VyLW5hbWVzIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAjYWRtaW4tbWVudSB7XG4gICAgICAgICAgICBlbSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGkge1xuICAgICAgICAgICAgICAgIC5iYWRnZXMge1xuICAgICAgICAgICAgICAgICAgICAudXBkYXRlcyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiA0cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMTBweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogOXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluLXdpZHRoOiAxNXB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC5jb3VudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgI29wZW4taGFuZGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UtZGVza3RvcC1wbHVzKSB7XG4gICAgICAgICAgICAgICAgLmZhLWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMTA1XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgICNhZG1pbi1tYWluIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRzaWRlYmFyLXdpZHRoLXNtYWxsO1xuICAgIH1cbn1cblxuLnNpZGViYXItb3BlbiB7XG4gICAgI2FkbWluLXNpZGViYXIge1xuICAgICAgICB6LWluZGV4OiAxMDAwMTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHdpZHRoOiAkc2lkZWJhci13aWR0aC1sYXJnZTtcblxuICAgICAgICBoMyB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgICAgICY6Zmlyc3QtbGV0dGVyIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNncmF2LWxvZ28tc21hbGwge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgICNncmF2LWxvZ28tbGFyZ2Uge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgI2FkbWluLXVzZXItZGV0YWlscyB7XG4gICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDEwcHg7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmFkbWluLXVzZXItbmFtZXMge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICAuZnJvbnQtZW5kIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgICNhZG1pbi1tZW51IHtcbiAgICAgICAgICAgIGVtIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpIHtcbiAgICAgICAgICAgICAgICAuYmFkZ2VzIHtcbiAgICAgICAgICAgICAgICAgICAgLnVwZGF0ZXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogYXV0bztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgQGV4dGVuZCAuYmFkZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLmNvdW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICNvcGVuLWhhbmRsZSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1pbmktbmF2LXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLmZhLWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMTA0XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tc2lkZWJhciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtaGVpZ2h0OiAxMDB2aDtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHotaW5kZXg6IDM7XG4gICAgLy90cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgMHMsIHZpc2liaWxpdHkgMHMgMC4ycztcblxuICAgICNvcGVuLWhhbmRsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcmlnaHQ6MDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICB3aWR0aDogMTVweDtcbiAgICAgICAgaGVpZ2h0OiAkdG9wYmFyLWhlaWdodDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBsaW5lLWhlaWdodDogJHRvcGJhci1oZWlnaHQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDNweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlLWRlc2t0b3AtcGx1cykge1xuICAgICAgICAgICAgLmZhLWFuZ2xlLXJpZ2h0OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYxMDRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuc2lkZWJhci1pcy12aXNpYmxlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgLy90cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgMHMsIHZpc2liaWxpdHkgMHMgMHNcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgIHotaW5kZXg6IDU7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCh0YWJsZXQtcGx1cykge1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgd2lkdGg6ICRzaWRlYmFyLXdpZHRoLXNtYWxsO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UtZGVza3RvcC1wbHVzKSB7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB3aWR0aDogJHNpZGViYXItd2lkdGgtbGFyZ2U7XG4gICAgfVxuXG59XG5cbiNhZG1pbi1sb2dvIHtcbiAgICBoZWlnaHQ6ICR0b3BiYXItaGVpZ2h0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICAgICYubmF2LWhvdmVyIHtcbiAgICAgICAgLmFkbWluLWxvZ28ge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmFkbWluLWxvZ28ge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xMHB4O1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQodGFibGV0LXBsdXMpIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICYuY3VzdG9tLWxvZ28ge1xuXG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTVweDtcblxuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgNXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgICAgYTpub3QoLmZyb250LWVuZCkge1xuICAgICAgICAgICAgZGlzcGxheTogaW5oZXJpdDtcbiAgICAgICAgfVxuXG4gICAgICAgICYuY3VzdG9tLWxvZ28ge1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAzMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZyb250LWVuZCB7XG5cbiAgICAgICAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCh0YWJsZXQtcGx1cykge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UtZGVza3RvcC1wbHVzKSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgICNncmF2LWxvZ28tc21hbGwge1xuICAgICAgICBoZWlnaHQ6IDMwcHg7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCh0YWJsZXQtcGx1cykge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChsYXJnZS1kZXNrdG9wLXBsdXMpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjZ3Jhdi1sb2dvLWxhcmdlIHtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQodGFibGV0LXBsdXMpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlLWRlc2t0b3AtcGx1cykge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQodGFibGV0LXBsdXMpIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMDtcbiAgICAgICAgICAgICY6Zmlyc3QtbGV0dGVyIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UtZGVza3RvcC1wbHVzKSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgICAgICY6Zmlyc3QtbGV0dGVyIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGkge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0xcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5ibG9jay11c2VyaW5mbyB7XG4gICAgaW1nIHtcbiAgICAgICAgd2lkdGg6IDIwMHB4O1xuICAgICAgICBoZWlnaHQ6IDIwMHB4O1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICB9XG5cbiAgICAmIH4gLmJsb2NrLWZpbGUge1xuICAgICAgICBtYXJnaW4tdG9wOiAtNXJlbSAhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuI29mZmxpbmUtc3RhdHVzIHtcbiAgICBwYWRkaW5nOiAuMnJlbSAxcmVtO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgLmZhLXBsYW5lIHtcbiAgICAgICAgQGluY2x1ZGUgdHJhbnNmb3JtKHJvdGF0ZSg0NWRlZykpO1xuICAgIH1cbn1cblxuI2FkbWluLXVzZXItZGV0YWlscyB7XG4gICAgaW1nIHtcbiAgICAgICAgd2lkdGg6IDQ3cHg7XG4gICAgICAgIGhlaWdodDogNDdweDtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgfVxufVxuXG4jYWRtaW4tdXNlci1kZXRhaWxzLCAuYWRtaW4tdXNlci1kZXRhaWxzIHtcbiAgICBwYWRkaW5nOiAxNXB4IDEwcHg7XG4gICAgbWluLWhlaWdodDogODBweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1pbmktbmF2LXJhbmdlKSB7XG4gICAgICAgIHBhZGRpbmc6IDFyZW0gMTBweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIGltZyB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuNXMgZWFzZSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgIH1cblxuICAgIC5hZG1pbi11c2VyLW5hbWVzIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDYwcHg7XG4gICAgICAgIG1hcmdpbi10b3A6IDVweDtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtaW5pLW5hdi1yYW5nZSkge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGg0LCBoNSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJhZGdlIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaDUge1xuICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNhZG1pbi1uYXYtcXVpY2stdHJheSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAyNnB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG5cblxuICAgIGxpIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB3aWR0aDogMjRweDtcbiAgICAgICAgbWFyZ2luOiAzcHggMCA1cHg7XG4gICAgfVxuXG4gICAgaSB7XG4gICAgICAgIHRyYW5zaXRpb246IGFsbCAuMnMgZWFzZS1pbi1vdXQ7XG5cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5jb250ZW50LXBhZGRpbmcge1xuICAgICNtZXNzYWdlcy5kZWZhdWx0LWJveC1zaGFkb3cge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG4uYWRtaW4tbWVudS13cmFwcGVyIHtcbiAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAxODBweCk7XG4gICAgLy9vdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtaW5pLW5hdi1yYW5nZSkge1xuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwdmggLSAxMzZweCk7XG4gICAgfVxufVxuXG4jYWRtaW4tbWVudSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcblxuICAgIGVtIHtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWluaS1uYXYtcmFuZ2UpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsaSB7XG4gICAgICAgIC5iYWRnZXMge1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuXG4gICAgICAgICAgICAuYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC01cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC51cGRhdGVzIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY291bnQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobWluaS1uYXYtcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYud2l0aC11cGRhdGVzIHtcbiAgICAgICAgICAgICAgICAuY291bnQge1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC51cGRhdGVzIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtaW5pLW5hdi1yYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogNHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDlweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMTVweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgMC4ycyBlYXNlKTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuN3JlbTtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjdyZW07XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgICAgIC5mYSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgMC4ycyBlYXNlKTtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgJi5zZWxlY3RlZCB7XG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmJvZHkuc2lkZWJhci1xdWlja29wZW4gI2FkbWluLW1haW4ge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobGFyZ2UtZGVza3RvcC1wbHVzKSB7XG4gICAgICAgICBtYXJnaW4tbGVmdDogJHNpZGViYXItd2lkdGgtc21hbGw7XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiB7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KHRhYmxldC1wbHVzKSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkc2lkZWJhci13aWR0aC1zbWFsbDtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KGxhcmdlLWRlc2t0b3AtcGx1cykge1xuICAgICAgICBtYXJnaW4tbGVmdDogJHNpZGViYXItd2lkdGgtbGFyZ2U7XG4gICAgfVxuXG4gICAgLmZvcm0tbGFiZWwgbGFiZWwge1xuICAgICAgICAuaGludDphZnRlciwgW2RhdGEtaGludF06YWZ0ZXIge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIG1pbi13aWR0aDogMTUwcHg7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGgxIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0xcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgfVxuXG4gICAgLnBhZGRpbmcge1xuICAgICAgICBwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0O1xuICAgIH1cblxuICAgIC5saW5lcy1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICBtYXJnaW4tbGVmdDogJHBhZGRpbmctZGVmYXVsdCAvIDQ7XG4gICAgICAgICY6Zm9jdXMge1xuICAgICAgICAgICAgb3V0bGluZTpub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC5idXR0b24ge1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cblxuICAgIC50aXRsZWJhciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaGVpZ2h0OiAkdG9wYmFyLWhlaWdodDtcbiAgICAgICAgcGFkZGluZzogMCAkcGFkZGluZy1kZWZhdWx0O1xuICAgICAgICB6LWluZGV4OiA0O1xuXG4gICAgICAgIGJveC1zaGFkb3c6IDBweCAzcHggMTVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgKCRwYWRkaW5nLWRlZmF1bHQgLyA0KSAwICgkcGFkZGluZy1kZWZhdWx0ICsgMi41KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIEBleHRlbmQgJXZlcnRpY2FsLWFsaWduO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC1tcy10ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgICAgIGkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5idXR0b24tYmFyIHtcbiAgICAgICAgICAgIEBleHRlbmQgJXZlcnRpY2FsLWFsaWduO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICB9XG5cbiAgICAgICAgLnByZXZpZXcge1xuICAgICAgICAgICAgZm9udC1zaXplOiA5MCU7XG4gICAgICAgIH1cblxuICAgICAgICAuYnV0dG9uIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwLjRyZW07XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwLjVyZW07XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMzZweDtcbiAgICAgICAgICAgICAgICBpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAbWVkaWEgb25seSBhbGwgYW5kIChtYXgtd2lkdGg6IDIwLjg3NWVtKSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC41cmVtIDAuMnJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNwYW4uYnV0dG9uIHtcbiAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIC5kcm9wZG93bi1tZW51IC5idXR0b24ge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmFkbWluLWJsb2NrIC5hbGVydCB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0ycmVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycmVtO1xuICAgIH1cblxuICAgIC5hbGVydCB7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZTtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICB9XG4gICAgICAgICYuaW5mbzpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogXCJcXGYwYTFcIjtcbiAgICAgICAgfVxuICAgICAgICAmLndhcm5pbmc6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMDcxXCI7XG4gICAgICAgIH1cbiAgICAgICAgJi5ub3RlOmJlZm9yZSB7XG4gICAgICAgICAgICBjb250ZW50OiBcIlxcZjI0YVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5ncmF2OmJlZm9yZSB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWUsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICBjb250ZW50OiBcIlxcZjJkNlwiO1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgICAmLmdyYXYge1xuICAgICAgICAgICAgI2dyYXYtdXBkYXRlLWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTNweDtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3Jhdi11cGRhdGUge1xuICAgICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgICAgICAgcGFkZGluZzogMCAkcGFkZGluZy1kZWZhdWx0O1xuICAgICAgICBtYXJnaW4tdG9wOiAtMnJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDFyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuYnV0dG9uIHtcbiAgICAgICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDAuNnJlbTtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAxcmVtO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgfVxuXG4gICAgICAgIHAge1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6ICR1cGRhdGUtaGVpZ2h0O1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIC1tcy10ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3BhbltjbGFzcz1cImhpbnQtLWxlZnRcIl06OmFmdGVyIHtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIH1cblxuICAgICAgICBpIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLmdyYXYtdXBkYXRlLmdyYXYgKyAuY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMHZoIC0gI3skdG9wYmFyLWhlaWdodH0gLSAjeyR1cGRhdGUtaGVpZ2h0fSk7XG4gICAgfVxuXG4gICAgLmNvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgLy9vdmVyZmxvdy15OiBoaWRkZW47XG4gICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtICN7JHRvcGJhci1oZWlnaHR9KTtcbiAgICAgICAgLy96LWluZGV4OiAwO1xuICAgIH1cblxuICAgIC5jb250ZW50LXBhZGRpbmcge1xuICAgICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuYWRtaW4tYmxvY2sge1xuICAgICAgICBwYWRkaW5nOiAxcmVtIDA7XG5cbiAgICAgICAgJjplbXB0eSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaDEge1xuICAgICAgICAgICAgcGFkZGluZzogMCAkcGFkZGluZy1kZWZhdWx0IDAuNXJlbTtcbiAgICAgICAgICAgIG1hcmdpbjogMCAwIDFyZW07XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDFyZW0gMC41cmVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm5vX3VuZGVybGluZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5idXR0b24tYmFyIHtcbiAgICAgICAgICAgIG1hcmdpbjogMCAkcGFkZGluZy1kZWZhdWx0O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAtMXJlbSAwIDFyZW0gMDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDFyZW07XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgICAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mbHVzaC1ib3R0b20ge1xuICAgICAgICAmLmJ1dHRvbi1iYXIge1xuICAgICAgICAgICAgbWFyZ2luOiAxcmVtICgtJHBhZGRpbmctZGVmYXVsdCkgLTFyZW07XG4gICAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgICAgZmxvYXQ6IG5vbmU7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICAgICAgJi5zdGF0cy1iYXIge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgYiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMzdweDtcblxuICAgICAgICAgICAgICAgICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRhbmdlciwgLnN1Y2Nlc3Mge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgJi5idXR0b24tYmFyIHtcbiAgICAgICAgICAgIG1hcmdpbjogMnJlbSAwIC0xcmVtO1xuICAgICAgICAgICAgaGVpZ2h0OiA3MHB4O1xuICAgICAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgQGV4dGVuZCAldmVydGljYWwtYWxpZ247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5jb250ZW50LXBhZGRpbmcge1xuICAgICNhZG1pbi1kYXNoYm9hcmQge1xuXG4gICAgICAgIC5kYXNoYm9hcmQtaXRlbS1mbGV4IHtcbiAgICAgICAgICAgICY6bnRoLW9mLXR5cGUoMm4pIC5kYXNoYm9hcmQtaXRlbSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAkY29udGVudC1wYWRkaW5nIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJjpudGgtb2YtdHlwZSgybisxKSAuZGFzaGJvYXJkLWl0ZW0ge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogJGNvbnRlbnQtcGFkZGluZyAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZGFzaGJvYXJkLWl0ZW0ge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4jYWRtaW4tZGFzaGJvYXJkIHtcblxuICAgIEBpbmNsdWRlIGRpc3BsYXkoZmxleCk7XG4gICAgQGluY2x1ZGUgZmxleC1mbG93KHJvdyB3cmFwKTtcblxuICAgIC5kYXNoYm9hcmQtaXRlbS1mbGV4IHtcbiAgICAgICAgQGluY2x1ZGUgZGlzcGxheShmbGV4KTtcbiAgICAgICAgQGluY2x1ZGUgZmxleC1mbG93KGNvbHVtbiBub3dyYXApO1xuXG4gICAgICAgIHdpZHRoOiA1MCU7XG5cblxuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgLmRhc2hib2FyZC1pdGVtIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZGFzaGJvYXJkLWl0ZW0ge1xuXG4gICAgICAgID4gZGl2Om5vdCgud2lkZ2V0LWNvbnRlbnQpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDFyZW0gJHBhZGRpbmctZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxIC5yaWdodCB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAmLmFkbWluLWJsb2NrIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDFyZW0gMDtcblxuICAgICAgICAgICAgdWwge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMCAwIDFyZW0gMDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAuNDI1cmVtICRwYWRkaW5nLWRlZmF1bHQgMC4ycmVtICRwYWRkaW5nLWRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY2hhcnQtbG9hZGVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgIC5mYSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgZm9udC1zaXplOiA0cmVtO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTJyZW07XG4gICAgICAgICAgICBAZXh0ZW5kICV2ZXJ0aWNhbC1hbGlnbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAud2lkZ2V0LWNvbnRlbnQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDMzNXB4O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIC53aWRnZXQtbG9hZGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblxuICAgICAgICAuZmEge1xuICAgICAgICAgICAgZm9udC1zaXplOiA0cmVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3VwZGF0ZXMge1xuXG4gICAgICAgIHAge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnVwZGF0ZXMtY2hhcnQge1xuICAgICAgICAgICAgd2lkdGg6IDUwJTtcbiAgICAgICAgICAgIGZsb2F0OiBsZWZ0O1xuXG4gICAgICAgIH1cblxuICAgICAgICAuZmx1c2gtYm90dG9tIHtcbiAgICAgICAgICAgICYuYnV0dG9uLWJhciB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA3MHB4O1xuICAgICAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5jaGFydC13cmFwcGVyIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5iYWNrdXBzLWNoYXJ0IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHdpZHRoOiA1MCU7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jdC1jaGFydCB7XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAxNTdweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5udW1lcmljIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICAgICAgQGV4dGVuZCAldmVydGljYWwtYWxpZ247XG5cbiAgICAgICAgICAgIGVtIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICAuYWRtaW4tdXBkYXRlLWNoYXJ0cyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDE5MXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmJ1dHRvbi1iYXIgPiAuYnV0dG9uOm5vdCguZHJvcGRvd24tdG9nZ2xlKSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAzN3B4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI3BvcHVsYXJpdHkge1xuICAgICAgICAuY3QtY2hhcnQge1xuICAgICAgICAgICAgbWluLWhlaWdodDogMTcxcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYnV0dG9uLWJhciB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgICAgICAgICAgcGFkZGluZzogMCAxcmVtO1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kYXNoYm9hcmQtaXRlbSB7XG5cbiAgICAgICAgLmFkbWluLXN0YXRpc3RpY3MtY2hhcnQge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuc3RhdCB7XG4gICAgICAgICAgICB3aWR0aDogMzMlO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgICAgICBiIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIuNXJlbTtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI25ld3MtZmVlZCB7XG4gICAgICAgIC5kYXRlIHtcbiAgICAgICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgICAgbGkge1xuXG5cbiAgICAgICAgICAgIGEge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICAtbXMtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICAgICAgei1pbmRleDogMDtcblxuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lO1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMWVhXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm5vLWZsaWNrIHtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG59XG5cbi5jYXJkLXJvdyB7XG4gICAgQGluY2x1ZGUganVzdGlmeS1jb250ZW50KHNwYWNlLWJldHdlZW4pO1xufVxuXG4uY2FyZC1pdGVtIHtcbiAgICBAZXh0ZW5kIC5uby1mbGljaztcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgbWFyZ2luOiAwO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMzElO1xuICAgIG1heC13aWR0aDogMjFyZW07XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KHRhYmxldC1yYW5nZSkge1xuICAgICAgICB3aWR0aDogNDglO1xuICAgIH1cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIG1hcmdpbi1ib3R0b206IDJyZW07XG5cbiAgICBoNCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIH1cbn1cblxuLnVzZXItZGV0YWlscyB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBpbWcge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuXG4gICAgfVxuICAgIGgyIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDIuMXJlbSAhaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW46IDFyZW0gMCAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoNSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGxpbmVwLWhlaWdodDogMS4yO1xuICAgIH1cblxuICAgIC5ncmF2YXRhciB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cbn1cblxuI2Zvb3RlciB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHBhZGRpbmc6IDNyZW0gMCAxcmVtO1xuXG4gICAgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG59XG5cbi8vIENoYXJ0IG92ZXJyaWRlc1xuLmN0LWNoYXJ0IHtcbiAgICAuY3Qtc2VyaWVzIHtcbiAgICAgICAgLmN0LWJhciB7XG4gICAgICAgICAgICBzdHJva2Utd2lkdGg6IDIwcHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbiNwb3B1bGFyaXR5IC5jdC1jaGFydCB7XG4gICAgbWFyZ2luOiAwIC0xMHB4IC0xMHB4O1xuICAgIC5jdC1jaGFydC1iYXIge1xuICAgICAgICBwYWRkaW5nOiA0cHggNnB4IDFweCAxMHB4O1xuICAgIH1cbn1cblxuI2xhdGVzdCB7XG4gICAgLnBhZ2UtdGl0bGUsIC5wYWdlLXJvdXRlIHtcbiAgICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgfVxufVxuXG4jb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHdpZHRoOiAyNSU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHotaW5kZXg6IDk5OTk5OTtcbiAgICBsZWZ0OiA3NSU7XG4gICAgdG9wOiAwO1xuICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xuICAgIH1cbn1cblxuLy8gRml4IHRhYnMgc3BhY2luZyBpbiBwbHVnaW4gLyB0aGVtZSBvcHRpb25zXG4uZ3BtLWl0ZW0taW5mbyArICNibHVlcHJpbnRzIC5ibG9jay10YWJzIHtcbiAgICBwYWRkaW5nLXRvcDogMTZweDtcbn1cblxuLnBsdWdpbnMtbm90aWZpY2F0aW9ucy1jb250YWluZXIsXG4udGhlbWVzLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAycmVtO1xufVxuXG4ucGFja2FnZS1kZXBlbmRlbmNpZXMtY29udGFpbmVyIHtcbiAgICBsaSB7XG4gICAgICAgIGhlaWdodDogMzVweDtcblxuICAgICAgICAuYnV0dG9uIHtcbiAgICAgICAgICAgIGhlaWdodDogMzBweDtcbiAgICAgICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ucG9pbnRlci1ldmVudHMtZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vLyBSZWluc3RhbGwgcGFja2FnZXNcbi51cGRhdGVzLWNoZWNrZWQge1xuICAgIC5idXR0b24tcmVpbnN0YWxsLXBhY2thZ2Uge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2shaW1wb3J0YW50O1xuICAgIH1cblxuICAgICYuaGFzLXVwZGF0ZXMge1xuICAgICAgICAuYnV0dG9uLXJlaW5zdGFsbC1wYWNrYWdlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBQcmV2aWV3XG4ucHJldmlldy13cmFwcGVyIHtcbiAgICAuY29udGVudC1wYWRkaW5nIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgfVxufVxuXG4vLyBDb25maWcgU2lkZSBUYWJzXG5AaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgI2FkbWluLW1haW4gLmNvbmZpZy13cmFwcGVyLXN5c3RlbSAuZm9ybS10YWJzLnNpZGUtdGFicyB7XG4gICAgICAgID4gLnRhYnMtbmF2IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgfVxuICAgICAgICA+IC50YWJzLWNvbnRlbnQge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAudGFiX19jb250ZW50IHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gTG9nIFZpZXdlclxuLmxvZ3Mtb3V0cHV0IHtcblxuICAgIGZvcm0ge1xuXG4gICAgICAgIC5mb3JtLWRhdGEge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIG1hcmdpbjogMCAtMC41cmVtO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KHNtYWxsLW1vYmlsZS1yYW5nZSkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1zLXNlbGVjdC13cmFwcGVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICAgIG1hcmdpbjogMC41cmVtIDAuNXJlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGgxIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMnJlbSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGgzIHtcbiAgICAgICAgcGFkZGluZzogMC41cmVtIDEuNXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAxLjFyZW07XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGFibGUubm9mbGV4IHtcblxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgdGQuZGF0ZSwgdGQubGV2ZWwge1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRkLmRhdGUge1xuICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICB9XG5cbiAgICAgICAgdGgubGV2ZWwsIHRkLmxldmVsIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAuMzc1cmVtIDMwcHg7XG4gICAgICAgIH1cblxuICAgICAgICB0ZC5sZXZlbCB7XG4gICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICAgICAgICAgc3Bhbi5iYWRnZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0ZC5tZXNzYWdlIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRyYWNlIHtcbiAgICAgICAgICAgIG9sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDEwcHggMDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuXG4gICAgICAgICAgICAgICAgY29kZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBOZXcgMS43IFBlcm1pc3Npb25zXG4ucGVybWlzc2lvbnMtY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDgwMHB4O1xuXG4gICAgLmJhZGdlIC5pY29uLXN1cGVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgd2lkdGg6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG5cbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogdXJsKCcuLi9pbWFnZXMvaWNvbnMvY3Jvd24uc3ZnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc3dpdGNoLXRvZ2dsZSB7XG4gICAgICAgIGlucHV0K2xhYmVsOmJlZm9yZSB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0LmxhYmVsMCtsYWJlbDpiZWZvcmV7XG4gICAgICAgICAgICBjb250ZW50OiBcIlxcZjA1ZVwiO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0LmxhYmVsMStsYWJlbDpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogXCJcXGYwMGNcIjtcblxuICAgICAgICB9XG4gICAgfVxuICAgIGZpZWxkc2V0IHtcbiAgICAgICAgbWFyZ2luOiAwIDAgMXJlbSAwO1xuICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICAgICBsZWdlbmQge1xuICAgICAgICAgICAgcGFkZGluZzogMCAwLjVyZW07XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogLTAuNXJlbTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTIwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkc2V0IHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwIDAgMnJlbTtcblxuICAgICAgICAgICAgbGVnZW5kIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi5wZXJtaXNzaW9uLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcblxuXG4gICAgLnBlcm1pc3Npb24tbmFtZSB7XG4gICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDlweDtcblxuICAgICAgICBzcGFuOm5vdCguYmFkZ2UpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxMDAlO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogLTJweDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlwiO1xuICAgICAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogMTAwJTtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFJlcG9ydHNcbi5yZXBvcnRzLWNvbnRlbnQge1xuICAgIC5yZXBvcnQtb3V0cHV0IHtcbiAgICAgICAgdGFibGUsIHRib2R5LCB0aGVhZCB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlIHtcbiAgICAgICAgICAgIHRoZWFkIHtcbiAgICAgICAgICAgICAgICB0ciB7XG4gICAgICAgICAgICAgICAgICAgIHRoIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0Ym9keSB7XG4gICAgICAgICAgICAgICAgdHIge1xuICAgICAgICAgICAgICAgICAgICB0ZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5cbiIsIlxuXG4vLyBMaXN0IFJlc2V0XG4lbGlzdC1yZXNldCB7XG5cdG1hcmdpbjogMDtcblx0cGFkZGluZzogMDtcblx0bGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLy8gVmVydGljYWwgQ2VudGVyaW5nXG4ldmVydGljYWwtYWxpZ24ge1xuXHRwb3NpdGlvbjogcmVsYXRpdmU7XG5cdHRvcDogNTAlO1xuXHQtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0LW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cdC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0LW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcblx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xufVxuXG4vLyBDb2x1bW5zXG5AbWl4aW4gY29sdW1ucygkY29sdW1ucykge1xuXHR3aWR0aDogcGVyY2VudGFnZSgxLyRjb2x1bW5zKTtcbn1cblxuLy8gRmxvYXQgd2l0aCBtYXJnaW4gdmFyaWFibGVcbkBtaXhpbiBmbG9hdCgkZGlyZWN0aW9uLCAkbWFyZ2luOiAwKSB7XG5cdGZsb2F0OiAkZGlyZWN0aW9uO1xuXHRtYXJnaW4tI3tvcHBvc2l0ZS1kaXJlY3Rpb24oJGRpcmVjdGlvbil9OiAkbWFyZ2luO1xufVxuIiwiI3BhZ2VzLWZpbHRlcnMge1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgcGFkZGluZzogMXJlbTtcblxuICAgIC5idXR0b24tYm9yZGVyIHtcbiAgICAgICAgcGFkZGluZzogLjM3NXJlbSAuMzc1cmVtO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAgICYuYWR2LW9wdGlvbnMge1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwNzhcIjtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogXCJGb250QXdlc29tZVwiLCBzYW5zLXNlcmlmO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLm9wZW46YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMDc3XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZmlsdGVycy1iYXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgICAgIC5idXR0b24tYm9yZGVyIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZmlsdGVycy1hZHZhbmNlZCB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRyYW5zaXRpb246bWF4LWhlaWdodCAwLjNzIGVhc2Utb3V0O1xuICAgICAgICBoZWlnaHQ6YXV0bztcbiAgICAgICAgbWF4LWhlaWdodDo2MDBweDtcblxuICAgICAgICAmLmhpZGUge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5idXR0b24tYm9yZGVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkc2V0IHtcbiAgICAgICAgICAgIG1hcmdpbjogMXJlbSAwIDA7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICAgICAgICAgbGVnZW5kIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTAuNXJlbTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmNoZWNrYm94ZXMge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMS41cmVtO1xuICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjdyZW07XG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC0wLjZyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMS4yNXJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMS4yNXJlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuI3BhZ2VzLWNvbnRlbnQtd3JhcHBlciB7XG4gICAgLmdyYXYtbG9hZGluZyB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDYwMHB4O1xuXG4gICAgICAgIC5ncmF2LWxvYWRlciB7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHRvcDogMjMwcHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZmpzLXBhdGgtYmFyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTFyZW07XG4gICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICB9XG5cbiAgICAuZmpzLWNvbCB7XG4gICAgICAgIHdpZHRoOiAzMy4zMzMzMzMzNCU7XG4gICAgICAgIG1pbi13aWR0aDogMzAwcHg7XG4gICAgfVxuXG4gICAgLmZqcy1pdGVtIHtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuXG4gICAgICAgID4gLmZqcy1pdGVtLXdyYXBwZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICBtYXJnaW46IDFweCAwO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgICAgcGFkZGluZzogN3B4IDJweCA3cHggNXB4O1xuICAgICAgICAgICAgJiAqIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKGFsbCAwLjVzIGVhc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmZqcy10aXRsZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgICAgICAgICBbZGF0YS1mbGV4cGFnZXMtZG90eDNdIHtcbiAgICAgICAgICAgICAgICAuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKiBGSVhNRTogcHJvcGVybHkgbW92ZSBjb2xvcnMgdG8gcHJlc2V0cyAqL1xuICAgICAgICAgICAgICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICAgICByaWdodDogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcblxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDAgMC41cmVtO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjMjEyNTI5O1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLC4xNSk7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IC4yNXJlbTtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDM1MHB4O1xuXG4gICAgICAgICAgICAgICAgICAgIC50YWdzIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0YWJsZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0YWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGluaGVyaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA4MHB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAuZGl2aWRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IC41cmVtIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLmFjdGlvbi1iYXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXMgJGJvcmRlci1yYWRpdXMgMCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgJiArIC5kaXZpZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhLmRyb3Bkb3duLWl0ZW06aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAuZHJvcGRvd24taXRlbSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5mYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAuYWN0aW9uLWJhciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhLCBpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAuZGV0YWlscywgLnRhZ3MsIC5sYW5ncyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIC41cmVtIDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAuaW5mb3Mge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIC4xNXJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC5sYW5ncyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAubGFuZyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mYSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC42cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDAuMTVyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmID4gYSB7XG4gICAgICAgICAgICAgICAgZmxleC1ncm93OiAxO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuYnV0dG9uLWdyb3VwIHtcbiAgICAgICAgICAgIC5mYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgICAgICAgICAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5manMtaWNvbiB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdpZHRoOiAzNHB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAzNHB4O1xuICAgICAgICAgICAgbWluLXdpZHRoOiAzNHB4O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogNXB4O1xuXG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHVybCgnLi4vaW1hZ2VzL2ljb25zL2Jvb2stZWRpdC5zdmcnKTtcbiAgICAgICAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMjBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAtMnB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1vZHVsYXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB1cmwoJy4uL2ltYWdlcy9pY29ucy9tb2R1bGUtZm91ci5zdmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5ob21lOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogdXJsKCcuLi9pbWFnZXMvaWNvbnMvaG91c2Uuc3ZnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubG9jazpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHVybCgnLi4vaW1hZ2VzL2ljb25zL3RvdWNoaWQtbG9jay5zdmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5iYWRnZS1wdWJsaXNoZWQ6YWZ0ZXIsICYuYmFkZ2UtdW5wdWJsaXNoZWQ6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmFmdGVyLCAuYmFkZ2UtY2xvY2sge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IC0ycHg7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IC0ycHg7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJhZGdlLWNsb2NrIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHVybCgnLi4vaW1hZ2VzL2ljb25zL2Nsb2NrLWhhbmRzLnN2ZycpO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5iYWRnZS1sYW5nIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgYm90dG9tOiAtNHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogLTRweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuNnJlbTtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwIDNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5manMtaW5mbyB7XG4gICAgICAgICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcblxuICAgICAgICAgICAgPiBiLCA+IGVtIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA+IGIge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTEwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5manMtYWN0aW9ucyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAgICAgPiAqIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcblxuICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZmpzLWNoaWxkcmVuIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgaGVpZ2h0OiAyOHB4O1xuICAgICAgICBtaW4td2lkdGg6IDUwcHg7XG4gICAgICAgIG91dGxpbmU6IDA7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gICAgICAgIC5iYWRnZSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDAuN3JlbTtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICAgICAgcGFkZGluZzogMHB4IDNweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICAgIH1cblxuICAgICAgICAuZmEge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmJyZWFkY3J1bWItbm9kZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuXG4gICAgICAgICY6aG92ZXIgc3BhbiB7XG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gaS5mYSB7XG4gICAgICAgICAgICBtYXJnaW46IDAgMC40cmVtIC00cHg7XG4gICAgICAgIH1cblxuICAgICAgICAmID4gaTpub3QoLmZhKSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIG92ZXJmbG93OiBpbmhlcml0O1xuICAgICAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDE2cHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuMzVyZW07XG5cbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICAgICAgY29udGVudDogdXJsKCcuLi9pbWFnZXMvaWNvbnMvYm9vay1lZGl0LnN2ZycpO1xuICAgICAgICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm1vZHVsYXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB1cmwoJy4uL2ltYWdlcy9pY29ucy9tb2R1bGUtZm91ci5zdmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5ob21lOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29udGVudDogdXJsKCcuLi9pbWFnZXMvaWNvbnMvaG91c2Uuc3ZnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYubG9jazpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHVybCgnLi4vaW1hZ2VzL2ljb25zL3RvdWNoaWQtbG9jay5zdmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5iYWRnZS1wdWJsaXNoZWQ6YWZ0ZXIsICYuYmFkZ2UtdW5wdWJsaXNoZWQ6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ucGFnZXMtbGlzdCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcblxuICAgIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgIH1cblxuICAgIGxpIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgfVxuXG4gICAgLnJvdyB7XG4gICAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuMnMgZWFzZSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyLjVyZW07XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDNyZW07XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgICAgICAgfVxuICAgICAgICBbZGF0YS1oaW50XTphZnRlciB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHAucGFnZS1yb3V0ZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cbiAgICAgICAgICAgIC5zcGFjZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgMC4zcmVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZml4IGZvciBoaW50IGFsaWdubWVudFxuICAgICAgICAuaGludC0tYm90dG9tOmJlZm9yZSwgLmhpbnQtLWJvdHRvbTphZnRlciB7XG4gICAgICAgICAgICBsZWZ0OiA0cHg7XG4gICAgICAgIH1cbiAgICAgICAgLmhpbnQ6YWZ0ZXIsIFtkYXRhLWhpbnRdOmFmdGVyIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5iYWRnZS5sYW5nIHtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAucGFnZS1ob21lIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjRyZW07XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cblxuICAgIC5wYWdlLWluZm8ge1xuICAgICAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuXG4gICAgLnBhZ2UtZWRpdCB7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIH1cblxuICAgIC5wYWdlLWl0ZW1fX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgLnBhZ2UtaXRlbV9fdG9nZ2xlIHtcbiAgICAgICAgd2lkdGg6IDI1cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICBwYWRkaW5nLXRvcDogN3B4O1xuICAgIH1cblxuICAgIC5wYWdlLWl0ZW1fX2NvbnRlbnQge1xuICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDUwcHgpO1xuICAgIH1cblxuICAgIC5wYWdlLWl0ZW1fX2NvbnRlbnQtbmFtZSB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIH1cblxuICAgIC5wYWdlLWl0ZW1fX2NvbnRlbnQtaGludCB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAucGFnZS1pdGVtX190b29scyB7XG4gICAgICAgIHdpZHRoOiA5MHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgZm9udC1zaXplOiAxLjRyZW07XG5cbiAgICAgICAgLnBhZ2UtdmlldyB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5wYWdlLWljb24ge1xuXG4gICAgICAgIGNvbG9yOiAjMDA4MkJBO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuXG4gICAgICAgICYuY2hpbGRyZW4tb3BlbjpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDogJ1xcZjA1Nic7XG4gICAgICAgIH1cblxuICAgICAgICAmLmNoaWxkcmVuLWNsb3NlZDpiZWZvcmV7XG4gICAgICAgICAgICBjb250ZW50OiAnXFxmMDU1JztcbiAgICAgICAgfVxuXG4gICAgICAgICYubm90LXJvdXRhYmxlIHtcbiAgICAgICAgICAgIGNvbG9yOiAjQ0U0MzFEO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5ub3QtdmlzaWJsZSB7XG4gICAgICAgICAgICBjb2xvcjogIzk5OTtcbiAgICAgICAgfVxuXG4gICAgICAgICYubW9kdWxhciB7XG4gICAgICAgICAgICBjb2xvcjogIzkwNTVBRjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNwYWdlcy1sZWdlbmQge1xuICAgICAgICBtYXJnaW4tdG9wOiAxLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICBoMiwgdWwsIGxpIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGxpIHtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMC43NXJlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuI3BhZ2UtZmlsdGVyaW5nIHtcbiAgICBtYXJnaW46IDAgJHBhZGRpbmctZGVmYXVsdCAxcmVtO1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICBtYXJnaW46IC0xcmVtIDFyZW0gMXJlbTtcbiAgICB9XG5cbiAgICAucGFnZS1maWx0ZXJzIHtcbiAgICAgICAgd2lkdGg6IDYwJTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC5wYWdlLXNlYXJjaCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDQwJTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgICAgICAgdGV4dC1pbmRlbnQ6IDIuNXJlbTtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYwMDInO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdGb250QXdlc29tZSc7XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHBhZGRpbmctdG9wOiAxcmVtO1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAwcmVtO1xuXG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICB0b3A6IDEuNXJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5wYWdlLXNob3J0Y3V0cyB7XG4gICAgICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICAgICAgcGFkZGluZy10b3A6NXB4O1xuICAgIH1cblxuICAgIC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUucGx1Z2luLXJlbW92ZV9idXR0b24gLnNlbGVjdGl6ZS1pbnB1dCxcbiAgICAuc2VsZWN0aXplLWNvbnRyb2wubXVsdGkgLnNlbGVjdGl6ZS1pbnB1dCB7XG5cbiAgICAgICAgcGFkZGluZzogKCRsZWFkaW5nLW1hcmdpbiAvIDQpICgkbGVhZGluZy1tYXJnaW4gLyA0KTtcblxuICAgICAgICAmLmhhcy1pdGVtcyB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogNnB4O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJGNvcmUtZm9udC1zaXplO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6ICRjb3JlLWxpbmUtaGVpZ2h0O1xuICAgICAgICB9XG5cblxuICAgICAgICAuaXRlbSB7XG4gICAgICAgICAgICBjb2xvcjogIzc3NztcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlZWU7XG5cbiAgICAgICAgICAgIHBhZGRpbmc6IDJweCAxMHB4O1xuICAgICAgICAgICAgJltkYXRhLXZhbHVlPSdSb3V0YWJsZSddIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjQ0U0MzFEO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmW2RhdGEtdmFsdWU9J05vblJvdXRhYmxlJ10ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0U0MzFEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJltkYXRhLXZhbHVlPSdWaXNpYmxlJ10ge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDgyQkE7XG4gICAgICAgICAgICAgICAgY29sb3I6ICR3aGl0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICZbZGF0YS12YWx1ZT0nTm9uVmlzaWJsZSddIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwODJCQTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICZbZGF0YS12YWx1ZT0nTW9kdWxhciddIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjOTA1NUFGO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmW2RhdGEtdmFsdWU9J05vbk1vZHVsYXInXSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM5MDU1QUY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmW2RhdGEtdmFsdWU9J1B1Ymxpc2hlZCddIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA5M0I4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkd2hpdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmW2RhdGEtdmFsdWU9J05vblB1Ymxpc2hlZCddIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwOTNCODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxufVxuXG4uYWRtaW4tZm9ybS13cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbiNhZG1pbi10b3BiYXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogNXB4O1xuICAgIGhlaWdodDogNTBweDtcblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAgLjVyZW07XG4gICAgICAgIG1hcmdpbjogLTJyZW0gMCAycmVtIDA7XG4gICAgfVxuXG4gICAgI2FkbWluLW1vZGUtdG9nZ2xlLCAjYWRtaW4tbGFuZy10b2dnbGUge1xuICAgICAgICBAZXh0ZW5kICV2ZXJ0aWNhbC1hbGlnbjtcbiAgICAgICAgaGVpZ2h0OiAzOHB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQ7XG5cbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2FkbWluLWxhbmctdG9nZ2xlIHtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuXG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjNyZW0gMC41cmVtO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnN3aXRjaC1ncmF2IHtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMzhweDtcblxuICAgIH1cblxuICAgIC5zd2l0Y2gtdG9nZ2xlIHtcbiAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBmb3IgJGkgZnJvbSAwIHRvIDEwIHtcbiAgICAuZGVwdGgtI3skaX0gLnJvdyB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogM3JlbSAqICgkaSArIDEpO1xuICAgIH1cblxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgLmRlcHRoLSN7JGl9IC5yb3cge1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtICogKCRpICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5zZWxlY3RpemUtcm91dGUtb3B0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgPiA6Zmlyc3QtY2hpbGQge1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICB9XG5cbiAgICA+IDpsYXN0LWNoaWxkIHtcbiAgICAgICAgZmxleDogMSAxIGF1dG87XG5cbiAgICAgICAgPiAqIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi5oaWRkZW4ge1xuICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xufVxuXG4uc3dpdGNoLXRvZ2dsZSBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xufVxuXG5bZGF0YS1hY2xfcGlja2VyXSB7XG4gICAgLnBlcm1pc3Npb25zLWl0ZW0ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgIC5zZWxlY3RpemUtY29udHJvbCwgYSwgaW5wdXQsIGJ1dHRvbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICAgIG1hcmdpbjogMCAuNXJlbTtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlbGVjdGl6ZS1jb250cm9sIHtcbiAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWxlY3RpemUtY29udHJvbCB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zd2l0Y2gtdG9nZ2xlIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIlYnV0dG9uIHtcblx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIG91dGxpbmU6IG5vbmU7XG5cbiAgICAmOmFjdGl2ZSB7XG4gICAgICAgIG1hcmdpbjogMXB4IDAgLTFweCAwO1xuICAgIH1cblxuICAgIGkge1xuICAgICAgICAvL21hcmdpbi1yaWdodDogNXB4O1xuICAgIH1cblxuICAgICYuYnV0dG9uLXNtYWxsIHtcbiAgICAgICAgcGFkZGluZzogNHB4IDhweDtcbiAgICAgICAgZm9udC1zaXplOiA5NSU7XG4gICAgfVxuXG4gICAgJi5idXR0b24teC1zbWFsbCB7XG4gICAgICAgIHBhZGRpbmc6IDJweCA1cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogOTAlO1xuICAgIH1cblxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBvcGFjaXR5OiAuNjtcbiAgICAgICAgY3Vyc29yOiBuby1kcm9wO1xuICAgIH1cblxufVxuXG5AbWl4aW4gYnV0dG9uLWNvbG9yKCRjb2xvciwgJHRleHQ6JHdoaXRlLCAkbGlnaHRlcjpudWxsKSB7XG4gICAgY29sb3I6IHJnYmEocmVkKCR0ZXh0KSwgZ3JlZW4oJHRleHQpLCBibHVlKCR0ZXh0KSwgb3BhY2l0eSgkdGV4dCkgLSAwLjE1KTtcblxuXHRib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3I7XG5cbiAgICBAaWYgKCRsaWdodGVyID09IG51bGwpIHtcbiAgICAgICAgJGxpZ2h0ZXI6IGxpZ2h0bmVzcygkY29sb3IpID4gNTA7XG4gICAgfVxuXG4gICAgQGlmICgkbGlnaHRlcikge1xuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHNoYWRlKCRjb2xvciwxNSUpO1xuICAgICAgICAgICAgY29sb3I6ICR0ZXh0O1xuICAgICAgICB9XG4gICAgICAgICYuZHJvcGRvd24tdG9nZ2xlIHtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgbGlnaHRlbigkY29sb3IsIDUlKTtcbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICAmOmZvY3VzLFxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRpbnQoJGNvbG9yLDE1JSk7XG4gICAgICAgICAgICBjb2xvcjogJHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgJi5kcm9wZG93bi10b2dnbGUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBtaXhpbiBidXR0b24tY29sb3ItYm9yZGVyKCRjb2xvciwgJHRleHQ6JHdoaXRlLCAkbGlnaHRlcjpudWxsKSB7XG4gICAgY29sb3I6ICR0ZXh0O1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICRjb2xvcjtcblxuICAgIEBpZiAoJGxpZ2h0ZXIgPT0gbnVsbCkge1xuICAgICAgICAkbGlnaHRlcjogbGlnaHRuZXNzKCRjb2xvcikgPiA1MDtcbiAgICB9XG5cbiAgICBAaWYgKCRsaWdodGVyKSB7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBzaGFkZSgkY29sb3IsMTUlKTtcbiAgICAgICAgICAgIGNvbG9yOiAkdGV4dDtcbiAgICAgICAgfVxuICAgICAgICAmLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGxpZ2h0ZW4oJGNvbG9yLCA1JSk7XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6IHRpbnQoJGNvbG9yLDE1JSk7XG4gICAgICAgICAgICBjb2xvcjogJHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgJi5kcm9wZG93bi10b2dnbGUge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBkYXJrZW4oJGNvbG9yLCA1JSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIuZy1jb2xvcnBpY2tlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRjb3JlLWJvcmRlci1yYWRpdXM7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICBpbnB1dCB7XG4gICAgICAgIC8vd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgZmxleC1iYXNpczogNzUlO1xuICAgIH1cblxuICAgIGkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMTVweDtcbiAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxuXG4gICAgLmctY29sb3JwaWNrZXItcHJldmlldy13cmFwIHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgd2lkdGg6IDQxcHg7XG5cbiAgICB9XG5cbiAgICAuZy1jb2xvcnBpY2tlci1wcmV2aWV3IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDBweDtcbiAgICAgICAgcmlnaHQ6IDBweDtcbiAgICAgICAgYm90dG9tOiAwcHg7XG4gICAgICAgIGxlZnQ6IDBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIH1cbn1cblxuLmNwLXNwcml0ZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBMllBQUFDV0NBWUFBQUMxcjV0NkFBRXVXa2xFUVZSNDJ1ejlhOHh0MjVZVmhyVSsxbmVyN3FzZUxpRWpoRVJ3ZmtERmVXQUVsNmRDUWNBVUNCREN3VVNKd2cralJQSXpnR1ZaTWNaMkRDS3lJeWN4aVNPaTJKYk1yOGhCZ0ZOVkdLTkFIZ0tDVEJuYlVZQ1lFc0hZSW9pS0t1WVc5enp1Mlh2UDBmTmpqVWZyYmZReDUvcjIzdWZXUG5YMlB2ck9XbXZPdWVZYzg3SG1IRzIwMWx1enYvR3p2c3R2Vm1HNC8zTjM5SDhHQXd6QW5BU0h3OHpnRHBqUmRBY09GUHowdi9KMW12cm0vMzc0aDMrNDhPZXZmZTFyT2gvUG5GL3hkdis1VHZnTGYrRXZMQXY5dkovMzgvQVRzZHpQL2JrL2w5dFo2Yy9sL1hFeXI4LzNCOVpUM1gwN3IvMWhNLzA0K1U2MlhXMVgya2EvWDlSbjYzbDBlMzNmSG1uTGJ0dmhPTk94cWlmZnc5bSs5SFc0KzloK1g4N2RSNXZidjRNKzExcHJIVy9tUDMvMTZsVTlqcU8rZlBuU1AvbmtrL3J4eHgvWER6NzRvUDdZai8yWS84aVAvRWo5Ri83bC84bExmQVhBVndCOG1WNzVMNXYyNkx3dkFoOFg0RU1BSHdINDBPOS8vUDVEbTU4L3duM1pEL3BudTcvL0FNQTNBUHc0Z0I5dHk4R1NYKytZOWlYQWZ5cUE3d2JzT3dIL2p0WWcvdnZxdWlQK1pjQytTdE8rZEorR3J3REhGKzROK3RDQmorMytOeHJkZHVKanpKM3QweitrNlIrMDF3OEIvQjBBWHdmd1gyUjNINkFBK0o3MjkxVUFYNFhqcTdEbGRIMEZqcS9BOEdWNDI1djcrL3MwMFBSeFNuRERKOVRRajBlakRCL0QyM1JyTytGdCtuMytSK0YxN3RRMzJzNThIVUNGSHpXZW43ZDlwN1p2MGNyZTZyWitRbmJ3SjZBWjlNVm5yR011MnQrdFg3YnZLT25QTm56KzBzbDk2ZXIrOWtXRVg4Wkg5UDdEaS9mOWw2RDNxLzl2ZTMvKzd6c0IvRlFBMzlYZWYwZjcxZXY5U20vVThVNFFwcjI2eFIzSWR1aWp6ZnYrK1FPNlozMmozYXYrTmozTjZOKzNBZmk3Mng1OEI3WDRxOUpDUGtWZmtjT2ZmZjQyQU1DTFRjTzF3V2RuN0lQa2Z2VzM3NDMvbzIveEIvY0U0TW1BTDJEK1BYbDd0ZnY3OE5ybVA5RjNueHk0R1E1enZBTHdDb1lEd0NzQUI3eTlXcHZuT01MODdMVXY0KzE3NC9OVCsveExEdGhYMjdMZmZ3RC9KVjBuLytuNjV6YncxdzdZbjJ5ZnYzSEEvbHpiNXF0WDY3YkhmdkI2MTNWYTJPL2RzWEE4d2ZBRXh4T0FHOUErendQN0JUaHVzUFlLZkFFV1R4SWNYMmpmZlV1WHdrL0hKNERYL1MzUExaOW1oTWg2ejhZTlp2Wldud3gvL3MvLytiZjlwSGtIbmx6ZnVuKzFWclJyOFZGQXNwdm4xT2wvay9VOEd3d2xnSVRiQTI2YnROTjM4NTZ6ekJ1c2l3WXVuSHNPQnNEYXRQUXp2Uzl0LzhQQVNmYnE3bjFaYjUvSFgxL21PSTdTcG8xbEdoRERjUng0OWVvVlhyMTY1UzlmdnNTTEZ5L3c0c1VMLy9qamovSEJCeC9neDMvOHgvRzMvdGJmOGgvNWtSOTVyTGVVL0hrRzdlbE1PNTFacjNyaGJRNnV6UmVqQVNOci83UFdIaXRKRzR2Mjdxd3QyRTZMdFZjdmJYcHBHN2YxejZneFR0KzFOcy9hZThmY3NPa2RTWGJHYlYzT3p1OWkvYUtaTGJPd2VBbTdiYU16YTJOSkg5KzZ6M1ZhSis5elJMVmxMRDIvYzM1aHJPTmJEb2ZYZHVqYU9lRnU5aVA5OWRObGZGM1EyNzQvSDJQNGcwTjJ2ajU2cm5ia2RjQ050MnZtYlFLcjF3SlovYm85Ky9KdW5vZkIza2ZQdFMvZnIzUXR6cC91dUpEMUQ4dVBKdjZROUFkbWovVW9YTDZTL1l6NzM0MmFjM3U0bTljN2o3ZGtCM2puZGp2ekdzUFBkdkVIMm9raTcydStCOW1pdTlYdURyOC82NkorWkdjZ0Y4a05zTnM4TzNaOG5ycVNYNzZQVnVMNzdqamFmbU1qYjM0UllGKzZ2eS9obVZQR3J6QmVrYlc5M2gvNVRzdjU3MnhuNUVNQWY3NmRnejhLNE1jQS9GL2FrT1JIbjRlRC9YUWZWNVZmUysvWktDMFdlNXF6d3pHdWV3UHdOOThxOFBuYTE3NW1iOGlRZmE2QkdUT2d6MXlXQVVKcEF4SHQ4ckMzdHMwejRJSjlsOVRvZS9VQ2hOdFZtMmplc20xMzM3YWx6U3NFVnZWNTRTZmdxelNHcTdlaGd5cGREalROR3RnTzY2Ty9veS9YQUplNXU3WFhEc3hxbTRmak9GQnJ0ZmJlWHIxNlphOWV2U292WDc3MEZ5OWUrQ2VmZkdMZi9PWTM4ZUdISDlvM3Z2RU4rL3JYdjI0LytxTS9paC83c1I4enozNUpIVkJoZ2lHK1hWd0NOWThBcmQ3SGVsQjkzNTFIdXcxMTBCWm0yV3dQZG4xV3ozcDVHYjUybVo1ZGFyeFRtMXVOS3lwb25WamZkZmFwaytzMjErMnZkeHV6RG43YUowc09ndE9ySjAzdmM5YlQ3NjByekhOMTdDVHJMSW4wd3VmanhOdStlanN2eG52UmdMQzV3M1VQemU2NHRuZlByYStId0c3N3lmSzZuYnY1eG1PVE5wRkNtTjFiNUFQT1Rxakh4N2tkZGVOejUrT2FYTGJMNjNJMGxZclBkVkdiNWpjdFhIdG0vVmplOTd0NDJIUnNlZGo4ZlZ2RzVKVmJVOHZNVFl6OU54NmM5ZkJyc0FDNis4Q0hqOS90dlA5bVI2NWRUZVowUHpFQjB1MVkrQnhjNk9jNHJMOGtJeFk3c0dYSnoxZS80M3Q4N2drZ1E3SnE3YkRxd01yVFE3L21wdzJvS0VtRGZmY1l6ZTlWZG9KZnJuWW8yNW15aDVaRnhzaktDVlE2RzUveWl6dmZlV094T1N0bER0WlphZURzSjMwMzhvc0FmamFBN3dmd1h3SHMxd0wyUllOOWw0VkJ1enNjbTA5R0M1S2hPSTlCbVkvMzkxY2Y1OTNoWHlud1g5R0EyNjlvZzN4ZnR6c3AvZThDK01zQS9rOEEvbCtORXYzSkNNeStDN0I2L3NNY2QySmJBVmxZOXUwRHMwL2hGL0I1Wk13ZUFVVjZwL0xuQUs4TjhIa0VaSUhBVHhoVDYrdnNRRkFBRk9pN2ZUbVRaWHdETkhjQURGZkFUSmZqN1hGYjVIdmhjd05PYm1hRjJLeEtvQ29GWmcyUUlRTnBEWURkN3BQcVlNUnFyZjN2cm1NOERqK093MnV0M2hpeTJsN3RPQTU3K2ZJbDJsLzU1Sk5QOFBISEgvc0hIM3lBdi9OMy9nNSsvTWQvSEYvLyt0ZjlndzgrQ0VNNWpnbXNMTU13OU5rU01MYUFNd0ptRmUyVmNFbHQvVEN2RTdnaFlkWDRTbmJJSUw3dnJoSlBBRlJOZ0pvZ1NkUjdROFlPdG1ubVFPV2RjZm9xSWNvT3pzSjdCbVhjK2IxbVJqSlF0VkxNVlI2YTFzN3JCQlFWM3FaN1crWm9VL3FqdFQrT0szM0xDYng1NkpqUExuY0Vnc2JBRmtZc3I3VUxBa3NYdjE5dmxhZDFZQzFnYlpEWm5vd1llTmp5aXBFZHM5UHZLNEJGd010ekczUm5BTjhleHpiR2FUVWFXNTRqQ1IwYzNYY253dUo1TWNlMjNNSHMvY2ZoUE5EUUxydUplSDJBbmdENHgyL0htNUNtTDl2Mms3b0s3dGJPdTlHUE9JUDMwcGZ3RGpoOWdmVjkyR0FDUUtkRHdtZWJBS2o3T01iZWtMU2h0dnRDTzA3S2tGbnkyUkpFZ0FRMUlRY25kZ0Y3cnY2ME9TY2swNGFXS2dueXRNMTBDUGp3UGNsa1owT2VKMFJkRVRyd3RvZVdKVm5NTm50akQrREI2NTI1NGpJWmlMSDZvUkJyOXVvblczZnhTd0QrbXdCK1BZQmZEZGpQTGlpb0EzeVozTlhYMXlxTUdUOGh1WU5uQk5CVzlpeStsdnVUNXJzTmpnTC9oK3JjNG44QzRFOEErQ0VBZnhaM2JmMVBFbUJtMzhuRFozbDN2SmpjaEh5enJIMFdnTlI3WUxZQ3N2UEJwbXNRdHJ0WCtnTU1tbTlBMmhsUThrMjcrRG0ya3d5ZU1tRWJJSFlHekZ5Mjd5NDlEbUxUT25NMTFzbkFpclkvQU5ZZGF6cWZTKy92YTYzZUFSc0R0VnByNlY5cXJCZzZHT3QvcjE2OTZzQU14M0Y0QjJRdlhyeW9MMTY4d011WEw4dkxseS94MFVjZitRY2ZmSUJ2Zk9NYitNWTN2b0VQUHZqQVAvcm9JMExQaUtVaFo0akFHNGhTZkZNbkdHTnBZL1VKeWpyQlVRblA5UGtPNm05YjdQKzVFbUdnSjBOS1VGbm9qSWQ3bmpQd1l0QW04M2xuN0FEcXJUVzJzMlFkcE5VVmhEbnA5MXhxYm5CMjcxMS9VRmNBYmYzejhZRDBBTVlxRlRzNmpYZG1wYWdkM2pIbjRRS3BuRHJXSHJ2WmRjNjdFMVNlN0txRk5jbE5JRGtlejFBTm5NN3ppeTladW4wOUFiNWRJQnZ3dW02cEw4djcrUTY1enM5WTJtUUZ2cksrZnQ3SVRUdjhlcDkyN2RxZEZkK2RLVDhIRDBxT25ORTAyeWZjdm5VWmFEaFRUS3FVOFJ5WU1aUjVSTDZvU05PeGxmajVCUmpEQnNobWdJeDNLdmwzUzFiMWlLcjBTbUg2V0JjRitaWk5RSmtwV0h0NzlVUS93ZisrRGNBdkJQRGZBZXpYR2V4bjN2ZTBEUGpUUWRtVUp6Skwxc0dZRWRpeUZKQTVzYUdSUVdQMkxBTm5FNkQ1K093b3dQZFcxTzhGOE5zTi90Y0EvMk1BL2c4QS9uMEFMei9qd095cjhaZG9PeDF1NkdvREttSDQ3QUNwdDdxK2Q4bm9JMXZ1d3c4LzNCNkhNNUR6cHV4YUlvdmMzUjNMbFJ4UndOQ1dNUk8yTFpNOTJoVm9Pd05tbS9jZEJCbUFneGl3c0g3K0xCTElnT0RhNTBxQUM4U0lqU2NKQWJQQmlqVVREelF2anc3U3JOWmFHSlFkeHhHQUdkZVV2WHo1RXA5ODhvbC84NXZmckM5ZXZMQVhMMTdZaHg5K2lQNzM4Y2NmKzRzWEw2YjZ6cU5zeVhGSjA2d3lSdFU2dFBveUwrMFZBdENZRmV2TFlZSzFwYU5xY2V3cGtEUFpWUm9rYTc3cHlQS09OR1lNalIxajFzeWxXSzRTdGJlc3lwTmlPcGJlOWZ2dTQ3OWFYYXdpU2hsOS9GZUk1MEpqeWpMd1ZzTmFMSVYzU041MzFpa3lYd3R6bGdJcjJ5QURFaC9hWklPc3MyQmxsZFkxamlWSTVEeTVEdUwwdXl6UUNmWFB6VGs4NkFNbjZ6WFdZU3Q1YndJaFdQalk5OFBoS0UzQ09PWjdHeWp0cGQ0eWdHQmMzaFZGanVubDdqeWVPclpUU1VjcWtrVWR3N1YremdweFhqbEpZUjdQQVlnOURXMDJENFR3ZlQ4alJGOTRENHZuSzRDT016YnNUZXJKTm1WeVYrVm45dURmaWZxUEFNWFRCWlE1MnhIYnQveHN2MHNDWklGem5hYmx3T3dtK00xT1lLVENxT2QxNk5hYTJQMlpTK3FDVFd1UFAvUEE3TzhCOE5zQi9CckFmcmFoTkNCVWlCM2p2MW1QWE5veHF1MzlUc3JvV0tXTUpGY01JRTJrakFHVTlma2R3Rm1EZzZVQnlQdjArbDh1d0Q5UlVmK0p4cVQ5dXdCK1A0RC8vTE1KelBBVnFTUHplTGZUSVQ3TExuUlFqUm5ldGl0aldOOWJjR1g4M05lWVBRckltQXpDWG1GL3hvZ3RyTklEYlZUUTVBbFFjM2xNVkdIL2tHeVR2emVBVXF2ZEdDRFZ6QUxMbUVrSzViMkNxL0E5QmxabVpnMDRtWmtOUnF0Sk5jYzhSTW5qYUIvVmlubHI0NWplNStuNzR6aXN5eFliYzFacXJVTysyUDd3OHVWTDYwRHN4WXNYK1BqamorMmpqejZ5Rnk5ZStEZS8rVTNyZncyOFdhVitUeVdBQnNJa2RsSkRCc0l0T20xSUdRbWJCRnhqTXYySThrVldCektadFFVMEpxQXJXOWFVRHBTZGNtcTR5aG01U0s1bU8rT0psSkdsaTFWMkpsenB5eTFYdXFVTFp6VWZuajY0cjd0RXNUOVlQY1hMdFFHekxtT2NuRm84Rml4ek5HTFk0cHEzSXpvSnNEeG5XTUpkd24wZXFqcVBvWXZNamhSKzYvUE1WMDRxdXhYNWpxRWlCT0pCLytjcm96TWVzUXBxR2t2dUt6Tm9YZHJvc1RiTldLNjRZZFZDSzhLRjRxTWQ4enFqV2o3M25Ld2RrK3ZtZk00Zm9pZFN4MUc2Ti9hbEJuRHBZNy84bkR0ejVWWTlOckFrak00WlVDczROOXp4Y3lMUEhoeVZ6TWltR3g0MUFQbENRbEdkY1U3MmpKMjYyQUU4dUROOHJHL3JmWlhMejNhK0xIWUMwa3l1YTdzY2kzOUFGRm1zYlppWk0ycGh1ZVU3ODluNDkvMEFmaXRndjZHZ2ZPY2Q3cUJCSVNNRHB4eVlPYkZsK3VvQzBLcXdZN0hHTEswdFd5U01mWkRRaERrcll5REl4K2Y3cTZFQTMxdFF2L2VBL3piQWZ4REFId1R3cHo1ampObFhoQ2xyZDBKUVBSbGZmTGI3Q2ZqbmtqRjcxLytwbFBGUll3NEJPc0g4NDBGVzdBeVFHZloxWFg1aVFtSllEVDE0QjVsOVM3ZkJKaU1OSUFWMnE5V3BxVWxIUFFGbXZNN09uZzNtaTRFWnl4Vzc3TEdmbzJacnY4Z2MyNG9LMVl2eGQ1eFlzZDZPV3dOaDNwbTA0emlHbFBIVnExZkhjUnpXcHBYRWhiRXpadmprazAvdzRZY2ZlclBNeHplLytVMjhlUEhpRHZJeVh3dGh5SHJKRlR5WlgzT1diUFNsYXBReTlscXlHdnQ2aVRVbXFRR2xQK3c3bS95QVlvUXVHZXhaQXNJeUNuQXNXeWM0cXpWVC9MV2Rxck5ncnNzY08wMm82RExyRlc4NkIrZldHNTZhcVhSR2pCV2xuTzFReHppcEQ3RmpadDVxdEtPZXloaUhyY1BTOXVKK1JrWmdzVlJITkFuTytwY3VSaVg1MDB2Wk8wdEhveUxUWmNzYWpLd0VQVDBEbHZ4b2JKWU4ydm5lZDdCbURBSjF0N1BOSkpkNklPaFMxYURuWXdIUEh4N2NuOFdrZHZBUk5XWnMrSVQ4dHZ0R1ZvNTFwcDg3UTFUQXRyakpralA5Q0RUS0pJMmROVHNkVjErMGdtZlZiUm1VT1dIUXJ1ckx6Z0N0SHRmYkhwamRUcjVxKzBPOVpjNHN2VkFjbDFWLzFrQVp2dzZtckVTQVpwODVZUGFyQWZ1bkRQYjMzeVdKcGQzTkkwUEdzc1Z1N0pIWG1PVjFacXVzTVpjMDdwd1p5Nmc1VzZXTU5jZ1lmWHl1QVVMT1BTanc3eTZvdi9XQS8xYkEvejBBLzNNQWYvSXpBc3krZWc1aGd0RUgyV1dGOSsrQjJXY0FtUG1HY1VxUFVRTU94NFBBVFFaN1BYc3NWdVR5U2NlNU1ZZXJhNkxJRnpPUVppcGxURUJWWUxTNmNVaG50anJqVkVyQmNSeFdTa0d0MVhvY2hEZ2xkcG5oSVd4WnFDbHo5MUg3bFFDeHdaaTUrNDNCWUpNbTltMjR1eGVXTHJMQlI4c2g2K3NxRE14SXd1aXZYcjNxV1dWMkhJZDFVTWJBckFPeGp6NzZxSDd5eVNlbDFhSDV5NWN2NzZBTE9ZbkRTajNiSVFCbXNoU3dIUk5nZFNLcE5zbGlOekhvYkZsa0hiQTZkVmNaYjFwK0lCbVZJQTMxamRWa2VPZzN0aXdBdVA1NlRJQlZNOE1QcDdiVWlDQzEvb3gvZHVaU1hPZlNEVmtMM1oxZzJYeWNSUWxqdE94QVVpVldseG94UHFDK0hOeTVNMFpDU203ajhFVDBYU1ZYTk95NGc3RnVJbUhEeXkrNEo3YUxZVENwdE1YcTNWVElBOER6ekdMUCtqWjdXYnNQZnNnYU9CaWtVNU0yR3Vacmw5TXhoTEJGeENrQXlXdmIzdXpBaEZQZVpKT3N1aldxTUhBRldFWmJkdW1xR3FoVnplV3lOY1RObWpjWWMzcVdZbVRteFl6UnN0RVAyZVE2OUphTE90cS9nWUJ5ZzdIbXZCa0I1SjJYTmNUMURGL2hnbk1EdzNLQ1k0Q0hMUUR0QkNSY0dZSW9oandIWmplQk5WY3djQWZXdGlNYWo2Q2V4MEZhZC9aL0VmY2dBMmRheG1jWE9QbjUzVDR4L3hoMFhRZG1CTVI2UDNqRXAzUzcvUE1Ld0hjSGtPR2ZNZGd2dDhZblJTQldnQUMrQ2dHdEVoaXlDTlFRWGxmREQ5dldtSjJCTW4yZElDMlRNaktMVmdOb0srMCtiWU5KcTcvR1VIOE40SDhTd0wvMHJqTm9UeWhmaVVYbXFzTlYwYmpSeEhDWGlZcjE5OERzM2ZpWHlld2VBRnU1TS9uS1pKMlplekRRcWlmckduYzNYUS9WYnUzWU5DZldpd0ZYYjllSTFlc21HMDJxMkdXTDFobW9CTkNoeVFTSHUrSEd3cjRBY0Y2UEFqTjY3eVIxTEEyY2hmcXp4bndORUt1U3hRYTJ1dk5pc01UbnVyTE9talVwWTdmRTcrNkx2YmJNWHI1OGFRMnNCU2tqdis4U3hsZXZYcFZYcjE3VldxdTVqbXlMSjhaaWdwZEpGcDF3VERLOWxnYkkrdGRKRlVpR2NkSGNFQk84WVdPanYxQktpNlJMVUtReDJyejQ4M3AzdVdVbmsyNzhFWFNZbUFqVEZiQ0pFVWdDVEtLVU1lZDJxZ0ExcDJ5bldWdkduN3NJMFpISHpmV0hZOFUwK2RpYmdPVEhpQzM3bDY1K3ZGK2Q5YzFyUURGWTZ0a0k0SFFBRTF3WGZRUENCQUZWSTlOaW4wY3RkUHA1WFI2aDFvREFubmdXYm5MYVZBNVpFeVp2c20yclg0d3RveFBSamRLVkl3eG1IcjVLUXhmSEVxYkZKd0NybUdiMm9RU0N0KzNNbHNaajV6d1FZU3VUT0w5cjBYUWtYa0JUZXNrRE5XZFpaVmtzMzVYRkl2YUVpVjEwT3E2Y0dkazM0K21VRTM5S1lFMm0yVHl6eGJqd05YeEVmM24xV2RuS2hQTXpyQlltV2VuZkkrU2xQK3ZvTnpCV210RkhsekNtVWtaaXpzYnJPL3Z2K3dIN0p3MzJxMHVETFJPUUZiSzVMd3ZQMU0wL2RreFpFVk9RZ3N5aEVTSmx0QURFMURxZmE4MG1PSnRNMld6NWxESkdwc3hFZkdrRTBpcHNRTkw2cXd6MVZ3SDQ0NEQvTDk1VkJ1MEorQktOQ0d5a0VMc2NTRXRIbU45MmpsbTQrdDlDanRsYjVaN2ZKYU9QYkxtZitUTi9wakpMWnpiNFo0Nkg2U1BwcEQ3c3lqa3hxOUV5WWNVQ2FPc3lRMHpaWVhIM3cvdW9xN2d5RXJDRHZBK0RjU3d6RkViT3hNU2pneWxtNzdpdWJMZ3lFcmdLSUs0RE9BWmxDczZvam95QldWRWIvT000bk5pMHdpQ3lTUmR4SEVjbDZhSjFSOGIyQjJMQjZuRWNwWWRLZHlPUXpwQjkvUEhIOWVYTGwzajE2dFdkaGR1d1laNVlBQnIzdFRZaDArNkl1cm51TXU5a21WOGpDR01IZWxlMnpwSjJHWEpOVjVWNVVJdDZzcjczQkVYMkhlanpPekRycjBQS1NINy9BY05ZUkp3QnkxZzBBRmtzTUZmZ05tT2UxNFF5SjBBUnhZWnM2MkhEL0VQL1ZzL0dyTWFNb1FSYjY0TXNINUMrTTIvanIwNzhsczJUVmpzYlpUWmM5STFnUmplS0dFQmcrczAzOERMakJtS0cyTXFVV2x2V01aV21EQ0R2MjJNajkyN1Z6a3hTcTkxcXBpUTFqR0ZPQnF1Mkh3cnZlOGc1czNsTmtrbTltSEtRbmIrUmxTbXhZaWIxaWI1b0NpMDY4VGUyelFiZ2taalR4dkM2Y2JzOHdIQmpodE9CYXA2dzJCWmpVKy8yUjNjMjFKcGI1OGlpcTBBQWJOYmFOWS9uL2JEWDFuWXNzVlJibS93emFTTXVHRFdWZ0NBMVlOOXVjbGVXbFV0WGR0VlpaNkxKZ3R5bE1ldjBuWXo3Wk1qb0VYbW9BRFBEdVl3eCsrcFZBdHU1NURiNVZxOG5Ld0J1dllaTVpJeHFsOStsalA1T0dvRDhQUUQrT1VQNWg2YXpZa21raTRXY0Z1ZG5GUVV5bTFZRENNdGtqY3lpbldXWXhmb3lkV1pVVUthdWpCWnF5N1RHckk3UG5WbGowRmFHU05OL0xWQi9MWUIvSGNEdkEvQ2Z2VnZBekw0Y0xZMk1tYktUZ0dtZUh3dmozek5tNzlDL1o5U1kyUVZvS3lmTTE4NGVQM00vVkR0N0JVb0xPTUpxQktMNVlVQWNYRFlOWlJhZ1podlh4UENlQVZPYlhzWFdmcXl6eVErSGxGR0FWbW12TlpNNTBud25hU1JiNmFOTEZMUGc2QTdBaURIckxveGdTL3dHMXNvR21PSGx5NWYxMWF0WDVjV0xGK3pTNkkxZFE1ZEIxbHBuK1ZQaXVPWUV5QUo3dGd1VnJqbHo1dVFzUDl3WnlYbHhJWjhRNVl6QlEwT3hEVC9CMlQ2L0doYXJTUWpxV3l6ekpRL0FmQVZtWENUSGhYTFY4NEs1NFB1UHlVQTRXZTRiZGJ5Umt0a0x5N0tLRUkxVStwSFI4UVdjTlhPR1VJbVdHWDlBT0RnZ3F6bkxiRXBLalV5YWp4TlhoVzN5NFVwWU9YQzZDaE8yczRabjR3d2pSb3R6d3RYdDBHTUpJcnMwcG13WW53K3ZpN3pRNmJ1VGxQVXd4dG1CSDJwaW5OR0JZYVZsbmJkUDEzS04yOHpNVGdKb0ZtdFRGNGJPd0w4dk5nNVpUVGdpcThpQjRFYUIwblg4SnJ3NVBUcjltSjN6ekZ5UHM1TTgxUmNEbFBDRXVwM1FNUVhuUWNrUCtyUGJBNis2eVozTGZCY3Jyc0RzaHV1aXVVZllzczJZOVhOSzFYWU9sMWtHQUZHQUJYZjdraXlKRGMvWUMxeWVscVNCbll5NGRYQW1kV1dGYmZQSkx0L2Fqcng3d096YkFQeGpjUHNYNGVVN2lwVUZoT1VBYmZKTHVSdWpFVE5tUTRSZEJ1U0JoRTFITjhZcWw4U2pVa2FXTU01cEh1ck1hdHBhQm1GMVFNL1NGQjRkaUhhUTVzRC9zTUorQzRCL0RzQWZ3RHNTVHZjRSs5TFUwWWE3dEszVHdrZ3Qxbnl6ZXlmaGJmTzdieHRJdmRQODg2Y0Z6TlJ0OEVGUWxwcHNNQ2hxVEZVQVpNUnNlUklTM1grSG5rZ1hGZUE1cll2cnYxeFpQcTRONjU5bC94UklQUmVZUVEwOFpGa2s3NWtCVXpER241azljOXp0OEoyenlwSzZNaGNnQmdKakIwOG5ZRmE3QzJPYlhob0wxb0ZZQjJnY05EMEEzQ2VmZk9LTnBRc1N4WkFUUnJlUHVzRXVVRU1RV2Faam1sb20yWkVLNC9MK1pWNXJsb2x6eno0UE5rMnJyWkRvTXpFcFBqWUJxWVJFZmJjRFNOZ3ZKQ3daeU9XaUppRE1hSXB2aFFHMkdIOWtEbzB4b1czdWJXM0xIR0lBa2x2bFMvWFV5YzNjbG9Falg0QWJ3Z0JpQUVjMnFWU1RHSWVCaXh3YnloU0QwVnJPQ1gzWkxWN3Z3eVkrdGFjMzR1RUdsN1plWm0yYkJrYzFDNWFLUm14YnRKUFBjV1lvSEFQWGU4WHdaNU1BN0RCVzBhbSt1akt3Y2E5bXlMVlJlUU1sZllTUkd2NWU4Si9zVHBBMEtPeHRCSWFIOWt6ZEl1bHFHbGRZWjlNb3lnRHRtQnA4QldSYWxsVWV4QytXakNuSUxEL0JkSTlFcExHN2ZKZjZJUVZtVHcrQ01ydEFWaWZkcktzU3RUTmRZY1pLQ2pDN2JkaXc4c0N4ZThUU1pIdUQ3MHpaalJnekJtR0Zhc3FNUUZwLzllN08rRTc4KzM3QS9oVjQrYStobHRIbVlvWGtpVVdraXdYUmZiRWtwaCtsQWFRaTdGaVVNdVpoMHd6QWJNa3RlNDZVa1VGWVhrOFdhOHRLcUtDcktBUTlwNnpSeHpFb3NPK3FzUDlWQmY0SER2eVRlQWZxeis2dWpDWUNhME5PRGk5OUFLMUhlOCtZdld2LzJMNzlwQmJzVEw2NG16YUFWMkxPc1FWZFpHb0JSbmU5N2t0QVpMblBxc3V5VkZlR1Zram10ZFpoblMrZ3pnVmdNWkMwelBwZXpUMW9ud0pJby9VNzFaUXBFSFBOTVpOQTZMR05ubFhXalVEbzFZVXQ2K0N0MitHelJYN3BlV1c5eG94Y0dBZlFhdURNR2ppenhwYlZseTlmK25FY3cwcS9HNFJ3WFZzOXd6UmR6ZWZSY01OWDcvVm9jcWhsV1VkVE55YU9qRnlHeGFWYW9mc210V2VMb2F5eVpvSDZZeVlJeUtHaEZzYjFuQUEyQWhFcDQ5aDN0cHVVK1l0dHZnbHJCbXg4OWtKTEk2Q3lSYjZJc0FkcUFzSmVMTk1jLzM1R0pvemIxNWxWY2NqVExYdUtsbWNXTzZTV2ppNGc3MHhTVWovbGlUZmY4aVlMZ2Q0NUI3clFyY3ppWkZRc3RXVzNMYnFYMGloVTNDNDdEajVpaWJqMWJaQUlBSXVGYlFFNDF5ak5oT3lOWS9WdGNyYlY1NEVCeDh4ZlU5T2NrQk9vTzcxS2RkMTg2WTZFSXp6TW8zMWt5M0hZZDJETWR2cEJuQUNLTTRDU0hQTkhRVm01SUprUzlaK01Mei9LbE5rRE8rUG40Q3pyT1QyS0E3bXBUM005R2Q5M0JTZkxDVGJjL3h3OE1tVmp3OFNZV1VscXk5andRK3ZMRExDbmQ2R0w5NzhHN0I5QnZkMUdMWndYd0swQnMwS1FKcE15Rm5GZUxLbEQ0N3NpWmF6VXNoTHl6R3BvZGY4OFRVQk11TUhhTG9QSnF4bnN2M0VBLzU0RC94cUEzL2tUQzh6S0Y5dkpmQURLY0NLY0xtQjl4UGl0NTVpRis5SmJ5REg3ekFWUHZBM0diQWUwVHFZSHdNWkFxUGVJaElYTFREeVdtalBLN0dJekRtZDN4QTQrR2lnek12SG9aaDBESlBSc3NMa3JrL25xM3hWd09NRFlCVXUyTExjQlh0bThmZ3k2TVFnYXVtUmdkcnVmbm1GMXoyWWhMRXZzRE5waWtkOEJHd0V2ZG1Mc3dBd00xRjY5ZWxWSm1qakFXcE16bGxldlh2bUxGeS9BK1djZDNMMTgrUkxOVk1TcWIvcFV3bDdWQnRLQ2hCRXg1c3NvQW16VW5CMzM1d3ZYanczY3dzNk1aS1cvR0IycVkxeG1KS2gzSzVZeVVqM1NsaVhqNERVaklNYnpRbzJaSWg4Q2FCbzZyUXFGOVJlYWRxb3lTM2RMek9vNWJKcTVyeW9wWmQzNHd3ZjNVMlhxbW4vQUFra1BJTTJSMkUrRWU5RUVQRHdHZUgvR2RBT0lZUVRCeG55RExxT2lRVE1KaEc0MVNVTythSXY0anNjbUs5SEJvOHpMV3FTQlRVWU1XRXExZVBQai9qbFBqbEVkR0ZYSlVZbUF1NGZBYldjS21PU1hvK1pyT0M1cTZIYk1TN2VSeTliYk9QZkI2ZnAzUjNKMEpHRzZINHQyQkF6UkdiRzZDOTBuVWQrTGNVcHJDdy8rcHZhcjhRQTdIV3NOdnIrc2dib0NHYmhBV3NtdHhFOUlKajloZ0ZUU2Q4TmQ3cmYrKzdZVGFIUER1VDd6VEk5NHNxODdrR2E0cnR2VCtjaFZwV2M1Wm5ZaGVkb0ROUVpsTEY5RVpNc1lvQVVBUmlCdGNUUDVDZnYzdlFEK0FQejJ5MUZibTBwcFpqelRVYklZVjJOMWowSkxHRFJESm5GY0pZM1JuZkZLeXZoY3EveGN5dWlqYm5xMXkrOG1JQmJtOWMrVlpJc1Rndlc5dFBaa21uOEdlNnF3MzFGaC8zVUEvekNBdi9vVHhKaDkrZDZva2cyZVdPd1VGQUZuT2xCWTNqNHdlOWZYOXk0WmZXVEwvWTIvOFRmT0FOakNsblVFeEM2RFp1YVVrNFVXamp5bUdUM1phNjBkZkpVT01HaTlnUm5yakZHWElYWVFRMkhNeGQwck0yaWNFOWFtajJXU2NHZk9LdXVTUUdYSmRoTEZESmdWclJQalpib1JDUzNyd3BDVkxrVVUrV0xweDV6QVpLOHo4NDM3SXVwOTVxMEJzOXFBVktWbGJzZHgxSmN2WDlZdWFXelRobDMraXhjdmFnTnl0MllVZ3VNNC9NV0xGL1hWcTFkOVdXdXNXVDJPWStJWEpaeGNKSTNjMzFLV3pLZWFxU2JEbmU3UmtiSFNZUHZPMVo3bnN6R2Jtc1RsMXZoeWkyQ0h4ak0zeG1ETnJyUWc3VXhJeExhWW5zMzd3UkpHN3RTNldreXFhMlBOSkEyTEUrUGtPU3pVQktrSUVRVEsrdlNqUFRRUllrUnpqV3JjRXNpc1l1V2orSHY5dG1PdFppeGswYm5MYnR2QVI3M1dxbjl2bUZWVTRvVE1VQ3RnVnVHMUdWWTBJRGhNUXZvWW8walU3cGVCM2RtWXlqSkREOGZYUWwwanNUYTk3ZFZtRzZzdmxZQ0RHTzBtSDBPTVFzb0VZb2ZZbzZiWFYxa0RqMTU3M3BtcForWEFQL2ZsK2oxNjFveDF5L3ZhSy9nb2ZxQUQzVHViVnhkSHhIbThXQ3hMTXR5Uk5lZ2hkV2Y4bE13RDdvM2x5VGJsbUcwNXRPTmUyM0w5dU43UGI3L0dTaytsdkcrM25GQlh1OTcrQTNiNVZ5NzdWemxtR1VoNzRsSFA4YTJuRTlZc0Exc1hkTitPL3ZNSEc3c0RkQm5TZkFMd0trbzFkNXdmOEVaQ3pOaDNIV1Y1ZGdkb0liZU1OOUovZEFscjFoa3B1dzR6K0JULy9TTk51dmpsdTNTeC9RMkFadWpUN1Zhb3ppcUN0RHpIYk5ybnI1SkdCV3E0a0RMYXM2enlWeW5qQ3NZY00wc3p0OGQzQW1Jc1p6UjZYM0FEMmxLZE5RTnFlMjNzMmErc3NQK29Bci9EZ0gvekp3Q1lmWkdvV2hrUkEvWTJzdG12NG4yTjJUdjM3OG91UDVFY1p0OEw1aHNFVER6YlJnTVc5V1JaVnlaTkpJUWQwTEJySW1pZFhNdFZpUm5rR2pNUWM1YTFZYW1EazVveUJWVVF1M3NHVzVXVzVab3lGM2FOcmZkN2NIV1hLUVpwWXdkd0FHNlVUV1lhS2sxeXhtNkp6M2I1WTMzRWtGa0hhUjF3ZFNhc1NSZU41b0Vac3c3RTNiMm9DNkp0RkdGKzRwdytwSTUxbFRONnl5MXpBQWNwL3RqSXNKdUJPR0dwa0VrbE5Xam1pUUpncXc2NENHQlQ0S1dTUnN1a2pJajBYaFZOWmdCbnlNMUFsREZZM1VsQ2ZwbUpSSkVac2c3Y012bWlHdDl6d0xRUEt4QW4rT1lMWTdiYWpPd0VSelpybDV3Z1pHZC9YQW9KaDV4TkE0bmI5MXN1bGlvaGV6QnpOS3lRQ3plSlY2aE9OaFhpN0tGeVJaY0U1OFZsWGt3LytCcHlLU1B3dGo4V0RlYlgyc1JSdjh1YmNZTHJ2djRtUS9nWnI5YUpxUExJQk5MeU1ackF3NENHSjBLeS9NQk90MzBubDhxbGxGTitlM3oreGxYdHpCTjdhTXU5YXZlcElZQjIwN0Y2SDBqTzZKZ3I1OFdOTi9zdXJ0a3ZObkVtYXhUMUg2M2hDdElvWmJYamxCNlFML3BKait3Ujh3K0svdXBvckJ0L2FEVDJJMDZNV2NiWnZ0UFlHTEtiNXlIanhWWldyRThiNEt5RE1hMDcrNVozSmI4TTRKOEd5cjhRQUprWDVBQnRsVFJtdFdhWitVZHVwVzhKUUl1Z3JJNUJCQXVBTEpjeXh2cXlXRk1HQW1NdUVzYzdsTkpnYVhabHRNR1VrVkJ4N0NrR1c1YXhablNsZlJXd2Y4T0Jud2JnWHdId3pXOGRNQ3RmcGhHQlJPTGpVa1VOTXY3d3RIcitYUWRTbnlzcDR4a3dlNFJCSTdDajVoL3F3bWpKT3BaQTZjNE9LWEJEZEY0TWR2bWNlZFlaTS9wdTRUQm1XcTRLR0ZNbWJMeG03Tm5aY2duNHNneVk5WFVtRG90R05XbGNiOWJuRmJMQjd3Q3R5eGtyMVozZGFxMUhCMlFOakEzamtNYVFsV2FScnpsbTFtdlErcnhlUzhZZ3JiRnlEQVR2KzdBejhVQzhFL3NtajlsSnhoaEFHYzAvbk5SL0hqMHpuR1NObW1QR3BGT2xFaUh6aEMzTFFKcXB0TXJGZnZ3QktPTXV3RXlRcE52S3BPbWZhak1EMnNnYUh2UExKZ3pZMitUWGplRkhUZitta2I0dDM4eU93d1Jwbkp5R05NSjZnaWMxdEhEeWFEZm56am1mbi82cElYaGJENWY3NUxkOFNCeW5QYnhoU2dnbk0zTm4xaHdXck9lSGEySUh2MklCNzQwR01xMGQ2N3dZNit3NncwY0IyVkg2T0Jrc2J2L2dQQWNyU05QSWdLTzdWbHJ3OFcvSGtHN1BQWERiZytHSXpYRHBkbTVza1RuMjlkTjVHY1ltODdmblljSzhwc2NhZUJERlZ2ZE1vMnRZQlpaOWVYZUwxSDNIdXVVTERZaDVZODNLL2ViVFFWcG4wYTZZb1JOdjlySVp5eTY0OXNqSVhnbkhpR1grbWZGSDVtMTRMdlJiSU0xVkxSbXc5N1l2RitpcTdWUW83M0x4MzZCYjhHNlRPNTVnTVlWaXBtd1lmWmpJRjdNL3ppMUxzc3krOVRsbVh3VHNqOExMcjQ3U3hYSjNpRFNMNEd3QU5JTTlGWlJRYTFhU21qSTEveWlwbkpFbGpWSEtPTjBhSFVpRHBoK3BMK09hTWs4Q3B2ZjIrQzZBeklJQnlKUTZUbEdraGY5QWdzNDR2Y0orYjRYOUlnQy9DY0RMYnlGalJqVm1oWFEvWm12eGRhZzNNeGttZlB0U3hxOTk3V3RoZlc4aHgreHpaZjdScEdkWmhsa21ZNFFhYlhSNW9TeGpUYzY0QTJuOWR0NmxqRjFPYUUxMnlPQ0xtN1kxNGFDRkFvTWw0QkVKSTJaU0c0ZWtMaXlWTWlwQUk5bWhreFNSczh1Y2dGbnBiZXpnaHVXTm1QVmwwTS90L2VMQ1NLWWZBN1ExS1dPbGVqSUE2QkxFbzRHMVc2ODU2dzZNWGI3WUFGcDk4ZUpGYlhKR2E1YjQxaVNRTjJMaDdOV3JWL2R0V3VJV3gwN3laNDZNVmF6MXNmYnRHWWRBeUtiSzdJQk5LLzFBTHZFMkxHa1hxNk5PaDI1YzduSEEzbDV5WXc3aTVMWHV5b3BKZ2R3NlZKSzNieGt3QTdGa3lsbkVzRFpQK0Q4OUJTdUltK0hUSUROOUN6SFZpc3p6a2JBcGJiUVZXblpaSFN3WWVjQXJwbkdoUlJ0K3NnQjFjaWMwaTQ2S2RMdUEwL2x5SDRidEU4VjM4V1hYVXZidHU2WFhnMU94RndjeTk3R21VUDlFRXNzTzd5cGRwSWFPTFYzS0RybW15a09HR1FiL3labHFFN1RjdGVjdGFZeXkzdHhZTGp1dnVUb2tnUXlDdXkxOWRGVmtkbXVZaHpoZEZSNVpTaVB3TjY1WWxYWTYxOUxSZE9OUWJZczNBblVDZFFKMnBTTUNBbUlEbEIzdHo1L256Vzc3MjRaZGtGQTdGaWlEV1IyR3ZWeUEyUmtpT2dOalYwWWdteHNEVHI2U29hUk5jSnM5M1hIeUUvYmVLNkdGQ1Rld2tKbStNcE53QUU5K1o4dHU0c0k0RUNDRFQyYk9JTmxsUURRQ3NXOGxZL2J6QWZ4THFPVlgza0ZYNHhmcmJiYVB3WmpXbXRVQ0s1TlRpcExGUW5KRkU2TVFPNmszdTNKbGpDTDNzbjN2Mjljc1lQck1IbjgxK2VBY3MvdjBHMjZCSlZOb05sOUJud0hBZmwyRi9TQ0Ezd1hnUC93V01HWmZ3dEJmNDhFN1MvcmVQeTBwNDN2RzdDMHdaa2tROUlMTHVLNE0wWW5RbWYzcFFFUllMZ1pSMXBndWxRVU9FSlNBeE5GN1ZHdjd6WFk2K0RrMm1XYUxoVDJpWGI1ZkdIN3dNYkV6ZVNKdml3T2loU0ViYmV0VzlpVERIT3RpbVNOSkZ3dmxtSG10dFRRWHhsNVgxazAvdklNMHNzdXYzWW1SSFJ0YkpsbVhLWmJHa3RVdWRlenMyYXRYcjBDWmFYTWY2TmRFZzlQQkl0K3dMODlpNThhTWFPbFN4dXJSbVJIS2t0bXEvS3RKK1ZYRkdpMlYxNW5SbXRoY1l5dHRGQ21mSCsyN3RIT0xsQkhSL01PamkxeU9raXplYTVjNGs5VXkzeW5hbVIrV0VHZ0ZXa1k1d05uVTZjVG93b0poTWRyUC95SnpGbnQ4SE54TW5FOEFvQXlzS2gyR3U5eHZob3c1QVFnajdkNWdXbHFuM3BrbEM1MTV5ZVpzYUtjeTRKdmMvcERmdVZVQ2hLM0dpWm5BanJQTndONlJBMlR4YjhicUdKRldHV05JZXFNNnQraFlHSm0ydm14dG9NeDdQVmhsZVdLZDdQSUN0V3ZyMEdERVNCdGR0eHlyWitTYU9FdzVGaWFKclYrSUdXWDdWR0xyeGhrTTdxbTB6K3pteWVNUWZZSHlkR2ZNQ3U2ZDFjS1N4dDc1N2dEdEFWbmpBMnJBSy9ic2pEblQ5MC9TYll1YXZCdjJzY3hubEYrNUJwNTZMTTV3M1NZbG0zRkRqLy82d3RNK1dEdWQ1aEZMbWMvTEpQaTRxT0pMTGZFTDdzREZrRE5sd01hVjhZYkZtZkZiQTh4K0dkeCtDUFgySGZOZ2RvYnNkaUpsYk5kMFk5WE1Dc3pXV3JOWlpjWDJHbm5BOUw3R0xBTmpsbWFZZWNLY3FheVJXYk82dGNYZk1XZEdlMWJwczdWZlNmelBCWlpGZVNOR0xWNWI1dnNQNEJjNThHc0IvTGxQbnpIckY1aXhUWEgybnA2R2tDSHZtV1AydVRML2VKZU1QckxsdnZ1N3Yzc25XMXlta1hFSEF4dk9JQnVmV2FMSTRDOHg0ZEJ0bXNvZGhURlR0c3dUeWFQdmdCY3pjQjFJZFBPUFJKYW9kV1NlTUdxV2dNb0JzQkpwNCs3OWFDY1pxUml4WmdQRWtmTmtCM0JPV1dYZEpNUWJHS3VkemFJY00zWmpSQStGSm1salBZNmpXK1piQTNaZHVnZ0dabjJlMUpqbGFrQjFSTHNnaytycXNCNCtlNDJHaFpXa2pVTWRXRmRuK2RHL3JnaTFaeVVVSENHM3pYZVRucVNMdERGcnRESms1TkRZODgzR3Zxa3pvMGdjRjN6RGlKUjczVFd4YVYvZENhSmEwd08veFV6WXJBTHpVNEEyWVZwdDN6NkVZNnNuZ0d5Qng5UmhINytwMFBabDkxeGtiTDRHSFhjcTEwT1ZWSTBZbkszVVEvWlYrNndsVVVRTmg2Z1BuOGx3ZzZ6VGVqVXREM1NuaDc1WTdJY0VCRTlqMWFKVGFOK0dSOHJZWkIvRklXY3Awd0lvU052dUlGTy90aGk3TUtNY1dmREFodmthSExCTU1XR0RlejVkallNTWNRVXVyTGZuVkxENW5USHJQZnRoQU5KdkNrM1dlTHNCOXFxQnMzb09RQjRZK1Mwbm1NWk9vQlJMR2ZmQWpBdW1kaHBDUENBQzNCVGMyc1g3Q3d5b2tXRGxGa3VpbnI3UVd1OFRPd1ZKSXdnN1lVTm1la3g2Y2tYQ1VGRFdMZkU5QVdTdG9jN1NSUW1raHJvemZ1bzVacjhjc0I5RUxWK05WdmhsbFMxbUFNMEpwSldTMUpxVnhQUmpkV1VzemZLcEw3VUNOUVpqYkplL1pwaFprQ3hHMW14WFkxYURWVWswLzFDbWJFb1lJMU5XUmgyekJjbGl2YkNicVdPQWFnQzE3NnJBSHdmdzZ3RDgyVStmTWVNUjI0STQrcFFGU2lQaGt2R2VNWHZYL3ZXT3prVjlXV2FNRWNBVU1WYk93SWErRTF3WVFiVmZ0RDRleXh3c21UQnJMRmZNcEl1QlFSTmdocVEyakExRWxEMHpBWUU3UzN3b3M5YkJGTTdOUDdKd2FiQ05mL3RjV3dZYnl4YlpabitBSlFaalpQelI3ZkFIRzBmZ3pHcXRwVEZrZmh4SDZjNkx6V1Z4TE52QW0zY2dSeUN3MERFSXh2SHNxaGk2bVprdWpqcHRuam5QaS92OFl2Q0IrVm43WVo3VnVzbTQwV1dnZEY5U2Q4SXZFcXFkTkp4OVExWHJ6ZnErblVnYVBjbU01SG9rRjkyTzU3YzBENWxTQ0tBTFE3U24waThFazVENFdUUFE2cGphd1pvdG9Nc0ZETG5JTFRuZ21xcWozRk5qOWF6ZjNkYzBwVzRUbGJ1dHRXcUdqVE5uY2lqWFRsN1NxaDZJak93N0Zsd1d6eDVGdGp1VmZpRXZ5eEV1VnFPTnVLTys0M1JHM1Z4ZEh2M1Bmc2h5M1I3MmNlZGgyOUhTa3Rpd3VJYmxlR1VuZHFrbExkTEw3MytkUFR1a1UvNEtvNnJybVVPNTl1RDdNdytOVE1wNDc5Q3liWWFkd0w3ZFZnb2U0L2ZrK05vRnE4WlJZUFRYRDJkaFZlRFRIUVB2dUQ0d0k0Yklrdkh0MGFiYWRYK0tBbnZYRnV6OTJMRkJvdUlLS3hNRWxBVzI3Rk9YTW40ZnF2MEFhdm5xZmJ1M1NEdmFCcUNGMnJPVlJTc2xacHVaU0JoTFlKSEtoaW1idHZrcUFpd2hmUHJLK0FPU1Y0WWtWQnFCSGF2RWt0VlFYellOL0NmRVpLSG1EUWcyLzlyMi9UUUE4ZzdmVldGL3pEOUZjUFlFZlB0OU9NTnQ3OFpZRU5temJhN09wNUpqRnRiM0ZuTE1QbGMxWmc4QU01VTFNa0NhZmRvVlpMbXdZRUdHbUFBdVhiOW1uR1ZCenh3WTNUOGZPeWxqQXRJNEhKcHIxVklqajBlQldhK1ZvM1dYVFkxWkpTQ20wa1VuSmlyTW84d3lZNGtpelN0dHZVNkFyTnZlRndxZFBqb1E0eHl6enFRMUlNYnlSYlNjTTZQNWZod0g3NWU3T3c0ZTdCWk1zb3pFN3lTTTVNbzQ1SXZNcU5sVS9oMklJZE1WMkl2bkVrZEdOajVjOUVYaGFxN0o2TEY0L0FmNFFwSkZhNm5ZczhXVE1kUEdwUTBtMEJaU29wTnN0YUJjaURzeks1MU1ZbjhaYU5YQWx1MmRHR09NTkorQk90d1pJV3RaRFVCVXR1ajBIWmJOSGRYSk1LTG5sQm50YnF6bkF1ck04OExzM0hObTJUd0trcUhWRCtjdysyQkd5d2pROVhxc1Ztdld0MU01RlU0QXBxM1llc29uYytiSXVxU1NjOWVvSFM2YXdKRitaa1oxYmRadm9PTjZzY0crR1YwSkVKVU1CTDZUOU5WOE1RbGg2MzQrL2dyNnpGaW1HUU9qUTR4Yll4L0orMy91VSt1YkdOVUQ4dmZtT0VPU1dtMTkvd3QxMHAya2pFNDZPWTlzaVZsZWUzWWlZN1FMMEFWY0czOWtmMTlvSUtZR0EzMkZiMWRlajFtQ210NFViUVZrTHA4VGs1UkNxa0ZyYnZTbFJPS0ppWnpiN2R5SnNRZ2dNeVJ1OW41dUVoN0FWekhhbURvd0l0SjhVTGFzck5NK3pSd3p3L2ZCN1lmZzVhdXIwVWZHbE4yYVJ2azJRZGdBYnJFR3pVSk5HUU8wM0F4a0RaaTJqU3RqWGx1V1dlWVgwaytVRFRpemhURnpNZnRuTU9aRHRqZ04vakdTeXRqUzQ3eTJET25BaHFmdk96anpUd1djM1Jtejhlc1J1YUk5T0JRMFJyamVNMmFmVWNaczl6a3o5UmlXOTJiV2dZMUxBSFZnNFJna01ldW1qSjE4TjRBOWNvWmt0b3pyM0xDenRROU1qOVNKeWZKMlluTnZDdlRVQmw5WU1HYk53bXVUUUlLa2kvZGhqZW5LQ01rdXF4SXFQY0NVdTNmWllaYzhWbUxBeW5FYzlkV3JWeU5ndW4zbTJyVU92bFFxV1ppOVUyRG1kTytxaUJuTVRDQ0ZYMXpQWVNhMVg4M3Qvd1pqbHFuOW1IQ0MxSnZkci9tb0ZBemdVTzluVlFFYVhhWU15SFl1SlF3OGVyQjBSNTU5UjJ1Tk5XVUhSTnJvZWNIY3NCYXNkQkFxamVMNmpqWlliRFVpRzhhZ3pBTnpkU0EyNy82ZFNwelkzRjhqV1NNMmVXWlJnQmEzYWd0dmREZi82SVlVazVxdEE5U012Um1BeStKNlNEYlg2NmRxY2p6dWRWRWUzUlVyajAreVZMQUdSWWtMTmNzVy9UWkdIQ3pFYUJ0OXAwbzF3TmljVFV1VW1kaFRtOWtKeEE5L1hqS2RNUndCQ0FIRHQrTmNXenVzVzhoUDE4bFpWeGJkTzlYWlk4RFBhZ1NjYlpaSUpsUUxqK0U1eVRPRFBORVZUTHI4Y0kxT0IxMVBOU216RU9iWUtsQ3QxWmpkZkdyblJwYlpNZnM3WGVMRzFURldBTHpDNGhKazY2RE9tWjNHemtrK3M0VFhaZGxwL2lWdU1EekJaeWdYY2d1Um5jN3doUExDQnVYc2RnaVRHWHRxWGNoYm1Rd1pNMmJXZHFTL1B0MVcxL3JpNThhUFdtdTJOQ2RqemdvelpFWUFuRkVleXhvVGRpeDFZL3pVR0xQdlE3VWZoSFg1WWdkYnhKTDVqVXcrcU9hc1R3L0F6UlptclJ1QklNQWNCbWpxeUZnYW9DcERIMUUyd0d4S0dWZEF4bXpaYXBldkRvenF4b2hta2QvWnNHaWRQK0dtQjRCbXNHYjNzYTh0QThrYzc1V21rUzFEc0FReEh2NzhyZ3I4c2ZvcE1HZlRsYkU3ejZna0lvdTJaeDJCc1lUazgxZGo5cTcvRTdDMEFLWU1pQ1VnelpsdEd2MGVNZ3ZoNE9oa1hRdHJKbzZLYWg3aWlSUXgreDViNUVOcXdhQ2dMVFA3U0dyQXNua00ya2FiRWtuaWFIdXZQMk1XTEtrcmd4aU5qSnd4WnRZMHQ2d3piV1R5TVJpdi9wbGtqRTVzR0pyRmZtM3ZRY3VHekROdVc2OHpDM0pNbFJPS1FWeVFHZ2tvcXI0WTB3V1d6VndVZmpWMjl4aTdWRWpvdE9kalJydXhwUFd6aVI1TEY4Z0JTRWo2RFZaMFZjQ1d4MW94dHVvYkFNd1RpZGxPNDdiS0xHMkJRNWxsaWN0ZWVIS3FmQmprTzVCa2xvRnNLS3BZNEhNbm1sazd4Y1FXbUQ2SFV6RHhWR2s0TVlvMnpCNUFURlo3N1lZWVppRUxyU3VqTGZCYkdIcGNjNDVhTURJVDhYSFJ1dGs5bk5yTGZmbml3ZkxUYXV2LzRCN3VESElvcklGQzY0WWxmTW5kR2JnQnl0aTYzdnh1SGtLUkFCM2tXTzN4Q0oySnNubHNHekJsUzN0NForMmF1WWhIQjAvdjdoM2dFR201NW9oOTh4Wk5NRXJTak1qY2Z1KzFlVTBQUU5iRzJhekpRYnRUNUtpK2ErZlRLS25GMWR3bXVESlM5RUdIdDYwbUZWNnBVdzVoeTU2aVN5T2s3bWpZcGIrYXhpQVAxcGp0aElWK0FkcVVrMkhiL0M4TTdteTFRWmdkVEZ3SUtIYzFablkrYmkwbFZ6ZUxvTkZzVmwyVmhOaGh6RmpLZExBZk9LbE04TldKTFJDWm1hbTVMdjBsMDBJK29mb2dMRnFRTVVyaEhCdXV2SDI3L084RDdBZmg5aDBEVEoweFpUczJMUUN4V3dSb2JqQy9vVmdFWWxVQW1Rbi9kQWRLRTZENWhuZnFkV1VySUxQQmdtWFcrVm1vOUdUTzZzZ2VtMHlZRDlNUHJpT2JsdmwxN0J0Q0RNQjl6a0VYc3pVd0JnS2FPKzdiMTlmdktyQWZxbmZtN1AvKzFvQlp0VzlIc1NMaTNRZWhUUnlxUkxYUEgyUDJMaGw5Wk12OXhiLzRGNS9GbHAxSUhLSE1FeitERW5aTXBZeEJQNkhPaTdRK3pTRExjdEY2TzIvdWZvZzhFZko1WWJ1UTFKZGxoaC8wdVRDb2FtMGNBS210VHkzeEt3R1owaXp6UzJjeE93M1Y2OGpNclBUYXJudC9wenJMRlJQamp3NnFuT3JVUU16WHFDbnJaaC9kT3IvUDc4Nk1mWDVycDI3VGorT29MSjkwOStHS3h3YUdqRDNTMmpKaXpJYkRuZVNZT1dXYkRjWU1rc3VNeEI3ZlZ5UERNZDBUd216WEIyR2RaU3JGeXl6elNZc1o2VEFzNWg4SE1XR1ZaSXpLbmxWanh3MEpvVlpkcHJKamxnS3RhTWZoVzRnSlNpcnJIYjA2SHBSejN5d0lIYU5Eb3hHYk9DMzE2NFpkSTZGa3IxRmxWbFpDOHFvQzdhVEFjTGx2c2JXSmkrcXQ5bTFSeGhlbWJKSzM0NDNCRzN3K09RcGFvNDg5ZU9YYkVyQTgzU0ZGN3dqOUxyME5vZFZHZ3hrRWtJblowbkZWVTh1T3ZxeXRBeU5aaURTTE5iMGhXTlB2eXU4ZGNuNjRqV05XQjdCT3VXM2ovT1JSMVJsck9aaE5Oem1PaEJRR0xVUE1XVGNBNmNqU3BHREtsSDE2ZFI2NC9FQ1hLVE02eElrd2tlV01qaThBZUtKS25DanVxb0hsTU9sa1pvMWRjeEN2aHJORFZyVFVreFZWZ3BKQm9CSFN2TjJpcCtUTmlNd0VMaXdaa202cXl6aWFaMThncS93TWpDMGdUSUNaZ3JPM0M4eCs4ZDE5TVdIS1VGcTVFVE5rRE5CdWU0Q1dHb1VZektLVXNRU0wvQ2huM0xzem5vVk52NzZVa2EzeTcrL0xhR1dsYkRKK1AxdGF5ZHFrNGlaMVpUVU1CRVlIeHY3K0puVm13RkpqUnE5QWhYMjNBMy9jZ1Y4RjRJZmZDakQ3SnQwRTlBYkxrdlo0UTF4LzA5UWhlcDlqOW81SkdaOVJYM1ltYVlTQXIzWnZNM1pyWEN6a1pUNG8xOHpWSGJGUFZGZkdKTzhNbWZtSGdMWmwvU0tEMVBlQjdaTDFxNXlScFlvajZ5MWh6MVRXeUZKR0Q0SE5iWG42ckl3WnFMN3NJRE1RWnh2OE84YWE3MW1TU0RMSExtMDhHSENSNlljZngxRjdmUnNkZS9ZcVhOZ1A4NlNUSnZWbFNpU2xNa1luWUdiM29PbURsSDhNd3B5VmdJaGxXVjRUN0tYU1Jrc1lzOVNOd1I4RFoyQ2syVnE5Mk9YN3FvUkVscEs5WWZUQzhISGRqbnhiTWkyMjNGS2orMWxiQmh4TjN0Z2hXRWtDcGpPdzVTbjRXbkZ4bEpKNHlGRU1KSTJKQWZDR2VmQk5uekpsY3BFZytFZEg4M3pkWGpRY3llVjFjWDMrckdGQ0cySEw5ZkVSUjc4WWpjeCtJSnZqNEpZQXh0M3hUMnUrenRxNGNWUThRenIrakhIWGNoUFA5VTdUMU9uWWQrdG1JSlZzOUd0RUdZWm1ETEkveGxjYzFWa0c4NXhleEM3ZkdqQ2I5V1UrUnZrNU9IaWFoOWZXMGF6VWVUNW56azdNUHpCcng3N1FKSXUzSWtZZkpHUGNHaHUySGVyQUxIWGI5NG1oaXlYNEtqbU4yNTkxUU1Fa2ZTMFpBRU1PeGhub2FKM1p4MitqRjI1ZndzMStQNng4RmVVbTRFdnF4bnJld0NKbFBHSFFtRVZyR1dkMysvd2k5dmtUbEpYRW9iRkl6VmtHeU41VXlxaFcrWFpxazErcFpWVzRQaDlnMHhNcDQ5NzhJMG9YTGNuSjJBQzA3NnpBditwNCtoV08yNHMzQjJiZWQwUWVBQS9lSVB2MVhLYzcyL3NhczNkVHl1alBZTWdzVzQ3QUU4c1pVMmxqTjcvb1FFekJpekJ0UnQvM0pNZk0xYkNEdnk4MitPT1duREJmRFBqQVdXWUVwTlFlSDRsRi9nQ0M5TG5VV2cvNlRuSDNnNVlEWjVWMVpyQ0RyYzZTOWVXSUZlc3VqRnp6MWQ5WG11L0VpQjFpalYvNitwb1Q0d0I1blEzcm9HMVhCOWVEcXhzVFdKaVZjbFgrQ1c3eGlxRC9QNHNFY3lhZ1FIVmxCTGFDbU00anNSUTZqZEtadDZ4UHUwTnVTNkIwb0ZqbWlwYmx1TmZ1SzJYWDJUQUZXeTZvMW0zRmZxZTNyOVgxRUNFdHpKTSs3eXBuckNIclRPMzBaOEIwbFZRMHUyUVg0K3ZPSU5OcmpVSk5JM2Q0SnlrZmgrY2grbE40aUQ3d2x1TTE5MUY5clNvRlZFYzNpL3Q1S2VNMFRVT0tZWTVoQ0V5Y2liUjM4U1VjeGgwOW8ycyszSjFzOEkyMnlldG5yTjFOUDh6RkViSkxFWDFXamJsa2cvRTJndEdJTUd0VDFOaU5OT2FJYlpkT1lnekFZUnFmOUgzdmNTdStBV2dOd0JtbDE0M1E2NTREUitmUDZQY1ZURGQ3MnpyUU54L3JqVG81bGpLeVhrNnpDNVV4S2ZMKzFlVlF0SjNLRzJQbnIxRFg4RWFTTFJaaTNWbXFKK3J5M2tUR3VOYjdlSk50OWFyUUl3aU9IL0QvYnczdVVzcitOK3JDbUMyajMyeGhuRU01eUxpcjZVYVVtSnFjQkp0ODM0Q3lrZzlhbE16VWFha253d3c4QzVpVTZMMXhBVnRpQW5LTGlPL05lNVBmQ2NjZmhwZXZUWHQ3QWxldkkyWHN3ZE5GVEVITXduZnU5dm01TzJPMDBGY2dWamF1akRzcG8yMnQ4bFhLcU8vdnk5ZHR1RFNIU00vNk1tc3RSQnRLbkh4MEhpQzlNL3VBeUJ0QmR5Qit3bzRuNFM4NVVQNGR3SDRMZ0EvZUNKaDk3STRiYWUrMW81VDlic2N6a1g0STNRbjZVMkNrM2pZd3ErOFpNejk3cndZZDdNcG9GSjY4QUR1Uk9iSkxvNHY1aHk3cm1sTW10V25LWUhraVFYUnBuKzNZdEJNSHhzdHBDc3hFdWxqSUlLT3lXMlBQSXdOWjRnTmdzSFYwd0VYTHN4R0hxeE5qQjNDVVBlWWlSZXoxWlIyTWRhWXMxSjYxZFhXcFk1QXhBdWlBei9tODFBd1gxSVJNWXFEVThNem9TS3FKWDJMKzRYdGVLdk5IM0pyYTE5MHpkQmtrM2kzcEcra1BvOC9jMTNBd1pnZXhaZ2MyRnBPV015ME1OcXFmU3M0enY1TXpyaThDczJqcjRVR3dHS1dNN01RWWhZK2V0a0E1TzJ0ckNVZC91VmRsUjMwdFp1UkRaaDRaS1YvY0lPZEpieU1wTWUvTTQ4WXJTK2NNd1lnQ3ZzcHB4NXF5OCtoeEgyeUs4TEFZakxSdE12RVU2amlYWldPN1E1M2hHT09xVzNLS29KR2NyYWxQakVIY3MwSEJ4SGUwbWZJdHp3WnZKTEtCTGY4NVcyN0hlSHBvR3pPUlhFZDRvK0lsbDU1K25hRE0xQWhFYTg3WXBlOUY2RTZjTzhyUFRxQVBZM0h1emtLNnVSZ3lMSmI4UGJXcFRsQW1ldGh4L3RKOGYxQzZVd2RxQjFhN0lHMjRHZkRrelJXeU0yVWRrSUhZTVJOaWtlcktCamdyMDZQaWRpTTFLY2dzVVZreWowQU5ncVgwZDJVWmM2Q2diRGd2OGpMQ0lMS2tOUVBwL2UvVkczVE83dlZ1dndlMS9Lb1VkQVh3MWFXTXR3ZWtqQlJBdlFBM0MrdTkyK2ViNUp2WkltWDBFL3Y4S0dGVUJ1M1JnR210TDhOSmlMUVRDR01ERUErREdKYlVsazFKSXlzMTl0SkZTNWl5Q013V2dQWnJLK3lmZDVSLytvMkEyU2RDQjRjSG5OeEUyUzNmUlAxaDlxa3hadTg2MFB2SkJzd1drQ2JNVlZaWE51empzYThOQ3lJZk1zZHdBWERkWnQ1b3ZXZW1IbXlwci9iNm9jWk02c3NDa051QnRjNzRuZVNUT2RlU2lVTmpZTVg2TVpyUlpNTUVoR3U0K3VmT1hGVnhaaHd5UjVZM2FqMFkxWmlCY3N0QVRCdExKaGNYUnE2RG8yTTBBVEhmSzNab2FGUEV4RkpHVTB6RHdLeEk3cklsMFY5SWpBeHAvbVFYTm9TVDdZYnhMUWxjMjlWR2FSWkFZajFaYVlTVmFjQnFNUWVBcVlCNmdpenJLZ2hrZGkrUEZwNzFZaHZDa3BpeUtHbXM5T0RFNE5VbXVxeW5OV1NSV1ZQdXpxak50ZFpBL0pDS1dhUnlwa25HNFp5eGZVVTM5NmdiSnE2Uy8vek1VOXZEM2NGQWVRUjhKckkvOXhWVFExZy9ZNHJQR2t4MW9nR0JvZC90MnczR0ljbmd3clQzVjVNZGNsTWdNdzRneG9nWmV5WUdhMzZicGg2dXJBdUd5Nk9IYUFjUEI5eE1RSmU0VVBicndVOTZBWlp0ZzgySGpCaFUzcmtRTnV3eGFMZ1FZMVlvNDh3NExQNlllcnpSbWY4RUdsNCt1L2VGMHAxS01GU3dZT0pkaUNHYkxCa0dJTE1HeWd6ZVBqbUpIeU5yTm1XT2xSaUEyd0JyWGFJOFFkcWhvOVZ0UjI1QXEyaTd1eTdlMmlWNTA1d3lCV1NJcnZPQmFDU3NVUEE4aDhxcnVyTkYzSkF1YUhtTjJSSWlYYzRaMDdjQnpBcitZVmo1eHkrWk1kdVlleXhNMlNab3V1NXF6cmdhSzBvYUxiWFF6K3p6bzB0amJkZHhCR1FtVXNab0FOSURwdnVWN0ltVU1Zb3BLMFZmMXhBd25SbCtjQjJaWGtVVmJQYkJZQzJDTUdIR3pvQVpIUGlkanZKWEFQczMzNEF4VzQwL1BRNVNwU01UaTNiZHh3UGdyUUtmSC83aEh3N3Jld3M1Wm05Vnl2Z3VHWDFreXowSXpFNXJ6Ymllakd0QXRQYUw4MjI0MWl3QlptRFpvd0F2VDJTWTJBUmVnNEJiQUhINlBabVd5UlhCb0swRHcrNkN5TEkrWWN3WWxOVmRzUFRPUHA5Y0ZidWNjZVNhOVhQSDJXVlNGOVpyeUk3dTVraXl4QTdJbUlVYmtzZ2VMcTFtSDYyMnJMc3grb2IrbUl5WlAwNHFqY0ZzclRzRGdUU1dOUjR6eDR4OEZvSVRZN1dWTEJneXhvb1ErM1dwQUJSZVpmcU83MlI1TldvdkRkUC9uM2ZNWFRTWkJNQ0VhVmhRWlhZR0ZsT00xZWdpQWpRa0lzYXNLc3hHNkNmWG9NV0gwMEdpUm40c09kaFMvVHk3ekphMmpMWFVLWkkwSTdhRjFJYldyOEF1bCtOTTJFYkYxbTRIMzAwMm5EUEc1c3FNSEI4TmJTQzVkLzZEVk5Jbzg0d3owcHBhcUxGRTA0YWVwSHljTEdmek9xdE81dmdlYXdLSERmNlFQVW9jZ0U5V2EveC9BTkRtWEZudllHa1FmYzNsMEttYlVvMmdFWU1sYngwak01S0hkaXQrSjgvR21USGdWYzR0T3paWFRHdDl2cGYzTnBuMHFBUG1wbU5vYlZSaVNCMXQ1dEFKUGc5NjVsSFU1RlBPQ0RJQU1Yay9uQm9SMFVjejFMNnZ0Mi9vQmRoazI4ZDQvUzB3WTJpZDMxMk5TeEYzdXdrQm1EVmo2NDFwQUFMcXdtTEl5V3hNcjhSazFOWXloK1BWQUdobzd4dExCdUFMekpRNVNSZmJNZTd2R1l5RjJqSklCQmdaZ1hSWHhvSzFYdXdVb0ZuQ29xbkVOd05pZ1IxekxJWWZDeU1xWU13MlFRZkhhOU1OUHdjb2YyQXdZclZ4b3JzYXMvQ3FlV1ZxazMrN01QL2dqTE1iU2pIYzVCcnlOT01zQzVxT2dkTXpZSG9GWkZQS21CdUEyS2Eyckc3cXl3ckpHUXM1TTk3R2tOTmp0V1VRV1diMithUzJMS2dOMisvdkNjQy9VV0YvRHJDLy9OckFyREIxcmFNT3UwNk5qTks1ZlRybUgrK2xqRy8yVDlnaktIT2xnSWRsZ3ZLZXdaUWxjc2JTQzhveUtTTmlOaG1FOGVJYU5ic0FZcWU1Wkd3OGtvUlVkL0NFeG1iMW1yRHhub3cvVEMzaVZjcklEbzNrenNnWlpJRlZvN3l5NGZSSXJKa1JVd1ZoMEliclltZkQydnViMUprTmkveHVmKy91M1F5a3VudnB3S3ZYbDdtN2RUYU5nR0p2Ris5WHFQT3JHZU5rcDJUSlVQeVoxcFBWU1RheGQwWWx3MElnRDVObWNxTmk3dzduWjN5OG4xQjk3b2s0c0ZJSGtxYUY1R3pla2JyS0ZZOE1xSG1rQlNIenpYTjZSbWdGSXlHYVhTaE5KMUdwWG9wVHhuaVFXTkUyekpqVFk5alRxcld6bWpPVk1ycWN1MWlqNURvaTZIdDRhdUpjR0FGdFluWjBSTjdSUjUxWURaUklHd0pxN293V0pIZ3VGMkdvNlF1RlVTSTNaSzFXalRJK2laVU12VkJYNlI5dHgxc3RXbTJnbjlQbEp2bTEwdDBxbDJTc1ZSZHA0U3p3RzFDZVhTdjV4cUR1REMxUHppb1dKblVkODNFWVo3ZjVJb0lNREpvSGNyQ1FUQkdyckxGcnJQa0h0bnhPWFBwR2QvUGxrQlJpVklreHhPSjZGalVkaUVLcERzUnVvWnFNZ1ZtQkdvQWdHSHlVWVBhaDhySGIrRDFiZTMvL2U5WCtDdTV1aTE4dzJqYTlaNnpEcWsvTmFXWVBEUk4zazg2WWNUU0EyYlVMbzFFL2xkL2pwS3NhTGZFOU1tYkJqVHdKNmcyMVoxaTV2WmV2TFdIOGcvZlJKZ1ptemUzS2JBbUdYcXp2Rjgzb2ptMlRlck5SZHhiWnRMc1JDRE5saFppd1dHdjJPa0hUWmZ0ZTJUSnNBZG1FaTlFaW54a3pac3ZxOHJzRDhnRHBYZjNZNUxzenhzenAxMXlFU2JzRFVmdTNIUFlMWGdjUzNZR1ppZUVINlhrWGlZYlVsdkgwVDRNeCt3eXM3ek1sWlh4ZHRneXp2bXNBSFFWME85T09qREdUWllPOWZRTTdyWi9tWFFMWXdWUk5aSXFGbHUxdHBWWFAycThPeUVocXlPdFk3UEVaekcya2pLQS9sakoyUjBQcjc4a3VQMlBJaHB3UXN3Nk5HVE9vMUxDWmRaU2t0bXhJR2Z1MkdkQzE1Zms3YXQrZmJUZHdOcFZHSnowdktWcXdqdGV1WTUyZ2pLV01MczZNclBBTEpWaE9USnJQc3F1eEtWdU5EVTBMd3gxcndMUlR6OEl2ZEpsT3RTbURZYU5hRmEvVFByOFdraTBpOS8xWEtlTVpsbUY5V1VESEhLWHNLMWhkeFpkSmJoa0VuTTA1Unh0N3p6d2RKd3RUQXlDTURGNUcvVWtOR3BsL1RDbGp6ZkcwWVNsYUN0bGdOUkkzWjh5cG9UdUorV3FzQ0hhRk5KeGxQb1h0dXp4TGpaaTNOZ1psRm11cGdqdXlZVW93U1k1b0JNYVd5enJrQ2JJemlxLzd1OGdOc1Via1pjZEVUNTlKMk9CeU5KaEZXN2QzTDRNd3dxc3V3d3gwelRTanhCRDNCLzVRNmZkdXFOYTZVS3lkTXpiL1lObWlOVWRHcVRjeno2M1V1NU5GOEZQc1kvYVE2VjNhcUlBc0NoNU5PbnRhWTdaanl5Q2dETkp4WnZmR1NpWU5Qa0RhTlBnd2IxdnhhR2R2bUtZZEhBZW1OV1lRUjBhVHZPWXVaZXhaYUFHenViaFRFcHVtM2Vwc2JMQXN0MGFQb011eVdDaHF2T3RPOUhOTUlJZGJmTHhXRC9SL0F5cy9KekJkblNYcmRXRjJTK1NLZHNLaXNjVHhKamxtVkc5V1M5eTN0dTF5SzhKVFRWOVFKK0VnQWhON0Rjb3FPTjhzZ2pHMXk1OHlSclhObjFkdVhSaXovdDdJa2dSQkt0eGgyL0dRQzJQT2p1MGtqSHlmNGlmYjdmNzVhd2ZzWHdYc2R6d2JtSDBUaGlKQnFpTmpVaFF6S3V2WHJzdW5CTXplMTVpOWZXQzJCV003dVNMYjNpZU1XcEF6a2hOakJ6ZFZ6RDhXK1dKaVo4L3pXREs1a3pzT0YwUUdiWjNsRXpZdFpLVmxtV2UwWFNlV2pPdkpYR3JNVk1yWW1UQUdkaUZ3R2tCbnVQcDJDdFdZQlRkSERwTG1lVzNhY1J4SEIzZjh2ck5wQjdGcG5UMnprRXMySFRHN1BGVEJiSDkvMzk5Q1NqM1ZRQ05TV0NhU3hTNVRIUGdsc2MzdlZ2ZGpFck5uZHNkQUdnVVc4RXZDNkZzVy9iV0FOU01jNE9zT0JFMW1ncXljSFU3YWQydU5RV3pETXQrazVpd0xudGJoWUFzeXZ2eWdyN2RRbHlvZVppWHFBNitVTkRhNmN6VmtsRVVScEtlSmFSQjVJek5aRGRaVmozSkQ2bmpQK0paV3ZGMGptM24vQ2hkRmhjS2tDV3ljUXB3SGVCSy9ScE9ZN2tySFhoN0hnN0ZhVUJtQm13RzJhcnMwREZsbWd4bEltdWNMZUxvRHF1bEFxRmZsTEd3blFCUnE1eHF6WmRhd2xOYjBFU0xzUHl4eUhPbUFweDgvYXpMRlhGUXplZHV3WHdSR0I1dUhpSjZOcjVJUjFHMGprbURXQ0JvOTM2b0FkN3FHaGcyZ3NtWWVBN1FnSTA2YWJ6Ym9uMk9ST0Nxc011b2txaWVja2Z5TGVUVm15V1pnN3F3elk2Yk1RbjNaYXFGLzM1TkN2elkyRjU5SHJBeGhjdXRROXVEb01nRllZTFFvRG95WnNTeTdqREVBSTh4eVcydkx1UHh2TUhFWjBlVXJ5YlVFVUNPaDF4WWdKcCtCR0Q3ZHozbkp3ZzNhanJ4NmRtLzIxd1BsSDkzV2ttWG1IeXhMOUpNYXN5dTN4dE5RYW1zdWpXZFN4cExhNXRmQkttbU5tVjNZNWZ2Q21sWGhmU056WmlFQzJ3Sjdaa2xsV1RUNnlObXpyTVpzQldIN0dqT01wMkpKbm00Ty9QWUsrK09BL1lubk1XYlZVZmlxcHpxUEhRQXp6OVUwbjRiNXg5ZSs5cld3dnJlUVkvWjV0Y3MvWThOWXFoZUFEYVpEbzFISEhBUzZtRTFqa0ZOcGZRc29aR2xqVWcrbUVramYxSXgxcG13Qlh5UTNWQW1rdWpJeWcrYVpBeU85aHUrS01ZaHRzc3RZaWpuY0VQdjdMaUhFZEdnMENxUWVjc1crL3BaZDFzMDdyTnZoZHpEWFpZc2RGTGJ2ZHNsakNLYnVja1VBWGRiWTk2T0kvQklpTWJVRk41elkvM0dwVmxaZnB2Vm5IY3ZVTXNFWUczeHd1Ull6ZHA0NTNXUERsUGhDbCtSZkJrNHl6ZlE5T1pwVUJtdnNORWNBRFdJS0FuRXhZWUFXZGc2WGtrQnN4R2txTmxSdzFwZGFRVm1IV0I1a2pQeStMaEhXTlpoelp5NHhhaUJSdlNZYVZKVTJlbm9pZmNuRDh2UWN1bzQ0ZWlLZWszRGpZRm0va2R1ZFdBWW15c3V6ZmFEdmFDQnowclpjaEJpUHhTSVQ5S1RHYjJua3FoR054OWhQSmNMNXM4YkRKUnlOVER3N0lvdVQ1ZjVhd0hLY1pxZWxpT01pWWcxY3YwRjE5MFlqNjN4ckFpeERkRDhicGlCY3BXOEpVNWFIUEpjZ1lIU0NjWnA1TmxrekQ2Nk1sb0l4RUlQQkhjOG9MY3ZzRkp4Ry9DY1l5M0xYbUhnS1NrRmJTU2oyMVJpTUdiczZlbFFhb3B6SUdIY3lianRSZHk4cU5qWDZnSHplbk1PT09wMkEyL01Zc3kraTJQLzJFcFNsRXNhc3h1eDJYbU8yclVITEFKckJTbW5CMDFtdDJkNlZjUUkxVUkyWkxZQnNyVEdMNGRJbXNlazFhWUV0am93MmhpbHVEOWFWNVF6WktpbmVmZUtoby80YnV3bFFrOS9iLzg1aFB3dDNwNkFIZ1ZrYm9lQm5nTzE0S2ljcEk2WjZvUDlnUG84MVp1K1MwVWUyM0ovKzAzLzZVV0NtWUd3QlM4anJ6eFQ0WklBcW5TZVN4aTVkVENXUTdITFk2OUtJOVNvc1dTUlo0OEhMMG50bjJXR1hORFp3eEsvZUpZY3NWV3dncmJBbGZzOG13d3lwSHV0djZ3akwrcjM0cTBzYnZXMnZFZ3MyV0NxcEt4czVabDJxU0JKRVp3YXN1ekNTSTZQTGVvWmxmamY3MFBVSUdCOTQ2TmoxaGpieU8wOHl6VHd6TjZ4VEJWaWx2bXlSNE5scWNPaCtiaFM1NWVTRFptMkhORDJGTVNGQTJaTU1nRnBqUWpack1RZnlOQW1YdHFuVFZBYk5IOW1oeGV3ODNadG8vTWhRYXRhYzFRRFU0cjV4WFpuTDU5aHh6dWhKWHc1L0NKaE9UeEJ3a2k0TVNkNWFsczlJclhXby9VU2llTHJ0Njltbm1oQi9RQXFZeVRrUlpaTStjc3pFdVJGWGh5MDV6aHdROTlDdU10TjRjUmFXM2JQY2tmSFJnMnU3Y094ZTFPU0pYczZUbWpOaXlrUE9XWC9mWFlXTVdMNlFaRXo3dVhiK292c2lRcDFNZkkrdzNKUXl6cW96bDVxbktHY3NBc29pQTFBRGEyNUwzbFRIcjhPQkVZa0xveVZNMmM1SGc4aWZXNG5zMjQxUGgrblJsQWc2Nm5PcUlRZ3lJY0hpd3VpcmZMRUlCQXpTUi9HUEhFSFB6M1JsTlB1bmdQTFRKMERpVk80TFY4YkxQN3RtMG56ajJOZ0JtczlzczdYV1RBSGFaR1BQclBQUDdmSmp1UFFxWmF3angyd05sVGF5eDNlVXhqWFhiVTJadWk0cVE4WUdKanZHTERKakNOTWpHTFg0K1dkVTJHOTMyUC9zWVdEMm9jK0FlNzYvTUN1bTdvek83SDUzOUowUGdmYzFadSsrbERHQXJVUytHRUFSWXQxWWtBR3lYSEdNZ0pxeGtZZTUrOWlHbVFXN2ZKWXVKa1loeW94cCs5Z1V4R1Y1WnlDV01HZXBNK05GYnRtMjNrd0FISVQxVXRZTXRkWU9HcnNUSW9nMXEyMTlJR2tpMit1UGRaQlUwZGhBaEVDWWNZYlpxMWV2RHFvNzAweTFMbUVNd0t6TFFUdFlCWmxoWFhhWmZOYVZxYlA4Y0pmZlNCbXJ6YklzeGlwVkxQR2R3NFhwZ2V5a2RrdE5qYkpHbTlJREYyNG1DNm9VOHc5ck5XYlZZa0hjQUdJSzFEQ1R0RDJPZUsxTW55VWFVayt4Y3NaWDVabHdUbnZrWVM5bmpSbHphTHova0cvc0VDVFhxVTNyRU5zQXM3T2tnOGV5Nlg0Qy9sbk1IUHRXYnZmVHNMZDYvVU42ZmlDZXM5NFVPejY2dHNHWUlVb1hzNW96ZG1tMFN1WWdWQlEzUHB0MEt5eU1zQnV4Q1dzMkVnSllVNjdtUmt6WmJPN3FES2pXK1dwbzRNR3gwU2g2bDdPbWZIU2FCMU5Id2RFRFJESEc2ZE15Wi9rU01RM0hnWlZXQm5YTGdGY2sxc0x2LzVSQmN6TEpQR1BPTXFac0M4ekVTbEpiYU0rcU1mdGVGUHNYVDZXTFM3QTB1VFF5Mk5xR1Q5OU9jczJrNXN3NWZIcWFrSmpGNEdtdUxYTzVsdFEyM3hjTGZWeElHZG1aMFVPV1dUZnlpQVlmWEZOMjMzSm56Sjdha3lsR1M5L3J5dTdDWXp2TktjdThGdFhvb3pOakpxd1l4cUNKTFQwRmlnNzRmUTc3SXdEKzZrUEE3Sk14OHZPQUtrWnJoUDB6Q2FRK1Y4RHNFU25qenBhK0Fha0YrUEIzeUNJL0dIblVXczNNbUpHcVVzdTFmSy9YV21YdGZNQUNmMkgzZUZ0OTNicDkvZjdadE4wZmdiNEE3am9vMW1VNkswWWdEUUxNQnBBa01GWUkwSUdtT2Ruck84a1ozZDBQMnU4aDNlemdqN1BjdXF6UmZWc3habnhkMUZ2czdhdkN6cFVWbzBFZVl3Yk5WOEJtN0JyUEJpQ0pySkdYeThxelRMR04wa2VMMFowaU4xM2U5NEROaUJMMFNpd2E3VkRkTkp5dHZRT2FPck5oZER4MjR6Nk5sUXZyajVWaVNHenpWd2huaVN1anVrTHVlRXdQREo5SzdIelU0bmlTUmVmcElabVNqM0RVMGtQb1VvZkdJUU9XWENqeGE2WkxTNVJCSmFOOEhzWmZtaUtEQ2Jya0dBa1JITTZCMEdFSE5pTVFkeXYvZUNtTFE3MElja3pPa3crWFI1NFdvWVllWVkvMVA5S0JkanJQOEFuUVp3VEMvSUpqR2dpQjY5MHQ3bi9hUVErMER3OGhzemtFczJJMHZ0L05RVUx0SWpNdmVod3lhd0hRMWNCQXpSY3pFSzVVWTVCeUEwWjMxeGNnYUtHV2JBVm53R3JZTUE5REpqbXo1UDNDbWlFQ3RZQjVDbzBmaVpsaEIzbkZ5WFlmZEhxMHJpeDdHTEVuUzJaS2w5V2FRWmswUXB2QVN2bUZBVERKT1BQeXFDdGpnZG52eFZNcEM4VllHaWhxY3NKWVcwYnVqQjFnK1cxS0dNOXF5WXpjRjVrbEt3TElSbWkxVWEzWmpVQldXWUNZNXBxZFNSbExFalROOVdWWFVzYlNkQmhsa1RSV2labVk3NC9rZDhBTXRzdXYwbFBtTE1LMEdBeGpnUVhFcUszVFp5WjRzT1BKWWIvSFlmLzlSNGJPbmo3eVhCRXdpM09UUExOZHYrWFR5VEVMVzNrTE9XYnZHYk1FbU8zbUo0SE9aK0RJbEhGTGxsZkhSaytZTUZlVEVnNmU1dG8wMmZheVRXSEVRakExbTRXUWc2SkxQSUFScUhMTk1hUGphd0xRdkp0d2tKbEdKUkJreEt3TnlTRGI0TGYxM3hwZzRxQnFFTGpxTldmRGlYRmpyYzh1alJYM3VqS1dOQTYyVE02Tmt5UnpQTStyNTcxL2wzb3lKOHpDcG9YQmhWSDlNN29wQ05XWUxWYnZ0Z21XcHVrOGtwcld6S2JzZ3NjbnZ3dXdDRUZyTlRvemV1TFdXQk1uRTJiTkFsMlZKV2hYMnBFckRNYXh5dHk5OTQyY01kcDJWR2lHV2JUUlA0WjRwYmxOdHFWcThIYUxWV3grNFFPcDBLL1dlMGJVSFFBMGNCTXdLK1Y5T1NLcVlGY0lpc09lTjhQWmUvUFdlemV3RVlXUGJUT2E4SmJkMWNHUXdVWjVvS2xjTk1qOW5Yd3lKeTloaE0wVkQzVEFOL0xRR0NvNXRkc1orSGpMQS9PUk4yWU02enBTOFhvUHFKNHloNUV0eHMvOGlHWWpNQnNHSEFGTnp1MnVIR2VQV1dpdGFzZVc3YVk1RmEzWGtSbi9kdVYzNkUydU9UTlpKb3dQMkluUlorOEVGODR4QXdWTFl5WW9HLzNRVEFaZUdNaU53UlN1a2x2NXNOWDlMYjZQRWtjUE5XV0ZLc3BLWXA0UHNVcFlKWTBsZ0xOWUEyTkRmQXpLbjFva2hKUmRaaHVRQmpVQktYR2FFbjJGNjh3eXVXSURkbXdHb2wzT3dpSUgyNmdoUXEwZ1Fid0ZSV1pzbVFBeENDWDR1Q3ZqYjhiTmZuTnFnVitUQU9uVUlqL1JqZTVxemNwSnJsbmRXT3RyOExTVndaU3Q0ZE41cnRuclNobXJ1RERhWWo4eUt5RUwyWkZNNW16Q05MYkluejdCTnBndS9uOE5TV1R4WFVXMHhDOUprRFIvTHN1emRXWFBEUGp2T3V6ZkJ2Qi92QVptWWZNWEE3R25SUnRqaE9aZFo3ZytWK1lmandDempYeFJwOWtHUkVGWXJwNEo1Z3JHa2pvMTI5V3dFYlBWcFpPWm8ySWhYL3hlbzhYMVhBZmxwREhJNEdYcXhvVXh6Ry9UZVo4NGZMcFN6Vmt3LzZEdEdsbmhkM2ZFZTczV2NZQWxsNzJPcklNaFlzM0FqQnE5WjJraTE1ZzUxN1J4WFJteGVjNlcrWDBabWVjem9zNUh0M2ZuaGVFSlJkT3h4c0tXcVNLUXBZeFljNW0xZ2l1dG1hSk81bEx5WmlkczJTbkhoRlQ0TjN2WTFIQkducGJrbUxGdGZzZ3ZxMUpUUnU4ck1rcmw1Q2EzVnV1Y1dlUXJXS3NFcVJpMDNVVWhkWXgzR2xXalZhcEt3NFhweC81K3hUbG1CTVA0K3JJWUN4RDRHbmZxai92S0JySGpUQld4eU1id1lzd3pKOUhYWkdJdFlkV2M2RnVmRm9MaGFBUkhSeGZ6TFFwempxdDNZZU5tMjJMek5XZXNMMXdqSE9yM3N6b0JVd3gzeGhwOU1NQ25iNTZxV1FJWnNXY1dwOC9YR2tENUJOelpiN2EyV2pxSXQ2ZEYwNVR1SUhtN3pRS21UdE4wSUZZSXFBMHBJOFEybjhGWjcvSlVxVnZDSWw3Y0FiQ1ZJYk5GeG1ja1g0eDIrUkh0ckpiNUZnQ2F5engrdFlVTklHQkdCR01oOWl1QU1UWDR3R3FQYjJYUmFNNjg3MFMrdUVBaGp4bG5CVEVqT2x3WFJXK0wxRGlsOVZ5bGpTV1hNblpteVZSZytSQXcrd0xNZnRlbGhER3JPd3VnakkwL2J0ZU9qajI3ekFtNFpTRE5pRDNEcmRXYVJZZkdGYUJ4UlNTQ3BORzJVa1lUTUlaUVg3YUdTTS9hc3RXVjhkendRNGRFdE1ZVGROMFhyQmI0dmd4azJLTHdFTUZRQUc1bjRNeUIzKzJ3SDhMRmxmUDBrWTRrMndXTXNjM0EyQnlYL1Z5WmY3eExSaC9aY2pzcG93SXNyR1llekZobGhoMmVnRGRQTXNZNkFBcyswMWxZZFJZZUxiTEREQnd1VWtMTXJEVU92V1pKcFlzRHBFdnRtWXVqb2lzcjFrRlpQemJpd3RpbGlwWGtpSzUyK1kwMXE4eTZVWjFZQjJZSDU2S3hzeUpiNXRONkJsQWplU08zTzRCS3RkL3Z3RlZraldrTTgvWmVrWkFpdlYrNjVKOEpTRE1pbmpyUkZPQ1F4YjZ6QWczRDZqUnZ5QTN6OWdWS3U0VTlWdGlGOTZMZlpQVFpBVmVhU2ViaXlPakovWldEc0I0QmxXdkhkejFGTGc4UHRlbndEYnhhUFIxZDhzNE0wZlREd3J3b2Q5VGpYcjNlV1psTjJIQ29lVzVUajBVeVdlNFBjM0VZcmt1ZTFuMWxobW5EM2xVaUp0bGk3c1RNTUR2bGJEWGlTeDJVa1g2UDc4UFduc3lqYkdsam1MRUNveGtkVUpuaWNwYlRyZWMrK21MMFhtMk5aUWx1RFhTci9mN3N3ck9raHBUbjU5Y2xiVHlXUUdTbUxIeXNIT3hZT05nME1FSHFJYy9NTlUvTk9oaGtTM1JxWUNHS242azZRMlRMT2hDRDBweFZYaEZrVXhCZnQ4aWxNWHZHWG9tV0FwVXl1a01sQldBSUFBMFB2RzVIOWdNUTZrYVdHV09HSkZqYUxTbm5LdWRTeGh2bDZXclFOTTZNUGRvaEtTck5YVFNQaVJiU0xORVVJMmZOUXNFY1ZjZGRtMy84SnR6S3p3bHVLYVViY2RncVliUWRTQ1BHckZ5WWZGakN3dTJNUWJKYXN6YXZtT2FheGFEcGFmNVJBc2g1cnBUUndKbGwwL1NqcEJMR0tXVzhFVnVtWVJTSENHQjlNZis0MTR2VmhRWExMZkhGekdQNUhINDdJYU9RNitvTUJmajVCK3pYWDdGbVR4L0pzLzhTVlYwemFPOXJ6RDREak5rem1iTUF4RGJyNndEc0VBQ20yOUFhTTJYUFBBbWZWcE9RYnJSeEtDQWplZUt1Ym95Qmw4b1hOWnRNbDJQcElraU9tTWtjUGFzM1kyREc0SlhOU1FoWW9UazNjbkIwWmJmR21RdGRlNjFZT1k2RHBZeUIrZXF5U21MR0trTUFjWDdVbXQwcFpUeTdCNUNWb3BOMHNkWU41VVhMdVpoL0hOam5hcDN3V09rTk14MWdNcHo0L2dOTDhadGFUSm9FVGp1YmdIVEd6Q2l6REZIQ3VFZ1pmYldjaEsvYXpRc0N5bkpZS1FETHlIRnhmbDdqb3cxSGV4K05PMnB6YVZ3ZEdubm5mQU1VUFRrN2ZsVFVaQ2RtMkxTc3hWaHUySW1uWXlnWDk1blFDaW9zb0xnS0pBYUZSdmxuTHZVSFBzSGYxQmxTOXJJSldHaEhhMlIwTFFLVXRocVZvcTdJaC9ORlhkMjdzT2FvZzhGajRzUm92VjNPMGg0YVAyN3lSNjY0Y0VMTXNUMUF0SVAzWlQvbnliY0J0Q0xBYldsRXJhZGZuYytCeDRFaXR4VWdPK3ZpbUNVVHhreGRHNE4wa2EzekdhZ3BVaWhCRmhXWlIwdTZrQkIzUm9UNk03WExCM2swdWtBM0Jtc2VhczhVclBsR1RHeUJNUXZ5UldYSmttbEJ6aWdtaGhBamtISVQ3eFdiQUhDcE9XUG1ETEo5S0ZDbkFRaExXTE9sMWt5Ulk4S1dJVEVHOGJaanIwNTd6RGNVL0RQUndySUFoOXBhWmlEc3hEYS9zMnloeHV5MkQ1NW1obTFuRE9JbEFqUXJzRnNaSEZoSmdxYnJJbWxjZzZZZmtUSk9OOFlPMU5Zd2gwSUpmRVdTQWJ2Smg5WllXc0tUN1FLa00wT1B2aDgzbVJlZnBSa3JwdEVVOGRWZ3Z4dkFLV3YyOUtFNkx2ckpJTEp2YXM3aVNOaTdubVAyZVFkbUdpNXRhdXl4ZVQrTUlramFpS1JPckFBNEVpT095QUcwWEM0eUNNa3kxRHJUNWxJcjVwdmFOMWQ1SXJGa0hUU2FTQ1VaZ0ZVazlXYkVpakdBYzJMTldFSnBCSllLeVNjcnV5YlNPaXJKR3NGVzlpSW5yTVJ3dWNnYVJ5WVp1eWtteTZnZHZzdjFvYlZrcnUwZHk1d04wdEQ5d2tYOUV3dy9FcHY4SVdWMHNjTEhhbyt2QWROcDlaSnRjaGR0cDdKanVpUUJaM29icml4ZHBCM3pZem96MXJJSmxNYnF6TWgyK1R6dG1RcHN4aUY3WDhrcU1pYVZMenBWanpFd3F6SjFCV2ZYZnpuUXFEendZNEhjdWJjMTFIWGRMNGdKQkt5ZDd5Nk1FMDZPV0xFVjJjd1kwa3FNaUMxWlhUWm9YVHU5OUcwck4ra0FMckpFa0VLdnZRc2hXLzV6NkhMdExKaG53UVRSeHQ0dG90WTdnVGlQUXp3OEJsS3pqKzBPRmxTK3hrSFYxaGpHUHJoZ3dUSWtVU2h5dG5WVldKbUE3S1R1M2RwUExlVENsd1NZQmZCbElsK1U5NEVwYzJta1F5a1pJMEN3ODJtTVZVdEdBamtqZS9Bb1hzVElNV08yTE1JWTMrU2JlV29Vb242cUhuMG1iWk5WbHNnWnN6SXROVFBzTVdEaGRDREpnSGFaVDViNHdhdUZ3YU1qMUYrR0h5Um5RQTJ0cGJKalNNQVlNVTZERWlTdzlPbzBPdU1mQUc1LzN3S3dMcTN4aVJsemszQnBOUVNSRU9vcXJvMitDNkcrWVZoazFvMmxmb21TUnBOYXN6Vm9PcE15MnNhVjBaZFhXK1NNSGx3WlN3TmxHaWJkR2JQNW1vVkc1L2I0cTNReFo1UDNESmt0Mld4Wm1xZk0rL2tIOEJzQS9EdW5qQm5YT21lUFRKTzcvTlNncFlQbTd4bXpkK2pmem5IeGhDVmIzQXVaYVNJWFJteU1QVUp0RlgzdWJKWUxhMlpxOUhFQ3dFeFlzZ0xnYU82UnBia1E5bk04d0ZOSGZ4MlFVVjFha0N2Mlk5RFpKd0ZuSWNDYXBJdTZYbVhKeHZhNGRxd3pleHdid0k2TDR0clk1OWZqT0hpNkg4ZlJ3U2Rua2pHQU13RnB2YWFONjllY3pxOGx6Q2lmb3dXVGhWQjZLYjhLUmdkWnA5aHozTVBxUDNaZ1JNYU9lYzUxaFQ0dlRzcGdrTzNNamtFVFBWYlBBcEFhb09VMTJFcUNndGNRVTdSMS9aN1UvejVETEc3eVJTZW5Qd1F1aENWcjBRU0VPOFpPWjhBVDM4WTRMVEpqaHJ4bWlUOGY5UkJ6RHo0bDkxcTl3QW8xTUdlTnY3UGF6U2xzeVhYeGFnT294dzUrSFhMQUNxNmRxb3VjaFYwR0swa3JPWGQ0ZWFDR0lYMnVDV3N6YTNLeGdvMHQrRmlaaEZWWGVHMUhyTEd6bGJORkxhYmFqZnF0U25TZUFkVk5yRkptUTZZN2I2c0JhM2VBWGdjMkErVGJaOTZtWTJUeGRNTU9YOFIvN1J4YVB3Y09xMFptS3p6U0tGLzIxYkd6VS9veDQ2MnNQZnZnTkVGZE1EWC9HUFByT3R4aFdDUzdLbGtFWWo3UzJnVmg2YUlSVzRBQnFTY3dNM0M2R1ZzamNOMVlKbDlVaGd4SjBMeVA4T3Q1RFJVaG1aUTVVMnhqU1NaekFHZTNlNG9JZzY0Ykpsdkdib3dzU0NzbDNuWVh5YU90aE1FYUlvNVltR1k2UUtOQWpaMGJwUjRMcHdIVFR6RDdaNk1jc2doanRwRXEybk1NUVpMUG1hRklyek1ieGlCZHVxZ01XbHlQM2FJem80ZE1zNTJVY2I0dk9MZksxL3F5aWw3TmhpWlhaRmZHUXBWdUlKaG13a0puSWRKWVpJMitOZlRRZWpGTFVrMTNyRmlVYnZLZ1JvMHl4My9XZ1IvQXByVHE2WU9OdzJKNGVIbytITHNwTVhrUHpONVJ4c3pqaWJUTUFqOEJic3lTN1dxOXREYXNmODhhZTViVnBuV0FFVExPeEEwUXhHRHB0a0NNbUFzb0d1eGROd0JwcjFvM3htWWZBWmlkeVJxbGpveWxpenpmaExreUJtd3NROFEwQkRHdVUzTjNhMEJyTUl3RXFQbzZDekZ2STFPTnpEOHFaYXlOZXlTYmtaQlVrZzk4ZDJvMFVRd1dwT2hNQXM0Nm9TUUtRTS8waU9TVEVRS21iVmtzQmlMYjZqSmZIelV3ZkJET2JKR25rOVhrMEdvZTR0TFkzQXRyV1dtL3pnWlViSndaQmFpNTVTN29KNHhaYm91dllrTVhWV21YTTg3UnZvTjRNVU91UjcwdmZZQXp6aXJKR1kxcTBXeXhHNG4zcTJnQW4vaXIyelNzbU5icDNrQlhYVWZJMjJYZm5RNjd3WVhUYzJ6V0wwMkd4N0ZoZU1qRnNkZDgrYWh4U3J6ODY4cjBETk9TRHREY3FBK1pPZndSU0NGMnpablY0KzltMjNHUklYcVRoOW8wSDdIRm1LT0JxUUZlYXpzZE5zMVpRdXJBL1VmdmxwaUplU1dyTVkrZG9PQjgyWjBwMjNGWmxEbFVOOWE1MzBhUldZZ3ZJR3VZYnBmUHJCbGJEaTdzR0JLSFJpTUo0OHBKY2tXY0E5SkJqUEpHV3lCV2xET3lSZjZjNWxEemoybUZjRzRHa2tzYmxVbndoZnNMOXZnYmNJWVRTU00ybjB0Wjg4b0t5eG41bUpoWTZHK2t6cWx2VHdiU2dqdGo0c1NJalVOamI2bVJYZjYreHV5L2pWdjVPU2hHTWtHcEVjdWNGdFA2c1N1WjR5TXl5REp0K1pGOGo2Y0xTTE5TeENhL3BEVm11WnlSNjg0NmVIRUNORDQrRnpMNTZJSE5sV3JMdXM3Z050UVF0dUZiNDNXTkFLNHlBQmFCV0hrTllLWmxFN3Y2c3pJZkJ6L2ZZYjhSd0IvTnBZeWtwRm1sQ01rSXhHYlFsaVJMbnl0ZzlpNFpmV1RML2NBUC9NQU9tSjB4WDQ4d2JFZ2NHbFhHeUd4TGtETnEvWmhrbUYzVm1DM2JKOENZZ1VnR1VjeHdJVnRPcDBzV1dTWlByTFNzWmZPNEhrM0RvT243WEJNR21tY05lUFY2TkcrQURTeUhsSGFCbURWdVg2WDZzY0pTU1ZtSDFoUUcyV08xaEZCeUdhV204SGtUTml4QXZVd1ZXR05aVm9ibkhvbCtWa25qWTZBczJ3cW84V0tMejJGc2xXckwrcnhhdTd0ODNLbkRWemxqY053Z2tEWU8wbU9aazV2VHN4eWYxZFZ5MXB5eGZYNGQvRkU4RSt6S3lGMzZISHo1WU9nMkRsS29SeDNNeWRqOVZuUmt3bGdPUzNseXJ4eXd6aTBBbVR1WXFIQ1BsdlVkakkzbEo0bDA3eEtZUjJsaUF3cURPZXVTdm01VFQzYUxBMDhPVzNwR2d2ZHBScEh0VmNMRnBqVTkyZExqemp5aDFpaVBOQUtiL1hOZ28xaEJnWG5jek9IVlNSWVpBWTNqZmo3dVRhdGQ2OW1jTVRIQmJoczRzRW1CdFhvOFlaQWFTSzZ0WTJFRUJqcEQ2RXhjV1czcjd1QXpyaXZzYndXcTFTZ2E5WFk5RGVNRkFseHEvYmZNVThhc2c3SXlHVTV5aWJUQk51VzFLN0YyYkhWclpBbWhHb0J3anRuOTJ6ZXEwSmtzQm5kSzdWVFdpQk9KbzlTUXVZQXp5U29MRXNZaUJvZHFtMytiZmYvZ0IySlR2bWdVYkYwWWVHVUFqUXdXZ1hpcW9wU3hTSWRXczhrUzBNWnlSdzJXN3NEc3NOME4rQitER1hEUUFlZ0g1NkE5VjREVTV4MDgvM1pTajVhNE5BWldUSmFwNnNvbzMrMW1JT1FVYWMwSXBEWnhMU2VJRmFvMTJ3Vk41MFlZODRya1lPa3A0WFg2clpRaFk3eEJIUmZYQUdsYmZtOEFscW95Qm0wcjU1MDl4VUFTelYxZFdTWnBqSFYyNGZ2LzZCYVlmV1BIaUNXZnQrNW04VGZ3dG5QTXd2cmU1NWk5T1dOMkFyaDJib3NaeUFvMVppSkQ3T3hUVFJpME0vRFZiZXBaWnFodFYrRGtzbjRHYWtzMkdZTzREUUFMMHpkQVRmK1p5QkxaZHQ0RW1LbWhTR2tncTV0eWRFYXNPenJlR0tnUnEyVmNkMGJXK0o1WTZvTVlzVkhEaGhrQlVNbFFoYU1GQWpDTDUyTW5uVTFxeXBDVVo5VmN4amlJS0Y4dDh0WHNRN0VkY09LTDhTenE3Q1RNT1hWaWRKSEYxYmpEVlJLeHEyekhNd2tsb21VKytDRGFDVTltTW40UFljbE1ZNGREUnkxK1JsSWZvSUNyQnJtaXVqVWFJR3RjSDRHODNHRE1XSDNra1dPQlVYMlRBOUVScisxaDY2aDdLOVR5eG5aMktERGQyQzFrYWQwbHRGUmZ4ckxJQnE3TVFOVmFoUml6NmR5SUFaUWE1T2pBek1vZG5IZzNHYkdrSTFuYlpYWUhacllrUzllWVRUYnd5clJDMEVHNERyYUVkSnpYVkwwRHZ2dmxQSjBuNzlMRWUzdUxTT0FHMkt0dC8vajAxRmsvWnlHempINUt4a2ZmQitNWXJvNEdlRXM3eGtPMldjajh0QUV6NzJBWGJNL2YyTHZialRMTWpNS2xQUW5tNHJvenpUUzdZYWt6UTUzU3R1WDNhUXZ3WXFIWDNvWFJRa3JaTFVnY05RbHRtakdZc0dLY3k4U0FOVmFXcW5BM3lTbnJ2OFVpam9zQ25Gamk2RHNmalRLOVdLRGdURTVEc01sWFFFYmpHSllOdlBIcHNJeEIyK2d2UTROTGhNeWNtdTFiS2VQZmkySS9QN0JoVllCVnNWZ3Zac244eXQrejgzcTB3SXhGWUhYNjV5ZVNTYW8xNjdsbVBvU0VhNjFackRuakszMW5oT0gwNmttT1dhK21yQVFFVjJCV053eFpmUDVwalJtV29QV1lXNWF6WWdXUU1JekFnbTNucTd5eC9mMFNoLzBzQUQreUFyTWtMbVJQaTYwU1JqWUMrVFNBMlhzcDQ1djkyekZNT3liTXlmb3NBVzExSTM4MGxSOUtwaGt5UzN3MThNQmEwNFlOQSthOTdvRWxneUo3RExKQWtpWXlPQnJnRmRORmNzdVlaVzZMd3FZdGdkTTdJTmpydkpocDZ5Q0tnU3JWaGhWaXlCaWNPVE9WblhtajBHaXVZZXRTU21OREZEcm56S3F4ak5YdUhWSzc5V2Q4RmFXWXhYaW9SZElJQldjQU1sV2N1aklxQUtzazA2b2kwTjdGRno4UG0rVUJ5TUVLMzN4OUhiYVRTZXBhUFNSTU9nbVkzdEdBRE40TXNTWnEwMzRTZUNIV2xjWE9lUjFPakZqa2l5dGJaa09hNk1Ia1kyVVh1eGh5aFlKcVN1SWltT3ZaWlU0UkxJbkZobnR5VGxmQkpnalU5ZXZOVFczYmZaVzlOckJYUjZiWC9OMmFERXA0NzVtUnBEWWR1UmdTeDBPMjQxRXNLVFZsWFk2WTZBS1RReUphVjJiZ2tseTNwUU1iTE8ycFhlMFlIbExqNWs1UjF1azVRV2ovVXV1cElDd1RJTGRML2REakpSM2l6dm9obUxWUVZsdXc4dk8xcDU4WmdqQXJ0a3p6cGFQa0N6dTJkanVpeUJHVUJiVzZNVEs3Tm5QTUltVHpFSjBidTRNZWJFZEtFSVZGQjhjVEhPTmk3b0dOZEJISVhlWW4xUmZNRHp0amRrT0lONHVtLzdhNjNDc2dVNVhpU3NaekxhQko4WnFpTmQyeGZiTGNZS0pXOHcrRDJlK0NseThGa0tOMVpWdldqT1oza0xVRFZVUDJlSXZ5eDZ4dWJKRklpbU5qWjhxV2NPcVppMWJLckRWRFk4NUtpSVBHRWpaZEVqYXBEa0RHam94c2xlOExZM2F2TjBNd0dkRnFzc21jQVZwZHBqYitLbUhNUDU5TEZqbjhKWk11MWdXMExVWW9YM2JnZit6QWI4c1pNd0ZZN3ZuWXNlcnNsVUwrakFDcDl6Vm1rZFh5SzJsandwaGg0K1RJREZnQVlnTEdBb09tVWtmSkRzdnF5bXhqaGU4aWV3eFc5MXovcGN3YTE1c2xPV2VYd0N6NXJNQ3NjTzFXWDM5anVxeVpsN2lBdlVMYnJHSUUwZ0ZXY0hZa1dXS1hSbGJlTnRhTXQ3Nk5TalZ2M2NteWYwL2RicGVLMWNXdmdoN3N3emxlbmVVM09LWmpuR3A3NldMR2tvWHVhK0l1YjFja21XZDNQT1F5UmtEQ3BjVStuMjBtdXlzakE3TE1ETVRWREtSVEQ3YnVOSHl6UXg0a1ZMTlRYS25TQ3dMR1dNYW8weVlVcXpKbDVUQ252SkdQZkJXVmZoV3d4cU9ZdGRZYzBOakpnS0d5Yjc3TEowSjBuRkJBWkRsTDZ0TDV2dVlzbnpOeU5qdVFuU1ViUWRhK2xoRTh2QkVHWXNGTlJIQmJzdjk1cVlLVEtZb3RqSGo0d1NzeloycWdTQ3hnWXlKUHg0TDk0VU80enVuWFF0blo1U092SmROT3ZUVVpvekY3aGlROHl3U2dlUkJZWVFGaFdFYlhDOWw4M0JZbWJXb0NUVGduMTdDd0FicWlBVWlVTHBMSmk5d09MWHQvQXNaTUxQRUgwc0thMGJ4SUdWZkI0REl0YTVNaGp3WTVGVUVzVEpsRk5peXp4V2NyZmFlZFhCbXo3NEhacjcrelpGeFhKcDh2cHpNb3M1d3Bxd0xlZHAvOXhNRnh0ODVrZnJUTkw4U1FsZFpCS0V1ZFdVMllvMmlYUDRjUGpTenhHWkIxaS93N2JNdk92c1k5N1BQNkZJQmxOV1ZsWWM2V0xMSUZkRm55dXk0eTBMSDUrNDBPK3k0QVB4NkEyZDh4dzlHMDVlSFpaMWdmRENhZ3pDUGFlYytZZldhQTJhTWd6Rm0rcUpKQ2xqSnlRRE9TRU9qR0lDMVN5WTFzVW1XTVM4MllTdXdTaGt5WHR3VEk3UURXeUE1cklBWU1sb2dkM00wRDJlZUQyQ29HYkQwR3dJaHRHOWIwelcyUkE2VzEvcXpJdk1yYmtIMXlkb2JzeXpYV3Jrc1hTeVpmcFBrQi8zaW14b09vZklSWVdnS2x1ZStkU0J0M05XVlZIc0ExR1d2MzU3cCtuTG8wSmlOVm5HdFdHeWdydmNhTWRyb0R0a3FtSCs0ckdBTmlqUmwzTElPN1lOWUxqUklxRStIU0NqUk1RTWNLYnJMYXN3bXplQXgwbFNqV1JSenB4TWNsZzN6RU10eXZ6VzZzVVpvSmhEeUhYQWdnN3YxMzg0NHpxYTBsblhjUUF1aTFWb2cxWW56OExCV1EyZ0lTVmlraUJsZ1krMkFUVE05NnNQdjFVODJ3TnRlSFhUMkhZbWUwcEhwd3FvdWh6NmhyWWZDQ2pRWTVWaUlSeWthVnBaa3daTzVoZlZHWVN2dkNZeDFBUEFlS3dIeDJzcmM0bGRQRkM2VVFGMGxLTGo2bkY2a3hXeWdZMVY1YmRIVEVHaWJOQWtKbXhXSVFyUzFnSlA3ZHE4cWl3SEVDTWdzR0h3ckNTdURxZG01MEtzUmtXL3IrM3BGWTV4ZkJOV2g5ZTVBemZWdkcyMDZPckRJVEtHbGtsTGtCWnlXNVpaK08yL0I5MDVOVEU5aXlJbFFjSVZBbmd3N2ZCRXdiZmpXS2ZlZTk5b3dBWG1ESUNJQWRHemJzSURubFloSmlGMnphN1R3SGJXSEtkdC90TE5vRWFWYktnR0llREVFc3JmMVNTV0NYdzhkYU03WEo3NVZzUGpMTHRMYXN0QkJwQzNMZFhVb1pVbG1qK2dmdnNzaFdVR2tMeU13R2prMllzcHBjMHhYNHV3RDhTc0QrU0FCbTMydzZldXRPVlVRWHUyMEdIbXcrWDVKQmljOVZqdG03WlBTUkxYZGxsLytJekRHUk95cExadFNCVjVac2tTNHkrOVVrY2tNS3VHSGtNc0MxeUJQNSt4TGczR1dPREZqOXBHNE55bnpwUEpZOW52eVpBck5NcGtoeXhYRHN5T0FENHVnSVpkZGtmUXl5bExrTEVRVUNHcGQ1TzZmTzZ0aGEzUnR5RUpiV21WVXNHV1pHakpubmlzZnd1bkkyZWJqeTg2U01HMHNSbHdZekRYaFVvZ0lQb3Y5S1JKb0hJaU5XYlU4QnVpRUdUQk9iNW5uM2hLT2RJM3h5Z1U2VzVKZnQvN3dKL0x6dGhJblFFUU9DVldTZVZzelpHY0cvR1czTmdmUjN2Vm9FMnBhS0YxMk93OHdlMHhEcEhXajN5UEJTeDkvRDZJR0ZhNEtieEdFRXpueUpPOVlrdEM1UnRDRWJaTEJUUlF1WTFZRHJPbDNEd0R5UmoxSXdXbllNOU9nNk03UExzYk1VMUpNZFpGVGpzalNTNjhHOE1hZ200eEZBN3JLWDFXRWlqelNMQjZCSW9yRjRzM2NRVml5eVlUeGZwWkJvb2RRaDJ0WTJqRmlSN3FzdkFkUDltdG5sZXhXcU9DdExscGtGMi95MU5WaE1RV3l4MTdlRk1PcUhoRjNqVXhrajlhNDZRT3Y0SllST054cXdWTUxFYXBaWkpGVGE0bWRBZkZ4c0RhSmU5WTFaMkJyYlJxNThaZ1JxVGVibmJKK2Z1REthL1lQM0MzdkRpUFhQM0o1cUZ6Vm1Hd2xqM1RrejJnTWdiVmRQMWcxQ0xGcnFONmJRL0c0RTBnY0RTbkJrdEVUS2FJdTBqNTBacHl1amZqdUtiMjhTSmwwREM2eVJFRHQyek9EQWt1RzNOL2F3azFycldGZFdOd3o0MWQ4OXhNTitpd01SbU9FcEZlM293SnVPRnkzWkVmUXNlOCtZZlFZWnN4M29RalRyOEdTWnhTeGtWOFBHd0VnNy95S0R6Qmk1REppWjFLcDVWaDhtUUpBdDhuZEdJV2RzbWlzd28rT2MxckZKSFJxN01rSkFuKytBSUxOa0hCOUE0ZE5GV0xFdWFXUXd4eEVEMWN3S2gwMlRqTEhYclMxczJRQzV5TkVPQnpxemxKRUpKTVl5REVoY2tBQkxHYytjR1AxazlOVGY2TmVUZVJzeTdRQ3luRVNzTjFzSzVpQ0ZlU0JURUYrbGpHeVZtNlVNcDZJNno1VTdnUzJMZ0N6aVFBb2dsbkRwbVhNMmE4dzRYRHBDUEpkdHpqTlJOWXRMMmM5YTA1SHZyUlR1VWFWZkp0VVRKLzZINUhKWGpYczJUV3ZMUGwzdDM1dHRhU1AxZTlQMTcyU1hLcGs4YmRFRE9SQW5lNVhMV0RGUlFyZjVLeFpEbzAza2krdzJvYjk1M3JZcFoxODJZc0QxcnJKbUwyV2gwN1AyNmpZNnRTeHFaUFpzWFlOTE45Q0ZGWThlcWg2TlFUd3lZNUJEZzB6YVdPaU1sTVNKdmt3VjRFZ3VzSG1ZRFJJM0o0WWVKcWN0NjZRdWp2Z0w4SkthblVJc1E3aUFWZHBZcHJRUld5bmpUNFhacndnRmRvZXdaQWRSaU4zWTQ3Qzh4Z3dsbHpsMnA4ZDZCc2hrV21yRG56Qmx0YkZxdmdHRldMUE5Wb0FXcFl3YXdCeHJ6VGpMckFiV3pJWVQ0N3kycTRoWmJlT0F1cE15Wm1ZZm9VWkQ1SmVaVERGanl3cVF5amFqSzZQdFdMVy8zNEdmQXVESEJqQ3IzNFkwR3lmTEFRcnlJMHRWQmUrQjJXY0FtQ1hnQzhKcTdaWTNxZWRDd294bGRXYnB0Z1J3TFNCS0FWekdBQXI0c2hOV3pTVy9iR0dST21qYU1HY0xTOGJMWlV5Vk9EaFdBV2FGM1JFN0dHSjcvUVlnSzlXOXNYU3lrQ3h4QVZodG1SdlZqdlZjczI2UU10WkpBZHhJSENmVHFJNmFkRGFDcXpzSFNuT2VXYzNWZmlhc0dxdjk3SVRMMmhsK2VOb1plaFNNY1hLdFVIKzZvKzZyRnRNUjY4MHFPWlc0MkUwZWRNUDFHcXpmSnlpcmNhY3M0d2JXR0cyVEVGa1dGazR2eFVJeVJaVXR6aTVjSGFDdEJtbGloSFRLaGlINFBOcVFzSGdpb3JSbDhHYVl5QmgzSlMyNFNlNDY3SjZkN1NVajNFZm9jVW8vMlFvOEJzaHdDekpDZDJCYktSVnM4TFBwVVVMYXV3Y1pQRHVWN1ZrR3VKTGFwNlZZL0VFSWRJYStzTTg3MVJhazBzOHJoTGZndXNhOExmWXdkVWdqdzZwS0lRcy9FRWhEWXBjUFljMElxUmdTSmgwcG9IVHBNRnA0anlVQWQwb2FuVExOUElBMEg4TEdRczZMS21uVUhMTis5RGsxYkpVMFFtNHhiQUFTRklGWlpwbE5RTGJrbHhFMmNuSjBaOFlyeURaWmJVb2dUVHR3eks0RmRqVXpBZUVpT2Q3SllodCtrcG16MjBvajlwMkxqTmwvQzhXK0c0WEEwMDdLV0tXMnJTYk9LVVdBM0FCWm5JMTJsV05HZ0F1VVZ6WU1RM2JXK2phbGpsSnZabTRvVmtiVU13TTBIbkFvbTZEcFFzK0JhSlBmaHhXbWpQSFcxbEpGeWdnWjNFQUMwT3dDbU8yczd6TkhSZ1dZZGN0b0l3MllQcEV5d29EdkFlejdBUHpoeVpoOXllRCtla05tL3RrRVVwOWJZTFpoeGJKNWl5a0l5UTBWaU9IRThLTTdPWFlIUldYRVNnK1kxdXdzN08zeWxTRkxMZndWOEczcXo3SU1OQk1nQnJYUDN3RTNacm9Jd0lWdzZ3YWVyTnM3MC9wTHJmWGdqRE15QUhFR2ZnM2hPZVdSVlhGZFZJTVNFOWFyTTJsMUk0RU1EQm14YWYxNGpnaW4wU2xsa0VYWWhZRlhGVGZHQWNJT0NwYyt5VEY3bEQycnVRZ3hnUzRYRE5uaUtxQysvdUpnWWo3VHNYdjQ5SEF5d2JveklIcVI3ZlMzcmlZV1FZTUJhWHJ4VEtBS29qU0V6ellnV2w1VHRoN3JBMnlYWHhNQnBFb1RWK2c4aFpUY0VucUExcnFxTjFUYWw1NDNmK3pwbEtBSlQ5WmppZHpQUFcrRkw1STczendzL2VHSGFEOUQ5ZEhuYnNzWDI3azJ4aC9tWkdPank2UnRoalNpVytQWnIyZFJuSHJlYmwvK3ovY05QKzF3R0FGRlQ4LzhlbTVpT0JaaVFKWjVET3pDQnFEeGNlVGZtaUVGWjRaWTU2TGlRZjBXVzRHemJYNEViaDJVSVJWQ3Vsam04OVpYUHQza1BGaUtaYUFaWmtKRW1aQktDNjRSVEFJNkZXWnJEUm12ZDVFcFlvT0RzN0xTblVXK0ZtUWFrSWRLVTNmUkxPRXZwY2JNN0RkUFZnd2lWVVNVS0I0a2llVFBuWldyeEpvVmtUc2VIQnFYV2UwMzBOYS9WNTVoRUZJS3NXVzNyYlcrM1dMYVdDNXB6Rm1pUG96QVVzWWFvdEtONUl5N0FPbDRsV1oxazNsWWRBeThCaDR6OXRqVm1KMnphK2VHTlRKQTh3ODZBN1A2N2I2VThyS3h4Kzc5OGh1WTg5N25tTDFEL3dTSTJRVXJwbUhRREd6OHBDNk5qVDhxZlZrbGlGcGZ4cEs4ZnUzNHhtMVIxK0hDemhsaXpkbVNZNVk1T2lyemxnRTRrUlplMVpVRlJrdk5PSGlkQ2JCajA0NGVLajNhVE44cGlkeVM5MzBBT01vblk2REorOHJBRDJmTUpQL2NLeEU3YVZTd2k5dXJuMlNaSWNvWVhlenlkd1lnbWZ2K0ZYUG1sME5OdkRjMUNXNFU2L3dCMEFpWTRaanZlOEZjUUR6aXZwZ2lUVXQyeHVOQjk4QXRSVkFCRjIvR21SZVZ5eGw5RytZZDYvbjIzdjRaR0Z2WnMwcVFrYmQ4Yjg5UjYzTzBlTy95blJlUFUxR2Y4aGJmZ3RUeThYbmZxaFAxK0hhOE0yYUY2c3BneEppWmdEQWE5TkI1L2ZlMjBEUVJyR1d1aTl6UnR3QzhwajErUVc1NmNXdm1INU10NndDaGc2NWJ1a1ZIV2JxQWJIaGd3NzNSRitIVUVpWnRlVGF6SmFTVENSQWJtS1pOdjVYY2lONENwM2ZkMFYyQkxaSkJOUWsvNjZNSEhZUWcwVnd5SzhhbzBxWCtiQUt6bjRKaXYySUpiZ3Z5UlFKVllKT1BKR0E2eUNGRlBtbjZYWlZCV21USDZvT1paZ3pVN0RhTlFWVCsyQURhM1Q1L1hyM1JQbCtsalBOS1UrTVBDL0pGYnhMRzJ0aXlsWW16WmNoakQ4eXVqRDNXYkxVMENEcGx3bmFTUlpOOXRnM0xKdE4rcGNPK0c4RFhBZURKdjdUU3ZpNTZmRlY0TEwwY0M0RnVueXZHN0YweStzaVcrMHQvNlM4RjltY0VjZUt5NWl6VWZIVncwcGt6ZnQyczM0QzdIZnlHblRPcDl4cUQ2UXhDMm5hTVdEY0dHT09LRkhuZVRnSTVsczN5MnpxYnRXSHBnb2xJQnJJU2hzMkorVEptRVB1eEV2YU5nVkszN3I5MWxrdEFZb2dDcUxXTzVUb1QyVFBKeUdDa2gzNGJIWS83V0R1ZE44b3gwL05GMThZbXFra1VnQzZTUnErQ2dTcmhtUWZzOHMvWXNoM3dVcWV4YzNCR0krWnVPUnhraS94UUxGZW5aclBTamxXUk15S3h2MS84L1kxcXpYZ3Z5RUovQXptbndZZXRtVTRDeEVCd2luUE5ac1ZZckNiYmhSZW8reUxDZXhYcTdhV0lkV1RCSmQ3dC9saVhmQ09TZTd5akh6cDFqMVdnTFR5SVN2SjBQMDVTR2RoZVBxNG10NnMvdGJsSGJpV2YxYkVwNTNwNjBCY2ZlOWxCejlpa3RZWHBZZy9ETDMvOEcxYWlScTQ0T1U5NGRLSGc4QzZPcFREZnhERFlDWC9Ja015Mk5TdkswUlFCWlF5Zm9senhqbmg4Z1NmVEx0L0lOaCtiZTZVbmQwWk9CaGhNbDArbGhBbUZaWmw4a2VyS21FMVR1L3pWNkIvTGNVbDRyQWNrNmhvZ0RYSXpRZUpnRXZuSm1IV1dPSm5NY2FSZkRPRHZtdlZpRU5NUFRGdlQ4WmtOUUJBVHZZTnBTSkZBYXJMVTl3dURrQUMyN0hHQUZzQmFHd0NRakRNVEtXUEJOQVdaQWx2YjFHTTVDWEM5cFVaT1VXUlo1SkVBQzMvOTlOVkRyVnRYanpBWUt1MjV0NU10WnZiM080Qmx6eGhJc1AwMS9WTUEvRUlBZndJQW52QWw1SnJjczlwYzdlRVkzNHpmU3huZnBYL04yYytZQnR2SkZUUHdCQWw5cG1VeUJpMndWeUFMKzFiSHBBSFZDcXFZTVhOdFo2KzdZaURUQWFLYWpCQ29jNVpXTW1QRTM5VS9saHJTOTRwYTVKLzlZUnBwT0dXWTNlcEVoc09rQTFPYUdHU0p1RnZuQjdmRTR6Z3FnSEljQjlwM2J3VEFTcXNsQS9abUpyY0dFRzhFQUZteWVETXpQKzRyS21ZenJLZldXczNzVmxXZDVhdWdMckJtMm9jakthUFZsVTBiSm9hK3huaGQxWmxsUU8yeExyYlVkeG5WakxGOHljbXZuZEVuVzFVNnlSeGRBNll4NjgyR0l5UFhsMkdWcEEyM3UvWllzTHJSOUxEWmVSWGVpa09tT3dpck1xTFk4dlVDT0VQd1hJeldrdXovNkFMQW9tZ3llMnhvMTNiS3BYV2s4QkhtVXkzdGF5ck1pOSszOERnSFdONFhoWmZwcys4TWFycm5zajRqZ0o1MWlZV0kwZDAzQWRubXRvWTRzd1BqWmpUQ0UvbHJhS3Jodkl6UmRTekQ1ZHg2bGlxZFlxblF0YUFCdUcxYnJqbXlWZElUWklvbGQxclV3cVpGeWdneWhXQ3VmdjB0V2doNEJuVXRYVWIvUFFWcHRvQ1VuaGdWdTRzT2piUldNNUJkQy9pMFdnQnVKY0UwdlVic1JqMUtadFU0dG1GRWdBbmo1aVVhRHdid3hTcHRYMHZESU1hWlppdERsbytueUowbUhKS3piblZDRzdyczNHVE12ZzgzRTZsaHB1Zk0wS3V0VE5tUnNXNFdXVE5keG9SbE0zRi9mS2dlN2JaNWIybHdkU25XYXMydXBJeEcyV1dybEZFdDh2dUFBdGVXTVFEYm1lS2ZHWHU0Z01ROForeWFLWHVBL1VxTmZLNWtqd0MrTHdJemJKN3hWOE53ZWQzcmUyRDJMZ2xxOGpxdFM4YnNpa0Zqc0VPWlhGdkhSZzEzMXJiUjkxTjVvZ0M0bEtIQ0RJam1lU3A5SEV5YU1sM2NKcldRSjNac1cyTzIreVBUajBVMlNYVmVZMTk1MjhSMmpXdzFOZzRoTU12NzVHU3RyK0JRWFJkVFpzeHBrSVZCZEg5NkhGajlBeGlFalhsMXBicXNpbjlHUW9rRnUzdy9ENWwreEJCa2Q5dGFsOWpVNkhpeU5hVUlPNU5XcFpWZXhQU0RkYUFtUUMzYkNZc3NoSVl1SnlQZHZzUWlZMkhMTkhSYWMrS3kycjQ4dEdDK3QxUXNHVmt6VHdTbncxSi9KMlY4dStxMjkvL2UvTW55R2dmN2d0NzdOUCtWMjVRdUZxeTlmL09JRXR6ak1vTTZvdCtUYWIwWnc3RTF1d3dwVklvR0gyeWhuNWwvTEpyQVlKdGZrdW5xMG9obG1tL3VtS0hlUzdDS0kwNjNKQjI2RXpxTVNRb0ZUSStTdjBaazNyQ3FUY2Vwa1ZKQTFURUdWcmpJUUlCaFErMVp3cEtKZk5IWjNhU1pZZlFkd0syN01oYVkvY0lsVkpvWnNxcHNHQ0xvMnRuckg0a3JZOTE5TGhKUXJZeVp5aEozZFdxM21YVlFrK1ZxbEZVV0sxUVJOaU9peTVBeW1sakwreUpsdE1BRlQybWsxazlXQW51c0NHRWpELzJjaWU3UDdPL1AvNTV2aVo5QmYrVHZmMkc3QzlYSW1GMFBTZTRsR0o4UzhIblhjOHgrc2dJemxTdXFiREZoempvN0ZyUkl4M0Y0WTh1Z0RCMnpVd1I0dWptR2liMTlaOGhjR0RHVlBMb3daMzFWSGZDTTlpaXp4dTZFQ1RCelpRMmZDYzRXcWFYVW9IWHJld2FCeUt6NkdidzJOczhGVUxFYjQybHRXM0tOQk1taU1LeEE1SktpcWtuenlxcVE2UW15TW8rR0g2QW9zSlJrd21QU1Jsd3dhTmZTRjBpamdaT3dzVHNZS3hRMkRaSTcxaW9JaDNlc0NqaXphSmNmNnMxb25NK3Y5c0ZoMkZkN29RRXpMRkJxZlIrUDl4a2NyZ0xHY3I2dUFPVGlHTHUxa1RGN2paNjdZRDUyVDNmbDFOcm85eVAyOUhtZ3NtTnJhV3h2SHkxZW1DSnUyM3JxZ29qb21wZ2ZDVCtSMWVoV1BBbFlScXFwSE9NWmxsdjVEKzczc3RRdHJxVGYwME5iQzFFMHhZR2I1U0hTdzRFeFFRZTh2NmJCYnI3dEN0bkNwRUdDcFQzSUhLTklzUXhMOFlJVi9kd2xaTGZneEtoMitiYkpkZEsyK1JKVW44c1ZMU0dFSU5NOUEydWtCQng1MzVqWmFHbE9HYWFqdlZsVSs2V3MydEpQdGMxN1pyNFEyU3FIMUp2UkRoUUJhM2RnOWpOZzlndFhsdXlCOTlpeGJCdUwvY3o4NHhBUjZMWXVqZHdpbVFsanhxd2JoWER3ZFhkbTVEQnFZczdLcllTZ2FVN3RPNWN5NmwrMHRiRkV5Z2dCWlAxNnZnbFRkcU1uZGttQTJ0N1lBd01BWnJWa0ZlZE9pMi80OTRzZCtHa0EvajlQK0NMV0tIVzdlT2lsNWsyOU1QSTlZL1l1L2VzaHhkTEI5aVlaWWV0MGROQ0RLVnZMV0trem9PZktyckg4c0cxdnlGV28vb3hkQXpYWU9UZ3ZKb3hZMnNaczNnVTdGbVNPR2ZqUzd6RFl1ZG9teXpTUDR5aUlqb2RPV1dPMWc2MmVWOWJuQWJpUjlQRkdHV1pESHRtMjJYUE5CcHFndXJwS010SEtHV2kxMXFQZjAvaTl1L2YzM2FteDFLdHhuSXg0cWduaFZGZGpFSy9SRjRNWk04NVczc2tYZTRmOEVvaDU4aEJIcGs1U2F6bHhZdVNBNmNDVWRUY1RXeHZkZHdvV0hWVFNGR1RTdHZtQlhCQzRjOVJqcG14bHhUSVJJbnN1cm5LT0dDaXR4WEl1bnBnc3FPeXRPMlMvMkpseEFyT05qUEExZ0pydmNSc0ZGUHNsMEYyVS9KNnVNYm53WGo5TmI0RS9mckdRNWJnOVZQZHRwWTFuUjBMM2Z1OFg2YlpwYUxKaGxqem56ZktSR0hIK08vWWdwL1lsYzR4aU1GaWJWeUQyZjFTSDVsVTY5ZXpVbVAzdTdIU3dKeGM1SXJCcUUyNXg3SE1SeG93TjlVdFlZMnlaQlY1dXpYZXlVMkJ1U2pvSml6WU9TK0xJRVNTTWlUN1R5aVpFMnlDbS9odFhSbC83clR1QUgxR2JERm1VNUx3VjVUVEU4OThJQk4wZEdMK0tnaS9jZ1E5ZFQrekd1THhQNWhXWnQ5U29YVEJub3c0Tm03cTBNcG13YnJlditXYmRqZEhMTnNjc0JrL2YxMVhNeUQ2LzE0aEJjczB3QnVhbWxMRktxRFNDelFlV2dZTWNtTzFjRjNQWm9yMFdzRktXQzVmTDJrUHJvZmZmYnNCWEFlQUpYMzViQTNxZnp4cXpkOG5vSTF2dWlqSExRSWlBSldhNzFDSi9BS1pIdDdWeCt1dk1XTm01UDc3T2U4a3hnKzVQeDZjaWtTeGtrTUdaWU1FVTQ3bU0yUTdrRWNEcjdlUTZPOU1hTlhaODdJQ1BwWXRzMWQ4Wk1BYm5uTVBXODlUa3Q2SHJYY1FoWS96WVZ5ZkdWQlZUQXhKWTRzRnFYUmswTGJuS0hPVzVVMWNWaVBra25zNDZ1bUVEdGtHV0ZVbUlORFhlNnVwZXdsQ3lGa0tYMW5hdXpUN3NSSk5wWXFIZmQ3SW1XV1l1dThQV0c1UE5BSEZZRVdMNTFvbVJweGNKa3Q0N05IWitMWUkwYlpVZTc5b2NMRjhuOS9nNXdjd1BzVTlxeElGbjVrcGZKVjAvNTJ1UHNvVjJ0WjVyTzQxSExVRXN6V2RiUCs5dFJwNnpzOEw0N1dMaGRpc3NQZFU0a1RQeVo3NHFRL0p4QnNKZDJEUTdxU1hibXduTW0rK0VUL2NNcDVXekFWa21MTnJCQjZTTWx1YWJnWmFKY2t0bHdoaWNvYXdnTFhoa3FJVitpY1FUU3hTMTNteXgwTmVPck5TWUdYYldDSll3b3NKV2VjWm9iYXI5VENTanJ4d0FmaU51Wkt0L0pMYjdaK3paY1VGQmFrMWE5ajJ1VTdOeVhaZUdqWFBqSWwzVVdyUE9uRm13MCsraDAxaHF6YUowc05MVld3bkM5VlMwbXd4THhLdy9FOTU1WDFQV3Qxdm9pWE5tZzM5ZVIyYkx0TWVsajQrWmhIUmV2d0svQWNCZmVjS1g3REY5eE9NU2t2ZU0yVHYwN3d3czlZNDdBd0VDU21mZlVRREhHV0JWUUZ6bW5BaGlYeGlZYkhQV0xxUjN6dSsxcm96QVdXRHlGTGdsZ0FnWlc3ZGo3Qkt3dGRTYVhiQjlwa0NRR0V5VlB1bytMKzhiMDJaWnJwdlczekZiU0xKT1BzZmhhVmNWa0NYZHVCQWlMUWpMTnoxL0YxZkdJd0VKU3I1VkFtaWVzV2VQLzFqV2p0ZVFTcEZqaVhiUzNNVXVYM2lta1dObVF2OVJ6ei9WWXJJWkNUTnJMbzRJcTFqUEpIL0tnN1JSclNKQXpvem5lV1oxR0gvc2tzK2lJTkpwVE5NREp4TXI0UG9qOTZoMUJEaDdCb1VhWXB0eVJBdWo1UjVjQlB0Nld2ZlRJc3FLWWJUZTFtSHhjakQxdTFqNUJRWjVDd3p4K2EwNXZjTGRDRnR6MExYUHNRQlRWQmkzelYyVmVaTWxFT0ZZZzdialFpdjZER2ZOaDRuTVhWTG9BWWo1Q05xK2Q3SHVwRkxmbHhoeTdlTWpEeEswOC9jQXV2VmdhaU9EUEhSdTcyTVpkUjZaZmhKSGpabEp6OTdGWWNOajdkamlST0dUZFROUFRVMlk3UXF5d0hRVWZjMXU0dmszK3BzaXNRbktQSFZpdEFIMC9OUWdoTSsxVWw3UmNHUE1MU3ZlWUdYZmttVldja3l6dURKNmxDOEc0TVduRFNlMitTbUJxVnBNK1RIWUxsUmF2U0VMdVplMHp6NHl5NzVuclNXRDFKalp4WFNwTzd1c1VTc1AxSnh0NnRZQ3U5WURyNS9yMm1pUlZTdG50V2FyWGI2UmhOSGEzTTc5MXNDUThXQ1FwUUhRQUVJdDIxVUE5RHBNOFhxTTJhT0FDeGZUNWY3d1BYZkc3RXQwc3oyVEttYURFQ29IcW04ZitMelBNWHV6ZjJydHptQnN4MnpSNjJMRVFiVm0vYk5URFpydnZrY0dFa011eVFZVXgzRjA5NytIR0RGbTdzNnl6UkxMK3kzamRjYUVNZWg2RTlhc241T3Mxb3NjRW51VEM3azNEZ09RYnVMUjFZdk40S01RS0M0enhzeFQ4NC9POEd1Z2RDQ202RHN5YjBvWitXR1llR0g0cGlTclp6Q3J1U0dEdVozUng2R3JsTnVYYi9yejE4U0JSWC8vTENrN1VINDFxVU5ETExJRDBYL0JBRVRCb05qamM4NVpLaVhMS3VkVTh4VzlFRmR6VEJ1Y2xuSnZHVnMyR1RQUW1WZ1Q1YkxZWDVka21TaXVwRk5TRC9FcFZOVHZnVEJrNTcrcUJJNVBFQktDaXdPYlM1MXc1N283eGpjZTVEUHRodGF5TysvZnI0RTk5dFJ5M3lubXdDMUs3KzZPaHBIejZabnVYbTBHdWRPMnh6M0k0cGszajlKRTJ3RTMydllBc1FOa2lyRFJLNnExZWk4Q3YyNjl5MVVIQ0laUFdHNGM5VERLS1owaDZuMlVaL205TXBTdDgveFlGbE05RFhIYzU2QkVBTk5MWVpLdEVrWWtza2F0a09sdWprSGo1eGxFYm5Ccmh6dFpjQmp0d0FzMGRXd0N2WkpVcUNIWTU5dkNLOFRXeFpvekk2YnNySnUzU0JnUmE3c3lnME5qUFdKQytBVHNkdlo1aDZ1d2xveXRDL20wS2RVaXVIU0Z5UmE0N296Wk5DdkE0VStBL2NibzNwaDAyVU1xOTZaTGYxYTBkK2gwckRWb3lHclNzcnd6cWtzenJtZmJnRE9WT3dZMmJacUVHSUV6YjArS0tXM2tHak1uZ0RZOUhRR2tCdmtxWDh3WXNpbFpYR3ZhL0xWWXN0Y3ovSGd1RUV1R0RuNlRBLy84dmNic1RCcnR6NWorS1FDejk0elpwd0xNVWticTBkZEhnUXdEUEdiTStxd3V4MlBHakNTRW9mNk0yWjVIcEppdk0rL1JmWHVrN214anRHRVUvTnpCWkcxL1JqVm1IWWpWenU2MVkxVTdDOVlQR2RXaXVXU2dqZnRQcXgzc2RXWUw4TkovQlA3U2VRT1ljWGcwRWl2eWplRkhMOTNvanZMR2JObHgvL1AyN0FoMVpwWmJiOXlQRWJuS0k4bGc5bE9XUHhseE5XTENWQU1uam95QkdreGtqVjNLZUNBdmxPT2RXeG91b0szZmFObENQNEF5RzhrdFRvREFxZk5WQS90bzIzcXkrZW9qUGpxUC9GYllIRU9ucDJHSXlhT1Z1YjArT09Fcm16TFlyWGtNckFaQ0pyQTlmWFI1YjNyUm9JRURGdkxxSXNpdDQ5cnVRSWhnQXA4T3podzNIeDFmQzBqUkE1L0o3S3d0ZVhQanhqZk82eDNYMit3ajF2Z3Nua0RJUXJ0Z0xjUEhleW5MWkJFaFl3K0RaVk01Wk5zNWR3dnNSQWM4Um5XUkxoMzRDZFJhMit2czU3ckwrN0Z0TXI5cEUwMEJ2RG5jNzBETEF1UFhycDUyY1l6dk1VVXpjc3dRYThZeXAwWjl2OXpwSEZlMVpjQWFLSjExOW03Z3dPbnBVRmRJMmxpWHhDK0djQVdaeWI0blhVUVBYU0VQekNxWGJ3WGJlK3h4UklZcDFKRVJYS0pVejNQTEFpanpmQjd5anEzY09pM3VVQ1puSEEwbXdLWEhjcGgrQ0VYNHlsNmhvT0JWTzBDdm1OcnJyb3Jvek5wOHo4dDBOcXlLdTBtMWs1bzBaY0V3bVRGSWpWcmZ2eXAyL1dNZFpiNHFJT09jdEZxaWxMRlFUWnJkcFkxbTFvenZDNFZOcnc2SWhUTExlanc2eExQVTVkN29kRjh1eUlUemo4c05WeWI3OVJneGUwTWdsaXhiREhqMWhDOWFISkxRRHNxVnFON3BCMURmbTM5OGxvRFpJd0FORnpWbW1IYjVaOEFzWmN5SXZXRnpqRkJ2dHBFYUJzQW1vRTB0OVZXU3FDemJXd05tbVVYK1pwNko0Nk1SaTJiRW5qRkRGcXp2ZWYxOG5wbEY3SGI4SXBWa1lKZ3laQWtRMDcvaUlBVVVHUk5tZmZWZzdnRXNGdmtaR2RYTkRiVzJyRzZnZ2RhYytZTlliRjNBb2dZeXVETlNMM3dBTnJXVHBHSzVQbTlJR2R2RHNzc1pRMzJaYjZTTTFFa05BTTNsdmwyUk8rVjVBRzB1VEVNbG9lT1puUEdBNDJsSUdkY0lhaVMxWkZqcXlhSW5YSVNMYlYrT2cwYnd5Umx2TUZUdFVlTWl1Nm9ldUNGckYxNGxuYU0xZG1raEdaMWxhUmJBM0pDdFZROXpLcGkxYSswYkhZY2EybWhXQjZpcFpOL2QyU1J2bWpIdkFNUW9qYzVyekNhcm9pL3ppY3hHZGwyU2tUNUp3ZnN5WFFKYUxXcDl3eEdVeTZudFdRTkYyU0R0Tk5ld2NXOXE3NjNDNnBUTnppTTlkYUMxcmRSc2dySStpRk1EYTJLb2xiVFNsRC9ZZ2VsZ0lQc2wxRjBaalhSekE2QWxnVnEyQ2NnMllCZlJIRGx0VFRIaldnOUxnUm1Ddk5Fb2JCZUwrWWVSR016RXBkRkNEVm1CdWpUTzVXYjlqV1ZXK2Z6eklFSkl5N0lHQVZYV3NxaE9xS2d5c0pSbytuL1c2UzJHeTA3MGpsRUxjdE5NSVJFYXJOT29xemlTc3JzTXNMWDg4Sy9CeTA4RkdpaDdhcStCTFNPR2ExdC9sblRaTGFsUHc0TzJtTFZFbG8wL0Z3Smt3YVZSSlpIcTZsaENYZG5NTlpzMVoyWmxnRE5jU0JtMWxqSTZpZmFubXBIaklnTDdsdVg5eGV5MFBSdjJKcTZLandDdFI3K1hUUHZwRmZhMXU1U3h2QTFMMzk0emUrdkE1L2Eyc2NyYlhObTdaUFNSTGZkbi9zeWZlVFlybHIzZnlTRWxNSHB4UnJ5YXgrQ05IU0V6S2FTQXFRREF0T2FLbG1PWlk3Qy8xN29zUkdNUWV4U2c2VEs3MEdvSmVSN0hVWUhhN2hneTROc3hkVDFrV3NDd2ZzZk9XRTQ5VjlsUWNNM0daczdBa09kQUxDdkw2cmluSWpIOHNCVjBxUnB3S2JuYWtmM0xzcXRzTGpnbXFrWDJvUDZRYURnRmVUSTdsaDJnUlk5SjRCQ0pkTXBreDVlall0RGNzbHhlR0lPbFZ4N01BN05XeUNiRWxuRHB1bGxyRmo2ZFh6dGU2d0JnNDAxblZtcDJyYzBxS0VqWmp3M0FJOSt4UExUYXpNaldYOFBHUWVHeXhIMjFubXNFa2o1K0lFNGo5QnpBSER1SGRRQnhnNi9IWk93WENSYkRLWjhzS1dSMFdUK3hpSkJCQk14blhXaUgxT0t1YUlHa3pZNWhhMmcxT29ZVkNQVnF2b2h1YmJHRElZRHFscHZGR0IrdnlZNE5JTDZjdHh2Vms5bjZIcHhhM01iZWc3eVI2ODQ4aVVwSWUvNGpLTmZrakdoRU5IZEhKMWdwa21NV0hUUXNNR1VSRHNiQWFFNVNRK0FMTE1qRUxJc0lpeG5iQ1h0bUVnbG1oSE84ai9zVCt1TGc2VUJLbXNUS0VTTnVKVDUwN0tRMDBmeHNLTjQya2tVQlE2ckJITmtCaEQ2OUFJZjlOTGg5ZVh5dlpMYVVra25Ha3RrT2xKZ3ZVY01RclpWYnZuY0IySW9KS0pOdzY4Vkd2N0ZsWFJKWkwyclBhclRWTDJhRER6dVRNcFlHMTI1MHZkWmwrTTdlV2hhWnpzY3pnUmdlQW1YMkxOWXMyY1pYRFA3VFpvN1pqaGw3dEhMK1U2b3hlNTlqOXExanpEWXNtUUt4aDZTT3lybzFWcWp1QUFCTDc4U2RVR3ZJbGphcXpQR1pybzBhcWd3MStiaXFOMU9uU1ordUhaYVJVSDNmcUthTTY4QTZZOFptS1ozNUdwOGZsUjkybG8xa2pHaHNKUHI1WVBhc3l5bzNUTm1zYi9NVi8xUVB2Z09ucWM5cWxXOVVqb1Y2ZDRXdlJSZ3lqOWxtUXgyb0trQ1A5V2ErWS95WHo1WU00WWdsdnBwOEdERklnem5qSXJxYTVKaVJuTEVIUzNkamtPREk2SnZqWnhkalRiYU1nTHZJRlRWRWVyWHc0S1o2Q0pqdUxKazNqczNTYjYzcGFVamlyTG42YmRSUGVXT1ByQTdRWTlSSkh5WWRiSm9SVENjSXRCbWJZSGdDWWduaUdUTTYxSkVseloyWlQ0TVB2ek5PczZhclMrc21zSngxVnRicXdhd3hXUzVBRDdFY3hpZWJkSmYvZVdUbUJtNmNBSkdOVDRKTTFLWTBjcXliYXR6dXRXT1QweHpMMWVneE01dHE3WngzNG5oQ3A4R21XUVNhREFxZGo1RU1KQmdmTStzMVl5eTRtNERSMnY0UHNHZWU1Z3A3NzVCMmR3bW9wWi9VblpVYkdZRWdZY2xzdzU3WjhoczA2cXJGS3JCVnpyZ0s2RXc4R0Ezc3VHaHB3UFNlUFZ2anJuTXdwdjArWTNNUFVPeFhTUWdkVVFPYW1ncTJYT1pnaGtudjJTNS9LVTI3clZsbjRGTzNUUTJ4RFNqTFhCZGpuSGV3S0JsVTRRM0FxOFk0NGNONUFIdXVHZG5taC9jOHJVMTRNdUFWN2t5YnlmdEQ1SkJxQkhJZ0FyKzZXZjVReG81QUtNc2tlNGFaTW5zMUM2RSsvek5qS2FOSlRaZUhCTDRxVHFGcmVQUzFzY2NqUUdzVlN6NHVNVHlUS2I2bVpISFBVQU1meGh5ek04bGlOcnlwblpyN0UrQnRNMXp2T2dQM2t3R1lwUUhRaUNZZWo2NGpsVElTSTVaSkhFSDFadmFnclg5bThKRkpHVS9aTFVRNy9UNi9aQzZSTytNUEJwMzB0NnpqZ20wYk5XZVVPY1kxWklXa2lDTUVPMkhVVElCWWtDUktyUm5iNC9jTmw4RGpKTUFQUU9tWWdzbWJrVGZrT01zZ0RzdHduUm0vZHRKcEFRNmVtTFQ3ZHZXcjZNaXZ0STIrVDh6VytySUExaW90UThIU0VHREdOV2JkZWpMYkNUMXVKajBPUDh0UDBwcXg2S1JYRVNWbDJXYjN3ZDYxY1dlellNNjNxWElNaHh6VFdpT0RTRzI4c1dmQkRmMWFUZGdhM3VkNlhndjlYSDJFS2dXMzY3R2NLelpWVU1uRHNnLzcxN2xlaFM4UHR4T05SbVRtSy9odnJzMDFqYzJMb3NMbkh5UmNOOXVHWlBheDVjL2JOR0ZnWGJqVGs5VUdHMENwTDdQUzVJMEN3aFRJUVRNV1BGQTBXc01TT1N0TFpJNTVyZGxhS2NiTVdSRndGcDBZZTNmSk4rd1pzMk9Xc3FzNWVjU0RBVXRHTTBUV21GbmtXM1JsNUpLcGt0V1FFWUU1TUxMTjAyVlpmNVdXU1VHWlpmZFN5OW1vSUdXVVdqTlFQZG9yLzJYM0h1VlZGM3d6My9SZzI5cm1SMFYwbVdSU21iZGpaN2t2MGtjVDh4Q3pqVUhJallLcHA4eXgzTHFVc1N4U3h2c2xVQ2xNMmhZR0Y4aU1QUllySGxydjQ5SkVDTUM3WXJPdVdLN1hQUFBiYVE3N1pVLzRkdEplKzdMRSt0bXdyL1QvZEtTTTcydk0zdURmVmJaWUFzUnd4WXlwVlg0M3JMaVNNblkyYW00eTlMSjZOdGVqem93bTB6SXIrZXk3ZGdLUS9BVEVYWDB2TUhobjM5bmxtTEVkZmdlckJQeTJrc2Frdm13QnJYdyttcXRtQnBBdE8vYUoxTkdxNGhZRk9YNEdmbFpKWXpmUUc2OCtHYklsajFuVWY0eW5zSk80cURQampqMGJ1akZMQnFUWWF0SmovZG1RUGlaT2pTbno1YXRHVS9PZDRnOTV2ZDhPeTI2LzdzTUhPMi9mT2pIcWFhdUxTTEZTMTkrWCtqTGRVVjhrako1VzZJeHQxdU10M3dCeG90Sy8wcnBlZmY5OGZXdUMxd2wwRUR2NTUrM1RtNVlpVUx1dVZuVktyMnkrNk5KYlBrTlFucHU2WkJsdEVmQmNOTndFbUdtSUZwdDdGRUxYc0NocEpDQTIzU0pkMm1XTFZUNklMWnRMbGN4Vm50NWJxTU81c3d0Y002YWl4ektra3dqV0NtdDNVdG15akVlbWRJYmd3SWhFdHJnNExsSjVrcE5Kb0ZPL3ZsaXJNL01jbEk0c1p6TFZoTmpvQndra0ZSOEZLeE1UK2crT05CbGJaWXlhYitZMkE1cTdNY2FCWHpCQkQrWXJUMk5RbE0xLzVEdTc5d2N4WHYzOWdkd3M1Q2pSTElUTlF3NmNXKzd2ekVHNkNjaWh4aURUQ0VTbGpCd216UnlXMC9XbzVoNlBBcTdubW5tOERaWUxiLzg3djJEYTVaZE5oOEF1bURKOWlyOEhacDhWeHN3U2h1eEtvbWdKNDdVRFVweFhOcVNNQkx3VWpIR05XWkFvYmtDV0ovdnpXazZNajA1N3BPYU1XUzBHbVVrZDJLN3VySklTTVlEVkxuMXMyK0NNTTJXMFdPb1ljdEt3a1R4cTM3d3JJYkdZNFVlN2ZGUGNrdlgyZ1NEaEc0by9VQ25XUWNOWTNUTWpJWldxdXNxVElZaldvV1c0NnBRdEN6MlR1a0lYTFd3ekJXR1p3ZnpSZGlSRk9sSENXTWtKRWhzTFNzdU83MWxQMXdRaTdXTUk5RlIxR0RhRHFEMEVURS9qajdyaEsrT0RZUWZlZ3ZDeTFqam1aNC9zNDU3cU1rU2ppdW54WVdMcUloMDNWOGZDeDlxaTlWQ3VSaGVKeVFJTGg5WGlmbkFzYkxpQnlCeGFVcnUzVmovWmRJejBzMldwaHE3TEhVM2pCalRES3liUytmYllJSHJxWUNuWkN5ZmVsOStjc0dnR1djYjNYS2JaNnU4K1NCR2laampMYkFvS29tNHVpRzk4WDYrRVdNVVZUZkZYZWRXMHcyZUFabUxiM1pQUGJvc1FVdGt6RS84NUQvQXdaa0psSFVtei9GSzNFMENXdWNSbkdXZWR3R1JnZFVzNnoyQ0dyTDEzSWNPVUkvQlFhMnc1MDR3SEVlYVNtQzNvODdCUHRsM3RqR2EwWkg2WWxwaUNwRUhWdS9sblRCdXVyVFJQdzZzVHNNWTFhQ3g1ckxkbW54L2xqUDBaY2h0WE4zQU00QmFac3N6WUl3STBlMjJ6amgxUWVnUzBQY2VBNWpVQjJ5ZFJ5bWdubzhuWkd2VCsrem5NTVh1WGpENnk1UzdzOGs4WnNudGVqaTBPaDJmcjRtVUpnQzNBcXdNTitpN1hsQ2tJUEswajQxY09zYjZTUWw1WThMT0Q0Ulc0NDJEb1M5RFc2N2phOU1yZ3FGbmpkOUJjRVd2S2pPV0VvTWdCQW52YityT0V6VXNCR3RlaXBUMXBvRlI5S0NhdTh1azNtVWlxY1JsVkFTcjRVcUlKR1FsbDY3d0h4dlJYZEZheEJxMWxoWEtlMUptWjFKc3RVa2FpQVowR3hBS3p0ckdYck5rVFlaVTRHR1pkV2R3eld6aXNYWTNaTWJ1ZUE2Q3RjZE9WeGpRajNETXk1ZmNFcld1ZW1RSHdvMUlQM2pic2pKMU1jdUZSeUU0OXV3QkN1UE1ETEJGalpvOEQ4SFArbnVvSmd3VDJDQU4ydGI5NVl6bjBtdmR4Q1E5WTJxdjdHYU94TDFwMlFZTUp6K1VYZzcyNm5kMGw4Y2hoSEFIVElHZEdrQUdJVURCQjZpaklNb3p5K01LVjVXTS9KZTNjWmVsamhhN2dHNUVxTEdXMFpwdmdZb3UvNXBxVmhTbWI5WDZHMVk5UldMS04vNFRpR1R2TGFOWXlyaUoxWlJEWm9rNVhYSTNJalBGdjBUMnBOek9JdmFRQUZiYzQ2R0psUFVNY0tzMTBJTmQ1SFZocnZ5Q0RBV3FicndqelFIeWZUVHVkbjZ6VExDNnIwMUo3ZmtURGtpeW8raWdySU52VW1rVXBvNGRCQW4weUZCcnVleDFHN0JGUWRBV1VYbGQzOEZ4d3R2dk96REVyRjlLanMxYWdkemJlMitWL2hoZ3o5R0RvRGVPMVhhNUw0VVFxdDhnSFNXNlhNV2JBbE9pbHdFMXJ3SGJnaUJGalVpK1dBaklHZmxudEdMT0VHK25obWROaTZ0QkkrNld1ak13TVZnS05Od0ZVM1J5RUFaNjZVMnFibkpiTjJNek1Jcjl1dUJrS3BoWUFodFZWUHNNeG80TWwzaGthQ3hhWU1LeFcrWXh2WEFhSEdOQ2xIZXBkcjlKRjB1S2VNMlZLZTQxT1FNV2FCVkJuL2UwT2RGVVB0dWVCOXFzWEROOHl4dGhCMTZ3eXlTSjVjY3BoM2UzeGJ3bVlxMFBaNzBsSWRFMjRvbDIxWDh4T3N2YndubkpiTXNkQTdNVlAwR0VVenR5NnN1YVVrTlp4eCt5UWNUajF2Q2dOTG1CRVhSOERnR2JUUDRzeEJ0TlVZdy9NaHZlajB4bExFdEJOS05MQVROdmFTWTNvM2VidnNVbHVuY0JOQ0cxV3BxOUxLbHNIYlp3cER2TG1MZEV4TkFYRFJsbG8xT0JLejVGaGNSOU9DMmZIOVN3Mk1uanBRSU9sYTkyTWhTRm9ENXp1ZHZsRHlsam9QYUpxQ0ZpdEFZMTYvd0dnNFlROVhVZjJDeUFDUTZQNk1kdm1ldDNhWHgxcnVDVm0rakdtTjhzNXkxZzBOaWpKQkZPYWF6d0FsZ0EwTi9IT0tPdm5VYXBGaC8xbWExMGQ5UEFia0sxcXdjdVdnWDFsazBxOHR4U0xvQzFGbVFUS3VGanUyUFcwTFhtLzZZYmJTWGRld1YyS2lJRnRiZHByZjhjdTBIZEp3cTJwN3F6YzdxSFRkZytkTHNLWVlZbEJmMDdnOHprb2U0VDVldDN2dkUxbTdPemZFNzVkcnZKSEFGbGFIT0RBOGI3RzdGMzdkOEV1WFRGcGtLeXcxTEo5QSt6NmRkM2RCTFA2c3lrY2k2Nk0yaFovd0cweHl5NDd6VGpiWktQaHhPM1JzOW94aUlGSVpvQWl4NDlydWJpZWpOZHZ1aCtTY2RZZlBiZU1GZE5yZ05RQTdOZ0l0ZFNYWmJkM2dZb0x3SkRGYVdsZFdTVUhlbEhEZVF1WkRtSElMbmI1bnR2cEorcW1HRWQyS3NsV20yMUVPczg5VWxlREhXTitTZVNNUFdBNklFMkxSWFJNQ3k0RmNUc1Z3d3E3TElqbXFBT2JNR1JiZFNVUXdGVWR2b3NPd3pIMnl3SnpkbUExTVhhY0Z4dXV5N2dmczhNTmtOVW5JZnR4MkJoQTFSRWFEVEtIR0s2UFdlb0JnUXB0NGdvZnFlMTFmc2M5b0EvNnZnc3JOd096b3hrTC85OENoQnR4NFZwZkZhTzcxcHJJY1R6NjVXdUJPWU92ZFlkc0V0TkR0VHNLQzZESjE4dXo5cUR1QkpiREYwSnpmWGJJK2VIOVhKSzIzRU90U2dEYlBRZzc4S1h0cURLRHdMbGxlak1vMHN0M1R6ckdPNnQ4RCtZZkRoWU5NaHlLTWtOYnJFRXdRbmVQUmJDNEpuOHB6RnNIQW15eEg4bXFHVU1PTSs4MnZ5ODVZeGJ3REJMalEzVnJiQUhUUm9lZHI1RmlVWEY2MXRIdHdFMVVyK2VFZ3NtZ1hWRTNSc3NScDRLMlEwRFlvN1NKTWwwNHFUOWJnQjQxNFNFMjdYVnI0SkxwV1kxYVFYdFlTd1phbHpUZUpqQXI0Wm4wWm5saGI4dDA0N21NMk50aTI4N1dkMmZNYmxpdHNyQzk5K3pEcDQvUEJKRDZYRE5tRDRaS2IrdlNaRDErSVdWMEJXRmsvZ0ZRaVBTSksrTkRqQm1CSHRkMUtNaktHQytkdHZsY0VrbGdCNWIxR2NIVXdSNS9WMlBXanhlQk5PczFaMlptSGFBSml4ZGNHVGZzbVcrb2pNV0pjY3VZWVZOUFZqY0V5Z2FrbWQ5QkdBcGhtMjcrVWNuNGczR016N0t0eGNCUWFsZ3FWczA2dEhJdWt3VE9hcjNJbnFtc2NRbGhTM3p4TXlsamJZM29PeGtZTllqbnYvNlpkQjRoVU1xRFE1K1BHT2x6czB5MTdhZ05odDFHblpsV0M5U0VKVHZiQ29JOXZweVZkcjlpUzMwT0twNzdiV1RJTUc1TE5sbXp6dW9QSnNvaW9ESHE0UGQ4dEx2U0tabzJESFVBaFQ4ek02ZEhIZFdYME9uZU5xc1dyUFhodFFWTGo2VWI0MFlBZzJ6dndVeGN5d3JyaDhRY1FVczgzZjA5Sm9oNWl3K0FvNUxOUGdOaE0yYldmTENGVHN5ZUNaZnU4SkFaMTQ4WmRMdU9FYWFOTVUzWnNnaDBvemdYTk4wQ2wyanRkNkZ0R1pFSlhOVEVqTmdpWFlTRWE5RzBZUDhuamhTTGpjYTBBUEZOb0hRbWE3eTEzMXloNDFjR20zWTMvekNTTGs0T2JqV1k5K0I0TjJIaldnbFlscUVUelNMakNEZk5JdHVSU3lqUk50K2xQS3ZZYXZ5aHNCUEphVERMc1pYNUN1WnlEYk1uVEJGeVZvaWxqWndiNENKbGZGWXZQSE5tZkhRZGlUWG16dW54b1hVOFdBTjNKSnJXczZEcmd5NkFXbEJLR1hiMzJsMDREMXQvZmZEMVhJRDByVnJmWTR6WkY1TmZnai9Ba0VrLzV0TXkvL2phMTc0VzdPM2ZRbzdaV3cyWS9xd0FzMmVBcjlONXo4aENDMUxHQmk0cW9tMCtBNlpRWTBZTDJCbTc5UWo0MnIxLzVQTXpwaStnRFpzY3N5NWQzTldZU1c2YkUrT1k1cGpkeXdBOUdIZWNBU3dGWndLa2Raa1VtQjBYOS8rQXhhVFh6NDd6WHFWMURaelYyZ2JoUEtyOW5Jd1J1Y2pieVpXUlFlTzJqYW1YUGdNZEo1dDBkV0RjSFphYXc1eXFWdmgxSWsydzRZZUNRMVBjRTVGbHFBMGFzY0F5U3U5YjdpcjNUNHl3YTc0M2traG1XV1UxVksvWkJvMVhZa0Fza1U3VmVveVRhRlpKOHVjRGhOVFFDWWtzVHdkZHRZT0NsdTh6VG12UEJHTkhmbDg3TGwwMmh3NFVXLzdYT0o0VyszaEQ5dDJ2UWFmdE95YjZRMXpQN0FWUHNPTEIvdnQrRWZwUU8wOW5WY0RKTGQ5Q2wzdG1zcUZsZnZrYXJyMlllbEltV210L0hYbGtpR0NMMnQ2bHBEMXZycllmcHBrMXdyT09pS1hwekZPcEhyVG5yZms0OW1qSEhJajcxMEdlazVlYml4RktOVEY5Z1FGZktFblBuMEttaTYrNVpzeWdCU3RBdFlLTkxGUkNGS1Y1U2tnQm1vbncwQWw2K1NKZDVQd25wUEpGU3ptNmFOUy9PcWFHZm5sbW5ZK1ZXRnBJcHJJQ3RtN2NGdzQ5OWxsdVp5RFdaTFRkTHBWZU94djZuUmxJUnZsWnRKWjhkYUV0eVZyMWNDNUYwcTMzNS9ZQUU1amdqN2JGbmpjdDFLVWh1RGthYm9NMWMreXp3YjZWWU9sdHNWeHZja2Iyd096cEFHNDdaNkVIL2dXNy9BcDh6bkxNM2lXamoyeTVIL2lCSHdnZ1I1Z29uTEJVQ3hPRzFmekRraHF2blpReFpjeDJyb3dNdUhSN0NVaFQrL3l0WTZQT3k3NjNNUnJaMnVDZnpFdWxpQkFFU3ZORzlBREpGVHNqTnhoR1pzbG9YZ2ZoYVZ2SWlqL2NIM283eFNueWRCL3VmOWdXalN2bzZSMWljRTVaR3JnY2lTYzI5QUFJMzNpVXEzZ2lYZlRzSG5YcFZxQjIrRUx0alkzdFhCZzN6b3hqWnhCUkl5QTJreTZXa3A3WHdTM0J0Z3FCZkxFa1lIbmZtUzlMNU1FcVJVTGJDQWVOaGgxT2dBMEV6SHhEbVJvSkVEMEI4ZlA0ZW5jU2RCOVJDVGJZblFZK210UXg0R2Nqb05JdWtsN3FaKzRFeG1ZMHdtQnZXcGUxVXVpME8vRjNyRzZ6U2M5eUlQUWQ3TlFCV3VhSm1GSTdkeGRBMWZiRFo4RHpIYVJVY2ltc0E5eDR1ejQ3ZytWZGM5anNUczF0eWl3N1pCakhhN3BvT0RGaXROY3c4M1pvMlNjU2NLdFViMmJ3U29NRTQxaTBmV2tPbXgyY09yVCtqOEJrWndHdGpsSDBBWGJkN3R1bC9RNi9oVkhUVjhtb2RJN2FHSWRmcFV3WnVZcjBsR1AxaTFkM3hrVkNwRmU1WGQ1eWl0U1hxYTErREpudWpOa0tUeXpobW56clhYZG1yRzFyeDFOK3B0cE5WUHhpNUNyUGlNbGs4RitEcEpjL213WWg5c3lPc0M4TlZKYUpHeXZMQkloWGtKcC9GQUpxVlV3eDlMVThPSzBtVnZVbFdmK2ozODJXZis3NlR0dmVLTTlhNWpTMjQ2OWxDYWUySzVPbGIvRy9kNmt0S3pERHh6TXNUeTlvOThmbGpIVlFadStsak84WVkvYTZETmx6R2JRRTZGVUNPVytWTVZQci9yZkZtTDJ1MUZGY0RoZDcrbzByWW1ETWZQYWt1Q2FPQWR3dy84Q1VmdzVaWTErRXBpT1RMcktaQ0xhZWlZc0ZQODhyOVVvYnR5a3pHaXVYL2xVbXFtUXBZd3FGYWxLcWRmWDNuQkZDQmtoTHcrc2FPSzNoMDRveU16ZjlFVGJ0cE5sRTdqclBuTCsvenVocGpsWDNGNEFMSitZb1E5UllHMVNZdFdaT08rVWJDR2hoSGh1SmVCL0ZHWjE0bUExM3pQc0ZiMkFIeDlwbGdnNjRSd2tackk1U01DN0RNaytVb0pLek5VdmFMTWdxcC9ER1NWNW9aUHpTV1RoYmFoVWo1MFF0dFhvSFk4d1EwVmNydUhxSnBZWnNaOTlwdWpvNjF6VUViM2Y1WlJYM1ZDTmprTW15dVZjQmpSSGdqMzJ4RkNPaEhYN0s4dTBtSEx2RUJ4c1dIMW4zbzlMUjgzVnJJSHplUUtDWXR4aklsZEh1QTlIZFRXTmdIRVVCTGgxNnp3dmxVamd3OXpTWFpjWHc2Wkt3WnlYOXkrZEVqanpDdXRWNTBTaXVlcjhYcGg4U0JxejNwRElsVzdlQkc5bGxCVk9tVHFlaUgvWWJOaUhUWjh5WlhIL3AyVml5S2pWd1dpMGtzWEp5SE1BV2p2M3Qzb1VlRjlQVE9zMVA1cDFPNCsvZW52bmQ1NjdqMGJielg1SFhHeDJYcC92eDh0c0FacXl6V0I3MzlyeG5GdDdzMFhlYW8vbGE0UDlUK080VDhFMFpGY0JhMzZCM3krektOd2Z1NGFEdmdkbFBYbUQyVUkwWjhseXl5c3hXYTF1aFpUMWhjaFM4bmJZek0vZ2dRSk94WU0vTk83TmRqVm5DTEtYclNPenMweG96a2krcVhmNEF1MllXbURXZGZsRmp0Z1Z0MnB0T0pKRzNMUzY0NnZHVDArQlFlR1VNR3VFVWQ1RGx4SnpHTEpyaXAzN0RkekVmU08zTmtXbHpNQnN4NUlNRXpzSjdkakFobThsdU9jbGc2NENBTHo5M2JPU2NNMDk2ZWE3ajlFdlhuenEwTnVEVFZaM1pRY0cyVWNwWTI5OEVXV1h3YTFYRzVYYzFaL0haMGY5ZkFSekhzYUZnejZZYVZLRSsrbHpxTDdvdUdxYVJXTEJEUHdFbENwWk9WbmF5eWUzR1BYbldodTE1REFHRDV5czNFeW81QzZTS0RRdG1wQStNTlUrT0t0bkdndEllektFTEwydGVtaTdIZmUrNnZRQUFsS2RXWnlZSnhNTzN2WWNJa3gzK1VtT0dsWFZMdWx1R0dCNnRuUTlOSDBOZ3huSnAzN1NsMkMvbEtRY0ZZZEZjOEFyTEhqMGNGaGVHekh6NXlsYkt5TGltaUxUUktjZXNNMmU4V2dac0MyQk5pSUtkbzE1NEVKa0dSdlBLMldBbkVVMGFCVXp6TkxmSFFSYi8rVzdlQmlqNWJRTzBycllsOHoxWmgrL2F4KzlML0s2K1gvNnN2WlpoQ2pLOHIzdytBaDhaeTcyeWtQSUhRZHR6Z1pRLzhQN1RCSUVSbVBreldndG15c0pkL25PVlkvYXUvM3V3cHN4UGdxVDlpa0dqekxOVFYwWUZpZ3k2Mm5YakoxSkR6NEJUc3R4WXNkUzQ3YkxMdHZKRkJua004TTVjR1lYRjI0R3o3Qzl6WmN5eTBVb0hYYU0vMVJnemRXWFVjMGJkcGFxZ1RYdGRabFo5MzBPemFqZ3ZYSkxQbnFHQVN2T0VKUm91ODBtRzJTQ1plTk82UFBlZ0VjMzlGdWFmSjNaNnBWSUh6VDNTZXVyNXp6MFoza0duVUxacXViRUhMTmRpSWt2ZXRZczcvWVJmREkwZ0RCaXlVVXQ0a0MwQzB4NmZhODhPT25rZHJoM29NamduQ0FlQ1c3dkhwME10dXF2WFdjNUhkWE5aZnRhRW5uVldQelVHN2E2S2EzSzl1bmJrZlpFekprQ0JwbXUyOUgxYjNGWXNJRzdJR2sxS0NMWEdpNURGWVBET1NxSHAyaDN5dmd3ZXhSM3RONHR3cjE0QUsrR2V5bFdBbzVZTUtSTUlNVEJVa0dtVW9OMEJsd2tJWkpORUYxd0ZCY3RCUFRtdlZ4Nk1pT2VTL04wTDYrU2trMTZ5VVJ4b3hnSnlLVkcwLzRoaktVYTFsZnNhbTVXUU1xa1kwMG8wclNHTEl6ZCtVZFhtb2UwVzhNbmlyczZITXlscjJ4bUJoTEd1cm15VDJJb2krTGY3QW9jTXMzNitpeENiV0ZNTVBMdkhhOHlCV3hMU2ZJSTZoMlUrN2NnTzNGeXlXd0tDQWhqS2xzdldWeUo0V29CVW9lOEt3OFhUK3JwNUcvNUU2M3FTMXpJWk1aZlA5UmF6ekZEZzFlNnpPekNqOHVuK3JINUFiSk9PK3o0Q29wNEQ1UHlaSU90TlFPRForaVl3MHpqMXZKY2ZoOVZNaDIzZlN4ay9vNHlaSlJMQ1IxNVA2N053TG1WazBQUEdqQm5ubUVIczZ4T2dsR1ovSmR1MVo3QnAyNHl6UHUwa0F5MlROdDZacVUyT1dUOW1IdEgxd3ZBaENaY0d1V0dDREVNRTJKV1QrMlNwV1M4a3UvT29QWDZsMndmSGZtRUZiQWN4WlNwSFpKelRSK0txUlg4TXAwN21vbXpaT2pPeWk0aUxYYjdXbHhGd3N4M1NGTVJZSVo4TmFkS3oxd2phV0llcDRTNStldGlYQjVsKzVoam9Ecms4bkJJZmdrV1ZJazZya09qbmVNMlk1WlJsUFhLMmlmdm9lOWhpbTA3emEvN2pPaVV4NTg4SW5HcG42R1RQOVhuSzlKeXpTMFA2Nkx0YWczUFc4ZEVqNU1yV0pldHdYSkNHbGtoSjZ5TU00WFZqYzg3U2xyeStTZEYwbGl4TE9TWW1yUFRFWTA5czR1alhZZWRuS2NLZjZKSzRseTdhRUNnVzRjUkFBZE85WSsyMGxwbFZwZ1lnT1NncmdBeDcwSGxuY3RLU2NxMGRhOFk1WnJqMzJVdjd6RkZnUmJQSmZKWXhGU0l6eDZaS0pDNERJQ1BoVmlnRExEemdScWpTeWFBQ3lxWWx5TEkvRXN2dGJpTnNtakNuUUtxczc2K1lxa1VtdUpsMnRiNEY3Slh6YVIxc2dRQldrR3NTQ0tzdG8yeUFzajY5blZDbndPbDJYTHNKOFhoT3MyTGZFc3NzeTU5UFYwRHJUWm0wVDVOcGUrNzY3alZtZzY1Rmt0c2hZNVdPR01PK0ZEOTh2b0RadTJUMGtTMTNCc3dZR08wWU1aeWJmNXd0NXd6SUJEamRPL2V6Y1lab0JKS2FmUWlZeW16eEdiemdCTENFNVU2a2pic01OYlh3ZjBqS1NFRHByTTdNZUhvL2hoUUQwTU9pVFlEWElsbWtFNWJXdUdIanlzak1JbktaWTZtNEJtSkJTY0srR3BVeXpHb0MwanFld1ZxT2xiRm5vTkgxZ0dFczRxNmxFN25jUldXQ01TMm4xdmdna05hc0pLMUdwdXpPTGJiQ2FDYlR1REN1UnZmRm5mZC9ObGp2ajQvRzdTU0wrWHZIMFdTTWtSOERNTndYR2E1VllHc0FZaWRzMmZyNEhJTVh3UnJpRWVpd1F4UTlsRmlYNWpBd3BPV0Z0dHZFZGFQQ1B1UmZuR3loUGJyQzAxM1BncXgxV2FxSmUvWk9uY3ozMlBmTld6S2pDODZ0ekhkSExnWkg1MHZSVDFWZHlIc3dWcUVnYVJPVGoxNjBaQUxDeGpMYyt6KzdrVmppdEdpQnZ5b2hkTnFFKzRxV0h0MlJzUXh4c2RhWFpSTEdFckxOZUF2UkVtWmpVN0l4TGpRR1dCbHJKcEVFZHFNNEZQTE5ZTHY4VVY5V1d0bGZ4OGFGbUVNaU9Ca3dLa0J6NVF6VURwOUhValNBelpGUWY3UWpPS1lySXpObXFVendLWDkvQnFCT2w4L1dsMHp6WlA1MldpSk5WSWxpdmMzQTZDRk43Tk5LQkdMZDhNTm5wRUIvekEwQTFnUWtYYzU0bUpRbzVLS2FmYXlMNVYyUU0zYnRrVUhMMXdGMWI1TzVlNEluNWgvaHdiL1M5ZnZSOGZlTTJXZUlNVE9zRXNabGVqSXZyZDFLd0YwUFErYngvU3JncXdoYnhuVlZnN1ZpUUlSOStIWGF0alB3bFFDblI4MCtzdkRublVYK3JnNHRnQy9rOXZtRlRVRUl1TjBFeUNuZHRhMkZ3Mm9td3FZaldiMVpwc3dwd1Fzakk5WTlsbXRVRFhybTIwdGRMZlVINDBVZExiYkdENm8ra2E4NGtWd2NTR3g1MzFoRzdha1RWcy9HNldRbk95b01PM0cwQjV3bVladlVrM21zaE9ibFlSRnBQa3IyUFBCUXlhSFNaSVppYlprMTh3OXY1dWVyeWI0VFd6YlQweXFaSkd0Z3M2ZjNxM2xhNnRyMVprZEVLeFJoRU0rcmRjZEMzTTBzbkM0WUwzUkJrZTI4NWdlSEp4OHJWUVZyT3VGNGJXaGxlRW01ZU1NZTN0a3ZzejJlM0JmQUZlM3FFUTFBR0hoUmUrdWFPUzJ5VFJmUzJBVmUrT21WRkw3ck01T01TZDF3enB2YnBKMTFjY2gxTlBIc0hNNmdNeEd2U3FkNlNpUURFMlN0dnF5VXlJUVoxWndaUkw0SUNhSHV2OE9Dc3d3aGwyT21Yb2RSWE9nQnV1MnM0Y3NpUlN4UXgwVVAvQktJYitQWWE4dDZkTWlPdUY3T1J2ZjJYWVRWd0RGbHhUMk1IMHM3aEtWSXgwd01OQ0duaFRrQm5zYVhrWlZuM0NRWDdhYXlhbVUraUN4eE8vSGJVNVFSaXJUdzFDZ2pZY1dZcmZLVGFZSGx1czMzZ1ZIVGFTUTdSQ1pGTE90eWZwUFA3WGg0ZEZ4TS85eFNkY3NBWjBabENTWURzZlo0M2RsVmpkcnJnS3MzcldsN25URTJldjgwR1RQR0sxbHR3ekxDbFJhY3ZYWGc4ejdIN0ExUCtJazhVWUZJNzlETGRELzVqZ2xBMjBrWkZiQVp1d2YyNld3R3NzbGVzNDFrVXV2SG1GMWJiUHd6MW0xVGI1YldueVVzbk91eDJOampXMWIzSlRncDJPYXIrUWZMSWJza1ZBTzRNMWtvNzgrb0w0a2Q0amordnJZenRMbnVia3phcVpYU3Exb0YwL0JueldYbTBiVE9rSkVUSTA1SUpxZHRzM1RLcnU2Nm1qb01VQUt4aHJHUk0rUFFhdEpyWC9hb290L3dxTmtZTzJlSitZY25DRlFNREI2ODZlOEtxVmRNck1KRXpqU3JpeDArdXpGYThpM3RvSHNRSmNZdTREMjJnZXZ4L2FTYzdsZ0lvWURrdVRQTm8rYkhQQ284eS9NU3VKeWNVbVRmUUVrMGwrZThzZ1p2M1M0SXFTT0tVNVl6YUs5RmdJVnRXNkxlTmVIdmVvNWJ5TDJ3VFcwbXlUeDliVFhEOGJ1ZnpuU0EzRHkwRnI0MDhvdTZjNzRuWmdjYlJ1RlpJWERhbzQ1dU1mYnd5S1NWeDBSTDBYbHhINWhjRXZoVVJNTFl1Sm9HQjIyd1pHcUo3NE9MSzBHKzZHUkhFdms4TEwvRGhjT1U4MTNVTzJOVGErYnNtOEU3MFA0R1UrWWlYUlNNWE9oMGRDbWpXY1RUZXIxYjFsMWRSdU9NS0R6ZWlSSjNwQU15SXgybVUzSTJiajk2V2hQbVNRMlh5L3RzMnRWM2VMN2YxdmZJRERxZVRndzdickZHckloTTBRcXhabTI1VWlJNEE2ZUpGOVNXUXhva2l6NGRsYXZmd1prMzV1d1FVSmF4WmN1MG5kZ0VqeG1MNElROU8zdVAxMWpYMlRTNWsvem9FL0RKSEFHNnJEUGpCMUcyM0h2RzdEUEVtSjB5WlFKODJGNTl0NDdNTUtSZzFwV0ZtcklFRE5RTUFBa0lZZ0MwczhqM015QzFXMmZHTEdrNGR3TElrTEZURjlPMEpxOFFhOVlaTTdqN0RkUCt2a3NhYjJ6SjM5bkZ6SldSMnIvY0s4Z294Q1JvZW1ISWttbEFsekx1ZXZ4czRrRzIrUHk1OW5xelcyTCtVU21EbVVmWjZPYitTTEh3a20zMmNGV3VTaFd4aGtwejJMU3hkVDVyTXYydTR4bFBFVStlTkpZd2FTZDlQbi9lT04zT0s0U0ZpTm1Eci9lanFrUktUd0RHem93STRkSzY1YlhtRE5zZHZOZVk5ZHd5Q25wdUZ1anNiT0V6M1htYUVCb2lNK0N0aXovSXBScnFtWnpsYVJKaWZHK1EwVUJEQXplRGJCTzdpZXJrRUdnUlF0aGswTkFacHJFUGJSMzlrbHFNTVl4eXordXd4Njl3Q3R6bXpMVDd6bnFWME9uTzN6UWtOKzYrUHEzNE9WNXZHb3ZNNHpVckhpWTF6UU05MXFJRFZ1Ky8rM0h2WWVFVlhkYm9aUFRDZmVoN2pNQTRrdTJBV011Qm0rMlo3ZXZ4QnVBMk5qT1lrR1JjcUZDS004c1VDVEI5QXdtZ1hnWkdQT3lEQzBSUFZJRUppSE9ST0VaKzdPNlEydC9ONk9rTTRtV1dJZEhBSDFCWll6YklacjdpbEFEQ2dEVDUyUWlVZVJXci9RYk1PdW5kd1JsajMvRlpzYklsZ0ZCeGVnck1QTEpoZWlZYzV3WWdJU0dicHozOUlhRDh0dXNhcmwxZEY5ZWpsZVI5TWkxbDBrcGsxWFlzR01yS2dKMnhaL3hYNmNUMmpETFd0dzZ3VzJZdGVJMUdIK1A1N1N0bzI5V2RuVEZvVjR6YU1zOGU2Qy9nOVdTT2IwdkthTUFmZW9KL05BWERwbm9raTNKR0tvWk9SUHRkeXZpNUNwait5UURNbENsTG1EQ1ZFd2Fnc1dQU01KU01DQ3hRQnhRTXFKUXRVOFlMaWJPaXRNa1VCT2srUHlwZjNBQ3dIWmhMdDAyTWx1YWJMYmIxWm5hckV5MVpZbFJTdE9aTUxmZXhrU2pLc3BrcFNGQWxFVmgyWVMramxESEpKak1kaVNlakR5NjdZa3l6Rys3eTJwNEZ2bkdTdDdXZURCNXZ2anFPbEtxeURIbWdzejdVbldSZ3BoNzloRFozdHBPN3NEVWtGQjk0SjMwanB2ZlVlaXgzMHM4aW9hTnRwYm96WWhFcG9na0x1WjVzaGtzalpFelY3V1BOd0V6WTNGSnY4MUhyNkZ3UHJOczc4UzdNeWNnd1F3eGVqbmlqTVVVKzhyRHVHVnl0d3o2Q2t6bG8rcDZINVQ2ZEZZY016eW5BdW9Nci9tbFkzMTRkSUd5RUx2TVI2STZHNXMzblJWd1BRMjRaMVRyMmZRN21OQTF5K1dTbkJxUXl6bmlicGlFRFNDRmd1UWdHMjNGaTk4VTZvczhJaExSOHRPWDNGRTRDOWNpb0hYT2ZiU0UzN3V5K1U4NmNvZm9LRkowQk5ZdnkrSmoyenVUd2FQZG9mVjlLckRXRG9nR2gzRzI5aWJCcklnc3AyVE14Wjg0c1ZIc3BLRE82YnJuR3pJSStNRWRJZW1jd0FXU3I3RkxVZllqcWJsaXVBRlR2akNVaXJMOG43NHdCdm9xNEw0cFVrYlBScktVdlFDV05aM0pGQ0tLanNQZXhFMjRyY1BQTis1Qm5kcnZsVXNZTE8vcXJXckF6UzNwY1dkYVgvZlRNdktOU3ZaZ3laNEVwSzNFNmExTTdSZHJXTzh5NGJHUFV4YlZta0hvelljL1VIS1NlTUdYMUdVRHRUWURlNnpKbVY1TEs5bnA3Z24xTTNMUGNOVlE4Zno3WStibGt6TjRsbzQ5c3VULzRCLy9nRnBobFFFMEIxeFc3ZGxKamRya3RXVGJrbnUwQUd0dm5aNnplUm9Mb0orRE1OdHQ2T1BOTWdkb08zQ2J6clFNeUJxK3kza0xIdzVMakc2RkZ6aXJhRG9EdVpJenlhTk51bDlYa2psS3JzR2EzZUhjeU5mNVFjRmFKcXJuTmdPbUVVSnVTQ0plNEw0dlcrUVBUOERqVDloNUc3RlZ2WUJWblJ1ZGNNd21hNWgxaWJTWkxGcmNoMDVEYU0xdUw4ZElZc1BnWWNPS3VHSFROQjFZTkRudE9xV1NaZkxIQ1NFYUZBZEVnZkp1Q05rZzB0ZEgyWW10QmZCdmdmclJnNlB1eHFBU01qUlIxamc3S0p1RHhscGRsYlg0dnN2S2VkdHpBM0IxTWpadmR2Yy9WdExFdUFXak1BTTR3YWd5WUNsUTREZEYzb0REcXJyb0JpUk5rR095UE5aVnNCeWxHZFdUZU02TUhZSENxblhNamtHT3pTczFhTDdxT1IvY2NyZWhNSFBweEczam5mcTNWQm1JN1lLckI3TjBIQ3plWkxnK3EzMmx2YndURUprQWJMT0NJR2JBZ1AyVUNqOC8xUE1iOWVpRkdib1FoV21QaStKemFyRWtiQWRPcWs4T3NtRFdMV2psT09PNjM0ZE1SSGdRSVpITHJ0QUI4YkFtZExpSkV2TUZHbm1EM1cvVFV5MUhmc3pReHp6WGp5amZQdEsrWlZCRWlhVVFFWXJhSi93SVpmblQyckNTR21KclpOdkN5Z3RsYkpvTGVNNUtwZjRMSnNScGc2NGcybEN4aHRLU1ZmbnNCTHpYYWZpWjFZYjZyQmRzd1dZdmwvWWJ0U3I5N082a1oyOVNMQldkRjJ6QmxKVEtIcHNZZlpkeGJoM0pmMlRBdXF5WndGdXJNYkFWZ1Y4eFpBR1QyR0ZEREE2elkxZlRuMXFWZHNXYTRtMUcvYU9ZZlJyODBTS0c1UjI3WUxGcmY4TWl0dmM4eCt5d3habG1PV1FzbjN0V2RhYWJZK055eXRPTEs3a3hQemFTTjNaS2RuQmsxeDh3MmR2bVBBRFE3c2NiUEFxaTNyTm9Ha0NsNERjZElDYkdUejk2a2pLRGpWTHFrc1RObFpJdGZPcENTUExnc3dEb3dZZUxDR0Q3VE9mY21TN29hSENyVkhwRGJ5YmRjNUkydWFFdmVxdzMrYVdhMUM1R2tackcya1RLbTluV0lLM0VKWkxQTXFVUnNKVGsxMnkwSFpHcjBFYVNNbnQvMURROWxtV0VqSEFSeUUvdFlSd2FKa0VhUU1uWmhZdzJ5eGhxZzNhdy80MjczS2lCeDZaUWZSNDA3cW5sanNEdUlNalNwRzNJcmV5STlab2UvblljQjFLS2N6TU1YSm1Xbk1XZXJRVDFKRXV1Y1ZvZk8wR0NkVmVvZ3hlL3NVd3hIczZFOENjYi9TWmh5MUNWZ09XYm1NZ3ZyV0l0MXlXSWx2c1FjVmoxRWE2L2ZJaWFwK293S3FKUFI2K3ViakZ4ZGMrT3lMTGtCcUFnSXV5Kzd1aDRYVHJOakFOek9iQStYMW9Cb3BtckNkRXRLanp3SjBOb2JnVERiVmFobXJoQTBLaWNNMlhSakJBb0t5cmpPczREcG1HdG14SmhsNldoc1VtSzczQTA3QVdlMnloTkRmWm10cEFxSWFMRktZZEs3dmZHSW4vblVaRURNdFNZMHk2bGsrczAzRG95S0tvZUVrWURKS0tLNy9XbWcvQTM0N1dmTUdxNG5MSTZIYW5Qdkp6Vmd1RjNYZ3AzV2lSVml4ZlJ6V2VmM1pZeGNHSGVHSG53U3dRNlY3ZnFyaGxxbzlNRFc4VWRtemJ6TzhVcXVOK3VmRlpBcFNGc0diSy82Q1hiaDh2aE1GdTA1Ny9FWTAvYlhEZmpUemZ6RE5tRWtZalhsbmhUWFVvS3J2L3NNRno2L05XYXB2RS9uS1NpUnoyZGgwNzV4WkZ6YVFpQ3VDcmh6bHY4cDRDTGdrOXJsbjBnYm53M0NIcEU4WGxqcWI5bTd4TmJlell3QkdxaWVyTnE5VXY3VzU3VkRlQ1pYZEpKUG1rN3ZBRXh5MEphYXNwTjVwZW9BSk4waTFKRXhnTEZCajU3Zi9meUlCRklhUkpra2VTanhOUUFaZDJ3MTdvcS9hT0wyc0NUZzlzNjJ1akxxRGdpVk9DZzlySzZNUTM4cFZOOXlGeWRuUHg3VlY5MW1ra21VdzdZVmFxeW5aUW9QSzBrUTFjY3hDaUZkeEpOSTg4d3NFVnpHQkkya3cydTJMUmJNTThGMnBPL0Z0M2RnNkpIdDRnMlMxTjVTQk51MzVCOWZialdIckdjN3N3UnlQM2YvcitQZUpub3JscUFBRjdxR0hCZFZOd2VWTUpMME1XT2FVa2FuSkp4V3IrWEVwcmJNUXI1WnBTbUcwdVM1YkFnUzNSbzkxSm5Gb0lLeVNCbHowOXBVRlVnNXk3dm9MOHZ0SlVjY1dPR01iNThxVTBpNUh5dzZRVUlBV3BDSUNvK3dXdVVqK244QVlodVo3TXhpbzk5MkFCWEEwMHM0Ym92NzRzSmVhYjdaQS9WZlorL1BXRENVYThac0dIcDBvTmFZc1ZMT0hSZWhyNzJ1N0w1UHZmd2crRmtwNjBYek96QTdOTnZzcXU1c0E4b1V3TDJwcXlPd3IwdjdsSmkyR3h3dkp6RGIvZlBNWE5WanE4RzlyZmZBN0YxbnpIQVNLSzJnU0JrcnhEeXhwZjZyZ1FadzFwWUFORHVPSXpCcU5EMlYwMTBBTEJmMmpPdlpIcEwwN1VLb2VYbHBpeFA0VEVHZ0JrdHZERVNNNnNZNmtHWEd6RHFqcHZQRXJURlk1R01Ob0Y3T0tkZVM4WHM2Yms2TVdnZnVkWWgvSEV0NWxQbkdqVjdjNWRuMHd5aDRlaGlDZU14alhzdy9rR0FjNUVSWGFzKzlZNXpVcHB4a1pPdE9rQjREWXZ4aGhDNXhtNEw2eFNZZkF0am9QbHVsTUk2TGVOUnFmN3Rqc1g2bkx2Q0pmUlh2d0tzQXd5Sy9leXBXbW04eS9za1ZhR3dLRWlTQUV2ZmJBVmxObmp3OVhjTlFvd21nUjFFWXpJTm9ZekltaEZVRFdPZ21GVFZIWHI1anZzVElZOEdGSzB2bEN5aWN2d2JyN1NaUVlxRXVUT0FLTTMvR3g0RVlSRitOenFQZHh3T1oxWWx4UmR6WldKSGtwSmJoMHZNNHlGRVhaaXk0Yk82d2NITHNiSmhmVGdhTlRTMUFOWU9laFl3cnMxV1VlaUd3VmRqcThpWlVEWU95VlRhZ05ZSloxaHFuaW9FNHZnN0Vwbnd4cXhxN0JjQjF3NDJXQnBCRVdNZWtzaGlDa0VIcEZJUkp6RmZxL2JiSmFCNkE3SmhxUUt1UnFDeDBueTYyNXBPWnJRVG45a3FXME9sbFJ3dm93WkF4Wm9JK3h3NTNrSE5RYmRxdHd2Qi9odDkrNjFvTDlraTkyTk5yTUdLMzZKQVlhc3ZLV2pPMjFJdmRWb0FXWG0rVElhd0pNQU14aGlTSmRMZFpHMTRqS0ZNRDRpRjNiSS9Od3dXVTJjdzZXK3JPTmdBc2MzUGMxcVg1U1h6b1cyVFVIbUhhd2pLR1ArVkFmUUkrWEIvK2RtWHBtOGhyNW9UM3dPd2QrcmVyNmRxNE1TNjFZdGwzdWd2WEJyeTVoRHdIeDBGV0hsREdtUzczcUYzK0lyWFU5NDJkVy9MUGtOZVRuZFdhWFFLd016T1I1UDBpNXpTejBtck9odXl6MXJ0b2tDaXloVFhrZlZKUStZenJoT3ZjQU1tRmsyRkg2MzNleGFtYXNFcFErSFg4VXR1OXZrMnZpZWtIRGdtbFJEUXRyQ0poM0dVekczS2p3L01ESVI5RzRZeTRNZFl1V2VSYXROYTYyb3ZsN1A0YWhnb3h3NmI1cVFLdVEwdHVzcTVPSm1mamFUR0Z5b05sdTBrQ0dRWWcweG96RDhKRkJHQm13enhmUVJxZ3h2dTJKS1I1Q2lWTkJwS2VUU0I5bW16VHlicjFCdWFCM2F2cDh2VjFONW1BbWZyMmR1WE5EL2pGSkZ2QWk3L2V5VlBXKy9LcG54VTJFV01HMjhzYWcrbUhnakpmdUw4SVpBdVFjRmJXN090dEFMSXlYQmtucWVlTHhVY2xxYUtOZ09tVjdmSEFtc1g4TWt0NU8xdllNelhpQ0tIU0hIMUxMR1R3eWloQ1BCRTFPTklLaUt4azQ4d1RxTFErak9Sek9pQ24ydUNDbFVITHJDWHY0S3RwUkJycUtMekRONGZqcjE4Nkg1N1ZrWjJ4WEhpUUFUdXRJZE42TVZ1dDdzZWZVWXEzV0d3eUZWcExaQkM5M01GV3dSSXF2YkJidnJvenV0am5aOHhaeXBiWldxNGRLZ1ZlRTF4bFFoVThDSzRlQm1GSTEvdWYybDNVK3RHOFFKL1RsY3VrUVBiMmdabldoTDJGSExPMzJyNTN5ZWdqVys0TW1OVmFSNTVNZjg5MVU2Q0FaMUR0bHRSNU9hK0gxNnRHRmNkeDBJM2VtSkVLZXBIRW1UQUZoRHNBeHlCS0dDM2ZNWC9VbGd4b1B2b2V6ZDQrQUtSTkd6bGd1akJRNHhxOVRsWTFhZVBST3E1bDNPT0llZFAzekVJb2cwZHQ0YjZkOWphcUxET0daYWU1Z0NpY3N4RndqMTRBZ1l5dkVaUnhKTmd5S3VicENGUEtvRUhhWk5rdHpoL3A2SG5TVTlGc01RRnRxY1drTUYyTDJOM1hmQ3duMU1rVW9FYWJ1Q2VhQm80TTlzQlQ1WklOTmJ5M1lldFJ3N0pPZkZlMFp2RVRpV0xQTHRzZDhqNVBnZG56SDBqWkNDS2FxNktkTFhFK0NQbk05ZVFKWEErUGt0eXQ1UysvbWZFeGVBdkg3eTBzbXk2eWhLdTkzbXIwQ0VndlBCMC9WbURXVFQ4R1hlTmFnb1hvM0lmbzBMb0pqYlBBaTUwQkRCUDRkSWRaUjVqdVpBcUNaZ2h5LytUQm1YRkZTTkY0WHl2YWtFSWRIWUpiQ0NmZk1GR1NYMmFzenl6U3YyLzRJRFAvc0pRaDNHZkFwUXlmWU1iUXQ5VmNzOTdnWWlkYktrQTVKR3k2czBlZDljTC9GYmo5YnZqTkZoWUxWelZqNVFGMnJDUTFaSm96Sm02TG8xYU1jOG1LMUpRUks3WURhblZYVThZQTBZYndvek5sdFFpTFpYRnNrdlBNT2tBN3hBamtFR0IzSkVBdmxUUmU1S0RwZDA1ejB0NEExRjFaOHlmekRnRC9Od2R3Ti8vSUhnek1uR1VqdEpaMDVmdzlZL2F1L1dNd3hQVkpuYVRoTU9KcEVCaFlNRmVURURJS0FhMEhCT1NHZkxFelB3MVU5ZHQxdDhjZnk3UjJWR1hJUUc2TjNMNjJEeVpnQnh1d2hNMXlwMWI1ZmYvTzNpTUplRTRjSWJsbWk4TzFPMlBHYkZlWEtYWWpGZzdwdnJGTXROZWh0WDgzQ3V5K0lScXBCTnQ3TnZ0b0M5eDI3Nm5kTjdvVDNOTE1ZeWUxRHl2dGV0VFhyU0c2U2hiNlpRVm5mV0JTTWNzWU9aTThac1l4YnBHOUE4bXNYS2FIZitvbXg3ZE1RM1JiUkVJTlFuU1luS0NkMmxMWkptQ0ZDdW8wclp0Wk01V05wVElHcmdwamczcUU5Mnpkd1c2TUhXN2RFc1pzOStpeUJ1VzRGbTJLREoyWWhlN2tHR1Y0Q3pEYmtpclpjZkJ6SG9tdDJic3QvaGxUNUp2dHU0dXpKVUpKZGpEVFRHUnVXemxrOGd6MnRjdWNnck84SG0vdGJWc0lKN2kwV1Q1aHF6WTFZUnR6bW5DMHdrRzZxdmxUam5WZHhPSHBLa0w5V3RERXFjR0hyMllmUVRua2tUcXlaTm9Xb0dXWDhaUkVydUFzR29hb2E2R1RsVWlmNm9uWmh3bk1zY1N6MEUvWVh3aDI2UUhQNFdkbEF1RFVNME50OU1rbm9oL0dZSDRpK0hnSHpyQUJaMXVESjFpMHhsOFNzamRySC9SZlo4bU9kWG43QWdEOHAvZGJXY0ZkbXZoQTNWZGd0RzRueTkwMm54WGNHUUcyakNtN01QV29CTGlzckdkQVdieCtITm8yL1VhdXlFWURxN2FSRnZyNnA2elpJYXpaQXRRZ0JpRVpnMmJuQm1LcGNZanRhOVNlbTUzMnlIZnAremNEL2pydVY5R0grOEZHTFpMY1NRZnNNd1drUHZkU3hndXA0aVE2VHFTRUF1b0NFREd6QURTSW1hcktySFdBMTg5TlVpZTFESzVMT1BKRHpCcHkxOGJsUGRhOHNRVVVDcEJhSEJ2cCtIbm1raWp1bHRhTk9GckgxQWowY3MwZXBHMUJ2b2haQzNacVdySzVScDQxb0EveUpiVE5tTTRBTzRYSUh0TE1XUU5mQTcrd0ozdDNaYVNiYXBBMElySmlJU0xNRThkNVQvcC9kc0pXY05pb0MwQ3JQdEdsbW4yRWdybGora09QSGNHNkk2cTdHSEVEWkRMQ3lKSmRJNW1TM0hSTEk4T2xOaHk5cm93enk2S2x4Nnd0czJHSkg3MGFzenF6R0NvZDQ0YWRXdU1MOEhoOXh1eno4ZS9kOGdiNVZyZm1EYmJIakptUkNVaWhtckwwVDJ6emgvbE83c1lZbWVwNHE1a0dIaTVTUmx2QVNGWmZkdDlpV1hnMER3QnNsMnUyM2gxS0F0Qk9EVDh5bGd6a3dnZ3NxTXJZRUtUU2ROOVk1Wk41SmpaTW1aM2N4b3RsZmorY1BHK2I0RTF4THVFUTZaSzRsd1JKSW40VXNQOFlmdnY3QW1nNlk4cUNPMk5abWE0QXVMaG1iQWZXYmxJVGRvdkdIcDJHS2ljTUdlU3pFMkJiekQ2Nmk0dk44Y1lTYThRZWxUS3lkWDVWcS8wekk1QUhiUFZUMDJjN0FXVllVempQWEIzNSs4RGpjc2JOK24vWWdmOWZBMllmckNETU4xcVRYZWNtTW1ydmdkbG5BSmdwb0VJTUVsN0FGbGJiL0VYbTJOZEJuYXV4VEsyMXNxVStBVDBHRGxYWEw3SkQzOHhYcWQ0QVlnSnE3SW85ZTJRYVN6VVQ2L3pRd1R3ek1VbVlRVmVRUkhiNnp1eWFicFAvMVBCRmdHclcrVjNBK0NVdzgyU01uVEZNSm0vazJyTk1BU2oxYUpWS3ZCYmdwVGxsbFZ6TzlZNDQ4cUJ3WVRVdnJKbjdCblVtTnZwd0thaWorVjNLQ0t4SUVnbmlWSHZKNFBJb2lka1dnNlozRHdFQWkxU1JHWmRlTVZZVy9vdkJtd1hJQnFsV20zT3pyZTgvQlo2cjFuUDUybXRwRUhPbnl0blA5cVN1ZXVjY2M3Wk5GVEErNTBhTjExUVNKdnMyOHN2c3piYnpWaHE3LzlaaWFTNFQ0dkk3MmFaT2Q2UzY1SkxRTkF2NGN0SFJjZnF4SndERmwvTmdHeEN4Mm45TUJyUElmbTFnQUFHeldYbDIzL2Nib2c0VEczQTJhODRLQ2czYTVHNnVmRE94YkNDZVFOWkNQSlU1K0JaQVdvbkF6Q2pybXlQbXRqaVptRFh0dHFhdXJCeWlPWnlDV05mT2xLQ3REb3hEdnBnNG13eUhSWHdFdDc5OEIyYVBHSGlVRTN2N2tnZEJkOEJXTnE2SzNkaWpVaUIwWnVoUk53eVpacFF0SmgrMHo4TElEV091VmorZVpwTHRwSXdVTmoxeXpUd0haVWRiMTBGczJuRUN6TEtZMEF5TXFVRUljQzF6dkpROTJtdkpJUDhTN202TWVJSjlPRytHUzZDMEN6L01UbGEwaklFRFVkL25tTDFELzVoeEV2Q1FUVnRxckJoME5VQ1NmbzhaTjNZYnRKRndpc0t5UEFabW1NNzZaMkNLUVo1VE8rd01VSFVnazlUUXZZNkp4d0NIbVpSeFUwY1dIQk9WUWZNVkNkM2Evb0hraVJub0MyQ2FtVWFxU3d0U1NnWFFTT1NPM0tPUjZVU3UzWTJsdzRDa3h6b0VGOXl5UkJkcEtFbnZKelRtckdPWktrcEFmZ2lvK2c4OENtZnhsZkdMdXVESFFTaVB5RzUwRmprOHVzeUNPSFppSEdNTFdjQzBSMENtcmlVVkQxWVUyNmJZSTBPY0xGdU05Ky9WQk1RQ2VPdmNWd2s1WmlaU3h2WFJ3L0hXR1BZaGJBWVN1NExUanpDYWY1emF6N3RrYWkzTFpkS09kVnF3SW5FWG9FdVU3Qm1EUTlkTFptenltRG4vRG16dmVTSUx0dURKODltM0FzQ0gwd0w2NWJZb1Jta2w1eDRjdGtoVlUvRWtuMC8zRkxRekg0VU5UN1VlSUpiK2FvNFpvcnhOWlk2ZTBFU2hvNjhqMDVhTVprZHBvd25rdEFEUk11dDhCbTZjT2phNXBtNHVFcGV5QU01c1lmQXlPNDNWK0NNMUxsVEhRelVENFp6bXJPN01KOFlwY3RnaEt0TkN0dmthWFFIQnkwb29PTXZxUjdnYUpCa2Jza1BDampGZ0c1L0oyY1NhZFBIKzd3ZUE4dDhiUU9aWmR2YTNaMGdmaFRVTHRXTFcyTGFzWHN6Vzk1MzVxcFpiNEJzaGFnWnZkUDFWRndtajU2QXNQT1pjYXNiNzJLWFA5eDJjdVFDMG5hbElhaEtDRTNPUWt3eTA1YW1XREFyakFSWU16MkRONWpWMC8vY0UvNEE2SDltejNUYkY4TnE2Y1JQNlhERm03NUxSUjdiY1djRDBGWXNtOVZFQXlSY3prd3dDQlptbC9xZ0pJOUREZHZ2QmdsNkI0UTV3U1JzVkNKbWFZQkFhc1d6L014bWdzbVJ5SEhZTW1TV1N5N1Qvd2tDdTU3dE5vMFlicGg3ZHhiS0hRRzlra2d2ZzRrQnBQVjRLeHBKN2hpWFR5bUdFVnlEdWpISzM0VXhtcml2eld6SUV4UXlacmNZZjRiMXY4SXhtMmZESWFvMDMxcVZmcFg3N1dWYVp5enlUb2puenU1UnhkTGdyUFJGcThxUmkwSlhkdlpNZHVqQ0ZtTkhMcytQS0Z2bDFDQk1uRzVhN003TEN0SktVTVNKcnRRclJ5allGam5XMDArTDVxL1V6RStQMXh2OGVzckQzNTN6aFUydlBaeWxlTFgvcWwyajlWMXhNUUd3VFB1MHJFT2MwWTBkNmpreWdGNHNHUytPckRxaGMwY2k2QThOM3NWSkNtYWR4ek90bkYrZEYyM29iWWdBN1BjTkZVUG9DeUxKQ3VyNXNtU29GYTBXcW9XU0xjc3VNVGtjcDhaUUFlZDYzWlNTZmxwSkJxTFRVdVNSWmVKQU96SnJWS1JFY04rM0JtQUhBL3dOZVBvTGZ2cHpiMll0OWZiQ3pMN25CaHhwNnVMQmZRYXJZdjI4UnJHWFpaY3lLSGUyRVdFSnJNamdzYkk5LzM0YVg1blhDREJmWjN2dUZsSEd3WlpneXhpRnBySzErak5pM1kyZWxqNlFPN1lRNXF4ZHVqVnZHTFJsUFp1QldwUTlTN1FMd3hiOFBBUHcvSnpEREIxZ3JPaS9FQ05udzVmeEp2SmN5dmtQL0JIQUZ0a3RaSVZCZGw3b3E3dXFWbEpVUklNaWQvNlcraWdPbnhXQkVhNmc4WWE0Z0VrdGo4S2QxWTVCYXMwUithRmxvdFc1SHdOOHB5R1hIeDRTdDZ5RDBBTldyc2FsSmF6L25tSmt3azJrb09BTzExczU2MHM3aHZxZzFocnZyQ05FQ1F3aHpuRmJJY20yWWlWOTdJS2RxdE41bHBWL2wwZndxNVZrMkYvSVNzWXpacWtaY0I2TVNPWStSdnBJSHNXcHQ4aEVRazZidWpGVzBsNjJCNlIzYm96bElBSW9qeUVrUU1CS1JsRy81aGhWNU83MU9nRlpITGN5MDd5aGhMYnRVTkN4cnpRTUxYTVJvOTMvSGE5U1liU0hxRytzSjZmUFdaUkRZQlh1LzdrNjRLckhzOVhmTVJkSGxsa1J3UGJDL2V6SG84M2R5cHh5ZGgvS01FYmJYTzgxbTBZOTkwRFdkVGNOcUNyTFlBOUtXV1A2NEVTcUNhc2djdWV0Z2pTVFRBR2dWR2pCdEFzeldDaTBYc3crVCtyTU1sRGkxZDdITDN4UjBMYVllbXNkY0NJajFhSlNPWVh3dUI1cHNGdmNHdG8xOFhqUE9Ma2NiUUJid1B0bXZzSlBNb0xIZlArMk10UXl6a0dNM2dObC9BcmYvQ0g3N3BYdTI2L1k4YS92K09ZQ3ZRcU9XNHB4b3RqZjR3S3dKbTFiM0cvT1BwYVpNWEJrYlVCc2dxMDdDem5WUTFWWXdrMGtabmN3LytQMjIxdXdzZ05yT2E4MVUwcWdnN2pMWHpGN1BGT1JNRE9PRy93REFYNTNBekg2OG0xOC9MbnR3b2ZiSGxzdDdZUGFPL2RONm9pc3d3V0RyQkpncDJGb0FSd0tPa01qMmlsamUxeFBXS1Ywbm9qelBIalE0MlFLcERYdW1lV2hiWUpiSkpYZUdIQTJVM29naDdMK3VRbkxHdmw0K1ZwNDRVUHB1My90M0llNlFZR2xpd2p5cUVRdTlsbkRERWJZc1NBVmRsRVhNaWdsRjQ5MzBxc3JOa1B3eitxMG5sR241YXZaeHAyaGp6ODI1TGJzT0lYZnpUS2pBd1Y2UmRQRlFMYWJzcFBuVVkvSXdIN0NwSURiYUlibnBjbUszbStoNHhpK2Vkc3VJTDF0djRkTWYwWVBZc0N4Tm01Skd5eE5qZ3RuSHlwSXhrMWVwS3NpQ00rTWRtMVpzeGdaT1U2ODg2NGk3cXlwd1hkdVNNMzNpVkxodGx5OFN6ZGVocDhMdmhnZkc0dTAyYWVlNUs2UExpRXBkQmlKbS9ZMjE5KzdyZ2ZQbHNQbER4M1ZDRkFsZDhKUEd1aDViNUJwa28zMDZ2V0NLOU93OUZqaHhQUmswVURwaFhld3NUTkNGb1Rvam1CZ1dNWlN5QlJkeWpsbFd4V2JiYVpPcnkyV045OTlyZWVDS1pXWXE3SmpJSEUzUnBpRFNLenQ4eHNLS2t5R25NZXVPTHZmdmZzOU82VCtzNkRLa2FFc2RXbWpORTUvMlB3SXZ2M1NwRDl1eFprWlcrT3FhV01UV25rMDlUT3ZORWdadFozMnZBQ3lySjB0cnl1S2Z1NDJhc21EU2xXV1BKYkUzeTZ0SDYvek9vQVZuUmcyYlRod2JqNHhGU3hpd25aenhTZ0taMXFVbGdPM1oxdnVHUDh5L3RTZjQxKzg5bUNMV3pOdFJLay91MUFIemZLNXl6SDRTQURPVnRaMHlNQnZXN1hKZWE0dUN0aXJ0VkhtaEo5dTFIWkRpNzRoOEwzdDlqbjErb2RCbi9xekhOWlV2SnU2UllSb0RXZ0pzQVhDMStUVnp6c3lrakJCcEp6WTFZd25BWHBiemlOTHZVa2E1TTFSUCttUGRlYkhkd0VNU0dpSmIxckVNbDJVZGRRMlNYZ0Fab253eHpHYzJyVzZleDl6cGR0Sm5qdEJvU00xWmRwc2x1M3l2Vk5OQTFGM2xSb0txbHVtQVZhejFaRW9aOXFlYzViQWsyaWI0WnJUT0V3amx3ZXlqMHFoOU44QzN3YWM1T1RNNlNSdm5jVm5CU3JmU0J3RzRDTkljd0hIVXBkTjlDWFRPME5EQUNiYXZ1ZG9WU2oyQXNsSmovZ2ZSMmM3ZzJDK2FkYldTTEZVZ2cwaXhZNjVHTXNCWitITm11TDhjUHJFdnQ1T3gzcFgzOWN0dzdlY054eFp4MVBBVHB3bFBMUE5CK3JyRXZDZnBLMlh3YWEwaDY3NktwYzF6WXNxaXhQZ2VYY0ZpeHdoalBGU3RsUVR1OVhhdEFkUHFKZW00QmwreU0wRUZHSnJtOHRyTlAyeHpTcEFuR1ppODc1ZHNzUTI3eklWeXJoVGd6dTlSbUxOUWUxWVFyWU5MQkdiQUQ4RHRYd2JLMDBOTTJQWXoxWDJWRTFhTm1USjJVTXlNUFZKbXpGYUFwdlZvbVZlb3Q5cXlzajUzVTFacjkrZVJPZk1hR1RTV05Qb3ptYk9GQWJzQVpxZXlST1N1ak04Mjk5Z3piUzhCL0ZBRVp2amIxM2ZMeCsrbzd4bXp6eGd3T3dFNHdPckltTldWNFVRYUdUTFBwTjRyVlBZSTArWVBiRDl0b3dSRlk4TzBEVU1Rbm9jOC8weFpPQi91R3NtOHBCMm5EbzhKRUMySXR2aFY1a0ZZTENRc21ESGJKU0FWbStPcE5XVlpiZGwwaHp6cEp6R3BGRDdUL0FXVUZXSFhhcFFjS0pianVDK1h6RFR1TXlFeFU5dm1WY0hXeWw0VHUwZ1RnR2FTVzlackVRYkxWUVYwYmJTWlRBVXVPOFk1QTc0UmIxbmd5VXdNUDlqR2U5cHpXQkFpcWdOanhNeVY0Tk1LOVJpbzdXck1NaU9IMkNwTEhFTVROejV4SlJ6ekhYQzdpbHhlMTdkYU5hemJTZVYzSjA2QlcwbWtyRXlkQngrU0I3NUpNUE41YVdKVXl1SmFUQmlNRkIwN3ArWVl6TDB4QURUc0RDZjNVZHNleEhqQU52dW5sQWk2MkplOVlKMW5uaWdBT1VvRGEvQjBHQXd4TXFIWlF3Q1dLL293Kytnc2RRYlVPRmc2bHpQYWVPVnc2VlhPYUNHQS91SzNrUFFKTGNNMlJXNVZtK1JveTV3WVhaU21UbWFhaVpraW40UHRnQnNEd3JSamU4S2FqVHlYRGxwa0ZESFdtQUhBWDRQYnY0OWFmbWxndlpqNU1xNC9TOXdXMWIweFk4cDJXV1RXM0RrWFlHYkNqQlZxdTdCak1Ld0IwaVNmOURLelJKa3hxNnZzME05WXFVVEtXTVU2UDRST28yMExGRDU5eHBnMVZ1MUkzbWMxWjFjR0lhZVdWN2FwUFR0aHp6eUN3VDhMNEQ4WFlJWnptM3gvOWlqVjV3cVl2VXRHSDlseUdRZzdBMmJQQUcycHJCSFI2bjJBQ0FKaWF2aUJyQTVNMmE4TThHeFl0UzE3cHN4YVl2dC9LWFU4eXdnN0NaeGVKSkFaS0pQajBNRnJhVGx2ZFJNZG9KSkcyK1dTblozZlovNnpyWXpNNDIzRHFLektFNFpNNzFaK3pJRk9MaVFPZUtXdTJJWTcwRkFyZjZuUnQweVZsb1VKWjNEVnRXaE9YRTdHSzBrY3ZZcUhibzIwSHhpQmVvNG8vWWl5TnQrSFNub2lkWE1DWngwU3hMcXh0ZllNeUhUejJXT3FMa2I5dnF3Rm9SdG9GSWJyVkJsWGEwMTJ5OWV3Wm0vN1laT3o2c1F4azd1akgrMFcybEdENHE1MW9zbk56VHRJdHNpcWVuRDdhOXVnZFhVWllHU2xHQnAzSnNuSFlFV0YzZTN0ZlVLUU1kanZLODZwc0x2Ri93bERacTM1REd0R3hWTnRiWWJKaU1sOWc3SGRKdWZXRnNGTWtBanpjU2FnRjNMclBMcm1XVHV1dzVrejFGUVdBdmR4REljOVJwMXNLdnZ4Qlc5ekZERUp2V0pDOGFYYVBZaDdvd0t5aUJRMDFubEh4VVpJNlppMVlYRnQ4M1k1SFJtZFFxWTlrVE15YTdZYk9waXRqbTNIWnRnbkhhZ3ZzeEltMkw4ZENYTkc5LzZSWE1CT2pEZXFxakV4L0xCNHlKZDV2cm1QNHd5VUNTQ3pyS0FPcytqTkxhRUNBekNyY1B2RDhQSkxuMTFqRnVyRWtyeXhRamxrcnZQS3JCc2JySmc0TGdZN2ZDTldUdGkyRHNoS21jb1BqemI1enRKRmNrL1V2MHdXT05KaUVMUE1zckRwVUd1R3grck53bU4ybDNOMjR0eVkxYUU5V3FQMkdreFovL3REYlJ4VWdObE9WdThQU2duZUIweC8xaG16RUt5TTFhempTcnFvd0dvQmJySmVJTG8wN3RhVnNsMXF3S0hMWjRDSlFxelo2bjczcW1EdzRYbkNMUFZsT1lzTXlmZE5YQlE3eStqZEpLWExLTWsrUDhnTHhkQmsrL3Jvdk9ST0VLU00vV2JLZDY2ZXVlcUo2aS9NT3hJcEROVWk5T0p4ZFpabmNNYU9UbXc4c21TZFFTTENQRkZnc3h5SkdURUdZWll4UlFTOFJyVjdwUWQ0MTJVV2VvS3hqa1BlNjQ1QURFTmdrb2xXRjNiQUF4aUtOV2E1aEhFNk03TGhRS1hQczFQb2lWMStEUUxJdGNZc0w2RmV1YnI3Znlrd1UwMGM3OVZaamRGWU1nb09kL2c3ZmI1dDFYeXJuLzBqU2tpdEZBcy9ycVFtVEFWK2RlRTROdHVTQ1U0Z1pTblY4dFBka3JGYWo4ZDZ4NVFsNnpzN3RPdCtUMzF2bERYT1kxQ1hTNFFqRDJSclFjcm9LMk9tckptVnhLRlJrSUVNVWFVMVVBdEl3K0MwbUJsVHhkOU5PbnRsVEN2ajJ4WWNHSms1MjFkdHJkTEdsZlp5WWNNV3kvc3VDKzltaFNBaXB0OUNkWWRrbWsyK1pqQmpoWHhZMktmRkZJaVI3d3E3MzVzVE1Rb2ViTWgwbDhtK0c0T3ZmZzM0dk1kYlI2RTN1djg5NmMvMEIrSGxmd3EvZlRGbWpXa0cyUzBKZ1M0cnd6WmVKWWZzTkpPczdlOGhCaDhRZWFJbnJCZ2lPemJiMWRneXpTeXJKRE1zSzJEYWhqeURBQm1pVmI0TFFLdDFYMnVXdWpSZTVaeFpyQ1RZWmFDbGJYNGdDODN0c2JxME52MURHUDZZWGtSUFoxUjEvdlRheUNQODB3RSs3M1BNM2o0d1V5a2JBeG16S0NlaXo0djhyYy9qNzJ6TU1FeEFCWmcxbTk0YXd3MHlNeCt4N2xob1pwSVA2eXFCUEFWUm1IbHByRXpjdlFMaW1zakxLSGpzSmlHN09yWXpSOHkyZjhyMkdZTXhBY3pzTUtuQ3dOcHE0YXArcHkvRDMybkxqdlZrRWxJR1pvdmd6RVNDaEtqMnE2eitBUGFXUnpiM29IcHVYT2hTQ3N2WlpVeGNjY2xzcGtwYTcyTTZhaXEyK1l2dUs5RmpXbzBqcXVOSnd4VGdSaFBCUUd3TUxaSUJSRy9IMGtZWENDWHNVb0JKRmh3WTQ3eFpDVFpyekZ6S1NIYmwwQ0NBNWlud3NtRCs0RUt6MjJUTXZpWC9OQ2tpZS9adEJGM1BxWFc2V1BZelpVTlBGTjZ6eXZFZXJSWDgxTnJkZ05rQVpXVGtvQTRVUlhMS2RwTEdFOEZmRkJVajhGcHE5c0hzSDhNbTBEd1BkeGpPTWJ1TnRkaW03b3dsb0pxZWxtZlRxVUhHUnRJb1Z2WVFUQVBGUTFSYjVsUmpWZ0RjT0d3YWE2UmNvZG8ydHRFZkEzbnloREprcnArYWxyMnBMUnVVbnhiUGxUakNtRXNaQWVEL0RiZi9FRjUrU1dERHlnVlQ1aHZqRG1YRFFoNlpnQzc5cmpKeEVEZEd6UzNMN1BJeGJmSUhZT29FR2h0K2xGWE82RHVnNDBtZG1USm1rbTNXd2RscHJkbXUzbXhUZDdiSUxETW03S3hPN294VjJ6Qm55YnovQU1CL3RnQ3o3OEc5OGl4VDlRQVhnSXpVT0FYQUZ3RDhGKzhaczNmcldYb2hUZHdBaFV3cXR3QUpsU2ttYm9WYUk4WHJMUWxUMWp0bVR1QnBURXZNTlhac0hES3d1Ykhrdi95VDlXazc5SGcrWkZCeUVoSEE3Q0F2RzBLaTIvNnpPMk1oZHE3YjdEdFd4OFhCdnZGM252bjdXSDFjUFJtRjd6SW16ems0NStjY0VWVkcwVjhIY2hQRHRGeEx3Sm1TVDd1Ui9FVzJPRkt4eGI4ODJFb3l3aVNCRmFkbjk5QTBMMkliYWNsT01IT1cwVFJDKzIzRlNabnhSOXpCZURvVXROWEJvR1hIL0t6ME9aTXp1bFMxWVFHTmNVb1lGQUtDUkcyQVA2cnptUmlxeVFIUlpZNCt2MGJBd0lrdldHS01selFZTHBJaGEwODdjWWhNUUlpUlZCSzliYjVSVkZGdGpnOXFxNGlGdkMrUnhranRNaUpFOE0yOHJiOWc4Sm1aKzcvVzZEVkZnay93Rm9jSitNQTZxZUJPREZuR2dNZzh6eFZaQ1p2VGJlc2s0bHFsaklzOXZzOU8rUUxPYk1xUk81T1MxTEpGQVcxa3lXS2VtSlBJc1YrUDNnQVd5eGNqM0pyVE11ZkZMR0E2V294WXdoTHhOQmRoWmRIcjJzaDh1NjVFbE9VcDJmTjdoQzNLYlpOUUlMaDU0Zk9LQURBQ2J2QWtOaVdBTVVmcWo4bEFUVzMwbVVYekxpVmtxUHlFaE1yL3ZmRHl4MU1HYk5TWkNXRHJ0V2FhUWJaOHZ1V3VpOWhZM2lOelh6eHhYc1JhVTlZbGxKVUdRSU1qbzlqa3UrMXJ0d0tBNFR4U3JURWpaOFl1Wnp3NnUxWVN4c3lTUExPRU1UdDJMTm9EbjNkMitYVUR3SFpEbUdLOS8zdXpXOS9UVDhOR0J2TEk4SmJJSHNwN1lQWlpZY3kyTnZuTW9DVXMyWlYwVWMwNWR0L0ZacG9hV3d6UVIrQlBsOVAzZ2NGQ3JHL3J4NlF6V3d2cmw3Q0FhbkpTK1BWTXl0Z05UOWdzQkRPYmpCa3Nac29DSXdtUlJrSkNwSk5lZVNwcGpJYzNkVjVVN3Z2c3RmaE8yYVYzbnBMTXAvcXlCZXQ0bEVld2thRzZNZ2JEUW5GcVhQd1dhbEpYRm5yWGljc0RtM2xVWCtXTUkwRVZVbGZXOVhXVVl4YkU3WFYxWEdSV3JBb2FyWW5FRVo2eWU5eEpqNkRIWkZ3OEV4dGFTQ2xqQWhQRW1Ea09Zci9Xa0dsdlJpRXViQm9DbzVaYitkYzY3YTI1R2k2Q05Zd0NxbW00WnZEYTY4Um1MNDFydGJyejRQMFUrd0IwREJoR0dnR3k3SFdtK3VkMjY3aHVwTTVxNERocjRLWHR1Y2M5NTd4aTh3WWtXdDNWZmQ0UnFZRlJqemEzTTc3WHJ3Q2JtV0ZKUWhXZG94V0dqbStReGxEaFB2SDhNTC9YZVBWOXhaMkNIOUpMbzZRNkkxRWxYeVVzVjJYbzR1MzNZNWgxYVAySEhBV3FGWnJLaFY0cjZLSnh5NEtraTJhWHFWdGpvZCtiRTlyZzM5N2NSNFd1TWVyWkJML1lOdHVzMHJMM3JkeEl3dGk5SEUyZ1lBbVFMODh4VzQ1V2FMZVRaSkMvWmlZNEJvaE9qWnRzc3pFUVI5bG1XbU5XSUlrRkpxZkpwQTB5cUdCWjdsNXdCU2xJTlJUaGkyVWFQblVGaFVsZEdiTktsb3JPL2dRcS9oSksrYSttam92YkRESTdNZllvazlFS05XVHF1Q2hPaTlrOHR5aHo1SGFacmM2UHBVUWIreUtQcjVPNnI4eEN2aWFnakdNOGxUR3JOYkptQXd6U0t3TXozOVNjaGJvek81RXVaczZNN0R6NUFLTjJsWDNXbHZtUERmaFRLVEQ3YnF3T3VTenB0OHpoelBKQlcvdHNBS20zdXI1M3llZ2pXKzQ1d093TjVxc2tVdXZTTXVua21aVjk1c1JZQkVTVURtZ3VRclNYZWpTMnU3LzZJM0MxZ0t4RU9zbnl6TE1NczBDRnRGcTdaZC9WMUdOenZJYVUwY3dLTVk1QlkwZlRQUW9HQTBpek0wQkd5NVdxS2oveUVYQUJhTWE1WXNRS3VJSzBHbVV4WENNVzNPYnBaczdnRGNqdDlKWFZ5ODAvNk5Dbzk3ODZNUVo2ajNiTVRTUXdaTmloR281K3ZiQmVVOU1vS3piRlQ1SUJrSTZYV1RDZDRNNndoVnF6Q2FVS3VUSmlGZk5RamxsZjY1SFdrOTJYcmRURm05MTVFMzRoZHZqNy9VbzYzUXlzVkViRzlCUmhxWEdPKzQ3d0dzMUdtTmQ5dVFsNk9rc1hnVTZORG5ZN1Azcmo2S1JXcStPUm9lUTZzV2l1SlFJNEE3ek9PcWErLzJZMVArM0dCV3BoeHlPaUhXQ1B4eDhpUlBOdzlVemVxYmJqZlNjeEtaTkNUY0tzN1NkblZDeDloM1pjclRPY05WajJXN2lhdWt0S04zeXA2cjlDNExUbS9aSWdaU1R3MVl1YkZGaHdnNUhsWC9rNlQrU05mT3hXV1dNRVhKbXRSQ3pMNnRkakdYYjMzcXEwTEFtWVpuQUdDWkNld05la3hiYkV0UVVtMVNLamJIenBhdUIwV2NVRXBVekdqUk1KdU54dlFKNlNZR2doWDFtM0VLWXI5Z3FXcWdtckhDaTl2b01rU3pkeEx1R3RlOW5kZ3Y5dDFOdnZpUzZLdDlXVmNZQWZjV0xjWlpKVlpjaHNZMzJmSklBNzFaYmRDbkJRNkhUZm4xZFNWMVphWmJFVE1QSDUzSzBnb0VaZzdFeks2SDVpbVU5cUdXWE1IZ3FkVHR3WkExTm1pVHVqSnRnOEFyNHNseS9Xald3eEJXNkcvLzBPVnp4OVo2Smg0QTVXcGdDeW5Rem9Vd0ErNzNQTVBoM0dER3ZkMVE2UW1TeVUxV3N0dFdlZERhclVBSzdYaWlxOUZZeGRiR01KUEw0UDBuckdiZ1U1Myt1OHFvUXlNUi9CYzlkTEROL1Jqd096Zm5KZXJBRXY3Z0ZVNlFrVWtud0NzL3NCVmFlUWZORjJyQnZXQWh4K3pBWXBJM055N3FzK3pSUGd3Y1lnWHZMNUZXdU1WM0JpN091M2VUTlhpYVBTZ0pBKyt0cUxjNUV1ZXVLV0tHTmYyUTZFblNIRGppcWdhd2ZLRnRDWVNYT3dvLy9RdmUyaVpESHVlT1ErZkhtSVdOcThtVjBXdnpVZlN4N1lNU3hDU0JVeThtaC9yY2NDeXVJSlRLeUNFNkFVZ0psbjZBQklBNkhaempBOXJsbDRzbXdpVisvdFY3bFJxRmpvVE85enZTemRreVFjbWRHMjU0VmZJZkxKejVMTWR1M1lETjcyVG42VjNlMHl3ZVRVaG5YWXhmVGRzUjdBekVqTzZQSHVHT1NOM0tuM0ZmZ2lZYXdOTk94UWhSdUxsVjJieEt4UWcxWldFVUg3eGRVbVdNek5QTW9Dem5aYks0RXhjNUxyTXJzWlRtK0pqb2tnZ2tkbGl3dGpadE5YWXRTWTFYdi8vNFpaTjFZQTNHek5LK3RLVXk3NVcwU1puRkFTcmdzbm9zeVRMTE5OdzAxMjFJVXRHdyt3clUzRHZ3WXYvemhxK2J0SGlQVGl3RWlBclc3eXh0Sk1Nc3VsaTRlQXIyQ05YOVpwcGxKR1cyV01YdTZQcnlLQXpFajRVYU16WTMwTkthTzZNM3BpblI4a2pYWU8wQzZCR1RhaDFMZzJCOG5xMFRMamo5UWdaTTcvbXdEK3dCYVlmY2ZLYlVkZzV1dk5sa2RUbUZrTEhxM3ZwWXp2eEw4emUzU3RHY3ZBMFk0VlMrWXYwM1U0c2RlYktXT204a1hlZnNKUUZXSEV1RTRxS3pqUWRaVUdISmQxdjhrclNSd0RvOGZTUndGSHhyVmd4QWdHNldXWFJEWTJySks3Wk9tU3pDeUhMTEJiVWdQWXowZFNHM2dHRHZtM2M2dVdkTmlVWk5vUlRqVTVRNFJ4aGpOOGtSdTNSVmRGZmxDazBrcFBhbWN0a21PTEZOTTJWTnZvMVpZOWd6Ym93UnF0bGRuN2Z6elZrRmNPbndHMTdIMmlXVERFbERuT1ZGSitLMlBHK0JRZFlaNFQ3M1lsM2xnYmFoc1RFTGJ2ZDIrVmFiR2tpbXBJaU11eDF2R3QxSFBybGlYdFVwNzRvOGJsbWI4ejQ0d1B5ZVlpeS8xKzlOeEVqaGt2RTY4K21LQWgzd3NCWVNRekRKUEZQZFpKL3RoYjdMU3Z6dE5xSXdibWRJemFMODhmMkhVU3V2T0kyQ0J5SitCcFowMVV2a1lTR3o1bWpsbGVhVEo2NHlFRG9ERmNZNWU2S3FHeGFPWkQrdWtrejZ5VkNKQktWNUgxWTkzWlJYcm1XVG1SS1NKeFpRVFZucFhvUEtHZ2pkaFFOb093NUoxK21nK0ZRcjhlSDg2b1VlWjRDd1lmc3lxdGtFUXlDNDdXV2xNc0RGNEVLdkZTN2JzZURBdjVOYVA5TkxPTW5SMnRFVWRZTTc1ZFBwdXRyK0RmWjNJTFhJKzJyUlNnMjhvNGp3dDJrNXdkZHFEUHUrMjZYbjhiMVg0L3JQeStZZDdCN0ZkZ3hCSnJld1ZvV1YxWlRRdzliR2N3WXNLdWlZMStrb2szN1BFTE1WdUpoSEZyeVBHb2xCR3IrY2ZPT2o4WWdaUUxBNUFMUy8ybEpzeldzT253aE1zeTJSNHdCOWtBdGY4bEROODRCMlpaVFdTV01wbEU5dkFOOHZNb1pmd01NbWFwN1BCQk9lTnB6ZG11OW96YVluRXo1L0xGRGlxMEZrMk1SWUtKUnNLT0ZRWXltTUhTcGR2UU42QjIrb3BaVThiR0dlTzFzVm5LcG1YVytlb2VxWFZqQzE5Q01zU2lvZGhzaklMWHFEWEwyREtSUFdiMVo4R1ZrVXV2cWtlVnp4YU0xZno1QjNJanJsVUNLVzE5bjRHdjRKRmgwazRUdVdXNDhPVUI3dEpER1IxUmxUTnlBVnNsRm9DTDV1U3BoQWRBbVZxT0JXb211em5iVWkxa2dabGFiZk1yWXM1V3JETXozSVJKTTJIRmRwNVVsdm8renJQRU40SktuRm1YSnQ5L2UzVFM2dFRZMThHT1RGRFg1N3NUMFBMYVR1bEVFK05TTmdLRnRkNmxlUVJPZkhSS1BRSVNHS3hwYml1WmhyQThkcGlXTU5mVjVYOWgzNmVaUmdCanpGclVLV1VFNVhONW95K0dOSEtVNWxVQ0pqN2trRzZWK0p2N0Q0aVpzWEY0bWNWMHhtOVRBZ2txaVFTZGh3b1BOS1c1aWNrSmY3R0R0QTZjTzhEdTk1QWFqbm0vRm5ybTJRQnJJMXZPV2x0OVN2V2NaR3hkeXNoMFRPRXd0WDVuczAzdXNPOXpycEp1VTVhOXpLdU50NzRJa2dvS2diTW9iWFFreGc2TE9OS0lhYzI0dXJ5MWM5REV4bWtxQmFzUGtob1praitHN1F3TlpTeXJLMHE3SDh0TmlNeUFpMjJWTlVKcTBZS3lkRkZBSkduWVp2bU9zSjFrdjdkM1ZxbTBJQU1uNXN5ZXpycGZmd0JlL2tmdzhsT0RBWWlYeEE3L0JJQmx6QmxPWHNIVzkwVmtseWFNbWJKbFpUSDhHRVlmTkRpNmhFa253ZEtlU2Y5OGZSU0dXclBzcjA0ekVHWE5mTU9jSFFMR2poTXIvV01qYXp4ZVE5S1laWmNsai9lL2FZWi8vZXpDZWZxS2JlUVVqMmdZcEFpejNZVGZOdkN4OThEczdRRXp0YlpYZS93RUxLVHNHSytMcEl0TzYxTEF0TFJMdHAweE41N1k1QytzVk1LZW5RVmpQMHV1cUxMRms2RHRBQnhQREVrZUNYa2VFbEF6S3hMRURkbEh0b2l5eHFLVnhENC84M2gyWWRFVU51MCtGOSt3VXFNY3hEZlNJajlSQlhxTTVocnlDSkV4OGtodVRjaWx0Rkx1U3NJWVFxUllBdVpDaWZoYVJPY25PazFZekNoamc0L09wTEZMSXpJSm8wZ1pId2loOGszZVZUd1ZtZk9peThnOTk3UGkyS2VUNFlmdWdBY3d1SnZ2UWZBRk9JNWFXMS9LeFJHUWs4cnZqQW96V2VPQ2FaMnh5bjJ5NE9lSENZYU11cVNkM1hJZklDMXNrbzB3S0VRNmNJR1Yxc2tPbjJQdzBvbEZvb0JoTHRRY0F3ck9hZGRKVFJXbmlobjlEcWZtNjQ3UjZqVG9JRjdNdmQyMzZSSTFqOWVHd1lZSzEvZ1l3QlpXZkpKbm5KVjJCN3kyMElxMEl4V28zWUxmaldTQmdOVnVnR0owS0wwQjdNYUdObFRwWXgreGNrVE9BVm1ZdFdaZFAxZkl2eDJlRkRieFNQVG1mbVllR0twczBUT1JZY0YwREMyTlFjTUlnTGZ4VzJSZ3h1SkhEcHp1YS9STFNlUGF6ZktrdmFHL3A1YjRMY3VxWkdwSi90bXoyM3dsdjR1VnB3bk9qSXFsLy8vdGZWdklMVnQ2MWZqbXY0UGRVUnBpREZId1FmRkJFUEdTRngrOGdkZ200a01TRlRVcWlDSStlQ0d0cHNWb0k0anAwdytkR0l3azVLRURRWnZHb04zQkZ5RVhZM3hRc1E5b1I0T0pJUEdXUktPSjNWSHNQakc5NXVmRHFqbm4rTWI4WmxXdC8zTE9mODdlQy9iKzE2VldyYXBaVmJQbW1HTjhZMFF4cHBTUVdUSlk3RlpWV0ZOc0tWZ0RXVkJ1QUsyelpvVld0UXZNUGczSHQ2Q1dEeDRhZS9SdzZPMzNXNkMwaWVGSHhxYlpxdGJNNG1zSVExWW9iRHJKTCt2U3drS3lRcFl3Ym9xV2h1TTAzSG1YTmZMNWJ5OWZrQnF6eXNZamxHMDJnY01OVFBrZWM0YnpkdnFaMGNkUk1QWGVQaE9MK0RjQi9PdytNRnN3WnBNOEg2dWgzVFFzZU80NVpvOGFwL0tjakQ2eTVUSVFrTmpmcC9WbUMwQTJTUnhiemxZaVpiU2RQS3hKc3BlQkpaQWxmTEwrRkNneElDRzcvbjV1cnVyWGRpUjlybUJ6dFd3ekNRR2tpSTQwU2kwUGpUUFplSDk1QW9Ia2hpWkFxbCsxalJrVUIwdTF4RGNHeEFMSUFvMlpYTU5sQW80S2FXamNVbDFtVGJPY01sS0d1Tm90MTl3NXlWMjAyZ3pVMUNoRWlDY2x2Vkpicno1Q0pSYW1MMVJISWNQa1lsTGpEZHh0M3RHZ3g0d3pXY1Bibi9TWldLZ0RnMHpCQlkxS2lEQ1FtbndFc3cyc2Fzbml6OFljc3d6R01ZYVA4a1lUdUxlSVYyNzBjS3haaE9wUDR3Qy9zVFZ1TTREMUxwZGpGb3FzVUR4Q3hXYnpFZHcxc2drRzl3a0c4OTlKaEtBMWwwSGNXWVBVYjBnSEd0UG1PeGk4T1RMR0FPYUc1RWdhSWR0S0UwUTBXYUdneHFraFBkTnM3czBsWUlTZ0ozZVZkRDdoS3N0RTVIZzlPbmVHWjA2VmR4TW9jNFFXTldYQ2JHRldtT25vSU00VDJheTFIUXo5czNRekY5N0t4Tm14aVBsSHZCSkhuaG02SVVqOGZBWmxIaVpDMUxTa1RBYi9udkh6QzZJcFUvd3hXZVVsc2wwYWh4MmFHbk1KWUFvV2tXU1dMYWYxL1hqQm9LZE1rS1lpVTM5eE5FVDhkdFR5dGJDdDFpeFk1TitESWFzV3daVm5iRmhTWStheUxETmtoYU1BeGorK2JYVkFSaGI1SFJ6VkhTa2o1RjZ1VVo0aVpYU3BOMlByL0ZCelZuZHF6V3lZa2xUTUROcmw2QzhXVnZ0SWpFTndtMEZJQlg3U0RSODVPbWxldkp2ZGNxUzRsdi9xZGV4eWpycnY5azNQaWVGNnN4Sk1ueVZqdHNjbUpjQnNqM25DQ2h5dFdLVmJRU01ES2dwS0JnY2xVMjJXaTl3eDFIUXBhd2FrazV2NnR5UnNFWitYTG4rcmdFUFhiREhlWnBZWitrQ0x0c014Z1pnNzN4akhySDdNazZtVUxsRWtxZUp5MlhURXlWTEdTQVRNUzdtNHlOc09ReVkyK1FZcHk3SzFHVWpsbXdaaTZVRC9tYm9ZWmFRVFRKd2w1dlBPTk90SVR5d25iZXY5UXpWOHBzbEVidFhFRFZrVFNXTjRycnJNS3VCc05pdFFzckxTY05HbklPblpZV1pJR1MvSVZmVVhySXZrc3Fuc2VYaGJhdzNTemM3VXVFVUREUGF1c0EwUGkrUnpraGZ1TUtXOUhkVDFndm04eVdoQ1hVQnNrL1JYY3YxY21IZllKa0wwZVhEWWViREUvWGhUVEM5TkxueDM0Rm5qa25abHBVRDdad3gyb25uK25JUEdkcXh5N28wMklHRGs2aGVLeWJqRjB2Y0Z4cEJMSmJZWWdvbEk3cnU0cmJIY1JmMWNvWVJqMDllK3IwTVVaaEkyZDlTNWxORW1XTlhhdXBETXROQkV5Z0F3SmxMR3daUU5NNC94QzJ3NTRsSTdaaVIxekoxb01KdFFzbUVoQktNb2cwWjlheW14cTJ5eXhzQ1V5YUc0U3dBYldNWm9jOXRtUXE5QnFjdHRuZEZqc0pYY05yYXd5NjVhNU92Tjd1NW9DUGEvcnF6WjNUY0VRNC9Nd0NNRlpzU1NYVVN5dUFxdGRnWndFaHB0R2g2ZDFKZHRFdVJMSVlCa1VjNjRKeU9zZHFMK0NsSjJqVGxvMmhXczFTUjBtcmVOd2RoUnpSbVNlak9iZ2VSbEQyUmlZYmVmU1RseG5pMERnQmUvQ0Jwb0tmYlhOcytHbWVVenprOGtaWHhWWS9aQVlOYkltZ2JTK0hWN25yRlJ6R3h0dVY5TzhzWEd3RGpYVnlFYVdIU0ExYjZ2RE5udzM1ak5QNW9zajRBUE5nT016ZzZSSEpMQlRwWGRZTmZHU2xLL3RpMnRWbzMvZ3BpcTFXZmhQYW1CdzJiczBaZWhXalRVV3N1Mk95bjRvOThwV3B1bTlXVmhEbjJUTUpLVU1aTW9UcDhsN295N3dNd3RHUVI2Mmg5RTlkV0tsckZZcnRVREswR084b1JKWE5SaTRmZDhkbUgwbXR5NTFkNXhzcGJEN05Bb2JBVXFJOHNGOHRSZTI0VUNoT1hTVGgwRU1vTmkrMUpHbFEzbWRYaWVJdjk0V0FiTFpobjZoaC9NSXh4dFk5eTZCc3dPb29jWDQwbVNzNldaQ0N2NHdyK1h1UnNPbHFjRGwyUTFSckRFSjg5K1QwOHRQN0ZmZzdFYlp2dXJ5SnEwcVd6SEdYTFNNVmhrMnhMRmpQbCtvTFlrZWg5S2lNMDhuTmE5UGk2WkxqSlNmbnEzOGNmU2FiSlBQVFJyZktWcHREakpoRFdEalBTNStFbkFUTXJtNUtJNUdoS1hYaGRYU0JoY3B1dlVraG96cml1TGcyMldNV1p1alpiT1ErNFFTVTFNd1BuS2wvMVNyZURDNkZLbWl5aGRaRmtqRm14YVFXNmVHYzVOcUx6UkY5ZXpGc0FKdFFlWHoyakh6UW1RM1oyNUJMOE5ibjhJdGZ6YVVWZDJOOHNSVTJCMkYvZWNYUm4zWEJpTDFwckpza3RBZDJYUXVtU3d4TW5QYWpGWU90U1lJYWt4czl6alNrRlpCMlJJREVCcThud0RhQmVQRnYxblhCclRNT3FFTWFzSlNNdnEwWGhhc2hLNHV5QktIaDM0SVJ6VWxnM0dMR0g0Y3hwNGg2ZEhLTVY0QmN5ZUoydVd5aElWUUNVdWpVRkdLSEs1YlAySmFmU1E1T25ZcE5acW1xTWxaaUNaZFh6S3VtbTlHMjluQTNNdFdGcldZd1JNZ1ZnYmR1b3ozaGJhRGdacnBtQjR4ZERwT2h2QUkwQTVnYzZFM1NzWXRXcEZqcXVPK0prY3FhcGNTYzhwZ1dvbWVNVTVxNHlOQ3BFRHN6NkJLZTlwdUNQTEZmdE9hQjJhV0Nhejlib3ZhMmVuVWJEc2dNZmlvVTRGM2xHVEZVeDZ6WVlLSncybXpZblp3ZWZmRGl6MFZ6eFVaRHg4SWJoYjVZRWJzbEJwbHpxem1Tbkw2ODB5UDZyc0pEUzVuZzlBMmJJdFhOUjJmdkJGaGE2MkJwVXV2K0Nac1dlVGh6clZWZmtoUEYyVkJzQ1YzUFc4elBDb3FSd3oyc3QrUjF3Zzh3MFhPM1c2cmtPQzE0bHp0YmZhcE5iMG9FbzF1bWk5aDNOSEZ0alM0RUk2WGxhaXU0UmFBaFp5bWlpQUZNYnRESTd5YnRKT1NJZVVEUVBXdFdjeGE4eUNPMlAyendKUTgrVzJlRHFwWW5tQTh6d1BFbEdVTCt6eWdhbUVpNXVaMmJJOFNpQXZHemFaZkxEMFVObjZFSHAyQTdOUk1CY1lOOHNwUXJ3NGN3bCtHbTUvRWJWOFQxcHJoa1ZlR1RObWFyTy9OUC9nbWpLYldiSVdNQTJ0TFJ1eXhnNmNpREVMREJtNU1yckZ1cktweGd3N2R2bVl3NlhEUFZ5Q3BxZlhaQWFTTVdZdGVOcHhndFU3V1hjMmxWY2dyem5MbG5mRCt3RDg3MVBBN0F1M0MyUFZvWFBBZEpxVTRwTlE0ckZ6ek1MV3Zjb3h1eDJVblpVVG5qV24yTEhIbjBBVWt6RlpqaGxJWnNlZ1N0d2oxYXAvQWtQeSs0VzJxVEpiNk82QkFXUTJqLzh5R3lpMjlHQ2d5ZlZqQkxwU1Ywb0NnYXVRN1F6czlWd3lxaDNUOW1udkZkcHU4UEowN25mMnNkT0wyM0pjWHliYkg2MGQzY3RrbHk5bFJqME9Tcms1aG82aWszUENNU0I1UWdOYUYwOUNLcFZGNC93eVpmczU2eWdOYUxUY1lLUE5qdGRFeHVoYVg0VVo2M3FKVnZscy9nRkl5SFRtZEpLT25WSVJEOWV2TUVoVGEveXhLZ3N5eGlyRGpvb3NZTHFtNk5yVHo1UXRXaUZObXVSSkNsdmlZQ3dld09VTWduemdoNE5sejBkOTJMcy82Z1k2MmR2TFZycmw1eDJmWXpzLzdNbysyejV1dFJORDhRbkdiQnBLWDY0aDJZOEFqQTFIdTV4Kzd0SUc3UEN2T1Q2S1dtM1dZMCtiejR3Wm0zdmNtZEEySkU4TUlFM0JzMHRkS3NjMk42ZlIrTjRLY0dqMVZ3TnFUZXBZd3BSSEFYcWFHWnVBRkZrYk00WlIyamdtYmJEWjdjOThlT1l4TUlWUGN5MFpGZ0hUOU54TEpCNHpVVjNHakdWZ3RaemorekJWTEZobTdsRWp6ZGZNWW5vL3IxVUx2SU12emc3RnZoOXUzNDFhdmpvRlppdm16Skljc2l5VHpKTVFhUytKc1FmVmtwVmg5TkhBbWJ2aDBtSnIydTJxRHBiTUpWaTZIb0NlVmNEeXhKWXBVNGJjQkdSVmEzYTVMRml6eEU3L0l0dDQyZnNMeWtCYkFMYWpPclB0VnY5ZE1QelRzeWZMaTNmenlNMWtvc2pXTXhSdlk4YnNVYzAvbnBQUlI3YmNEY0JzbFY4MkNXejJsa3RxblRMakQwaCtXV2ZqRXF0N0Y0TU5GdUd3Wkk4RG4wUEk5TllPZFpORlltT2wrbHhDZXk1L0llKzEvWk5DalM2NTFMYXBDZmdLMXZOcWxTOVN6K1ZFdTNyZ0N4aHI2NXFXWHdHdUU1ek1MR1U4SUNaY1dDb1RpcVliZmpoOXppVmNGQnA5SVJkdVQyUlp6SUk1R1Jrb2N3YXVZVHRpWDJ6dTJNYVBhWnAyUm0wUjZtVExLYllVNzNwTnA3dVl6OFZ5aW1kMkdsNk44UTNyNUhEbWlyS2ZZdHY4VVE5VHQrRjNEV3RRbms1L3pYZnJ6U1oyZjNrbXVrYzJZOFZ6clhwN3Y5ZGRZbzN3cHJKUWo4eWRyNERmOHZmODFNWTU3SEJSdndtd1pSZVVyMm05c3cxZTUxTjUyU1NlczVUcjk3THZXZDZVcGN4b29CQW9ic0FOU1JGVFlJZWNzcTRnTldZbThNWG8zZkY4T0RDT0RXMDVadTNZYWpSWXdjb3VINU1iWTVRempualphS0dQOEhsV0d5ZVhXaXBiRFBWbkZ1TWJPN2FCOVA5bEJxY3JrSmJ0MlMyczVDNWZhUzJwc1FoelJuSkgweU9nNWVhbmdWbUY0OCtobHQrTll1KzYxb0NwNjZJQ00zRmFOSk1RNkRMUVNNYWNnVExMcGhiV3VySlJXOWJydXhtUXNmRkhGWGRHbzdLRGhWMStGcXF5ZEdWY1dlZlgyUXlrOG5zWWM2Q0h0V1k3VEZtV2MrWW5RWm5ucnorN3NXV25iejhkbUMwN1BkdDVYMithcCtjYTMxSmc5bEtaZjJTR0dqb1FranF6Rkh5dHdOeUtZZUpscFFZTkNXampiYkhFYW41aTVXaGQ1WVJMSXpOUktpOVU0TVR1aWN2M3N0L0ttTUhFQWJPVGJKSWpWekRiWkVEQnFZUnB0M2F2RzZPV2FlcFdBMkRYdWorNXV2ZXVFNnQ3MC9rTXdIeFdCRTVxd0hiVHI3R3JTZDJiTExKbDNmUUR3VTE5bHIxb1RVMWQ3SEhYWWVvQTFZVWUxRVBWWGwvbUZUTGRGNmJybURuek9ZUk5RMUJ1UUJhRy9VeHFOYzNNVFRRSDkxTUQ2S29iSTNDUlhMUGFnZHNhc0hMN3pWc1dyNmwyM0laNXhOVVdQUUlVTmlydjJXTW10aDV1Wk9WdWtYRGhVSEhMUkZ5ekhVWS90N3R4aGtmN2k4MVd2OW52ejVKSGkrdmliRGJKWSt2dStSWlp3NzRzb2hGS2h3bGJwRUJ6Ymh6UzNoamVESDRlWXFhSmJXMk1rRWRXTUVRTkdEQkRac0FvZzI0ckRKNHQ1bjFZM3ZQS0JHcGRCNDhTWE4zQnVYbHZRekN6MHl6T0M5RTFBWERSTVRkeXVlQ3A1c3lwc2RGQWxNTVhtYXI1dmN4bHFzQ28xekNzaUNlampiRnUrQkhyemRpNVVYazZaY3hzTWN4ak4wVFBGSHlDakRweGFJSmxrRXNiMlVoRXdSaUVzR1NHcldPbFpEWm1LdjNiRzhlbW1zZkZEaXg1enZiNjdwYmgyRS9BN1VPbzVhK0hERFBiczd4UEREd3k5OFVzdjh4dGRtWDB4WE16dU50UTJaTzRReVdNMVNSZ0dvc01NenVRTWlaMVpxeCtXZFdhVGRiNUhEcDlnalZMYTh5VVFVT3NQYnNzZ05ubEJIdm1ocjhCdzMrLzVVVHB3TXd5amJ2dHZQWWw0bmxWWS9hTUhndkdMQnhaQ1MzR0RndW1yRm1jNVpibmttMW1NMkdEUGRDVnlmMkFXY2JYait2R2lvWG5MRmVrM3lsSk9MVUNRbCs5MTU1ekxSdURuUWJDeERwL0NZamwzRlFBaXlSWW15MzJJZE41WVY0eTIzNlNZZTR4WTlQM2xUSHpQZThIbHhsek5mbkFZTWNVcElIWU1pN0xxaGE5TkxMU0xNL01SK2d6VThTaVU4TnRFQmxraTYxM2E0VVVUcU5sV3M0cURkVHFHQlE2Y290SnBmWWM1NnhYRGdGWmlDaGVLeUd4OUdFSjRDeXUveEp1c3g2c3lTbndPUVZsdnFUQytpbkNMcktVTnphWVM0KzFpbzJSb3dGMkhZWkQvV1J6NS9xWmNXeDRVTi9BVzRkT2ZyVjdkQUpzeHBDd1pacjFhSVhOTWJDMWlsUFFkWHR0YzcxWU1LOHhEeG1BYmZoY0libGhIVWV5OWIwRjlxaTIzMi9CeTVXY0YxdGUyR1pIMzJyTDJzYU0zMnZBY3pESUZyTGRLRnZPV2hpM2hZdmY2ZmoxYlE2eXhDMVF3WTBNUmp5QVZ0Q1dlYlVwTWFKTjdOUnQzZGREYjF1N1Zzb3EyNEtDVlRNWG1EUGtvZExtK1JnSkxsQW5XbFRiZ3VuaDJiUFdhMXdXbmZtWWpZdW1IeTVtKzNsK1dkbmhtVXl1UnBzTTMyd0Z5RGhZbWlLK09IODVKVkl0ZDEva3dPa0FoUXFCTmY3Y0pNa2dFUnBNcUhHQ3hVQWFNTjEyUm1tKzhMemV3cGkxeDRkUXkxZkN5cGRGMTBWRGVGMTNqRDFXdFdXd0JNUWxERmtBWnh0YmQxY0c0TGxEWk00c2VYN0c5WkJ2ZjVnZEdibk9MSk15TG9PbXRlN3NNb3hBZWwxWkVuajkrZmE4Skd6WkRvUEdwaDhzYzF4bG5jbnJmd25EaDI4OVNWNThJVFA0UjdNTFl1bmdZbVJVN2ZHQnordXZ2eDR1dFVmSU1Yc0Z6QmJBYU1VMnJReEJFbUMxQjI2bVpXWGdIOHlveEFhL2NPQnlreVUyaTNrS1lTNlVPOVlNTHpvQXErVEZ2YkZXelJ5alAyK1N4UFk4cTRQajUwMlNxVkpHWWJrbUI4aUVCVk41cUxLQUxobHFTNG5pb2o1c05jUmZTaVYzdmw4dW1CM29WVmZHa1J0YWt1VjFoSk82UlV4am5wZGRxWXQ4ZGNFMmJKdE5CSmVyRkM0cm1xMThFOWZpR0VrR3F4NXR4cnhpc29XRTdHekFLSzFtemVPZEsrQVpkVlJJaU0wRUdOT3dlbFVoSkV1dHdxV1pieHJNVkh4VkExTTJ3Qm9BK1lZZHVFSDB3M0NwVVVLL0RlQm5NNHFnSjVUUjJjYnFVQnV5TWNVQU5yUi90YmtEanFJbE53SVQ3ck5MTVoxUVBRYlpJNHNYZ2JDUFV5ZXROV3UveDVIYllveGlOb001L242NFgzc0huUEVuYWdCOTZPSFl1clc4bnNGVTlxRHBhaEdzV0taVThLa0F6SjFOUFd5ZUx2QzExTGh1VEdDMWVGbndjUnVYR0hVY1RhcFloUFdhUE5yWkJsOGxqUlladE9TcXVpNVYrbUtYcWRhTWs4Uk1BdHpWd1drWTI5K0ZTWmRDOVdWbEdvVGJiRDA1Z1RFUC9CMDIrYVROTldiS1FpMk1QYmg4cXhBb2MvSmVBYmwvbHpzQlcxakxHaWV3SnF4YUd6bTRSMWZIY0h3MHY4NnppbHI2VnhoMUptaXp2NzY3ZFVqMjgzRDdjbHpLandMbGkzZHJ5Z3A5eHE2SkYzRmIzS3NwWTNadEEyQlJFcm01TUdKZ3dXNm1vZlZsVlZ3WWhUV2JHRFRjVDhySU9XWTFzZERma3pSbTJXYXVMSm1BeWlPWFJwVTNac3Vtd016d1A5endGVVNJbndkbTcycW5tc1h6Vit0YjU5bmxlUFkzTkl1WHJNYnM3U1JsVElEUkxzamkycW5rK1lwQlMwMDFtRkZxejNtWjdhbTZIVTdUV3Z4NThqd0RsYlBwOGJITG9rb2Zqd0JyeWtxcWRGS2VGN0hFYnpWcHdjNSsyN2U2V0w0UTJBdTVhWWdaYXZvOVN3RGpOUEluVmxBL0Q4NzN0bU5TTVRtdStjS3hFVUd0TkhYaW1maE5qUTRCY1doVXdHSTdrSFNTTjNvY1dVRFFKVy84NU1Zb1U3WmhoMHltREQzMitpQ1VPYW45L0xBWDB6SitYekJqbkhTV3NXYUZJQmVJQ2JOZzlPSHdQbmRZQ2NUVnpjbVJ3Vm1HSkMzcG5Hc2Y4TWZRY3BMTGRiWlNITlZhR1BHV3orV0ltV2pPdHZnZXlCNENiS1B3OGZySDJ0VkVsWFFrcHlUd3RsV2p3b3BMZmVNd1kya3l3S3ZmZ0pQcGpaaGJPQkRjSXRsK0hvTVJHdEpDeGxVdG5EcTJiTGVZdCtFZUNaWkJibVltWVRPc0xlUGRMTWI2eElXUE5nL1crMFlzSklKMGpnRlpOUkM3aFRBZDBGdTY1N2F4aGI2Y1RYVURPaHRBYzJ0RnNKdnNzWms1ZEJZczA5REp3RDAxRi9hRlBDNW55cUlkei96WGdyelJsNWxuQlNOemNJUkFtN0JrY2EyT0xLOHM1cG54am1qa05BZ0VCUzJsbWh3cXNwUUpyNkFLSkJmNlVqZWM3SkVwVTdXcHBoZWtnTEhJcGhXc0l4UUxUWHBaQWV4Q0FBWXpxOVpZNkNMQzBvNDB2K0ErdzdLZmh0dlhvcGFQN2pvczJvYVVMaVJQTktvcFV6Yk5FNkFXM0JyWjdFUENwTVVhUHdBeW53SFpCTTR3U3huOXBKU1IvNllTUmcyY3JwRTE2NUxHT3V6emQzUE56a2diRVl3Nzlwa3lzZE9uVy8yZmhlRXo5emxCcmdIVE1pR2tFYnpHRTcySkc1TlpHRWU4VkRWbXo4bm9JMXVPR2JOYldiTTltU0xMRXpOSm9rb2tWM0pLWHMrMnJkZDcrakN5Q0pMQVBTQkpaTS9LMFRIWThOL2plUWJJTW9Zdy9WNEM0b0p2V0NKTlJDSlZWSWRGbFVDeTlOTW8yQnJFUktvbVE5a3lPMkRXU3QwaE1QYXl5anJwUk9ZZlhlTFlWSUYxUUJ6R01XRTJ5dk9mVWJJcHRIc1ZjSmJ0WlFkZkdpWnFnOHBqZ0RiMFlWZE5SUWFWbk80R2pTTGtwT3pnMElnWWNNMVZ5SmpHZjlONDBVOUlGbGQ1M3pVWmM4YmFNbEJOV1cwQ3RHNEU0b25FMGFlNTBxeHdibXo1cFc1Z2pvMWF5RkRES2tucnVxeU8wOWF1WDZoVThjVzBhbWVRR3Fod0cvVmhQZ0JOcTNuYTlIRmRadGh1Z2k1dWlzNUJ5NVZFZ1EyVWtkVHdLb01VbVdZMWlsMnJQUy9OVFBMcnVqeHYyMC9iYXNtMjdXdnlTcHB4aWx4aGx6R0dmSkpSMCtVa2NaUjRyOTZ0MlFDbm5VM0VBRWVkSzVTUzRraEV0MlBzRzRqbTg4NEZtTFZqTnlTYXZGR3R6bzQ5OWk5T1ZYQ0dJV0ZjZWJPcjZvOURxRUZCVytiUmdjanlhUVpidktkUWI1amIrM1I1bDBsNjJNN3JFdkxMQnZkbXdxU3BNWWp0VG9xc0hqcG5JRWFVY0RZMjFEc0txLzdvRHRaVW94MG5HeWxNTFdmRjlEbEtKQk9zaUxqQWRtYXV1QXFoRUppeHk0Sy9CS0tsY0dQTFh0eDM2UGd4MVBKN1lPVnJKdk1QdGJ3dlpTRGNpektrbVpSUk9NY0dLb3ZJR2pkV2phM3huUUtiT3lCenFTazdhNml4a3Z1NWdMUVRVc1lBenRTWmtVRmFIYXpaVWJiWm1RRHFES2pWaFV0anUxVnZJTzd2d1BEMzczdHl2SGlYYlRTNVIyZkdsYlk0dkU4eXBZYVVud0JJUFhlZzk3YVJNdTRBczEzcElvT2R4SXdqWStHMEhreWY5OWROQnFpU3dKMjZ0V2xiZDREYlk0R3Z2ZWRURzJVQjNCbWppR0czajVXa0VjZTFkc3ZuSk90VWlXTnF4SEpHNXNqQXpFUW15R2hnOHNsUWkveG05bUdScmE4YjFya1FFNlp4WDFYd2lqUFRSbGEvbmJXZ1dWMWY3cDJHQnJ0d2czU25DQUNOYUVDZjRReU1waUt6OEpaSnI2bEl5dGNCWkZoUDRxc3R5UjNOalp0QUp1OFFhN0JwdFlmVERuYmlXdjhTNXoyOWYvT3lYRnVlQjFYVG5mQjZHYlA4UGs4RzFnQTRvaXVpSjZlcjJxaGZ3Ym1FNmpWMUtueVdVYklmdTBXS09KaHVrREZHL0YxZU5ocWJ4RERrZUp5ZGE4ZFVMendwQlFlSVYwWXBVdHJ4KzNHMXZxc3QwU0QzVEticGdlbGpzV3l1Yk96OU44RXg3WVI4RGprYnRZd0VJdWVaRnFyaWN3Mll0bGhuMWtBWU8xSUVLYVBOakpybGlHemxjTGovenlRU2VtU2J0Y1N5Qm56dlNOZzRZcWtMTVdWYzI4Wlcrak9udnBZNnpoak9Fdk9Pc0NpL1h4Q2pFQlQwWG9ZWGkrYVpXU0pmNU9ZTy9pc0ptZG5KclhSL2s1MXgzWkV5NUt4dXN3WVRXbnQyNytHcEEvWkhVTzJYQU9XOVM4djd6Qm9mNHNxNGE0K2ZoVWczV2UvVkh0L1pnWkhEcEF1NUkwdXd0TW9XL2NENDQ1U1VFU1JYeE15V0JkdDhkV1NzTWRmc2tqQjd1MUxHZ3dEcXpFSS9DNlhlL3Y0ajNPR1BQV1RjZmpYL2NEclg4ajV1RFpOSTVuOTVBaW1qMW9ROVFvN1pTeVZsUEF2TUZrQmpqNVhhQlNjN29FM1hhMlR0em9Cc0NUemFjcmFGQ0czN3lNWWJYVEo1SzloaThKY0JQbjZmSENjcmdiRXE3VktUa0d4bEt4a2NSanVLdGVsSkJzUXlVdzg5TmxNTm1iWnRBdVFtWU9aaGtEeFAxTkRFZWxBREdxdjk3b2JwaDJHN2I1QXkwRXRreGtBa1JjMndUUHV0aStDYnk1a3IzM2FzdU9jYUdOQmdPTTgwNDJWcURGbmo5RWxGRDNXWFVNcW5yY1NsTUJ0cWpSdGpKYnJWRW9ERzlXWWUzQm12dkZUdHNxdEthMkRUai9qK251bkhMUDMwNnNPTWduTytReExhUVBMbW1FSzBiVkV6M1N2S0NCUk5mbGFlaWRja0xLc05rOTJEZlVrekJNRkMvT1l5YkRmK3ZzMDVFTGFvdFRJQlNyRmxpSzFpaDlIcGxqMk9mWlRrN2JsL2pRdk5FL0NyKytDV0F6N055SEt1QlZ1MFhjNXV5N0xVWUJaZXM1U1IxamZaQVVwbjBpZG1wTjdVYkVhYWdZVTBxclljclcxQlhHZ2hVY3dvVVd6bWFZemtFWGNiNENxMHVRenhFRGc0QytkZWRHcWNZK2hqL2g2cGVtZEJBYnNqdHY0YTFMKzN1Q3pQdFJtMk1XekZTSDVSdHZjVmdQbGlDS3F1OXBtaUsxeHlKQW1lUXRuS21BbnFSaHpiVEU3SjdDbmJFZmtGRHhtZU9SenZReTAvQUxNdkRiVmtDcVRZbmRIRXVTYXp4MStDdWUzQWJNdDJGcW9Rd0NreHhhWC9xemx6dG5KbGRPUU1XcGlqUkdMK2dlalFtRnJua3hsSU1BS3BCT0JzWFcvbUVKTVFuQStnRHNaanMyenpKNzNnTDl4ZVZhYU1HUWE3bjkwMjJjekdmWDlzY0xFblliaWUrL3FlOVdPdi9pcGp4eEpBbGRuT2V6TEkzNU1WN3JJMFo5YW5waUVMUU9LSmMrRzlnTmxlMngxWTQ5dE9qZHU5Z0tMKzlpM2JlaEtNMy9RZGtGMStJSmlJbXVGc3NsQUR4S3hBSFJLVUZrYmRwSXdvUUwzRWVLODJRK1dJZmhwQkpZaUlnY3dpTnpNTjdrSklMS1IrU1FOdFhaeE1WblZsQmFGQXJBZkFVQU1FcjMvRGttQmFHUnY2U3FVelM2SldKaUF6citXcDNMSDJ3YU9hZmpTZ1Z2dFFWTmUwdHM1SHVpTzFuODhyN2l0UUo3RzBxUU9tQlJlTWpIMVpFMFcrUXgrdDB0L1kyZEE5R2NTSE1aa3d0dUVIYkhuTytoNER4WVlyampoNU1GVWZ6b0J6Ync1emtHK2VUOW9xdThmbWk3YmVmdVNrKys1MGFzcU51c1YyQ05lNXpXNFMyS0cwaXBwL2tNR01JL0Z5WjRZclhvVlJTRFNxdjV4TVFJeXlBb2U4TVU2NEZPSGhUS3dsUi9oMEhLaGJpTENHd01YSWk0OHRJcDA4NCswaWpyb1dzYXlKUXNGOFFSMFdBbDhiZTFiWUZFUVBsMGRMZkRZQ0NTRE5GOVNsSmYxMGY5OWtoNUxDT2xQYVQyWUE3Ly80ZDRDOUY3VjhMMUIrNlJ3YVhZYVUwVm1HeURWbGlRVitJWWZHQnNaS1hNNDNFeDBGWk5WbmUveWxOUEFBeU93R1RDTXB0ZmI5V3JPVU1hc1NQbDJCUzkydk5ldUdJQWtvdXlRMWFKY0l2bWJHN1ByM0ozQ0g5d0w0OXc4OUtWNjhHOENkcFJOMjQ4UmYxR3Y3bkNYNTZJd1pYcGwvUENWamx1YVU2YkthVGJZYXhEZkozb0o1V3dKQmxmcFJ2ZHVLTWNPQ1BjcTJUUUVuczFPWlE2UytEdDg1QVdZeVU1V2pmVGxjaDVxaE5ObGpjNjhrMHc4ZE1pa0xWaGZMUlp3Vmw1c1lzN3FhNnREeEh2WE0zTWQwNEZhSmVTc2J1M1dITG5Qc1VnV0xOdUZzcnRBczlIblcycWx1clUvbTY2eVRqc0s1c253VTRCQndjMWtoMlVsYUVzN1d1cSttQmVsM0d3NmVGaFlOYStDMVpzb08rb0RGZ2ZTZGYyTVk0ejFuNlRwUUdyZFZJL2hsaDJ0YzdWZ2N0UTNHUEpuZFhqV0JoZktpL1ZIOG5vZkRtUWFlbUp1Vm93eWJ4OWp0dDUxQWk4WG1PTnJLbUFoaCsyaCtkN3NNU2l2NndkZTd5b0M2TVlldFozVjNkbDBESDQ2TzA4aVVBeVJUUVFLbWJiYk10NHhGSTBEV0xQOVlYK2ZVc1ZoanlweWdsbFBjd2JBMVFRQmV3MFBWQXc5bWdha2VrQ0N6UUMrSVRvc3FhN1FsazI1Snh0a1U4YWJaWlBSK2tDdVcwZTlPQ2l5V3MyOS8rVkN3RVloWll2NUJqb3VyL0c5Vm1DSkxvN0VhVTdCQkRGbmZlS05PaFZBa1M3QjltMUhFdXg1aFJHci9GbTRmQU1wSGRzMUFDbVdmVFRWbTJiL0lqa1ZRWnlHckxNZ1l4U3IvZEwwVzl2TzhzanF6aVRFN3k1elZuWnF6NXRCWUR3RGxtZEJwazFyMzFkL3I4Ni9IQlQveUdOVFBpL0wvdGxtS1cxZm1DVWlyTHg5ajlweU1QckxsRkpqZHdJenNoVXVuMHNVa3J5eVYzcTFBazdKbkdRaGJBS1h3R1VzWjJRbFNYKysxaTRJaGNqYlUxMXdiTmkyYmJMc2ZnTXVNYWNRQ21PNkIxaFZMZVFmNW9RVklzNTNQaXVzc3VwYVN5TlIzcXgrRFdPZ0hWYUFZSElaWk41Y2kyMmhTMTlmdldSL0ZCbjZzUEZ3T01qTXZjcWNiT3FJNXgrVFVLSWkwRmIzcHpqREw0R0xUSHdpb21mVlk2QnZDQUN4RDZQTnJYeGlBWE9mUmMvT1AybVdOalNtcndwcDVNSHBmOFhWY24rU2p4bkFiSUxVNnE2dnJIak5DVzE1WU05YmdJR2F3YzEvTEZjTm1ldEdNTWxpZTFrS0ppY1V3TWRvZ1JxWURVR3ZTeGVqYjd0M2UzN3JzT1FTTkc5VlZzY1N5aHlPUEU5ckltTVNaZ2VqY0NnZE1VMzFjczhjM2NXTDBZWVpoS2gwMEM4SFhUdXZyNWlKOHZMcjVDZ1Y4Yjl2cnhNMjB0aWI4Z2hGS3plWW0xNHZUald6NG5RbnR6UTNTYkliZnhJdzNPci9sdFhXcFpLZGlLRVM2Sk1DTXdaaGE1cXZjMFpCRWFoaWRoUllBVUh1WCtmVEl3NVFOakExUllaTWMzL1V1Z1JreHJreHJ0V2Jqc3dvMkJRRmlFTFV0Wmh0c09ZMWc0akhnUm13YVk1N3R1UUpldnd6QXhsYjVzTng5a1lsS1RTNncxVGdVU1l5TDlqMm1COUFKakduUU5LTlRKSGxvajhZYmZBZXFmU2xRUGpqWG1na3J4dHZKeTB6QjBaSlgxaEJLS2FOMnk4alZzTVQ2c2xySlFsL1lwMzdMc2xuT2w3b3hXaTVqM0dYTjJ2dDFLR0lxWXEwWlo1c0Y2L3hXYTZaR0lPVUFrQ1hXK2h3dWZWbFo2aGU4SDNmNHU2Y21WYzhBTS9zNUF0anpmVDZYbmE5VUQvWHhHYTdYWDM4OXJPOFJjc3hlWnJ2OENYRHBad0tjSmtCN0lwUHM4RE1CQmh6WURBSlJhZTNUSG51VnNGeTdnT3NHWUlaVjZMT0FSUnd4ZUZqWThMZlhXdGQyQktUdis5bUtIVDNUTG1qbWVPcUpJYVJJVVAzUloxVjlOWXhVZ1VSYU1URFQwcXVBWlZ3Y0dSUEhSbzRuMDlxMFVSZ2syc3RRSThQRmM3eHpXeUxuWlBwQm1reVg2Y0YrQi9Oa282bUFqc1g2U2hWV3hQQzJQaFQwbEtjQ1ZtSkNyZ1R6TUZOZnd4QXZTdUI4czh4WE1MYVNNK2ExWm5VS3FFYTlESXYram84OFN2YWF6WHdIVlp4SXhqMFpmVzk3elo0NkRiUTRoMVI3WmpneEdCa25SMFR3TC9yZ0dLK2IxNENhaUg3SndJTHZ0VmJGRmJPdHc2Zk5RRXZIQ24xWjM4WEc0aExlMmZMVFdFYlhHWndORU5XYUJDazB3T05qR0Y5bHBzUEJiZXhpc2tNNWNaUDZjV3ZMNmxQSDRnelVPRmc4aytsZzJPbHpkRUd3OGU5amFJdTIrVG8rbjRxYkxOY0NUek1kdVUyK0pTQ24wUFdWc3o2RHU3b2pwcnFDcThnRysyRTVzZ1MyNytjaDAzUE8xemd6WnBrU2x5bE9jRTZOUURKNy9SYi9kamU2eUZhNkZmd0VOVUpPVXc0c1hXMm9aUzUyTVBzZTZzcnFQT3d4VzdRbkc4R1VSSWZ3S0kvWHJsMXJlVzBkSXIxZ3pGenF6Q2FUa0VKVytUYUFEVnZrcy9zaXl4Z1ZPTlcxb3lHRHMwekNPQm1BSExCbDRYV2wzMWRYeHF6bXJBNXdtZFdhTWZEaTJyTnFPU2hiTW9NRjcwZkJOejdtaWZBQ2J3Z3dPNXA2OEoxTzZ2THlNV2JQL1hIRW1PME4ya1dhT0MyLzl6bkxFL1gxYXJDUEdLSzhaTnYyWkkxWlRocTdFNnBzTWdPTk95SFk2V2NNS0VmbXRZRmZaOXV2MldHeUxCTDJLMWptNjJ0aDJWVGFHRjd6NTBtRzJkRlZQNlNNdGlhYzJ2UHEwU1NrMitKaktFamFmYWRaNVRmTDNwb3c4NzFqckZLZXBVWWhqSzg0aTFnSktQYlk1eEZIVlFjVGozYlpWZ0cvSTFUSmg2SkdkaTFvTWJVNjJoZGxXSjRUWXhaNDZyUkwwNEZVWGN5OWdTQlV5eTlyeGg2RmhpOWpjTWkzMkJtc1dacVlwbExIaXBWRzhlS0RYVElHWVdRMUR4c01XdTJzVGJPSzN3YTk3WVJnUm1telhHOUQ0dW9KWXhQcXA2NG5XTXZQYXZWcndjRzQyN2hiZno0SU5DTlFZUkU2RXFQVDNVbUo1ZlBJVDNYZzBmYk5nLzhlZ3RYK21Bd3hPdmZIUmp2TmlsVGZMT2s3V1R1WVA0UDE3N29VampXV2NrUTdjTDZPZCthdU42OTFlNVFZcytNSWNkeU4yV3Z0WVZuZ05kY1NtaFByaWNoZ011Tlppb3haTGJKaXhSTVFSc3dxRnpvQjRreFJ3cVRBNURtQjZJYXFyTlRnYWxuaU9BQnlwYXl6UmZ6eWlYK2o1V1l2eVBGT3B2UXVaTzRCTXRwd2l3b0lLNWhqSGRscG5oQWZZK0RXdEtYTWhHWmd6cVRwb1dETkYyUUZhNTc3UmpySlVObTlDbFRQcFdETTF6V3JqL2Y0MEJZay9kcWdHc21sY1pWYlpzbjd6VlhTWTIxWk5YRXpiTFZsNU1SWW1XbXFjOEQwb2RVODlnRmE5ZGt1UDNOb1ZPT1B1ckxPcnpHQW10bXpZRzFmWnNPU3kwNEl0UUl6WnNvY2dCZTgzd3ErOGJIUGhDc3d5L0luYktHV3dZNmk1Z2tZTTd5cU1YdHFZRGE1TUlheDdReStsc3VySEcvbjlWREJ1Wjk1bmNrWTlYVURaTm4rQi9uaXJVRDFCSE40K0hyRitoM3N2d0swVzRBcUV1YnhQcS8zZ1psSGM2QUFlc2lGc2FuNTJoUnduK0FXSy8yK0hOV0hCUmxqUmlDWjFKd3hrOGRqUjh5bE94RUVsWWdBQTFYQlRJR3lKR1VHWXd6UXVuOC9FdGFMZ0VHb00rTXBUR1ZjYk42dVJOWXcrRDhQWGZTZGVDYnFqSGtNbUI2U3hzR2UrY1JqV284cjVod3FHalNyKytKVVFiUU56YXVJSjMxSTVJd25mbmpBTHZid3dWWWpNRHNqdzZ1THpmamFycDdjNCtxUUJpWVNPcWNSS3ArWG1OaWRZTXZSczc5Y0ppMUFERlEvT2x2d00rL2JCRmM4dTMyVGxienhwRmxrdFkwWVl5ZVE0S2hUclJaMVloSmw0Q0UvZ0hQVkVOckZKNlZ3Z1BnZFhGcUEvSE9IUlBMUWZwbzA0RHFsaDBkZ1pocWd0VFhRQ3VNRTIwVlBBcWdOdzZsMFhRc1g1NEk4VkhXMVl6MHdUZW5uNldET01tQTJZSTRMb3hhaE8xc0RtVXphNU93ZVJyWjYzN2JlRWtXNnUrd3ZBeldqN21MNzdBNnpGMHUzMGZjRmlZbkl6cGxNeExFOE10cXNiaHNRRXFyTE9OZHM2Nk1MNVpqMTJtSEVHVU1yVHoyVS9OQVdJdjFheXBKcGJsblBLRXRzOGptN3pFdW9KM05QUUJnRlREZlBxalJVR3JPTThhRjIrWnBwNW9rSmlHZFcrV0w4b1d4YU53STVZMkJpTzdWbGFtenlCRXhaQjJiMkJoM25JeGl6d3pVMStmWXJ4dXo1QTdNTWJBanR0YksyaDdKT0NWczB2VzVFbGpCbWgrQ0N2cFBLSDNkZVQyelhMVks5TTR6aVE5ZHhWSU9YZ2FPczl1d0VXTmJ2N0lLd3BLNHdtNFlwc2FodUxGWDFucWplR1RSN2FtVVFFMVZrTVU3U3Jrb2gwM0VPYU1ZeklJaWswd0NjQ3p0UFBLbHh1czBzUUhBejJUYThTUlU3QmNDakZacGwxYVJOSHBXeTlTUURzVkIvSmlpVVViRzRtaGpKR3BIQW4wcFdCQU0rY2t3dE9zd3FHSGJkU0ZrdnRjaVBBZFBSZUQ4Q3F0cERxcW1zanVSaFF5VjJIVHc1MVJpbFBLSE1ma2VlYWh2OENvNEpZR21GcmQwUDdoNSs0bjdKREU1a1ZYMnhTdGQwQmdWZE85V0VybklYQmtqaUZ1bUpUYUl6Q0VucWVCd0tLT1ArWnpGdEFlU0V0clZERzhhMGRsUWRTRjE0cStBSVdCTG54Y0h1TFVQSGdEbEVxMTk3SlppQTVGZGI3SkF0d0RURk54YkNwUytBU0I2enhET09vbzdJVXEzeDJWQ2ZHL3d1QVd1ckFkTlNCVWprVXVoT1crMlpZNG9BNjRwU2kxWW1HU2taU3NFUTY1b0xSRkhLM2h5dUs2bmpCNzNtbXNpMlZpTm1mOHEwNDByQngzNzRCczRLNE9XMVVXTm1lVzZaWjdsbFZITldDK1dXRWVnaUVOYVpKSi90OFh0TldTR3dvcUNHZ1E5eXEvdzBWQm94VURxVE5UcExLQ0hHSHlKakRIVm1QaHVCaEpxNWt3QXRxekY3U2xBMkdMT3lZTUFNTy81dW1PdlJub0F4ZSs0NVpzL0o2Q05iYnBHaE5SbDduRmhHNjg4VWpQV1FhSlU2TW9BanFlSXBPZUVON000cEJ1NGhvSXJydjdRZTdFVFE5YXFORDBHZ0FGQmJBT3ZkMTR0MTNsUjdsakptTXBhRjVONVVsOEI2ajQ3ME9zYnFTamJXdXV1c202MjkvMWo2eUwrUm5zWEx6QnVMdzg4V0VoMDZ1aEpSS2Z0SjYraGN2ZjA1SmJ2S3lKalp0SFJVN25NdzlzUkZ6VExGc1ZlVlp1OTlxamRqZ0ZiSlRIdEFpTnBobFlJMFg0QzJPVzY1VXQ1VERUbEtuZkVPaE9YMUdBempqaUczbkVGVURGOWlVV0NsNnArdzUwMlNTRERSdUs0cHVZTU1HUjVDbGxtb1M1eDZ6OEVnMVlOYjByU05HMnNZWGVEVnNUR2poWDA2clR1TExXQ2U1eWg2ZHB5UHVqbUYvcGxrajNQa3FyYUpTelljYlNkSHJnMDFvdVZId0RiRzBZZlQ0WFgrSXJwQkJnVm5ZOHhBRm9DZG9uRUJaYVNCVnBkR3lPdEF0SHVBWFExY2dUaXNtZ0FnSTdCZEpKYjdFc0JUVzNlWnZCcmp4bUtCTWsxNmhqczZ6enlWTWs1M2tGV3htWk5STFk4Q1BVN0FzUnpTbkRLL0lRNk1SU3p5TVNTT1FkcW9OV2tRUjhncEJvVlFaU0dReFJOcWdTVlZmYVpTaFUvNitOQ0dKRjRiY3NwV1U2WW5wOGhiQXlpN2ZzWU94OEg4bzBRamtJa2xxMlFLWWhHQTdWbm1PMDdZNVNlQXJNc1dJYXpZQ2V2OExOT3NXK3BqV09UN3ltMFNzOFF4aEUxZlFkblhXY0UzUGVXQm42V01lOU0rQ3RaeVlQYUtNWHRHajlYZys3NWdEWUJ2WWNwaEdYcXZyNmVGTHN2ckpmQkxYdU5vbVlRMVUrQmlKeG5DTXdZbFp5U0xXYzNXVVg3YzN2ZWM3czIrQUdsOEY1bGtoMWpFRnF5TVU4NWNRenJoM1djc2l3eXcyQjErdTY4WmRiN0FURVMxUGRGdzZVbkdpRHh6S3EwM3cySkI3c0RVYThZZ0JodktHWURzYUFYTThSWnlRRXdtYVF4dUprZ3MxbFgzWlpqVGhTTlRGQ3RaWW42VkJVN0Y0dUI5QTB2WEV5Yys5eVNTV2dHYUJSTVNSeFFCempsckxuWWw3dDFTcjl1c3R4cW94c3JCdDhHck5qbms1RENGWnVqR0Y5MTVFS09HVEtXUklOZkZ6cWxWS1I5cis5cHEwU3F4dnJ4WmRiUys4OFM3Q0U1NVhVRVMyR3ZMaGdNaUljNTRpcmJmTWdJb3hGSmRTeWU5dC9Hb2t4dm5YamVvc1BZYUJJaU5qRUdHS1VxdmhPTEFjOGR3b095bmFoMFl1a0dDdm0xYnVIaTBLT0ZPR2l6TzdiVm9RZEZiZTAxaUp6bUtTVkdUemJMR1BlMWNpbTJhMjRRSExxclMwVmNocU0xN0ZEcHVWblpyaVZZUkFHYVR4eit3TnE1UUcvMlNHdVJ6dURTa0grZlZ1b201WVltTWxqcnllb2szamdsODhaNFVNZnV3R2FUQkk0WnV0WER1Y1puSis3K3dsRUoza2xndzNjRkJ3V1dJL0duQm1aYzNjQ2xmRHk5Zk1td3Z0Mk5lQzNCWFpyYk1PTS9NcnBsbFlvbmY2c3U0dG13bFlaeE1NM0M3bERGOWZpQmxWQk9RTEdUYVJlSll4UWlrL2IxNDdpNloxWnB4QURYVm52MlVHejZJZ3IvOTFBZDlBRE5iQUxOVk9xa3RCenFQZmJZK05wQjZVNjZtNS9LNFhDNXBEbG4ybmdLSWhibEg2dE9wVWtkbTB5QkdHVGNBb3JQQVpmZDdKOW1yZTBrV3MvMUhIalZ3QkFaMzMxdUF6WW1tb1dWSzB1YXArY2RxMmo3Sk1tdnYzVlhHRDRqa2tyZWJkRE5wOHloN3JPUVpiU1dXYmZSZnZFU0hKMEFjNXhrU3RCbDZpL1ZrWElibGtYell6Y2NpWndtUkNuTEJ4QW9TVmlvZUY4YXMwaWlyMHNaNFFnc3lYZWlKKzBrcXZjVEVUa1hZWmFIZXl3bEFWb3FaTmFvWUcrS2ZHTjVyWXZiaEhaUkZSOFpLWUc3bVA5UlcvMnJJd1c1M0JrZXQyOEM3clNseFdhRFpFZkpxTWFxbnFpU2s5TEYvMWlZcERHYVYzQURidnRmUkpteEpYNVVnMjJyUmpJRVArbnMwZlhOZGJ3VloyRHRKSExjajVBUmluVXhPbkVhMmpnRUkyY3EvTlUrVkNRWk9laUFUbXhvZ3ZYVVlWcFh5RHNZa2c1NnUzVlhTYVI5cGtPOTFHSUd3Q1FuVkFOVU5CTHRNYkhnM0lnR3FlVFRRNEJRTGorQVdUbWRXVmJwRmlLWUpqSGtTNElxVXVjdUdLQXk5OHZlaWcrTXFvNFFCVzZIaGl5K0QxM1NudUs4cUJ3T3EyRWRvQlozMmxYYTBBMDBKaUdpRTJMdFRrck9uZWQ2VytVd2krbkhNbTc1MjBFUkNHZmRiNGtWK3dDVWJJR1BTM3RUSE44UHQrMUR0ZStIbGx3V3pEMk9ERDJMSWlrZ2V5ZkREaFNIelJNSll5OHdzQlR2OEJWTzJKMlhNQU5sS3lqaVpmMkN1S1p1czg1T3c2Y3J1akhYSUVrUEFOQU5QTEFIYWovc2Qzb3M3L09pYmNjQmYyQnVQZUo0OURXUDJ5dnpqRVJpek00d0pjaXY5TXlBajhLbzdBR0xGQnRrOTNrUEczUzVZb09rMmNsOWd0Z0JQcHdIYlBjRFlXV1l2QlhKU1l4YU82OUcrTDY2OUFzQXVTTzVWRkVIRU5maVZTMVVxNXloSkVMVGtmSEpaVlUzTURQdjR2RWFJRXNLbWFXeGFYYVJhQVZSUzBGSjE2ZFFLalFheXNEUmVsZ2RGclFaTkdMSnFTZjJZNGlwUDZEL0hXaTVITEU5YWF5U0Q1VDdBSlRCQWcvTkNvc2ZyMEtYU3VLZDJheER2KysycFVYODArVkJ6L3JrbzJVTU9nemFIVm9iTnZibUxxK1d5ZnFyYnJJUFl1dGoyazhsSGdzT25TaWluRWh4YVh4K1l1NGRnOU1pOFJrZzl3VmpQOW52c2c1WktxbFg5bk9zblVrbkpsK3ZIeDhtNGhBMCsra3lMa004VnlkbmxJdjEwV2pUS1R1ZDR4V2hvQ3BXWjhyWk1VaytqSExPRVVDcml5YzRUSENiZTYzWTBaWnluOTYzd1MxWVpVdVFLNGlGVk0vL2crVytiZ0ZxNmswaXQzNGxCVzFvTVdFd1dBTm5ZVTlsa1lOck1JdlhuaklHMnliaEdYSVpEa0FWTUwyenkyWlVSRy91MjZ5VTg2ZWtUV28wUnBCTjFOOGtYNnhOeEJydVBIMGExcjRDVmJ3WEtiN2tDcncyRWZYNExraWFHakdXUHpKWjE4RklFa0VtWTlKSTV3OHljTGNLV1V5bmpNc01zQVdpQkNVTWVNSzJPalpOTFkxWnJockZ2WWIvS1FwNXArRUcvdzUreE53bVVYUm16ejJFL3B3TTRWMk9HUGtQeXFHZnI2NisvSHRiM0NEbG1MNTJVOFlGQTVCWndGb1lHV2EzWldZQjNBcnp3OSsxRzhISUxJTG9aSkQwVWRKNTRYOEZYT28xM2htRjhDSXV0WTk3SnJNQ2l1enlZL1ZJN1pjVkJXZHlYWjBsWU8wN3pFbVROQ2lTZlI5NXhBN081bkVBZ2FwaFJrZE9mWFJubExxVWpaQTJZVGtmOXRGNTFicFRocnZVYUx0MkxTc3U0Mkk4SHFuQ1dodmJobjRkNnBQRmJjN1Vhd3pFSUE4ZjFUNVVsajRUS0E0QW5KTjB0MVFIT2lSNmdvakV5d2Y0ZG92emNxbjI2blQ3SkZkbUFUd1p2d1pRdmJVSFh5cTdBbkJxSEpmY1FhZ3diK2U1a09DaTVadFpoS2doMXFwbGJqZlNOQXJSdDV5SWx2bTNVcTIwTTJlWm1HWEszMjMybFJRVjBhcytDdHdlRHFlYWFLTlhFNU5kaW5Gd2dmUXZGSUlDTzFRWWF6YXg3T2ZCbGJLMERDUGI0V01nWVRad2JGMlJVN01FUmc2UVRQSURaS3NJV00xNnE2TDRMQTlvaFFZd01tTWs4V2xrQU5BVm4rYTBnNEJPZnlhUXA5b3N3clNVbFdBM2ZxR2RSa0NjbWl0SkM1aDRLMERvNHBENjlXRUtRQVZLNFdLTStrK2NvT3pqbm5haHlkQ1RYNWMxOS9Cc0F2eFhWUGdZdlh6T2JmZERyTFVnYXhRSVlxM1ZtekVMMFRCSG1MSkV5K2hrcDR4NWJobVBMZk00dnkrenlselZtUHB0L3FDSEl4Zk04czVvRDBPL0VGK0NQdjlrSCtvVi9sazV3ZXhpbjVFOWpsLytzR2JqblpQU1JMZGVLNlc4QlhDc1FkQXRnMmdNOUM5aC9FMGc2QUI2bmx0MXBsMGRwcjF2YlphKzlWcUJ1d1g0ZE1ZejNicTkyZDhxU3FKakkwYXdiaCtBWUkrQkdCZUpNUEhYVkhnWnIxcDlqUDcvTWNlMklRUU1NUDlYTnlJakRhU1RoZ2h3bjkwYklEYjNKU1N4S0ZnTVFneGg5aVBkL2J6TXg0cTQwZU5UUEJIaXBETEZCcTBMN3krd1lzeVpzcjJDZFNhdEFjRmxVQ1dNRlF1U3p5aGxyZ0RFTUZKMTBUcjNjakZncll3a2NJclkxak55eVlYUHZvVDZzMGlqUzRjT1FvTXNKWTdUQ2lMS3JsQU9tbnBjK25kb0lWdmNEb0ZkUTlsbVRPMVpPV2g4MW1jUHdoTHcwM1NsWERkczZ0K1ZrcTVvRG8vUE9CRGJ1S3QvMDJtU2NSdHZGb2VkVmNzeXNTNVRiVG5xcnczUGxqcTRYcm0rNWJlNjFBNm5yKzhicDJHTUt3VnR1WEpOd2drRFlZTzk2Rkp3UDFuTUViZFBzVEdQRm9LQXJjWk9ZcEFEVWVVM0FkMThZaU1XUUt1UFZuSzZ4RmtDaENqMFh0MFdJODJLc1VKdWpxMzBwbkJ5dkovc1FFN201Tkl0dDhqaXJzL2lBdTA4VDlGa0kxQldibVRKSW1SZm5nbmN5S3lzRnkrNWM1cUtwMUVrSlgzQ1ppMXVnRmJ4bDRpdkhId1hzQjFETE53SDJualJRZXJQSjl4WW0zUkpiQ2tuL1dJbGlNM08ya2pMV1BTa2p4R1lleCtCc2tqY21Odm1oN2l5ck42dFNpNWE1TTBxMm1aZmRtclBQZU1HZjl4ZjR6cmVDeWNscnpGWTlpTzlPdEx5eXkzK0dEODcxdW9FaDIyWEViZ1Z6UjU4cFNFdXl2QjRLSm00RllEZS8veENRbThnUS9SWnA1R094Ynd2Z25DM2ZYUmxkL1NsTU1zUHF5T2ZzbWN6aW1vaHRkcTdkdUozeGpKTzBBam11MlhPVER3QkRhczFpbjBkVHNKUDdZZGJwU1loUDEyaHlPT2tCTUFNaVMxYmJBQjRqMlRQNGxOZFlYN1lvbG5NeTdNQlV4Y1VDeDdsSXNQYkJJUVMyZ2ZpeE9WQTYydUdENE4yUXh3RXhoeXVha1d5RDAxcXhJak9aUFVMV2wzSDRuZnllU3Q5WXVEY2tkUlo0RFpmUnRYTVdVbzFPajRsWElxSmNjdXpNck1va2laUlJiUTR4VncyY2hab3JnZHR0R3cxMXVvRE5oelExc0ptTmFmUnUxUmpZdURGNVF1MjNzWHAxMm84bytRekNVZWNhdEFaR0I2akxBc0Q2c2ZIb0dPazFzc2Q1dm9lUDlqTnNUaE5DS0RGNUZPZ2Jud0ZjbjZ3UmJaL05uZlRPRUdsblNPS2J3WTRKL3pyTzdTWXl0aUEvdE8yYjFrRmJscEJtRXA2UmdjZmxWSldVM0JtWGF2RThBRVhDdFFrVEV5OGtJMjNiSkZIY2tTMmF1TzBHa292bjAxSlcwd2lncjRCWEJsSnIwbUtzbW5qTHFtSXFnSS9BOFk5eEtmOEF0WHhaczhPL1Nob2I5VlVHSUt1WXpUL1ljWkZDcHBtQXF3dEE1aXNabysySFM2ZkdIeER3Ulg4bmxneTBQNWhyek5oS3YrcHpNUUpac1dWdStDVHU4QWRROEovZktyQndyVEZiVGZmWTN2QjRPWlI3VldQMmpCNTc5dTBNS05yTVpQYmQ1RE8xd1UvQkNkdk1ZOS8xY1pvVzBQeXRaSnZidWgySnBIRUxsUVp5dVdPVzhhVy9ueko4eWZ2THozWllxdFV4eWlpWXM4RHp0Snp4eERsejlCM1R1Q2V0SzRQSExPUVcrVlZwQnJVbWNEV0FLb3VNR0pOSnpJQzU1T0Iyd3hHU3JzbVlPeityUE1sOWtwbjg1TVBBM2t5amVheG9QWThiTmhYSkVSMlVVWDRoQzhEVG9aYVRLYjErN3BSa0Z2MGNyNTlld3ZoMU9ESWFnUzBqY2FURUJHTVduYzZ2TFpqbmIrdExDcUs2SlVHb0FmUElXbmpDYURCSVNETHQ1b3RUaEdSTytXWlR5SGNkOHNOMHFza3AyMnB4QTgzeXVDb3hidjM3RzJBeWszWWV6Q0JMTGl2bUREczJQaG52ekt4ZlpQa2FVOExXcXkzZzI2VDltTDZhR2FjcCt5ejhpRVRROVQ3RlVadUUwNk1EYWM1WmNyRDJjUGE4ZGxabEJsK3B6UitrNWd3ellBdDJnNWd5M2daTHZSTXBNSFY5UnQyVFRUY0NCM0FYN0hubXZMSkNnSzNWbmtXWWwyV2ZSY2VNTEdUYVZodXR6SmxJRmszeERDanFzVkE5bWUvWTRHTnRsYy90dzZhYnFaWlU3U1UxNnlMWXJLcnhCL2RuQlF1LzM3Zmk4Ui9oK0Ixd2V6OVEvakpnZDhNcXZ3ekpJakZtVlVLbHF5VTIrUVRXMHRxckUxYjU0WisrNXp1dkV5a2pzMk1NeGpUTExMZ3krc3lVNmV1TEV5QzlidWZuYThFSDhRTGZaTUQvZVNzUDdGeGo1dnNNN2k3MGVnSmdwalZoajVCajlySXlaaXNHTElDekZVdHp3MmNUUzVZWlU5eklzSzBBQjRPaHliM3hyQ1g5Q1Ric1NUN0R3cW54SGd6WmFaYnM1R2RITEZxcEh1dWt3MDJkSlNZc1ZaUm9NRkFZYWZ1Y3lhYk1UUjYrWU00OGtRNTU0cWx4ZUV2ZHMybDBtVFd0eWN4cTFhbjRLTVJmN1FEa2VSVWFrb0dqMXhoRUhRWjAwYVliSVhHcVRpTVczZktNRTR3c1FKWWVCK0RnZlFzaVNzaHp4c0JTcTlZQkRvVlRUNFA2T3ZiWVdhdzNRcVY3alpYVWl2bEMreFNqQWF6L0pMa0hJYXI3SEZadHN1MTNBWm5UcUxhQnZ4NnFiWUhOYXZ1Uk9uaVFkaXZJT1h1TGVGeVg2ZlV3d0dXdjRWSW12QzBWY3FEbS9MdFdMOWZOWnh3NWt5Z1RIZzJBTlJCS1VIaWJZS2xoYmtJck8wMmNTY092YmRKTjc2TjZrVENHU3p5aGFxVCtMc29jZ1J5VmF6Q0VSY0NJek9IVXduN2JkQlUxTm0ydUovTWdVMnl3UVowVkxXWE1JcmF5Q1d1RlhEcGd5bEUzUytkQWVvTEE1Sy9SbUdaeTdWMGRscXpNRDJLU3VPcTFiZVdaa0RHZGpEcERralVXemlmUDd2R3pBRDZBYXArQTIxOURMVi9aV0RPMXh1ZThNaWNKNCtUS1NBRE4rWFpqVWtzbTlXV2hsRnJxeS9Kd2xUdzlKckJtaWF6UkJaU2xyb3dDMHBvckk3L2ZRNmNCZU1ISC9RN2ZnSUpQUFllRCtnS2ZUVGlwSTh2OGJJSjIzUGRmMmVVL1QyQjJLMGpBQVVnNEFsTTNBYkV6WU93aGdPTU1FL1NVN1hQMDNTZG8zMGR2SHdabXZpQ2NRbzBCMzhqckFGMnFYQnIyNGNKbWxKa3dDa04raTZRUlN5UXJjbEMybHUrd1BpYXhkTXl5MXNOc3JDTUxjUTNBRElrSnlBVE1NRE5Ed1RKL3RWY01ndkxobDArZHRTV0Rad3VCdHpPTnkwWWVucnlPckF5YmZJd3RuSU9OMFdkTUsrVmh4Y3kxNnR2eXpRbVFad0xhNE41NXV4bm8xQUVlaktSMVp2QnV4eCtkQS90ZVdSMHhEMHlLOG5nT203VitEVVZ4Mi9JK0Fxdk5ndlY4QktNZUpZT2h4YXhyd3l6YUUxTDkzV1lRc1dtSU96QTFkbWNjdisvRzRDdzZXSnE1T0pwNkNJTnUrMkxDdEYzQlZyU1hNYk1BZFR1eHVXMVBiZTgxbzVHZVh5Wk1lcGNteWo0NENNb2xMSHoxSVdWTVk3N1VxMTBHODZIUXlYT2tNby80WVR1OG5wTmtPRGhYeXRYU1JJN0RBelhXaTVWd3RRNzJMTEpsL0w0Q3d4eFdZckg3M0tWTkJMWE5FM0dtb2dJYmNzWU1kTm5xRU5Cdmw2VEZOU2hnZnhncGJIdDZSMEtpaXZBVU5qK1R4NzhDN1BlaTJoOEc3T3VyNDlkVUFtR1Zhc3ZxRG1OMitBODd6N0h6UFB2bk84OTNtTE85b09uSnJiSE8xdm5CdVJINDRWcndtaFg4UFhHd2VvdUIyZWVReDlJYTF2Vm1peHd6ZXhvZzlhelg5NXlNUHJMbEdKZ2RnSXRUbno4V3lMZ25HTHNWY0RqeUVPcjdBTE93VE1nVXVuR1p2VHExSjI2L1BWRHFOM3hlYXB6NEhqZGR6QTZNb2V0UUMzU2JYL2RiMzJYTTJDRnhsUTlNR2QxYlUrZDVPMVAzb1hwTUFXalp0REcydTE0NldCUG5FM1l6Z2JneE1oTTJqY3RGSm9hTW9uUWFnRldadHplcE5QT0pkOGpnVzBEaUNVUEJoaDhNMnRobE1acUFSR0RIdFZFZFRGVlBiT0pIVnBYTExJRHhPZVcrbURzVVoxcG1mUWpZZVdBNjRzcDlHVjNuTTNIWkFZejhob0N3ak5HRmEwS2RSNkRrczVneDdyTlRlYVJqRWxOckFXWTRxVHdDb1EzclpPYWdEamtlTWxIaHBHbDJUK3J3bkNBS2dXSndEbDBBWmVKa2FnaE9MZk5WSjlkZWM1ZGd0R0ZpOUtGYU9OYk93UmF1RkhQZm9QVmhsbkpsSmt3M3BuRmhTeGFNb2tpMjZFRUFhVWJRcEJCWTQ5OHFBU2hPSXRiK2VSalFDVkhOazI1bXVaREtiY3plOWNrNmFXS1Q5WmlhSXlKS0hhSE1HUzAzWmE2dGJxOUtyWmxqOTg0UVBqS3NaT1BQWlI0ZXdFZmgrRDZ2ZUw4Ny9vUWJ2cWdER3E0aHkyckxqT0xRRG16eW1UVmIxcGhoQm1tY1grWUxVTVpzMmVUS0NHSElzdG95WWM2OHh1VTJvUFl6WHZFZGJ2Z3dDbjc2dVIzSUt6QmJEUkg5dG5QUlgwSmc5dHdmWjRLVmJ3Um5wNWM1QUhHM0xIY1RZRmtBa1NQMjdpYmdJN1Y3aDZIV1owRGZXUkIxaitVZXZJdzhTaGZ4U1ZGMjNadCtUVzU0S24vVVl2TEFpQW1jVVBBMUFUeDU3L2hXdW5KQjJ2c21CME9sMGF5eG9HbTU0UzVNR3BLYU5Fc0FaTTZNbVE3V0orRWdmMHZuMTJkSlUrMGNTSDRVWW9CMHRQZ0ltVmpURnNRYlRiaE9WTUVYemhHeXpBLzdiSkNrc3NBOVFKaEFDRnkwTExVNklEMkxyb3JMa1Z3dTk4dEJOZGMxMmhZTk1COHJqZmR5MHpxeFllMFI2cm5TMDlmaytNZ25QSnFXM2ZQVlpaSFdiQ0lGTGk1ekd4d3MyT1NOellFemxtMXFlbndpUTFXNkhyaVczeXhOUFJTazJTeHBoS0NPM29GWkJnY0ppRGt4V1hIdmRVb0VVeEI4aklTLzYvV0RXak1HTWc1UjFtN3UyMHhZTm8yZVRxM3lxZGwwbm9xYmpBOW5KeGxiMWhqaXNRek5iak16RnVTTmxwT2JzQmtRbXEvR3NEN0xHVk1iU1F3cFkvRzNveXZCVHdINE9xLzQ1bXA0WDNYOHFWcnhudTZrei9Wa0xpQ01MZktMeUJZWG9DemtpNHBkdnVhWUhkcmxJM0ZsUk83RW1ERm9XYzRaTTJYVjhSbDNmRHNjM3dMZ3Z6M1hBM2lWTXA0ZGtyMEZOV2F2Y3N3ZU9JVlM2MU9CcWpOQTV5d0w5dURsYmdFck53S2wwMkQvbmRwZUNYQXJGYlBQZ3JvZVduSnoxeHEwRU4wbHRpY3VBSTBINnluR3diN2R4SEtTS2ZoQTA0RExEOURsSkdGVU9KTUFzeFNnMlJ3WWZiU00rdzVyb2xLbzdIU0lrQzNPNTBlQU40czBYWml2eUJCWkVDeDZxRS96NUxNUWQrMmVEdlF0RWsrVXRhVkFTL1BTY2lyS0YyZ2ltc21uRGp6Qlo4UjVFSmVmZFlFWDhmUm5SU0tWR01pc01LREx2anR5WEJsM1h6MGRaenhscTc3UDVEeVVDWkJzaFJNTG0wMzZhZ1FDZy9rZGxuQTVBNlJLbmg1eVpXdERQa3NvR1dSc0dka1NCdWFzeVBVUWE4Y2k2NFVBMzhaVldFSjlaTjM0cjdJdFhZSTBNUU5jNngzVDRWa0Vmek9mWGhEbDRWTy9yZ1k2cWdaUHZKSk01TCtHQkdUWlR2cWE1VGUzVUF1YjVabVo1VFNZS2JxMDJNbndSdVVuN1hOKy9BU0E5OFB4cmU3NDA5WHhKMnZGRjNWakQ0cWtxU1V5WkU2T2pYNkQ2Y2NFempEWGxaMTFaK3lmcWF6UjF6Vm5WZDBhQjVQMk05WHhFUURmQnVDL1BQY0Q5OEkrbDl5dno3QzBpWFBqeXlobGZCc0NzOU9nNUFSVGRRdmI5S2dBNUlqUmVrU0c2QXlRZlhCN1BXTDdQbnA3SmIxQmFSMnJJWGdDaEVHaGlWUVJNaE9yWkJEZjNGbTk1SWtrSnVDV1FxVFZEbENETGRpNXpMbzhnQzYvb1U5Y1VIOHBXa3hzTEYwNlY2MC9TMyswSWdxb1Z1WUMyZHhackRYejRPSG1VMU9OaW96WkdsOUJtOWJPbUJ5UldJK1dNR2JUQ2Nocm5GS2dkNWFmeVpZZzN0enFtMVRhRmJCQ2NuUHIxVjl0RkdNN1liMHB5TU5rRnBKRXQ5L3d5QzY0QXpDNjZBbDljbUpzWTFhZkJ0dFRxTHNFbHZ1cU4vSERpT05wTW1mK3hIWm5qUHZ5Ykpkdmk1RTlsSTVCWk5rbWVpZ1Y4VzN2bEltL3RsMnd6djZKWmJ0bUN1NENuNTF1ZE9DNTUxb3lyajhiMzdlcEZkZTN4RUNlMnV4NE8wMUxTZmRsZkhsSTUxeHM1MUFrT0pvdkYxc01PRzJ2Zzg3MG1GaUF0dWttWVVkWDlITjkvQ2NBZndrVjMrS0c5em53QjkzeHkxdHRXUWRFd296Vk0xSkdMQndaRTNDV1pwa2xkV2FlL0YxSkdhZGNzenBpUHpkZzlsOGQrQmdjZnd2MmZCbXlDWmpoczFoYi9tWWQ5MHJXbU4vMVh3R3p0L2h4UTFEeVk3QkNqL2FkaHdDV1J3U0Z1aDlacE1DWmVyc3ozN01ianFuZjR6czd3N0NiUWF6Vmc0SG54Rmg0N0NheVZuTVpaMms0dFNNSFg2anorMGk2S1YvSnJqTDJRdkdybjVpMWN1U2YrK28zRnpwTmVMTERSNWVCN3pNSUFwVG1vVVptT29Fd2xIT1JNdWFDd0htSDUvK3oxM3llUmhuWVBFTGZ6c0JtSjE5OWsvVXhPK0E5eXlwa2hTTks1TEk2c0RGa3ZnWTNzMFc4SjdIU1R1WVRZUURjalJKMDVpS2UwRzRFcWpmekVGdUJ5OFV0MlJSb0MwWXJGT3ZOcnFoSWtrUzhCMWx2N2RpTU5tckNObFIyelRSUkd2ck1YbXhXOXR3ZFZzSTkxNzR5N2x4M2pQUjRIS2ZTT2JzS2JvY3Fjb3NQOEEyWVphTitIQUN6aWU1WjhUVnQyVEo5enhadXFldlpjS1BKRHhNeGNBazhHOExWZ2lCTW5JTWFvbjArL3haMmhuVTFxZk1LVVk4aVIzUnVyblpjdWZtSGo4MlFSeUkzOWNDaXZzd3prT2JSRVYvU1VTbG9UVkhrd1ozUkdTRldQTlA2c2pPUEg0Zmo2MkQ0Z0ZmOGZyL0tIWCs5TW1kcHdEVE9TeGtERUZ0bG1Ya0VhcWVsakpBY3N4VlQ1dmpYQUQ0TTRCTncvTnpiN1VCZGE4ek9HSCtjSDFLL1ZNRHNPUmw5Wk10bGpOa0RRTk45Z05PcE5yOVYydmVJYk5BUmlEMWE1aFJMdHZlOU43RTlId3Y4bFd5TXRzeGxSaUpGRTNsaWY3L01RZFZoMWhZNUNQTXpPQWpMYkdLNjQzc2lUZHRoSjRDRUtRTlNUZWEwVVZrdEUwODMxd1ZJOUIxc0dQendwTDZMWjk5OUdzREYxQ3RNZ3pxd1piMndYemJKRStOdmNPWlp0TjZYNTc0R2ZsUHpzL0dESTRtdUhzQnBocWpJelRjbTRPaHplUElFdkQwNFJFNDQzMWRuWlp3eGNOcW9QWkNjQXRyc2xVZndvMUxCZk1hQzlzSHJBa0xyN0lnajJmT3BqU000UzVzZ2huR0hkYXlZMUhtNWlMR1o4WkxCZU1xY01WZ2p1REI5TDRQSEpWd3BNOVRpS3pTRFJQRUtMQW1BOGdESVRJU01OdTNVeWx3N3EyYWJiaExiUjNlckc0a2xzWUdXTjQ5NkkwM1crRmdjRXB2cjNDWkliTkpsTHpPalJRRVI1RjQ3c2VCTHVlcmJkbzcvRFFBZmRjZDNPZkFiM1BGVnRlTDN1ZUZYVjdiR0x3TmMzU0psOUh0S0dkWDhnNldNV2RpMHovOSt4SUZQQVBodU9ENEZ3K1h0ZW9DdWpGa3lPYlNjUlRpZTUzK1ZZL2FNSGp2QTdLRUE3YkE5SDhLVVBUWHd1Qzh3dTNVZkhncDg3d2xtNzkwV0o5bTRVakZQOW5MTnpaVGZ1ZWhHUXIyT0FiaU01NTVNV2lJSnNOYXhwU2QxTHgzWTFaM1dxcGs5L2huM0kxL01OV01HWm1GbjZzeXloWG95K1YzWHBOYXNVN2JVZnNLVzloczJnUm0yTVlpbUlTN09jU3FUMUYvUStySzg5bzJCb05kS0RCSzFyc2hkQnhPVDNLUmNwdHJsTUUzaU1MZk9zT2lnT3VPcTB2ZnBPSTVBYkk5Rkx6ck5MNnhHdHMrdytIeDh0aXJ5Z1JUWitDSjB5cWp0MDRUa0hpMmdGaVByUUt3VzdMeTFKZWsvVlhHYTFTVk5FenVJSmhxUnVaamJhVmZkVTBveVFNY010SFNBbnRFeWh3RE5wcXZSRTlpVkF6cTlQa3pXdmhidStRVEVMUG1GK1V4YkJXeDBJTFM4OWc3dVBzdDZYa3hXKzdhRGhWSU1wWmVmNVlkMld1T2hsUEZvUjRCN0NFK2U2K1BuQWJ5Ky9mdXI3dmpON3ZpcUN2eXVhdmgxd1Fna2tURDZJMHNaM2ZjbGpabjVSM1g4a0FQZjQ4QS9kT0NmdjFQRzdTL3dCaDZQbFgwSkdiTzNPekJyRWpzS2F2YjdncFJFcm5jbUUyc0prTXhzRDBDY09ZNDM3Y1NaZGZJMkhiVFJveHVSUE5LNTdTZC8yODZ2QkhtdGlZQ2xYVWRYeFNhZTRCbFBKdXd6cjRnRm9lUitjb2RXTnBFbmROenA2NVRlOElNTnl5aUZ2ZS9rQUNzZmlpTmx0ZUl2ZThLc3pkdmxrWXZCTW55WXdGMXMzY2pIWElQTHI5TzIxV1E3bmRiakZwd1VYY2JQVFVwbkNiamxsTE0rNk4rNnlhdXN6cnZkZXpYMXBMbWVYSFViQlE2cFk3TitieVBYaXRhZEdHS0thcy8vNnFIU1ZORkhZS2JuZXpYZ1NCa1ZsU1NHZllPTWpyRExNRjB5TEliMFV3S2srNDBEUFJjdXVuRnV2MEJBTklSN083R3puUEhuVjBkQmVES25FSlNlbTV3VDZNSFpWemtkY2IwYU5PMXhHOElBdk8xTEtUdTlXNUpobUMyM25HbnlaQkFVWmEvelZFUGViN1NZNkptMU51bVJXRTdiMHM1TTRpMnNQOGR5d3NIU3E3dGdWaGwwR1NMaDJ3RFN1TDQ0d1VKeFlMTGYxT0g5REVjZkxXZUxMclVzZnJHRnIrRm92dmNkQThxeXh6L2IvdjBWZC94R2QvejJEYVQ5cWdyOHltbzVnM2FybERHQUwreExHU2Z6RCtESHF1TS9WTWYzdStHZkFQZ1VnTSsvMHc3RXZsMytyY1BiSndCbUp3Zmdwd2U5dGpmYWZ3YytqZ2I5anlteHV4RmdQQXBnZVFyVzZESDI4UkhCMXFOT01weUpTemdGK0k5Z3FLK0FiVUlHTFpaM3V3MXQrMzFtY0hmeDlKRVRrcC9iK2IwdXpCL3AvVFFzT3Z0azNlQlJkcFhMSHUxUTJ1blM1Qm8rdlhaRURJTitPNUwwcmRiQzJZRW0wZG01UU5LWERvaWV1bzBpZk96SlJJR1BvR3ZmY1hZTWt3d2lCM1J1Y1krTWRNZFlPdnVocmVYSktjSnl4bGpKbG52bUwxbzZmTDZ5MVBkMHRpU3RCdzJmK2R3MkltZjBNLzJhV3NRdUw1c2QrWm9hVnRqNUx0TVc1aWNLcW16NXd4a3V0QVhUdE9iRWRGMnJZZHFlVU04eXBzc1NyNXBFM3BnMXZaVWJiajUyRWlNZjNibHNaMkJyUnhZaU41ZDF2NTBmUHcvZ2t3QStDY2VIQWJ3Ymp0OEV3eGRYeDFkWHd5K3V3Ry9iUU5ndkRPWWdvSG8wNUZKR1J4NHNMUXpaLzkzKy9tQjFmTVlOSDNmSHA5M3dMOTZPTldNM0E3TTNQazhYNHdGajY4cm1TNDlUN1cxeDVyNWl6SjVCdTczSkxORTdIbUMvNmVmVkNyTDRPZHhqT0hhalB6c2xrMGtYZDRIWnViWHVnb2Y5bTNlMkkyZVJZZVoxanBQZnk4RmxsbFNWZWIwZFliK2NRV00veUxwb0sxL3VpZjcxbFl2TDZVTzROa0h4ZEEyT20xYjU1bC81NjgyNHRVL3dHM2JNOFlCMmVZYm1DS1hjLzY3eXdEdU1uVDQ0dHZzZFQyQWNnM0JibXNUWXlWOTlncnZ0Q2cvNzdUK2VRcWNIRVZqMmhEditqbnA4RHNBUGJzOC92cDA0WDdKMVFWL3VodmRzRE5mdnJJWmZFWmd4UzlneUFXVGI2eCtyaGgvWTF2TnBOM3oveHJqL3o1ZXh3ZjgvS04zU1hCNzlrOWNBQUFBQVNVVk9SSzVDWUlJPSk7XG59XG5cbi8qIFBhbmVsICovXG4uY3Atd3JhcHBlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxNzNweDtcbiAgICBoZWlnaHQ6IDIxMXB4O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlcjogc29saWQgMXB4ICNDQ0M7XG4gICAgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSgwLCAwLCAwLCAuMik7XG4gICAgei1pbmRleDogOTk5OTk7XG4gICAgQGluY2x1ZGUgYm94LXNpemluZyhjb250ZW50LWJveCk7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNwLXdyYXBwZXIuY3AtdmlzaWJsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIFBhbmVsIHBvc2l0aW9uaW5nICovXG4uY3AtcG9zaXRpb24tdG9wIC5jcC13cmFwcGVyIHtcbiAgICB0b3A6IC0xNTRweDtcbn1cblxuLmNwLXBvc2l0aW9uLXJpZ2h0IC5jcC13cmFwcGVyIHtcbiAgICByaWdodDogMDtcbn1cblxuLmNwLXBvc2l0aW9uLWJvdHRvbSAuY3Atd3JhcHBlciB7XG4gICAgdG9wOiBhdXRvO1xufVxuXG4uY3AtcG9zaXRpb24tbGVmdCAuY3Atd3JhcHBlciB7XG4gICAgbGVmdDogMDtcbn1cblxuLmNwLXdpdGgtb3BhY2l0eS5jcC13cmFwcGVyIHtcbiAgICB3aWR0aDogMTk0cHg7XG59XG5cbi5jcC13cmFwcGVyIC5jcC1ncmlkIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxcHg7XG4gICAgbGVmdDogMXB4O1xuICAgIHdpZHRoOiAxNTBweDtcbiAgICBoZWlnaHQ6IDE1MHB4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjBweCAwO1xuICAgIGN1cnNvcjogY3Jvc3NoYWlyO1xufVxuXG4uY3Atd3JhcHBlciAuY3AtZ3JpZC1pbm5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxNTBweDtcbiAgICBoZWlnaHQ6IDE1MHB4O1xufVxuXG4uY3AtbW9kZS1zYXR1cmF0aW9uIC5jcC1ncmlkIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDIwcHggMDtcbn1cblxuLmNwLW1vZGUtc2F0dXJhdGlvbiAuY3AtZ3JpZC1pbm5lciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI3MHB4IDA7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogaW5oZXJpdDtcbn1cblxuLmNwLW1vZGUtYnJpZ2h0bmVzcyAuY3AtZ3JpZCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTU3MHB4IDA7XG59XG5cbi5jcC1tb2RlLWJyaWdodG5lc3MgLmNwLWdyaWQtaW5uZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xufVxuXG4uY3AtbW9kZS13aGVlbCAuY3AtZ3JpZCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTcyMHB4IDA7XG59XG5cbi5jcC1zbGlkZXIsXG4uY3Atb3BhY2l0eS1zbGlkZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDFweDtcbiAgICBsZWZ0OiAxNTJweDtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDE1MHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgICBjdXJzb3I6IHJvdy1yZXNpemU7XG59XG5cbi5jcC1tb2RlLXNhdHVyYXRpb24gLmNwLXNsaWRlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTYwcHggMDtcbn1cblxuLmNwLW1vZGUtYnJpZ2h0bmVzcyAuY3Atc2xpZGVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjBweCAwO1xufVxuXG4uY3AtbW9kZS13aGVlbCAuY3Atc2xpZGVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjBweCAwO1xufVxuXG4uY3Atb3BhY2l0eS1zbGlkZXIge1xuICAgIGxlZnQ6IDE3M3B4O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00MHB4IDA7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNwLXdpdGgtb3BhY2l0eSAuY3Atb3BhY2l0eS1zbGlkZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBQaWNrZXJzICovXG4uY3AtZ3JpZCAuY3AtcGlja2VyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA3MHB4O1xuICAgIGxlZnQ6IDcwcHg7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgaGVpZ2h0OiAxMnB4O1xuICAgIGJvcmRlcjogc29saWQgMXB4IGJsYWNrO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogLTZweDtcbiAgICBtYXJnaW4tbGVmdDogLTZweDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xufVxuXG4uY3AtZ3JpZCAuY3AtcGlja2VyID4gZGl2IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDhweDtcbiAgICBoZWlnaHQ6IDhweDtcbiAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgYm9yZGVyOiBzb2xpZCAycHggd2hpdGU7XG4gICAgQGluY2x1ZGUgYm94LXNpemluZyhjb250ZW50LWJveCk7XG59XG5cbi5jcC1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXI6IHNvbGlkIDFweCBibGFjaztcbiAgICBtYXJnaW4tdG9wOiAtMnB4O1xuICAgIEBpbmNsdWRlIGJveC1zaXppbmcoY29udGVudC1ib3gpO1xuICAgIHotaW5kZXg6IDI7XG59XG5cbi8qIFRhYnMgKi9cbi5jcC10YWJzIHtcbiAgICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDA7XG4gICAgY29sb3I6ICM3Nzc7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBiYWNrZ3JvdW5kOiAjZWVlO1xuXG4gICAgPiBkaXYge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDZweCAwIDRweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG4gICAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5jcC10YWItdHJhbnNwIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qIERlZmF1bHQgdGhlbWUgKi9cbi5jcC10aGVtZS1kZWZhdWx0LmNwLXdyYXBwZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLmNwLXRoZW1lLWRlZmF1bHQgLmNwLWlucHV0IHtcbiAgICBoZWlnaHQ6IDIwcHg7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmctbGVmdDogMjZweDtcbn1cblxuLmNwLXRoZW1lLWRlZmF1bHQuY3AtcG9zaXRpb24tcmlnaHQgLmNwLWlucHV0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyNnB4O1xuICAgIHBhZGRpbmctbGVmdDogaW5oZXJpdDtcbn1cblxuLmlucHV0LWdyb3VwIC5jcC10aGVtZS1ib290c3RyYXA6bm90KDpmaXJzdC1jaGlsZCkgLmNwLWlucHV0IHtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG59XG5cbi5nLWNvbG9ycGlja2VyLXByZXZpZXctd3JhcCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRQUFBUUFCQUFELzJ3QkRBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUNBZ0lDQWdJQ0FnSUNBZ01EQXdNREF3TURBd1AvMndCREFRRUJBUUVCQVFJQkFRSUNBZ0VDQWdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3UC93QUFSQ0FBeUFESURBUkVBQWhFQkF4RUIvOFFBR2dBQkFBTUJBUUVBQUFBQUFBQUFBQUFBQUFRRkJ3WUpDdi9FQUQ0UUFBQUdBQVVCQlFRR0J3a0FBQUFBQUFFQ0F3UUZCaElURkJVV0NBQVJHQ1VtQnloMjFpUTNPRldWdFJjaUoxU0dsN1JDUjJObVo1YW14dWIveEFBVUFRRUFBQUFBQUFBQUFBQUFBQUFBQUFBQS84UUFGQkVCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUC9hQUF3REFRQUNFUU1SQUQ4QSt4ZXAxT1I2YXBGYTlYcFpsTFJFc3lVcWJkdlUxRjMwaVNSZkx0cGhGWlpHWWJRTFlySXJhQldLWXhWaktBb1lnQVFRRXhpZ2tLbkkzUzFKOVJrV3N5YjBobTlqYllyRnlDaTZWcU5IVUVqVnJNSXBzVzdaMUVDOWNxVnhjV3hSZkFtY0RreG5URVRBVUp0dzk2SGJ1QWVVY0gxZTdjdzh2MUhKdExvTnUyWGtHYmxjZld6czNKdzRpWWNYZWJDRTJRdGtkZEtxbjA1eGFMMXZkMmJLTnFhc3BJSm9KVlUwalFUdFhVd3NtK2J1WFV1TEp5blhGd2JHRmlDaHhPVEdSTUJNSlFWTzJSM1RWSExVVzlJdlphWGxucWxzYnVLbW1nK2ppUno1QnREb29yTFREbUJjbGVsY3dLeGpGS2laTUV6RUVEaUltS1VLV3AxT1I2YXBGYTlYcFpsTFJFc3lVcWJkdlUxRjMwaVNSZkx0cGhGWlpHWWJRTFlySXJhQldLWXhWaktBb1lnQVFRRXhpaG9YaXg5blgzTGRmdzZDK1krd1o3VTVDMVhTUldpK294TjZ6cERka3BJUmF0c2pTVUdPTmFrbDJ6ZGltak1OV3RjVWN2UmlIVDRTdGhYT0Iwd09mQUlwZ1lvSkNRdFViYWs2ZFRrM3FuVDJvOWpZOTQ4ajQwa3RWUXFzc1JxZTlLS1hvN1Y0NVNaSk9Ya2hxWE80QUxJUU9BSFN5Z0FnVGJoNkgyN3cwZlRkMDFmTmVIL3REeXRGcGVON2pxK1RiUmoxYi9KdzVHbzdqOStQTERBRTJRajZyRzFWTzQwNVJrcDFDS01vMlFlTTQrU1BMV29MVkxIYWt2U2FsRk82ZU5rbnFUWjVJYWx0dDRBeUFEaUJFc29CSUNweDlWdWtjdEtkUmlqSm5kMjcxU1BpMHJaSkhvTWlhcXBJTm5ERlJHSGF1cTRtNVpETHVud0ZjaWdjVHFBY21NUVRBcFFwYW5JV3E2U0swWDFHSnZXZElic2xKQ0xWdGthU2d4eHJVa3UyYnNVMFpocTFyaWpsNk1RNmZDVnNLNXdPbUJ6NEJGTURGRFF1QTlMSDcvU3Y1bFBQbXJzSEZjdzhVUG9EYnVEN1I2dzNiVjhtMUczK1M3ZG9OTFg4ck41Qm01MmNiRGs0Y0E0c1JRY3c0UDd0RzNicHJmUi9OZFhvc3I5SWYwdmNlTjZWM2oyamsySEoxNGFqSTc4YWVQdUlEN0tQK2ZlZS93QUxiVnhiL2NldTEzSS84SEt5ZjdlUDlVSEQrRCs4dnVPNmEzMWh3clNhTEsvU0g5RTI3a21xZDQ5bzVOaXp0QUdveU83QW5qN3lBNGY0b2ZYKzQ4SDJqMGZ0T2s1TnFOdjg2M0hYNnF2NVdieURLeWNrMkhKeFl4eFlTZzVoNG9mUUczY0gyajFodTJyNU5xTnY4bDI3UWFXdjVXYnlETnpzNDJISnc0QnhZaWc4SC84QXFIL3hMLzAzWUp0c2tLcmRJNUdMNmMwMlRPN3QzcWNoS0sxT05QUVpFMVZTUWN0M3lhMHc2YTF4Tnl5R1hkTVJNMkJjNG5VQWg4QWdtSmlnajVDcXh0VlVwMXhUWktkUWlqS1NqMmJ5UWpUeTFxQzFTeDNSNktvbmVpTlhqWko2azJlUittYzdnQU1nQWdDZExLRUNCQ3Avb2ZjZkV2OEFUZDAwbkN1WWZ0RHl0RnF1U2JkcE9UYlJqMWJET3haR283aWQyUExIQUVLUGo3VkcycFM0M0ZSNnAwOXFQWktRWnM1Q1NKTFZVS3JMRWRFb3FhZEZJNmVPVW1TVGw1SDZadHQ0Q3lFQ0NKRXNvUklDMlI5cXVraWpLZE9hajFuU0c3Sk9QbEVxbkpFb01jYTFKTHVYRDVSYUhkT3E0bzVlakVPbUlHY2dnY0RwZ1FtTVJURXBRdXJaSVZXNlJ5TVgwNXBzbWQzYnZVNUNVVnFjYWVneUpxcWtnNWJ2azFwaDAxcmlibGtNdTZZaVpzQzV4T29CRDRCQk1URkRQZUE5VS83L0FIWCtaVFA1cTdCb1ZzcWNkMDFSeU42b3F6MldsNVo2blUzRGUyS0lQbzRrYytRY3pDeXlLTU8yZ1hKWHBYTUNpVXBqTEdUQk14d0VnaUpURkJIMU9PdWxWVTZqSlJaNjN1N05sSld4S0xqMUVFcXFhUm9KM1RXSFJVWXVHenFYRms1VHJpQXVTZytCUTRuUGdPbUFsQW9RcWY3ME80OC84bzRQcE5wNGY1ZnFPVGFyWDdqdlhJTTNLNCtqazVXVGh4SHhZdTh1RUlVZmJKRzZXcFRwemxFV1Rla00zc2xVMHBTUFRYU3RSbzZna2RPb2RaUjg0Y3VvZ1hybFN1SUE1TURFRXpnYytBaVlpVVNndGxza2VtcVJSb3RGUlpTMFJMTWs3WTRjV3hOZDlJa2tYeTdtSFdSUldoM01DMkt5SzJnVVRGS1pFeWdLR09JbkVCS1VvWFZzcWNkMDFSeU42b3F6MldsNVo2blUzRGUyS0lQbzRrYytRY3pDeXlLTU8yZ1hKWHBYTUNpVXBqTEdUQk14d0VnaUpURkRQZkZqN1JmdVdsZmgwNzh4OWc2aXAxT1I2YXBGYTlYcFpsTFJFc3lVcWJkdlUxRjMwaVNSZkx0cGhGWlpHWWJRTFlySXJhQldLWXhWaktBb1lnQVFRRXhpZ2tLbkkzUzFKOVJrV3N5YjBobTlqYllyRnlDaTZWcU5IVUVqVnJNSXBzVzdaMUVDOWNxVnhjV3hSZkFtY0RreG5URVRBVUp0dzk2SGJ1QWVVY0gxZTdjdzh2MUhKdExvTnUyWGtHYmxjZld6czNKdzRpWWNYZWJDRTJRdGtkZEtxbjA1eGFMMXZkMmJLTnFhc3BJSm9KVlUwalFUdFhVd3NtK2J1WFV1TEp5blhGd2JHRmlDaHhPVEdSTUJNSlFWTzJSM1RWSExVVzlJdlphWGxucWxzYnVLbW1nK2ppUno1QnREb29yTFREbUJjbGVsY3dLeGpGS2laTUV6RUVEaUltS1VLV3AxT1I2YXBGYTlYcFpsTFJFc3lVcWJkdlUxRjMwaVNSZkx0cGhGWlpHWWJRTFlySXJhQldLWXhWaktBb1lnQVFRRXhpaG9YaXg5blgzTGRmdzZDK1krd09ySDZ1b1g0MWp2eUt4OWdVSDdMRC80SzlwWDlaYXV3Y1YwZi8zaC93QUpmOW03QnhWQisxTy8rTmZhVi9SMnJzRHF4K3NXRitDbzc4OXNmWU5xNnNmcTZoZmpXTy9JckgyRHoyN0IvOWs9KTtcbn1cbiIsIi8vIENvbnZlcnQgcGl4ZWxzIHRvIHJlbXNcbi8vIGVnLiBmb3IgYSByZWxhdGlvbmFsIHZhbHVlIG9mIDEycHggd3JpdGUgcmVtKDEyKVxuLy8gQXNzdW1lcyAkZW0tYmFzZSBpcyB0aGUgZm9udC1zaXplIG9mIDxodG1sPlxuXG5AZnVuY3Rpb24gcmVtKCRweHZhbCkge1xuICBAaWYgbm90IHVuaXRsZXNzKCRweHZhbCkge1xuICAgICAgJHB4dmFsOiBzdHJpcC11bml0cygkcHh2YWwpO1xuICB9XG5cbiAgJGJhc2U6ICRlbS1iYXNlO1xuICBAaWYgbm90IHVuaXRsZXNzKCRiYXNlKSB7XG4gICAgICAkYmFzZTogc3RyaXAtdW5pdHMoJGJhc2UpO1xuICB9XG4gIEByZXR1cm4gKCRweHZhbCAvICRiYXNlKSAqIDFyZW07XG59XG4iLCIvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vXG4vLyBFeGFtcGxlOiBAaW5jbHVkZSBwcmVmaXhlcihib3JkZXItcmFkaXVzLCAkcmFkaWksIHdlYmtpdCBtcyBzcGVjKTtcbi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy9cbi8vIFZhcmlhYmxlcyBsb2NhdGVkIGluIC9zZXR0aW5ncy9fcHJlZml4ZXIuc2Nzc1xuXG5AbWl4aW4gcHJlZml4ZXIgKCRwcm9wZXJ0eSwgJHZhbHVlLCAkcHJlZml4ZXMpIHtcbiAgQGVhY2ggJHByZWZpeCBpbiAkcHJlZml4ZXMge1xuICAgIEBpZiAkcHJlZml4ID09IHdlYmtpdCB7XG4gICAgICBAaWYgJHByZWZpeC1mb3Itd2Via2l0IHtcbiAgICAgICAgLXdlYmtpdC0jeyRwcm9wZXJ0eX06ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2UgaWYgJHByZWZpeCA9PSBtb3oge1xuICAgICAgQGlmICRwcmVmaXgtZm9yLW1vemlsbGEge1xuICAgICAgICAtbW96LSN7JHByb3BlcnR5fTogJHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSBpZiAkcHJlZml4ID09IG1zIHtcbiAgICAgIEBpZiAkcHJlZml4LWZvci1taWNyb3NvZnQge1xuICAgICAgICAtbXMtI3skcHJvcGVydHl9OiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlIGlmICRwcmVmaXggPT0gbyB7XG4gICAgICBAaWYgJHByZWZpeC1mb3Itb3BlcmEge1xuICAgICAgICAtby0jeyRwcm9wZXJ0eX06ICR2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2UgaWYgJHByZWZpeCA9PSBzcGVjIHtcbiAgICAgIEBpZiAkcHJlZml4LWZvci1zcGVjIHtcbiAgICAgICAgI3skcHJvcGVydHl9OiAkdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIEBlbHNlICB7XG4gICAgICBAd2FybiBcIlVucmVjb2duaXplZCBwcmVmaXg6ICN7JHByZWZpeH1cIjtcbiAgICB9XG4gIH1cbn1cblxuQG1peGluIGRpc2FibGUtcHJlZml4LWZvci1hbGwoKSB7XG4gICRwcmVmaXgtZm9yLXdlYmtpdDogICAgZmFsc2UgIWdsb2JhbDtcbiAgJHByZWZpeC1mb3ItbW96aWxsYTogICBmYWxzZSAhZ2xvYmFsO1xuICAkcHJlZml4LWZvci1taWNyb3NvZnQ6IGZhbHNlICFnbG9iYWw7XG4gICRwcmVmaXgtZm9yLW9wZXJhOiAgICAgZmFsc2UgIWdsb2JhbDtcbiAgJHByZWZpeC1mb3Itc3BlYzogICAgICBmYWxzZSAhZ2xvYmFsO1xufVxuIiwiLmRhdGV0aW1lLXBpY2tlci13cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaW5wdXQge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyLjVyZW07XG4gICAgfVxuXG4gICAgLmZpZWxkLWljb25zIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyLjVyZW07XG4gICAgfVxufVxuXG4uY29sbGFwc2Uge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgJi5pbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgIHRyICYuaW4ge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG4gICAgfVxuXG4gICAgdGJvZHkgJi5pbiB7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDtcbiAgICB9XG59XG5cbi5jb2xsYXBzaW5nIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgQGluY2x1ZGUgdHJhbnNpdGlvbihoZWlnaHQgLjM1cyBlYXNlLCB2aXNpYmlsaXR5IC4zNXMgZWFzZSk7XG59XG5cbi5zci1vbmx5IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDFweDtcbiAgICBoZWlnaHQ6IDFweDtcbiAgICBtYXJnaW46IC0xcHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMCwwLDAsMCk7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4vKiBCb290c3RyYXAgdmFyaWFibGVzIHN0eWxpbmcgKi9cbi5ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXItd2lkZ2V0IHtcbiAgICAmLmRyb3Bkb3duLW1lbnUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBtaW4td2lkdGg6IDE2MHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICAgICAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgLjE1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMnB4IHJnYmEoMCwgMCwgMCwgLjE3NSk7XG4gICAgfVxuXG4gICAgLmxpc3QtdW5zdHlsZWQge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgfVxuXG4gICAgLmNvbGxhcHNlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gICAgICAgICYuaW4ge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRhdGVwaWNrZXIteWVhcnMgLnBpY2tlci1zd2l0Y2gge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQgIWltcG9ydGFudDtcbiAgICAgICAgYmFja2dyb3VuZDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC50YWJsZS1jb25kZW5zZWQgPiB0aGVhZCA+IHRyID4gdGgge1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuXG4gICAgdGFibGUge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcblxuICAgICAgICB0aGVhZCB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XG4gICAgICAgIH1cblxuICAgICAgICB0Ym9keSB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7XG4gICAgICAgIH1cblxuICAgICAgICB0ciB7XG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XG5cbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoLCB0ZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogaW5oZXJpdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBpbmhlcml0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5cbi8qIVxuICogRGF0ZXRpbWVwaWNrZXIgZm9yIEJvb3RzdHJhcCAzXG4gKiAhIHZlcnNpb24gOiA0LjcuMTRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Fb25hc2Rhbi9ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXIvXG4gKi9cbiRicy1kYXRldGltZXBpY2tlci10aW1lcGlja2VyLWZvbnQtc2l6ZTogMS4yZW0gIWRlZmF1bHQ7XG4kYnMtZGF0ZXRpbWVwaWNrZXItYWN0aXZlLWJnOiB3aGl0ZSAhZGVmYXVsdDtcbiRicy1kYXRldGltZXBpY2tlci1hY3RpdmUtY29sb3I6IGJsdWUgIWRlZmF1bHQ7XG4kYnMtZGF0ZXRpbWVwaWNrZXItYm9yZGVyLXJhZGl1czogM3B4ICFkZWZhdWx0O1xuJGJzLWRhdGV0aW1lcGlja2VyLWJ0bi1ob3Zlci1iZzogI2RkZCAhZGVmYXVsdDtcbiRicy1kYXRldGltZXBpY2tlci1kaXNhYmxlZC1jb2xvcjogI2NjYyAhZGVmYXVsdDtcbiRicy1kYXRldGltZXBpY2tlci1hbHRlcm5hdGUtY29sb3I6ICNjY2MgIWRlZmF1bHQ7XG4kYnMtZGF0ZXRpbWVwaWNrZXItc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogI2NjYyAhZGVmYXVsdDtcbiRicy1kYXRldGltZXBpY2tlci1zZWNvbmRhcnktYm9yZGVyLWNvbG9yLXJnYmE6IHJnYmEoMCwgMCwgMCwgMC4yKSAhZGVmYXVsdDtcbiRicy1kYXRldGltZXBpY2tlci1wcmltYXJ5LWJvcmRlci1jb2xvcjogd2hpdGUgIWRlZmF1bHQ7XG4kYnMtZGF0ZXRpbWVwaWNrZXItdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSkgIWRlZmF1bHQ7XG5cbi5ib290c3RyYXAtZGF0ZXRpbWVwaWNrZXItd2lkZ2V0IHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuXG4gICAgJi5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgbWFyZ2luOiAycHggMDtcbiAgICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgICB3aWR0aDogMTllbTtcblxuICAgICAgICAmLnRpbWVwaWNrZXItc2JzIHtcbiAgICAgICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzOGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAbWVkaWEgKG1pbi13aWR0aDogOTkycHgpIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMzhlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAzOGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgICAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIH1cblxuICAgICAgICAmLmJvdHRvbSB7XG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiA3cHggc29saWQgJGJzLWRhdGV0aW1lcGlja2VyLXNlY29uZGFyeS1ib3JkZXItY29sb3I7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJzLWRhdGV0aW1lcGlja2VyLXNlY29uZGFyeS1ib3JkZXItY29sb3ItcmdiYTtcbiAgICAgICAgICAgICAgICB0b3A6IC03cHg7XG4gICAgICAgICAgICAgICAgbGVmdDogN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDZweCBzb2xpZCAkYnMtZGF0ZXRpbWVwaWNrZXItcHJpbWFyeS1ib3JkZXItY29sb3I7XG4gICAgICAgICAgICAgICAgdG9wOiAtNnB4O1xuICAgICAgICAgICAgICAgIGxlZnQ6IDhweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYudG9wIHtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3A6IDdweCBzb2xpZCAkYnMtZGF0ZXRpbWVwaWNrZXItc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYnMtZGF0ZXRpbWVwaWNrZXItc2Vjb25kYXJ5LWJvcmRlci1jb2xvci1yZ2JhO1xuICAgICAgICAgICAgICAgIGJvdHRvbTogLTdweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogNnB4IHNvbGlkICRicy1kYXRldGltZXBpY2tlci1wcmltYXJ5LWJvcmRlci1jb2xvcjtcbiAgICAgICAgICAgICAgICBib3R0b206IC02cHg7XG4gICAgICAgICAgICAgICAgbGVmdDogN3B4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5wdWxsLXJpZ2h0IHtcbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiA2cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGxlZnQ6IGF1dG87XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDdweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5saXN0LXVuc3R5bGVkIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIGFbZGF0YS1hY3Rpb25dIHtcbiAgICAgICAgcGFkZGluZzogNnB4IDA7XG4gICAgfVxuXG4gICAgYVtkYXRhLWFjdGlvbl06YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICB9XG5cbiAgICAudGltZXBpY2tlci1ob3VyLCAudGltZXBpY2tlci1taW51dGUsIC50aW1lcGlja2VyLXNlY29uZCB7XG4gICAgICAgIHdpZHRoOiA1NHB4O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgZm9udC1zaXplOiAkYnMtZGF0ZXRpbWVwaWNrZXItdGltZXBpY2tlci1mb250LXNpemU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICBidXR0b25bZGF0YS1hY3Rpb25dIHtcbiAgICAgICAgcGFkZGluZzogNnB4O1xuICAgIH1cblxuICAgIC5idG5bZGF0YS1hY3Rpb249XCJpbmNyZW1lbnRIb3Vyc1wiXTo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kIC5zci1vbmx5O1xuICAgICAgICBjb250ZW50OiBcIkluY3JlbWVudCBIb3Vyc1wiO1xuICAgIH1cblxuICAgIC5idG5bZGF0YS1hY3Rpb249XCJpbmNyZW1lbnRNaW51dGVzXCJdOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgLnNyLW9ubHk7XG4gICAgICAgIGNvbnRlbnQ6IFwiSW5jcmVtZW50IE1pbnV0ZXNcIjtcbiAgICB9XG5cbiAgICAuYnRuW2RhdGEtYWN0aW9uPVwiZGVjcmVtZW50SG91cnNcIl06OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAuc3Itb25seTtcbiAgICAgICAgY29udGVudDogXCJEZWNyZW1lbnQgSG91cnNcIjtcbiAgICB9XG5cbiAgICAuYnRuW2RhdGEtYWN0aW9uPVwiZGVjcmVtZW50TWludXRlc1wiXTo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kIC5zci1vbmx5O1xuICAgICAgICBjb250ZW50OiBcIkRlY3JlbWVudCBNaW51dGVzXCI7XG4gICAgfVxuXG4gICAgLmJ0bltkYXRhLWFjdGlvbj1cInNob3dIb3Vyc1wiXTo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kIC5zci1vbmx5O1xuICAgICAgICBjb250ZW50OiBcIlNob3cgSG91cnNcIjtcbiAgICB9XG5cbiAgICAuYnRuW2RhdGEtYWN0aW9uPVwic2hvd01pbnV0ZXNcIl06OmFmdGVyIHtcbiAgICAgICAgQGV4dGVuZCAuc3Itb25seTtcbiAgICAgICAgY29udGVudDogXCJTaG93IE1pbnV0ZXNcIjtcbiAgICB9XG5cbiAgICAuYnRuW2RhdGEtYWN0aW9uPVwidG9nZ2xlUGVyaW9kXCJdOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgLnNyLW9ubHk7XG4gICAgICAgIGNvbnRlbnQ6IFwiVG9nZ2xlIEFNL1BNXCI7XG4gICAgfVxuXG4gICAgLmJ0bltkYXRhLWFjdGlvbj1cImNsZWFyXCJdOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgLnNyLW9ubHk7XG4gICAgICAgIGNvbnRlbnQ6IFwiQ2xlYXIgdGhlIHBpY2tlclwiO1xuICAgIH1cblxuICAgIC5idG5bZGF0YS1hY3Rpb249XCJ0b2RheVwiXTo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kIC5zci1vbmx5O1xuICAgICAgICBjb250ZW50OiBcIlNldCB0aGUgZGF0ZSB0byB0b2RheVwiO1xuICAgIH1cblxuICAgIC5waWNrZXItc3dpdGNoIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgIEBleHRlbmQgLnNyLW9ubHk7XG4gICAgICAgICAgICBjb250ZW50OiBcIlRvZ2dsZSBEYXRlIGFuZCBUaW1lIFNjcmVlbnNcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgICAgICB3aWR0aDogYXV0bztcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuXG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMi41O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMi41ZW07XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0YWJsZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDA7XG5cblxuICAgICAgICAmIHRkLFxuICAgICAgICAmIHRoIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRicy1kYXRldGltZXBpY2tlci1ib3JkZXItcmFkaXVzO1xuICAgICAgICB9XG5cbiAgICAgICAgJiB0aCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDI5cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjlweDtcbiAgICAgICAgICAgIHdpZHRoOiAyOXB4O1xuXG4gICAgICAgICAgICAmLnBpY2tlci1zd2l0Y2gge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxNDVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5kaXNhYmxlZCxcbiAgICAgICAgICAgICYuZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICRicy1kYXRldGltZXBpY2tlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLnByZXY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICBAZXh0ZW5kIC5zci1vbmx5O1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFwiUHJldmlvdXMgTW9udGhcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5uZXh0OjphZnRlciB7XG4gICAgICAgICAgICAgICAgQGV4dGVuZCAuc3Itb25seTtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIk5leHQgTW9udGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAkYnMtZGF0ZXRpbWVwaWNrZXItYnRuLWhvdmVyLWJnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJiB0ZCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDU0cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNTRweDtcbiAgICAgICAgICAgIHdpZHRoOiA1NHB4O1xuXG4gICAgICAgICAgICAmLmN3IHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYnMtZGF0ZXRpbWVwaWNrZXItYWx0ZXJuYXRlLWNvbG9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmRheSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyOXB4O1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOXB4O1xuICAgICAgICAgICAgICAgIHdpZHRoOiAyOXB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmRheTpob3ZlcixcbiAgICAgICAgICAgICYuaG91cjpob3ZlcixcbiAgICAgICAgICAgICYubWludXRlOmhvdmVyLFxuICAgICAgICAgICAgJi5zZWNvbmQ6aG92ZXIge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICRicy1kYXRldGltZXBpY2tlci1idG4taG92ZXItYmc7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLm9sZCxcbiAgICAgICAgICAgICYubmV3IHtcbiAgICAgICAgICAgICAgICBjb2xvcjogJGJzLWRhdGV0aW1lcGlja2VyLWFsdGVybmF0ZS1jb2xvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi50b2RheSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXI6IDAgMCA3cHggN3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYnMtZGF0ZXRpbWVwaWNrZXItYWN0aXZlLWJnO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYnMtZGF0ZXRpbWVwaWNrZXItc2Vjb25kYXJ5LWJvcmRlci1jb2xvci1yZ2JhO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogNHB4O1xuICAgICAgICAgICAgICAgICAgICByaWdodDogNHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5hY3RpdmUsXG4gICAgICAgICAgICAmLmFjdGl2ZTpob3ZlciB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJzLWRhdGV0aW1lcGlja2VyLWFjdGl2ZS1iZztcbiAgICAgICAgICAgICAgICBjb2xvcjogJGJzLWRhdGV0aW1lcGlja2VyLWFjdGl2ZS1jb2xvcjtcbiAgICAgICAgICAgICAgICB0ZXh0LXNoYWRvdzogJGJzLWRhdGV0aW1lcGlja2VyLXRleHQtc2hhZG93O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmFjdGl2ZS50b2RheTpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICNmZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYuZGlzYWJsZWQsXG4gICAgICAgICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAkYnMtZGF0ZXRpbWVwaWNrZXItZGlzYWJsZWQtY29sb3I7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgICAgIHdpZHRoOiA1NHB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogNTRweDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNTRweDtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDJweCAxLjVweDtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJzLWRhdGV0aW1lcGlja2VyLWJvcmRlci1yYWRpdXM7XG5cbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJGJzLWRhdGV0aW1lcGlja2VyLWJ0bi1ob3Zlci1iZztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRicy1kYXRldGltZXBpY2tlci1hY3RpdmUtYmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAkYnMtZGF0ZXRpbWVwaWNrZXItYWN0aXZlLWNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LXNoYWRvdzogJGJzLWRhdGV0aW1lcGlja2VyLXRleHQtc2hhZG93O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYub2xkIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRicy1kYXRldGltZXBpY2tlci1hbHRlcm5hdGUtY29sb3I7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAmLmRpc2FibGVkOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICRicy1kYXRldGltZXBpY2tlci1kaXNhYmxlZC1jb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLnVzZXR3ZW50eWZvdXIge1xuICAgICAgICB0ZC5ob3VyIHtcbiAgICAgICAgICAgIGhlaWdodDogMjdweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyN3B4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uaW5wdXQtZ3JvdXAuZGF0ZSB7XG4gICAgJiAuaW5wdXQtZ3JvdXAtYWRkb24ge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxufVxuIiwiLmZqcy1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZm9udC1zaXplOiAuOWVtO1xuICAgIG1pbi1oZWlnaHQ6IDQwMHB4O1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcblxuICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgIH1cblxuICAgIC5manMtY29sIHtcbiAgICAgICAgYm9yZGVyLXJpZ2h0OiBzb2xpZCAxcHggbGlnaHRncmF5O1xuICAgICAgICBtYXgtaGVpZ2h0OiA2MDBweDtcbiAgICAgICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgbWluLXdpZHRoOiAyMDBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG5cbiAgICAuZmpzLWl0ZW0gYSB7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuZmpzLWl0ZW0gYTpmb2N1cyB7XG4gICAgICAgIG91dGxpbmU6IG5vbmU7XG4gICAgfVxuXG4gICAgLmZqcy1pdGVtIGEgc3BhbiB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cblxuICAgIC5manMtaXRlbSBhIHNwYW4gaSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcbiAgICB9XG5cbiAgICAvLy5manMtYWN0aXZlIGEge1xuICAgIC8vICAgIGJhY2tncm91bmQtY29sb3I6ICNERURFREU7XG4gICAgLy99XG4gICAgLy9cbiAgICAvLy5manMtY29sOm50aC1sYXN0LWNoaWxkKDIpIC5manMtYWN0aXZlIGEsXG4gICAgLy8uZmpzLWNvbDpsYXN0LWNoaWxkIC5manMtYWN0aXZlIGEge1xuICAgIC8vICAgIGJhY2tncm91bmQtY29sb3I6IGRvZGdlcmJsdWU7XG4gICAgLy8gICAgY29sb3I6IHdoaXRlO1xuICAgIC8vfVxuXG4gICAgLmluZm8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuZmpzLWxpc3Qge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuXG4gICAgLmZqcy1pdGVtLWNvbnRlbnQge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG5cbiAgICAuZmEtY2FyZXQtcmlnaHQge1xuICAgICAgICAvL2NvbG9yOiBncmF5O1xuICAgICAgICBwYWRkaW5nOiAwIDAgMCAuNWVtO1xuICAgIH1cblxuICAgIC5manMtY29sOm50aC1sYXN0LWNoaWxkKDIpIC5manMtYWN0aXZlIGEgLmZhLWNhcmV0LXJpZ2h0LFxuICAgIC5manMtY29sOmxhc3QtY2hpbGQgLmZqcy1hY3RpdmUgYSAuZmEtY2FyZXQtcmlnaHQge1xuICAgICAgICAvL2NvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICAubGVhZi1jb2wge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXg6IDI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDEuNWVtO1xuICAgIH1cblxuICAgIC5sZWFmLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAubGVhZi1yb3cgLmZhIHtcbiAgICAgICAgLy9jb2xvcjogI0E3QTdBNztcbiAgICAgICAgZm9udC1zaXplOiA0ZW07XG4gICAgICAgIG1hcmdpbjogMjBweCAwO1xuICAgIH1cblxuICAgIC5sZWFmLXJvdyAuZmEtcmVmcmVzaCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMmVtO1xuICAgIH1cblxuICAgIC5sZWFmLWNvbCAubWV0YSB7XG4gICAgICAgIGZvbnQtc2l6ZTogLjdlbTtcbiAgICB9XG5cbiAgICAubGVhZi1jb2wgLm1ldGEgc3Ryb25nIHtcbiAgICAgICAgLy9jb2xvcjogI0MxQzFDMTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICB9XG5cbiAgICAubGVhZi1jb2wgLm1ldGE6Zmlyc3Qtb2YtdHlwZSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDEuNWVtO1xuICAgIH1cbn1cblxuLmZqcy1wYXRoLWJhciB7XG4gICAgZm9udC1zaXplOiAwLjllbTtcbiAgICBwYWRkaW5nOiAuMjVyZW0gLjVyZW07XG4gICAgLy9iYWNrZ3JvdW5kOiAjZjZmNmY2O1xuICAgIC8vYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgW2RhdGEtYnJlYWRjcnVtYi1ub2RlXSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIHNwYW4ge1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZhLWNoZXZyb24tcmlnaHQge1xuICAgICAgICBmb250LXNpemU6IC44ZW07XG4gICAgfVxufVxuXG5bZGF0YS1wYXJlbnRzLWZpZWxkLW5hbWVdIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmZqcy1jb250YWluZXIsIC5manMtcGF0aC1iYXIge1xuICAgIC5mYS1mb2xkZXIge1xuICAgICAgICBjb2xvcjogIzkwRTRGRjtcbiAgICB9XG5cbiAgICAuZmEtZmlsZS1vIHtcbiAgICAgICAgY29sb3I6ICNBN0E3QTc7XG4gICAgfVxuXG4gICAgLmZhLWV4dGVybmFsLWxpbmsge1xuICAgICAgICBjb2xvcjogIzYyOUVGRjtcbiAgICAgICAgZm9udC1zaXplOiBzbWFsbGVyO1xuICAgIH1cbn1cbiIsIi5zd2l0Y2gtdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1ib3JkZXItcmFkaXVzO1xuICAgIGxpbmUtaGVpZ2h0OiAzNXB4O1xuXG4gICAgaW5wdXRbdHlwZT1yYWRpb10ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxufVxuIiwiLy8gU2l6ZXNcbiRoZWFkZXItaGVpZ2h0OiA1cmVtO1xuJGZvb3Rlci1oZWlnaHQ6IDZyZW07XG4kYm9yZGVyLXJhZGl1czogNHB4O1xuXG4vLyBGb250IFdlaWdodHNcbiRmb250LXdlaWdodC1ib2xkOiA2MDA7XG4kZm9udC13ZWlnaHQtcmVndWxhcjogNDAwO1xuJGZvbnQtd2VpZ2h0LWxpZ2h0OjMwMDtcblxuLy8gR2xvYmFsIFBhZGRpbmdzXG4kcGFkZGluZy1kZWZhdWx0OiAxLjVyZW07XG4kcGFkZGluZy1ob3JpejogN3JlbTtcbiRwYWRkaW5nLXZlcnQ6IDNyZW07XG5cbi8vRm9ybXNcbiRmb3JtLWxhYmVsLXdpZHRoOiAzMCU7XG4kZm9ybS1ib3JkZXItcmFkaXVzOiA0cHg7XG4kZm9ybS1ib3JkZXItd2lkdGg6IDFweDtcbiRmb3JtLWxhYmVsLXBhZDogNXB4IDAgNXB4IDNyZW07XG4kZm9ybS1pbnB1dC1wYWQ6IDVweCAxMHB4O1xuJGZvcm0tc2VsZWN0LXBhZDogNXB4IDMwcHggNXB4IDEwcHg7XG4iLCJodG1sLCBib2R5IHtcblx0aGVpZ2h0OiAxMDAlO1xufVxuXG5ib2R5IHtcblx0LXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gIFx0LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG5iLCBzdHJvbmcge1xuXHRmb250LXdlaWdodDogJGZvbnQtd2VpZ2h0LWJvbGRcbn1cblxuLmJpZ2dlciB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG5cbn1cblxuLmJ1dHRvbi1iYXIge1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZsb2F0OiByaWdodDtcbiAgICB6LWluZGV4OiAwO1xufVxuXG4uYWxlcnQge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBwYWRkaW5nOiAwLjVyZW0gJHBhZGRpbmctZGVmYXVsdDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNXJlbSAxcmVtO1xuICAgIH1cbn1cblxuLmJhZGdlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIHBhZGRpbmc6IDBweCA2cHg7XG4gICAgbWluLXdpZHRoOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZy10b3A6IDEwMHB4O1xufVxuIiwiLy8gQnJlYWtwb2ludHNcbkBtaXhpbiBicmVha3BvaW50KCRicmVha3BvaW50cywgJG1lZGlhOiBhbGwpIHtcbiAgICBAZWFjaCAkYnJlYWtwb2ludCBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgICBAaWYgJGJyZWFrcG9pbnQgPT0gbGFyZ2UtZGVza3RvcC1yYW5nZSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICRsYXJnZS1kZXNrdG9wLWNvbnRhaW5lcikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IGRlc2t0b3AtcmFuZ2Uge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkZGVza3RvcC1jb250YWluZXIpIGFuZCAobWF4LXdpZHRoOiAkbGFyZ2UtZGVza3RvcC1jb250YWluZXIgLSAwLjA2MikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IHRhYmxldC1yYW5nZSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtaW4td2lkdGg6ICR0YWJsZXQtY29udGFpbmVyKSBhbmQgKG1heC13aWR0aDogJGRlc2t0b3AtY29udGFpbmVyIC0gMC4wNjIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSBsYXJnZS1tb2JpbGUtcmFuZ2Uge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkbGFyZ2UtbW9iaWxlLWNvbnRhaW5lciArIDAuMDYzKSBhbmQgKG1heC13aWR0aDogJHRhYmxldC1jb250YWluZXIgLSAwLjA2MikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IG1pbmktbmF2LXJhbmdlIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1pbi13aWR0aDogJHRhYmxldC1jb250YWluZXIgLSAwLjA2MikgYW5kIChtYXgtd2lkdGg6ICRsYXJnZS1kZXNrdG9wLWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gc21hbGwtbW9iaWxlLXJhbmdlIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1heC13aWR0aDogJGxhcmdlLW1vYmlsZS1jb250YWluZXIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSBuby1tb2JpbGUge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkdGFibGV0LWNvbnRhaW5lcikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IG1vYmlsZS1vbmx5IHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1heC13aWR0aDogJHRhYmxldC1jb250YWluZXIgLSAwLjA2MikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgICAgIEBlbHNlIGlmICRicmVha3BvaW50ID09IGRlc2t0b3Atb25seSB7XG4gICAgICAgICAgICBAbWVkaWEgb25seSAjeyRtZWRpYX0gYW5kIChtYXgtd2lkdGg6ICRkZXNrdG9wLWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gbW9iaWxlLXBsdXMge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkbW9iaWxlLWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gdGFibGV0LXBsdXMge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkdGFibGV0LWNvbnRhaW5lciAtIDAuMDYyKSB7IEBjb250ZW50OyB9XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2UgaWYgJGJyZWFrcG9pbnQgPT0gZGVza3RvcC1wbHVzIHtcbiAgICAgICAgICAgIEBtZWRpYSBvbmx5ICN7JG1lZGlhfSBhbmQgKG1pbi13aWR0aDogJGRlc2t0b3AtY29udGFpbmVyIC0gMC4wNjIpIHsgQGNvbnRlbnQ7IH1cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSBpZiAkYnJlYWtwb2ludCA9PSBsYXJnZS1kZXNrdG9wLXBsdXMge1xuICAgICAgICAgICAgQG1lZGlhIG9ubHkgI3skbWVkaWF9IGFuZCAobWluLXdpZHRoOiAkbGFyZ2UtZGVza3RvcC1jb250YWluZXIgLSAwLjA2MikgeyBAY29udGVudDsgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLmdwbSB7XG4gICAgdGQge1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgfVxuXG4gICAgLmdwbS1zZWFyY2gge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHBhZGRpbmc6IDAgM3JlbSAwLjVyZW0gJHBhZGRpbmctZGVmYXVsdDtcbiAgICAgICAgdGV4dC1pbmRlbnQ6IDIuNXJlbTtcbiAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICByaWdodDogNjBweDtcbiAgICAgICAgICAgIHRvcDogMTBweDtcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYwMDInO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdGb250QXdlc29tZSc7XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zb3J0LWFjdGlvbnMge1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIG1hcmdpbjogMCAyNHB4O1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgPiAqIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIH1cblxuICAgICAgICAuc29ydC1pY29uIHtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdCB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlbGVjdGl6ZS1pbnB1dCB7XG4gICAgICAgICAgICB3aWR0aDogOXJlbTtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjFweDtcblxuICAgICAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMXB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmdwbS1uYW1lIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmdwbS12ZXJzaW9uIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OjAuNXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgfVxuXG4gICAgLmdwbS10ZXN0aW5nIHtcbiAgICAgICAgQGV4dGVuZCAuYmFkZ2U7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgcGFkZGluZzogMCA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICB9XG5cbiAgICAudGhlbWUgLmdwbS10ZXN0aW5nIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDFyZW07XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDAgM3B4O1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgIH1cblxuICAgIC5ncG0tYWN0aW9ucyB7XG5cbiAgICAgICAgLmVuYWJsZWQsIC5kaXNhYmxlZCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNnJlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5ncG0taXRlbS1pbmZvIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogM3JlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuXG5cbiAgICAgICAgLmdwbS1pdGVtLWljb24ge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcmlnaHQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG4gICAgICAgICAgICBmb250LXNpemU6IDIwcmVtO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgICAgICYuZG91YmxlIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBoeXBoZW5zKGF1dG8pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyOmhvdmVyIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgLmJhZGdlLnVwZGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBwYWRkaW5nOiAycHggMTBweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gICAgfVxuXG4gICAgLmdwbS1yaWJib24ge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMXJlbTtcbiAgICAgICAgcmlnaHQ6IC0ycmVtO1xuICAgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlKDQ1ZGVnKSk7XG5cbiAgICAgICAgYSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgICAgICBwYWRkaW5nOiA1cHggNDBweDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC50aGVtZXMge1xuICAgICAgICBwYWRkaW5nOiAkcGFkZGluZy1kZWZhdWx0O1xuXG4gICAgICAgIC5jYXJkLWl0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZzogMXJlbSAxcmVtIDRyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZ3BtLXNjcmVlbnNob3Qge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5ncG0tbmFtZSB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogaW5oZXJpdDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5ncG0tYWN0aW9ucyB7XG4gICAgICAgICAgICBtYXJnaW46IDFyZW0gLTFyZW0gLTFyZW0gLTFyZW07XG4gICAgICAgICAgICBoZWlnaHQ6IDRyZW07XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5cbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGJvdHRvbTogMXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hY3RpdmUtdGhlbWUgLmdwbS1hY3Rpb25zLCAmLmluYWN0aXZlLXRoZW1lIC5ncG0tYWN0aW9ucyB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pbmFjdGl2ZS10aGVtZSAuZ3BtLWFjdGlvbnMge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2dwbS1yZWxlYXNlLXRvZ2dsZSB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcmVtO1xuICAgIH1cbn1cbiIsIi8vIEJhY2t1cHNcbiNiYWNrdXBzLXN0YXRzIHtcbiAgICAjYmFja3Vwcy11c2FnZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHJpZ2h0OiAxcmVtO1xuICAgICAgICAgICAgdG9wOiA1cHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuYmFja3Vwcy11c2FnZS13cmFwcGVyIHtcbiAgICAgICAgaGVpZ2h0OiA0MHB4O1xuXG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgJGNvbG9yLWdyZWVuIDAlLCAkY29sb3ItbGltZSAyMCUsICRjb2xvci15ZWxsb3cgNDAlLCAkY29sb3Itb3JhbmdlIDYwJSwgJGNvbG9yLXJlZCA4MCUsICRjb2xvci1tYXJvb24gMTAwJSk7XG5cbiAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xuICAgICAgICAgICAgJi5mdWxsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmJhY2t1cHMtY29udGVudCB7XG4gICAgI2FkbWluLWRhc2hib2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAjYmFja3Vwcy1zdGF0cyB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogMXJlbTtcbiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMXJlbTtcblxuICAgICAgICAgICAgaDEge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDByZW07XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFNjaGVkdWxlclxuLnNjaGVkdWxlci1jb250ZW50IHtcblxuICAgICNhZG1pbi1tYWluIC5hZG1pbi1ibG9jayAmIC5hbGVydCB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAycmVtO1xuICAgIH1cblxuICAgIC5zZWNvbmRhcnktYWNjZW50IHtcbiAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAtM3B4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2Nyb24taW5zdGFsbCB7XG4gICAgICAgIEBleHRlbmQgLmRlZmF1bHQtYW5pbWF0aW9uO1xuICAgICAgICBwYWRkaW5nOiAwIDEuNXJlbTtcblxuICAgICAgICBwcmUge1xuICAgICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5oaWRlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFJlcG9ydHNcbi5yZXBvcnQtb3V0cHV0IHtcbiAgICAjYWRtaW4tbWFpbiAuYWRtaW4tYmxvY2sgJiAuYWxlcnQge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIHRkIHtcbiAgICAgICAgLmtleSB7XG4gICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBEaXJlY3QgaW5zdGFsbFxuLmRpcmVjdC1pbnN0YWxsLWNvbnRlbnQge1xuICAgIHBhZGRpbmc6IDMwcHg7XG5cbiAgICAuYnV0dG9uIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICB9XG59XG4iLCIuZGVmYXVsdC1hbmltYXRpb24ge1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuNXMgZWFzZSk7XG59XG5cbi8vIFB1bHNlIEFuaW1hdGlvblxuLnB1bHNlIHtcblx0YW5pbWF0aW9uLW5hbWU6IHB1bHNlX2FuaW1hdGlvbjtcblx0YW5pbWF0aW9uLWR1cmF0aW9uOiAyMDAwbXM7XG5cdHRyYW5zZm9ybS1vcmlnaW46NzAlIDcwJTtcblx0YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7XG5cdGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjtcbn1cblxuQGtleWZyYW1lcyBwdWxzZV9hbmltYXRpb24ge1xuXHQwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cblx0MzAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuXHQ0MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpOyB9XG5cdDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cblx0NjAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfVxuXHQ3MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOyB9XG5cdDgwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cblx0MTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH1cbn1cblxuLmRlZmF1bHQtYm9yZGVyLXJhZGl1cyB7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4uZGVmYXVsdC1nbG93LXNoYWRvdyB7XG4gICAgYm94LXNoYWRvdzogMCAwIDIwcHggcmdiYSgwLDAsMCwwLjIpO1xufVxuXG4uZGVmYXVsdC1ib3gtc2hhZG93IHtcbiAgICBib3gtc2hhZG93OiAwIDAgMTBweCAycHggcmdiYSgwLDAsMCwwLjAzKTtcbn1cblxuLmxvZ2luLWJveC1zaGFkb3cge1xuXHRib3gtc2hhZG93OiAwIDEwcHggMTAwcHggMHB4IHJnYmEoMCwwLDAsMC40KTtcbn1cblxuLnBhZGRpbmctaG9yaXoge1xuXHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWhvcml6O1xuXHRwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1ob3Jpejtcblx0QGluY2x1ZGUgYnJlYWtwb2ludChkZXNrdG9wLW9ubHkpIHtcblx0XHRwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWhvcml6IC0gM3JlbTtcblx0XHRwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1ob3JpeiAtIDNyZW07XG5cdH1cblxuXHRAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG5cdFx0cGFkZGluZy1sZWZ0OiAkcGFkZGluZy1ob3JpeiAtIDZyZW07XG5cdFx0cGFkZGluZy1yaWdodDogJHBhZGRpbmctaG9yaXogLSA2cmVtO1xuXHR9XG59XG5cbi5wYWRkaW5nLXZlcnQge1xuXHRwYWRkaW5nLXRvcDogJHBhZGRpbmctdmVydDtcblx0cGFkZGluZy1ib3R0b206ICRwYWRkaW5nLXZlcnQ7XG59XG4iLCJAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgLmhpZGRlbi1tb2JpbGUge1xuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcbiAgICB9XG59XG4iLCIvLyBCb2R5IEJhc2VcbmJvZHkge1xuXHRmb250LXdlaWdodDogNDAwO1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgfVxufVxuXG4vLyBIZWFkaW5nc1xuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG5cdGZvbnQtd2VpZ2h0OiA0MDA7XG5cdHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG5cdGxldHRlci1zcGFjaW5nOiAtMHB4O1xufVxuXG5oMSB7XG5cdGZvbnQtc2l6ZTogJGgxLWZvbnQtc2l6ZTtcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMi41cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyLjVyZW07XG4gICAgfVxufVxuXG5oMiB7XG5cdEBpbmNsdWRlIGJyZWFrcG9pbnQodGFibGV0LXJhbmdlKSB7XG5cdFx0Zm9udC1zaXplOiAkaDItZm9udC1zaXplIC0gLjQwO1xuXHR9XG5cdEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcblx0XHRmb250LXNpemU6ICRoMi1mb250LXNpemUgLSAuNTA7XG5cdH1cbn1cblxuaDMge1xuXHRAaW5jbHVkZSBicmVha3BvaW50KHRhYmxldC1yYW5nZSkge1xuXHRcdGZvbnQtc2l6ZTogJGgzLWZvbnQtc2l6ZSAtIC40MDtcblx0fVxuXHRAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG5cdFx0Zm9udC1zaXplOiAkaDMtZm9udC1zaXplIC0gLjUwO1xuXHR9XG59XG5cbmg0IHtcblx0QGluY2x1ZGUgYnJlYWtwb2ludCh0YWJsZXQtcmFuZ2UpIHtcblx0XHRmb250LXNpemU6ICRoNC1mb250LXNpemUgLSAuNDA7XG5cdH1cblx0QGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuXHRcdGZvbnQtc2l6ZTogJGg0LWZvbnQtc2l6ZSAtIC41MDtcblx0fVxufVxuXG5oMSB7XG5cdGxldHRlci1zcGFjaW5nOiAtM3B4O1xufVxuXG5oMiB7XG5cdGxldHRlci1zcGFjaW5nOiAtMnB4O1xufVxuXG5oMyB7XG5cdGxldHRlci1zcGFjaW5nOiAtMXB4O1xufVxuXG4vLyBJY29uIFR3ZWFrc1xuaS5mYSB7XG5cdCYuZmEtaGVhcnQsICYuZmEtaGVhcnQtbyB7XG5cdFx0Ji5wdWxzZSB7XG5cdFx0XHRjb2xvcjogIzkyMFxuXHRcdH1cblx0fVxufVxuXG5jb2RlIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDtcbn1cblxucHJlIHtcblx0cGFkZGluZzogMnJlbTtcblx0Ym9yZGVyLXJhZGl1czogM3B4O1xuXHRjb2RlIHtcblx0XHRiYWNrZ3JvdW5kOiBpbmhlcml0O1xuXHR9XG59XG5cbi8vIExhYmVsXG4ubGFiZWwge1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICBoZWlnaHQ6IDFyZW07XG4gICAgbWluLXdpZHRoOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxcmVtO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAkY29yZS1mb250LXNpemUgLSAwLjNyZW07XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjc1cmVtO1xufVxuXG4vLyBEaXNwbGF5IFJFU0VUXG5mb3JtIHtcbiAgICAuZm9ybS1kaXNwbGF5LXdyYXBwZXIge1xuICAgICAgICBoMSB7XG4gICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICAgZm9udC1zaXplOiAxLjdyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDJweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaDIge1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDFweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaDMge1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDFweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaDQge1xuICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW0gIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJsb2NrcXVvdGUge1xuICAgICAgICAgICAgcGFkZGluZzogMTVweDtcbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29kZSwgcHJlIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMTBweCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodDogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRkIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHIge1xuICAgICAgICAgICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbiIsIi8vIEJhc2UgU2l6ZXNcbiRjb3JlLWZvbnQtc2l6ZTpcdFx0XHRcdC45cmVtICFkZWZhdWx0O1xuJGNvcmUtbGluZS1oZWlnaHQ6XHRcdFx0XHQxLjUgIWRlZmF1bHQ7XG5cbi8vIEhlYWRpbmcgU2l6ZXNcbiRoMS1mb250LXNpemU6XHRcdFx0XHRcdCRjb3JlLWZvbnQtc2l6ZSArIDIuMjAgIWRlZmF1bHQ7XG4kaDItZm9udC1zaXplOlx0XHRcdFx0XHQkY29yZS1mb250LXNpemUgKyAxLjUwICFkZWZhdWx0O1xuJGgzLWZvbnQtc2l6ZTpcdFx0XHRcdFx0JGNvcmUtZm9udC1zaXplICsgMS4xMCAhZGVmYXVsdDtcbiRoNC1mb250LXNpemU6XHRcdFx0XHRcdCRjb3JlLWZvbnQtc2l6ZSArIDAuNzUgIWRlZmF1bHQ7XG4kaDUtZm9udC1zaXplOlx0XHRcdFx0XHQkY29yZS1mb250LXNpemUgKyAwLjM1ICFkZWZhdWx0O1xuJGg2LWZvbnQtc2l6ZTpcdFx0XHRcdFx0JGNvcmUtZm9udC1zaXplIC0gMC4xNSAhZGVmYXVsdDtcblxuLy8gU3BhY2luZ1xuJGxlYWRpbmctbWFyZ2luOlx0XHRcdFx0JGNvcmUtbGluZS1oZWlnaHQgKiAxcmVtICFkZWZhdWx0O1xuIiwiLy8gRm9ybXNcbmZvcm0ge1xuXG4gICAgaDEsIGgzLCAuZm9ybS1zcGFjZXIgaDMge1xuICAgICAgICBwYWRkaW5nOiAwICRwYWRkaW5nLWRlZmF1bHQgMC41cmVtO1xuICAgICAgICBtYXJnaW46IDAgMCAxcmVtO1xuICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0xcHg7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgfVxuXG4gICAgcCB7XG4gICAgICAgIHBhZGRpbmc6IDAgJHBhZGRpbmctZGVmYXVsdDtcbiAgICB9XG5cbiAgICBwcmUge1xuICAgICAgICBwYWRkaW5nOiAxLjVyZW0gM3JlbTtcbiAgICB9XG5cbiAgICAubm93cmFwIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG5cbiAgICAuZm9ybS1kZXNjcmlwdGlvbiB7XG4gICAgICAgIHAge1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5idXR0b24ge1xuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuNXJlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtLWZpZWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAkcGFkZGluZy1kZWZhdWx0O1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICAgICAgfVxuXG5cblxuICAgICAgICAuZmlsZS10aHVtYm5haWwtd3JhcHBlciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmlsZS10aHVtYm5haWwge1xuICAgICAgICAgICAgbWF4LWhlaWdodDogMTUwcHg7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5maWxlLXRodW1ibmFpbC1yZW1vdmUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB0b3A6IDNweDtcbiAgICAgICAgICAgIHJpZ2h0OiAzcHg7XG4gICAgICAgICAgICB3aWR0aDogMjVweDtcbiAgICAgICAgICAgIGhlaWdodDogMjVweDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6MTAwJTtcblxuICAgICAgICAgICAgLmZhIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtLWRhdGEge1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1kZWZhdWx0O1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZm9ybS1pbnB1dC1hZGRvbi13cmFwcGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgICAuZm9ybS1pbnB1dC1hZGRvbiB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgcGFkZGluZzogMCA1cHg7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAgICAgICAgICYuY29weS10by1jbGlwYm9hcmQge1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDM1cHg7XG4gICAgICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWlucHV0LXByZXBlbmQge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4IDAgMCA0cHg7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQtd2lkdGg6IDAgIWltcG9ydGFudDtcblxuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWlucHV0LWFwcGVuZCB7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwIDRweCA0cHggMDtcbiAgICAgICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dDpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0Om5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5vdmVybGF5IHtcbiAgICAgICAgcGFkZGluZy10b3A6IDFyZW07XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAxcHg7XG5cbiAgICAgICAgJi5ib3R0b20ge1xuICAgICAgICAgICAgbWFyZ2luOiAycmVtIGF1dG8gLTJyZW0gYXV0bztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5yZXF1aXJlZCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1mYW1pbHk6IGhlbHZldGljYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgICBmb250LXNpemU6IDMwcHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwcHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC01cHg7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgICAgbWFyZ2luOjA7XG5cbiAgICAgICAgcCB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cblxuICAgICAgICBbZGF0YS1oaW50XSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgIH1cblxuICAgICAgICAmLmlubGluZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi50b2dnbGVhYmxlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtLXN1YmxhYmVsIHtcbiAgICAgICAgcCB7XG4gICAgICAgICAgICBvcGFjaXR5OiAwLjg7XG4gICAgICAgICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgICAgICAgIG1hcmdpbjogMTBweCAyMHB4IDAgMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCAuc2VsZWN0aXplLWlucHV0IHtcbiAgICAgICAgZm9udC1zaXplOiAkY29yZS1mb250LXNpemU7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkY29yZS1saW5lLWhlaWdodDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGZvcm0tYm9yZGVyLXJhZGl1cztcbiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgfVxuXG4gICAgLmZvcm0taW5wdXQtZmlsZSB7XG5cbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBtaW4taGVpZ2h0OiA3MHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1ib3JkZXItcmFkaXVzO1xuXG4gICAgICAgIHVsIHtcbiAgICAgICAgICAgIG1hcmdpbjogMXJlbSAwO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRmb3JtLWJvcmRlci1yYWRpdXM7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMC44cmVtIDFyZW0gMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLnNlbGVjdGl6ZS1kcm9wZG93biB7XG4gICAgICAgIHotaW5kZXg6IDEwMDAwMDtcbiAgICB9XG5cbiAgICAvLyB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgZm9ybXNcbiAgICAuZ3JpZC52ZXJ0aWNhbCB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgtZmxvdyhjb2x1bW4pO1xuICAgIH1cblxuICAgIC8vIGNvbXBhY3RcbiAgICAuY29tcGFjdCB7XG4gICAgICAgIC5mb3JtLWZpZWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb3JtLWxpc3Qtd3JhcHBlciB7XG4gICAgICAgICAgICBsaSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgLmZvcm0tZmllbGQge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNTAlO1xuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmZvcm0tc2VsZWN0LXdyYXBwZXIsIC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUgLnNlbGVjdGl6ZS1pbnB1dCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBjb250ZW50OiAnXFxmMDc4JztcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnRm9udEF3ZXNvbWUnO1xuICAgICAgICAgICAgcmlnaHQ6IDEycHg7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VsZWN0aXplLWlucHV0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc2VsZWN0LXBhZDtcbiAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgID4gaW5wdXQge1xuICAgICAgICAgICAgZm9udC1zaXplOiAkY29yZS1mb250LXNpemU7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogJGNvcmUtbGluZS1oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc2VsZWN0aXplLWNvbnRyb2wuc2luZ2xlLnBsdWdpbi1yZW1vdmVfYnV0dG9uIC5zZWxlY3RpemUtaW5wdXQge1xuICAgICAgICAuaXRlbSwgLnJlbW92ZS1zaW5nbGUge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgbWFyZ2luOiAwIDNweCAzcHggMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDJweCA2cHg7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHggMCAwIDJweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC5yZW1vdmUtc2luZ2xlIHtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogLTJweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zZWxlY3RpemUtY29udHJvbC5zaW5nbGUucGx1Z2luLXJlbW92ZV9idXR0b24gLnNlbGVjdGl6ZS1pbnB1dCxcbiAgICAuc2VsZWN0aXplLWNvbnRyb2wubXVsdGkgLnNlbGVjdGl6ZS1pbnB1dCB7XG4gICAgICAgIHBhZGRpbmc6ICgkbGVhZGluZy1tYXJnaW4gLyA0KSAoJGxlYWRpbmctbWFyZ2luIC8gNCk7XG5cbiAgICAgICAgJi5oYXMtaXRlbXMge1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDZweDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA0cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaXRlbSwgLnJlbW92ZS1zaW5nbGUge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5pdGVtID4gaW1nIHtcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDIwcHggIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1heC13aWR0aDogaW5oZXJpdCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnNlbGVjdGl6ZS1jb250cm9sLnNpbmdsZSAuc2VsZWN0aXplLWlucHV0IHtcblxuICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgIHJpZ2h0OiAyN3B4O1xuICAgICAgICB9XG4gICAgICAgICYuZHJvcGRvd24tYWN0aXZlIHtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYwNzcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLngtc21hbGwge1xuICAgICAgICBtYXgtd2lkdGg6IDVyZW0gIWltcG9ydGFudDtcblxuICAgICAgICAmLmZvcm0taW5wdXQtYWRkb24td3JhcHBlciB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDVyZW0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zbWFsbCB7XG4gICAgICAgIG1heC13aWR0aDogMTByZW0gIWltcG9ydGFudDtcblxuICAgICAgICAmLmZvcm0taW5wdXQtYWRkb24td3JhcHBlciB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgICAgICBtYXgtd2lkdGg6IDEwcmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubWVkaXVtOm5vdCguc3dpdGNoLXRvZ2dsZSksIC5tZWRpdW0uZm9ybS1pbnB1dC1hZGRvbi13cmFwcGVyIGlucHV0IHtcbiAgICAgICAgbWF4LXdpZHRoOiAyMHJlbTtcbiAgICAgICAgdGV4dGFyZWEge1xuICAgICAgICAgICAgaGVpZ2h0OiA3cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgJltkYXRhLWdyYXYtYXJyYXktdHlwZT1cImNvbnRhaW5lclwiXSB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGlucHV0W3R5cGU9dGV4dF0ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDcwJSAtIDExMHB4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5sYXJnZSwgLmxhcmdlLmZvcm0taW5wdXQtYWRkb24td3JhcHBlciBpbnB1dCB7XG4gICAgICAgIG1heC13aWR0aDogMzByZW0gIWltcG9ydGFudDtcblxuICAgICAgICB0ZXh0YXJlYSB7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwcmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgJltkYXRhLWdyYXYtYXJyYXktdHlwZT1cImNvbnRhaW5lclwiXSB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGlucHV0W3R5cGU9dGV4dF0ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAxMTBweCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3Qge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7XG4gICAgICAgIC1tb3otYXBwZWFyYW5jZTpub25lO1xuICAgICAgICBhcHBlYXJhbmNlOm5vbmU7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNlbGVjdC1wYWQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIGlucHV0W3R5cGU9dGV4dF0sXG4gICAgaW5wdXRbdHlwZT1wYXNzd29yZF0sXG4gICAgaW5wdXRbdHlwZT1lbWFpbF0sXG4gICAgaW5wdXRbdHlwZT1kYXRlXSxcbiAgICBpbnB1dFt0eXBlPXRlbF0sXG4gICAgaW5wdXRbdHlwZT10aW1lXSxcbiAgICBpbnB1dFt0eXBlPXdlZWtdLFxuICAgIGlucHV0W3R5cGU9bW9udGhdLFxuICAgIGlucHV0W3R5cGU9bnVtYmVyXSxcbiAgICBpbnB1dFt0eXBlPWNvbG9yXSxcbiAgICBpbnB1dFt0eXBlPXVybF0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICB0ZXh0YXJlYSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC5mb3JtLWZyb250bWF0dGVyLXdyYXBwZXIge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkZm9ybS1ib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgIC5zd2l0Y2gtdG9nZ2xlIHtcbiAgICAgICAgbGFiZWwge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYSxsYWJlbCB7XG4gICAgICAgICAgICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZHluZmllbGRzLCBbZGF0YS1ncmF2LWZpZWxkPVwiYXJyYXlcIl0sIFtkYXRhLWdyYXYtZmllbGQ9XCJtdWx0aWxldmVsXCJdIHtcblxuICAgICAgICBpbnB1dFt0eXBlPXRleHRdIHtcbiAgICAgICAgICAgIHdpZHRoOiA0MCU7XG4gICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggNXB4IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybS1yb3cge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcblxuICAgICAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMS41O1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAgICAgICAgICZbZGF0YS1ncmF2LWFycmF5LWFjdGlvbj1cInNvcnRcIl0ge1xuICAgICAgICAgICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBtb3ZlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5hcnJheS1maWVsZC12YWx1ZV9vbmx5IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIFtkYXRhLWdyYXYtZmllbGQ9XCJtdWx0aWxldmVsXCJdIGlucHV0OmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmF5O1xuICAgIH1cblxuICAgIFtkYXRhLWdyYXYtYXJyYXktdHlwZT1cImNvbnRhaW5lclwiXS5vbmUtY2hpbGQge1xuICAgICAgICBbZGF0YS1ncmF2LWFycmF5LWFjdGlvbj1cInNvcnRcIl0ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5idXR0b24tYmFyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMXJlbTtcbiAgICAgICAgcGFkZGluZzogMS4ycmVtIDNyZW07XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA1cHg7XG4gICAgfVxuXG4gICAgLmNoZWNrYm94ZXMge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDVweCAwO1xuXG4gICAgICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcblxuICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBwYWRkaW5nOiAwIDAgMCAycmVtO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuXG4gICAgICAgIH1cbiAgICAgICAgbGFiZWw6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6XCJcIjtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiAxLjVyZW07XG4gICAgICAgICAgICBoZWlnaHQ6IDEuNXJlbTtcbiAgICAgICAgICAgIHRvcDogNTAlO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0wLjc1cmVtO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogJGZvcm0tYm9yZGVyLXJhZGl1cztcbiAgICAgICAgfVxuICAgICAgICBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQgKyBsYWJlbDpiZWZvcmUge1xuICAgICAgICAgICAgY29udGVudDpcIlxcZjAwY1wiO1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiRm9udEF3ZXNvbWVcIiwgc2Fucy1zZXJpZjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAmLnRvZ2dsZWFibGUgbGFiZWx7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIERpc3BsYXlcbi5mb3JtLWRpc3BsYXktd3JhcHBlciB7XG4gICAgcCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIEZyb250bWF0dGVyIEZpZWxkXG5kaXYuZnJvbnRtYXR0ZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDNyZW07XG59XG5cbi8vIHBhcmVudHNcbltkYXRhLWdyYXYtZmllbGQ9XCJwYXJlbnRzXCJdIHtcblxuICAgIC5mb3JtLWlucHV0LXdyYXBwZXIge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgaSB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC4yNXJlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuW2RhdGEtcmVtb2RhbC1pZF0ucGFyZW50cy1jb250YWluZXIge1xuICAgIGZvcm0ge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuICAgIGZvcm0gPiBoMSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xuICAgIH1cbiAgICBmb3JtID4gLmJ1dHRvbi1iYXIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgIC5manMtbGlzdCB7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIC5manMtaXRlbSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLnBhcmVudHMtY29udGVudDplbXB0eSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG50ZXh0YXJlYS5mcm9udG1hdHRlciB7XG4gICAgaGVpZ2h0OiAxMzBweCAhaW1wb3J0YW50O1xuXG4gICAgJiArIC5Db2RlTWlycm9yIHtcbiAgICAgICAgaGVpZ2h0OiAxMzBweDtcbiAgICB9XG59XG5cbi8vIHBhcmVudHNcbltkYXRhLWdyYXYtZmllbGQ9XCJwYXJlbnRzXCJdIHtcblxuICAgIC5mb3JtLWlucHV0LXdyYXBwZXIge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgaSB7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC4yNXJlbTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuW2RhdGEtcmVtb2RhbC1pZF0ucGFyZW50cy1jb250YWluZXIge1xuICAgIGZvcm0ge1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cblxuICAgIGZvcm0gPiBoMSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xuICAgIH1cbiAgICBmb3JtID4gLmJ1dHRvbi1iYXIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgIC5manMtbGlzdCB7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIG1heC1oZWlnaHQ6IDQwMHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgIC5manMtaXRlbSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuXG4gICAgLnBhcmVudHMtY29udGVudDplbXB0eSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG4vLyBTb3J0YWJsZXNcbi5mb3JtLW9yZGVyLXdyYXBwZXIge1xuXG4gICAgLm5vdGljZSB7XG4gICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICB9XG5cbiAgICB1bC5vcmRlcmFibGUge1xuXG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwLjJyZW0gMXJlbTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRmb3JtLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgICBtYXJnaW46IDNweCAwO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAmLmRyYWctaGFuZGxlIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IG1vdmU7XG4gICAgICAgICAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxmMGM5JztcbiAgICAgICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IEZvbnRBd2Vzb21lO1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFNvcnRhYmxlc1xuLmZvcm0tbGlzdC13cmFwcGVyIHtcbiAgICB1bFtkYXRhLWNvbGxlY3Rpb24taG9sZGVyXSB7XG5cbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgID4gbGkge1xuICAgICAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRmb3JtLWJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgICBtYXJnaW46IDNweCAwO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgICAgICAgICAuaXRlbS1hY3Rpb25zIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgdG9wOiA0cHg7XG5cbiAgICAgICAgICAgICAgICAuZmEge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmNvbGxlY3Rpb24tY29sbGFwc2VkIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDcwcHg7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlWigwKSk7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTIwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJltkYXRhLWNvbGxlY3Rpb24tbm9zb3J0XSA+IGxpIHtcbiAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5jb2xsZWN0aW9uLWFjdGlvbnMge1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICB9XG5cbiAgICAuY29sbGVjdGlvbi1zb3J0IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGN1cnNvcjogbW92ZTtcblxuICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICB3aWR0aDogMjBweDtcblxuICAgICAgICAgICAgLmZhIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5mYSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgW2RhdGEtY29sbGVjdGlvbi1ub3NvcnRdIC5jb2xsZWN0aW9uLXNvcnQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLmZvcm0tbGFiZWwuYmxvY2sge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgIH1cbiAgICBsYWJlbCB7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgfVxufVxuXG4vLyBGaWVsZHNldFxuI2FkbWluLW1haW4gLmFkbWluLWJsb2NrIGgyIHtcbiAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgbWFyZ2luOiAwIDAgLjVyZW07XG5cbiAgICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xufVxuLmZvcm0tZmllbGRzZXQge1xuICAgIG1hcmdpbjogMXJlbSAxLjVyZW07XG59XG5cbi5mb3JtLWZpZWxkc2V0LS1sYWJlbCB7XG4gICAgbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgICBwYWRkaW5nOiAuNXJlbSAxcmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICBoMiB7XG4gICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5hY3Rpb25zIHtcbiAgICAgICAgZm9udC1zaXplOiBpbml0aWFsO1xuICAgICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsO1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG5cbiAgICAmICsgLmZvcm0tZGF0YSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDFyZW07XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxufVxuLmZvcm0tZmllbGRzZXQtLWN1cnNvciB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuLmZvcm0tZmllbGRzZXQtLWluZm8ge1xuICAgIGZvbnQtc2l6ZTogc21hbGw7XG59XG4uZm9ybS1maWVsZHNldCA+IGlucHV0OmNoZWNrZWQgfiAuZm9ybS1kYXRhLFxuLmZvcm0tZmllbGRzZXQtLWNvbGxhcHNpYmxlIC5vcGVuLFxuLmZvcm0tZmllbGRzZXQgaW5wdXQ6Y2hlY2tlZCB+IC5mb3JtLWxhYmVsIC5mb3JtLWZpZWxkc2V0LS1jb2xsYXBzaWJsZSAuY2xvc2Uge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuLmZvcm0tZmllbGRzZXQgPiAuZm9ybS1kYXRhLFxuLmZvcm0tZmllbGRzZXQtLWNvbGxhcHNpYmxlIC5jbG9zZSxcbi5mb3JtLWZpZWxkc2V0IGlucHV0OmNoZWNrZWQgfiAuZm9ybS1sYWJlbCAuZm9ybS1maWVsZHNldC0tY29sbGFwc2libGUgLm9wZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5maWxlcGlja2VyLWZpZWxkLWltYWdlIHtcbiAgICB3aWR0aDogMzBweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIG1hcmdpbi1yaWdodDogNXB4O1xufVxuXG4uZmlsZXBpY2tlci1maWVsZC1uYW1lIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4ucGVybWlzc2lvbnMtY29udGFpbmVyICB7XG4gICAgLnBlcm1pc3Npb24tdmFsdWUge1xuICAgICAgICB3aWR0aDogNTAlO1xuICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgbWFyZ2luOiAwIDVweCA1cHggMDtcbiAgICAgICAgaGVpZ2h0OiAzOXB4O1xuICAgIH1cblxuICAgIC5zd2l0Y2gtdG9nZ2xlIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDM3cHg7XG4gICAgICAgIG1hcmdpbjogMCA1cHggNXB4IDA7XG5cbiAgICB9XG5cbiAgICAuY3J1ZHAtY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcblxuICAgICAgICAuY2hlY2tib3hlcy50b2dnbGVhYmxlIHtcblxuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBpbmhlcml0O1xuXG4gICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVyZW07XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG5cbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0LXdpZHRoOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG5cbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiBpbnB1dFt0eXBlPWNoZWNrYm94XSArIGxhYmVsOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgY29udGVudDpcIlxcZjAyM1wiO1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcIkZvbnRBd2Vzb21lXCI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuODtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgJltkYXRhLV9jaGVjay1zdGF0dXM9XCIxXCJdIGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OlwiXFxmMDBjXCI7XG4gICAgICAgICAgICAgICAgZm9udC1mYW1pbHk6IFwiRm9udEF3ZXNvbWVcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJltkYXRhLV9jaGVjay1zdGF0dXM9XCIyXCJdIGlucHV0W3R5cGU9Y2hlY2tib3hdICsgbGFiZWw6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OlwiXFxmMDVlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmID4gZGl2OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIC5jaGVja2JveGVzLnRvZ2dsZWFibGUge1xuICAgICAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogJGZvcm0tYm9yZGVyLXJhZGl1cyAwIDAgJGZvcm0tYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAmID4gZGl2Omxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgICAuY2hlY2tib3hlcy50b2dnbGVhYmxlIHtcbiAgICAgICAgICAgICAgICBsYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwICRmb3JtLWJvcmRlci1yYWRpdXMgJGZvcm0tYm9yZGVyLXJhZGl1cyAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuW2RhdGEtZ3Jhdi1maWVsZD1cImNyb25cIl0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmNyb24taW5zdGFsbCB7XG5cbiAgICBtYXJnaW46IDFyZW07XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cbiAgICBmb3JtICYgcHJlIHtcbiAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgbWFyZ2luOiAwIDEuNXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgfVxuICAgIC5zZXR1cC1zdGF0dXMge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG59XG5cbi5jcm9uLXN0YXR1cywgLmJhY2t1cHMtaGlzdG9yeSB7XG5cbiAgICBtYXJnaW4tYm90dG9tOiA0cmVtO1xuXG4gICAgLmNyb24tYXQgY29kZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTIwJTtcbiAgICAgICAgcGFkZGluZzogMnB4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICB9XG5cbiAgICAuYmFkZ2Uge1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cblxuICAgIHRyIHtcblxuICAgICAgICAmLmRlbGV0aW5nIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmVmZWY7XG4gICAgICAgICAgICBjb2xvcjogI2JiYjtcbiAgICAgICAgICAgIHRleHQtc2hhZG93OiAwIDFweCB3aGl0ZTtcblxuICAgICAgICAgICAgYnV0dG9uLCAuYnV0dG9uIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjNzc3O1xuICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mb3JtIC5jcm9uLWpvYi1saXN0LCBmb3JtIC5iYWNrdXBzLWxpc3Qge1xuICAgIGxpIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgIH1cblxuICAgIC5mb3JtLWZpZWxkLmdyaWQge1xuICAgICAgICB3aWR0aDogY2FsYyg1MCUgLSA1cHgpO1xuXG4gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwidGFibGUsXG50Ym9keSxcbnRoZWFkIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG59XG5cbi5ncG0tZGV0YWlscyB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgQGluY2x1ZGUgZmxleChhdXRvKTtcbn1cblxudGQge1xuICAgIGJvcmRlcjogMDtcbn1cblxudHIge1xuICAgIEBpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuMnMgZWFzZSk7XG5cbiAgICBAaW5jbHVkZSBkaXNwbGF5KGZsZXgpO1xuICAgIEBpbmNsdWRlIGZsZXgtd3JhcCh3cmFwKTtcbiAgICBAaW5jbHVkZSBhbGlnbi1pdGVtcyhjZW50ZXIpO1xuXG4gICAgdGgsIHRkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgoMSk7XG5cbiAgICAgICAgJi5zaHJpbmsge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZG91YmxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZsZXgoMik7XG4gICAgICAgIH1cblxuICAgICAgICAmLnRyaXBsZSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBmbGV4KDMpO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5xdWFkcnVwbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleCg0KTtcbiAgICAgICAgfVxuXG4gICAgICAgICYucXVpbnR1cGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZsZXgoNSk7XG4gICAgICAgIH1cblxuICAgICAgICAmLnNleHR1cGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZsZXgoNik7XG4gICAgICAgIH1cblxuICAgICAgICAmLnNlcHR1cGxlIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZsZXgoNyk7XG4gICAgICAgIH1cblxuICAgICAgICAmLm9jdHVwbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleCg4KTtcbiAgICAgICAgfVxuXG4gICAgICAgICYubm9udHVwbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleCg5KTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuZGVjdHVwbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleCgxMCk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogJHBhZGRpbmctZGVmYXVsdDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy1kZWZhdWx0O1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMXJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubGVmdCB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5jZW50ZXIge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5yaWdodCB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgICYucmlnaHQucGFkIHtcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG4gICAgICAgICAgICAuZm9ybS1kYXRhIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5sZWZ0LnBhZCB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLWRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICAmLmVsbGlwc2lzIHtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICAmLnJ0bCB7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYucnRsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcnRsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGgge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG5cbiAgICB0ZCB7XG5cbiAgICAgICAgJi5ncG0tYWN0aW9ucyB7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogJHBhZGRpbmctZGVmYXVsdCArIDFyZW07XG4gICAgICAgICAgICBtaW4taGVpZ2h0OiAzOHB4O1xuXG4gICAgICAgICAgICAuZ3BtLWRldGFpbHMtZXhwYW5kIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgdG9wOiAxMnB4O1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5ncG0tZGV0YWlscyB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBicmVha3BvaW50KG1vYmlsZS1vbmx5KXtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgID4gLnRhYmxlLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAgICAgICB0ZCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0Ym9keSB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICB0ZCB7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG50YWJsZS5ub2ZsZXgge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIHRhYmxlLWxheW91dDogYXV0bztcblxuICAgIHRoZWFkIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xuICAgIH1cblxuICAgIHRib2R5IHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwO1xuICAgIH1cblxuICAgIHRyIHtcbiAgICAgICAgZGlzcGxheTogdGFibGUtcm93O1xuXG4gICAgICAgIHRkLCB0aCB7XG4gICAgICAgICAgICBmbGV4OiBub25lO1xuICAgICAgICAgICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENTUzMgRmxleGlibGUgQm94IE1vZGVsIGFuZCBwcm9wZXJ0eSBkZWZhdWx0c1xuXG4vLyBDdXN0b20gc2hvcnRoYW5kIG5vdGF0aW9uIGZvciBmbGV4Ym94XG5AbWl4aW4gYm94KCRvcmllbnQ6IGlubGluZS1heGlzLCAkcGFjazogc3RhcnQsICRhbGlnbjogc3RyZXRjaCkge1xuICBAaW5jbHVkZSBkaXNwbGF5LWJveDtcbiAgQGluY2x1ZGUgYm94LW9yaWVudCgkb3JpZW50KTtcbiAgQGluY2x1ZGUgYm94LXBhY2soJHBhY2spO1xuICBAaW5jbHVkZSBib3gtYWxpZ24oJGFsaWduKTtcbn1cblxuQG1peGluIGRpc3BsYXktYm94IHtcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gIGRpc3BsYXk6IC1tb3otYm94O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDsgLy8gSUUgMTBcbiAgZGlzcGxheTogYm94O1xufVxuXG5AbWl4aW4gYm94LW9yaWVudCgkb3JpZW50OiBpbmxpbmUtYXhpcykge1xuLy8gaG9yaXpvbnRhbHx2ZXJ0aWNhbHxpbmxpbmUtYXhpc3xibG9jay1heGlzfGluaGVyaXRcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LW9yaWVudCwgJG9yaWVudCwgd2Via2l0IG1veiBzcGVjKTtcbn1cblxuQG1peGluIGJveC1wYWNrKCRwYWNrOiBzdGFydCkge1xuLy8gc3RhcnR8ZW5kfGNlbnRlcnxqdXN0aWZ5XG4gIEBpbmNsdWRlIHByZWZpeGVyKGJveC1wYWNrLCAkcGFjaywgd2Via2l0IG1veiBzcGVjKTtcbiAgLW1zLWZsZXgtcGFjazogJHBhY2s7IC8vIElFIDEwXG59XG5cbkBtaXhpbiBib3gtYWxpZ24oJGFsaWduOiBzdHJldGNoKSB7XG4vLyBzdGFydHxlbmR8Y2VudGVyfGJhc2VsaW5lfHN0cmV0Y2hcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWFsaWduLCAkYWxpZ24sIHdlYmtpdCBtb3ogc3BlYyk7XG4gIC1tcy1mbGV4LWFsaWduOiAkYWxpZ247IC8vIElFIDEwXG59XG5cbkBtaXhpbiBib3gtZGlyZWN0aW9uKCRkaXJlY3Rpb246IG5vcm1hbCkge1xuLy8gbm9ybWFsfHJldmVyc2V8aW5oZXJpdFxuICBAaW5jbHVkZSBwcmVmaXhlcihib3gtZGlyZWN0aW9uLCAkZGlyZWN0aW9uLCB3ZWJraXQgbW96IHNwZWMpO1xuICAtbXMtZmxleC1kaXJlY3Rpb246ICRkaXJlY3Rpb247IC8vIElFIDEwXG59XG5cbkBtaXhpbiBib3gtbGluZXMoJGxpbmVzOiBzaW5nbGUpIHtcbi8vIHNpbmdsZXxtdWx0aXBsZVxuICBAaW5jbHVkZSBwcmVmaXhlcihib3gtbGluZXMsICRsaW5lcywgd2Via2l0IG1veiBzcGVjKTtcbn1cblxuQG1peGluIGJveC1vcmRpbmFsLWdyb3VwKCRpbnQ6IDEpIHtcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LW9yZGluYWwtZ3JvdXAsICRpbnQsIHdlYmtpdCBtb3ogc3BlYyk7XG4gIC1tcy1mbGV4LW9yZGVyOiAkaW50OyAvLyBJRSAxMFxufVxuXG5AbWl4aW4gYm94LWZsZXgoJHZhbHVlOiAwLjApIHtcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWZsZXgsICR2YWx1ZSwgd2Via2l0IG1veiBzcGVjKTtcbiAgLW1zLWZsZXg6ICR2YWx1ZTsgLy8gSUUgMTBcbn1cblxuQG1peGluIGJveC1mbGV4LWdyb3VwKCRpbnQ6IDEpIHtcbiAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWZsZXgtZ3JvdXAsICRpbnQsIHdlYmtpdCBtb3ogc3BlYyk7XG59XG5cbi8vIENTUzMgRmxleGlibGUgQm94IE1vZGVsIGFuZCBwcm9wZXJ0eSBkZWZhdWx0c1xuLy8gVW5pZmllZCBhdHRyaWJ1dGVzIGZvciAyMDA5LCAyMDExLCBhbmQgMjAxMiBmbGF2b3Vycy5cblxuLy8gMjAwOSAtIGRpc3BsYXkgKGJveCB8IGlubGluZS1ib3gpXG4vLyAyMDExIC0gZGlzcGxheSAoZmxleGJveCB8IGlubGluZS1mbGV4Ym94KVxuLy8gMjAxMiAtIGRpc3BsYXkgKGZsZXggfCBpbmxpbmUtZmxleClcbkBtaXhpbiBkaXNwbGF5KCR2YWx1ZSkge1xuLy8gIGZsZXggfCBpbmxpbmUtZmxleFxuICAgIEBpZiAkdmFsdWUgPT0gXCJmbGV4XCIge1xuICAgICAgICAvLyAyMDA5XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBkaXNwbGF5OiAtbW96LWJveDtcbiAgICAgICAgZGlzcGxheTogYm94O1xuXG4gICAgICAgIC8vIDIwMTJcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICAgICAgICBkaXNwbGF5OiAtbW96LWZsZXg7XG4gICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94OyAvLyAyMDExIChJRSAxMClcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcImlubGluZS1mbGV4XCIge1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1ib3g7XG4gICAgICAgIGRpc3BsYXk6IC1tb3otaW5saW5lLWJveDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJveDtcblxuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4O1xuICAgICAgICBkaXNwbGF5OiAtbW96LWlubGluZS1mbGV4O1xuICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIH1cblxuICAgIEBlbHNlIHtcbiAgICAgICAgZGlzcGxheTogJHZhbHVlO1xuICAgIH1cbn1cblxuLy8gMjAwOSAtIGJveC1mbGV4IChpbnRlZ2VyKVxuLy8gMjAxMSAtIGZsZXggKGRlY2ltYWwgfCB3aWR0aCBkZWNpbWFsKVxuLy8gMjAxMiAtIGZsZXggKGludGVnZXIgaW50ZWdlciB3aWR0aClcbkBtaXhpbiBmbGV4KCR2YWx1ZSkge1xuXG4gICAgLy8gR3JhYiBmbGV4LWdyb3cgZm9yIG9sZGVyIGJyb3dzZXJzLlxuICAgICRmbGV4LWdyb3c6IG50aCgkdmFsdWUsIDEpO1xuXG4gICAgLy8gMjAwOVxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGJveC1mbGV4LCAkZmxleC1ncm93LCB3ZWJraXQgbW96IHNwZWMpO1xuXG4gICAgLy8gMjAxMSAoSUUgMTApLCAyMDEyXG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoZmxleCwgJHZhbHVlLCB3ZWJraXQgbW96IG1zIHNwZWMpO1xufVxuXG4vLyAyMDA5IC0gYm94LW9yaWVudCAoIGhvcml6b250YWwgfCB2ZXJ0aWNhbCB8IGlubGluZS1heGlzIHwgYmxvY2stYXhpcylcbi8vICAgICAgLSBib3gtZGlyZWN0aW9uIChub3JtYWwgfCByZXZlcnNlKSAgICAgIFxuLy8gMjAxMSAtIGZsZXgtZGlyZWN0aW9uIChyb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlKVxuLy8gMjAxMiAtIGZsZXgtZGlyZWN0aW9uIChyb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlKVxuQG1peGluIGZsZXgtZGlyZWN0aW9uKCR2YWx1ZTogcm93KSB7XG5cbiAgICAvLyBBbHQgdmFsdWVzLlxuICAgICR2YWx1ZS0yMDA5OiAkdmFsdWU7XG4gICAgJHZhbHVlLTIwMTE6ICR2YWx1ZTtcbiAgICAkZGlyZWN0aW9uOiBcIm5vcm1hbFwiO1xuXG4gICAgQGlmICR2YWx1ZSA9PSByb3cge1xuICAgICAgICAkdmFsdWUtMjAwOTogaG9yaXpvbnRhbDtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcInJvdy1yZXZlcnNlXCIge1xuICAgICAgICAkdmFsdWUtMjAwOTogaG9yaXpvbnRhbDtcbiAgICAgICAgJGRpcmVjdGlvbjogcmV2ZXJzZTtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBjb2x1bW4ge1xuICAgICAgICAkdmFsdWUtMjAwOTogdmVydGljYWw7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJjb2x1bW4tcmV2ZXJzZVwiIHtcbiAgICAgICAgJHZhbHVlLTIwMDk6IHZlcnRpY2FsO1xuICAgICAgICAkZGlyZWN0aW9uOiByZXZlcnNlO1xuICAgIH1cblxuICAgIC8vIDIwMDlcbiAgICBAaW5jbHVkZSBwcmVmaXhlcihib3gtb3JpZW50LCAkdmFsdWUtMjAwOSwgd2Via2l0IG1veiBzcGVjKTtcbiAgICBAaWYgJGRpcmVjdGlvbiA9PSBcInJldmVyc2VcIiB7XG4gICAgICAgIEBpbmNsdWRlIHByZWZpeGVyKGJveC1kaXJlY3Rpb24sICRkaXJlY3Rpb24sIHdlYmtpdCBtb3ogc3BlYyk7XG4gICAgfVxuXG4gICAgLy8gMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgtZGlyZWN0aW9uLCAkdmFsdWUsIHdlYmtpdCBtb3ogc3BlYyk7XG5cbiAgICAvLyAyMDExIChJRSAxMClcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246ICR2YWx1ZTtcbn1cblxuLy8gMjAwOSAtIGJveC1saW5lcyAoc2luZ2xlIHwgbXVsdGlwbGUpXG4vLyAyMDExIC0gZmxleC13cmFwIChub3dyYXAgfCB3cmFwIHwgd3JhcC1yZXZlcnNlKVxuLy8gMjAxMiAtIGZsZXgtd3JhcCAobm93cmFwIHwgd3JhcCB8IHdyYXAtcmV2ZXJzZSlcbkBtaXhpbiBmbGV4LXdyYXAoJHZhbHVlOiBub3dyYXApIHtcblxuICAgIC8vIEFsdCB2YWx1ZXMuXG4gICAgJGFsdC12YWx1ZTogJHZhbHVlO1xuICAgIEBpZiAkdmFsdWUgPT0gbm93cmFwIHtcbiAgICAgICAgJGFsdC12YWx1ZTogc2luZ2xlO1xuICAgIH1cblxuICAgIEBlbHNlaWYgJHZhbHVlID09IHdyYXAge1xuICAgICAgICAkYWx0LXZhbHVlOiBtdWx0aXBsZTtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcIndyYXAtcmV2ZXJzZVwiIHtcbiAgICAgICAgJGFsdC12YWx1ZTogbXVsdGlwbGU7XG4gICAgfVxuXG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWxpbmVzLCAkYWx0LXZhbHVlLCB3ZWJraXQgbW96IHNwZWMpO1xuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgtd3JhcCwgJHZhbHVlLCB3ZWJraXQgbW96IG1zIHNwZWMpO1xufVxuXG4vLyAyMDA5IC0gVE9ETzogcGFyc2UgdmFsdWVzIGludG8gZmxleC1kaXJlY3Rpb24vZmxleC13cmFwXG4vLyAyMDExIC0gVE9ETzogcGFyc2UgdmFsdWVzIGludG8gZmxleC1kaXJlY3Rpb24vZmxleC13cmFwXG4vLyAyMDEyIC0gZmxleC1mbG93IChmbGV4LWRpcmVjdGlvbiB8fCBmbGV4LXdyYXApXG5AbWl4aW4gZmxleC1mbG93KCR2YWx1ZSkge1xuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgtZmxvdywgJHZhbHVlLCB3ZWJraXQgbW96IHNwZWMpO1xufVxuXG4vLyAyMDA5IC0gYm94LW9yZGluYWwtZ3JvdXAgKGludGVnZXIpXG4vLyAyMDExIC0gZmxleC1vcmRlciAoaW50ZWdlcilcbi8vIDIwMTIgLSBvcmRlciAoaW50ZWdlcilcbkBtaXhpbiBvcmRlcigkaW50OiAwKSB7XG4gICAgLy8gMjAwOVxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGJveC1vcmRpbmFsLWdyb3VwLCAkaW50LCB3ZWJraXQgbW96IHNwZWMpO1xuXG4gICAgLy8gMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKG9yZGVyLCAkaW50LCB3ZWJraXQgbW96IHNwZWMpO1xuXG4gICAgLy8gMjAxMSAoSUUgMTApXG4gICAgLW1zLWZsZXgtb3JkZXI6ICRpbnQ7XG59XG5cbi8vIDIwMTIgLSBmbGV4LWdyb3cgKG51bWJlcilcbkBtaXhpbiBmbGV4LWdyb3coJG51bWJlcjogMCkge1xuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgtZ3JvdywgJG51bWJlciwgd2Via2l0IG1veiBzcGVjKTtcbiAgICAtbXMtZmxleC1wb3NpdGl2ZTogJG51bWJlcjtcbn1cblxuLy8gMjAxMiAtIGZsZXgtc2hyaW5rIChudW1iZXIpXG5AbWl4aW4gZmxleC1zaHJpbmsoJG51bWJlcjogMSkge1xuICAgIEBpbmNsdWRlIHByZWZpeGVyKGZsZXgtc2hyaW5rLCAkbnVtYmVyLCB3ZWJraXQgbW96IHNwZWMpO1xuICAgIC1tcy1mbGV4LW5lZ2F0aXZlOiAkbnVtYmVyO1xufVxuXG4vLyAyMDEyIC0gZmxleC1iYXNpcyAobnVtYmVyKVxuQG1peGluIGZsZXgtYmFzaXMoJHdpZHRoOiBhdXRvKSB7XG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoZmxleC1iYXNpcywgJHdpZHRoLCB3ZWJraXQgbW96IHNwZWMpO1xuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAkd2lkdGg7XG59XG5cbi8vIDIwMDkgLSBib3gtcGFjayAoc3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBqdXN0aWZ5KVxuLy8gMjAxMSAtIGZsZXgtcGFjayAoc3RhcnQgfCBlbmQgfCBjZW50ZXIgfCBqdXN0aWZ5KVxuLy8gMjAxMiAtIGp1c3RpZnktY29udGVudCAoZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZClcbkBtaXhpbiBqdXN0aWZ5LWNvbnRlbnQgKCR2YWx1ZTogZmxleC1zdGFydCkge1xuXG4gICAgLy8gQWx0IHZhbHVlcy5cbiAgICAkYWx0LXZhbHVlOiAkdmFsdWU7XG4gICAgQGlmICR2YWx1ZSA9PSBcImZsZXgtc3RhcnRcIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IHN0YXJ0O1xuICAgIH1cblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwiZmxleC1lbmRcIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IGVuZDtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcInNwYWNlLWJldHdlZW5cIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IGp1c3RpZnk7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJzcGFjZS1hcm91bmRcIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAvLyAyMDA5XG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LXBhY2ssICRhbHQtdmFsdWUsIHdlYmtpdCBtb3ogc3BlYyk7XG5cbiAgICAvLyAyMDEyXG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoanVzdGlmeS1jb250ZW50LCAkdmFsdWUsIHdlYmtpdCBtb3ogbXMgbyBzcGVjKTtcblxuICAgIC8vIDIwMTEgKElFIDEwKVxuICAgIC1tcy1mbGV4LXBhY2s6ICRhbHQtdmFsdWU7XG59XG5cbi8vIDIwMDkgLSBib3gtYWxpZ24gKHN0YXJ0IHwgZW5kIHwgY2VudGVyIHwgYmFzZWxpbmUgfCBzdHJldGNoKVxuLy8gMjAxMSAtIGZsZXgtYWxpZ24gKHN0YXJ0IHwgZW5kIHwgY2VudGVyIHwgYmFzZWxpbmUgfCBzdHJldGNoKVxuLy8gMjAxMiAtIGFsaWduLWl0ZW1zIChmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2gpXG5AbWl4aW4gYWxpZ24taXRlbXMoJHZhbHVlOiBzdHJldGNoKSB7XG5cbiAgICAkYWx0LXZhbHVlOiAkdmFsdWU7XG5cbiAgICBAaWYgJHZhbHVlID09IFwiZmxleC1zdGFydFwiIHtcbiAgICAgICAgJGFsdC12YWx1ZTogc3RhcnQ7XG4gICAgfSAgICBcblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwiZmxleC1lbmRcIiB7XG4gICAgICAgICRhbHQtdmFsdWU6IGVuZDtcbiAgICB9XG5cbiAgICAvLyAyMDA5XG4gICAgQGluY2x1ZGUgcHJlZml4ZXIoYm94LWFsaWduLCAkYWx0LXZhbHVlLCB3ZWJraXQgbW96IHNwZWMpO1xuXG4gICAgLy8gMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGFsaWduLWl0ZW1zLCAkdmFsdWUsIHdlYmtpdCBtb3ogbXMgbyBzcGVjKTtcbiAgICBcbiAgICAvLyAyMDExIChJRSAxMClcbiAgICAtbXMtZmxleC1hbGlnbjogJGFsdC12YWx1ZTsgICAgXG59XG5cbi8vIDIwMTEgLSBmbGV4LWl0ZW0tYWxpZ24gKGF1dG8gfCBzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaClcbi8vIDIwMTIgLSBhbGlnbi1zZWxmIChhdXRvIHwgZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgYmFzZWxpbmUgfCBzdHJldGNoKVxuQG1peGluIGFsaWduLXNlbGYoJHZhbHVlOiBhdXRvKSB7XG5cbiAgICAkdmFsdWUtMjAxMTogJHZhbHVlO1xuICAgIEBpZiAkdmFsdWUgPT0gXCJmbGV4LXN0YXJ0XCIge1xuICAgICAgICAkdmFsdWUtMjAxMTogc3RhcnQ7XG4gICAgfSAgICBcblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwiZmxleC1lbmRcIiB7XG4gICAgICAgICR2YWx1ZS0yMDExOiBlbmQ7XG4gICAgfVxuXG4gICAgLy8gMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGFsaWduLXNlbGYsICR2YWx1ZSwgd2Via2l0IG1veiBzcGVjKTtcblxuICAgIC8vIDIwMTEgKElFIDEwKVxuICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246ICR2YWx1ZS0yMDExO1xufVxuXG4vLyAyMDExIC0gZmxleC1saW5lLXBhY2sgKHN0YXJ0IHwgZW5kIHwgY2VudGVyIHwganVzdGlmeSB8IGRpc3RyaWJ1dGUgfCBzdHJldGNoKVxuLy8gMjAxMiAtIGFsaWduLWNvbnRlbnQgKGZsZXgtc3RhcnQgfCBmbGV4LWVuZCB8IGNlbnRlciB8IHNwYWNlLWJldHdlZW4gfCBzcGFjZS1hcm91bmQgfCBzdHJldGNoKVxuQG1peGluIGFsaWduLWNvbnRlbnQoJHZhbHVlOiBzdHJldGNoKSB7XG5cbiAgICAkdmFsdWUtMjAxMTogJHZhbHVlO1xuICAgIEBpZiAkdmFsdWUgPT0gXCJmbGV4LXN0YXJ0XCIge1xuICAgICAgICAkdmFsdWUtMjAxMTogc3RhcnQ7XG4gICAgfSAgICBcblxuICAgIEBlbHNlaWYgJHZhbHVlID09IFwiZmxleC1lbmRcIiB7XG4gICAgICAgICR2YWx1ZS0yMDExOiBlbmQ7XG4gICAgfVxuXG4gICAgQGVsc2VpZiAkdmFsdWUgPT0gXCJzcGFjZS1iZXR3ZWVuXCIge1xuICAgICAgICAkdmFsdWUtMjAxMToganVzdGlmeTtcbiAgICB9XG5cbiAgICBAZWxzZWlmICR2YWx1ZSA9PSBcInNwYWNlLWFyb3VuZFwiIHtcbiAgICAgICAgJHZhbHVlLTIwMTE6IGRpc3RyaWJ1dGU7XG4gICAgfVxuXG4gICAgLy8gMjAxMlxuICAgIEBpbmNsdWRlIHByZWZpeGVyKGFsaWduLWNvbnRlbnQsICR2YWx1ZSwgd2Via2l0IG1veiBzcGVjKTtcblxuICAgIC8vIDIwMTEgKElFIDEwKVxuICAgIC1tcy1mbGV4LWxpbmUtcGFjazogJHZhbHVlLTIwMTE7XG59XG5cbiIsIi5idXR0b24ge1xuXHRAZXh0ZW5kICVidXR0b247XG59XG5cbi5idXR0b24tZ3JvdXAge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxuICAgIC8vIHJlYWwgYnV0dG9uXG4gICAgPiAuYnV0dG9uOmZpcnN0LWNoaWxkOm5vdCg6bGFzdC1jaGlsZCk6bm90KC5kcm9wZG93bi10b2dnbGUpIHtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICA+IC5idXR0b246Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgID4gLmJ1dHRvbiB7XG4gICAgfVxuXG4gICAgLy8gdG9nZ2xlIGNhcmV0XG4gICAgPiAuYnV0dG9uICsgLmRyb3Bkb3duLXRvZ2dsZSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZy1yaWdodDogOHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDtcblxuICAgICAgICBpIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgID4gLmJ1dHRvbjpsYXN0LWNoaWxkOm5vdCg6Zmlyc3QtY2hpbGQpLCA+IC5kcm9wZG93bi10b2dnbGU6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuYnV0dG9uICsgLmJ1dHRvbiwgLmJ1dHRvbiArIC5idXR0b24tZ3JvdXAsIC5idXR0b24tZ3JvdXAgKyAuYnV0dG9uLCAuYnV0dG9uLWdyb3VwICsgLmJ1dHRvbi1ncm91cCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtM3B4O1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgICAgIGxlZnQ6IGluaGVyaXQ7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kcm9wZG93bi1tZW51IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICBtaW4td2lkdGg6IDE1MHB4O1xuICAgICAgICBwYWRkaW5nOiA1cHggMDtcbiAgICAgICAgbWFyZ2luOiAycHggMCAwO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuXG4gICAgICAgIC5idXR0b24ge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAmLmxhbmd1YWdlLXN3aXRjaGVyIHtcbiAgICAgICAgICAgIG1pbi13aWR0aDogNTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubGFuZy1zd2l0Y2hlciB7XG4gICAgICAgICAgICBtaW4td2lkdGg6IDE1MHB4O1xuICAgICAgICAgICAgbGVmdDogaW5oZXJpdDtcbiAgICAgICAgICAgIHJpZ2h0OiAwO1xuXG4gICAgICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmRpdmlkZXIge1xuICAgICAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgICAgICBtYXJnaW46IDlweCAwO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpID4gYSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHBhZGRpbmc6IDNweCAyMHB4O1xuICAgICAgICAgICAgY2xlYXI6IGJvdGg7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG5cbiAgICAgICAgICAgICY6Zm9jdXMsICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLm9wZW4gPiAuZHJvcGRvd24tbWVudSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5kcm9wZG93bi1iYWNrZHJvcCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgbGVmdDogMDtcbiAgICB6LWluZGV4OiA5OTA7XG59XG5cbi8vIE92ZXJyaWRlIHN0eWxlIGZvciBzdHViYm9ybiBndW1yb2FkIGJ1dHRvblxuI2FkbWluLW1haW4gLmFkbWluLWJsb2NrIGEuZ3Vtcm9hZC1idXR0b24ge1xuICAgIHBhZGRpbmc6IDAuNXJlbSAxcmVtICFpbXBvcnRhbnQ7XG4gICAgZm9udC1zaXplOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IDQwMCAhaW1wb3J0YW50O1xuICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgLmd1bXJvYWQtYnV0dG9uLWxvZ28ge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG4iLCIvLyBFcnJvciBzcGVjaWZpYyBzdHlsaW5nXG4jZXJyb3Ige1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXHRoZWlnaHQ6IDEwMCU7XG5cdHBhZGRpbmctYm90dG9tOiA2cmVtO1xuXG5cdGgxIHtcblx0XHRmb250LXNpemU6ICRjb3JlLWZvbnQtc2l6ZSArIDQuMHJlbTtcblx0fVxuXG5cdHAge1xuXHRcdG1hcmdpbjogMXJlbSAwO1xuXHR9XG59XG4iLCIjYWRtaW4tbG9naW4ge1xuICAgIEBleHRlbmQgJXZlcnRpY2FsLWFsaWduO1xuICAgIG1heC13aWR0aDogMjRyZW07XG4gICAgbWFyZ2luOiAwIGF1dG87XG5cbiAgICAmLndpZGUge1xuICAgICAgICBtYXgtd2lkdGg6IDUwcmVtO1xuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGhlaWdodDogMTAwcHg7XG5cbiAgICAgICAgICAgICYuY3VzdG9tLWxvZ28gaW1nIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtIHtcbiAgICAgICAgICAgID4gLnBhZGRpbmcge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNyZW0gMnJlbSA4cmVtIDJyZW07XG4gICAgICAgICAgICAgICAgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogNDklO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAuZm9ybS1maWVsZCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAgMXJlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxhYmVsIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcGxhY2Vob2xkZXIge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgLmdyaWQge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybS1sYWJlbCwgLmZvcm0tZGF0YSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgQGluY2x1ZGUgZmxleCgxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5mb3JtLWZpZWxkIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cblxuICAgIC5mb3JtLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuZm9ybS1kYXRhIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG5cbiAgICAud3JhcHBlci1zcGFjZXIge1xuICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xuICAgICAgICBwYWRkaW5nOiAwIDFyZW07XG4gICAgICAgIGgzIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5pbnN0cnVjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZzogMnJlbSAzcmVtIDA7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgICAgIHAge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDA7XG4gICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgaGVpZ2h0OiAyMTZweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgICYudGV4dC1sb2dvIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgICYuY3VzdG9tLWxvZ28ge1xuICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiAxNjBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYuZGVmYXVsdC1sb2dvIHtcbiAgICAgICAgICAgIHN2ZyB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAzMjBweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGg1IHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIGZvcm0ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgLnBhZGRpbmcge1xuICAgICAgICAgICAgcGFkZGluZzogM3JlbSAzcmVtIDZyZW0gM3JlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDJyZW07XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb3JtLWFjdGlvbnMge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAxLjVyZW0gMDtcblxuICAgICAgICAgICAgLmJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidXR0b246Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5hbGVydCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMXJlbSAzcmVtO1xuICAgIH1cbn1cblxuLnR3b2ZhLXNlY3JldC1jb2RlIHtcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4udHdvZmEtd3JhcHBlciB7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xufVxuXG5cbi50d29mYS1zZWNyZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDYwMG1zLCB2aXNpYmlsaXR5IDYwMG1zO1xuXG4gICAgJi5zaG93IHtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbn1cbiIsIkBtaXhpbiBwbGFjZWhvbGRlciB7XG4gICRwbGFjZWhvbGRlcnM6IFwiOi13ZWJraXQtaW5wdXRcIiBcIjotbW96XCIgXCItbW96XCIgXCItbXMtaW5wdXRcIjtcbiAgQGVhY2ggJHBsYWNlaG9sZGVyIGluICRwbGFjZWhvbGRlcnMge1xuICAgICY6I3skcGxhY2Vob2xkZXJ9LXBsYWNlaG9sZGVyIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuIiwiLy8gTW9kZXJuIG1pY3JvIGNsZWFyZml4IHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvIGNvbnRhaW4gZmxvYXRzIHdpdGhvdXQgYWRkaW5nIGFkZGl0aW9uYWwgbWFya3VwLlxuLy9cbi8vIEV4YW1wbGUgdXNhZ2U6XG4vL1xuLy8gICAgLy8gQ29udGFpbiBhbGwgZmxvYXRzIHdpdGhpbiAud3JhcHBlclxuLy8gICAgLndyYXBwZXIge1xuLy8gICAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbi8vICAgICAgLmNvbnRlbnQsXG4vLyAgICAgIC5zaWRlYmFyIHtcbi8vICAgICAgICBmbG9hdCA6IGxlZnQ7XG4vLyAgICAgIH1cbi8vICAgIH1cblxuQG1peGluIGNsZWFyZml4IHtcbiAgJjphZnRlciB7XG4gICAgY29udGVudDpcIlwiO1xuICAgIGRpc3BsYXk6dGFibGU7XG4gICAgY2xlYXI6Ym90aDtcbiAgfVxufVxuXG4vLyBBY2tub3dsZWRnZW1lbnRzXG4vLyBCZWF0ICp0aGF0KiBjbGVhcmZpeDogW1RoaWVycnkgS29ibGVudHpdKGh0dHA6Ly93d3cuY3NzLTEwMS5vcmcvYXJ0aWNsZXMvY2xlYXJmaXgvbGF0ZXN0LW5ldy1jbGVhcmZpeC1zby1mYXIucGhwKVxuIiwiLy8gQ29yZVxuJHdoaXRlOlx0XHRcdFx0XHRcdFx0I2ZmZmZmZjtcbiRibGFjazpcdFx0XHRcdFx0XHRcdCMwMDAwMDA7XG4kbGlnaHQtZ3JheTpcdFx0XHRcdFx0I2RkZGRkZDtcblxuJGNvcmUtYm9yZGVyLWNvbG9yOlx0XHRcdFx0JGxpZ2h0LWdyYXk7XG4kY29yZS1ib3JkZXItY29sb3ItaG92ZXI6IFx0XHRkYXJrZW4oJGNvcmUtYm9yZGVyLWNvbG9yLCAxMCk7XG5cbiRjb2RlLXRleHQ6XHRcdFx0XHRcdFx0I2M3MjU0ZTtcbiRjb2RlLWJnOlx0XHRcdFx0XHRcdCNmOWYyZjQ7XG4kcHJlLXRleHQ6XHRcdFx0XHRcdFx0IzIzNzc5NDtcbiRwcmUtYmc6XHRcdFx0XHRcdFx0I2Y2ZjZmNjtcblxuLy8gU2hhZG93c1xuJGNvcmUtYm94LXNoYWRvdzogXHRcdFx0XHRpbnNldCAwIDFweCAzcHggaHNsYSgwLCAwJSwgMCUsIDAuMDYpO1xuIiwiLypcbiAqICBSZW1vZGFsIC0gdjAuMi4wXG4gKiAgRmxhdCwgcmVzcG9uc2l2ZSwgbGlnaHR3ZWlnaHQsIGVhc3kgY3VzdG9taXphYmxlIG1vZGFsIHdpbmRvdyBwbHVnaW4gd2l0aCBkZWNsYXJhdGl2ZSBzdGF0ZSBub3RhdGlvbiBhbmQgaGFzaCB0cmFja2luZy5cbiAqICBodHRwOi8vdm9ka2FiZWFycy5naXRodWIuaW8vcmVtb2RhbC9cbiAqXG4gKiAgTWFkZSBieSBJbHlhIE1ha2Fyb3ZcbiAqICBVbmRlciBNSVQgTGljZW5zZVxuICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSZW1vZGFsIG5lY2Vzc2FyeSBzdHlsZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEhpZGUgc2Nyb2xsIGJhciAqL1xuXG5odG1sLnJlbW9kYWwtaXMtbG9ja2VkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgdG91Y2gtYWN0aW9uOiBub25lO1xufVxuXG4vKiBBbnRpIEZPVUMgKi9cblxuLnJlbW9kYWwsIFtkYXRhLXJlbW9kYWwtaWRdIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBPdmVybGF5IG5lY2Vzc2FyeSBzdHlsZXMgKi9cblxuLnJlbW9kYWwtb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6IDk5OTk5O1xuICAgIHRvcDogLTUwMDBweDtcbiAgICByaWdodDogLTUwMDBweDtcbiAgICBib3R0b206IC01MDAwcHg7XG4gICAgbGVmdDogLTUwMDBweDtcblxuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIE5lY2Vzc2FyeSBzdHlsZXMgb2YgdGhlIHdyYXBwZXIgKi9cblxuLnJlbW9kYWwtd3JhcHBlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6IDEwMDAwMDtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG5cbiAgICBkaXNwbGF5OiBub25lO1xuICAgIG92ZXJmbG93OiBhdXRvO1xuXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xuXG4gICAgJjphZnRlciB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMC4wNWVtO1xuXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgIH1cbn1cblxuLyogRml4IGlQYWQsIGlQaG9uZSBnbGl0Y2hlcyAqL1xuXG4ucmVtb2RhbC1vdmVybGF5LFxuLnJlbW9kYWwtd3JhcHBlciB7XG4gICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4vKiBNb2RhbCBkaWFsb2cgbmVjZXNzYXJ5IHN0eWxlcyAqL1xuLnJlbW9kYWwge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIHRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG59XG5cbi5yZW1vZGFsLWlzLWluaXRpYWxpemVkIHtcbiAgICAvKiBEaXNhYmxlIEFudGktRk9VQyAqL1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFJlbW9kYWwncyBkZWZhdWx0IG1vYmlsZSBmaXJzdCB0aGVtZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogRGVmYXVsdCB0aGVtZSBzdHlsZXMgZm9yIHRoZSBiYWNrZ3JvdW5kICovXG5cbi5yZW1vZGFsLWJnLnJlbW9kYWwtaXMtb3BlbmluZyxcbi5yZW1vZGFsLWJnLnJlbW9kYWwtaXMtb3BlbmVkIHtcbiAgICBAaW5jbHVkZSBmaWx0ZXIoYmx1cigzcHgpKTtcbn1cblxuLyogRGVmYXVsdCB0aGVtZSBzdHlsZXMgb2YgdGhlIG92ZXJsYXkgKi9cblxuLnJlbW9kYWwtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogcmdiYSg0MywgNDYsIDU2LCAwLjkpO1xufVxuXG4ucmVtb2RhbC1vdmVybGF5LnJlbW9kYWwtaXMtb3BlbmluZyxcbi5yZW1vZGFsLW92ZXJsYXkucmVtb2RhbC1pcy1jbG9zaW5nIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG59XG5cbi5yZW1vZGFsLW92ZXJsYXkucmVtb2RhbC1pcy1vcGVuaW5nIHtcbiAgICBhbmltYXRpb24tbmFtZTogcmVtb2RhbC1vdmVybGF5LW9wZW5pbmcta2V5ZnJhbWVzO1xufVxuXG4ucmVtb2RhbC1vdmVybGF5LnJlbW9kYWwtaXMtY2xvc2luZyB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHJlbW9kYWwtb3ZlcmxheS1jbG9zaW5nLWtleWZyYW1lcztcbn1cblxuLyogRGVmYXVsdCB0aGVtZSBzdHlsZXMgb2YgdGhlIHdyYXBwZXIgKi9cblxuLnJlbW9kYWwtd3JhcHBlciB7XG4gICAgcGFkZGluZzogMTBweCAxMHB4IDA7XG59XG5cbi8qIERlZmF1bHQgdGhlbWUgc3R5bGVzIG9mIHRoZSBtb2RhbCBkaWFsb2cgKi9cblxuLnJlbW9kYWwge1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICBwYWRkaW5nOiAzNXB4O1xuXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbn1cblxuLnJlbW9kYWwucmVtb2RhbC1pcy1vcGVuaW5nLFxuLnJlbW9kYWwucmVtb2RhbC1pcy1jbG9zaW5nIHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246IDAuM3M7XG4gICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7XG59XG5cbi5yZW1vZGFsLnJlbW9kYWwtaXMtb3BlbmluZyB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHJlbW9kYWwtb3BlbmluZy1rZXlmcmFtZXM7XG59XG5cbi5yZW1vZGFsLnJlbW9kYWwtaXMtY2xvc2luZyB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IHJlbW9kYWwtY2xvc2luZy1rZXlmcmFtZXM7XG59XG5cbi8qIFZlcnRpY2FsIGFsaWduIG9mIHRoZSBtb2RhbCBkaWFsb2cgKi9cblxuLnJlbW9kYWwsXG4ucmVtb2RhbC13cmFwcGVyOmFmdGVyIHtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4vKiBDbG9zZSBidXR0b24gKi9cblxuLnJlbW9kYWwtY2xvc2Uge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuXG4gICAgd2lkdGg6IDM1cHg7XG4gICAgaGVpZ2h0OiAzNXB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgYm9yZGVyOiAwO1xuICAgIG91dGxpbmU6IDA7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5yZW1vZGFsLWNsb3NlOmJlZm9yZSB7XG4gICAgZm9udC1mYW1pbHk6IEFyaWFsLCBcIkhlbHZldGljYSBDWVwiLCBcIk5pbWJ1cyBTYW5zIExcIiwgc2Fucy1zZXJpZiAhaW1wb3J0YW50O1xuICAgIGZvbnQtc2l6ZTogMjVweDtcbiAgICBsaW5lLWhlaWdodDogMzVweDtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcblxuICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgd2lkdGg6IDM1cHg7XG5cbiAgICBjb250ZW50OiBcIlxcMDBkN1wiO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogRGlhbG9nIGJ1dHRvbnMgKi9cblxuLyoucmVtb2RhbC1jb25maXJtLFxuLnJlbW9kYWwtY2FuY2VsIHtcbiAgICBmb250OiBpbmhlcml0O1xuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuXG4gICAgbWluLXdpZHRoOiAxMTBweDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMTJweCAwO1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgICBib3JkZXI6IDA7XG4gICAgb3V0bGluZTogMDtcbn1cblxuLnJlbW9kYWwtY29uZmlybSB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZDogIzgxYzc4NDtcbn1cblxuLnJlbW9kYWwtY29uZmlybTpob3Zlcixcbi5yZW1vZGFsLWNvbmZpcm06Zm9jdXMge1xuICAgIGJhY2tncm91bmQ6ICM2NmJiNmE7XG59XG5cbi5yZW1vZGFsLWNhbmNlbCB7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZDogI2U1NzM3Mztcbn1cblxuLnJlbW9kYWwtY2FuY2VsOmhvdmVyLFxuLnJlbW9kYWwtY2FuY2VsOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kOiAjZWY1MzUwO1xufVxuXG4hKiBSZW1vdmUgaW5uZXIgcGFkZGluZyBhbmQgYm9yZGVyIGluIEZpcmVmb3ggNCsgZm9yIHRoZSBidXR0b24gdGFnLiAqIVxuXG4ucmVtb2RhbC1jb25maXJtOjotbW96LWZvY3VzLWlubmVyLFxuLnJlbW9kYWwtY2FuY2VsOjotbW96LWZvY3VzLWlubmVyLFxuLnJlbW9kYWwtY2xvc2U6Oi1tb3otZm9jdXMtaW5uZXIge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICBib3JkZXI6IDA7XG59Ki9cblxuLyogS2V5ZnJhbWVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5Aa2V5ZnJhbWVzIHJlbW9kYWwtb3BlbmluZy1rZXlmcmFtZXMge1xuICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpO1xuXG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lO1xuXG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJlbW9kYWwtY2xvc2luZy1rZXlmcmFtZXMge1xuICAgIGZyb20ge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuXG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KTtcblxuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyByZW1vZGFsLW92ZXJsYXktb3BlbmluZy1rZXlmcmFtZXMge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHJlbW9kYWwtb3ZlcmxheS1jbG9zaW5nLWtleWZyYW1lcyB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG59XG5cbi8qIE1lZGlhIHF1ZXJpZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQxcHgpIHtcbiAgICAucmVtb2RhbCB7XG4gICAgICAgIG1heC13aWR0aDogNzAwcHg7XG4gICAgfVxufVxuXG4vKiBJRThcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5sdC1pZTkgLnJlbW9kYWwtb3ZlcmxheSB7XG4gICAgYmFja2dyb3VuZDogIzJiMmUzODtcbn1cblxuLmx0LWllOSAucmVtb2RhbCB7XG4gICAgd2lkdGg6IDcwMHB4O1xufVxuXG4vKioqKioqKioqIEdSQVYgQ1VTVE9NICoqKioqKioqL1xuXG4ucmVtb2RhbCB7XG4gICAgcGFkZGluZzogMzVweCAwIDA7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBib3gtc2hhZG93OiAwIDEwcHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ucmVtb2RhbCB1bCBsaSB7XG4gICAgbWFyZ2luLWxlZnQ6IDI3cHg7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7XG59IiwiJHRhYi1sYWJlbC1oZWlnaHQ6IDUwcHg7XG5cbi8vIE5ldyBKUyBwb3dlcmVkIHRhYnNcbi5mb3JtLXRhYnMge1xuXG4gICAgLmFkbWluLXBhZ2VzICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAtMXJlbTtcbiAgICB9XG4gICAgLmFkbWluLXBhZ2VzICYge1xuICAgICAgICAudGFicy1uYXYge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxODBweDtcblxuICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLnRhYnMtbmF2IHtcbiAgICAgICAgQGluY2x1ZGUgZGlzcGxheShmbGV4KTtcbiAgICAgICAgcGFkZGluZy10b3A6IDFweDtcblxuICAgICAgICBhIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGZsZXgoMSk7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjVzIGVhc2UsIGJhY2tncm91bmQgMC41cyBlYXNlO1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgbWluLWhlaWdodDogJHRhYi1sYWJlbC1oZWlnaHQ7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcblxuICAgICAgICAgICAgcGFkZGluZzogNHB4O1xuXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgICAgIH1cblxuICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgJi5zdWJ0bGUgLnRhYnMtbmF2IHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLnRhYnMtY29udGVudCB7XG5cbiAgICAgICAgLnRhYl9fY29udGVudCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgcGFkZGluZy10b3A6IDJyZW07XG5cbiAgICAgICAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuc2lkZS10YWJzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcblxuICAgICAgICA+IC50YWJzLW5hdiB7XG4gICAgICAgICAgICB3aWR0aDogMjAlO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogMS41cmVtO1xuXG4gICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgICAgIGZsZXg6IG5vbmU7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBsZWZ0O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgID4gLnRhYnMtY29udGVudCB7XG4gICAgICAgICAgICB3aWR0aDogODAlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5cbi8vIE9sZCB0YWJzIGhlcmUgZm9yIHBvc3Rlcml0eSFcbi8vLnRhYi1iYXIge1xuLy8gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG4vLyAgICBtYXJnaW46IDA7XG4vLyAgICBwYWRkaW5nOiAwO1xuLy8gICAgbGlzdC1zdHlsZTogbm9uZTtcbi8vXG4vLyAgICBsaSB7XG4vL1xuLy8gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuLy8gICAgICAgIGZsb2F0OiBsZWZ0O1xuLy8gICAgICAgIGhlaWdodDogJHRhYi1sYWJlbC1oZWlnaHQ7XG4vL1xuLy8gICAgICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQobW9iaWxlLW9ubHkpIHtcbi8vICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4vLyAgICAgICAgICAgIHNwYW4sIGEge1xuLy8gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4vLyAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4vLyAgICAgICAgICAgIH1cbi8vICAgICAgICB9XG4vLyAgICB9XG4vL1xuLy8gICAgc3BhbiwgYSB7XG4vLyAgICAgICAgQGV4dGVuZCAuZGVmYXVsdC1hbmltYXRpb247XG4vLyAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuLy8gICAgICAgIHBhZGRpbmc6IDAgNHJlbTtcbi8vICAgICAgICBsaW5lLWhlaWdodDogJHRhYi1sYWJlbC1oZWlnaHQ7XG4vLyAgICB9XG4vL31cblxuXG5cblxuIiwiLy8gR3JhdiBFZGl0b3Jcbi5ncmF2LWVkaXRvci1jb250ZW50IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5ncmF2LWVkaXRvciB7XG4gICAgW2RhdGEtZ3Jhdi1lZGl0b3JdIHtcbiAgICAgICAgaGVpZ2h0OiAzMDBweDtcblxuICAgICAgICAmLmNvZGUtbWlycm9yZWQge1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHotaW5kZXg6IC0xO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5Db2RlTWlycm9yIHtcbiAgICAgICAgLkNvZGVNaXJyb3ItdnNjcm9sbGJhciwgLkNvZGVNaXJyb3ItaHNjcm9sbGJhciB7XG4gICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5Db2RlTWlycm9yLXNjcm9sbCB7XG4gICAgICAgIC8vbWFyZ2luLXJpZ2h0OiAtMzZweDtcbiAgICAgICAgcG9zaXRpb246IHN0YXRpYztcblxuICAgICAgICAvLyBoaWRlIG5hdGl2ZSBzY3JvbGxiYXIgYXQgdGhlIGJvdHRvbVxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICB9XG5cbiAgICAuZ3Jhdi1lZGl0b3ItcmVzaXplciB7XG4gICAgICAgIGhlaWdodDogNnB4O1xuICAgICAgICBjdXJzb3I6IHJvdy1yZXNpemU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICAgIC5Db2RlTWlycm9yLXNlbGVjdGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI0Q2RThGRjtcbiAgICB9XG5cbiAgICAuQ29kZU1pcnJvci1ndXR0ZXJzIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5ncmF2LWVkaXRvci1mdWxsc2NyZWVuIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiA0LjJyZW07XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgei1pbmRleDogMztcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuXG4gICAgLmdyYXYtZWRpdG9yLWNvbnRlbnQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBmbGV4OiAxIDAgMDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG5cbiAgICAuZ3Jhdi1lZGl0b3ItY29udGVudCwgLkNvZGVNaXJyb3Itd3JhcCwgLmdyYXYtZWRpdG9yLXByZXZpZXcge1xuICAgICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuZ3Jhdi1lZGl0b3ItdG9vbGJhciB7XG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIH1cblxuICAgIC5ncmF2LWVkaXRvci10b29sYmFyLCAuZ3Jhdi1lZGl0b3ItdG9vbGJhciB1bCBsaTpmaXJzdC1jaGlsZCBhLCAuZ3Jhdi1lZGl0b3ItdG9vbGJhci1mbGlwIHVsIGxpOmxhc3QtY2hpbGQgYSB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuZ3Jhdi1lZGl0b3ItcmVzaXplciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmdyYXYtZWRpdG9yLWNvbnRlbnQuaXMtYWN0aXZlIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICB9XG59XG5cbi5ncmF2LWVkaXRvci10b29sYmFyIHtcbiAgICBAaW5jbHVkZSBhbGlnbi1pdGVtcyhzdHJldGNoKTtcbiAgICBAaW5jbHVkZSBkaXNwbGF5KGZsZXgpO1xuICAgIEBpbmNsdWRlIGZsZXgtZGlyZWN0aW9uKHJvdyk7XG5cbiAgICAuZ3Jhdi1lZGl0b3ItYWN0aW9ucyB7XG4gICAgICAgIEBpbmNsdWRlIGZsZXgoMSk7XG4gICAgfVxuICAgIC5ncmF2LWVkaXRvci1tb2RlcyB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDJweDtcbiAgICAgICAgdWwge1xuICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uZ3Jhdi1lZGl0b3ItdG9vbGJhciB7XG4gICAgQGluY2x1ZGUgY2xlYXJmaXg7XG5cbiAgICB1bCB7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgICAmOmZpcnN0LWNoaWxkIGEge1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMC40cmVtO1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogLTFweDtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXG4gICAgICAgICAgICAmLCAmOmhvdmVyLCAmOmFjdGl2ZSwgJjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kcm9wZG93bi1tZW51IGxpIHtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICB9XG59XG5cbi5ncmF2LWVkaXRvci1oaWRlLXRvb2xiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5ncmF2LWVkaXRvci10b29sYmFyIC5ncmF2LWVkaXRvci1tb2RlcyB7XG4gICAgbGkge1xuICAgICAgICAmOmZpcnN0LWNoaWxkIGEge1xuICAgICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgICAgICAmOmxhc3QtY2hpbGQgYSB7XG4gICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgLypib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBkYXJrZW4oJGNvbnRlbnQtYmcsIDIwJSk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmdyYXYtZWRpdG9yLXRvb2xiYXItZmxpcCB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIHVsIGxpOmxhc3QtY2hpbGQgYSB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gICAgfVxufVxuXG4uZ3Jhdi1lZGl0b3ItY29udGVudCwgLmdyYXYtZWRpdG9yLXByZXZpZXcge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICAgIGN1cnNvcjogdGV4dDtcbiAgICBkaXNwbGF5OiBub25lO1xuXG4gICAgJi5pcy1hY3RpdmUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG59XG5cbi5ncmF2LWVkaXRvci1jb250ZW50IHtcbiAgICAvKiBQQURESU5HICovXG4gICAgLkNvZGVNaXJyb3ItbGluZXMge1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDA7IC8qIFZlcnRpY2FsIHBhZGRpbmcgYXJvdW5kIGNvbnRlbnQgKi9cbiAgICB9XG5cbiAgICAmLmZvbnRzaXplLWxnIHtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuXG4gICAgICAgICYuZm9udGZhbWlseS1zYW5zIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYuZm9udHNpemUtbWQge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG5cbiAgICAgICAgJi5mb250ZmFtaWx5LXNhbnMge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5mb250LXNpemUtc20ge1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG5cbiAgICAgICAgJi5mb250ZmFtaWx5LXNhbnMge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiAuYWRtaW4tYmxvY2sge1xuICAgIC5ncmF2LWVkaXRvci1wcmV2aWV3IHtcbiAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICM1NTUgIWltcG9ydGFudDtcblxuICAgICAgICAvL3Nob3J0Y29kZSB7XG4gICAgICAgIC8vICAgIGJhY2tncm91bmQ6ICNmZmM7XG4gICAgICAgIC8vICAgIGZvbnQtc2l6ZTogOTAlO1xuICAgICAgICAvL31cbiAgICAgICAgLy9cbiAgICAgICAgLy90d2lnIHtcbiAgICAgICAgLy8gICAgYmFja2dyb3VuZDogI2NmYztcbiAgICAgICAgLy8gICAgZm9udC1zaXplOiA5MCU7XG4gICAgICAgIC8vfVxuXG4gICAgICAgIGEge1xuICAgICAgICAgICAgY29sb3I6ICMxYzkwZmIgIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzZweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGgyIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjhweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGgzIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGg0IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGg1IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGg2IHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYge1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIG1hcmdpbjogMC41cmVtIDA7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBjb2xvcjogIzMzMyAhaW1wb3J0YW50O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBwIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICBtYXJnaW46IDAuNXJlbSAwIDFyZW07XG4gICAgICAgIH1cblxuICAgICAgICBwcmUge1xuICAgICAgICAgICAgY29kZSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMxYzkwZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmxvY2txdW90ZSB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNjY2MgIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjAgIWltcG9ydGFudDtcbiAgICAgICAgICAgIHAge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjNDQ0ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBociB7XG4gICAgICAgICAgICBib3JkZXItY29sb3I6ICNlZWUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhYmxlIHtcbiAgICAgICAgICAgIHRkLCB0aCwgdHIge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2VlZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9XG59XG5cblxuLmdyYXYtZWRpdG9yLXRvb2xiYXIge1xuICAgIFtkYXRhLWhpbnRdOmFmdGVyIHtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcCAhaW1wb3J0YW50O1xuICAgICAgICBtYXgtd2lkdGg6IDMwMHB4O1xuICAgICAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIHAge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgfVxufVxuIiwiLyogVGhlIE1JVCBMaWNlbnNlICovXG5cbiRwcmV2aWV3LXdpZHRoOiAyMDBweDtcbiRwcmV2aWV3LWhlaWdodDogMTUwcHg7XG5cbi5kcm9wem9uZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRmb3JtLWJvcmRlci1yYWRpdXM7XG4gICAgbWluLWhlaWdodDogNHJlbTtcblxuICAgICYuZHotY2xpY2thYmxlIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAmLmR6LWRyYWctaG92ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMCwwLDAsMC4xNSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNCk7XG4gICAgfVxuICAgICYuZHotc3RhcnRlZCAuZHotbWVzc2FnZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC5kei1tZXNzYWdlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgLW1zLWZpbHRlcjogbm9uZTtcbiAgICAgICAgZmlsdGVyOiBub25lO1xuICAgIH1cbiAgICAuZHotcHJldmlldyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBtYXJnaW46IDFyZW0gMXJlbSAxLjVyZW0gMXJlbTtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxuICAgICAgICAmLmR6LWZpbGUtcHJldmlldyBbZGF0YS1kei10aHVtYm5haWxdIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAmLmR6LWVycm9yIC5kei1lcnJvci1tYXJrIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5kei1zdWNjZXNzIC5kei1zdWNjZXNzLW1hcmsge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICAuZHotc3VjY2Vzcy1tYXJrLCAuZHotZXJyb3ItbWFyayB7XG4gICAgICAgICAgICBmb250LWZhbWlseTogRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgd2lkdGg6IDIycHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjVweDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICByaWdodDogMnB4O1xuICAgICAgICAgICAgdG9wOiAycHg7XG4gICAgICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgLmR6LXN1Y2Nlc3MtbWFyaywgLmR6LWVycm9yLW1hcmsge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZHotc3VjY2Vzcy1tYXJrIHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxmMDBjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1lcnJvci1tYXJrIHtcbiAgICAgICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxmMTJhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1wcm9ncmVzcyB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0b3A6ICRwcmV2aWV3LWhlaWdodDtcbiAgICAgICAgICAgIGxlZnQ6IDBweDtcbiAgICAgICAgICAgIHJpZ2h0OiAwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDRweDtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG5cbiAgICAgICAgICAgIC5kei11cGxvYWQge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmR6LWVycm9yLW1lc3NhZ2Uge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgICAgICAgICAgei1pbmRleDogNTAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5kei1wcm9jZXNzaW5nIC5kei1wcm9ncmVzcyB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgLmR6LXJlbW92ZSwgLmR6LXVuc2V0LCAuZHotdmlldywgLmR6LWluc2VydCwgLmR6LW1ldGFkYXRhIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgJi5kei1wcm9jZXNzaW5nIHtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIC5kei11bnNldCB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpob3Zlci5kei1lcnJvciAuZHotZXJyb3ItbWVzc2FnZSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vLmR6LXJlbW92ZSwgLmR6LXVuc2V0LCAuZHotaW5zZXJ0IHtcbiAgICAgICAgLy8gICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgLy99XG5cbiAgICAgICAgLmR6LWZpbGVuYW1lIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgNXB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xuICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB9XG5cbiAgICAgICAgLmR6LXJlbW92ZSwgLmR6LXVuc2V0LCAuZHotdmlldywgLmR6LWluc2VydCwgLmR6LW1ldGFkYXRhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB3aWR0aDogMjVweDtcbiAgICAgICAgICAgIGhlaWdodDogMjVweDtcbiAgICAgICAgICAgIHJpZ2h0OiAtMjZweDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMDtcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjOTk5O1xuICAgICAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBGb250QXdlc29tZTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDI1cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAuZHotaW5zZXJ0IHtcbiAgICAgICAgICAgIHRvcDogLTFweDtcbiAgICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxmMDU1JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei12aWV3IHtcbiAgICAgICAgICAgIHRvcDogMjRweDtcbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdcXGYwNmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmR6LXJlbW92ZSB7XG4gICAgICAgICAgICB0b3A6IDcycHg7XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxmMWY4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei11bnNldCB7XG4gICAgICAgICAgICB0b3A6IDk2cHg7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4O1xuICAgICAgICAgICAgJjphZnRlciB7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ1xcZjAwZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC5kei1tZXRhZGF0YSB7XG4gICAgICAgICAgICB0b3A6IDQ5cHg7XG4gICAgICAgICAgICAmOmFmdGVyIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnXFxmMDVhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYuZHotbm8tZWRpdG9yIHtcbiAgICAgICAgICAgIC5kei12aWV3IHtcbiAgICAgICAgICAgICAgICB0b3A6IC0xcHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kei1yZW1vdmUge1xuICAgICAgICAgICAgICAgIHRvcDogMjRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kei11bnNldCB7XG4gICAgICAgICAgICAgICAgdG9wOiA3MnB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJjpob3ZlciAuZHotcmVtb3ZlLCAmOmhvdmVyIC5kei11bnNldCB7XG4gICAgICAgICAgICAmLmZpbGUtdGh1bWJuYWlsLXJlbW92ZSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICY6bm90KC5maWxlLXRodW1ibmFpbC1yZW1vdmUpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYuZHotcHJvY2Vzc2luZyB7XG4gICAgICAgICAgICAuZHotZGV0YWlscyB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5kei1kZXRhaWxzIHtcbiAgICAgICAgICAgIHdpZHRoOiAkcHJldmlldy13aWR0aDtcbiAgICAgICAgICAgIGhlaWdodDogJHByZXZpZXctaGVpZ2h0O1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG5cbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vaW1hZ2VzL3RyYW5zcGFyZW50LnBuZycpO1xuXG4gICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiAkcHJldmlldy13aWR0aDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICRwcmV2aWV3LWhlaWdodDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmR6LXNpemUge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICBib3R0b206IC0yOHB4O1xuICAgICAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjhweDtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICB9XG5cblxuICAgICYuZHotY2xpY2thYmxlIHtcbiAgICAgICAgLmR6LW1lc3NhZ2UsIC5kei1tZXNzYWdlIHNwYW4ge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgICAgICAgbWFyZ2luOiAxcmVtIDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgKiB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG59XG4iLCIudG9hc3QtdGl0bGUge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLnRvYXN0LW1lc3NhZ2Uge1xuICAgIC1tcy13b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xufVxuLnRvYXN0LW1lc3NhZ2UgYSxcbi50b2FzdC1tZXNzYWdlIGxhYmVsIHtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbn1cbi50b2FzdC1tZXNzYWdlIGE6aG92ZXIge1xuICAgIGNvbG9yOiAjY2NjY2NjO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbi50b2FzdC1jbG9zZS1idXR0b24ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICByaWdodDogLTAuM2VtO1xuICAgIHRvcDogLTAuM2VtO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBmb250LXNpemU6IDIwcHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgY29sb3I6ICNmZmZmZmY7XG4gICAgLXdlYmtpdC10ZXh0LXNoYWRvdzogMCAxcHggMCAjZmZmZmZmO1xuICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNmZmZmZmY7XG4gICAgb3BhY2l0eTogMC44O1xuICAgIC1tcy1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTgwKTtcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9ODApO1xufVxuLnRvYXN0LWNsb3NlLWJ1dHRvbjpob3Zlcixcbi50b2FzdC1jbG9zZS1idXR0b246Zm9jdXMge1xuICAgIGNvbG9yOiAjMDAwMDAwO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIC1tcy1maWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShPcGFjaXR5PTQwKTtcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NDApO1xufVxuLypBZGRpdGlvbmFsIHByb3BlcnRpZXMgZm9yIGJ1dHRvbiB2ZXJzaW9uXG4gaU9TIHJlcXVpcmVzIHRoZSBidXR0b24gZWxlbWVudCBpbnN0ZWFkIG9mIGFuIGFuY2hvciB0YWcuXG4gSWYgeW91IHdhbnQgdGhlIGFuY2hvciB2ZXJzaW9uLCBpdCByZXF1aXJlcyBgaHJlZj1cIiNcImAuKi9cbmJ1dHRvbi50b2FzdC1jbG9zZS1idXR0b24ge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMDtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG59XG4udG9hc3QtdG9wLWNlbnRlciB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuLnRvYXN0LWJvdHRvbS1jZW50ZXIge1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cbi50b2FzdC10b3AtZnVsbC13aWR0aCB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuLnRvYXN0LWJvdHRvbS1mdWxsLXdpZHRoIHtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG59XG4udG9hc3QtdG9wLWxlZnQge1xuICAgIHRvcDogMTJweDtcbiAgICBsZWZ0OiAxMnB4O1xufVxuLnRvYXN0LXRvcC1yaWdodCB7XG4gICAgdG9wOiA1cmVtO1xuICAgIHJpZ2h0OiAxLjVyZW07XG59XG4udG9hc3QtYm90dG9tLXJpZ2h0IHtcbiAgICByaWdodDogMTJweDtcbiAgICBib3R0b206IDEycHg7XG59XG4udG9hc3QtYm90dG9tLWxlZnQge1xuICAgIGJvdHRvbTogMTJweDtcbiAgICBsZWZ0OiAxMnB4O1xufVxuI3RvYXN0LWNvbnRhaW5lciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHotaW5kZXg6IDk5OTk5OTtcbiAgICAvKm92ZXJyaWRlcyovXG5cbn1cbiN0b2FzdC1jb250YWluZXIgKiB7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuI3RvYXN0LWNvbnRhaW5lciA+IGRpdiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luOiAwIDAgNnB4O1xuICAgIHBhZGRpbmc6IDE1cHggMTVweCAxNXB4IDUwcHg7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxNXB4IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIG9wYWNpdHk6IDAuOTtcbiAgICAtbXMtZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT05MCk7XG4gICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTkwKTtcbn1cbiN0b2FzdC1jb250YWluZXIgPiA6aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgLW1zLWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9MTAwKTtcbiAgICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MTAwKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG4jdG9hc3QtY29udGFpbmVyID4gLnRvYXN0LWluZm8ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc01BQUE3REFjZHZxR1FBQUFHd1NVUkJWRWhMdFphOVNnTkJFTWM5c1V4eFJjb1VLU3pTV0loWHBGTWhoWVdGaGFCZzR5UFlpV0NYWnhCTEVSc0xSUzNFUWtFZndDS2RqV0pBd1NLQ2dvS0NjdWR2NE81WUxydDdFemdYaGlVMy80K2IyY2ttd1ZqSlNwS2tRNndBaTRnd2hUK3ozd1JCY0V6MHlqU3NlVVRyY1J5ZnNIc1htRDBBbWJIT0M5SWk4VkltbnVYQlBnbEhwUTV3d1NWTTdzTm5URzdaYTRKd0RkQ2p4eUFpSDNueUEybXRhVEp1ZmlEWjVkQ2FxbEl0SUxoMU5IYXRmTjVza3ZqeDlaMzhtNjlDZ3p1WG1aZ1ZyUElHRTc2M0p4OXFLc1JveldZdzZ4T0hkRVIrbm4yS2tPK0JiK1VWNUNCTjZXQzZRdEJnYlJWb3pyYWhBYm1tNkh0VXNndFBDMTl0RmR4WFpZQk9ma2JtRkoxVmFIQTFWQUhqZDBwcDcwb1RaenZSK0VWcngyWWdmZHNxNmV1NTVCSFlSOGhsY2tpK24ra0VSVUZHOEJyQTBCd2plQXYyTThXTFFCdGN5K1NENmZOc21uQjNBbEJMcmdUdFZXMWMyUU40YlZXTEFUYUlTNjBKMkR1NXkxVGlKZ2pTQnZGVlpnVG13Q1UrZEFaRm9QeEdFRXM4bnlIQzlCd2UyR3ZFSnYyV1haYjB2amR5RlQ0Q3hrM2Uva0lxbE9Hb1ZMd3dQZXZwWUhUKzAwVCtoV3dYRGY0QUpBT1VxV2NEaGJ3QUFBQUFTVVZPUks1Q1lJST1cIikgIWltcG9ydGFudDtcbn1cbiN0b2FzdC1jb250YWluZXIgPiAudG9hc3QtZXJyb3Ige1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc01BQUE3REFjZHZxR1FBQUFIT1NVUkJWRWhMclphL1NnTkJFTVp6aDBXS0NDbFNDS2FJWU9FRCtBQUtlUVFMRzhIV3p0TENJbUJyWWFkZ0lkWStnSUtOWWtCRlN3dTdDQW9xQ2dra29HQkkvRTI4UGRiTFptZURMZ3paemN4ODMveloyU1NYQzFqOWZyK0kxSHE5M2cyeXhINGl3TTF2a29CV0FkeENtcHpUeGZrTjJSY3laTmFIRklrU28xMCs4a2d4a1hJVVJWNUhHeFRtRnVjNzVCMlJmUWtweEhHOGFBZ2FBRmEwdEFIcVlGZlE3SXdlMnloT0RrOCtKNEM3eUFvUlRXSTN3LzRrbEdSZ1I0bE83UnBuOStndk15V3ArdXhGaDgrSCtBUmxnTjFuSnVKdVFBWXZOa0Vud0dGY2sxOEVyNHEzZWdFYy9vTyttaExkS2dSeWhkTkZpYWNDMHJsT0NiaE5WejRIOUZuQVlnREJ2VTNRSWlvWmxKRkxKdHNvSFlSRGZpWm9VeUl4cUN0UnBWbEFOcTBFVTRkQXBqcnRnZXpQRmFkNVMxOVdnamtjMGhOVm51RjRIalZBNkM3UXJTSWJ5bEIrb1plM2FIZ0JzcWxOcUtZSDQ4alh5SktNdUFiaXlWSjhLemFCM2VSYzBwZzlWd1E0bmlGcnlJNjhxaU9pM0Fiandkc2ZuQXRrMGJDalRMSktyNm1yRDlnOGlxL1MvQjgxaGd1T01sUVRuVnlHNDB3QWNqbm1nc0NORVNEcmptZTd3ZmZ0UDRQN1NQNE4zQ0paZHZ6b055R3EyYy9IV09YSkdzdlZnK1JBL2syTUMvd042STJZQTJQdDhHa0FBQUFBU1VWT1JLNUNZSUk9XCIpICFpbXBvcnRhbnQ7XG59XG4jdG9hc3QtY29udGFpbmVyID4gLnRvYXN0LXN1Y2Nlc3Mge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc01BQUE3REFjZHZxR1FBQUFEc1NVUkJWRWhMWTJBWUJmUU1nZi8vLzNQOCsvZXZBSWd2QS9Gc0lGK0JhdllERFdNQkdyb2FTTU1CaUU4VkM3QVpEcklGYU1GbmlpM0FaVGpVZ3NVVVdVREE4T2RBSDZpUWJRRWh3NEh5R3NQRWNLQlhCSUM0QVJoZXg0RzRCc2ptd2VVMXNvSUZhR2cvV3RvRlpSSVpkRXZJTWh4a0NDalhJVnNBVFY2Z0ZHQUNzNFJzdzBFR2dJSUgzUUpZSmdIU0FSUVpEcldBQitqYXd6Z3MrUTJVTzQ5RDdqblJTUkdvRUZSSUxjZG1FTVdHSTBjbTBKSjJRcFlBMVJEdmNtekpFV2hBQmhEL3BxckwwUzBDV3VBQktnblJraTlsTHNlUzdnMkFscXdIV1FTS0g0b0tMcklMcFJHaEVRQ3cyTGlSVUlhNGx3QUFBQUJKUlU1RXJrSmdnZz09XCIpICFpbXBvcnRhbnQ7XG59XG4jdG9hc3QtY29udGFpbmVyID4gLnRvYXN0LXdhcm5pbmcge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQmdBQUFBWUNBWUFBQURnZHozNEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc01BQUE3REFjZHZxR1FBQUFHWVNVUkJWRWhMNVpTdlRzTlFGTWJYWkdJQ01ZR1ltSmhBUUlKQUlDWVFQQUFDaVNEQjhBaUlDUVFKVDRDcVFFd2dKdllBU0FRQ2laaVltSmhBSUJBVENBUkp5KzlyVHNsZGQ4c0t1MU0wK2RMYjA1N3Y2L2xicS8yckswbVMvVFJOajljV05BS1BZSUpJSTdnSXhDY1E1MWN2cUlEK0dJRVg4QVNHNEIxYks1Z0laRmVRZm9KZEVYT2ZnWDRRQVFnN2tIMkE2NXlRODdseXhiMjdzZ2drQXpBdUZoYmJnMUsya2dDa0IxYlZ3eUlSOW0yTDdQUlBJaERVSVhnR3R5S3c1NzV5ejNsVE5zNlg0SlhualYrTEtNL20zTXlkblRidE9LSWp0ejZWaENCcTR2U20zbmNkckQybGswVmdVWFNWS2pWREpYSnppalcxUlFkc1U3Rjc3SGU4dTY4a29OWlR6OE96NXlHYTZKM0gzbFoweFlnWEJLMlF5bWxXV0ErUlduWWhza0xCdjJ2bUUraEJNQ3RiQTdLWDVkcld5UlQvMkpzcVoySXZmQjlZNGJXRE5NRmJKUkZtQzlFNzRTb1MwQ3F1bHdqa0MwKzVicGNWMUNaOE5NZWo0cGp5MFUrZG9EUXNHeW8xaHpWSnR0SWpoUTdHbkJ0UkZOMVVhclVsSDhGM3hpY3QrSFkwN3JFem9VR1BsV2NqUkZScjQvZ0NoWmdjM1pMMmQ4b0FBQUFBU1VWT1JLNUNZSUk9XCIpICFpbXBvcnRhbnQ7XG59XG4jdG9hc3QtY29udGFpbmVyLnRvYXN0LXRvcC1jZW50ZXIgPiBkaXYsXG4jdG9hc3QtY29udGFpbmVyLnRvYXN0LWJvdHRvbS1jZW50ZXIgPiBkaXYge1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBtYXJnaW46IGF1dG87XG59XG4jdG9hc3QtY29udGFpbmVyLnRvYXN0LXRvcC1mdWxsLXdpZHRoID4gZGl2LFxuI3RvYXN0LWNvbnRhaW5lci50b2FzdC1ib3R0b20tZnVsbC13aWR0aCA+IGRpdiB7XG4gICAgd2lkdGg6IDk2JTtcbiAgICBtYXJnaW46IGF1dG87XG59XG5cbi50b2FzdC13YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjg5NDA2O1xuXG4gICAgLmJ1dHRvbiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbigjZjg5NDA2LCAxMCk7XG4gICAgICAgIEBpbmNsdWRlIGJ1dHRvbi1jb2xvcihkYXJrZW4oI2Y4OTQwNiwgMjApKTtcbiAgICB9XG59XG4udG9hc3QtcHJvZ3Jlc3Mge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBoZWlnaHQ6IDRweDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICAtbXMtZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT00MCk7XG4gICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTQwKTtcbn1cbi8qUmVzcG9uc2l2ZSBEZXNpZ24qL1xuQG1lZGlhIGFsbCBhbmQgKG1heC13aWR0aDogMjQwcHgpIHtcbiAgICAjdG9hc3QtY29udGFpbmVyID4gZGl2IHtcbiAgICAgICAgcGFkZGluZzogOHB4IDhweCA4cHggNTBweDtcbiAgICAgICAgd2lkdGg6IDExZW07XG4gICAgfVxuICAgICN0b2FzdC1jb250YWluZXIgLnRvYXN0LWNsb3NlLWJ1dHRvbiB7XG4gICAgICAgIHJpZ2h0OiAtMC4yZW07XG4gICAgICAgIHRvcDogLTAuMmVtO1xuICAgIH1cbn1cbkBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6IDI0MXB4KSBhbmQgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgICAjdG9hc3QtY29udGFpbmVyID4gZGl2IHtcbiAgICAgICAgcGFkZGluZzogOHB4IDhweCA4cHggNTBweDtcbiAgICAgICAgd2lkdGg6IDE4ZW07XG4gICAgfVxuICAgICN0b2FzdC1jb250YWluZXIgLnRvYXN0LWNsb3NlLWJ1dHRvbiB7XG4gICAgICAgIHJpZ2h0OiAtMC4yZW07XG4gICAgICAgIHRvcDogLTAuMmVtO1xuICAgIH1cbn1cbkBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6IDQ4MXB4KSBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAjdG9hc3QtY29udGFpbmVyID4gZGl2IHtcbiAgICAgICAgcGFkZGluZzogMTVweCAxNXB4IDE1cHggNTBweDtcbiAgICAgICAgd2lkdGg6IDI1ZW07XG4gICAgfVxufVxuIiwiLy8gQWRkIHBlcmNlbnRhZ2Ugb2Ygd2hpdGUgdG8gYSBjb2xvclxuQGZ1bmN0aW9uIHRpbnQoJGNvbG9yLCAkcGVyY2VudCl7XG4gIEByZXR1cm4gbWl4KHdoaXRlLCAkY29sb3IsICRwZXJjZW50KTtcbn1cblxuLy8gQWRkIHBlcmNlbnRhZ2Ugb2YgYmxhY2sgdG8gYSBjb2xvclxuQGZ1bmN0aW9uIHNoYWRlKCRjb2xvciwgJHBlcmNlbnQpe1xuICBAcmV0dXJuIG1peChibGFjaywgJGNvbG9yLCAkcGVyY2VudCk7XG59XG4iLCIjcGhwaW5mbyB7XG4gICAgaW1nIHsgZGlzcGxheTogbm9uZTt9XG5cbiAgICB0YWJsZSB7XG4gICAgICAgIG1hcmdpbjogMXJlbSAwIDA7XG4gICAgfVxuICAgIFxuICAgIHRyIHtcbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRkIHtcbiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkO1xuXHQgICAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAgICAgICBoMSB7XG4gICAgICAgICAgICBtYXJnaW46IDByZW0gKC0gJHBhZGRpbmctZGVmYXVsdCkgMHJlbSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaHIge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIH1cblxuICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAyLjNyZW07XG4gICAgfVxuXG4gICAgaDIge1xuICAgICAgICBmb250LXNpemU6IDEuN3JlbTtcbiAgICAgICAgbWFyZ2luOiAzcmVtICgkcGFkZGluZy1kZWZhdWx0KSAwcmVtICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuIiwiJGJ1dHRvbi1zaXplIDogMnJlbTtcbiR0cmFuc2l0aW9uOiAuM3M7IC8vIGluY3JlYXNlIHRoaXMgdG8gc2VlIHRoZSB0cmFuc2Zvcm1hdGlvbnMgaW4gc2xvdy1tb3Rpb25cblxuQG1peGluIGxpbmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogJGJ1dHRvbi1zaXplO1xuICAgIGhlaWdodDogJGJ1dHRvbi1zaXplIC8gNztcbiAgICBib3JkZXItcmFkaXVzOiAkYnV0dG9uLXNpemUgLyAxNDtcbiAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbjtcbn1cblxuLmxpbmVzLWJ1dHRvbiB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6ICRidXR0b24tc2l6ZSAvIDQgJGJ1dHRvbi1zaXplIC8gNCAkYnV0dG9uLXNpemUgLyAyO1xuICAgIHRyYW5zaXRpb246IC4zcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJ1dHRvbi1zaXplIC8gNTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTAwMDAyO1xuICAgIHRvcDogMTBweDtcblxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuXG4gICAgJjphY3RpdmUge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4xKTtcbiAgICB9XG59XG5cbi5saW5lcyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIEBpbmNsdWRlIGxpbmU7XG5cbiAgICAvKmNyZWF0ZSB0aGUgdXBwZXIgYW5kIGxvd2VyIGxpbmVzIGFzIHBzZXVkby1lbGVtZW50cyBvZiB0aGUgbWlkZGxlIGxpbmUqL1xuICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcblxuICAgICAgICBAaW5jbHVkZSBsaW5lO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6MDtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46ICRidXR0b24tc2l6ZSAvIDE0IGNlbnRlcjtcbiAgICB9XG4gICAgJjpiZWZvcmUgeyB0b3A6ICRidXR0b24tc2l6ZSAvIDQ7IH1cbiAgICAmOmFmdGVyIHsgdG9wOiAtJGJ1dHRvbi1zaXplIC8gNDsgfVxufVxuXG4uc2lkZWJhci1tb2JpbGUtb3BlbiAubGluZXMtYnV0dG9uLnggLmxpbmVzIHtcblxuICAgIC8qaGlkZSB0aGUgbWlkZGxlIGxpbmUqL1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cbiAgICAvKm92ZXJsYXkgdGhlIGxpbmVzIGJ5IHNldHRpbmcgYm90aCB0aGVpciB0b3AgdmFsdWVzIHRvIDAqL1xuICAgICY6YmVmb3JlLCAmOmFmdGVye1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgNTAlO1xuICAgICAgICB0b3A6MDtcbiAgICAgICAgd2lkdGg6ICRidXR0b24tc2l6ZTtcbiAgICB9XG5cbiAgICAvLyByb3RhdGUgdGhlIGxpbmVzIHRvIGZvcm0gdGhlIHggc2hhcGVcbiAgICAmOmJlZm9yZXtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUzZCgwLCAwLCAxLCA0NWRlZyk7XG4gICAgfVxuICAgICY6YWZ0ZXJ7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgLTQ1ZGVnKTtcbiAgICB9XG59XG4iLCIuc2luZ2xlLW5vdGlmaWNhdGlvbi5hbGVydCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uaGlkZS1ub3RpZmljYXRpb24ge1xuXHRyaWdodDogMXJlbTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbi5hbGVydC5yYXcge1xuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcbn1cblxuI2FkbWluLWRhc2hib2FyZCB7XG4gICAgI25vdGlmaWNhdGlvbnMge1xuICAgICAgICAuYWRtaW4tYmxvY2sge1xuICAgICAgICAgICAgcGFkZGluZzogMXJlbSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGkge1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAtbXMtdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmRhc2hib2FyZC1ub3RpZmljYXRpb25zLWNvbnRhaW5lciwgLnBsdWdpbnMtbm90aWZpY2F0aW9ucy1jb250YWluZXIsIC50aGVtZXMtbm90aWZpY2F0aW9ucy1jb250YWluZXIge1xuXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcblxuICAgIC5yYXcge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgLmhpZGUtbm90aWZpY2F0aW9uIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogNXB4O1xuICAgICAgICAgICAgcmlnaHQ6IDVweDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICAgICAgICBjb2xvcjogIzMzMztcbiAgICAgICAgICAgIHRleHQtc2hhZG93OlxuICAgICAgICAgICAgICAgIC0xcHggLTFweCAwICNmZmYsXG4gICAgICAgICAgICAgICAgMXB4IC0xcHggMCAjZmZmLFxuICAgICAgICAgICAgICAgIC0xcHggMXB4IDAgI2ZmZixcbiAgICAgICAgICAgICAgICAxcHggMXB4IDAgI2ZmZjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICY6ZW1wdHkge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuXG4jYWRtaW4tbWFpbiB7XG4gICAgLmNvbnRlbnQtcGFkZGluZyB7XG5cbiAgICAgICAgZGl2W2NsYXNzKj1ub3RpZmljYXRpb25zLWNvbnRhaW5lcl0gLmFsZXJ0IHtcbiAgICAgICAgICAgIGE6aG92ZXIge1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhLmJ1dHRvbiwgc3Bhbi5idXR0b24sIGJ1dHRvbi5idXR0b24ge1xuICAgICAgICAgICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG5cblxuICAgICAgICAudG9wLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyIHtcblxuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcblxuICAgICAgICAgICAgLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBhIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludChtb2JpbGUtb25seSkge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI25vdGlmaWNhdGlvbnMge1xuICAgICAgICB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgIHNwYW4ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICByaWdodDogMnJlbTtcbiAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAuYmFkZ2UuYWxlcnQge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNztcblxuICAgICAgICAgICAgaSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAzcHg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuXG4iLCIvLyBDaGFuZ2Vsb2dcbmJvZHkgLmNoYW5nZWxvZyB7XG5cbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgLnJlbW9kYWwtY2xvc2Uge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIGNvZGUge1xuICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICB9XG5cbiAgICBoMSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC1zaXplOiAycmVtO1xuICAgICAgICBtYXJnaW46IDFyZW0gMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0xcHg7XG4gICAgfVxuXG4gICAgLnJlbW9kYWwge1xuXG4gICAgfVxuXG4gICAgLnJlbW9kYWwtY29uZmlybSB7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICB9XG5cbiAgICAuY2hhbmdlbG9nLW92ZXJmbG93IHtcbiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIHBhZGRpbmc6IDFlbTtcbiAgICB9XG5cbiAgICBtYXJnaW4tdG9wOiAtMnJlbTtcblxuICAgIGgzLCBoNCB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgfVxuXG4gICAgaDMge1xuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICAgICAgbWFyZ2luOiAxLjNyZW0gMCAwIDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIH1cblxuICAgIGgzICsgaDQge1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIG1hcmdpbjogMCAwIDFyZW0gMDtcbiAgICAgICAgY29sb3I6ICM2NjY7XG4gICAgfVxuXG4gICAgb2wge1xuICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDAgMCAzcmVtIDA7XG5cbiAgICAgICAgYVtocmVmPScjbmV3J10ge1xuICAgICAgICAgICAgJiArIHVsID4gbGkge1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIwN0RFNTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ05ldyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFbaHJlZj0nI2ltcHJvdmVkJ10ge1xuICAgICAgICAgICAgJiArIHVsID4gbGkge1xuICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZCQ0EwNDtcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdJbXByb3ZlZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFbaHJlZj0nI2J1Z2ZpeCddIHtcbiAgICAgICAgICAgICYgKyB1bCA+IGxpIHtcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNGQzI5Mjk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdCdWdmaXgnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVsIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2cmVtO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuXG4gICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC02cmVtO1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICB3aWR0aDogNXJlbTtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAycHggMDtcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiIsIi8qIE1lZGlhICovXG4kZGFyay10ZXh0OiAjMzMzO1xuXG4ucGFnZXMtbGlzdC1jb250YWluZXIge1xuICAgIHdpZHRoOiAzMCU7XG4gICAgZmxleDogbm9uZSFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMCFpbXBvcnRhbnQ7XG5cbiAgICAucGFnZXMtbGlzdCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXG4gICAgICAgICYuZGVwdGgtMCAucm93IHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZGVwdGgtMSAucm93IHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5wYWdlLWl0ZW0ge1xuICAgICAgICAgICAgLnBhZ2UtbGluayB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnJvdy5hY3RpdmUge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgjMDBhNmNmLCAwLjEpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4ubWVkaWEtcGFnZS1kcm9wem9uZSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLm1lZGlhLWNvbnRhaW5lciB7XG4gICAgJi5zaXplLTItMyB7XG4gICAgICAgIGZsZXg6IG5vbmUhaW1wb3J0YW50O1xuICAgICAgICB3aWR0aDogNzAlO1xuICAgIH1cblxuXG4gICAgLmZpbHRlcnMge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMzBweDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG5cblxuICAgICAgICAuZmlsdGVyLXdyYXBwZXIge1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG5cbiAgICAgICAgICAgICY6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC0yNXB4O1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMHB4IG5vbmU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwNzhcIjtcbiAgICAgICAgICAgICAgICBmb250LWZhbWlseTogXCJGb250QXdlc29tZVwiO1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgIHRvcDogNTAlO1xuICAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjOUJBMkE2O1xuICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmZpbHRlciB7XG4gICAgICAgICAgICBvcHRpb24ge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5maWxlcyB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzBweDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcblxuICAgIH1cblxuICAgIC5hZG1pbi1tZWRpYS10aXRsZSB7XG5cbiAgICAgICAgY29sb3I6ICRkYXJrLXRleHQ7XG4gICAgICAgIG1hcmdpbjogMHB4O1xuICAgICAgICBmb250LXNpemU6IC44cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuXG4gICAgfVxuXG4gICAgLmNhcmQtaXRlbSB7XG4gICAgICAgIHdpZHRoOiA0OSU7XG5cbiAgICAgICAgJi5lbXB0eS1zcGFjZSB7XG5cbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC40KTtcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xKSAhaW1wb3J0YW50O1xuXG4gICAgICAgICAgICBjb2xvcjogcmdiYSgwLDAsMCwwLjMpO1xuXG4gICAgICAgICAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICAgICAgICAgICAgdG9wOiAyMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwcmVtICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB3aWR0aDogNTAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0byAhaW1wb3J0YW50O1xuICAgICAgICAgICAgZm9udC1zaXplOiAycmVtO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDhyZW07XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG5cblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLm1lZGlhLWRldGFpbHMge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGltZyB7XG4gICAgICAgICAgICB3aWR0aDogNTAlO1xuICAgICAgICB9XG4gICAgICAgIGgyIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS44cmVtO1xuICAgICAgICB9XG4gICAgICAgIGg1IHtcbiAgICAgICAgICAgIGNvbG9yOiAjOUJBMkE2O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIGgxIHtcbiAgICAgICAgcGFkZGluZzogMCAycmVtIDAuNXJlbSFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgLmFkbWluLWZvcm0td3JhcHBlciB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICB9XG59XG5cbi5zcGlubmluZy13aGVlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBNZWRpYSBpbi1wYWdlIG1vZGFsICovXG5cbi5tZWRpYS1jb250YWluZXIuaW4tbW9kYWwge1xuICAgIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAzMHB4IWltcG9ydGFudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMHB4O1xuICAgIH1cblxuICAgIGEge1xuICAgICAgICBjb2xvcjogIzMzMztcbiAgICB9XG5cbiAgICAucGFnZXMtbGlzdCBsaSB7XG4gICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgfVxufVxuXG4vL01lZGlhcGlja2VyIGZpZWxkXG4ucmVtb2RhbC5yZW1vZGFsLW1lZGlhcGlja2VyIHtcbiAgbWF4LXdpZHRoOiA3MHZ3O1xuICBwYWRkaW5nOiAwO1xufVxuXG4ubWVkaWEtY29udGFpbmVyIHtcbiAgaGVpZ2h0OiA3MHZoO1xuXG5cbiAgLmdyaWQge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgfVxuXG5cbiAgJi5pbi1tb2RhbCB7XG5cbiAgICAgIC5nbS1zY3JvbGxiYXIge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtcblxuICAgICAgICAgIC50aHVtYiB7XG4gICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMC4yKSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAmOmhvdmVyLCAmLmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuMykgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGg1IHtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcbiAgICBwYWRkaW5nOiAwLjVyZW0gMTVweDtcbiAgICBtYXJnaW46IDA7XG4gICAgaGVpZ2h0OiA1NXB4O1xuICB9XG5cbiAgLmZpbHRlci13cmFwcGVyIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgfVxuXG4gIC5maWx0ZXItZGF0ZSB7XG4gICAgd2lkdGg6IDE1MHB4O1xuXG4gIH1cblxuICAuZmlsdGVyLXR5cGUge1xuICAgIHdpZHRoOiAxMDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7XG4gIH1cblxuICAucGFnZXMtbGlzdC1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC5wYWdlcy1saXN0IHtcbiAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICAgICAgZm9udC1zaXplOiA5MCU7XG5cbiAgICAgIC5yb3cge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xuICAgICAgfVxuXG4gICAgICBAZm9yICRpIGZyb20gMSB0byAxMCB7XG4gICAgICAgIC5kZXB0aC0jeyRpfSAucm93IHtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDFyZW0gKiAoJGkgKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICAubWVkaWFwaWNrZXItc2Nyb2xsIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogNTVweDtcbiAgICAgIGJvdHRvbTogM3B4O1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgIH1cbiAgfVxuXG4gIC50aHVtYnMtbGlzdC1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC5tZWRpYS1yYW5nZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDE1cHg7XG4gICAgICAgIGJvdHRvbTogNXB4O1xuICAgIH1cblxuICAgIC5tZWRpYXBpY2tlci1zY3JvbGwge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiA1NXB4O1xuICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgaGVpZ2h0OiBpbmhlcml0O1xuICAgIH1cblxuICAgICAgLmdtLXNjcm9sbGJhci4taG9yaXpvbnRhbCB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cblxuICB9XG5cblxuICAjYWRtaW4tbWVkaWEge1xuXG4gICAgcGFkZGluZzogMTVweDtcbiAgICBoZWlnaHQ6IDEwMCU7XG5cbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgLmNhcmQtaXRlbSB7XG4gICAgICB3aWR0aDogMTAwcHg7XG4gICAgICBwYWRkaW5nOiAycHg7XG4gICAgICBtYXJnaW46IDAgNXB4IDVweCAwO1xuICAgICAgYm9yZGVyOiAwO1xuXG4gICAgICBpbWcge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuYWRtaW4tbWVkaWEtZGV0YWlscyB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgIC5hZG1pbi1tZWRpYS10aXRsZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgZm9udC1zaXplOiAxMHB4O1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBsaW5lLWhlaWdodDogMjtcbiAgICAgICAgdGV4dC1pbmRlbnQ6IDJweDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuW2RhdGEtcmVtb2RhbC1pZD1cIm1ldGFkYXRhXCJdIHtcbiAgICBoMSA+ICoge1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgICBoMSBzdHJvbmcge1xuICAgICAgICBAaW5jbHVkZSBlbGxpcHNpcyg3NSUpO1xuICAgIH1cbiAgICAubWV0YWRhdGEtcHJldmlldyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG1hcmdpbjogMCAzcmVtO1xuXG4gICAgICAgIC5tZXRhLXByZXZpZXcge1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5tZXRhLWNvbnRlbnQgdWwge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQG1peGluIGVsbGlwc2lzKCR3aWR0aDogMTAwJSkge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1heC13aWR0aDogJHdpZHRoO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbiIsIi8qXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQXJuYXBvdSBqcUNyb24gcGFja2FnZS5cbiAqXG4gKiAoYykgQXJuYXVkIEJ1YXRoaWVyIDxhcm5hdWRAYXJuYXBvdS5uZXQ+XG4gKlxuICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0VcbiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLlxuICovXG5cbi5qcUNyb24tc2VsZWN0b3Ige1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5qcUNyb24tY3Jvc3MsXG4uanFDcm9uLXNlbGVjdG9yLXRpdGxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIG1hcmdpbjogMCAwLjJlbTtcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xufVxuXG4uanFDcm9uLWNyb3NzIHtcbiAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgZm9udC1zaXplOiA4MCU7XG4gICAgcGFkZGluZzogMCAwLjNlbTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdCB7XG4gICAgbGVmdDogMC4yZW07XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAxLjVlbTtcbiAgICB6LWluZGV4OiA1O1xufVxuLmpxQ3Jvbi1zZWxlY3Rvci1saXN0IGxpIHtcbiAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIC1tcy1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwLjFlbSAwLjRlbTtcbiAgICB3aWR0aDogMTAwJTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzMiB7XG4gICAgd2lkdGg6IDRlbTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzMiBsaSB7XG4gICAgd2lkdGg6IDUwJTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzMyB7XG4gICAgd2lkdGg6IDZlbTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzMyBsaSB7XG4gICAgd2lkdGg6IDMzJTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzNCB7XG4gICAgd2lkdGg6IDhlbTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzNCBsaSB7XG4gICAgd2lkdGg6IDI1JTtcbn1cbi5qcUNyb24tc2VsZWN0b3ItbGlzdC5jb2xzNSB7XG4gICAgd2lkdGg6IDEwZW07XG59XG4uanFDcm9uLXNlbGVjdG9yLWxpc3QuY29sczUgbGkge1xuICAgIHdpZHRoOiAyMCU7XG59XG5cbiIsIiRkYXJrLXRleHQ6ICMzMzM7XG4kdHJhbnNwYXJlbnQtaW1hZ2U6ICdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LC85ai80QUFRU2taSlJnQUJBUUFBQVFBQkFBRC8yd0JEQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVDQWdJQ0FnSUNBZ0lDQWdNREF3TURBd01EQXdQLzJ3QkRBUUVCQVFFQkFRSUJBUUlDQWdFQ0FnTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd1Avd0FBUkNBQXlBRElEQVJFQUFoRUJBeEVCLzhRQUdnQUJBQU1CQVFFQUFBQUFBQUFBQUFBQUFBUUZCd1lKQ3YvRUFENFFBQUFHQUFVQkJRUUdCd2tBQUFBQUFBRUNBd1FGQmhJVEZCVVdDQUFSR0NVbUJ5aDIxaVEzT0ZXVnRSY2lKMVNHbDdSQ1IyTm1aNWFteHViL3hBQVVBUUVBQUFBQUFBQUFBQUFBQUFBQUFBQUEvOFFBRkJFQkFBQUFBQUFBQUFBQUFBQUFBQUFBQVAvYUFBd0RBUUFDRVFNUkFEOEEreGVwMU9SNmFwRmE5WHBabExSRXN5VXFiZHZVMUYzMGlTUmZMdHBoRlpaR1liUUxZcklyYUJXS1l4VmpLQW9ZZ0FRUUV4aWdrS25JM1MxSjlSa1dzeWIwaG05amJZckZ5Q2k2VnFOSFVFalZyTUlwc1c3WjFFQzljcVZ4Y1d4UmZBbWNEa3huVEVUQVVKdHc5NkhidUFlVWNIMWU3Y3c4djFISnRMb051MlhrR2JsY2ZXenMzSnc0aVljWGViQ0UyUXRrZGRLcW4wNXhhTDF2ZDJiS05xYXNwSUpvSlZVMGpRVHRYVXdzbStidVhVdUxKeW5YRndiR0ZpQ2h4T1RHUk1CTUpRVk8yUjNUVkhMVVc5SXZaYVhsbnFsc2J1S21tZytqaVJ6NUJ0RG9vckxURG1CY2xlbGN3S3hqRktpWk1FekVFRGlJbUtVS1dwMU9SNmFwRmE5WHBabExSRXN5VXFiZHZVMUYzMGlTUmZMdHBoRlpaR1liUUxZcklyYUJXS1l4VmpLQW9ZZ0FRUUV4aWhvWGl4OW5YM0xkZnc2QytZK3daN1U1QzFYU1JXaStveE42enBEZGtwSVJhdHNqU1VHT05ha2wyemRpbWpNTld0Y1VjdlJpSFQ0U3RoWE9CMHdPZkFJcGdZb0pDUXRVYmFrNmRUazNxblQybzlqWTk0OGo0MGt0VlFxc3NScWU5S0tYbzdWNDVTWkpPWGtocVhPNEFMSVFPQUhTeWdBZ1RiaDZIMjd3MGZUZDAxZk5lSC90RHl0RnBlTjdqcStUYlJqMWIvSnc1R283ajkrUExEQUUyUWo2ckcxVk80MDVSa3AxQ0tNbzJRZU00K1NQTFdvTFZMSGFrdlNhbEZPNmVOa25xVFo1SWFsdHQ0QXlBRGlCRXNvQklDcHg5VnVrY3RLZFJpakpuZDI3MVNQaTByWkpIb01pYXFwSU5uREZSR0hhdXE0bTVaREx1bndGY2lnY1RxQWNtTVFUQXBRcGFuSVdxNlNLMFgxR0p2V2RJYnNsSkNMVnRrYVNneHhyVWt1MmJzVTBaaHExcmlqbDZNUTZmQ1ZzSzV3T21CejRCRk1ERkRRdUE5TEg3L1N2NWxQUG1yc0hGY3c4VVBvRGJ1RDdSNnczYlY4bTFHMytTN2RvTkxYOHJONUJtNTJjYkRrNGNBNHNSUWN3NFA3dEczYnByZlIvTmRYb3NyOUlmMHZjZU42VjNqMmprMkhKMTRhakk3OGFlUHVJRDdLUCtmZWUvd0FMYlZ4Yi9jZXUxM0kvOEhLeWY3ZVA5VUhEK0QrOHZ1TzZhMzFod3JTYUxLL1NIOUUyN2ttcWQ0OW81Tml6dEFHb3lPN0Fuajd5QTRmNG9mWCs0OEgyajBmdE9rNU5xTnY4NjNIWDZxdjVXYnlES3ljazJISnhZeHhZU2c1aDRvZlFHM2NIMmoxaHUycjVOcU52OGwyN1FhV3Y1V2J5RE56czQySEp3NEJ4WWlnOEgvOEFxSC94TC8wM1lKdHNrS3JkSTVHTDZjMDJUTzd0M3FjaEtLMU9OUFFaRTFWU1FjdDN5YTB3NmExeE55eUdYZE1STTJCYzRuVUFoOEFnbUppZ2o1Q3F4dFZVcDF4VFpLZFFpaktTajJieVFqVHkxcUMxU3gzUjZLb25laU5YalpKNmsyZVIrbWM3Z0FNZ0FnQ2RMS0VDQkNwL29mY2ZFdjhBVGQwMG5DdVlmdER5dEZxdVNiZHBPVGJSajFiRE94WkdvN2lkMlBMSEFFS1BqN1ZHMnBTNDNGUjZwMDlxUFpLUVpzNUNTSkxWVUtyTEVkRW9xYWRGSTZlT1VtU1RsNUg2WnR0NEN5RUNDSkVzb1JJQzJSOXF1a2lqS2RPYWoxblNHN0pPUGxFcW5KRW9NY2ExSkx1WEQ1UmFIZE9xNG81ZWpFT21JR2NnZ2NEcGdRbU1SVEVwUXVyWklWVzZSeU1YMDVwc21kM2J2VTVDVVZxY2FlZ3lKcXFrZzVidmsxcGgwMXJpYmxrTXU2WWlac0M1eE9vQkQ0QkJNVEZEUGVBOVUvNy9BSFgrWlRQNXE3Qm9Wc3FjZDAxUnlONm9xejJXbDVaNm5VM0RlMktJUG80a2MrUWN6Q3l5S01PMmdYSlhwWE1DaVVwakxHVEJNeHdFZ2lKVEZCSDFPT3VsVlU2akpSWjYzdTdObEpXeEtMajFFRXFxYVJvSjNUV0hSVVl1R3pxWEZrNVRyaUF1U2crQlE0blBnT21BbEFvUXFmNzBPNDgvOG80UHBOcDRmNWZxT1Rhclg3anZYSU0zSzQrams1V1RoeEh4WXU4dUVJVWZiSkc2V3BUcHpsRVdUZWtNM3NsVTBwU1BUWFN0Um82Z2tkT29kWlI4NGN1b2dYcmxTdUlBNU1ERUV6Z2MrQWlZaVVTZ3Rsc2tlbXFSUm90RlJaUzBSTE1rN1k0Y1d4TmQ5SWtrWHk3bUhXUlJXaDNNQzJLeUsyZ1VURktaRXlnS0dPSW5FQktVb1hWc3FjZDAxUnlONm9xejJXbDVaNm5VM0RlMktJUG80a2MrUWN6Q3l5S01PMmdYSlhwWE1DaVVwakxHVEJNeHdFZ2lKVEZEUGZGajdSZnVXbGZoMDc4eDlnNmlwMU9SNmFwRmE5WHBabExSRXN5VXFiZHZVMUYzMGlTUmZMdHBoRlpaR1liUUxZcklyYUJXS1l4VmpLQW9ZZ0FRUUV4aWdrS25JM1MxSjlSa1dzeWIwaG05amJZckZ5Q2k2VnFOSFVFalZyTUlwc1c3WjFFQzljcVZ4Y1d4UmZBbWNEa3huVEVUQVVKdHc5NkhidUFlVWNIMWU3Y3c4djFISnRMb051MlhrR2JsY2ZXenMzSnc0aVljWGViQ0UyUXRrZGRLcW4wNXhhTDF2ZDJiS05xYXNwSUpvSlZVMGpRVHRYVXdzbStidVhVdUxKeW5YRndiR0ZpQ2h4T1RHUk1CTUpRVk8yUjNUVkhMVVc5SXZaYVhsbnFsc2J1S21tZytqaVJ6NUJ0RG9vckxURG1CY2xlbGN3S3hqRktpWk1FekVFRGlJbUtVS1dwMU9SNmFwRmE5WHBabExSRXN5VXFiZHZVMUYzMGlTUmZMdHBoRlpaR1liUUxZcklyYUJXS1l4VmpLQW9ZZ0FRUUV4aWhvWGl4OW5YM0xkZnc2QytZK3dPckg2dW9YNDFqdnlLeDlnVUg3TEQvNEs5cFg5WmF1d2NWMGYvM2gvd0FKZjltN0J4VkIrMU8vK05mYVYvUjJyc0RxeCtzV0YrQ283ODlzZllOcTZzZnE2aGZqV08vSXJIMkR6MjdCLzlrPSc7XG5cbi8qIEFkbWluIHNldHRpbmdzICovXG5cbi5jb2xvcmJhciB7XG4gICAgW2RhdGEtaGludF06YWZ0ZXIge1xuICAgICAgICB3aWR0aDogMzAwcHghaW1wb3J0YW50O1xuICAgICAgICBtYXJnaW4tbGVmdDogLTMwMHB4O1xuICAgIH1cblxuICAgICYuY3VycmVudC1zY2hlbWUsICYucHJlZGVmaW5lZC1zY2hlbWUge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDtcblxuICAgICAgICBzcGFuIHtcbiAgICAgICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYucHJlZGVmaW5lZC1zY2hlbWU6aG92ZXIge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICAubGlnaHQgc3BhbiB7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY29sb3JiYXItZWxlbWVudC1jb250YWluZXIge1xuICAgICAgICB3aWR0aDogOXJlbTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxcHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMXB4O1xuICAgICAgICAvL2JhY2tncm91bmQtaW1hZ2U6IHVybCgkdHJhbnNwYXJlbnQtaW1hZ2UpO1xuXG5cbiAgICB9XG5cbiAgICAuY29sb3JiYXItZWxlbWVudCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGhlaWdodDogNHJlbTtcbiAgICAgICAgLy9ib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICAgICAgICBib3JkZXItdG9wOiAwO1xuXG5cbiAgICAgICAgc3BhbiB7XG4gICAgICAgICAgICBmb250LXNpemU6IC43cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgICYubGlnaHQtdGV4dCB7XG4gICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICYgaW5wdXQge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmNvbG9yYmFyLXRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIC8vYm9yZGVyOiAxcHggc29saWQgI2NjYztcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgjMDAwLCAwLjA1KTtcbiAgICB9XG5cbiAgICBpbnB1dCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgIGhlaWdodDogMzVweDtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmNob29zZS1wcmVkZWZpbmVkLXNjaGVtZSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG59XG5cbi8vIEFkbWluIHByZXZpZXdcbiRhcC13aWR0aDogOHJlbTtcbiRhcC1oZWlnaHQ6IDEwcmVtO1xuJG5hdi13aWR0aDogMjUlO1xuJHRvb2xiYXItaGVpZ2h0OiAxMCU7XG4kYXAtcmFkaXVzOiA0cHg7XG5cbi5hZG1pbi1wcmV2aWV3LXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogJGFwLXdpZHRoO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tcmlnaHQ6IDJyZW07XG5cbn1cbi5hZG1pbi1wcmV2aWV3LXRpdGxlIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYWRtaW4tcHJldmlldyB7XG4gICAgaGVpZ2h0OiAkYXAtaGVpZ2h0O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYXAtcmFkaXVzO1xuICAgIGJvcmRlci13aWR0aDogMnB4ICFpbXBvcnRhbnQ7XG59XG5cbi5hcC1vdmVybGF5IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOjA7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgYm9yZGVyLXJhZGl1czogJGFwLXJhZGl1cztcbiAgICB6LWluZGV4OiAyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC40cyBlYXNlO1xuICAgICY6aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNCk7XG4gICAgfVxuICAgIGIge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIG1hcmdpbi10b3A6ICgkYXAtaGVpZ2h0IC8gMikgLSAxcmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTExO1xuICAgICAgICBjb2xvcjogI2JiYjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGFwLXJhZGl1cztcbiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwXG4gICAgICAgIH1cbiAgICB9XG59XG4uYXAtc2lkZWJhciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAkbmF2LXdpZHRoO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbn1cbi5hcC1sb2dvIHtcbiAgICBoZWlnaHQ6IDEwJTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGhlaWdodDogOHB4O1xuICAgICAgICB3aWR0aDogMjUlO1xuICAgIH1cbn1cbi5hcC1uYXYge1xuICAgIHBhZGRpbmc6IDVweCAxMHB4O1xufVxuLmFwLXRleHQsIC5hcC10ZXh0OjpiZWZvcmUsIC5hcC10ZXh0OjphZnRlciB7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAzcHg7XG4gICAgaGVpZ2h0OiAycHg7XG4gICAgY29udGVudDogJyc7XG59XG4uYXAtdGV4dDo6YmVmb3JlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIHRvcDogN3B4O1xufVxuLmFwLXRleHQ6OmFmdGVyIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xuICAgIHRvcDogOXB4O1xufVxuLmFwLWFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAxOXB4IC0xMHB4IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgIHBhZGRpbmc6IDVweCAxMHB4IDVweCA3cHg7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDNweDtcbiAgICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIGhlaWdodDogMnB4O1xuICAgIH1cbn1cbi5hcC10b29sYmFyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogJG5hdi13aWR0aDtcbiAgICByaWdodDogMDtcbiAgICBoZWlnaHQ6ICR0b29sYmFyLWhlaWdodDtcbiAgICBwYWRkaW5nOiAwIDEwcHg7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDMzJTtcbiAgICAgICAgaGVpZ2h0OiA0cHg7XG4gICAgfVxufVxuLmFwLWJ1dHRvbiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgaGVpZ2h0OiA4cHg7XG4gICAgd2lkdGg6IDI1cHg7XG59XG4uYXAtcGFnZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogJHRvb2xiYXItaGVpZ2h0O1xuICAgIGxlZnQ6ICRuYXYtd2lkdGg7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHBhZGRpbmc6IDEwcHg7XG59XG4uYXAtY29udGVudCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5hcC10aXRsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgaGVpZ2h0OiA0cHg7XG4gICAgd2lkdGg6IDI1JTtcbiAgICBtYXJnaW46IDhweCAxMHB4IDVweDtcbn1cbi5hcC1jb250ZW50IHtcbiAgICAuYXAtdGV4dCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG4gICAgfVxufVxuLmFwLXVwZGF0ZSwgLmFwLW5vdGljZSwgLmFwLWNyaXRpY2FsIHtcbiAgICBtYXJnaW4tdG9wOiAxOXB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBhZGRpbmc6IDVweCAxMHB4O1xuICAgICY6OmFmdGVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBoZWlnaHQ6IDJweDtcbiAgICAgICAgd2lkdGg6IDUwJTtcbiAgICB9XG59XG4uYXAtdXBkYXRlIHtcbiAgICBtYXJnaW4tdG9wOiAzcHg7XG59XG4iLCJbZGF0YS1zaW1wbGViYXJdIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5zaW1wbGViYXItd3JhcHBlciB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB3aWR0aDogaW5oZXJpdDtcbiAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgbWF4LXdpZHRoOiBpbmhlcml0O1xuICAgIG1heC1oZWlnaHQ6IGluaGVyaXQ7XG59XG5cbi5zaW1wbGViYXItbWFzayB7XG4gICAgZGlyZWN0aW9uOiBpbmhlcml0O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICAgIHotaW5kZXg6IDA7XG59XG5cbi5zaW1wbGViYXItb2Zmc2V0IHtcbiAgICBkaXJlY3Rpb246IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBib3gtc2l6aW5nOiBpbmhlcml0ICFpbXBvcnRhbnQ7XG4gICAgcmVzaXplOiBub25lICFpbXBvcnRhbnQ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICByaWdodDogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5zaW1wbGViYXItY29udGVudC13cmFwcGVyIHtcbiAgICBkaXJlY3Rpb246IGluaGVyaXQ7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBoZWlnaHQ6IDEwMCU7IC8qIFJlcXVpcmVkIGZvciBob3Jpem9udGFsIG5hdGl2ZSBzY3JvbGxiYXIgdG8gbm90IGFwcGVhciBpZiBwYXJlbnQgaXMgdGFsbGVyIHRoYW4gbmF0dXJhbCBoZWlnaHQgKi9cbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXgtd2lkdGg6IDEwMCU7IC8qIE5vdCByZXF1aXJlZCBmb3IgaG9yaXpvbnRhbCBzY3JvbGwgdG8gdHJpZ2dlciAqL1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7IC8qIE5lZWRlZCBmb3IgdmVydGljYWwgc2Nyb2xsIHRvIHRyaWdnZXIgKi9cbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xufVxuXG4uc2ltcGxlYmFyLWNvbnRlbnQtd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXIsXG4uc2ltcGxlYmFyLWhpZGUtc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuXG4uc2ltcGxlYmFyLWNvbnRlbnQ6YmVmb3JlLFxuLnNpbXBsZWJhci1jb250ZW50OmFmdGVyIHtcbiAgICBjb250ZW50OiAnICc7XG4gICAgZGlzcGxheTogdGFibGU7XG59XG5cbi5zaW1wbGViYXItcGxhY2Vob2xkZXIge1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uc2ltcGxlYmFyLWhlaWdodC1hdXRvLW9ic2VydmVyLXdyYXBwZXIge1xuICAgIGJveC1zaXppbmc6IGluaGVyaXQgIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1heC1oZWlnaHQ6IDFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGZsZXgtZ3JvdzogaW5oZXJpdDtcbiAgICBmbGV4LXNocmluazogMDtcbiAgICBmbGV4LWJhc2lzOiAwO1xufVxuXG4uc2ltcGxlYmFyLWhlaWdodC1hdXRvLW9ic2VydmVyIHtcbiAgICBib3gtc2l6aW5nOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMTAwMCU7XG4gICAgd2lkdGg6IDEwMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDFweDtcbiAgICBtaW4td2lkdGg6IDFweDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IC0xO1xufVxuXG4uc2ltcGxlYmFyLXRyYWNrIHtcbiAgICB6LWluZGV4OiAxO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuW2RhdGEtc2ltcGxlYmFyXS5zaW1wbGViYXItZHJhZ2dpbmcgLnNpbXBsZWJhci1jb250ZW50IHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xufVxuXG5bZGF0YS1zaW1wbGViYXJdLnNpbXBsZWJhci1kcmFnZ2luZyAuc2ltcGxlYmFyLXRyYWNrIHtcbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xufVxuXG4uc2ltcGxlYmFyLXNjcm9sbGJhciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgbWluLWhlaWdodDogMTBweDtcbn1cblxuLnNpbXBsZWJhci1zY3JvbGxiYXI6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgY29udGVudDogJyc7XG4gICAgYm9yZGVyLXJhZGl1czogN3B4O1xuICAgIGxlZnQ6IDJweDtcbiAgICByaWdodDogMnB4O1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjtcbn1cblxuLnNpbXBsZWJhci1zY3JvbGxiYXIuc2ltcGxlYmFyLXZpc2libGU6YmVmb3JlIHtcbiAgICAvKiBXaGVuIGhvdmVyZWQsIHJlbW92ZSBhbGwgdHJhbnNpdGlvbnMgZnJvbSBkcmFnIGhhbmRsZSAqL1xuICAgIG9wYWNpdHk6IDAuMztcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBzIGxpbmVhcjtcbn1cblxuLnNpbXBsZWJhci10cmFjay5zaW1wbGViYXItdmVydGljYWwge1xuICAgIHRvcDogMDtcbiAgICB3aWR0aDogMTFweDtcbn1cblxuLnNpbXBsZWJhci10cmFjay5zaW1wbGViYXItdmVydGljYWwgLnNpbXBsZWJhci1zY3JvbGxiYXI6YmVmb3JlIHtcbiAgICB0b3A6IDJweDtcbiAgICBib3R0b206IDJweDtcbn1cblxuLnNpbXBsZWJhci10cmFjay5zaW1wbGViYXItaG9yaXpvbnRhbCB7XG4gICAgbGVmdDogMDtcbiAgICBoZWlnaHQ6IDExcHg7XG59XG5cbi5zaW1wbGViYXItdHJhY2suc2ltcGxlYmFyLWhvcml6b250YWwgLnNpbXBsZWJhci1zY3JvbGxiYXI6YmVmb3JlIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbGVmdDogMnB4O1xuICAgIHJpZ2h0OiAycHg7XG59XG5cbi5zaW1wbGViYXItdHJhY2suc2ltcGxlYmFyLWhvcml6b250YWwgLnNpbXBsZWJhci1zY3JvbGxiYXIge1xuICAgIHJpZ2h0OiBhdXRvO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAycHg7XG4gICAgaGVpZ2h0OiA3cHg7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICBtaW4td2lkdGg6IDEwcHg7XG4gICAgd2lkdGg6IGF1dG87XG59XG5cbi8qIFJ0bCBzdXBwb3J0ICovXG5bZGF0YS1zaW1wbGViYXItZGlyZWN0aW9uPSdydGwnXSAuc2ltcGxlYmFyLXRyYWNrLnNpbXBsZWJhci12ZXJ0aWNhbCB7XG4gICAgcmlnaHQ6IGF1dG87XG4gICAgbGVmdDogMDtcbn1cblxuLmhzLWR1bW15LXNjcm9sbGJhci1zaXplIHtcbiAgICBkaXJlY3Rpb246IHJ0bDtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgb3BhY2l0eTogMDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgaGVpZ2h0OiA1MDBweDtcbiAgICB3aWR0aDogNTAwcHg7XG4gICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cblxuLnNpbXBsZWJhci1oaWRlLXNjcm9sbGJhciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGxlZnQ6IDA7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xufVxuIiwiLmpxdWVyeS1ob3Jpem9udGFsLXNjcm9sbC13cmFwe1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIC5uYXYtbmV4dCwgLm5hdi1wcmV2e1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHotaW5kZXg6IDU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBmb250LXNpemU6IDIwcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcGFkZGluZzogMzBweCA4cHg7XG4gICAgICAgIGNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC42NSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgbWFyZ2luLXRvcDogLTQwcHg7XG5cbiAgICAgICAgJi5oaWRlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyLCAmOmZvY3VzIHtcbiAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAmOmJlZm9yZXtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcIkZvbnRBd2Vzb21lXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubmF2LW5leHQge1xuICAgICAgICByaWdodDogMDtcblxuICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICBjb250ZW50OiBcIlxcZjEwNVwiO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICAubmF2LXByZXYge1xuICAgICAgICBsZWZ0OiAwO1xuXG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFwiXFxmMTA0XCI7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC5qcXVlcnktaG9yaXpvbnRhbC1zY3JvbGx7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxufVxuIl19 */ + */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{margin:2px 0;padding:4px;width:19em}@media (min-width: 768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width: 992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width: 1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:before,.bootstrap-datetimepicker-widget.dropdown-menu:after{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,0.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,0.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:bold;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action="incrementHours"]::after{content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action="incrementMinutes"]::after{content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="decrementHours"]::after{content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action="decrementMinutes"]::after{content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="showHours"]::after{content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action="showMinutes"]::after{content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action="togglePeriod"]::after{content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action="clear"]::after{content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action="today"]::after{content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:3px}.bootstrap-datetimepicker-widget table th{height:29px;line-height:29px;width:29px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#ccc;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ddd}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#ccc}.bootstrap-datetimepicker-widget table td.day{height:29px;line-height:29px;width:29px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#ddd;cursor:pointer}.bootstrap-datetimepicker-widget table td.old,.bootstrap-datetimepicker-widget table td.new{color:#ccc}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:0 0 7px 7px solid transparent;border-bottom-color:#fff;border-top-color:rgba(0,0,0,0.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#fff;color:blue;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#ccc;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:3px}.bootstrap-datetimepicker-widget table td span:hover{background:#ddd}.bootstrap-datetimepicker-widget table td span.active{background-color:#fff;color:blue;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.bootstrap-datetimepicker-widget table td span.old{color:#ccc}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#ccc;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.input-group.date .input-group-addon{cursor:pointer}.fjs-container{display:flex;font-size:.9em;min-height:400px;overflow:auto;overflow-x:scroll}.fjs-container:focus{outline:none}.fjs-container .fjs-col{border-right:solid 1px lightgray;max-height:600px;min-height:inherit;min-width:200px;overflow-y:auto}.fjs-container .fjs-item a{color:black;justify-content:space-between;padding:5px;text-decoration:none;display:flex;align-items:center}.fjs-container .fjs-item a:focus{outline:none}.fjs-container .fjs-item a span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fjs-container .fjs-item a span i{padding-right:5px}.fjs-container .info-container{display:flex;align-items:center}.fjs-container .fjs-list{list-style:none;margin:0;padding:0}.fjs-container .fjs-item-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fjs-container .fa-caret-right{padding:0 0 0 .5em}.fjs-container .leaf-col{align-items:center;border-right:0;display:flex;flex:2;justify-content:center;padding:0 1.5em}.fjs-container .leaf-row{display:flex;flex-direction:column;font-size:1.3em;text-align:center}.fjs-container .leaf-row .fa{font-size:4em;margin:20px 0}.fjs-container .leaf-row .fa-refresh{font-size:2em}.fjs-container .leaf-col .meta{font-size:.7em}.fjs-container .leaf-col .meta strong{font-weight:normal}.fjs-container .leaf-col .meta:first-of-type{margin-top:1.5em}.fjs-path-bar{font-size:0.9em;padding:.25rem .5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fjs-path-bar [data-breadcrumb-node]{cursor:pointer}.fjs-path-bar [data-breadcrumb-node]:hover span{text-decoration:underline}.fjs-path-bar .fa-chevron-right{font-size:.8em}[data-parents-field-name]{font-weight:bold}.fjs-container .fa-folder,.fjs-path-bar .fa-folder{color:#90E4FF}.fjs-container .fa-file-o,.fjs-path-bar .fa-file-o{color:#A7A7A7}.fjs-container .fa-external-link,.fjs-path-bar .fa-external-link{color:#629EFF;font-size:smaller}.switch-toggle{display:inline-block;display:inline-flex;overflow:hidden;border-radius:4px;line-height:35px}.switch-toggle input[type=radio]{position:absolute;visibility:hidden;display:none}.switch-toggle label{display:inline-block;cursor:pointer;padding:0 15px;white-space:nowrap}html,body{height:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden}b,strong{font-weight:600}.bigger{font-size:1.2rem}.button-bar{text-align:right;float:right;z-index:0}.alert{font-size:1rem;padding:0.5rem 1.5rem;position:relative}@media only all and (max-width: 47.938em){.alert{padding:0.5rem 1rem}}.badge,.sidebar-open #admin-sidebar #admin-menu li .badges .updates,.gpm .gpm-testing{display:inline-block;font-size:0.8rem;font-weight:500;border-radius:10px;padding:0px 6px;min-width:20px;line-height:20px;text-align:center}.empty-state{margin:0 auto;text-align:center;padding-top:100px}.default-animation,.scheduler-content #cron-install{-webkit-transition:all 0.5s ease;-moz-transition:all 0.5s ease;transition:all 0.5s ease}.pulse{animation-name:pulse_animation;animation-duration:2000ms;transform-origin:70% 70%;animation-iteration-count:infinite;animation-timing-function:linear}@keyframes pulse_animation{0%{transform:scale(1)}30%{transform:scale(1)}40%{transform:scale(1.08)}50%{transform:scale(1)}60%{transform:scale(1)}70%{transform:scale(1.05)}80%{transform:scale(1)}100%{transform:scale(1)}}.default-border-radius{border-radius:4px}.default-glow-shadow{box-shadow:0 0 20px rgba(0,0,0,0.2)}.default-box-shadow{box-shadow:0 0 10px 2px rgba(0,0,0,0.03)}.login-box-shadow{box-shadow:0 10px 100px 0px rgba(0,0,0,0.4)}.padding-horiz{padding-left:7rem;padding-right:7rem}@media only all and (max-width: 59.938em){.padding-horiz{padding-left:4rem;padding-right:4rem}}@media only all and (max-width: 47.938em){.padding-horiz{padding-left:1rem;padding-right:1rem}}.padding-vert{padding-top:3rem;padding-bottom:3rem}.pointer-events-none{pointer-events:none}@media only all and (max-width: 47.938em){.hidden-mobile{display:none !important}}body{font-weight:400}@media only all and (max-width: 47.938em){body{font-size:0.8rem}}h1,h2,h3,h4,h5,h6{font-weight:400;text-rendering:optimizeLegibility;letter-spacing:-0px}h1{font-size:3.1rem}@media only all and (max-width: 47.938em){h1{font-size:2.5rem;line-height:1.2;margin-bottom:2.5rem}}@media only all and (min-width: 48em) and (max-width: 59.938em){h2{font-size:2rem}}@media only all and (max-width: 47.938em){h2{font-size:1.9rem}}@media only all and (min-width: 48em) and (max-width: 59.938em){h3{font-size:1.6rem}}@media only all and (max-width: 47.938em){h3{font-size:1.5rem}}@media only all and (min-width: 48em) and (max-width: 59.938em){h4{font-size:1.25rem}}@media only all and (max-width: 47.938em){h4{font-size:1.15rem}}h1{letter-spacing:-3px}h2{letter-spacing:-2px}h3{letter-spacing:-1px}i.fa.fa-heart.pulse,i.fa.fa-heart-o.pulse{color:#920}code{vertical-align:inherit}pre{padding:2rem;border-radius:3px}pre code{background:inherit}.label{vertical-align:middle;border-radius:100%;height:1rem;min-width:1rem;line-height:1rem;display:inline-block;text-align:center;font-size:.6rem;margin-right:0.75rem}form .form-display-wrapper h1{padding:0 !important;font-size:1.7rem !important;border-bottom-width:2px !important}form .form-display-wrapper h2{padding:0 !important;font-size:1.5rem !important;border-bottom-width:1px !important}form .form-display-wrapper h3{padding:0 !important;font-size:1.3rem !important;border-bottom-width:1px !important}form .form-display-wrapper h4{padding:0 !important;font-size:1.1rem !important}form .form-display-wrapper blockquote{padding:15px}form .form-display-wrapper blockquote p{font-size:0.9rem;color:inherit}form .form-display-wrapper blockquote p:last-child{margin-bottom:0}form .form-display-wrapper code,form .form-display-wrapper pre{font-size:0.8rem}form .form-display-wrapper table{border-collapse:collapse;width:100%}form .form-display-wrapper table th{padding:10px !important}form .form-display-wrapper table th:last-child{border-right:none}form .form-display-wrapper table td{padding:10px !important}form .form-display-wrapper table td:last-child{border-right:none}form .form-display-wrapper table tr:last-child{border-bottom:none}form h1,form h3,form .form-spacer h3{padding:0 1.5rem 0.5rem;margin:0 0 1rem;font-size:1.5rem;text-align:left;letter-spacing:-1px}form h3{padding-left:0}form p{padding:0 1.5rem}form pre{padding:1.5rem 3rem}form .nowrap{white-space:nowrap}form .form-description p{padding:0}@media only all and (max-width: 47.938em){form .button{padding:0.25rem 0.5rem}}form .form-field{margin-bottom:1rem;padding-left:1.5rem}@media only all and (max-width: 47.938em){form .form-field{padding-left:1rem}}form .form-field .file-thumbnail-wrapper{display:inline-block;position:relative}form .form-field .file-thumbnail{max-height:150px;vertical-align:top;display:inline-block;margin-bottom:10px}form .form-field .file-thumbnail-remove{position:absolute;text-align:center;display:block;top:3px;right:3px;width:25px;height:25px;border-radius:100%}form .form-field .file-thumbnail-remove .fa{font-size:20px;line-height:25px;vertical-align:top}form .form-data{padding-right:1.5rem}@media only all and (max-width: 47.938em){form .form-data{padding-right:1rem}}form .form-input-addon-wrapper{display:flex}form .form-input-addon-wrapper .form-input-addon{display:flex;padding:0 5px;justify-content:center;align-items:center}form .form-input-addon-wrapper .form-input-addon.copy-to-clipboard{cursor:pointer}form .form-input-addon-wrapper input{height:35px;display:table-cell}form .form-input-addon-wrapper .form-input-prepend{border-radius:4px 0 0 4px;border-right-width:0 !important}form .form-input-addon-wrapper .form-input-append{border-radius:0 4px 4px 0;border-left-width:0 !important}form .form-input-addon-wrapper input:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}form .form-input-addon-wrapper input:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}form .overlay{padding-top:1rem;padding-bottom:1px}form .overlay.bottom{margin:2rem auto -2rem auto}form .required{display:inline-block;font-family:helvetica, arial, sans-serif;vertical-align:middle;line-height:0;font-size:30px;margin-left:0px;margin-bottom:-5px}form label{padding:5px 0;font-weight:400;margin:0}form label p{margin:0}form label [data-hint]{display:inline}form label.inline{display:inline;vertical-align:middle;margin-right:15px}form label.toggleable{display:inline}form .form-sublabel p{opacity:0.8;font-size:0.9rem;margin:10px 20px 0 0;padding:0}form input,form select,form textarea,form button,form .selectize-input{font-size:.9rem;line-height:1.5;border-radius:4px;-webkit-font-smoothing:antialiased}form .form-input-file{position:relative;min-height:70px;border-radius:4px}form .form-input-file ul{margin:1rem 0;text-align:left;font-size:1rem;border-radius:4px}form .form-input-file p{display:block;height:100%;text-align:center;margin:0;padding:0.8rem 1rem 0;font-size:1.2rem}form .form-input-file input{display:none}form .selectize-dropdown{z-index:100000}form .grid.vertical{-webkit-flex-flow:column;-moz-flex-flow:column;flex-flow:column}form .compact .form-field{margin-bottom:0.2rem}form .compact .form-list-wrapper li{display:flex;flex-wrap:wrap;justify-content:flex-start}form .compact .form-list-wrapper li .form-field{width:50%}@media only all and (max-width: 47.938em){form .compact .form-list-wrapper li .form-field{width:100%}}form .form-select-wrapper,form .selectize-control.single .selectize-input{position:relative}form .form-select-wrapper:after,form .selectize-control.single .selectize-input:after{margin-top:0;border:0;position:absolute;content:'\f078';font-family:'FontAwesome';right:12px;top:50%;line-height:0;pointer-events:none}form .selectize-input{display:block !important;box-shadow:none;padding:5px 30px 5px 10px;margin:0}form .selectize-input>input{font-size:.9rem;line-height:1.5}form .selectize-control.single.plugin-remove_button .selectize-input .item,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single{cursor:pointer;margin:0 3px 3px 0;padding:2px 6px;display:inline-block;border-radius:2px 0 0 2px !important}form .selectize-control.single.plugin-remove_button .selectize-input .remove-single{border-radius:0 2px 2px 0 !important;margin-left:-2px}form .selectize-control.single.plugin-remove_button .selectize-input,form .selectize-control.multi .selectize-input{padding:.375rem .375rem}form .selectize-control.single.plugin-remove_button .selectize-input.has-items,form .selectize-control.multi .selectize-input.has-items{padding-top:6px;padding-bottom:4px}form .selectize-control.single.plugin-remove_button .selectize-input .item,form .selectize-control.single.plugin-remove_button .selectize-input .remove-single,form .selectize-control.multi .selectize-input .item,form .selectize-control.multi .selectize-input .remove-single{border-radius:2px;line-height:1.5}form .selectize-control.single.plugin-remove_button .selectize-input .item>img,form .selectize-control.multi .selectize-input .item>img{max-height:20px !important;max-width:inherit !important}form .selectize-control.single .selectize-input:after{right:27px}form .selectize-control.single .selectize-input.dropdown-active:after{content:'\f077'}form .x-small{max-width:5rem !important}form .x-small.form-input-addon-wrapper{max-width:inherit !important}form .x-small.form-input-addon-wrapper input{max-width:5rem !important}form .small{max-width:10rem !important}form .small.form-input-addon-wrapper{max-width:inherit !important}form .small.form-input-addon-wrapper input{max-width:10rem !important}form .medium:not(.switch-toggle),form .medium.form-input-addon-wrapper input{max-width:20rem}form .medium:not(.switch-toggle) textarea,form .medium.form-input-addon-wrapper input textarea{height:7rem}form .medium:not(.switch-toggle)[data-grav-array-type="container"],form .medium.form-input-addon-wrapper input[data-grav-array-type="container"]{max-width:100% !important}form .medium:not(.switch-toggle)[data-grav-array-type="container"] input[type=text],form .medium.form-input-addon-wrapper input[data-grav-array-type="container"] input[type=text]{width:calc(70% - 110px)}form .large,form .large.form-input-addon-wrapper input{max-width:30rem !important}form .large textarea,form .large.form-input-addon-wrapper input textarea{height:10rem}form .large[data-grav-array-type="container"],form .large.form-input-addon-wrapper input[data-grav-array-type="container"]{max-width:100% !important}form .large[data-grav-array-type="container"] input[type=text],form .large.form-input-addon-wrapper input[data-grav-array-type="container"] input[type=text]{width:calc(100% - 110px)}form select{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:5px 30px 5px 10px;cursor:pointer;margin:0}form input[type=text],form input[type=password],form input[type=email],form input[type=date],form input[type=tel],form input[type=time],form input[type=week],form input[type=month],form input[type=number],form input[type=color],form input[type=url]{width:100%}form textarea{width:100%}form .form-frontmatter-wrapper{border-radius:4px}form .switch-toggle label{cursor:pointer}form .switch-toggle a,form .switch-toggle label{outline:none !important}form .dynfields input[type=text],form [data-grav-field="array"] input[type=text],form [data-grav-field="multilevel"] input[type=text]{width:40%;float:left;margin:0 5px 5px 0}form .dynfields .form-row,form [data-grav-field="array"] .form-row,form [data-grav-field="multilevel"] .form-row{display:inline-block;width:100%;margin-right:0;max-width:100% !important}form .dynfields .form-row span,form [data-grav-field="array"] .form-row span,form [data-grav-field="multilevel"] .form-row span{padding:0.5rem;display:inline-block;line-height:1.5;cursor:pointer}form .dynfields .form-row span[data-grav-array-action="sort"],form [data-grav-field="array"] .form-row span[data-grav-array-action="sort"],form [data-grav-field="multilevel"] .form-row span[data-grav-array-action="sort"]{float:left;cursor:move}form .dynfields .form-row.array-field-value_only,form [data-grav-field="array"] .form-row.array-field-value_only,form [data-grav-field="multilevel"] .form-row.array-field-value_only{width:100%}form [data-grav-field="multilevel"] input:disabled{background-color:lightgray}form [data-grav-array-type="container"].one-child [data-grav-array-action="sort"]{display:none}form .button-bar{margin-top:1rem;padding:1.2rem 3rem;width:100%;border-bottom-left-radius:5px;border-bottom-right-radius:5px}form .checkboxes{display:inline-block;padding:5px 0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form .checkboxes label{display:inline;cursor:pointer;position:relative;padding:0 0 0 2rem;margin-right:15px}form .checkboxes label:before{content:"";display:inline-block;width:1.5rem;height:1.5rem;top:50%;left:0;margin-top:-0.75rem;margin-right:10px;position:absolute;border-radius:4px}form .checkboxes input[type=checkbox]{display:none}form .checkboxes input[type=checkbox]:checked+label:before{content:"\f00c";font-family:"FontAwesome", sans-serif;font-size:1.2rem;line-height:1;text-align:center}form .checkboxes.toggleable label{margin-right:0}.form-display-wrapper p{padding-left:0;padding-right:0}.form-display-wrapper p:first-child{margin-top:0}div.frontmatter{margin-bottom:3rem}[data-grav-field="parents"] .form-input-wrapper{cursor:pointer}[data-grav-field="parents"] .form-input-wrapper i{margin-right:.25rem}[data-remodal-id].parents-container form{overflow:hidden}[data-remodal-id].parents-container form>h1{margin-bottom:0;border-bottom:1px solid #eee}[data-remodal-id].parents-container form>.button-bar{margin-top:0}[data-remodal-id].parents-container .fjs-list{overflow:auto;overflow-y:scroll;max-height:400px;min-height:100%}[data-remodal-id].parents-container .fjs-item{margin-left:0;list-style-type:none;text-align:left}[data-remodal-id].parents-container .parents-content:empty{display:none}textarea.frontmatter{height:130px !important}textarea.frontmatter+.CodeMirror{height:130px}[data-grav-field="parents"] .form-input-wrapper{cursor:pointer}[data-grav-field="parents"] .form-input-wrapper i{margin-right:.25rem}[data-remodal-id].parents-container form{overflow:hidden}[data-remodal-id].parents-container form>h1{margin-bottom:0;border-bottom:1px solid #eee}[data-remodal-id].parents-container form>.button-bar{margin-top:0}[data-remodal-id].parents-container .fjs-list{overflow:auto;overflow-y:scroll;max-height:400px;min-height:100%}[data-remodal-id].parents-container .fjs-item{margin-left:0;list-style-type:none;text-align:left}[data-remodal-id].parents-container .parents-content:empty{display:none}.form-order-wrapper .notice{padding:5px}.form-order-wrapper ul.orderable{list-style:none;margin:0;padding:0}.form-order-wrapper ul.orderable li{padding:0.2rem 1rem;border-radius:4px;margin:3px 0;position:relative}.form-order-wrapper ul.orderable li.drag-handle{cursor:move}.form-order-wrapper ul.orderable li.drag-handle::after{content:'\f0c9';font-family:FontAwesome;position:absolute;right:10px}.form-order-wrapper ul.orderable li i{font-size:0.8rem}.form-list-wrapper ul[data-collection-holder]{list-style:none;margin:0;padding:0}.form-list-wrapper ul[data-collection-holder]>li{padding:1rem;border-radius:4px;margin:3px 0;position:relative}.form-list-wrapper ul[data-collection-holder]>li .item-actions{position:absolute;right:10px;top:4px}.form-list-wrapper ul[data-collection-holder]>li .item-actions .fa{cursor:pointer}.form-list-wrapper ul[data-collection-holder]>li.collection-collapsed{height:70px;overflow:hidden;-webkit-transform:translateZ(0);-moz-transform:translateZ(0);-ms-transform:translateZ(0);-o-transform:translateZ(0);transform:translateZ(0)}@media only all and (max-width: 47.938em){.form-list-wrapper ul[data-collection-holder]>li.collection-collapsed{height:120px}}.form-list-wrapper ul[data-collection-holder][data-collection-nosort]>li{cursor:default}.form-list-wrapper .collection-actions{text-align:right}.form-list-wrapper .collection-sort{position:absolute;top:0;left:0;width:32px;bottom:0;cursor:move}@media only all and (max-width: 47.938em){.form-list-wrapper .collection-sort{width:20px}.form-list-wrapper .collection-sort .fa{font-size:0.8rem}}.form-list-wrapper .collection-sort .fa{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.form-list-wrapper [data-collection-nosort] .collection-sort{display:none}.form-label.block{position:relative}.form-label.block:hover{z-index:2}.form-label.block label{z-index:2}#admin-main .admin-block h2{font-size:1.25rem;margin:0 0 .5rem;letter-spacing:normal}.form-fieldset{margin:1rem 1.5rem}.form-fieldset--label label{display:table;font-size:1.25rem;padding:.5rem 1rem;width:100%}.form-fieldset--label h2{margin:0 !important}.form-fieldset--label .actions{font-size:initial;display:table-cell;text-align:right;vertical-align:middle}.form-fieldset--label+.form-data{margin-top:1rem;padding:0}.form-fieldset--cursor{cursor:pointer}.form-fieldset--info{font-size:small}.form-fieldset>input:checked ~ .form-data,.form-fieldset--collapsible .open,.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .close{display:block}.form-fieldset>.form-data,.form-fieldset--collapsible .close,.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .open{display:none}.filepicker-field-image{width:30px;vertical-align:middle;margin-right:5px}.filepicker-field-name{vertical-align:middle}.permissions-container .permission-value{width:50%;float:left;margin:0 5px 5px 0;height:39px}.permissions-container .switch-toggle{line-height:37px;margin:0 5px 5px 0}.permissions-container .crudp-container{display:flex}.permissions-container .crudp-container .checkboxes.toggleable{display:block}.permissions-container .crudp-container .checkboxes.toggleable label{display:inline-flex;padding:inherit;padding-left:1.5rem;padding-right:0.5rem;font-weight:bold;border-top-width:1px;border-bottom-width:1px;border-right-width:1px;border-left-width:0;border-style:solid}.permissions-container .crudp-container .checkboxes.toggleable label:before{border:none;background:none}.permissions-container .crudp-container .checkboxes.toggleable input[type=checkbox]+label:before{content:"\f023";font-family:"FontAwesome";font-size:0.8rem;line-height:1.8;text-align:center}.permissions-container .crudp-container .checkboxes.toggleable[data-_check-status="1"] input[type=checkbox]+label:before{content:"\f00c";font-family:"FontAwesome"}.permissions-container .crudp-container .checkboxes.toggleable[data-_check-status="2"] input[type=checkbox]+label:before{content:"\f05e"}.permissions-container .crudp-container>div:first-child .checkboxes.toggleable label{border-left-width:1px;border-radius:4px 0 0 4px}.permissions-container .crudp-container>div:last-of-type .checkboxes.toggleable label{border-right-width:1px;border-radius:0 4px 4px 0}[data-grav-field="cron"]{display:flex;align-items:center}.cron-install{margin:1rem;padding:0;border-radius:4px}form .cron-install pre{padding:1rem;margin:0 1.5rem;line-height:1}.cron-install .setup-status{font-weight:bold}.cron-status,.backups-history{margin-bottom:4rem}.cron-status .cron-at code,.backups-history .cron-at code{font-size:120%;padding:2px 10px;border-radius:2px}.cron-status .badge,.cron-status .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.sidebar-open #admin-sidebar #admin-menu li .badges .cron-status .updates,.cron-status .gpm .gpm-testing,.gpm .cron-status .gpm-testing,.backups-history .badge,.backups-history .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.sidebar-open #admin-sidebar #admin-menu li .badges .backups-history .updates,.backups-history .gpm .gpm-testing,.gpm .backups-history .gpm-testing{white-space:nowrap}.cron-status tr.deleting,.backups-history tr.deleting{background:#efefef;color:#bbb;text-shadow:0 1px white}.cron-status tr.deleting button,.cron-status tr.deleting .button,.backups-history tr.deleting button,.backups-history tr.deleting .button{background:#777;pointer-events:none}form .cron-job-list li,form .backups-list li{display:flex;flex-direction:row;flex-wrap:wrap}form .cron-job-list .form-field.grid,form .backups-list .form-field.grid{width:calc(50% - 5px)}@media only all and (max-width: 47.938em){form .cron-job-list .form-field.grid,form .backups-list .form-field.grid{width:100%}}table,tbody,thead{display:inline-block;width:100%}.gpm-details{width:100%;-webkit-box-flex:auto;-moz-box-flex:auto;box-flex:auto;-webkit-flex:auto;-moz-flex:auto;-ms-flex:auto;flex:auto}td{border:0}tr{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-lines:multiple;-moz-box-lines:multiple;box-lines:multiple;-webkit-flex-wrap:wrap;-moz-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-moz-box-align:center;box-align:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center;-ms-flex-align:center}tr th,tr td{display:block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}tr th.shrink,tr td.shrink{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;-webkit-flex:0;-moz-flex:0;-ms-flex:0;flex:0}tr th.double,tr td.double{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;-webkit-flex:2;-moz-flex:2;-ms-flex:2;flex:2}tr th.triple,tr td.triple{-webkit-box-flex:3;-moz-box-flex:3;box-flex:3;-webkit-flex:3;-moz-flex:3;-ms-flex:3;flex:3}tr th.quadruple,tr td.quadruple{-webkit-box-flex:4;-moz-box-flex:4;box-flex:4;-webkit-flex:4;-moz-flex:4;-ms-flex:4;flex:4}tr th.quintuple,tr td.quintuple{-webkit-box-flex:5;-moz-box-flex:5;box-flex:5;-webkit-flex:5;-moz-flex:5;-ms-flex:5;flex:5}tr th.sextuple,tr td.sextuple{-webkit-box-flex:6;-moz-box-flex:6;box-flex:6;-webkit-flex:6;-moz-flex:6;-ms-flex:6;flex:6}tr th.septuple,tr td.septuple{-webkit-box-flex:7;-moz-box-flex:7;box-flex:7;-webkit-flex:7;-moz-flex:7;-ms-flex:7;flex:7}tr th.octuple,tr td.octuple{-webkit-box-flex:8;-moz-box-flex:8;box-flex:8;-webkit-flex:8;-moz-flex:8;-ms-flex:8;flex:8}tr th.nontuple,tr td.nontuple{-webkit-box-flex:9;-moz-box-flex:9;box-flex:9;-webkit-flex:9;-moz-flex:9;-ms-flex:9;flex:9}tr th.dectuple,tr td.dectuple{-webkit-box-flex:10;-moz-box-flex:10;box-flex:10;-webkit-flex:10;-moz-flex:10;-ms-flex:10;flex:10}tr th:first-child,tr td:first-child{padding-left:1.5rem}@media only all and (max-width: 47.938em){tr th:first-child,tr td:first-child{padding-left:1rem}}tr th:last-child,tr td:last-child{padding-right:1.5rem}@media only all and (max-width: 47.938em){tr th:last-child,tr td:last-child{padding-right:1rem}}tr th.left,tr td.left{text-align:left}tr th.center,tr td.center{text-align:center}tr th.right,tr td.right{text-align:right}tr th.right.pad,tr td.right.pad{padding-right:1.5rem}tr th.right.pad .form-data,tr td.right.pad .form-data{padding-right:0}tr th.left.pad,tr td.left.pad{padding-left:1.5rem}tr th.ellipsis,tr td.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}tr th.ellipsis.rtl,tr td.ellipsis.rtl{text-align:left}tr th.rtl,tr td.rtl{direction:rtl}tr th{font-weight:bold}tr td.gpm-actions{line-height:1;text-align:right;position:relative;padding-right:2.5rem;min-height:38px}tr td.gpm-actions .gpm-details-expand{position:absolute;top:12px;right:12px}tr td.gpm-details{margin:0;padding:0}@media only all and (max-width: 47.938em){tr td.gpm-details{word-wrap:break-word}}tr td.gpm-details>.table-wrapper{display:none}tr td.gpm-details>.table-wrapper td{border-bottom:0}tr td.gpm-details tbody{width:100%}tr:last-child td{border-bottom:0}table.noflex{display:table;table-layout:auto}table.noflex thead{display:table-header-group}table.noflex tbody{display:table-row-group}table.noflex tr{display:table-row}table.noflex tr td,table.noflex tr th{flex:none;display:table-cell}.button-group{position:relative;display:inline-block;vertical-align:top}.button-group>.button:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.button-group>.button:first-child{margin-left:0 !important}.button-group>.button+.dropdown-toggle{text-align:center;padding-right:8px;padding-left:8px}.button-group>.button+.dropdown-toggle i{margin:0}.button-group>.button:last-child:not(:first-child),.button-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.button-group .button+.button,.button-group .button+.button-group,.button-group .button-group+.button,.button-group .button-group+.button-group{margin-left:-3px}.button-group:last-child .dropdown-menu{left:inherit;right:0}.button-group .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:150px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:4px}.button-group .dropdown-menu .button{margin-right:0 !important}.button-group .dropdown-menu.language-switcher{min-width:50px}.button-group .dropdown-menu.lang-switcher{min-width:150px;left:inherit;right:0}.button-group .dropdown-menu.lang-switcher button{width:100%}.button-group .dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden}.button-group .dropdown-menu li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143}.button-group .dropdown-menu li>a:focus,.button-group .dropdown-menu li>a:hover{text-decoration:none}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}#admin-main .admin-block a.gumroad-button{padding:0.5rem 1rem !important;font-size:inherit !important;font-weight:400 !important;line-height:inherit !important;font-family:inherit !important;border-radius:4px !important;box-shadow:inherit !important}#admin-main .admin-block a.gumroad-button .gumroad-button-logo{display:none !important;background-image:none !important}#error{text-align:center;display:flex;align-items:center;justify-content:center;height:100%;padding-bottom:6rem}#error h1{font-size:4.9rem}#error p{margin:1rem 0}#admin-login{max-width:24rem;margin:0 auto}#admin-login.wide{max-width:50rem}#admin-login.wide h1{height:100px}#admin-login.wide h1.custom-logo img{height:80px}#admin-login.wide form>.padding{padding:3rem 2rem 8rem 2rem}#admin-login.wide form>.padding>div{width:49%;display:inline-block}@media only all and (max-width: 47.938em){#admin-login.wide form>.padding>div{width:100%;margin-right:0}}#admin-login.wide form>.padding .form-field{padding:0 1rem}#admin-login.wide form label{padding:0}#admin-login.wide form input{margin-bottom:1rem;text-align:left}#admin-login.wide form input::-webkit-input-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide form input::-moz-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide form input:-moz-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide form input:-ms-input-placeholder{font-size:1rem;line-height:2rem}#admin-login.wide .grid{display:block}#admin-login.wide .form-label,#admin-login.wide .form-data{display:block;width:100%;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}#admin-login .form-field{padding-left:0;margin-bottom:0}#admin-login .form-label{display:none}#admin-login .form-data{padding-right:0}#admin-login .wrapper-spacer{width:100% !important;display:block !important;padding:0 1rem}#admin-login .wrapper-spacer h3{padding-left:1rem}#admin-login .instructions{display:block;padding:2rem 3rem 0;margin:0;font-size:1.3rem}#admin-login .instructions p{margin:0}#admin-login h1{font-size:0;color:transparent;height:216px;margin:0;overflow:hidden;display:flex;align-items:center;justify-content:center}#admin-login h1.text-logo{text-align:center;font-size:4rem}#admin-login h1.custom-logo img{max-height:160px}#admin-login h1.default-logo svg{height:320px}#admin-login h5{margin-top:0;text-align:center}#admin-login form{position:relative}#admin-login form .padding{padding:3rem 3rem 6rem 3rem}#admin-login form input{margin-bottom:2rem;font-size:1.4rem;line-height:1.5;text-align:center;font-weight:300;-webkit-font-smoothing:auto}#admin-login form .form-actions{display:block !important;width:100% !important;text-align:center;position:absolute;bottom:0;left:0;right:0;padding:1.5rem 0}#admin-login form .form-actions .button{margin-bottom:2px}#admin-login form .form-actions button:first-child{margin-right:1rem}#admin-login .alert{text-align:center;padding:1rem 3rem}.twofa-secret-code{font-weight:bold}.twofa-wrapper{margin-top:5px}.twofa-secret{position:absolute;opacity:0;visibility:hidden;transition:opacity 600ms, visibility 600ms}.twofa-secret.show{position:static;visibility:visible;opacity:1}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar{float:left;visibility:visible;opacity:1;width:4.2rem}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-logo h3{font-size:0}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-logo h3:first-letter{font-size:2.5rem}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .custom-logo{margin-right:0;padding-right:15px}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .custom-logo img{padding:0 5px}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #grav-logo-small{display:inline-block}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #grav-logo-large{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .front-end{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-user-details{padding:15px 0 15px 10px;text-align:left}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar .admin-user-names{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-menu em{display:none}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-menu li .badges .updates{border-radius:100%;position:absolute;top:4px;right:10px;font-size:9px;line-height:12px;padding:1px 3px;min-width:15px}.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #admin-menu li .badges .count{display:none}@media only all and (min-width: 74.938em){.sidebar-closed:not(.sidebar-quickopen) #admin-sidebar #open-handle .fa-angle-right:before{content:"\f105"}}.sidebar-closed:not(.sidebar-quickopen) #admin-main{margin-left:4.2rem}.sidebar-open #admin-sidebar{z-index:10001;float:left;visibility:visible;opacity:1;width:240px}.sidebar-open #admin-sidebar h3{font-size:1.2rem}.sidebar-open #admin-sidebar h3:first-letter{font-size:1.2rem}.sidebar-open #admin-sidebar #grav-logo-small{display:none}.sidebar-open #admin-sidebar #grav-logo-large{display:inline-block}.sidebar-open #admin-sidebar #admin-user-details{padding:15px 10px;text-align:left}.sidebar-open #admin-sidebar .admin-user-names{display:block}.sidebar-open #admin-sidebar .front-end{display:inline-block}.sidebar-open #admin-sidebar #admin-menu em{display:inline}.sidebar-open #admin-sidebar #admin-menu li .badges .updates{border-bottom-right-radius:0;border-top-right-radius:0;position:relative;top:auto;right:auto}.sidebar-open #admin-sidebar #admin-menu li .badges .count{display:inline-block}@media only all and (min-width: 47.938em) and (max-width: 74.938em){.sidebar-open #admin-sidebar #open-handle .fa-angle-right:before{content:"\f104"}}#admin-sidebar{position:absolute;left:0;top:0;bottom:0;width:100%;max-height:100vh;opacity:0;z-index:3}#admin-sidebar #open-handle{display:block;position:absolute;cursor:pointer;right:0;top:0;width:15px;height:4.2rem;text-align:center;line-height:4.2rem;font-size:12px;border-top-right-radius:3px;border-bottom-right-radius:3px}@media only all and (min-width: 74.938em){#admin-sidebar #open-handle .fa-angle-right:before{content:"\f104"}}#admin-sidebar.sidebar-is-visible{opacity:1;visibility:visible}@media only all and (max-width: 47.938em){#admin-sidebar{z-index:5}}@media only all and (min-width: 47.938em){#admin-sidebar{float:left;visibility:visible;opacity:1;width:4.2rem}}@media only all and (min-width: 74.938em){#admin-sidebar{float:left;visibility:visible;opacity:1;width:240px}}#admin-logo{height:4.2rem;display:flex;align-items:center;justify-content:center}#admin-logo.nav-hover .admin-logo{margin-right:0}#admin-logo .admin-logo{margin-right:-10px;display:flex;align-items:center}@media only all and (min-width: 47.938em){#admin-logo .admin-logo{margin-right:0}#admin-logo .admin-logo.custom-logo{padding-right:15px}#admin-logo .admin-logo.custom-logo img{padding:0 5px}}#admin-logo .admin-logo a:not(.front-end){display:inherit}#admin-logo .admin-logo.custom-logo img{max-height:30px}#admin-logo .front-end{margin-left:15px;opacity:0.6}@media only all and (max-width: 47.938em){#admin-logo .front-end{display:none}}@media only all and (min-width: 47.938em){#admin-logo .front-end{display:none}}@media only all and (min-width: 74.938em){#admin-logo .front-end{display:inline-block}}#admin-logo #grav-logo-small{height:30px;display:none}@media only all and (min-width: 47.938em){#admin-logo #grav-logo-small{display:inline-block}}@media only all and (min-width: 74.938em){#admin-logo #grav-logo-small{display:none}}#admin-logo #grav-logo-large{height:30px}@media only all and (min-width: 47.938em){#admin-logo #grav-logo-large{display:none}}@media only all and (min-width: 74.938em){#admin-logo #grav-logo-large{display:inline-block}}#admin-logo h3{font-size:1.5rem;margin:0}@media only all and (min-width: 47.938em){#admin-logo h3{font-size:0}#admin-logo h3:first-letter{font-size:2.5rem}}@media only all and (min-width: 74.938em){#admin-logo h3{font-size:1.5rem}#admin-logo h3:first-letter{font-size:1.5rem}}#admin-logo h3 i{font-size:1rem;vertical-align:middle;margin-top:-1px}.block-userinfo img{width:200px;height:200px;object-fit:cover}.block-userinfo ~ .block-file{margin-top:-5rem !important}#offline-status{padding:.2rem 1rem;text-align:center;display:none}#offline-status .fa-plane{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}#admin-user-details img{width:47px;height:47px;object-fit:cover}#admin-user-details,.admin-user-details{padding:15px 10px;min-height:80px;overflow:hidden;text-align:left}@media only all and (min-width: 47.938em) and (max-width: 74.938em){#admin-user-details,.admin-user-details{padding:1rem 10px;text-align:center}}#admin-user-details img,.admin-user-details img{-webkit-transition:all 0.5s ease;-moz-transition:all 0.5s ease;transition:all 0.5s ease;border-radius:100%;float:left}#admin-user-details .admin-user-names,.admin-user-details .admin-user-names{margin-left:60px;margin-top:5px;display:block}@media only all and (min-width: 47.938em) and (max-width: 74.938em){#admin-user-details .admin-user-names,.admin-user-details .admin-user-names{display:none}}#admin-user-details .admin-user-names h4,#admin-user-details .admin-user-names h5,.admin-user-details .admin-user-names h4,.admin-user-details .admin-user-names h5{margin:0;font-size:1rem;line-height:1.3}#admin-user-details .admin-user-names .badge,#admin-user-details .admin-user-names .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.sidebar-open #admin-sidebar #admin-menu li .badges #admin-user-details .admin-user-names .updates,#admin-user-details .admin-user-names .gpm .gpm-testing,.gpm #admin-user-details .admin-user-names .gpm-testing,.admin-user-details .admin-user-names .badge,.admin-user-details .admin-user-names .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.sidebar-open #admin-sidebar #admin-menu li .badges .admin-user-details .admin-user-names .updates,.admin-user-details .admin-user-names .gpm .gpm-testing,.gpm .admin-user-details .admin-user-names .gpm-testing{font-size:0.8rem}#admin-user-details .admin-user-names h5,.admin-user-details .admin-user-names h5{opacity:0.7;font-size:0.9rem}#admin-nav-quick-tray{margin:0;list-style:none;padding-left:26px;padding-right:10px}#admin-nav-quick-tray li{cursor:pointer;width:24px;margin:3px 0 5px}#admin-nav-quick-tray i{transition:all .2s ease-in-out}#admin-nav-quick-tray i:hover{transform:scale(1.2)}.content-padding #messages.default-box-shadow{margin-bottom:1.5rem}@media only all and (max-width: 47.938em){.content-padding #messages.default-box-shadow{margin-bottom:0.5rem}}.admin-menu-wrapper{height:calc(100vh - 180px)}@media only all and (min-width: 47.938em) and (max-width: 74.938em){.admin-menu-wrapper{height:calc(100vh - 136px)}}#admin-menu{display:block;margin:0;padding:0;list-style:none}#admin-menu em{font-style:normal}@media only all and (min-width: 47.938em) and (max-width: 74.938em){#admin-menu em{display:none}}#admin-menu li .badges{float:right;margin-right:1rem}#admin-menu li .badges .badge,.sidebar-open #admin-sidebar #admin-menu li .badges .updates,#admin-menu li .badges .gpm .gpm-testing,.gpm #admin-menu li .badges .gpm-testing{display:inline-block;margin-right:-5px}#admin-menu li .badges .updates{display:none}@media only all and (min-width: 47.938em) and (max-width: 74.938em){#admin-menu li .badges .count{display:none}}#admin-menu li .badges.with-updates .count{border-bottom-left-radius:0;border-top-left-radius:0}#admin-menu li .badges.with-updates .updates{border-bottom-right-radius:0;border-top-right-radius:0;display:inline-block}@media only all and (min-width: 47.938em) and (max-width: 74.938em){#admin-menu li .badges.with-updates .updates{border-radius:100%;position:absolute;top:4px;right:10px;font-size:9px;line-height:12px;padding:1px 3px;min-width:15px}}#admin-menu li a{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;display:block;padding-left:25px;padding-top:0.7rem;padding-bottom:0.7rem;position:relative}#admin-menu li a .fa{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;margin-right:8px}#admin-menu li.selected a{padding-left:16px}@media only all and (min-width: 74.938em){body.sidebar-quickopen #admin-main{margin-left:4.2rem}}@media only all and (min-width: 47.938em){#admin-main{margin-left:4.2rem}}@media only all and (min-width: 74.938em){#admin-main{margin-left:240px}}#admin-main .form-label label .hint:after,#admin-main .form-label label [data-hint]:after{max-width:300px;min-width:150px;display:inline-table;white-space:initial;line-height:1.2}#admin-main h1{margin:0;font-size:1.3rem;text-align:left;letter-spacing:-1px;line-height:1.5}#admin-main .padding{padding:1.5rem}#admin-main .lines-button{display:none;margin-left:.375rem}#admin-main .lines-button:focus{outline:none}@media only all and (max-width: 47.938em){#admin-main .lines-button{display:inline-block}}#admin-main .button{white-space:nowrap}#admin-main .titlebar{position:relative;height:4.2rem;padding:0 1.5rem;z-index:4;box-shadow:0px 3px 15px 0px rgba(0,0,0,0.1)}@media only all and (max-width: 47.938em){#admin-main .titlebar{padding:0 .375rem 0 4rem}}#admin-main .titlebar h1{display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis}@media only all and (max-width: 47.938em){#admin-main .titlebar h1{font-size:18px}#admin-main .titlebar h1 i{display:none}}#admin-main .titlebar .button-bar{padding:0;white-space:nowrap;z-index:4}#admin-main .titlebar .preview{font-size:90%}#admin-main .titlebar .button{padding:0.5rem 0.4rem;vertical-align:top;margin-right:-2px}@media only all and (max-width: 47.938em){#admin-main .titlebar .button{font-size:0;padding:0.5rem 0.5rem;min-height:36px}#admin-main .titlebar .button i{font-size:20px;margin-right:0}}@media only all and (max-width: 20.875em){#admin-main .titlebar .button{padding:0.5rem 0.2rem}}#admin-main .titlebar span.button{cursor:default;pointer-events:none}@media only all and (max-width: 47.938em){#admin-main .titlebar .dropdown-menu .button{font-size:0.9rem}}#admin-main .admin-block .alert{margin-top:-2rem;margin-bottom:2rem}#admin-main .alert:before{font-family:FontAwesome;margin-right:5px}#admin-main .alert.info:before{content:"\f0a1"}#admin-main .alert.warning:before{content:"\f071"}#admin-main .alert.note:before{content:"\f24a"}#admin-main .alert.grav:before{font-family:FontAwesome, sans-serif;content:"\f2d6";vertical-align:bottom}#admin-main .alert.grav #grav-update-button{margin-top:-3px;float:right}#admin-main .grav-update{padding:0 1.5rem;margin-top:-2rem;margin-bottom:1rem;display:none}#admin-main .grav-update:after{content:"";display:table;clear:both}@media only all and (max-width: 47.938em){#admin-main .grav-update{padding:0 1rem}}#admin-main .grav-update .button{float:right;margin-top:0.6rem;margin-left:1rem;line-height:1.5}#admin-main .grav-update p{line-height:3rem;margin:0;display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis}#admin-main .grav-update span[class="hint--left"]::after{line-height:1.5}#admin-main .grav-update i{padding-right:0.5rem}#admin-main .grav-update.grav+.content-wrapper{height:calc(100vh - 4.2rem - 3rem)}#admin-main .content-wrapper{position:relative;height:calc(100vh - 4.2rem)}#admin-main .content-padding{padding:1.5rem}@media only all and (max-width: 47.938em){#admin-main .content-padding{padding:0}}#admin-main .admin-block{padding:1rem 0}#admin-main .admin-block:empty{padding:0}#admin-main .admin-block h1{padding:0 1.5rem 0.5rem;margin:0 0 1rem}@media only all and (max-width: 47.938em){#admin-main .admin-block h1{padding:0 1rem 0.5rem}}#admin-main .admin-block h1.no_underline{border-bottom:0}#admin-main .admin-block .button-bar{margin:0 1.5rem}@media only all and (max-width: 47.938em){#admin-main .admin-block .button-bar{margin:-1rem 0 1rem 0;padding:0 1rem;text-align:center}#admin-main .admin-block .button-bar .button{width:100%}}#admin-main .flush-bottom.button-bar{margin:1rem -1.5rem -1rem;padding:1rem;float:none;display:flex}@media only all and (max-width: 47.938em){#admin-main .flush-bottom.button-bar.stats-bar{font-size:90%}#admin-main .flush-bottom.button-bar.stats-bar b{font-size:1.5rem}}#admin-main .flush-bottom.button-bar .button{margin:0;height:37px}#admin-main .flush-bottom.button-bar .button.dropdown-toggle{margin-left:-4px}#admin-main .danger,#admin-main .success{position:relative}#admin-main .danger.button-bar,#admin-main .success.button-bar{margin:2rem 0 -1rem;height:70px;padding:1rem;float:none}.content-padding #admin-dashboard .dashboard-item-flex:nth-of-type(2n) .dashboard-item{margin-right:0;margin-left:.75rem}.content-padding #admin-dashboard .dashboard-item-flex:nth-of-type(2n+1) .dashboard-item{margin-left:0;margin-right:.75rem}.content-padding #admin-dashboard .dashboard-item{margin-bottom:1.5rem}#admin-dashboard{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-moz-flex-flow:row wrap;flex-flow:row wrap}#admin-dashboard .dashboard-item-flex{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column nowrap;-moz-flex-flow:column nowrap;flex-flow:column nowrap;width:50%}@media only all and (max-width: 47.938em){#admin-dashboard .dashboard-item-flex{width:100%}#admin-dashboard .dashboard-item-flex .dashboard-item{margin-right:0px !important;margin-left:0px !important;margin-bottom:10px !important}}#admin-dashboard .dashboard-item>div:not(.widget-content){padding:1rem 1.5rem}#admin-dashboard .dashboard-item h1 .right{float:right}#admin-dashboard .dashboard-item.admin-block{padding:1rem 0}#admin-dashboard .dashboard-item.admin-block ul{margin:0 0 1rem 0;padding:0;list-style:none}#admin-dashboard .dashboard-item.admin-block li{margin:0;padding:0.425rem 1.5rem 0.2rem 1.5rem}#admin-dashboard .dashboard-item.admin-block li:last-child{border-bottom:0}#admin-dashboard .chart-loader{position:relative;text-align:center}#admin-dashboard .chart-loader .fa{display:block;position:absolute;width:100%;text-align:center;font-size:4rem;margin-top:-2rem}#admin-dashboard .widget-content{position:relative;min-height:335px;padding:0}#admin-dashboard .widget-loader{position:absolute;text-align:center;top:50%;left:50%;width:100%;transform:translate(-50%, -50%)}#admin-dashboard .widget-loader .fa{font-size:4rem}#admin-dashboard #updates p{text-align:center;margin:0}#admin-dashboard #updates .updates-chart{width:50%;float:left}#admin-dashboard #updates .flush-bottom.button-bar{height:70px;flex-direction:row-reverse}#admin-dashboard #updates .chart-wrapper{position:relative}#admin-dashboard #updates .backups-chart{position:relative;width:50%;float:left}#admin-dashboard #updates .ct-chart{min-height:157px}#admin-dashboard #updates .numeric{display:block;position:absolute;width:100%;text-align:center;font-size:1.5rem;line-height:1}#admin-dashboard #updates .numeric em{display:block;font-style:normal;font-size:1rem}#admin-dashboard #updates .admin-update-charts{min-height:191px}#admin-dashboard #updates .admin-update-charts:after{content:"";display:table;clear:both}#admin-dashboard #updates .button-bar>.button:not(.dropdown-toggle){margin-left:4px;height:37px}#admin-dashboard #popularity .ct-chart{min-height:171px}#admin-dashboard #popularity .button-bar{height:100px;padding:0 1rem;display:flex}#admin-dashboard .dashboard-item .admin-statistics-chart{position:relative}#admin-dashboard .dashboard-item p{text-align:center;margin:0}#admin-dashboard .dashboard-item .stat{width:33%;text-align:center;display:flex;flex-direction:column;justify-content:center}#admin-dashboard .dashboard-item .stat b{display:block;font-size:2.5rem;line-height:1;font-weight:300}#admin-dashboard .dashboard-item .stat i{display:block;font-style:normal}#admin-dashboard #news-feed .date{float:right;z-index:1}#admin-dashboard #news-feed li a{display:block;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis;z-index:0}#admin-dashboard #news-feed li a:before{font-family:FontAwesome;margin-right:10px;content:"\f1ea"}.no-flick,.card-item{-webkit-transform:translate3d(0, 0, 0)}.card-row{-webkit-box-pack:justify;-moz-box-pack:justify;box-pack:justify;-webkit-justify-content:space-between;-moz-justify-content:space-between;-ms-justify-content:space-between;-o-justify-content:space-between;justify-content:space-between;-ms-flex-pack:justify}.card-item{overflow:hidden;padding:1rem;margin:0;position:relative;width:31%;max-width:21rem;margin-bottom:2rem}@media only all and (min-width: 48em) and (max-width: 59.938em){.card-item{width:48%}}@media only all and (max-width: 47.938em){.card-item{width:100%}}.card-item h4{font-size:1.2rem;line-height:1.2}.user-details{text-align:left}.user-details img{border-radius:100%}.user-details h2{margin:0;font-size:2.1rem !important;margin:1rem 0 0 !important;line-height:1.5}.user-details h2 span{font-size:1.2rem}.user-details h5{font-size:1.1rem;margin:0;linep-height:1.2}.user-details .gravatar{font-size:0.9rem;padding:0}@media only all and (max-width: 47.938em){.user-details{text-align:center}}#footer{text-align:center;padding:3rem 0 1rem}#footer p{margin:0}.ct-chart .ct-series .ct-bar{stroke-width:20px}#popularity .ct-chart{margin:0 -10px -10px}#popularity .ct-chart .ct-chart-bar{padding:4px 6px 1px 10px}#latest .page-title,#latest .page-route{overflow:auto}#overlay{position:fixed;width:25%;height:100%;z-index:999999;left:75%;top:0;display:none}@media only all and (max-width: 47.938em){#overlay{display:none !important}}.gpm-item-info+#blueprints .block-tabs{padding-top:16px}.plugins-notifications-container,.themes-notifications-container{margin-bottom:2rem}.package-dependencies-container li{height:35px}.package-dependencies-container li .button{height:30px;float:right;margin-right:10px;line-height:20px}.pointer-events-disabled{pointer-events:none}.updates-checked .button-reinstall-package{display:inline-block !important}.updates-checked.has-updates .button-reinstall-package{display:none !important}.preview-wrapper .content-padding{position:absolute;top:0;bottom:0;right:0;left:0}@media only all and (max-width: 47.938em){#admin-main .config-wrapper-system .form-tabs.side-tabs>.tabs-nav{display:none;width:0}#admin-main .config-wrapper-system .form-tabs.side-tabs>.tabs-content{width:100%}#admin-main .config-wrapper-system .form-tabs.side-tabs>.tabs-content .tab__content{display:block}}.logs-output form .form-data{display:flex;margin:0 -0.5rem}@media only all and (max-width: 30em){.logs-output form .form-data{display:block}}.logs-output form .forms-select-wrapper{display:block;flex:1;margin:0.5rem 0.5rem}.logs-output h1{margin-top:2rem !important}.logs-output h3{padding:0.5rem 1.5rem;font-size:1.1rem}@media only all and (max-width: 47.938em){.logs-output h3{padding:0.5rem 1rem}}.logs-output table.noflex td{vertical-align:top}.logs-output table.noflex td.date,.logs-output table.noflex td.level{white-space:nowrap}.logs-output table.noflex td.date{opacity:0.7}.logs-output table.noflex th.level,.logs-output table.noflex td.level{padding:0.375rem 30px}.logs-output table.noflex td.level{font-weight:bold}.logs-output table.noflex td.level span.badge,.logs-output table.noflex td.level .sidebar-open #admin-sidebar #admin-menu li .badges span.updates,.sidebar-open #admin-sidebar #admin-menu li .badges .logs-output table.noflex td.level span.updates,.logs-output table.noflex td.level .gpm span.gpm-testing,.gpm .logs-output table.noflex td.level span.gpm-testing{font-size:0.7rem}.logs-output table.noflex td.message{width:100%;word-break:break-all}.logs-output table.noflex .trace ol{margin:10px 0;padding:0;font-size:0.7rem}.logs-output table.noflex .trace ol code{font-size:0.7rem;display:block;white-space:pre-wrap}.permissions-container{max-width:800px}.permissions-container .badge .icon-super,.permissions-container .sidebar-open #admin-sidebar #admin-menu li .badges .updates .icon-super,.sidebar-open #admin-sidebar #admin-menu li .badges .permissions-container .updates .icon-super,.permissions-container .gpm .gpm-testing .icon-super,.gpm .permissions-container .gpm-testing .icon-super{display:block;height:20px;width:14px;line-height:1.5}.permissions-container .badge .icon-super:before,.permissions-container .sidebar-open #admin-sidebar #admin-menu li .badges .updates .icon-super:before,.sidebar-open #admin-sidebar #admin-menu li .badges .permissions-container .updates .icon-super:before,.permissions-container .gpm .gpm-testing .icon-super:before,.gpm .permissions-container .gpm-testing .icon-super:before{content:url("../images/icons/crown.svg")}.permissions-container .switch-toggle input+label:before{font-family:FontAwesome;margin-right:5px}.permissions-container .switch-toggle input.label0+label:before{content:"\f05e"}.permissions-container .switch-toggle input.label1+label:before{content:"\f00c"}.permissions-container fieldset{margin:0 0 1rem 0;padding:1rem;border-radius:4px}.permissions-container fieldset legend{padding:0 0.5rem;margin-left:-0.5rem;font-size:120%}.permissions-container fieldset fieldset{margin:0;border:0;padding:0.5rem 0 0 2rem}.permissions-container fieldset fieldset legend{padding:0;margin:0}.permission-container{display:flex}.permission-container .permission-name{flex-grow:1;position:relative;overflow:hidden;margin-right:8px;padding-top:9px}.permission-container .permission-name span:not(.badge){position:relative;padding-right:5px}.permission-container .permission-name span.badge,.permission-container .permission-name .sidebar-open #admin-sidebar #admin-menu li .badges span.updates,.sidebar-open #admin-sidebar #admin-menu li .badges .permission-container .permission-name span.updates,.permission-container .permission-name .gpm span.gpm-testing,.gpm .permission-container .permission-name span.gpm-testing{position:relative;float:right;font-size:100%;border-radius:20px;margin-right:-2px}.permission-container .permission-name:before{content:"........................................................................................................................................";height:1px;position:absolute;right:100%;left:0}.reports-content .report-output table,.reports-content .report-output tbody,.reports-content .report-output thead{display:table;width:100%}.reports-content .report-output table thead tr th{display:table-cell}.reports-content .report-output table tbody tr td{display:table-cell}#pages-filters{margin-bottom:1rem;margin-top:-1rem;padding:1rem}#pages-filters .button-border{padding:.375rem .375rem;white-space:nowrap}#pages-filters .button-border.adv-options:after{content:"\f078";font-family:"FontAwesome", sans-serif;margin-left:5px}#pages-filters .button-border.adv-options.open:after{content:"\f077"}#pages-filters .filters-bar{display:flex;align-items:center}#pages-filters .filters-bar .button-border{margin-left:0.5rem}#pages-filters .filters-advanced{overflow:hidden;transition:max-height 0.3s ease-out;height:auto;max-height:600px}#pages-filters .filters-advanced.hide{max-height:0}#pages-filters .filters-advanced .button-border{display:inline-block;margin-top:0.5rem}#pages-filters .filters-advanced fieldset{margin:1rem 0 0;border-radius:4px}#pages-filters .filters-advanced fieldset legend{margin-left:-0.5rem;padding:0 0.5rem}#pages-filters .filters-advanced fieldset .checkboxes{margin-right:1.5rem}#pages-filters .filters-advanced fieldset .checkboxes label{padding-left:1.7rem}#pages-filters .filters-advanced fieldset .checkboxes label:before{margin-top:-0.6rem;margin-right:0;width:1.25rem;height:1.25rem}#pages-content-wrapper .grav-loading{min-height:600px}#pages-content-wrapper .grav-loading .grav-loader{margin:0 auto;position:relative;top:230px}#pages-content-wrapper .fjs-path-bar{margin-bottom:-1rem;border-bottom:0;padding:0.5rem}#pages-content-wrapper .fjs-col{width:33.33333334%;min-width:300px}#pages-content-wrapper .fjs-item{max-width:100%}#pages-content-wrapper .fjs-item>.fjs-item-wrapper{display:flex;justify-content:flex-start;padding:0;margin:1px 0;border-top:1px solid transparent;border-bottom:1px solid transparent;outline:0}#pages-content-wrapper .fjs-item a{padding:7px 2px 7px 5px}#pages-content-wrapper .fjs-item a *{-webkit-transition:all 0.5s ease;-moz-transition:all 0.5s ease;transition:all 0.5s ease}#pages-content-wrapper .fjs-item .fjs-title{display:flex;align-items:center;flex-grow:1;max-width:100%;overflow:auto}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-toggle{padding:0;background:transparent;border:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu{top:inherit;left:inherit;right:inherit;bottom:inherit;position:fixed;cursor:default;padding:0 0 0.5rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;width:350px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .tags{padding-top:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu a{cursor:pointer}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table{display:table}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table tbody{width:100%;display:inherit}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table tr{display:table-row}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table td{display:table-cell;text-align:left;flex:none;word-break:break-all;white-space:normal}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table td:first-child{padding-left:0;width:80px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu table td:last-child{padding-right:0;width:calc(100% - 80px)}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .divider{height:0;margin:.5rem 0;overflow:hidden}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar{border-radius:4px 4px 0 0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar+.divider{margin-top:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a.dropdown-item:hover{border-radius:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a.dropdown-item:hover:first-child{border-top-left-radius:4px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a.dropdown-item:hover:last-child{border-top-right-radius:4px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .dropdown-item{display:block;width:100%;padding:0.5rem;clear:both;font-weight:400;text-align:inherit;white-space:nowrap;border:0;border-radius:4px}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .dropdown-item:hover{text-decoration:none}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .fa{display:inline-block;width:16px;height:inherit;text-align:left}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar{display:flex}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar a,#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .action-bar i{text-align:center}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .details,#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .tags,#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .langs{padding:0 .5rem 0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .infos{margin:0 .15rem}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .infos ul{margin:0;padding:0}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .langs .lang{display:inline-block}#pages-content-wrapper .fjs-item .fjs-title [data-flexpages-dotx3] .dropdown-menu .langs .lang .fa{font-size:0.6rem;padding:0 0.15rem}#pages-content-wrapper .fjs-item .fjs-title>a{flex-grow:1;overflow:hidden}#pages-content-wrapper .fjs-item .button-group .fa{font-size:0.9rem;width:28px;height:28px;display:flex;justify-content:center;align-items:center}#pages-content-wrapper .fjs-item .button-group .fa.disabled{opacity:0}#pages-content-wrapper .fjs-item .fjs-icon{position:relative;display:flex;justify-content:center;align-items:center;overflow:visible !important;width:34px;height:34px;min-width:34px;border-radius:50%;margin-right:5px;margin-left:5px}#pages-content-wrapper .fjs-item .fjs-icon:before{position:relative;content:url("../images/icons/book-edit.svg");flex:1;max-width:20px;margin-right:0px;margin-bottom:-2px}#pages-content-wrapper .fjs-item .fjs-icon.modular:before{content:url("../images/icons/module-four.svg")}#pages-content-wrapper .fjs-item .fjs-icon.home:before{content:url("../images/icons/house.svg")}#pages-content-wrapper .fjs-item .fjs-icon.lock:before{content:url("../images/icons/touchid-lock.svg")}#pages-content-wrapper .fjs-item .fjs-icon.badge-published:after,#pages-content-wrapper .fjs-item .fjs-icon.badge-unpublished:after{content:''}#pages-content-wrapper .fjs-item .fjs-icon:after,#pages-content-wrapper .fjs-item .fjs-icon .badge-clock{display:block;position:absolute;top:-2px;right:-2px;height:12px;width:12px;border-radius:50%}#pages-content-wrapper .fjs-item .fjs-icon .badge-clock{border-radius:0;content:url("../images/icons/clock-hands.svg");z-index:2}#pages-content-wrapper .fjs-item .fjs-icon .badge-lang{position:absolute;bottom:-4px;bottom:-4px;left:50%;transform:translateX(-50%);line-height:1.2;font-weight:600;font-size:0.6rem;border-radius:4px;padding:0 3px}#pages-content-wrapper .fjs-item .fjs-info{flex-grow:1;flex-direction:column;line-height:1.2}#pages-content-wrapper .fjs-item .fjs-info>b,#pages-content-wrapper .fjs-item .fjs-info>em{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-style:normal}#pages-content-wrapper .fjs-item .fjs-info>b{font-size:110%}#pages-content-wrapper .fjs-item .fjs-actions{display:flex;align-items:center;padding-right:3px;position:relative}#pages-content-wrapper .fjs-item .fjs-actions>*{margin-right:3px}#pages-content-wrapper .fjs-item .fjs-actions>*:last-child{margin-right:0}#pages-content-wrapper .fjs-children{position:relative;display:flex;align-items:center;justify-content:center;height:28px;min-width:50px;outline:0;background-color:transparent}#pages-content-wrapper .fjs-children .badge,#pages-content-wrapper .fjs-children .sidebar-open #admin-sidebar #admin-menu li .badges .updates,.sidebar-open #admin-sidebar #admin-menu li .badges #pages-content-wrapper .fjs-children .updates,#pages-content-wrapper .fjs-children .gpm .gpm-testing,.gpm #pages-content-wrapper .fjs-children .gpm-testing{font-size:0.7rem;margin-right:5px;padding:0px 3px;line-height:1.3}#pages-content-wrapper .fjs-children .fa{display:inline-block !important;width:auto !important;font-size:14px}#pages-content-wrapper .breadcrumb-node{font-size:0.9rem}#pages-content-wrapper .breadcrumb-node:hover span{text-decoration:none}#pages-content-wrapper .breadcrumb-node>i.fa{margin:0 0.4rem -4px}#pages-content-wrapper .breadcrumb-node>i:not(.fa){position:relative;display:inline-flex;justify-content:center;align-items:center;overflow:inherit;width:16px;height:16px;border-radius:50%;margin-right:0.35rem}#pages-content-wrapper .breadcrumb-node>i:not(.fa):before{position:relative;content:url("../images/icons/book-edit.svg");flex:1;max-width:10px}#pages-content-wrapper .breadcrumb-node>i:not(.fa).modular:before{content:url("../images/icons/module-four.svg")}#pages-content-wrapper .breadcrumb-node>i:not(.fa).home:before{content:url("../images/icons/house.svg")}#pages-content-wrapper .breadcrumb-node>i:not(.fa).lock:before{content:url("../images/icons/touchid-lock.svg")}#pages-content-wrapper .breadcrumb-node>i:not(.fa).badge-published:after,#pages-content-wrapper .breadcrumb-node>i:not(.fa).badge-unpublished:after{content:''}.pages-list{list-style:none;margin:0;padding:0}.pages-list ul{list-style:none;margin:0;padding:0}.pages-list li{margin:0;padding:0}.pages-list .row{-webkit-transition:all 0.2s ease;-moz-transition:all 0.2s ease;transition:all 0.2s ease;line-height:2.5rem;padding-right:3rem}@media only all and (max-width: 47.938em){.pages-list .row{padding-right:1rem}}.pages-list .row [data-hint]:after{line-height:1 !important;width:auto !important;white-space:nowrap !important}.pages-list .row p.page-route{display:block;margin:0;line-height:1;font-size:0.9rem;word-break:break-all}.pages-list .row p.page-route .spacer{display:inline-block;margin:0 0.3rem}.pages-list .row .hint--bottom:before,.pages-list .row .hint--bottom:after{left:4px}.pages-list .row .hint:after,.pages-list .row [data-hint]:after{border-radius:2px}.pages-list .row .badge.lang,.pages-list .row .sidebar-open #admin-sidebar #admin-menu li .badges .lang.updates,.sidebar-open #admin-sidebar #admin-menu li .badges .pages-list .row .lang.updates,.pages-list .row .gpm .lang.gpm-testing,.gpm .pages-list .row .lang.gpm-testing{margin-left:8px}.pages-list .page-home{font-size:1.4rem;margin-left:10px;vertical-align:middle}.pages-list .page-info{font-size:1.1rem;margin-left:10px;vertical-align:middle}.pages-list .page-edit{text-overflow:ellipsis;display:inline-block;max-width:100%;white-space:nowrap;overflow-x:hidden}.pages-list .page-item__row{display:flex}.pages-list .page-item__toggle{width:25px;line-height:1;padding-top:7px}.pages-list .page-item__content{padding:5px 0;width:calc(100% - 50px)}.pages-list .page-item__content-name{line-height:1}.pages-list .page-item__content-hint{line-height:1.3;vertical-align:middle;max-width:100%}.pages-list .page-item__tools{width:90px;text-align:right;font-size:1.4rem}.pages-list .page-item__tools .page-view{margin-right:4px}.pages-list .page-icon{color:#0082BA;font-weight:700}.pages-list .page-icon.children-open:before{content:'\f056'}.pages-list .page-icon.children-closed:before{content:'\f055'}.pages-list .page-icon.not-routable{color:#CE431D}.pages-list .page-icon.not-visible{color:#999}.pages-list .page-icon.modular{color:#9055AF}.pages-list #pages-legend{margin-top:1.5rem;text-align:center}.pages-list #pages-legend h2,.pages-list #pages-legend ul,.pages-list #pages-legend li{display:inline-block}.pages-list #pages-legend li{margin-right:0.75rem}#page-filtering{margin:0 1.5rem 1rem}#page-filtering:after{content:"";display:table;clear:both}@media only all and (max-width: 47.938em){#page-filtering{margin:-1rem 1rem 1rem}}#page-filtering .page-filters{width:60%;float:left}@media only all and (max-width: 47.938em){#page-filtering .page-filters{width:100%}}#page-filtering .page-search{position:relative;width:40%;float:left;padding-left:2rem;text-indent:2.5rem}#page-filtering .page-search:after{position:absolute;right:15px;top:10px;content:'\f002';font-family:'FontAwesome'}@media only all and (max-width: 47.938em){#page-filtering .page-search{width:100%;padding-top:1rem;padding-left:0rem}#page-filtering .page-search:after{top:1.5rem}}#page-filtering .page-shortcuts{clear:both;padding-top:5px}#page-filtering .page-shortcuts:after{content:"";display:table;clear:both}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input,#page-filtering .selectize-control.multi .selectize-input{padding:.375rem .375rem}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input.has-items,#page-filtering .selectize-control.multi .selectize-input.has-items{padding-top:6px;padding-bottom:4px}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input input,#page-filtering .selectize-control.multi .selectize-input input{font-size:.9rem;line-height:1.5}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item,#page-filtering .selectize-control.multi .selectize-input .item{color:#777;background:#eee;padding:2px 10px}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='Routable'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='Routable']{background:#CE431D;color:#fff}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='NonRoutable'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='NonRoutable']{color:#CE431D}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='Visible'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='Visible']{background:#0082BA;color:#fff}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='NonVisible'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='NonVisible']{color:#0082BA}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='Modular'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='Modular']{background:#9055AF;color:#fff}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='NonModular'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='NonModular']{color:#9055AF}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='Published'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='Published']{background:#0093B8;color:#fff}#page-filtering .selectize-control.single.plugin-remove_button .selectize-input .item[data-value='NonPublished'],#page-filtering .selectize-control.multi .selectize-input .item[data-value='NonPublished']{color:#0093B8}.admin-form-wrapper{position:relative}#admin-topbar{position:absolute;right:5px;height:50px}@media only all and (max-width: 47.938em){#admin-topbar{position:relative;width:100%;right:0;padding:0 .5rem;margin:-2rem 0 2rem 0}}#admin-topbar #admin-mode-toggle,#admin-topbar #admin-lang-toggle{height:38px;display:inline-flex;vertical-align:inherit}@media only all and (max-width: 47.938em){#admin-topbar #admin-mode-toggle,#admin-topbar #admin-lang-toggle{float:right}}#admin-topbar #admin-lang-toggle{z-index:3;float:left;margin-right:5px}#admin-topbar #admin-lang-toggle button{padding:0.3rem 0.5rem;height:100%}#admin-topbar #admin-lang-toggle .dropdown-menu button{width:100%}#admin-topbar .switch-grav{border:0;line-height:38px}@media only all and (max-width: 47.938em){#admin-topbar .switch-toggle{width:100%}}.depth-0 .row{padding-left:3rem}@media only all and (max-width: 47.938em){.depth-0 .row{padding-left:1rem}}.depth-1 .row{padding-left:6rem}@media only all and (max-width: 47.938em){.depth-1 .row{padding-left:2rem}}.depth-2 .row{padding-left:9rem}@media only all and (max-width: 47.938em){.depth-2 .row{padding-left:3rem}}.depth-3 .row{padding-left:12rem}@media only all and (max-width: 47.938em){.depth-3 .row{padding-left:4rem}}.depth-4 .row{padding-left:15rem}@media only all and (max-width: 47.938em){.depth-4 .row{padding-left:5rem}}.depth-5 .row{padding-left:18rem}@media only all and (max-width: 47.938em){.depth-5 .row{padding-left:6rem}}.depth-6 .row{padding-left:21rem}@media only all and (max-width: 47.938em){.depth-6 .row{padding-left:7rem}}.depth-7 .row{padding-left:24rem}@media only all and (max-width: 47.938em){.depth-7 .row{padding-left:8rem}}.depth-8 .row{padding-left:27rem}@media only all and (max-width: 47.938em){.depth-8 .row{padding-left:9rem}}.depth-9 .row{padding-left:30rem}@media only all and (max-width: 47.938em){.depth-9 .row{padding-left:10rem}}.selectize-route-option{display:flex}.selectize-route-option>:first-child{flex:0 0 auto;width:auto;margin-right:10px}.selectize-route-option>:last-child{flex:1 1 auto}.selectize-route-option>:last-child>*{display:block}.hidden{display:none !important}.switch-toggle input[type=radio]{display:none !important}[data-acl_picker] .permissions-item{display:flex;align-items:center;vertical-align:center}[data-acl_picker] .permissions-item .selectize-control,[data-acl_picker] .permissions-item a,[data-acl_picker] .permissions-item input,[data-acl_picker] .permissions-item button{display:inline-flex;margin:0 .5rem;align-items:center;vertical-align:center}[data-acl_picker] .permissions-item .selectize-control{flex-grow:1}[data-acl_picker] .permissions-item .selectize-control{margin-left:0}[data-acl_picker] .permissions-item .switch-toggle{margin:0}[data-acl_picker] .permissions-item:last-child{margin-right:0}html.remodal-is-locked{overflow:hidden;touch-action:none}.remodal,[data-remodal-id]{display:none}.remodal-overlay{position:fixed;z-index:99999;top:-5000px;right:-5000px;bottom:-5000px;left:-5000px;display:none}.remodal-wrapper{position:fixed;z-index:100000;top:0;right:0;bottom:0;left:0;display:none;overflow:auto;text-align:center;-webkit-overflow-scrolling:touch}.remodal-wrapper:after{display:inline-block;height:100%;margin-left:-0.05em;content:''}.remodal-overlay,.remodal-wrapper{backface-visibility:hidden}.remodal{position:relative;outline:none;text-size-adjust:100%}.remodal-is-initialized{display:inline-block}.remodal-bg.remodal-is-opening,.remodal-bg.remodal-is-opened{-webkit-filter:blur(3px);filter:blur(3px)}.remodal-overlay{background:rgba(43,46,56,0.9)}.remodal-overlay.remodal-is-opening,.remodal-overlay.remodal-is-closing{animation-duration:0.3s;animation-fill-mode:forwards}.remodal-overlay.remodal-is-opening{animation-name:remodal-overlay-opening-keyframes}.remodal-overlay.remodal-is-closing{animation-name:remodal-overlay-closing-keyframes}.remodal-wrapper{padding:10px 10px 0}.remodal{box-sizing:border-box;width:100%;margin-bottom:10px;padding:35px;transform:translate3d(0, 0, 0)}.remodal.remodal-is-opening,.remodal.remodal-is-closing{animation-duration:0.3s;animation-fill-mode:forwards}.remodal.remodal-is-opening{animation-name:remodal-opening-keyframes}.remodal.remodal-is-closing{animation-name:remodal-closing-keyframes}.remodal,.remodal-wrapper:after{vertical-align:middle}.remodal-close{position:absolute;top:0;left:0;display:block;overflow:visible;width:35px;height:35px;margin:0;padding:0;cursor:pointer;transition:color 0.2s;text-decoration:none;border:0;outline:0;background:transparent}.remodal-close:before{font-family:Arial, "Helvetica CY", "Nimbus Sans L", sans-serif !important;font-size:25px;line-height:35px;position:absolute;top:0;left:0;display:block;width:35px;content:"\00d7";text-align:center}@keyframes remodal-opening-keyframes{from{transform:scale(1.05);opacity:0}to{transform:none;opacity:1}}@keyframes remodal-closing-keyframes{from{transform:scale(1);opacity:1}to{transform:scale(0.95);opacity:0}}@keyframes remodal-overlay-opening-keyframes{from{opacity:0}to{opacity:1}}@keyframes remodal-overlay-closing-keyframes{from{opacity:1}to{opacity:0}}@media only screen and (min-width: 641px){.remodal{max-width:700px}}.lt-ie9 .remodal-overlay{background:#2b2e38}.lt-ie9 .remodal{width:700px}.remodal{padding:35px 0 0;text-align:left;box-shadow:0 10px 20px rgba(0,0,0,0.3);border-radius:3px}.remodal ul li{margin-left:27px;list-style-type:square}.admin-pages .form-tabs:first-child{margin-top:-1rem}.admin-pages .form-tabs .tabs-nav{margin-right:180px}@media only all and (max-width: 47.938em){.admin-pages .form-tabs .tabs-nav{margin-right:0 !important}}.form-tabs .tabs-nav{display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;padding-top:1px}.form-tabs .tabs-nav a{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1;transition:color 0.5s ease, background 0.5s ease;cursor:pointer;min-height:50px;text-align:center;padding:4px;display:flex;align-items:center;justify-content:center}.form-tabs .tabs-nav span{display:inline-block;line-height:1.1}.form-tabs.subtle .tabs-nav{margin-right:0 !important}.form-tabs .tabs-content .tab__content{display:none;padding-top:2rem}.form-tabs .tabs-content .tab__content.active{display:block}.form-tabs.side-tabs{display:flex;background:none}.form-tabs.side-tabs>.tabs-nav{width:20%;display:block;padding-top:1.5rem}.form-tabs.side-tabs>.tabs-nav a{text-align:left;flex:none;justify-content:left;padding-left:15px}.form-tabs.side-tabs>.tabs-content{width:80%}.grav-editor-content{position:relative}.grav-editor [data-grav-editor]{height:300px}.grav-editor [data-grav-editor].code-mirrored{padding:0;border:0;position:absolute;z-index:-1;display:block !important}.grav-editor .CodeMirror .CodeMirror-vscrollbar,.grav-editor .CodeMirror .CodeMirror-hscrollbar{z-index:1}.grav-editor .CodeMirror .CodeMirror-vscrollbar:focus,.grav-editor .CodeMirror .CodeMirror-hscrollbar:focus{outline:none}.grav-editor .CodeMirror-scroll{position:static;padding-bottom:15px}.grav-editor .grav-editor-resizer{height:6px;cursor:row-resize;border-radius:0 0 3px 3px;position:relative;z-index:1}.grav-editor .CodeMirror-selected{background:#D6E8FF}.grav-editor .CodeMirror-gutters{height:100% !important}.grav-editor-fullscreen{position:fixed;top:4.2rem;left:0;bottom:0;right:0;z-index:3;padding:0 !important;margin:0 !important;display:flex;flex-direction:column}.grav-editor-fullscreen .grav-editor-content{display:flex;flex-direction:column;flex:1 0 0;overflow-y:auto}.grav-editor-fullscreen .grav-editor-content,.grav-editor-fullscreen .CodeMirror-wrap,.grav-editor-fullscreen .grav-editor-preview{height:100% !important}.grav-editor-fullscreen .grav-editor-toolbar{flex:0 0 auto}.grav-editor-fullscreen .grav-editor-toolbar,.grav-editor-fullscreen .grav-editor-toolbar ul li:first-child a,.grav-editor-fullscreen .grav-editor-toolbar-flip ul li:last-child a{border-radius:0 !important}.grav-editor-fullscreen .grav-editor-resizer{display:none}.grav-editor-fullscreen .grav-editor-content.is-active{display:flex}.grav-editor-toolbar{-webkit-box-align:stretch;-moz-box-align:stretch;box-align:stretch;-webkit-align-items:stretch;-moz-align-items:stretch;-ms-align-items:stretch;-o-align-items:stretch;align-items:stretch;-ms-flex-align:stretch;display:-webkit-box;display:-moz-box;display:box;display:-webkit-flex;display:-moz-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-orient:horizontal;-webkit-flex-direction:row;-moz-flex-direction:row;flex-direction:row;-ms-flex-direction:row}.grav-editor-toolbar .grav-editor-actions{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;-webkit-flex:1;-moz-flex:1;-ms-flex:1;flex:1}.grav-editor-toolbar .grav-editor-modes{flex-shrink:0;margin-right:2px}.grav-editor-toolbar .grav-editor-modes ul{float:right}.grav-editor-toolbar:after{content:"";display:table;clear:both}.grav-editor-toolbar ul{list-style:none;margin:0;padding:0}.grav-editor-toolbar ul li{display:inline-block}.grav-editor-toolbar ul li:first-child a{border-top-left-radius:4px}.grav-editor-toolbar ul a{display:inline-block;cursor:pointer;background-color:transparent;border-radius:0;padding:0.4rem;margin-top:-1px;border:1px solid transparent}.grav-editor-toolbar ul a,.grav-editor-toolbar ul a:hover,.grav-editor-toolbar ul a:active,.grav-editor-toolbar ul a:focus{outline:0}.grav-editor-toolbar .dropdown-menu li{width:50%}.grav-editor-hide-toolbar{display:none}.grav-editor-toolbar .grav-editor-modes li:first-child a{border-top-left-radius:0}.grav-editor-toolbar .grav-editor-modes li:last-child a{border-top-right-radius:4px}.grav-editor-toolbar-flip{float:right}.grav-editor-toolbar-flip ul li:last-child a{border-top-right-radius:4px}.grav-editor-content,.grav-editor-preview{cursor:text;display:none}.grav-editor-content:after,.grav-editor-preview:after{content:"";display:table;clear:both}.grav-editor-content.is-active,.grav-editor-preview.is-active{display:block}.grav-editor-content .CodeMirror-lines{padding:10px 0}.grav-editor-content.fontsize-lg{font-size:16px}.grav-editor-content.fontsize-lg.fontfamily-sans{font-size:18px}.grav-editor-content.fontsize-md{font-size:14px}.grav-editor-content.fontsize-md.fontfamily-sans{font-size:16px}.grav-editor-content.font-size-sm{font-size:12px}.grav-editor-content.font-size-sm.fontfamily-sans{font-size:14px}#admin-main .admin-block .grav-editor-preview{padding:20px;overflow-y:scroll;position:relative;line-height:1.5;background:#fff !important;color:#555 !important}#admin-main .admin-block .grav-editor-preview a{color:#1c90fb !important}#admin-main .admin-block .grav-editor-preview h1{font-size:36px}#admin-main .admin-block .grav-editor-preview h2{font-size:28px}#admin-main .admin-block .grav-editor-preview h3{font-size:22px}#admin-main .admin-block .grav-editor-preview h4{font-size:18px}#admin-main .admin-block .grav-editor-preview h5{font-size:16px}#admin-main .admin-block .grav-editor-preview h6{font-size:14px}#admin-main .admin-block .grav-editor-preview h1,#admin-main .admin-block .grav-editor-preview h2,#admin-main .admin-block .grav-editor-preview h3,#admin-main .admin-block .grav-editor-preview h4,#admin-main .admin-block .grav-editor-preview h5,#admin-main .admin-block .grav-editor-preview h6{padding:0;margin:0.5rem 0;border-bottom:0 !important;color:#333 !important;font-weight:bold}#admin-main .admin-block .grav-editor-preview p{padding:0;margin:0.5rem 0 1rem}#admin-main .admin-block .grav-editor-preview pre code{color:#1c90fb;font-size:14px}#admin-main .admin-block .grav-editor-preview blockquote{border-color:#ccc !important;background-color:#f0f0f0 !important}#admin-main .admin-block .grav-editor-preview blockquote p{color:#444 !important}#admin-main .admin-block .grav-editor-preview hr{border-color:#eee !important}#admin-main .admin-block .grav-editor-preview table td,#admin-main .admin-block .grav-editor-preview table th,#admin-main .admin-block .grav-editor-preview table tr{border-color:#eee !important}.grav-editor-toolbar [data-hint]:after{white-space:nowrap !important;max-width:300px;width:auto !important}.grav-editor-toolbar p{margin-top:10px;margin-bottom:10px;padding-left:20px}.dropzone{position:relative;border-radius:4px;min-height:4rem}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-drag-hover{border-color:rgba(0,0,0,0.15);background:rgba(0,0,0,0.04)}.dropzone.dz-started .dz-message{display:none}.dropzone .dz-message{opacity:1;-ms-filter:none;filter:none}.dropzone .dz-preview{position:relative;display:inline-block;margin:1rem 1rem 1.5rem 1rem;vertical-align:top}.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail]{display:none}.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{font-family:FontAwesome;display:none;position:absolute;width:22px;height:22px;font-size:18px;line-height:25px;border-radius:100%;text-align:center;right:2px;top:2px}.dropzone .dz-preview .dz-success-mark span,.dropzone .dz-preview .dz-error-mark span{display:none}.dropzone .dz-preview:hover .dz-success-mark,.dropzone .dz-preview:hover .dz-error-mark{display:none}.dropzone .dz-preview .dz-success-mark::after{content:'\f00c'}.dropzone .dz-preview .dz-error-mark::after{content:'\f12a'}.dropzone .dz-preview .dz-progress{position:absolute;top:150px;left:0px;right:0px;height:4px;display:none}.dropzone .dz-preview .dz-progress .dz-upload{display:block;position:absolute;top:0;bottom:0;left:0;width:0%}.dropzone .dz-preview .dz-error-message{display:none;position:absolute;top:0;left:0;right:0;font-size:0.9rem;line-height:1.2;padding:8px 10px;z-index:500}.dropzone .dz-preview.dz-processing .dz-progress{display:block}.dropzone .dz-preview:hover .dz-remove,.dropzone .dz-preview:hover .dz-unset,.dropzone .dz-preview:hover .dz-view,.dropzone .dz-preview:hover .dz-insert,.dropzone .dz-preview:hover .dz-metadata{display:block}.dropzone .dz-preview.dz-processing:hover .dz-unset{display:none}.dropzone .dz-preview:hover.dz-error .dz-error-message{display:block}.dropzone .dz-preview .dz-filename{position:absolute;z-index:1;bottom:0;width:100%;padding:0 5px;background:rgba(0,0,0,0.3);color:#fff;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-remove,.dropzone .dz-preview .dz-unset,.dropzone .dz-preview .dz-view,.dropzone .dz-preview .dz-insert,.dropzone .dz-preview .dz-metadata{display:none;position:absolute;width:25px;height:25px;right:-26px;font-size:0;cursor:pointer}.dropzone .dz-preview .dz-remove:hover:after,.dropzone .dz-preview .dz-unset:hover:after,.dropzone .dz-preview .dz-view:hover:after,.dropzone .dz-preview .dz-insert:hover:after,.dropzone .dz-preview .dz-metadata:hover:after{color:#fff}.dropzone .dz-preview .dz-remove:after,.dropzone .dz-preview .dz-unset:after,.dropzone .dz-preview .dz-view:after,.dropzone .dz-preview .dz-insert:after,.dropzone .dz-preview .dz-metadata:after{text-align:center;display:block;color:#999;font-family:FontAwesome;font-size:18px;line-height:25px}.dropzone .dz-preview .dz-insert{top:-1px;border-top-right-radius:4px}.dropzone .dz-preview .dz-insert:after{content:'\f055'}.dropzone .dz-preview .dz-view{top:24px}.dropzone .dz-preview .dz-view:after{content:'\f06e'}.dropzone .dz-preview .dz-remove{top:72px}.dropzone .dz-preview .dz-remove:after{content:'\f1f8'}.dropzone .dz-preview .dz-unset{top:96px;border-bottom-right-radius:4px}.dropzone .dz-preview .dz-unset:after{content:'\f00d'}.dropzone .dz-preview .dz-metadata{top:49px}.dropzone .dz-preview .dz-metadata:after{content:'\f05a'}.dropzone .dz-preview.dz-no-editor .dz-view{top:-1px;border-top-right-radius:4px}.dropzone .dz-preview.dz-no-editor .dz-remove{top:24px}.dropzone .dz-preview.dz-no-editor .dz-unset{top:72px}.dropzone .dz-preview:hover .dz-remove.file-thumbnail-remove,.dropzone .dz-preview:hover .dz-unset.file-thumbnail-remove{display:block}.dropzone .dz-preview:hover .dz-remove:not(.file-thumbnail-remove),.dropzone .dz-preview:hover .dz-unset:not(.file-thumbnail-remove){border-left:0}.dropzone .dz-preview.dz-processing .dz-details{overflow:hidden}.dropzone .dz-preview .dz-details{width:200px;height:150px;position:relative;font-size:0.8rem;background-image:url("../images/transparent.png")}.dropzone .dz-preview .dz-details img{position:absolute;object-fit:contain;top:0;left:0;width:200px;height:150px}.dropzone .dz-preview .dz-details .dz-size{position:absolute;bottom:-28px;left:0;right:0;text-align:center;font-size:0.8rem;height:28px;line-height:28px}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message span{cursor:pointer;text-align:center;font-size:1.2rem;line-height:1.4;margin:1rem 0}.dropzone *{cursor:default}.toast-title{font-weight:bold}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#ffffff}.toast-message a:hover{color:#cccccc;text-decoration:none}.toast-close-button{position:relative;right:-0.3em;top:-0.3em;float:right;font-size:20px;font-weight:bold;color:#ffffff;-webkit-text-shadow:0 1px 0 #ffffff;text-shadow:0 1px 0 #ffffff;opacity:0.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}.toast-close-button:hover,.toast-close-button:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:5rem;right:1.5rem}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;color:#ffffff;opacity:0.9;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=90);filter:alpha(opacity=90)}#toast-container>:hover{opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important}#toast-container>.toast-error{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important}#toast-container>.toast-success{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important}#toast-container>.toast-warning{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important}#toast-container.toast-top-center>div,#toast-container.toast-bottom-center>div{width:300px;margin:auto}#toast-container.toast-top-full-width>div,#toast-container.toast-bottom-full-width>div{width:96%;margin:auto}.toast-warning{background-color:#f89406}.toast-warning .button{background-color:#c67605;color:rgba(255,255,255,0.85);border-radius:4px;background:#945904}.toast-warning .button:focus,.toast-warning .button:hover{background:#a47229;color:#fff}.toast-warning .button.dropdown-toggle{border-left:1px solid #7c4a03}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000000;opacity:0.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width: 240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 241px) and (max-width: 480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-0.2em;top:-0.2em}}@media all and (min-width: 481px) and (max-width: 768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.gpm td{border:0}.gpm .gpm-search{position:relative;padding:0 3rem 0.5rem 1.5rem;text-indent:2.5rem}.gpm .gpm-search:after{position:absolute;right:60px;top:10px;content:'\f002';font-family:'FontAwesome'}@media only all and (max-width: 47.938em){.gpm .gpm-search{padding-left:1rem}}.gpm .sort-actions{float:right;margin:0 24px}@media only all and (max-width: 47.938em){.gpm .sort-actions{float:none}}.gpm .sort-actions>*{font-size:1rem;display:inline-block;vertical-align:middle}.gpm .sort-actions .sort-icon{cursor:pointer}.gpm .sort-actions select{margin:0;display:none}.gpm .sort-actions .selectize-input{width:9rem;vertical-align:middle;line-height:21px}.gpm .sort-actions .selectize-input input{line-height:21px}.gpm .gpm-name{white-space:nowrap}@media only all and (max-width: 47.938em){.gpm .gpm-name{white-space:normal}}.gpm .gpm-version{padding-left:0.5rem;font-size:0.9rem}.gpm .gpm-testing{border-radius:3px;padding:0 4px;font-size:0.75rem}.gpm .theme .gpm-testing{line-height:1rem;position:absolute;top:0;right:0;border-radius:0 0 0 3px;line-height:1.3}.gpm .gpm-actions .enabled,.gpm .gpm-actions .disabled{font-size:1.6rem}.gpm .gpm-item-info{position:relative;padding-bottom:1rem;margin-bottom:3rem;overflow:hidden}.gpm .gpm-item-info .gpm-item-icon{position:absolute;right:1.5rem;font-size:20rem}.gpm .gpm-item-info table{position:relative}.gpm .gpm-item-info td{border:0;text-align:left !important}.gpm .gpm-item-info td.double{padding-left:2rem}.gpm .gpm-item-info td:first-child{white-space:nowrap}@media only all and (max-width: 47.938em){.gpm .gpm-item-info td{word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}}.gpm .gpm-item-info tr:hover{background:inherit}.gpm .badge.update,.gpm .sidebar-open #admin-sidebar #admin-menu li .badges .update.updates,.sidebar-open #admin-sidebar #admin-menu li .badges .gpm .update.updates,.gpm .update.gpm-testing{display:inline-block;border-radius:4px;padding:2px 10px;margin-left:1rem}.gpm .gpm-ribbon{overflow:hidden;white-space:nowrap;position:absolute;top:1rem;right:-2rem;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.gpm .gpm-ribbon a{display:block;font-weight:bold;font-size:0.9rem;padding:5px 40px;text-align:center}.gpm .themes{padding:1.5rem}.gpm .themes .card-item{padding:1rem 1rem 4rem}.gpm .themes .gpm-screenshot{text-align:center}.gpm .themes .gpm-screenshot img{margin:0 auto;max-height:300px}.gpm .themes .gpm-name{margin-bottom:0.5rem;white-space:inherit}.gpm .themes .gpm-actions{margin:1rem -1rem -1rem -1rem;height:4rem;text-align:center;padding:1rem;font-size:1rem;font-weight:bold;position:absolute;left:0;right:0;bottom:1rem}.gpm .themes .active-theme .gpm-actions,.gpm .themes.inactive-theme .gpm-actions{line-height:2rem}.gpm .themes .inactive-theme .gpm-actions{display:block;font-weight:normal}.gpm #gpm-release-toggle{float:right;margin-right:3rem}#phpinfo img{display:none}#phpinfo table{margin:1rem 0 0}#phpinfo tr:hover{background:transparent}#phpinfo td{word-wrap:break-word;overflow:hidden}#phpinfo td h1{margin:0rem -1.5rem 0rem !important}#phpinfo hr{border-bottom:0}#phpinfo h1{font-size:2.3rem}#phpinfo h2{font-size:1.7rem;margin:3rem 1.5rem 0rem !important}.lines-button{display:inline-block;padding:.5rem .5rem 1rem;transition:.3s;cursor:pointer;user-select:none;border-radius:.4rem;position:absolute;z-index:100002;top:10px;background:transparent}.lines-button:hover{opacity:1}.lines-button:active{transition:none;background:rgba(0,0,0,0.1)}.lines{position:relative;display:inline-block;width:2rem;height:.28571rem;border-radius:.14286rem;transition:.3s}.lines:before,.lines:after{display:inline-block;width:2rem;height:.28571rem;border-radius:.14286rem;transition:.3s;position:absolute;left:0;content:'';transform-origin:.14286rem center}.lines:before{top:.5rem}.lines:after{top:-.5rem}.sidebar-mobile-open .lines-button.x .lines{background:transparent !important}.sidebar-mobile-open .lines-button.x .lines:before,.sidebar-mobile-open .lines-button.x .lines:after{transform-origin:50% 50%;top:0;width:2rem}.sidebar-mobile-open .lines-button.x .lines:before{transform:rotate3d(0, 0, 1, 45deg)}.sidebar-mobile-open .lines-button.x .lines:after{transform:rotate3d(0, 0, 1, -45deg)}.single-notification.alert{position:relative}.hide-notification{right:1rem;position:absolute}.alert.raw{padding:0 !important}#admin-dashboard #notifications .admin-block{padding:1rem 0}#admin-dashboard #notifications li{white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;text-overflow:ellipsis}.dashboard-notifications-container,.plugins-notifications-container,.themes-notifications-container{margin-bottom:1rem}.dashboard-notifications-container .raw,.plugins-notifications-container .raw,.themes-notifications-container .raw{position:relative}.dashboard-notifications-container .raw .hide-notification,.plugins-notifications-container .raw .hide-notification,.themes-notifications-container .raw .hide-notification{position:absolute;top:5px;right:5px;line-height:1;font-size:1.2rem;color:#333;text-shadow:-1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff}.dashboard-notifications-container:empty,.plugins-notifications-container:empty,.themes-notifications-container:empty{margin:0}#admin-main .content-padding div[class*=notifications-container] .alert a:hover{text-decoration:underline}#admin-main .content-padding div[class*=notifications-container] .alert a.button,#admin-main .content-padding div[class*=notifications-container] .alert span.button,#admin-main .content-padding div[class*=notifications-container] .alert button.button{float:right;text-decoration:none}#admin-main .content-padding .top-notifications-container{margin-bottom:1rem}#admin-main .content-padding .top-notifications-container .alert a{cursor:pointer}@media only all and (max-width: 47.938em){#admin-main .content-padding .top-notifications-container{padding-bottom:20px}}#admin-main #notifications td:last-child{position:relative}#admin-main #notifications td:last-child span{position:absolute;display:block;right:2rem;top:6px}#admin-main #notifications .badge.alert,#admin-main #notifications .sidebar-open #admin-sidebar #admin-menu li .badges .alert.updates,.sidebar-open #admin-sidebar #admin-menu li .badges #admin-main #notifications .alert.updates,#admin-main #notifications .gpm .alert.gpm-testing,.gpm #admin-main #notifications .alert.gpm-testing{margin:0;font-size:0.7rem;text-transform:uppercase;margin-right:5px;border-radius:4px;vertical-align:middle;line-height:1.7}#admin-main #notifications .badge.alert i,#admin-main #notifications .sidebar-open #admin-sidebar #admin-menu li .badges .alert.updates i,.sidebar-open #admin-sidebar #admin-menu li .badges #admin-main #notifications .alert.updates i,#admin-main #notifications .gpm .alert.gpm-testing i,.gpm #admin-main #notifications .alert.gpm-testing i{margin-right:3px}body .changelog{text-align:left;margin-top:-2rem}body .changelog .remodal-close{display:none}body .changelog code{white-space:pre-wrap;vertical-align:inherit;font-size:0.8rem}body .changelog h1{text-align:center;font-size:2rem;margin:1rem 0;letter-spacing:-1px}body .changelog .remodal-confirm{float:right}body .changelog .changelog-overflow{max-height:500px;overflow:auto;margin-bottom:1em;border:1px solid #ddd;border-radius:3px;background:white;padding:1em}body .changelog h3,body .changelog h4{text-align:center;font-weight:bold}body .changelog h3{font-size:1.3rem;margin:1.3rem 0 0 0;line-height:1}body .changelog h3+h4{font-size:1rem;margin:0 0 1rem 0;color:#666}body .changelog ol{list-style:none;padding:0;margin:0 0 3rem 0}body .changelog ol a[href='#new']+ul>li:before{background-color:#207DE5;content:'New'}body .changelog ol a[href='#improved']+ul>li:before{background-color:#FBCA04;color:#333;content:'Improved'}body .changelog ol a[href='#bugfix']+ul>li:before{background-color:#FC2929;content:'Bugfix'}body .changelog ul{list-style:none;padding:0}body .changelog ul li{margin-bottom:0.5rem;padding-left:6rem;margin-left:0;list-style:none}body .changelog ul li:before{margin-left:-6rem;display:inline-block;border-radius:2px;color:#fff;font-weight:bold;margin-right:1rem;text-align:center;width:5rem;font-size:0.8rem;padding:2px 0;font-style:normal}.pages-list-container{width:30%;flex:none !important;padding:0 !important}.pages-list-container .pages-list{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pages-list-container .pages-list.depth-0 .row{padding-left:.5rem}.pages-list-container .pages-list .depth-1 .row{padding-left:1rem}.pages-list-container .pages-list .page-item .page-link{cursor:pointer}.pages-list-container .pages-list .row.active{background-color:rgba(0,166,207,0.1)}.media-page-dropzone{width:100%;margin-bottom:20px}.media-container.size-2-3{flex:none !important;width:70%}.media-container .filters{padding-bottom:30px;width:100%}.media-container .filters .filter-wrapper{margin-left:10px;margin-right:10px}.media-container .filters .filter-wrapper:after{margin-top:-25px;border:0px none;content:"\f078";font-family:"FontAwesome";right:12px;top:50%;line-height:0;color:#9BA2A6;pointer-events:none;float:right;padding-right:10px}.media-container .filters .filter option{padding:8px}.media-container .files{padding-left:30px;padding-right:30px}.media-container .admin-media-title{color:#333;margin:0px;font-size:.8rem;line-height:1.3}.media-container .card-item{width:49%}.media-container .card-item.empty-space{background:rgba(255,255,255,0.4);border:1px solid rgba(0,0,0,0.1) !important;color:rgba(0,0,0,0.3);max-width:none;display:block;text-align:center;top:20%;height:10rem !important;width:50% !important;margin:0 auto !important;font-size:2rem;line-height:8rem;transform:translateY(-50%)}.media-container .media-details{text-align:center}.media-container .media-details img{width:50%}.media-container .media-details h2{margin:0;font-size:1.8rem}.media-container .media-details h5{color:#9BA2A6;font-size:1.1rem;margin:0}.media-container h1{padding:0 2rem 0.5rem !important}.media-container .admin-form-wrapper{width:100%;padding-bottom:20px}.spinning-wheel{text-align:center}.media-container.in-modal h1{font-size:30px !important;margin-top:0px}.media-container.in-modal a{color:#333}.media-container.in-modal .pages-list li{list-style-type:none;margin-left:0}.remodal.remodal-mediapicker{max-width:70vw;padding:0}.media-container{height:70vh}.media-container .grid{justify-content:flex-start}.media-container.in-modal .gm-scrollbar{background:rgba(255,255,255,0.2)}.media-container.in-modal .gm-scrollbar .thumb{background-color:rgba(0,0,0,0.2) !important}.media-container.in-modal .gm-scrollbar .thumb:hover,.media-container.in-modal .gm-scrollbar .thumb.active{background-color:rgba(0,0,0,0.3) !important}.media-container h5{border-bottom:1px solid #ddd;padding:0.5rem 15px;margin:0;height:55px}.media-container .filter-wrapper{float:right;margin-right:5px;margin-top:10px}.media-container .filter-date{width:150px}.media-container .filter-type{width:100px;margin-right:15px}.media-container .pages-list-container{position:relative}.media-container .pages-list-container .pages-list{border-top:0;padding-right:10px;font-size:90%}.media-container .pages-list-container .pages-list .row{transition:none !important;line-height:2rem}.media-container .pages-list-container .pages-list .depth-1 .row{padding-left:2rem}.media-container .pages-list-container .pages-list .depth-2 .row{padding-left:3rem}.media-container .pages-list-container .pages-list .depth-3 .row{padding-left:4rem}.media-container .pages-list-container .pages-list .depth-4 .row{padding-left:5rem}.media-container .pages-list-container .pages-list .depth-5 .row{padding-left:6rem}.media-container .pages-list-container .pages-list .depth-6 .row{padding-left:7rem}.media-container .pages-list-container .pages-list .depth-7 .row{padding-left:8rem}.media-container .pages-list-container .pages-list .depth-8 .row{padding-left:9rem}.media-container .pages-list-container .pages-list .depth-9 .row{padding-left:10rem}.media-container .pages-list-container .mediapicker-scroll{position:absolute;top:55px;bottom:3px;height:inherit}.media-container .thumbs-list-container{position:relative}.media-container .thumbs-list-container .media-range{position:absolute;right:15px;bottom:5px}.media-container .thumbs-list-container .mediapicker-scroll{position:absolute;top:55px;bottom:30px;height:inherit}.media-container .thumbs-list-container .gm-scrollbar.-horizontal{display:none}.media-container #admin-media{padding:15px;height:100%;align-items:flex-start;align-content:flex-start}.media-container #admin-media .card-item{width:100px;padding:2px;margin:0 5px 5px 0;border:0}.media-container #admin-media .card-item img{display:block}.media-container #admin-media .admin-media-details{position:relative}.media-container #admin-media .admin-media-details .admin-media-title{position:absolute;width:100%;bottom:0;background:rgba(0,0,0,0.3);color:#fff;font-size:10px;overflow:hidden;line-height:2;text-indent:2px;white-space:nowrap}[data-remodal-id="metadata"] h1>*{vertical-align:middle}[data-remodal-id="metadata"] h1 strong{display:inline-block;max-width:75%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[data-remodal-id="metadata"] .metadata-preview{display:flex;margin:0 3rem}[data-remodal-id="metadata"] .metadata-preview .meta-preview{max-width:200px}[data-remodal-id="metadata"] .metadata-preview .meta-content ul{margin:0}.jqCron-selector{position:relative}.jqCron-cross,.jqCron-selector-title{cursor:pointer;border-radius:3px;margin:0 0.2em;padding:0 0.5em}.jqCron-cross{border-radius:1em;font-size:80%;padding:0 0.3em}.jqCron-selector-list{left:0.2em;list-style:none;margin:0;padding:0;position:absolute;top:1.5em;z-index:5}.jqCron-selector-list li{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;cursor:default;display:inline-block !important;margin:0;padding:0.1em 0.4em;width:100%}.jqCron-selector-list.cols2{width:4em}.jqCron-selector-list.cols2 li{width:50%}.jqCron-selector-list.cols3{width:6em}.jqCron-selector-list.cols3 li{width:33%}.jqCron-selector-list.cols4{width:8em}.jqCron-selector-list.cols4 li{width:25%}.jqCron-selector-list.cols5{width:10em}.jqCron-selector-list.cols5 li{width:20%}#backups-stats #backups-usage{position:relative;margin-bottom:1.5rem}#backups-stats #backups-usage h1{position:absolute;right:1rem;top:5px}#backups-stats .backups-usage-wrapper{height:40px;background:linear-gradient(90deg, #2ECC40 0%, #01FF70 20%, #FFDC00 40%, #FF851B 60%, #FF4136 80%, #85144b 100%)}#backups-stats .backups-usage-wrapper>div{float:right;height:40px}#backups-stats .backups-usage-wrapper>div.full{width:100%}.backups-content #admin-dashboard{display:block}.backups-content #admin-dashboard #backups-stats{margin-left:1rem;margin-right:1rem}.backups-content #admin-dashboard #backups-stats h1{padding:0rem}@media only all and (max-width: 47.938em){.backups-content #admin-dashboard #backups-stats h1{font-size:1.1rem}}#admin-main .admin-block .scheduler-content .alert{margin-top:-1rem;margin-bottom:2rem}.scheduler-content .secondary-accent .button{float:right;margin-top:-3px}.scheduler-content #cron-install{padding:0 1.5rem}.scheduler-content #cron-install pre{padding:0.5rem}.scheduler-content #cron-install.hide{display:none}#admin-main .admin-block .report-output .alert{margin-top:0;margin-bottom:0}.report-output td .key{font-weight:bold}.direct-install-content{padding:30px}.direct-install-content .button{margin-top:10px;margin-bottom:50px}.colorbar [data-hint]:after{width:300px !important;margin-left:-300px}.colorbar.current-scheme,.colorbar.predefined-scheme{padding-bottom:10px}.colorbar.current-scheme span,.colorbar.predefined-scheme span{color:transparent}.colorbar.predefined-scheme:hover{cursor:pointer}.colorbar.predefined-scheme:hover span{color:white}.colorbar.predefined-scheme:hover .light span{color:black}.colorbar .colorbar-element-container{width:9rem;float:left;display:block;text-align:center;background:white;margin-bottom:1px;margin-right:1px}.colorbar .colorbar-element{width:100%;text-align:center;height:4rem;border-top:0;color:#333}.colorbar .colorbar-element span{font-size:.7rem}.colorbar .colorbar-element input{color:#333;width:100% !important}.colorbar .colorbar-element.light-text{color:#fff}.colorbar .colorbar-element.light-text input{color:#fff}.colorbar .colorbar-title{font-size:0.8rem;font-weight:bold;padding:1px;background-color:rgba(0,0,0,0.05)}.colorbar input{width:100%;border:none;font-size:0.8rem;text-align:center;border-radius:0;height:35px;position:absolute;background:transparent}.colorbar input:focus{outline:none}.colorbar .choose-predefined-scheme{cursor:pointer}.admin-preview-wrapper{display:inline-block;width:8rem;position:relative;margin-right:2rem}.admin-preview-title{text-align:center}.admin-preview{height:10rem;position:relative;border-radius:4px;border-width:2px !important}.ap-overlay{cursor:pointer;opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;border-radius:4px;z-index:2;text-align:center;transition:opacity .4s ease}.ap-overlay:hover{opacity:1;background:rgba(0,0,0,0.4)}.ap-overlay b{display:inline-block;font-weight:normal;margin-top:4rem;background:#111;color:#bbb;border-radius:4px;padding:4px 10px}.ap-overlay b:hover{color:#fff;background:#000}.ap-sidebar{position:absolute;width:25%;top:0;left:0;bottom:0}.ap-logo{height:10%;text-align:center}.ap-logo::after{display:block;position:relative;top:50%;margin:0 auto;transform:translateY(-50%);content:'';height:8px;width:25%}.ap-nav{padding:5px 10px}.ap-text,.ap-text::before,.ap-text::after{margin-top:4px;position:relative;display:block;margin-bottom:3px;height:2px;content:''}.ap-text::before{margin-top:0;top:7px}.ap-text::after{margin-top:0;top:9px}.ap-active{display:block;margin:19px -10px 0;margin-bottom:5px;padding:5px 10px 5px 7px;border-left-width:3px;border-left-style:solid}.ap-active::after{display:block;content:'';height:2px}.ap-toolbar{position:absolute;left:25%;right:0;height:10%;padding:0 10px}.ap-toolbar::after{display:block;position:relative;top:50%;transform:translateY(-50%);content:'';width:33%;height:4px}.ap-button{float:right;position:relative;top:50%;transform:translateY(-50%);height:8px;width:25px}.ap-page{position:absolute;top:10%;left:25%;right:0;bottom:0;padding:10px}.ap-content{height:100%;overflow:hidden}.ap-title{display:block;height:4px;width:25%;margin:8px 10px 5px}.ap-content .ap-text{margin-left:10px;margin-right:10px}.ap-update,.ap-notice,.ap-critical{margin-top:19px;display:block;content:'';padding:5px 10px}.ap-update::after,.ap-notice::after,.ap-critical::after{display:block;content:'';height:2px;width:50%}.ap-update{margin-top:3px}[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto !important;height:auto !important;z-index:0}.simplebar-offset{direction:inherit !important;box-sizing:inherit !important;resize:none !important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box !important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:before,.simplebar-content:after{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit !important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';border-radius:7px;left:2px;right:2px;opacity:0;transition:opacity 0.2s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:0.3;transition:opacity 0s linear}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}.jquery-horizontal-scroll-wrap{position:relative}.jquery-horizontal-scroll-wrap .nav-next,.jquery-horizontal-scroll-wrap .nav-prev{position:absolute;z-index:5;top:50%;font-size:20px;line-height:20px;display:block;padding:30px 8px;color:#fff !important;background:#000;background:rgba(0,0,0,0.65);cursor:pointer;margin-top:-40px}.jquery-horizontal-scroll-wrap .nav-next.hide,.jquery-horizontal-scroll-wrap .nav-prev.hide{display:none}.jquery-horizontal-scroll-wrap .nav-next:hover,.jquery-horizontal-scroll-wrap .nav-next:focus,.jquery-horizontal-scroll-wrap .nav-prev:hover,.jquery-horizontal-scroll-wrap .nav-prev:focus{opacity:1}.jquery-horizontal-scroll-wrap .nav-next:before,.jquery-horizontal-scroll-wrap .nav-prev:before{display:inline;font-family:"FontAwesome"}.jquery-horizontal-scroll-wrap .nav-next{right:0}.jquery-horizontal-scroll-wrap .nav-next:before{content:"\f105"}.jquery-horizontal-scroll-wrap .nav-prev{left:0}.jquery-horizontal-scroll-wrap .nav-prev:before{content:"\f104"}.jquery-horizontal-scroll-wrap .jquery-horizontal-scroll{overflow:auto;position:relative} + +/*# sourceMappingURL=template.css.map */ diff --git a/themes/grav/css-compiled/template.css.map b/themes/grav/css-compiled/template.css.map index 043e7484..787da6f5 100644 --- a/themes/grav/css-compiled/template.css.map +++ b/themes/grav/css-compiled/template.css.map @@ -1 +1 @@ -{"version":3,"file":"template.css","sources":["template.scss","vendor/bourbon/_bourbon.scss","vendor/bourbon/settings/_prefixer.scss","vendor/bourbon/settings/_px-to-em.scss","vendor/bourbon/helpers/_convert-units.scss","vendor/bourbon/helpers/_gradient-positions-parser.scss","vendor/bourbon/helpers/_is-num.scss","vendor/bourbon/helpers/_linear-angle-parser.scss","vendor/bourbon/helpers/_linear-gradient-parser.scss","vendor/bourbon/helpers/_linear-positions-parser.scss","vendor/bourbon/helpers/_linear-side-corner-parser.scss","vendor/bourbon/helpers/_radial-arg-parser.scss","vendor/bourbon/helpers/_radial-positions-parser.scss","vendor/bourbon/helpers/_radial-gradient-parser.scss","vendor/bourbon/helpers/_render-gradients.scss","vendor/bourbon/helpers/_shape-size-stripper.scss","vendor/bourbon/helpers/_str-to-num.scss","vendor/bourbon/functions/_assign.scss","vendor/bourbon/functions/_color-lightness.scss","vendor/bourbon/functions/_flex-grid.scss","vendor/bourbon/functions/_golden-ratio.scss","vendor/bourbon/functions/_grid-width.scss","vendor/bourbon/functions/_modular-scale.scss","vendor/bourbon/functions/_px-to-em.scss","vendor/bourbon/functions/_px-to-rem.scss","vendor/bourbon/functions/_strip-units.scss","vendor/bourbon/functions/_tint-shade.scss","vendor/bourbon/functions/_transition-property-name.scss","vendor/bourbon/functions/_unpack.scss","vendor/bourbon/css3/_animation.scss","vendor/bourbon/css3/_appearance.scss","vendor/bourbon/css3/_backface-visibility.scss","vendor/bourbon/css3/_background.scss","vendor/bourbon/css3/_background-image.scss","vendor/bourbon/css3/_border-image.scss","vendor/bourbon/css3/_border-radius.scss","vendor/bourbon/css3/_box-sizing.scss","vendor/bourbon/css3/_calc.scss","vendor/bourbon/css3/_columns.scss","vendor/bourbon/css3/_filter.scss","vendor/bourbon/css3/_flex-box.scss","vendor/bourbon/css3/_font-face.scss","vendor/bourbon/css3/_hyphens.scss","vendor/bourbon/css3/_hidpi-media-query.scss","vendor/bourbon/css3/_image-rendering.scss","vendor/bourbon/css3/_keyframes.scss","vendor/bourbon/css3/_linear-gradient.scss","vendor/bourbon/css3/_perspective.scss","vendor/bourbon/css3/_radial-gradient.scss","vendor/bourbon/css3/_transform.scss","vendor/bourbon/css3/_transition.scss","vendor/bourbon/css3/_user-select.scss","vendor/bourbon/css3/_placeholder.scss","vendor/bourbon/addons/_button.scss","vendor/bourbon/addons/_clearfix.scss","vendor/bourbon/addons/_directional-values.scss","vendor/bourbon/addons/_ellipsis.scss","vendor/bourbon/addons/_font-family.scss","vendor/bourbon/addons/_hide-text.scss","vendor/bourbon/addons/_html5-input-types.scss","vendor/bourbon/addons/_position.scss","vendor/bourbon/addons/_prefixer.scss","vendor/bourbon/addons/_retina-image.scss","vendor/bourbon/addons/_size.scss","vendor/bourbon/addons/_timing-functions.scss","vendor/bourbon/addons/_triangle.scss","vendor/bourbon/addons/_word-wrap.scss","vendor/bourbon/_bourbon-deprecated-upcoming.scss","configuration/nucleus/_base.scss","configuration/nucleus/_core.scss","configuration/nucleus/_breakpoints.scss","configuration/nucleus/_layout.scss","configuration/nucleus/_typography.scss","configuration/nucleus/_nav.scss","configuration/template/_base.scss","configuration/template/_colors.scss","configuration/template/_variables.scss","nucleus/functions/_base.scss","nucleus/functions/_direction.scss","nucleus/functions/_range.scss","nucleus/mixins/_base.scss","nucleus/mixins/_breakpoints.scss","nucleus/mixins/_utilities.scss","template/modules/_base.scss","template/modules/_buttons.scss","template/modules/_colorpicker.scss","template/modules/_datetimepicker.scss","template/modules/_finderjs.scss","template/modules/_toggle-switch.scss","template/_colors.scss","template/_core.scss","template/_extensions.scss","template/_utilities.scss","template/_header.scss","template/_typography.scss","template/_forms.scss","template/_tables.scss","template/_buttons.scss","template/_errors.scss","template/_login.scss","template/_admin.scss","template/_pages.scss","template/_remodal.scss","template/_tabs.scss","template/_editor.scss","template/_dropzone.scss","template/_toastr.scss","template/_gpm.scss","template/_phpinfo.scss","template/_nav-toggle.scss","template/_notifications.scss","template/_changelog.scss","template/_media.scss","template/_jqcron.scss","template/_tools.scss","template/_whitelabel.scss","template/_scrollbars.scss","template/_horizontal-scroll.scss","template/_custom.scss"],"sourcesContent":["// REQUIRED DEPENDENCIES - DO NOT CHANGE\n\n// Load Third Party Libraries\n@import \"vendor/bourbon/bourbon\";\n\n// Load Nucleus Configuration\n@import \"configuration/nucleus/base\";\n\n// Load Template Configuration\n@import \"configuration/template/base\";\n\n// Load Nucleus Mixins and Functions\n@import \"nucleus/functions/base\";\n@import \"nucleus/mixins/base\";\n\n// Load Template Library\n@import \"template/modules/base\";\n@import \"template/colors\";\n//------------------------------------------\n\n// TEMPLATE COMPONENTS\n\n// Core\n@import \"template/core\";\n\n// Extensions\n@import \"template/extensions\";\n\n// Utilities\n@import \"template/utilities\";\n\n// Header\n@import \"template/header\";\n\n// Typography\n@import \"template/typography\";\n\n// Forms\n@import \"template/forms\";\n\n// Tables\n@import \"template/tables\";\n\n// Buttons\n@import \"template/buttons\";\n\n// Errors\n@import \"template/errors\";\n\n// Login\n@import \"template/login\";\n\n// Admin\n@import \"template/admin\";\n\n// Pages\n@import \"template/pages\";\n\n// Remodal\n@import \"template/remodal\";\n\n// Tabs\n@import \"template/tabs\";\n\n// Editor\n@import \"template/editor\";\n\n// Dropzone\n@import \"template/dropzone\";\n\n// Toastr\n@import \"template/toastr\";\n\n// GPM\n@import \"template/gpm\";\n\n// PHPInfo\n@import \"template/phpinfo\";\n\n// Nav Toggle\n@import \"template/nav-toggle\";\n\n// Notifications\n@import \"template/notifications\";\n\n// Changelog\n@import \"template/changelog\";\n\n// Media\n@import \"template/media\";\n@import \"template/jqcron\";\n\n// Tools\n@import \"template/tools\";\n\n// Whitelabel\n@import \"template/whitelabel\";\n\n// Horizontal Scroll\n@import \"template/scrollbars\";\n\n// Horizontal Scroll\n@import \"template/horizontal-scroll\";\n\n// Custom\n@import \"template/custom\";\n","// Settings\n@import \"settings/prefixer\";\n@import \"settings/px-to-em\";\n\n// Custom Helpers\n@import \"helpers/convert-units\";\n@import \"helpers/gradient-positions-parser\";\n@import \"helpers/is-num\";\n@import \"helpers/linear-angle-parser\";\n@import \"helpers/linear-gradient-parser\";\n@import \"helpers/linear-positions-parser\";\n@import \"helpers/linear-side-corner-parser\";\n@import \"helpers/radial-arg-parser\";\n@import \"helpers/radial-positions-parser\";\n@import \"helpers/radial-gradient-parser\";\n@import \"helpers/render-gradients\";\n@import \"helpers/shape-size-stripper\";\n@import \"helpers/str-to-num\";\n\n// Custom Functions\n@import \"functions/assign\";\n@import \"functions/color-lightness\";\n@import \"functions/flex-grid\";\n@import \"functions/golden-ratio\";\n@import \"functions/grid-width\";\n@import \"functions/modular-scale\";\n@import \"functions/px-to-em\";\n@import \"functions/px-to-rem\";\n@import \"functions/strip-units\";\n@import \"functions/tint-shade\";\n@import \"functions/transition-property-name\";\n@import \"functions/unpack\";\n\n// CSS3 Mixins\n@import \"css3/animation\";\n@import \"css3/appearance\";\n@import \"css3/backface-visibility\";\n@import \"css3/background\";\n@import \"css3/background-image\";\n@import \"css3/border-image\";\n@import \"css3/border-radius\";\n@import \"css3/box-sizing\";\n@import \"css3/calc\";\n@import \"css3/columns\";\n@import \"css3/filter\";\n@import \"css3/flex-box\";\n@import \"css3/font-face\";\n@import \"css3/hyphens\";\n@import \"css3/hidpi-media-query\";\n@import \"css3/image-rendering\";\n@import \"css3/keyframes\";\n@import \"css3/linear-gradient\";\n@import \"css3/perspective\";\n@import \"css3/radial-gradient\";\n@import \"css3/transform\";\n@import \"css3/transition\";\n@import \"css3/user-select\";\n@import \"css3/placeholder\";\n\n// Addons & other mixins\n@import \"addons/button\";\n@import \"addons/clearfix\";\n@import \"addons/directional-values\";\n@import \"addons/ellipsis\";\n@import \"addons/font-family\";\n@import \"addons/hide-text\";\n@import \"addons/html5-input-types\";\n@import \"addons/position\";\n@import \"addons/prefixer\";\n@import \"addons/retina-image\";\n@import \"addons/size\";\n@import \"addons/timing-functions\";\n@import \"addons/triangle\";\n@import \"addons/word-wrap\";\n\n// Soon to be deprecated Mixins\n@import \"bourbon-deprecated-upcoming\";\n","// Variable settings for /addons/prefixer.scss\n$prefix-for-webkit: true !default;\n$prefix-for-mozilla: true !default;\n$prefix-for-microsoft: true !default;\n$prefix-for-opera: true !default;\n$prefix-for-spec: true !default; // required for keyframe mixin\n","$em-base: 16px !default;\n","//************************************************************************//\n// Helper function for str-to-num fn.\n// Source: http://sassmeister.com/gist/9647408\n//************************************************************************//\n@function _convert-units($number, $unit) {\n $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn';\n $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn;\n $index: index($strings, $unit);\n\n @if not $index {\n @warn \"Unknown unit `#{$unit}`.\";\n @return false;\n }\n @return $number * nth($units, $index);\n}\n","@function _gradient-positions-parser($gradient-type, $gradient-positions) {\n @if $gradient-positions\n and ($gradient-type == linear)\n and (type-of($gradient-positions) != color) {\n $gradient-positions: _linear-positions-parser($gradient-positions);\n }\n @else if $gradient-positions\n and ($gradient-type == radial)\n and (type-of($gradient-positions) != color) {\n $gradient-positions: _radial-positions-parser($gradient-positions);\n }\n @return $gradient-positions;\n}\n","//************************************************************************//\n// Helper for linear-gradient-parser\n//************************************************************************//\n@function _is-num($char) {\n $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9;\n $index: index($values, $char);\n @return if($index, true, false);\n}\n","// Private function for linear-gradient-parser\n@function _linear-angle-parser($image, $first-val, $prefix, $suffix) {\n $offset: null;\n $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val));\n $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val));\n\n @if ($unit-long == \"grad\") or\n ($unit-long == \"turn\") {\n $offset: if($unit-long == \"grad\", -100grad * 3, -0.75turn);\n }\n\n @else if ($unit-short == \"deg\") or\n ($unit-short == \"rad\") {\n $offset: if($unit-short == \"deg\", -90 * 3, 1.6rad);\n }\n\n @if $offset {\n $num: _str-to-num($first-val);\n\n @return (\n webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix,\n spec-image: $image\n );\n }\n}\n","@function _linear-gradient-parser($image) {\n $image: unquote($image);\n $gradients: ();\n $start: str-index($image, \"(\");\n $end: str-index($image, \",\");\n $first-val: str-slice($image, $start + 1, $end - 1);\n\n $prefix: str-slice($image, 0, $start);\n $suffix: str-slice($image, $end, str-length($image));\n\n $has-multiple-vals: str-index($first-val, \" \");\n $has-single-position: unquote(_position-flipper($first-val) + \"\");\n $has-angle: _is-num(str-slice($first-val, 0, 0));\n\n @if $has-multiple-vals {\n $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals);\n }\n\n @else if $has-single-position != \"\" {\n $pos: unquote($has-single-position + \"\");\n\n $gradients: (\n webkit-image: -webkit- + $image,\n spec-image: $prefix + \"to \" + $pos + $suffix\n );\n }\n\n @else if $has-angle {\n // Rotate degree for webkit\n $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix);\n }\n\n @else {\n $gradients: (\n webkit-image: -webkit- + $image,\n spec-image: $image\n );\n }\n\n @return $gradients;\n}\n","@function _linear-positions-parser($pos) {\n $type: type-of(nth($pos, 1));\n $spec: null;\n $degree: null;\n $side: null;\n $corner: null;\n $length: length($pos);\n // Parse Side and corner positions\n @if ($length > 1) {\n @if nth($pos, 1) == \"to\" { // Newer syntax\n $side: nth($pos, 2);\n\n @if $length == 2 { // eg. to top\n // Swap for backwards compatability\n $degree: _position-flipper(nth($pos, 2));\n }\n @else if $length == 3 { // eg. to top left\n $corner: nth($pos, 3);\n }\n }\n @else if $length == 2 { // Older syntax (\"top left\")\n $side: _position-flipper(nth($pos, 1));\n $corner: _position-flipper(nth($pos, 2));\n }\n\n @if (\"#{$side} #{$corner}\" == \"left top\") or (\"#{$side} #{$corner}\" == \"top left\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n @else if (\"#{$side} #{$corner}\" == \"right top\") or (\"#{$side} #{$corner}\" == \"top right\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n @else if (\"#{$side} #{$corner}\" == \"right bottom\") or (\"#{$side} #{$corner}\" == \"bottom right\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n @else if (\"#{$side} #{$corner}\" == \"left bottom\") or (\"#{$side} #{$corner}\" == \"bottom left\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n $spec: to $side $corner;\n }\n @else if $length == 1 {\n // Swap for backwards compatability\n @if $type == string {\n $degree: $pos;\n $spec: to _position-flipper($pos);\n }\n @else {\n $degree: -270 - $pos; //rotate the gradient opposite from spec\n $spec: $pos;\n }\n }\n $degree: unquote($degree + \",\");\n $spec: unquote($spec + \",\");\n @return $degree $spec;\n}\n\n@function _position-flipper($pos) {\n @return if($pos == left, right, null)\n if($pos == right, left, null)\n if($pos == top, bottom, null)\n if($pos == bottom, top, null);\n}\n","// Private function for linear-gradient-parser\n@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) {\n $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 );\n $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val));\n $val-3: null;\n $has-val-3: str-index($val-2, \" \");\n\n @if $has-val-3 {\n $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2));\n $val-2: str-slice($val-2, 0, $has-val-3 - 1);\n }\n\n $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3);\n $pos: unquote($pos + \"\");\n\n // Use old spec for webkit\n @if $val-1 == \"to\" {\n @return (\n webkit-image: -webkit- + $prefix + $pos + $suffix,\n spec-image: $image\n );\n }\n\n // Bring the code up to spec\n @else {\n @return (\n webkit-image: -webkit- + $image,\n spec-image: $prefix + \"to \" + $pos + $suffix\n );\n }\n}\n","@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {\n @each $value in $G1, $G2 {\n $first-val: nth($value, 1);\n $pos-type: type-of($first-val);\n $spec-at-index: null;\n\n // Determine if spec was passed to mixin\n @if type-of($value) == list {\n $spec-at-index: if(index($value, at), index($value, at), false);\n }\n @if $spec-at-index {\n @if $spec-at-index > 1 {\n @for $i from 1 through ($spec-at-index - 1) {\n $shape-size: $shape-size nth($value, $i);\n }\n @for $i from ($spec-at-index + 1) through length($value) {\n $pos: $pos nth($value, $i);\n }\n }\n @else if $spec-at-index == 1 {\n @for $i from ($spec-at-index + 1) through length($value) {\n $pos: $pos nth($value, $i);\n }\n }\n $G1: null;\n }\n\n // If not spec calculate correct values\n @else {\n @if ($pos-type != color) or ($first-val != \"transparent\") {\n @if ($pos-type == number)\n or ($first-val == \"center\")\n or ($first-val == \"top\")\n or ($first-val == \"right\")\n or ($first-val == \"bottom\")\n or ($first-val == \"left\") {\n\n $pos: $value;\n\n @if $pos == $G1 {\n $G1: null;\n }\n }\n\n @else if\n ($first-val == \"ellipse\")\n or ($first-val == \"circle\")\n or ($first-val == \"closest-side\")\n or ($first-val == \"closest-corner\")\n or ($first-val == \"farthest-side\")\n or ($first-val == \"farthest-corner\")\n or ($first-val == \"contain\")\n or ($first-val == \"cover\") {\n\n $shape-size: $value;\n\n @if $value == $G1 {\n $G1: null;\n }\n\n @else if $value == $G2 {\n $G2: null;\n }\n }\n }\n }\n }\n @return $G1, $G2, $pos, $shape-size;\n}\n","@function _radial-positions-parser($gradient-pos) {\n $shape-size: nth($gradient-pos, 1);\n $pos: nth($gradient-pos, 2);\n $shape-size-spec: _shape-size-stripper($shape-size);\n\n $pre-spec: unquote(if($pos, \"#{$pos}, \", null))\n unquote(if($shape-size, \"#{$shape-size},\", null));\n $pos-spec: if($pos, \"at #{$pos}\", null);\n\n $spec: \"#{$shape-size-spec} #{$pos-spec}\";\n\n // Add comma\n @if ($spec != ' ') {\n $spec: \"#{$spec},\"\n }\n\n @return $pre-spec $spec;\n}\n","@function _radial-gradient-parser($image) {\n $image: unquote($image);\n $gradients: ();\n $start: str-index($image, \"(\");\n $end: str-index($image, \",\");\n $first-val: str-slice($image, $start + 1, $end - 1);\n\n $prefix: str-slice($image, 0, $start);\n $suffix: str-slice($image, $end, str-length($image));\n\n $is-spec-syntax: str-index($first-val, \"at\");\n\n @if $is-spec-syntax and $is-spec-syntax > 1 {\n $keyword: str-slice($first-val, 1, $is-spec-syntax - 2);\n $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));\n $pos: append($pos, $keyword, comma);\n\n $gradients: (\n webkit-image: -webkit- + $prefix + $pos + $suffix,\n spec-image: $image\n )\n }\n\n @else if $is-spec-syntax == 1 {\n $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));\n\n $gradients: (\n webkit-image: -webkit- + $prefix + $pos + $suffix,\n spec-image: $image\n )\n }\n\n @else if str-index($image, \"cover\") or str-index($image, \"contain\") {\n @warn \"Radial-gradient needs to be updated to conform to latest spec.\";\n\n $gradients: (\n webkit-image: null,\n spec-image: $image\n )\n }\n\n @else {\n $gradients: (\n webkit-image: -webkit- + $image,\n spec-image: $image\n )\n }\n\n @return $gradients;\n}\n","// User for linear and radial gradients within background-image or border-image properties\n\n@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {\n $pre-spec: null;\n $spec: null;\n $vendor-gradients: null;\n @if $gradient-type == linear {\n @if $gradient-positions {\n $pre-spec: nth($gradient-positions, 1);\n $spec: nth($gradient-positions, 2);\n }\n }\n @else if $gradient-type == radial {\n $pre-spec: nth($gradient-positions, 1);\n $spec: nth($gradient-positions, 2);\n }\n\n @if $vendor {\n $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);\n }\n @else if $vendor == false {\n $vendor-gradients: \"#{$gradient-type}-gradient(#{$spec} #{$gradients})\";\n $vendor-gradients: unquote($vendor-gradients);\n }\n @return $vendor-gradients;\n}\n","@function _shape-size-stripper($shape-size) {\n $shape-size-spec: null;\n @each $value in $shape-size {\n @if ($value == \"cover\") or ($value == \"contain\") {\n $value: null;\n }\n $shape-size-spec: \"#{$shape-size-spec} #{$value}\";\n }\n @return $shape-size-spec;\n}\n","//************************************************************************//\n// Helper function for linear/radial-gradient-parsers.\n// Source: http://sassmeister.com/gist/9647408\n//************************************************************************//\n@function _str-to-num($string) {\n // Matrices\n $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';\n $numbers: 0 1 2 3 4 5 6 7 8 9;\n\n // Result\n $result: 0;\n $divider: 0;\n $minus: false;\n\n // Looping through all characters\n @for $i from 1 through str-length($string) {\n $character: str-slice($string, $i, $i);\n $index: index($strings, $character);\n\n @if $character == '-' {\n $minus: true;\n }\n\n @else if $character == '.' {\n $divider: 1;\n }\n\n @else {\n @if not $index {\n $result: if($minus, $result * -1, $result);\n @return _convert-units($result, str-slice($string, $i));\n }\n\n $number: nth($numbers, $index);\n\n @if $divider == 0 {\n $result: $result * 10;\n }\n\n @else {\n // Move the decimal dot to the left\n $divider: $divider * 10;\n $number: $number / $divider;\n }\n\n $result: $result + $number;\n }\n }\n @return if($minus, $result * -1, $result);\n}\n","@function assign-inputs($inputs, $pseudo: null) {\n $list : ();\n\n @each $input in $inputs {\n $input: unquote($input);\n $input: if($pseudo, $input + \":\" + $pseudo, $input);\n $list: append($list, $input, comma);\n }\n\n @return $list;\n}","// Programatically determines whether a color is light or dark\n// Returns a boolean\n// More details here http://robots.thoughtbot.com/closer-look-color-lightness\n\n@function is-light($hex-color) {\n $-local-red: red(rgba($hex-color, 1.0));\n $-local-green: green(rgba($hex-color, 1.0));\n $-local-blue: blue(rgba($hex-color, 1.0));\n\n $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;\n\n @return $-local-lightness > .6;\n}\n","// Flexible grid\n@function flex-grid($columns, $container-columns: $fg-max-columns) {\n $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;\n $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;\n @return percentage($width / $container-width);\n}\n\n// Flexible gutter\n@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {\n $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;\n @return percentage($gutter / $container-width);\n}\n\n// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.\n// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.\n//\n// The calculation presumes that your column structure will be missing the last gutter:\n//\n// -- column -- gutter -- column -- gutter -- column\n//\n// $fg-column: 60px; // Column Width\n// $fg-gutter: 25px; // Gutter Width\n// $fg-max-columns: 12; // Total Columns For Main Container\n//\n// div {\n// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;\n// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;\n//\n// p {\n// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;\n// float: left;\n// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;\n// }\n//\n// blockquote {\n// float: left;\n// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;\n// }\n// }","@function golden-ratio($value, $increment) {\n @return modular-scale($value, $increment, $golden)\n}\n","@function grid-width($n) {\n @return $n * $gw-column + ($n - 1) * $gw-gutter;\n}\n\n// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.\n//\n// $gw-column: 100px; // Column Width\n// $gw-gutter: 40px; // Gutter Width\n//\n// div {\n// width: grid-width(4); // returns 520px;\n// margin-left: $gw-gutter; // returns 40px;\n// }\n","// Scaling Variables\n$golden: 1.618;\n$minor-second: 1.067;\n$major-second: 1.125;\n$minor-third: 1.2;\n$major-third: 1.25;\n$perfect-fourth: 1.333;\n$augmented-fourth: 1.414;\n$perfect-fifth: 1.5;\n$minor-sixth: 1.6;\n$major-sixth: 1.667;\n$minor-seventh: 1.778;\n$major-seventh: 1.875;\n$octave: 2;\n$major-tenth: 2.5;\n$major-eleventh: 2.667;\n$major-twelfth: 3;\n$double-octave: 4;\n\n@function modular-scale($value, $increment, $ratio) {\n $v1: nth($value, 1);\n $v2: nth($value, length($value));\n $value: $v1;\n\n // scale $v2 to just above $v1\n @while $v2 > $v1 {\n $v2: ($v2 / $ratio); // will be off-by-1\n }\n @while $v2 < $v1 {\n $v2: ($v2 * $ratio); // will fix off-by-1\n }\n\n // check AFTER scaling $v2 to prevent double-counting corner-case\n $double-stranded: $v2 > $v1;\n\n @if $increment > 0 {\n @for $i from 1 through $increment {\n @if $double-stranded and ($v1 * $ratio) > $v2 {\n $value: $v2;\n $v2: ($v2 * $ratio);\n } @else {\n $v1: ($v1 * $ratio);\n $value: $v1;\n }\n }\n }\n\n @if $increment < 0 {\n // adjust $v2 to just below $v1\n @if $double-stranded {\n $v2: ($v2 / $ratio);\n }\n\n @for $i from $increment through -1 {\n @if $double-stranded and ($v1 / $ratio) < $v2 {\n $value: $v2;\n $v2: ($v2 / $ratio);\n } @else {\n $v1: ($v1 / $ratio);\n $value: $v1;\n }\n }\n }\n\n @return $value;\n}\n","// Convert pixels to ems\n// eg. for a relational value of 12px write em(12) when the parent is 16px\n// if the parent is another value say 24px write em(12, 24)\n\n@function em($pxval, $base: $em-base) {\n @if not unitless($pxval) {\n $pxval: strip-units($pxval);\n }\n @if not unitless($base) {\n $base: strip-units($base);\n }\n @return ($pxval / $base) * 1em;\n}\n","// Convert pixels to rems\n// eg. for a relational value of 12px write rem(12)\n// Assumes $em-base is the font-size of \n\n@function rem($pxval) {\n @if not unitless($pxval) {\n $pxval: strip-units($pxval);\n }\n\n $base: $em-base;\n @if not unitless($base) {\n $base: strip-units($base);\n }\n @return ($pxval / $base) * 1rem;\n}\n","// Srtips the units from a value. e.g. 12px -> 12\n\n@function strip-units($val) {\n @return ($val / ($val * 0 + 1));\n}\n","// Add percentage of white to a color\n@function tint($color, $percent){\n @return mix(white, $color, $percent);\n}\n\n// Add percentage of black to a color\n@function shade($color, $percent){\n @return mix(black, $color, $percent);\n}\n","// Return vendor-prefixed property names if appropriate\n// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background\n//************************************************************************//\n@function transition-property-names($props, $vendor: false) {\n\t$new-props: ();\n\t\n\t@each $prop in $props {\n\t\t$new-props: append($new-props, transition-property-name($prop, $vendor), comma);\n\t}\n\n\t@return $new-props;\n}\n\n@function transition-property-name($prop, $vendor: false) {\n\t// put other properties that need to be prefixed here aswell\n\t@if $vendor and $prop == transform {\n\t\t@return unquote('-'+$vendor+'-'+$prop);\n\t}\n\t@else {\n\t\t@return $prop;\n\t}\n}","// Convert shorthand to the 4-value syntax\n\n@function unpack($shorthand) {\n @if length($shorthand) == 1 {\n @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);\n }\n @else if length($shorthand) == 2 {\n @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);\n }\n @else if length($shorthand) == 3 {\n @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);\n }\n @else {\n @return $shorthand;\n }\n}\n\n","// http://www.w3.org/TR/css3-animations/#the-animation-name-property-\n// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.\n\n// Official animation shorthand property.\n@mixin animation ($animations...) {\n @include prefixer(animation, $animations, webkit moz spec);\n}\n\n// Individual Animation Properties\n@mixin animation-name ($names...) {\n @include prefixer(animation-name, $names, webkit moz spec);\n}\n\n\n@mixin animation-duration ($times...) {\n @include prefixer(animation-duration, $times, webkit moz spec);\n}\n\n\n@mixin animation-timing-function ($motions...) {\n// ease | linear | ease-in | ease-out | ease-in-out\n @include prefixer(animation-timing-function, $motions, webkit moz spec);\n}\n\n\n@mixin animation-iteration-count ($values...) {\n// infinite | \n @include prefixer(animation-iteration-count, $values, webkit moz spec);\n}\n\n\n@mixin animation-direction ($directions...) {\n// normal | alternate\n @include prefixer(animation-direction, $directions, webkit moz spec);\n}\n\n\n@mixin animation-play-state ($states...) {\n// running | paused\n @include prefixer(animation-play-state, $states, webkit moz spec);\n}\n\n\n@mixin animation-delay ($times...) {\n @include prefixer(animation-delay, $times, webkit moz spec);\n}\n\n\n@mixin animation-fill-mode ($modes...) {\n// none | forwards | backwards | both\n @include prefixer(animation-fill-mode, $modes, webkit moz spec);\n}\n","@mixin appearance ($value) {\n @include prefixer(appearance, $value, webkit moz ms o spec);\n}\n","//************************************************************************//\n// Backface-visibility mixin\n//************************************************************************//\n@mixin backface-visibility($visibility) {\n @include prefixer(backface-visibility, $visibility, webkit spec);\n}\n","//************************************************************************//\n// Background property for adding multiple backgrounds using shorthand\n// notation.\n//************************************************************************//\n\n@mixin background($backgrounds...) {\n $webkit-backgrounds: ();\n $spec-backgrounds: ();\n\n @each $background in $backgrounds {\n $webkit-background: ();\n $spec-background: ();\n $background-type: type-of($background);\n\n @if $background-type == string or list {\n $background-str: if($background-type == list, nth($background, 1), $background);\n\n $url-str: str-slice($background-str, 0, 3);\n $gradient-type: str-slice($background-str, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-background: $background;\n $spec-background: $background;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser(\"#{$background}\");\n $webkit-background: map-get($gradients, webkit-image);\n $spec-background: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser(\"#{$background}\");\n $webkit-background: map-get($gradients, webkit-image);\n $spec-background: map-get($gradients, spec-image);\n }\n\n @else {\n $webkit-background: $background;\n $spec-background: $background;\n }\n }\n\n @else {\n $webkit-background: $background;\n $spec-background: $background;\n }\n\n $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma);\n $spec-backgrounds: append($spec-backgrounds, $spec-background, comma);\n }\n\n background: $webkit-backgrounds;\n background: $spec-backgrounds;\n}\n","//************************************************************************//\n// Background-image property for adding multiple background images with\n// gradients, or for stringing multiple gradients together.\n//************************************************************************//\n\n@mixin background-image($images...) {\n $webkit-images: ();\n $spec-images: ();\n\n @each $image in $images {\n $webkit-image: ();\n $spec-image: ();\n\n @if (type-of($image) == string) {\n $url-str: str-slice($image, 0, 3);\n $gradient-type: str-slice($image, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-image: $image;\n $spec-image: $image;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n }\n\n $webkit-images: append($webkit-images, $webkit-image, comma);\n $spec-images: append($spec-images, $spec-image, comma);\n }\n\n background-image: $webkit-images;\n background-image: $spec-images;\n}\n","@mixin border-image($borders...) {\n $webkit-borders: ();\n $spec-borders: ();\n\n @each $border in $borders {\n $webkit-border: ();\n $spec-border: ();\n $border-type: type-of($border);\n\n @if $border-type == string or list {\n $border-str: if($border-type == list, nth($border, 1), $border);\n\n $url-str: str-slice($border-str, 0, 3);\n $gradient-type: str-slice($border-str, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-border: $border;\n $spec-border: $border;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser(\"#{$border}\");\n $webkit-border: map-get($gradients, webkit-image);\n $spec-border: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser(\"#{$border}\");\n $webkit-border: map-get($gradients, webkit-image);\n $spec-border: map-get($gradients, spec-image);\n }\n\n @else {\n $webkit-border: $border;\n $spec-border: $border;\n }\n }\n\n @else {\n $webkit-border: $border;\n $spec-border: $border;\n }\n\n $webkit-borders: append($webkit-borders, $webkit-border, comma);\n $spec-borders: append($spec-borders, $spec-border, comma);\n }\n\n -webkit-border-image: $webkit-borders;\n border-image: $spec-borders;\n border-style: solid;\n}\n\n//Examples:\n// @include border-image(url(\"image.png\"));\n// @include border-image(url(\"image.png\") 20 stretch);\n// @include border-image(linear-gradient(45deg, orange, yellow));\n// @include border-image(linear-gradient(45deg, orange, yellow) stretch);\n// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);\n// @include border-image(radial-gradient(top, cover, orange, yellow, orange));\n","//************************************************************************//\n// Shorthand Border-radius mixins\n//************************************************************************//\n@mixin border-top-radius($radii) {\n @include prefixer(border-top-left-radius, $radii, spec);\n @include prefixer(border-top-right-radius, $radii, spec);\n}\n\n@mixin border-bottom-radius($radii) {\n @include prefixer(border-bottom-left-radius, $radii, spec);\n @include prefixer(border-bottom-right-radius, $radii, spec);\n}\n\n@mixin border-left-radius($radii) {\n @include prefixer(border-top-left-radius, $radii, spec);\n @include prefixer(border-bottom-left-radius, $radii, spec);\n}\n\n@mixin border-right-radius($radii) {\n @include prefixer(border-top-right-radius, $radii, spec);\n @include prefixer(border-bottom-right-radius, $radii, spec);\n}\n","@mixin box-sizing ($box) {\n// content-box | border-box | inherit\n @include prefixer(box-sizing, $box, webkit moz spec);\n}\n","@mixin calc($property, $value) {\n #{$property}: -webkit-calc(#{$value});\n #{$property}: calc(#{$value});\n}\n","@mixin columns($arg: auto) {\n// || \n @include prefixer(columns, $arg, webkit moz spec);\n}\n\n@mixin column-count($int: auto) {\n// auto || integer\n @include prefixer(column-count, $int, webkit moz spec);\n}\n\n@mixin column-gap($length: normal) {\n// normal || length\n @include prefixer(column-gap, $length, webkit moz spec);\n}\n\n@mixin column-fill($arg: auto) {\n// auto || length\n @include prefixer(column-fill, $arg, webkit moz spec);\n}\n\n@mixin column-rule($arg) {\n// || || \n @include prefixer(column-rule, $arg, webkit moz spec);\n}\n\n@mixin column-rule-color($color) {\n @include prefixer(column-rule-color, $color, webkit moz spec);\n}\n\n@mixin column-rule-style($style: none) {\n// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid\n @include prefixer(column-rule-style, $style, webkit moz spec);\n}\n\n@mixin column-rule-width ($width: none) {\n @include prefixer(column-rule-width, $width, webkit moz spec);\n}\n\n@mixin column-span($arg: none) {\n// none || all\n @include prefixer(column-span, $arg, webkit moz spec);\n}\n\n@mixin column-width($length: auto) {\n// auto || length\n @include prefixer(column-width, $length, webkit moz spec);\n}\n","@mixin filter($function: none) {\n // [\n @include prefixer(perspective, $depth, webkit moz spec);\n}\n\n@mixin perspective-origin($value: 50% 50%) {\n @include prefixer(perspective-origin, $value, webkit moz spec);\n}\n","// Requires Sass 3.1+\n@mixin radial-gradient($G1, $G2,\n $G3: null, $G4: null,\n $G5: null, $G6: null,\n $G7: null, $G8: null,\n $G9: null, $G10: null,\n $pos: null,\n $shape-size: null,\n $fallback: null) {\n\n $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);\n $G1: nth($data, 1);\n $G2: nth($data, 2);\n $pos: nth($data, 3);\n $shape-size: nth($data, 4);\n\n $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;\n\n // Strip deprecated cover/contain for spec\n $shape-size-spec: _shape-size-stripper($shape-size);\n\n // Set $G1 as the default fallback color\n $first-color: nth($full, 1);\n $fallback-color: nth($first-color, 1);\n\n @if (type-of($fallback) == color) or ($fallback == \"transparent\") {\n $fallback-color: $fallback;\n }\n\n // Add Commas and spaces\n $shape-size: if($shape-size, '#{$shape-size}, ', null);\n $pos: if($pos, '#{$pos}, ', null);\n $pos-spec: if($pos, 'at #{$pos}', null);\n $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');\n\n background-color: $fallback-color;\n background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));\n background-image: unquote(\"radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})\");\n}\n","@mixin transform($property: none) {\n// none | \n @include prefixer(transform, $property, webkit moz ms o spec);\n}\n\n@mixin transform-origin($axes: 50%) {\n// x-axis - left | center | right | length | %\n// y-axis - top | center | bottom | length | %\n// z-axis - length\n @include prefixer(transform-origin, $axes, webkit moz ms o spec);\n}\n\n@mixin transform-style ($style: flat) {\n @include prefixer(transform-style, $style, webkit moz ms o spec);\n}\n","// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.\n// Example: @include transition (all 2s ease-in-out);\n// @include transition (opacity 1s ease-in 2s, width 2s ease-out);\n// @include transition-property (transform, opacity);\n\n@mixin transition ($properties...) {\n // Fix for vendor-prefix transform property\n $needs-prefixes: false;\n $webkit: ();\n $moz: ();\n $spec: ();\n\n // Create lists for vendor-prefixed transform\n @each $list in $properties {\n @if nth($list, 1) == \"transform\" {\n $needs-prefixes: true;\n $list1: -webkit-transform;\n $list2: -moz-transform;\n $list3: ();\n\n @each $var in $list {\n $list3: join($list3, $var);\n\n @if $var != \"transform\" {\n $list1: join($list1, $var);\n $list2: join($list2, $var);\n }\n }\n\n $webkit: append($webkit, $list1);\n $moz: append($moz, $list2);\n $spec: append($spec, $list3);\n }\n\n // Create lists for non-prefixed transition properties\n @else {\n $webkit: append($webkit, $list, comma);\n $moz: append($moz, $list, comma);\n $spec: append($spec, $list, comma);\n }\n }\n\n @if $needs-prefixes {\n -webkit-transition: $webkit;\n -moz-transition: $moz;\n transition: $spec;\n }\n @else {\n @if length($properties) >= 1 {\n @include prefixer(transition, $properties, webkit moz spec);\n }\n\n @else {\n $properties: all 0.15s ease-out 0s;\n @include prefixer(transition, $properties, webkit moz spec);\n }\n }\n}\n\n@mixin transition-property ($properties...) {\n -webkit-transition-property: transition-property-names($properties, 'webkit');\n -moz-transition-property: transition-property-names($properties, 'moz');\n transition-property: transition-property-names($properties, false);\n}\n\n@mixin transition-duration ($times...) {\n @include prefixer(transition-duration, $times, webkit moz spec);\n}\n\n@mixin transition-timing-function ($motions...) {\n// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()\n @include prefixer(transition-timing-function, $motions, webkit moz spec);\n}\n\n@mixin transition-delay ($times...) {\n @include prefixer(transition-delay, $times, webkit moz spec);\n}\n","@mixin user-select($arg: none) {\n @include prefixer(user-select, $arg, webkit moz ms spec);\n}\n","@mixin placeholder {\n $placeholders: \":-webkit-input\" \":-moz\" \"-moz\" \"-ms-input\";\n @each $placeholder in $placeholders {\n &:#{$placeholder}-placeholder {\n @content;\n }\n }\n}\n","@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) {\n\n @if type-of($style) == string and type-of($base-color) == color {\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == string and type-of($base-color) == number {\n $padding: $text-size;\n $text-size: $base-color;\n $base-color: #4294f0;\n\n @if $padding == inherit {\n $padding: 7px 18px;\n }\n\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == color and type-of($base-color) == color {\n $base-color: $style;\n $style: simple;\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == color and type-of($base-color) == number {\n $padding: $text-size;\n $text-size: $base-color;\n $base-color: $style;\n $style: simple;\n\n @if $padding == inherit {\n $padding: 7px 18px;\n }\n\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == number {\n $padding: $base-color;\n $text-size: $style;\n $base-color: #4294f0;\n $style: simple;\n\n @if $padding == #4294f0 {\n $padding: 7px 18px;\n }\n\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n\n// Selector Style Button\n//************************************************************************//\n@mixin buttonstyle($type, $b-color, $t-size, $pad) {\n // Grayscale button\n @if $type == simple and $b-color == grayscale($b-color) {\n @include simple($b-color, true, $t-size, $pad);\n }\n\n @if $type == shiny and $b-color == grayscale($b-color) {\n @include shiny($b-color, true, $t-size, $pad);\n }\n\n @if $type == pill and $b-color == grayscale($b-color) {\n @include pill($b-color, true, $t-size, $pad);\n }\n\n @if $type == flat and $b-color == grayscale($b-color) {\n @include flat($b-color, true, $t-size, $pad);\n }\n\n // Colored button\n @if $type == simple {\n @include simple($b-color, false, $t-size, $pad);\n }\n\n @else if $type == shiny {\n @include shiny($b-color, false, $t-size, $pad);\n }\n\n @else if $type == pill {\n @include pill($b-color, false, $t-size, $pad);\n }\n\n @else if $type == flat {\n @include flat($b-color, false, $t-size, $pad);\n }\n}\n\n\n// Simple Button\n//************************************************************************//\n@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);\n $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);\n $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);\n $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);\n }\n\n @if $grayscale == true {\n $border: grayscale($border);\n $inset-shadow: grayscale($inset-shadow);\n $stop-gradient: grayscale($stop-gradient);\n $text-shadow: grayscale($text-shadow);\n }\n\n border: 1px solid $border;\n border-radius: 3px;\n box-shadow: inset 0 1px 0 0 $inset-shadow;\n color: $color;\n display: inline-block;\n font-size: $textsize;\n font-weight: bold;\n @include linear-gradient ($base-color, $stop-gradient);\n padding: $padding;\n text-decoration: none;\n text-shadow: 0 1px 0 $text-shadow;\n background-clip: padding-box;\n\n &:hover:not(:disabled) {\n $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);\n $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);\n $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);\n\n @if $grayscale == true {\n $base-color-hover: grayscale($base-color-hover);\n $inset-shadow-hover: grayscale($inset-shadow-hover);\n $stop-gradient-hover: grayscale($stop-gradient-hover);\n }\n\n box-shadow: inset 0 1px 0 0 $inset-shadow-hover;\n cursor: pointer;\n @include linear-gradient ($base-color-hover, $stop-gradient-hover);\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);\n $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);\n\n @if $grayscale == true {\n $border-active: grayscale($border-active);\n $inset-shadow-active: grayscale($inset-shadow-active);\n }\n\n border: 1px solid $border-active;\n box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active;\n }\n}\n\n\n// Shiny Button\n//************************************************************************//\n@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);\n $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);\n $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);\n $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);\n $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);\n $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);\n $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);\n }\n\n @if $grayscale == true {\n $border: grayscale($border);\n $border-bottom: grayscale($border-bottom);\n $fourth-stop: grayscale($fourth-stop);\n $inset-shadow: grayscale($inset-shadow);\n $second-stop: grayscale($second-stop);\n $text-shadow: grayscale($text-shadow);\n $third-stop: grayscale($third-stop);\n }\n\n border: 1px solid $border;\n border-bottom: 1px solid $border-bottom;\n border-radius: 5px;\n box-shadow: inset 0 1px 0 0 $inset-shadow;\n color: $color;\n display: inline-block;\n font-size: $textsize;\n font-weight: bold;\n @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);\n padding: $padding;\n text-align: center;\n text-decoration: none;\n text-shadow: 0 -1px 1px $text-shadow;\n\n &:hover:not(:disabled) {\n $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);\n $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);\n $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);\n $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);\n\n @if $grayscale == true {\n $first-stop-hover: grayscale($first-stop-hover);\n $second-stop-hover: grayscale($second-stop-hover);\n $third-stop-hover: grayscale($third-stop-hover);\n $fourth-stop-hover: grayscale($fourth-stop-hover);\n }\n\n cursor: pointer;\n @include linear-gradient(top, $first-stop-hover 0%,\n $second-stop-hover 50%,\n $third-stop-hover 50%,\n $fourth-stop-hover 100%);\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);\n\n @if $grayscale == true {\n $inset-shadow-active: grayscale($inset-shadow-active);\n }\n\n box-shadow: inset 0 0 20px 0 $inset-shadow-active;\n }\n}\n\n\n// Pill Button\n//************************************************************************//\n@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);\n $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);\n $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);\n $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);\n $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);\n $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);\n }\n\n @if $grayscale == true {\n $border-bottom: grayscale($border-bottom);\n $border-sides: grayscale($border-sides);\n $border-top: grayscale($border-top);\n $inset-shadow: grayscale($inset-shadow);\n $stop-gradient: grayscale($stop-gradient);\n $text-shadow: grayscale($text-shadow);\n }\n\n border: 1px solid $border-top;\n border-color: $border-top $border-sides $border-bottom;\n border-radius: 16px;\n box-shadow: inset 0 1px 0 0 $inset-shadow;\n color: $color;\n display: inline-block;\n font-size: $textsize;\n font-weight: normal;\n line-height: 1;\n @include linear-gradient ($base-color, $stop-gradient);\n padding: $padding;\n text-align: center;\n text-decoration: none;\n text-shadow: 0 -1px 1px $text-shadow;\n background-clip: padding-box;\n\n &:hover:not(:disabled) {\n $base-color-hover: adjust-color($base-color, $lightness: -4.5%);\n $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);\n $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);\n $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);\n $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);\n $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);\n $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);\n\n @if $grayscale == true {\n $base-color-hover: grayscale($base-color-hover);\n $border-bottom: grayscale($border-bottom);\n $border-sides: grayscale($border-sides);\n $border-top: grayscale($border-top);\n $inset-shadow-hover: grayscale($inset-shadow-hover);\n $stop-gradient-hover: grayscale($stop-gradient-hover);\n $text-shadow-hover: grayscale($text-shadow-hover);\n }\n\n border: 1px solid $border-top;\n border-color: $border-top $border-sides $border-bottom;\n box-shadow: inset 0 1px 0 0 $inset-shadow-hover;\n cursor: pointer;\n @include linear-gradient ($base-color-hover, $stop-gradient-hover);\n text-shadow: 0 -1px 1px $text-shadow-hover;\n background-clip: padding-box;\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);\n $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);\n $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);\n $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);\n $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);\n\n @if $grayscale == true {\n $active-color: grayscale($active-color);\n $border-active: grayscale($border-active);\n $border-bottom-active: grayscale($border-bottom-active);\n $inset-shadow-active: grayscale($inset-shadow-active);\n $text-shadow-active: grayscale($text-shadow-active);\n }\n\n background: $active-color;\n border: 1px solid $border-active;\n border-bottom: 1px solid $border-bottom-active;\n box-shadow: inset 0 0 6px 3px $inset-shadow-active;\n text-shadow: 0 -1px 1px $text-shadow-active;\n }\n}\n\n\n\n// Flat Button\n//************************************************************************//\n@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n }\n\n background-color: $base-color;\n border-radius: 3px;\n border: none;\n color: $color;\n display: inline-block;\n font-size: inherit;\n font-weight: bold;\n padding: 7px 18px;\n text-decoration: none;\n background-clip: padding-box;\n\n &:hover:not(:disabled){\n $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%);\n\n @if $grayscale == true {\n $base-color-hover: grayscale($base-color-hover);\n }\n\n background-color: $base-color-hover;\n cursor: pointer;\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%);\n\n @if $grayscale == true {\n $base-color-active: grayscale($base-color-active);\n }\n\n background-color: $base-color-active;\n cursor: pointer;\n }\n}\n","// Modern micro clearfix provides an easy way to contain floats without adding additional markup.\n//\n// Example usage:\n//\n// // Contain all floats within .wrapper\n// .wrapper {\n// @include clearfix;\n// .content,\n// .sidebar {\n// float : left;\n// }\n// }\n\n@mixin clearfix {\n &:after {\n content:\"\";\n display:table;\n clear:both;\n }\n}\n\n// Acknowledgements\n// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)\n","// directional-property mixins are shorthands\n// for writing properties like the following\n//\n// @include margin(null 0 10px);\n// ------\n// margin-right: 0;\n// margin-bottom: 10px;\n// margin-left: 0;\n//\n// - or -\n//\n// @include border-style(dotted null);\n// ------\n// border-top-style: dotted;\n// border-bottom-style: dotted;\n//\n// ------\n//\n// Note: You can also use false instead of null\n\n@function collapse-directionals($vals) {\n $output: null;\n\n $A: nth( $vals, 1 );\n $B: if( length($vals) < 2, $A, nth($vals, 2));\n $C: if( length($vals) < 3, $A, nth($vals, 3));\n $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) ));\n\n @if $A == 0 { $A: 0 }\n @if $B == 0 { $B: 0 }\n @if $C == 0 { $C: 0 }\n @if $D == 0 { $D: 0 }\n\n @if $A == $B and $A == $C and $A == $D { $output: $A }\n @else if $A == $C and $B == $D { $output: $A $B }\n @else if $B == $D { $output: $A $B $C }\n @else { $output: $A $B $C $D }\n\n @return $output;\n}\n\n@function contains-falsy($list) {\n @each $item in $list {\n @if not $item {\n @return true;\n }\n }\n\n @return false;\n}\n\n@mixin directional-property($pre, $suf, $vals) {\n // Property Names\n $top: $pre + \"-top\" + if($suf, \"-#{$suf}\", \"\");\n $bottom: $pre + \"-bottom\" + if($suf, \"-#{$suf}\", \"\");\n $left: $pre + \"-left\" + if($suf, \"-#{$suf}\", \"\");\n $right: $pre + \"-right\" + if($suf, \"-#{$suf}\", \"\");\n $all: $pre + if($suf, \"-#{$suf}\", \"\");\n\n $vals: collapse-directionals($vals);\n\n @if contains-falsy($vals) {\n @if nth($vals, 1) { #{$top}: nth($vals, 1); }\n\n @if length($vals) == 1 {\n @if nth($vals, 1) { #{$right}: nth($vals, 1); }\n } @else {\n @if nth($vals, 2) { #{$right}: nth($vals, 2); }\n }\n\n // prop: top/bottom right/left\n @if length($vals) == 2 {\n @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }\n @if nth($vals, 2) { #{$left}: nth($vals, 2); }\n\n // prop: top right/left bottom\n } @else if length($vals) == 3 {\n @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }\n @if nth($vals, 2) { #{$left}: nth($vals, 2); }\n\n // prop: top right bottom left\n } @else if length($vals) == 4 {\n @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }\n @if nth($vals, 4) { #{$left}: nth($vals, 4); }\n }\n\n // prop: top/right/bottom/left\n } @else {\n #{$all}: $vals;\n }\n}\n\n@mixin margin($vals...) {\n @include directional-property(margin, false, $vals...);\n}\n\n@mixin padding($vals...) {\n @include directional-property(padding, false, $vals...);\n}\n\n@mixin border-style($vals...) {\n @include directional-property(border, style, $vals...);\n}\n\n@mixin border-color($vals...) {\n @include directional-property(border, color, $vals...);\n}\n\n@mixin border-width($vals...) {\n @include directional-property(border, width, $vals...);\n}\n","@mixin ellipsis($width: 100%) {\n display: inline-block;\n max-width: $width;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","$georgia: Georgia, Cambria, \"Times New Roman\", Times, serif;\n$helvetica: \"Helvetica Neue\", Helvetica, Roboto, Arial, sans-serif;\n$lucida-grande: \"Lucida Grande\", Tahoma, Verdana, Arial, sans-serif;\n$monospace: \"Bitstream Vera Sans Mono\", Consolas, Courier, monospace;\n$verdana: Verdana, Geneva, sans-serif;\n","@mixin hide-text {\n overflow: hidden;\n\n &:before {\n content: \"\";\n display: block;\n width: 0;\n height: 100%;\n }\n}\n","//************************************************************************//\n// Generate a variable ($all-text-inputs) with a list of all html5\n// input types that have a text-based input, excluding textarea.\n// http://diveintohtml5.org/forms.html\n//************************************************************************//\n$inputs-list: 'input[type=\"email\"]',\n 'input[type=\"number\"]',\n 'input[type=\"password\"]',\n 'input[type=\"search\"]',\n 'input[type=\"tel\"]',\n 'input[type=\"text\"]',\n 'input[type=\"url\"]',\n\n // Webkit & Gecko may change the display of these in the future\n 'input[type=\"color\"]',\n 'input[type=\"date\"]',\n 'input[type=\"datetime\"]',\n 'input[type=\"datetime-local\"]',\n 'input[type=\"month\"]',\n 'input[type=\"time\"]',\n 'input[type=\"week\"]';\n\n// Bare inputs\n//************************************************************************//\n$all-text-inputs: assign-inputs($inputs-list);\n\n// Hover Pseudo-class\n//************************************************************************//\n$all-text-inputs-hover: assign-inputs($inputs-list, hover);\n\n// Focus Pseudo-class\n//************************************************************************//\n$all-text-inputs-focus: assign-inputs($inputs-list, focus);\n\n\n\n// You must use interpolation on the variable:\n// #{$all-text-inputs}\n// #{$all-text-inputs-hover}\n// #{$all-text-inputs-focus}\n\n// Example\n//************************************************************************//\n// #{$all-text-inputs}, textarea {\n// border: 1px solid red;\n// }\n\n\n\n//************************************************************************//\n// Generate a variable ($all-button-inputs) with a list of all html5\n// input types that have a button-based input, excluding button.\n//************************************************************************//\n$inputs-button-list: 'input[type=\"button\"]',\n 'input[type=\"reset\"]',\n 'input[type=\"submit\"]';\n\n// Bare inputs\n//************************************************************************//\n$all-button-inputs: assign-inputs($inputs-button-list);\n\n// Hover Pseudo-class\n//************************************************************************//\n$all-button-inputs-hover: assign-inputs($inputs-button-list, hover);\n\n// Focus Pseudo-class\n//************************************************************************//\n$all-button-inputs-focus: assign-inputs($inputs-button-list, focus);\n\n// Active Pseudo-class\n//************************************************************************//\n$all-button-inputs-active: assign-inputs($inputs-button-list, active);\n\n\n\n// You must use interpolation on the variable:\n// #{$all-button-inputs}\n// #{$all-button-inputs-hover}\n// #{$all-button-inputs-focus}\n// #{$all-button-inputs-active}\n\n// Example\n//************************************************************************//\n// #{$all-button-inputs}, button {\n// border: 1px solid red;\n// }\n","@mixin position ($position: relative, $coordinates: null null null null) {\n\n @if type-of($position) == list {\n $coordinates: $position;\n $position: relative;\n }\n\n $coordinates: unpack($coordinates);\n\n $top: nth($coordinates, 1);\n $right: nth($coordinates, 2);\n $bottom: nth($coordinates, 3);\n $left: nth($coordinates, 4);\n\n position: $position;\n\n @if ($top and $top == auto) or (type-of($top) == number) {\n top: $top;\n }\n\n @if ($right and $right == auto) or (type-of($right) == number) {\n right: $right;\n }\n\n @if ($bottom and $bottom == auto) or (type-of($bottom) == number) {\n bottom: $bottom;\n }\n\n @if ($left and $left == auto) or (type-of($left) == number) {\n left: $left;\n }\n}\n","//************************************************************************//\n// Example: @include prefixer(border-radius, $radii, webkit ms spec);\n//************************************************************************//\n// Variables located in /settings/_prefixer.scss\n\n@mixin prefixer ($property, $value, $prefixes) {\n @each $prefix in $prefixes {\n @if $prefix == webkit {\n @if $prefix-for-webkit {\n -webkit-#{$property}: $value;\n }\n }\n @else if $prefix == moz {\n @if $prefix-for-mozilla {\n -moz-#{$property}: $value;\n }\n }\n @else if $prefix == ms {\n @if $prefix-for-microsoft {\n -ms-#{$property}: $value;\n }\n }\n @else if $prefix == o {\n @if $prefix-for-opera {\n -o-#{$property}: $value;\n }\n }\n @else if $prefix == spec {\n @if $prefix-for-spec {\n #{$property}: $value;\n }\n }\n @else {\n @warn \"Unrecognized prefix: #{$prefix}\";\n }\n }\n}\n\n@mixin disable-prefix-for-all() {\n $prefix-for-webkit: false !global;\n $prefix-for-mozilla: false !global;\n $prefix-for-microsoft: false !global;\n $prefix-for-opera: false !global;\n $prefix-for-spec: false !global;\n}\n","@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) {\n @if $asset-pipeline {\n background-image: image-url(\"#{$filename}.#{$extension}\");\n }\n @else {\n background-image: url(\"#{$filename}.#{$extension}\");\n }\n\n @include hidpi {\n @if $asset-pipeline {\n @if $retina-filename {\n background-image: image-url(\"#{$retina-filename}.#{$extension}\");\n }\n @else {\n background-image: image-url(\"#{$filename}#{$retina-suffix}.#{$extension}\");\n }\n }\n\n @else {\n @if $retina-filename {\n background-image: url(\"#{$retina-filename}.#{$extension}\");\n }\n @else {\n background-image: url(\"#{$filename}#{$retina-suffix}.#{$extension}\");\n }\n }\n\n background-size: $background-size;\n\n }\n}\n","@mixin size($size) {\n $height: nth($size, 1);\n $width: $height;\n\n @if length($size) > 1 {\n $height: nth($size, 2);\n }\n\n @if $height == auto or (type-of($height) == number and not unitless($height)) {\n height: $height;\n }\n\n @if $width == auto or (type-of($height) == number and not unitless($width)) {\n width: $width;\n }\n}\n","// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)\n// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html\n\n// EASE IN\n$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);\n$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);\n$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);\n$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);\n$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);\n$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);\n\n// EASE OUT\n$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);\n$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);\n$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);\n$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);\n$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);\n$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);\n$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);\n\n// EASE IN OUT\n$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);\n$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);\n$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);\n$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);\n$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);\n$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);\n$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);\n$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);\n","@mixin triangle ($size, $color, $direction) {\n height: 0;\n width: 0;\n\n $width: nth($size, 1);\n $height: nth($size, length($size));\n\n $foreground-color: nth($color, 1);\n $background-color: if(length($color) == 2, nth($color, 2), transparent);\n\n @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {\n\n $width: $width / 2;\n $height: if(length($size) > 1, $height, $height/2);\n\n @if $direction == up {\n border-left: $width solid $background-color;\n border-right: $width solid $background-color;\n border-bottom: $height solid $foreground-color;\n\n } @else if $direction == right {\n border-top: $width solid $background-color;\n border-bottom: $width solid $background-color;\n border-left: $height solid $foreground-color;\n\n } @else if $direction == down {\n border-left: $width solid $background-color;\n border-right: $width solid $background-color;\n border-top: $height solid $foreground-color;\n\n } @else if $direction == left {\n border-top: $width solid $background-color;\n border-bottom: $width solid $background-color;\n border-right: $height solid $foreground-color;\n }\n }\n\n @else if ($direction == up-right) or ($direction == up-left) {\n border-top: $height solid $foreground-color;\n\n @if $direction == up-right {\n border-left: $width solid $background-color;\n\n } @else if $direction == up-left {\n border-right: $width solid $background-color;\n }\n }\n\n @else if ($direction == down-right) or ($direction == down-left) {\n border-bottom: $height solid $foreground-color;\n\n @if $direction == down-right {\n border-left: $width solid $background-color;\n\n } @else if $direction == down-left {\n border-right: $width solid $background-color;\n }\n }\n\n @else if ($direction == inset-up) {\n border-width: $height $width;\n border-style: solid;\n border-color: $background-color $background-color $foreground-color;\n }\n\n @else if ($direction == inset-down) {\n border-width: $height $width;\n border-style: solid;\n border-color: $foreground-color $background-color $background-color;\n }\n\n @else if ($direction == inset-right) {\n border-width: $width $height;\n border-style: solid;\n border-color: $background-color $background-color $background-color $foreground-color;\n }\n\n @else if ($direction == inset-left) {\n border-width: $width $height;\n border-style: solid;\n border-color: $background-color $foreground-color $background-color $background-color;\n }\n}\n","@mixin word-wrap($wrap: break-word) {\n word-wrap: $wrap;\n\n @if $wrap == break-word {\n overflow-wrap: break-word;\n word-break: break-all;\n }\n}\n","//************************************************************************//\n// These mixins/functions are deprecated\n// They will be removed in the next MAJOR version release\n//************************************************************************//\n@mixin inline-block {\n display: inline-block;\n @warn \"inline-block mixin is deprecated and will be removed in the next major version release\";\n}\n","// Core\n@import \"core\";\n\n// Breakpoints\n@import \"breakpoints\";\n\n// Layout\n@import \"layout\";\n\n// Typography\n@import \"typography\";\n\n// Nav\n@import \"nav\";","// Border Radius\n$core-border-radius:\t\t\trem(3) !default;","// Media Device Breakpoints\n$large-desktop-container:\t\t75.000em !default;\n$desktop-container:\t\t\t\t60.000em !default;\n$tablet-container:\t\t\t\t48.000em !default;\n$large-mobile-container:\t\t30.000em !default;\n$mobile-container:\t\t\t\t100% !default;\n\n// Breakpoint Variables For Particles\n$media: \"all\" !default;\n$mobile-only: \"#{$media} and (max-width:#{$tablet-container - 0.062})\" !default;\n$no-mobile: \"#{$media} and (min-width:#{$tablet-container})\" !default;\n$small-mobile-range: \"#{$media} and (max-width:#{$large-mobile-container})\" !default;\n$large-mobile-range: \"#{$media} and (min-width:#{$large-mobile-container + 0.063}) and (max-width:#{$tablet-container - 0.062})\" !default;\n$tablet-range: \"#{$media} and (min-width:#{$tablet-container}) and (max-width:#{$desktop-container - 0.062})\" !default;\n$desktop-range: \"#{$media} and (min-width:#{$desktop-container}) and (max-width:#{$large-desktop-container - 0.062})\" !default;\n$large-desktop-range: \"#{$media} and (min-width:#{$large-desktop-container})\" !default;\n","// Content Block Spacing Variables\n$content-margin:\t\t\t\t0.625rem !default;\n$content-padding:\t\t\t\t0.938rem !default;\n\n// Fixed Block Variables\n$fixed-block-full:\t\t\t\tpercentage(1/4) !default;\n$fixed-block-desktop:\t\t\tpercentage(1/3) !default;\n$fixed-block-tablet:\t\t\tpercentage(1/2) !default;","// Base Sizes\n$core-font-size:\t\t\t\t.9rem !default;\n$core-line-height:\t\t\t\t1.5 !default;\n\n// Heading Sizes\n$h1-font-size:\t\t\t\t\t$core-font-size + 2.20 !default;\n$h2-font-size:\t\t\t\t\t$core-font-size + 1.50 !default;\n$h3-font-size:\t\t\t\t\t$core-font-size + 1.10 !default;\n$h4-font-size:\t\t\t\t\t$core-font-size + 0.75 !default;\n$h5-font-size:\t\t\t\t\t$core-font-size + 0.35 !default;\n$h6-font-size:\t\t\t\t\t$core-font-size - 0.15 !default;\n\n// Spacing\n$leading-margin:\t\t\t\t$core-line-height * 1rem !default;\n","// Dropdowns\n$dropdown-width:\t\t\t\t140px !default;\n$flyout-width:\t\t\t\t\t140px !default;","// Colors\n@import \"colors\";\n\n// Variables\n@import \"variables\";\n","// Core\n$white:\t\t\t\t\t\t\t#ffffff;\n$black:\t\t\t\t\t\t\t#000000;\n$light-gray:\t\t\t\t\t#dddddd;\n\n$core-border-color:\t\t\t\t$light-gray;\n$core-border-color-hover: \t\tdarken($core-border-color, 10);\n\n$code-text:\t\t\t\t\t\t#c7254e;\n$code-bg:\t\t\t\t\t\t#f9f2f4;\n$pre-text:\t\t\t\t\t\t#237794;\n$pre-bg:\t\t\t\t\t\t#f6f6f6;\n\n// Shadows\n$core-box-shadow: \t\t\t\tinset 0 1px 3px hsla(0, 0%, 0%, 0.06);\n","// Sizes\n$header-height: 5rem;\n$footer-height: 6rem;\n$border-radius: 4px;\n\n// Font Weights\n$font-weight-bold: 600;\n$font-weight-regular: 400;\n$font-weight-light:300;\n\n// Global Paddings\n$padding-default: 1.5rem;\n$padding-horiz: 7rem;\n$padding-vert: 3rem;\n\n//Forms\n$form-label-width: 30%;\n$form-border-radius: 4px;\n$form-border-width: 1px;\n$form-label-pad: 5px 0 5px 3rem;\n$form-input-pad: 5px 10px;\n$form-select-pad: 5px 30px 5px 10px;\n","@import \"direction\";\n@import \"range\";","@function opposite-direction($dir) {\n\t@if $dir == 'left' {\n\t\t@return right;\n\t}\n\t@else if $dir == 'right' {\n\t\t@return left;\n\t}\n\t@else if $dir == 'ltr' {\n\t\t@return rtl;\n\t}\n\t@else if $dir == 'rtl' {\n\t\t@return ltr;\n\t}\n\t@else if $dir == 'top' {\n\t\t@return bottom;\n\t}\n\t@else if $dir == 'bottom' {\n\t\t@return top;\n\t}\n\t@else {\n\t\t@warn \"#{$dir} is not a direction! Make sure your direction is all lowercase!\";\n\t\t@return false;\n\t}\n}\n\n@function named-direction($dir) {\n\t@if $dir == 'ltr' {\n\t\t@return left;\n\t}\n\t@else if $dir == 'rtl' {\n\t\t@return right;\n\t}\n\t@else {\n\t\t@warn \"#{$dir} is not a valid HTML direction! Make sure you are using a valid HTML direction\";\n\t\t@return false;\n\t}\n}","@function lower-bound($range){\n\t@if length($range) <= 0 {\n\t\t@return 0;\n\t}\n\t@return nth($range,1);\n}\n\n@function upper-bound($range) {\n\t@if length($range) < 2 {\n\t\t@return 999999999999;\n\t}\n\t@return nth($range, 2);\n}","@import \"breakpoints\";\n@import \"utilities\";","// Breakpoints\n@mixin breakpoint($breakpoints, $media: all) {\n @each $breakpoint in $breakpoints {\n @if $breakpoint == large-desktop-range {\n @media only #{$media} and (min-width: $large-desktop-container) { @content; }\n }\n @else if $breakpoint == desktop-range {\n @media only #{$media} and (min-width: $desktop-container) and (max-width: $large-desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == tablet-range {\n @media only #{$media} and (min-width: $tablet-container) and (max-width: $desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == large-mobile-range {\n @media only #{$media} and (min-width: $large-mobile-container + 0.063) and (max-width: $tablet-container - 0.062) { @content; }\n }\n @else if $breakpoint == mini-nav-range {\n @media only #{$media} and (min-width: $tablet-container - 0.062) and (max-width: $large-desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == small-mobile-range {\n @media only #{$media} and (max-width: $large-mobile-container) { @content; }\n }\n @else if $breakpoint == no-mobile {\n @media only #{$media} and (min-width: $tablet-container) { @content; }\n }\n @else if $breakpoint == mobile-only {\n @media only #{$media} and (max-width: $tablet-container - 0.062) { @content; }\n }\n @else if $breakpoint == desktop-only {\n @media only #{$media} and (max-width: $desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == mobile-plus {\n @media only #{$media} and (min-width: $mobile-container - 0.062) { @content; }\n }\n @else if $breakpoint == tablet-plus {\n @media only #{$media} and (min-width: $tablet-container - 0.062) { @content; }\n }\n @else if $breakpoint == desktop-plus {\n @media only #{$media} and (min-width: $desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == large-desktop-plus {\n @media only #{$media} and (min-width: $large-desktop-container - 0.062) { @content; }\n }\n }\n}\n","\n\n// List Reset\n%list-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n// Vertical Centering\n%vertical-align {\n\tposition: relative;\n\ttop: 50%;\n\t-webkit-transform: translateY(-50%);\n\t-moz-transform: translateY(-50%);\n\t-o-transform: translateY(-50%);\n\t-ms-transform: translateY(-50%);\n\ttransform: translateY(-50%);\n}\n\n// Columns\n@mixin columns($columns) {\n\twidth: percentage(1/$columns);\n}\n\n// Float with margin variable\n@mixin float($direction, $margin: 0) {\n\tfloat: $direction;\n\tmargin-#{opposite-direction($direction)}: $margin;\n}\n","@import \"buttons\";\n@import \"colorpicker\";\n@import \"datetimepicker\";\n@import \"finderjs\";\n@import \"toggle-switch\";\n","%button {\n\tdisplay: inline-block;\n\tpadding: 0.5rem 1rem;\n font-weight: 400;\n cursor: pointer;\n vertical-align: middle;\n outline: none;\n\n &:active {\n margin: 1px 0 -1px 0;\n }\n\n i {\n //margin-right: 5px;\n }\n\n &.button-small {\n padding: 4px 8px;\n font-size: 95%;\n }\n\n &.button-x-small {\n padding: 2px 5px;\n font-size: 90%;\n }\n\n &:disabled {\n opacity: .6;\n cursor: no-drop;\n }\n\n}\n\n@mixin button-color($color, $text:$white, $lighter:null) {\n color: rgba(red($text), green($text), blue($text), opacity($text) - 0.15);\n\n\tborder-radius: $border-radius;\n background: $color;\n\n @if ($lighter == null) {\n $lighter: lightness($color) > 50;\n }\n\n @if ($lighter) {\n &:focus,\n &:hover {\n background: shade($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid lighten($color, 5%);\n }\n } @else {\n &:focus,\n &:hover {\n background: tint($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid darken($color, 5%);\n }\n }\n}\n\n@mixin button-color-border($color, $text:$white, $lighter:null) {\n color: $text;\n border-radius: $border-radius;\n border: 1px solid $color;\n\n @if ($lighter == null) {\n $lighter: lightness($color) > 50;\n }\n\n @if ($lighter) {\n &:hover {\n border-color: shade($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid lighten($color, 5%);\n }\n } @else {\n &:hover {\n border-color: tint($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid darken($color, 5%);\n }\n }\n}\n",".g-colorpicker {\n position: relative;\n border-radius: $core-border-radius;\n max-width: 100%;\n display: flex;\n\n input {\n //width: 100% !important;\n flex-basis: 75%;\n }\n\n i {\n position: absolute;\n top: 15px;\n right: 10px;\n z-index: 2;\n }\n\n .g-colorpicker-preview-wrap {\n cursor: default;\n position: relative;\n border-radius: 3px;\n border: 1px solid #fff;\n margin-left: 5px;\n width: 41px;\n\n }\n\n .g-colorpicker-preview {\n position: absolute;\n top: 0px;\n right: 0px;\n bottom: 0px;\n left: 0px;\n border-radius: 3px;\n }\n}\n\n.cp-sprite {\n background-image: url(data:image/png;base64,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);\n}\n\n/* Panel */\n.cp-wrapper {\n position: absolute;\n width: 173px;\n height: 211px;\n background: white;\n border: solid 1px #CCC;\n box-shadow: 0 0 20px rgba(0, 0, 0, .2);\n z-index: 99999;\n @include box-sizing(content-box);\n display: none;\n}\n\n.cp-wrapper.cp-visible {\n display: block;\n}\n\n/* Panel positioning */\n.cp-position-top .cp-wrapper {\n top: -154px;\n}\n\n.cp-position-right .cp-wrapper {\n right: 0;\n}\n\n.cp-position-bottom .cp-wrapper {\n top: auto;\n}\n\n.cp-position-left .cp-wrapper {\n left: 0;\n}\n\n.cp-with-opacity.cp-wrapper {\n width: 194px;\n}\n\n.cp-wrapper .cp-grid {\n position: absolute;\n top: 1px;\n left: 1px;\n width: 150px;\n height: 150px;\n background-position: -120px 0;\n cursor: crosshair;\n}\n\n.cp-wrapper .cp-grid-inner {\n position: absolute;\n top: 0;\n left: 0;\n width: 150px;\n height: 150px;\n}\n\n.cp-mode-saturation .cp-grid {\n background-position: -420px 0;\n}\n\n.cp-mode-saturation .cp-grid-inner {\n background-position: -270px 0;\n background-image: inherit;\n}\n\n.cp-mode-brightness .cp-grid {\n background-position: -570px 0;\n}\n\n.cp-mode-brightness .cp-grid-inner {\n background-color: black;\n}\n\n.cp-mode-wheel .cp-grid {\n background-position: -720px 0;\n}\n\n.cp-slider,\n.cp-opacity-slider {\n position: absolute;\n top: 1px;\n left: 152px;\n width: 20px;\n height: 150px;\n background-color: white;\n background-position: 0 0;\n cursor: row-resize;\n}\n\n.cp-mode-saturation .cp-slider {\n background-position: -60px 0;\n}\n\n.cp-mode-brightness .cp-slider {\n background-position: -20px 0;\n}\n\n.cp-mode-wheel .cp-slider {\n background-position: -20px 0;\n}\n\n.cp-opacity-slider {\n left: 173px;\n background-position: -40px 0;\n display: none;\n}\n\n.cp-with-opacity .cp-opacity-slider {\n display: block;\n}\n\n/* Pickers */\n.cp-grid .cp-picker {\n position: absolute;\n top: 70px;\n left: 70px;\n width: 12px;\n height: 12px;\n border: solid 1px black;\n border-radius: 10px;\n margin-top: -6px;\n margin-left: -6px;\n background: none;\n}\n\n.cp-grid .cp-picker > div {\n position: absolute;\n top: 0;\n left: 0;\n width: 8px;\n height: 8px;\n border-radius: 8px;\n border: solid 2px white;\n @include box-sizing(content-box);\n}\n\n.cp-picker {\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 2px;\n background: white;\n border: solid 1px black;\n margin-top: -2px;\n @include box-sizing(content-box);\n z-index: 2;\n}\n\n/* Tabs */\n.cp-tabs {\n @include box-sizing(border-box);\n position: absolute;\n bottom: 0;\n color: #777;\n left: 0;\n right: 0;\n background: #eee;\n\n > div {\n display: inline-block;\n padding: 6px 0 4px;\n font-family: Helvetica, sans-serif;\n font-size: 11px;\n border-left: 1px solid #ddd;\n width: 48px;\n border-right: 0;\n text-align: center;\n cursor: pointer;\n\n &:first-child {\n border-left: 0;\n }\n\n &.active {\n background-color: #fff;\n }\n\n &.cp-tab-transp {\n width: 100%;\n border-top: 1px solid #ddd;\n }\n }\n}\n\n/* Default theme */\n.cp-theme-default.cp-wrapper {\n width: auto;\n display: inline-block;\n}\n\n.cp-theme-default .cp-input {\n height: 20px;\n width: auto;\n display: inline-block;\n padding-left: 26px;\n}\n\n.cp-theme-default.cp-position-right .cp-input {\n padding-right: 26px;\n padding-left: inherit;\n}\n\n.input-group .cp-theme-bootstrap:not(:first-child) .cp-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.g-colorpicker-preview-wrap {\n background-image: url(data:image/jpeg;base64,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);\n}\n",".datetime-picker-wrapper {\n position: relative;\n input {\n padding-right: 2.5rem;\n }\n\n .field-icons {\n position: absolute;\n top: 0;\n right: 10px;\n bottom: 0;\n line-height: 2.5rem;\n }\n}\n\n.collapse {\n display: none;\n &.in {\n display: block;\n }\n\n tr &.in {\n display: table-row;\n }\n\n tbody &.in {\n display: table-row-group;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition(height .35s ease, visibility .35s ease);\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n/* Bootstrap variables styling */\n.bootstrap-datetimepicker-widget {\n &.dropdown-menu {\n position: absolute;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, .15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n }\n\n .list-unstyled {\n padding-left: 0;\n list-style: none;\n }\n\n .collapse {\n display: none;\n visibility: hidden;\n\n &.in {\n display: block;\n visibility: visible;\n }\n }\n\n .datepicker-years .picker-switch {\n cursor: default !important;\n background: inherit !important;\n }\n\n .table-condensed > thead > tr > th {\n padding: 5px;\n }\n\n table {\n display: table;\n\n thead {\n display: table-header-group;\n }\n\n tbody {\n display: table-row-group;\n }\n\n tr {\n display: table-row;\n\n &:hover {\n background: inherit;\n }\n\n th, td {\n border: 0;\n display: table-cell;\n &:first-child {\n padding-left: inherit;\n }\n\n &:last-child {\n padding-right: inherit;\n }\n }\n }\n }\n}\n\n\n\n/*!\n * Datetimepicker for Bootstrap 3\n * ! version : 4.7.14\n * https://github.com/Eonasdan/bootstrap-datetimepicker/\n */\n$bs-datetimepicker-timepicker-font-size: 1.2em !default;\n$bs-datetimepicker-active-bg: white !default;\n$bs-datetimepicker-active-color: blue !default;\n$bs-datetimepicker-border-radius: 3px !default;\n$bs-datetimepicker-btn-hover-bg: #ddd !default;\n$bs-datetimepicker-disabled-color: #ccc !default;\n$bs-datetimepicker-alternate-color: #ccc !default;\n$bs-datetimepicker-secondary-border-color: #ccc !default;\n$bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default;\n$bs-datetimepicker-primary-border-color: white !default;\n$bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default;\n\n.bootstrap-datetimepicker-widget {\n list-style: none;\n\n &.dropdown-menu {\n margin: 2px 0;\n padding: 4px;\n width: 19em;\n\n &.timepicker-sbs {\n @media (min-width: 768px) {\n width: 38em;\n }\n\n @media (min-width: 992px) {\n width: 38em;\n }\n\n @media (min-width: 1200px) {\n width: 38em;\n }\n }\n\n &:before, &:after {\n content: '';\n display: inline-block;\n position: absolute;\n }\n\n &.bottom {\n &:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid $bs-datetimepicker-secondary-border-color;\n border-bottom-color: $bs-datetimepicker-secondary-border-color-rgba;\n top: -7px;\n left: 7px;\n }\n\n &:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid $bs-datetimepicker-primary-border-color;\n top: -6px;\n left: 8px;\n }\n }\n\n &.top {\n &:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-top: 7px solid $bs-datetimepicker-secondary-border-color;\n border-top-color: $bs-datetimepicker-secondary-border-color-rgba;\n bottom: -7px;\n left: 6px;\n }\n\n &:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid $bs-datetimepicker-primary-border-color;\n bottom: -6px;\n left: 7px;\n }\n }\n\n &.pull-right {\n &:before {\n left: auto;\n right: 6px;\n }\n\n &:after {\n left: auto;\n right: 7px;\n }\n }\n }\n\n .list-unstyled {\n margin: 0;\n }\n\n a[data-action] {\n padding: 6px 0;\n }\n\n a[data-action]:active {\n box-shadow: none;\n }\n\n .timepicker-hour, .timepicker-minute, .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: $bs-datetimepicker-timepicker-font-size;\n margin: 0;\n }\n\n button[data-action] {\n padding: 6px;\n }\n\n .btn[data-action=\"incrementHours\"]::after {\n @extend .sr-only;\n content: \"Increment Hours\";\n }\n\n .btn[data-action=\"incrementMinutes\"]::after {\n @extend .sr-only;\n content: \"Increment Minutes\";\n }\n\n .btn[data-action=\"decrementHours\"]::after {\n @extend .sr-only;\n content: \"Decrement Hours\";\n }\n\n .btn[data-action=\"decrementMinutes\"]::after {\n @extend .sr-only;\n content: \"Decrement Minutes\";\n }\n\n .btn[data-action=\"showHours\"]::after {\n @extend .sr-only;\n content: \"Show Hours\";\n }\n\n .btn[data-action=\"showMinutes\"]::after {\n @extend .sr-only;\n content: \"Show Minutes\";\n }\n\n .btn[data-action=\"togglePeriod\"]::after {\n @extend .sr-only;\n content: \"Toggle AM/PM\";\n }\n\n .btn[data-action=\"clear\"]::after {\n @extend .sr-only;\n content: \"Clear the picker\";\n }\n\n .btn[data-action=\"today\"]::after {\n @extend .sr-only;\n content: \"Set the date to today\";\n }\n\n .picker-switch {\n text-align: center;\n\n &::after {\n @extend .sr-only;\n content: \"Toggle Date and Time Screens\";\n }\n\n td {\n padding: 0;\n margin: 0;\n height: auto;\n width: auto;\n line-height: inherit;\n\n span {\n line-height: 2.5;\n height: 2.5em;\n width: 100%;\n }\n }\n }\n\n table {\n width: 100%;\n margin: 0;\n\n\n & td,\n & th {\n text-align: center;\n border-radius: $bs-datetimepicker-border-radius;\n }\n\n & th {\n height: 29px;\n line-height: 29px;\n width: 29px;\n\n &.picker-switch {\n width: 145px;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n\n &.prev::after {\n @extend .sr-only;\n content: \"Previous Month\";\n }\n\n &.next::after {\n @extend .sr-only;\n content: \"Next Month\";\n }\n }\n\n & thead tr:first-child th {\n cursor: pointer;\n\n &:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n }\n }\n\n & td {\n height: 54px;\n line-height: 54px;\n width: 54px;\n\n &.cw {\n font-size: .8em;\n height: 20px;\n line-height: 20px;\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.day {\n height: 29px;\n line-height: 29px;\n width: 29px;\n }\n\n &.day:hover,\n &.hour:hover,\n &.minute:hover,\n &.second:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n cursor: pointer;\n }\n\n &.old,\n &.new {\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.today {\n position: relative;\n\n &:before {\n content: '';\n display: inline-block;\n border: 0 0 7px 7px solid transparent;\n border-bottom-color: $bs-datetimepicker-active-bg;\n border-top-color: $bs-datetimepicker-secondary-border-color-rgba;\n position: absolute;\n bottom: 4px;\n right: 4px;\n }\n }\n\n &.active,\n &.active:hover {\n background-color: $bs-datetimepicker-active-bg;\n color: $bs-datetimepicker-active-color;\n text-shadow: $bs-datetimepicker-text-shadow;\n }\n\n &.active.today:before {\n border-bottom-color: #fff;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n\n span {\n display: inline-block;\n width: 54px;\n height: 54px;\n line-height: 54px;\n margin: 2px 1.5px;\n cursor: pointer;\n border-radius: $bs-datetimepicker-border-radius;\n\n &:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n }\n\n &.active {\n background-color: $bs-datetimepicker-active-bg;\n color: $bs-datetimepicker-active-color;\n text-shadow: $bs-datetimepicker-text-shadow;\n }\n\n &.old {\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n }\n }\n }\n\n &.usetwentyfour {\n td.hour {\n height: 27px;\n line-height: 27px;\n }\n }\n}\n\n.input-group.date {\n & .input-group-addon {\n cursor: pointer;\n }\n}\n",".fjs-container {\n display: flex;\n font-size: .9em;\n min-height: 400px;\n overflow: auto;\n overflow-x: scroll;\n\n &:focus {\n outline: none;\n }\n\n .fjs-col {\n border-right: solid 1px lightgray;\n max-height: 600px;\n min-height: inherit;\n min-width: 200px;\n overflow-y: auto;\n }\n\n .fjs-item a {\n color: black;\n justify-content: space-between;\n padding: 5px;\n text-decoration: none;\n display: flex;\n align-items: center;\n }\n\n .fjs-item a:focus {\n outline: none;\n }\n\n .fjs-item a span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .fjs-item a span i {\n padding-right: 5px;\n }\n\n //.fjs-active a {\n // background-color: #DEDEDE;\n //}\n //\n //.fjs-col:nth-last-child(2) .fjs-active a,\n //.fjs-col:last-child .fjs-active a {\n // background-color: dodgerblue;\n // color: white;\n //}\n\n .info-container {\n display: flex;\n align-items: center;\n }\n\n .fjs-list {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .fjs-item-content {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .fa-caret-right {\n //color: gray;\n padding: 0 0 0 .5em;\n }\n\n .fjs-col:nth-last-child(2) .fjs-active a .fa-caret-right,\n .fjs-col:last-child .fjs-active a .fa-caret-right {\n //color: white;\n }\n\n .leaf-col {\n align-items: center;\n border-right: 0;\n display: flex;\n flex: 2;\n justify-content: center;\n padding: 0 1.5em;\n }\n\n .leaf-row {\n display: flex;\n flex-direction: column;\n font-size: 1.3em;\n text-align: center;\n }\n\n .leaf-row .fa {\n //color: #A7A7A7;\n font-size: 4em;\n margin: 20px 0;\n }\n\n .leaf-row .fa-refresh {\n font-size: 2em;\n }\n\n .leaf-col .meta {\n font-size: .7em;\n }\n\n .leaf-col .meta strong {\n //color: #C1C1C1;\n font-weight: normal;\n }\n\n .leaf-col .meta:first-of-type {\n margin-top: 1.5em;\n }\n}\n\n.fjs-path-bar {\n font-size: 0.9em;\n padding: .25rem .5rem;\n //background: #f6f6f6;\n //border-bottom: 1px solid #eee;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n [data-breadcrumb-node] {\n cursor: pointer;\n\n &:hover {\n span {\n text-decoration: underline;\n }\n }\n }\n\n .fa-chevron-right {\n font-size: .8em;\n }\n}\n\n[data-parents-field-name] {\n font-weight: bold;\n}\n\n.fjs-container, .fjs-path-bar {\n .fa-folder {\n color: #90E4FF;\n }\n\n .fa-file-o {\n color: #A7A7A7;\n }\n\n .fa-external-link {\n color: #629EFF;\n font-size: smaller;\n }\n}\n",".switch-toggle {\n display: inline-block;\n display: inline-flex;\n overflow: hidden;\n border-radius: $form-border-radius;\n line-height: 35px;\n\n input[type=radio] {\n position: absolute;\n visibility: hidden;\n display: none;\n }\n\n label {\n display: inline-block;\n cursor: pointer;\n padding: 0 15px;\n white-space: nowrap;\n }\n}\n","// +-------------------------------------------------------------------------+\n// | Flat Colors |\n// +-------------------------------------------------------------------------+\n\n// Greens\n$color-navy: #001f3f;\n$color-blue: #0074D9;\n$color-aqua: #7FDBFF;\n$color-teal: #39CCCC;\n$color-olive: #3D9970;\n$color-green: #2ECC40;\n$color-lime: #01FF70;\n$color-yellow: #FFDC00;\n$color-orange: #FF851B;\n$color-red: #FF4136;\n$color-maroon: #85144b;\n$color-fuchsia: #F012BE;\n$color-purple: #B10DC9;\n\n// +-------------------------------------------------------------------------+\n// | Flat UI |\n// +-------------------------------------------------------------------------+\n\n// Greens\n$flat-turquoise: #1ABC9C;\n$flat-green-sea: #16A085;\n$flat-emerald: #2ECC71;\n$flat-nephritis: #27AE60;\n\n// Blues\n$flat-peter-river: #3498DB;\n$flat-belize-hole: #2980B9;\n$flat-wet-asphalt: #34495E;\n$flat-midnight-blue: #2C3E50;\n\n// Purples\n$flat-amethyst: #9B59B6;\n$flat-wisteria: #8E44AD;\n\n// Yellows\n$flat-sunflower: #F1C40F;\n\n// Oranges\n$flat-orange: #F39C12;\n$flat-carrot: #E67E22;\n$flat-pumpkin: #D35400;\n\n// Reds\n$flat-alizarin: #E74C3C;\n$flat-pomegranate: #C0392B;\n\n// Grays\n$flat-clouds: #ECF0F1;\n$flat-silver: #BDC3C7;\n$flat-concrete: #95A5A6;\n$flat-asbestos: #7F8C8D;\n\n// Aliases make colors easier to remember.\n\n// Greens\n$flat-green-1: $flat-turquoise;\n$flat-green-2: $flat-green-sea;\n$flat-green-3: $flat-emerald;\n$flat-green-4: $flat-nephritis;\n\n// Blues\n$flat-blue-1: $flat-peter-river;\n$flat-blue-2: $flat-belize-hole;\n$flat-blue-3: $flat-wet-asphalt;\n$flat-blue-4: $flat-midnight-blue;\n\n// Purples\n$flat-purple-1: $flat-amethyst;\n$flat-purple-2: $flat-wisteria;\n\n// Yellows\n$flat-yellow-1: $flat-sunflower;\n\n// Oranges\n$flat-orange-1: $flat-orange;\n$flat-orange-2: $flat-carrot;\n$flat-orange-3: $flat-pumpkin;\n\n// Refs\n$flat-red-1: $flat-alizarin;\n$flat-red-2: $flat-pomegranate;\n\n// Grays\n$flat-gray-1: $flat-clouds;\n$flat-gray-2: $flat-silver;\n$flat-gray-3: $flat-concrete;\n$flat-gray-4: $flat-asbestos;\n\n","html, body {\n\theight: 100%;\n}\n\nbody {\n\t-webkit-font-smoothing: antialiased;\n \t-moz-osx-font-smoothing: grayscale;\n overflow: hidden;\n}\n\nb, strong {\n\tfont-weight: $font-weight-bold\n}\n\n.bigger {\n font-size: 1.2rem;\n\n}\n\n.button-bar {\n text-align: right;\n float: right;\n z-index: 0;\n}\n\n.alert {\n font-size: 1rem;\n padding: 0.5rem $padding-default;\n position: relative;\n\n @include breakpoint(mobile-only) {\n padding: 0.5rem 1rem;\n }\n}\n\n.badge {\n display: inline-block;\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 10px;\n padding: 0px 6px;\n min-width: 20px;\n line-height: 20px;\n text-align: center;\n}\n\n.empty-state {\n margin: 0 auto;\n text-align: center;\n padding-top: 100px;\n}\n",".default-animation {\n @include transition(all 0.5s ease);\n}\n\n// Pulse Animation\n.pulse {\n\tanimation-name: pulse_animation;\n\tanimation-duration: 2000ms;\n\ttransform-origin:70% 70%;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n}\n\n@keyframes pulse_animation {\n\t0% { transform: scale(1); }\n\t30% { transform: scale(1); }\n\t40% { transform: scale(1.08); }\n\t50% { transform: scale(1); }\n\t60% { transform: scale(1); }\n\t70% { transform: scale(1.05); }\n\t80% { transform: scale(1); }\n\t100% { transform: scale(1); }\n}\n\n.default-border-radius {\n border-radius: 4px;\n}\n\n.default-glow-shadow {\n box-shadow: 0 0 20px rgba(0,0,0,0.2);\n}\n\n.default-box-shadow {\n box-shadow: 0 0 10px 2px rgba(0,0,0,0.03);\n}\n\n.login-box-shadow {\n\tbox-shadow: 0 10px 100px 0px rgba(0,0,0,0.4);\n}\n\n.padding-horiz {\n\tpadding-left: $padding-horiz;\n\tpadding-right: $padding-horiz;\n\t@include breakpoint(desktop-only) {\n\t\tpadding-left: $padding-horiz - 3rem;\n\t\tpadding-right: $padding-horiz - 3rem;\n\t}\n\n\t@include breakpoint(mobile-only) {\n\t\tpadding-left: $padding-horiz - 6rem;\n\t\tpadding-right: $padding-horiz - 6rem;\n\t}\n}\n\n.padding-vert {\n\tpadding-top: $padding-vert;\n\tpadding-bottom: $padding-vert;\n}\n","@include breakpoint(mobile-only) {\n .hidden-mobile {\n display: none!important;\n }\n}\n","// Header styling\n\n\n","// Body Base\nbody {\n\tfont-weight: 400;\n @include breakpoint(mobile-only) {\n font-size: 0.8rem;\n }\n}\n\n// Headings\nh1, h2, h3, h4, h5, h6 {\n\tfont-weight: 400;\n\ttext-rendering: optimizeLegibility;\n\tletter-spacing: -0px;\n}\n\nh1 {\n\tfont-size: $h1-font-size;\n @include breakpoint(mobile-only) {\n font-size: 2.5rem;\n line-height: 1.2;\n margin-bottom: 2.5rem;\n }\n}\n\nh2 {\n\t@include breakpoint(tablet-range) {\n\t\tfont-size: $h2-font-size - .40;\n\t}\n\t@include breakpoint(mobile-only) {\n\t\tfont-size: $h2-font-size - .50;\n\t}\n}\n\nh3 {\n\t@include breakpoint(tablet-range) {\n\t\tfont-size: $h3-font-size - .40;\n\t}\n\t@include breakpoint(mobile-only) {\n\t\tfont-size: $h3-font-size - .50;\n\t}\n}\n\nh4 {\n\t@include breakpoint(tablet-range) {\n\t\tfont-size: $h4-font-size - .40;\n\t}\n\t@include breakpoint(mobile-only) {\n\t\tfont-size: $h4-font-size - .50;\n\t}\n}\n\nh1 {\n\tletter-spacing: -3px;\n}\n\nh2 {\n\tletter-spacing: -2px;\n}\n\nh3 {\n\tletter-spacing: -1px;\n}\n\n// Icon Tweaks\ni.fa {\n\t&.fa-heart, &.fa-heart-o {\n\t\t&.pulse {\n\t\t\tcolor: #920\n\t\t}\n\t}\n}\n\ncode {\n vertical-align: inherit;\n}\n\npre {\n\tpadding: 2rem;\n\tborder-radius: 3px;\n\tcode {\n\t\tbackground: inherit;\n\t}\n}\n\n// Label\n.label {\n vertical-align: middle;\n border-radius: 100%;\n height: 1rem;\n min-width: 1rem;\n line-height: 1rem;\n display: inline-block;\n text-align: center;\n font-size: $core-font-size - 0.3rem;\n margin-right: 0.75rem;\n}\n\n// Display RESET\nform {\n .form-display-wrapper {\n h1 {\n padding: 0 !important;\n font-size: 1.7rem !important;\n border-bottom-width: 2px !important;\n }\n\n h2 {\n padding: 0 !important;\n font-size: 1.5rem !important;\n border-bottom-width: 1px !important;\n }\n\n h3 {\n padding: 0 !important;\n font-size: 1.3rem !important;\n border-bottom-width: 1px !important;\n }\n\n h4 {\n padding: 0 !important;\n font-size: 1.1rem !important;\n }\n\n blockquote {\n padding: 15px;\n p {\n font-size: 0.9rem;\n color: inherit;\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n code, pre {\n font-size: 0.8rem;\n }\n\n table {\n border-collapse: collapse;\n width: 100%;\n\n th {\n padding: 10px !important;\n &:last-child {\n border-right: none;\n }\n }\n\n td {\n padding: 10px !important;\n &:last-child {\n border-right: none;\n }\n }\n\n tr {\n &:last-child {\n border-bottom: none;\n }\n }\n }\n }\n\n}\n\n","// Forms\nform {\n\n h1, h3, .form-spacer h3 {\n padding: 0 $padding-default 0.5rem;\n margin: 0 0 1rem;\n font-size: 1.5rem;\n text-align: left;\n letter-spacing: -1px;\n }\n\n h3 {\n padding-left: 0;\n }\n\n p {\n padding: 0 $padding-default;\n }\n\n pre {\n padding: 1.5rem 3rem;\n }\n\n .nowrap {\n white-space: nowrap;\n }\n\n .form-description {\n p {\n padding: 0;\n }\n }\n\n .button {\n @include breakpoint(mobile-only) {\n padding: 0.25rem 0.5rem;\n }\n }\n\n .form-field {\n margin-bottom: 1rem;\n padding-left: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-left: 1rem;\n }\n\n\n\n .file-thumbnail-wrapper {\n display: inline-block;\n position: relative;\n }\n\n .file-thumbnail {\n max-height: 150px;\n vertical-align: top;\n display: inline-block;\n margin-bottom: 10px;\n }\n\n .file-thumbnail-remove {\n position: absolute;\n text-align: center;\n display: block;\n top: 3px;\n right: 3px;\n width: 25px;\n height: 25px;\n border-radius:100%;\n\n .fa {\n font-size: 20px;\n line-height: 25px;\n vertical-align: top;\n }\n }\n }\n\n .form-data {\n padding-right: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-right: 1rem;\n }\n }\n\n .form-input-addon-wrapper {\n display: flex;\n\n .form-input-addon {\n display: flex;\n padding: 0 5px;\n justify-content: center;\n align-items: center;\n\n &.copy-to-clipboard {\n cursor: pointer;\n }\n }\n input {\n height: 35px;\n display: table-cell;\n }\n .form-input-prepend {\n border-radius: 4px 0 0 4px;\n border-right-width: 0 !important;\n\n }\n .form-input-append {\n border-radius: 0 4px 4px 0;\n border-left-width: 0 !important;\n }\n\n input:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n input:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n .overlay {\n padding-top: 1rem;\n padding-bottom: 1px;\n\n &.bottom {\n margin: 2rem auto -2rem auto;\n }\n }\n\n .required {\n display: inline-block;\n font-family: helvetica, arial, sans-serif;\n vertical-align: middle;\n line-height: 0;\n font-size: 30px;\n margin-left: 0px;\n margin-bottom: -5px;\n }\n\n label {\n padding: 5px 0;\n font-weight: 400;\n margin:0;\n\n p {\n margin: 0;\n }\n\n [data-hint] {\n display: inline;\n }\n\n &.inline {\n display: inline;\n vertical-align: middle;\n margin-right: 15px;\n }\n\n &.toggleable {\n display: inline;\n }\n }\n\n .form-sublabel {\n p {\n opacity: 0.8;\n font-size: 0.9rem;\n margin: 10px 20px 0 0;\n padding: 0;\n }\n }\n\n input, select, textarea, button, .selectize-input {\n font-size: $core-font-size;\n line-height: $core-line-height;\n border-radius: $form-border-radius;\n -webkit-font-smoothing: antialiased;\n }\n\n .form-input-file {\n\n position: relative;\n min-height: 70px;\n border-radius: $form-border-radius;\n\n ul {\n margin: 1rem 0;\n text-align: left;\n font-size: 1rem;\n border-radius: $form-border-radius;\n }\n\n p {\n display: block;\n height: 100%;\n text-align: center;\n margin: 0;\n padding: 0.8rem 1rem 0;\n font-size: 1.2rem;\n }\n\n input {\n display: none;\n }\n }\n\n\n .selectize-dropdown {\n z-index: 100000;\n }\n\n // vertical alignment of forms\n .grid.vertical {\n @include flex-flow(column);\n }\n\n // compact\n .compact {\n .form-field {\n margin-bottom: 0.2rem;\n }\n\n .form-list-wrapper {\n li {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .form-field {\n width: 50%;\n\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n }\n }\n }\n }\n\n .form-select-wrapper, .selectize-control.single .selectize-input {\n position: relative;\n\n &:after {\n margin-top: 0;\n border: 0;\n position: absolute;\n content: '\\f078';\n font-family: 'FontAwesome';\n right: 12px;\n top: 50%;\n line-height: 0;\n pointer-events: none;\n }\n }\n\n .selectize-input {\n display: block !important;\n box-shadow: none;\n padding: $form-select-pad;\n margin: 0;\n\n > input {\n font-size: $core-font-size;\n line-height: $core-line-height;\n }\n }\n\n .selectize-control.single.plugin-remove_button .selectize-input {\n .item, .remove-single {\n cursor: pointer;\n margin: 0 3px 3px 0;\n padding: 2px 6px;\n display: inline-block;\n border-radius: 2px 0 0 2px !important;\n }\n .remove-single {\n border-radius: 0 2px 2px 0 !important;\n margin-left: -2px;\n }\n }\n\n .selectize-control.single.plugin-remove_button .selectize-input,\n .selectize-control.multi .selectize-input {\n padding: ($leading-margin / 4) ($leading-margin / 4);\n\n &.has-items {\n padding-top: 6px;\n padding-bottom: 4px;\n }\n\n .item, .remove-single {\n border-radius: 2px;\n line-height: 1.5;\n }\n\n .item > img {\n max-height: 20px !important;\n max-width: inherit !important;\n }\n }\n\n .selectize-control.single .selectize-input {\n\n &:after {\n right: 27px;\n }\n &.dropdown-active {\n &:after {\n content: '\\f077';\n }\n }\n }\n\n .x-small {\n max-width: 5rem !important;\n\n &.form-input-addon-wrapper {\n max-width: inherit !important;\n input {\n max-width: 5rem !important;\n }\n }\n }\n\n .small {\n max-width: 10rem !important;\n\n &.form-input-addon-wrapper {\n max-width: inherit !important;\n input {\n max-width: 10rem !important;\n }\n }\n }\n\n .medium:not(.switch-toggle), .medium.form-input-addon-wrapper input {\n max-width: 20rem;\n textarea {\n height: 7rem;\n }\n\n &[data-grav-array-type=\"container\"] {\n max-width: 100% !important;\n input[type=text] {\n width: calc(70% - 110px);\n }\n }\n }\n\n .large, .large.form-input-addon-wrapper input {\n max-width: 30rem !important;\n\n textarea {\n height: 10rem;\n }\n\n &[data-grav-array-type=\"container\"] {\n max-width: 100% !important;\n input[type=text] {\n width: calc(100% - 110px);\n }\n }\n }\n\n select {\n width: 100%;\n -webkit-appearance:none;\n -moz-appearance:none;\n appearance:none;\n padding: $form-select-pad;\n cursor: pointer;\n margin: 0;\n }\n\n input[type=text],\n input[type=password],\n input[type=email],\n input[type=date],\n input[type=tel],\n input[type=time],\n input[type=week],\n input[type=month],\n input[type=number],\n input[type=color],\n input[type=url] {\n width: 100%;\n }\n\n textarea {\n width: 100%;\n }\n\n .form-frontmatter-wrapper {\n border-radius: $form-border-radius;\n }\n\n .switch-toggle {\n label {\n cursor: pointer;\n }\n\n a,label {\n outline: none !important;\n }\n }\n\n .dynfields, [data-grav-field=\"array\"], [data-grav-field=\"multilevel\"] {\n\n input[type=text] {\n width: 40%;\n float: left;\n margin: 0 5px 5px 0;\n }\n\n .form-row {\n display: inline-block;\n width: 100%;\n margin-right: 0;\n max-width: 100% !important;\n\n span {\n padding: 0.5rem;\n display: inline-block;\n line-height: 1.5;\n cursor: pointer;\n\n &[data-grav-array-action=\"sort\"] {\n float: left;\n cursor: move;\n }\n }\n\n &.array-field-value_only {\n width: 100%;\n }\n }\n }\n\n [data-grav-field=\"multilevel\"] input:disabled {\n background-color: lightgray;\n }\n\n [data-grav-array-type=\"container\"].one-child {\n [data-grav-array-action=\"sort\"] {\n display: none;\n }\n }\n\n .button-bar {\n margin-top: 1rem;\n padding: 1.2rem 3rem;\n width: 100%;\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n\n .checkboxes {\n display: inline-block;\n padding: 5px 0;\n\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n label {\n display: inline;\n cursor: pointer;\n position: relative;\n padding: 0 0 0 2rem;\n margin-right: 15px;\n\n }\n label:before {\n content:\"\";\n display: inline-block;\n width: 1.5rem;\n height: 1.5rem;\n top: 50%;\n left: 0;\n margin-top: -0.75rem;\n margin-right: 10px;\n position: absolute;\n border-radius: $form-border-radius;\n }\n input[type=checkbox] {\n display: none;\n }\n input[type=checkbox]:checked + label:before {\n content:\"\\f00c\";\n font-family: \"FontAwesome\", sans-serif;\n font-size: 1.2rem;\n line-height: 1;\n text-align: center;\n }\n\n &.toggleable label{\n margin-right: 0;\n }\n }\n}\n\n// Display\n.form-display-wrapper {\n p {\n padding-left: 0;\n padding-right: 0;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n// Frontmatter Field\ndiv.frontmatter {\n margin-bottom: 3rem;\n}\n\n// parents\n[data-grav-field=\"parents\"] {\n\n .form-input-wrapper {\n cursor: pointer;\n\n i {\n margin-right: .25rem;\n }\n }\n}\n\n[data-remodal-id].parents-container {\n form {\n overflow: hidden;\n }\n\n form > h1 {\n margin-bottom: 0;\n border-bottom: 1px solid #eee;\n }\n form > .button-bar {\n margin-top: 0;\n }\n\n .fjs-list {\n overflow: auto;\n overflow-y: scroll;\n max-height: 400px;\n min-height: 100%;\n }\n\n .fjs-item {\n margin-left: 0;\n list-style-type: none;\n text-align: left;\n }\n\n .parents-content:empty {\n display: none;\n }\n}\n\ntextarea.frontmatter {\n height: 130px !important;\n\n & + .CodeMirror {\n height: 130px;\n }\n}\n\n// parents\n[data-grav-field=\"parents\"] {\n\n .form-input-wrapper {\n cursor: pointer;\n\n i {\n margin-right: .25rem;\n }\n }\n}\n\n[data-remodal-id].parents-container {\n form {\n overflow: hidden;\n }\n\n form > h1 {\n margin-bottom: 0;\n border-bottom: 1px solid #eee;\n }\n form > .button-bar {\n margin-top: 0;\n }\n\n .fjs-list {\n overflow: auto;\n overflow-y: scroll;\n max-height: 400px;\n min-height: 100%;\n }\n\n .fjs-item {\n margin-left: 0;\n list-style-type: none;\n text-align: left;\n }\n\n .parents-content:empty {\n display: none;\n }\n}\n\n// Sortables\n.form-order-wrapper {\n\n .notice {\n padding: 5px;\n }\n\n ul.orderable {\n\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n padding: 0.2rem 1rem;\n border-radius: $form-border-radius;\n margin: 3px 0;\n position: relative;\n\n &.drag-handle {\n cursor: move;\n &::after {\n content: '\\f0c9';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n }\n }\n\n i {\n font-size: 0.8rem;\n }\n }\n }\n}\n\n// Sortables\n.form-list-wrapper {\n ul[data-collection-holder] {\n\n list-style: none;\n margin: 0;\n padding: 0;\n\n > li {\n padding: 1rem;\n border-radius: $form-border-radius;\n margin: 3px 0;\n position: relative;\n\n .item-actions {\n position: absolute;\n right: 10px;\n top: 4px;\n\n .fa {\n cursor: pointer;\n }\n }\n\n &.collection-collapsed {\n height: 70px;\n overflow: hidden;\n @include transform(translateZ(0));\n\n @include breakpoint(mobile-only) {\n height: 120px;\n }\n }\n }\n\n &[data-collection-nosort] > li {\n cursor: default;\n }\n }\n\n .collection-actions {\n text-align: right;\n }\n\n .collection-sort {\n position: absolute;\n top: 0;\n left: 0;\n width: 32px;\n bottom: 0;\n cursor: move;\n\n @include breakpoint(mobile-only) {\n width: 20px;\n\n .fa {\n font-size: 0.8rem;\n }\n }\n\n .fa {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n [data-collection-nosort] .collection-sort {\n display: none;\n }\n}\n\n.form-label.block {\n position: relative;\n\n &:hover {\n z-index: 2;\n }\n label {\n z-index: 2;\n }\n}\n\n// Fieldset\n#admin-main .admin-block h2 {\n font-size: 1.25rem;\n margin: 0 0 .5rem;\n\n letter-spacing: normal;\n}\n.form-fieldset {\n margin: 1rem 1.5rem;\n}\n\n.form-fieldset--label {\n label {\n display: table;\n font-size: 1.25rem;\n padding: .5rem 1rem;\n width: 100%;\n }\n\n h2 {\n margin: 0 !important;\n }\n\n .actions {\n font-size: initial;\n display: table-cell;\n text-align: right;\n vertical-align: middle;\n }\n\n & + .form-data {\n margin-top: 1rem;\n padding: 0;\n }\n}\n.form-fieldset--cursor {\n cursor: pointer;\n}\n.form-fieldset--info {\n font-size: small;\n}\n.form-fieldset > input:checked ~ .form-data,\n.form-fieldset--collapsible .open,\n.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .close {\n display: block;\n}\n.form-fieldset > .form-data,\n.form-fieldset--collapsible .close,\n.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .open {\n display: none;\n}\n\n.filepicker-field-image {\n width: 30px;\n vertical-align: middle;\n margin-right: 5px;\n}\n\n.filepicker-field-name {\n vertical-align: middle;\n}\n\n.permissions-container {\n .permission-value {\n width: 50%;\n float: left;\n margin: 0 5px 5px 0;\n height: 39px;\n }\n\n .switch-toggle {\n line-height: 37px;\n margin: 0 5px 5px 0;\n\n }\n\n .crudp-container {\n display: flex;\n\n .checkboxes.toggleable {\n\n display: block;\n\n label {\n display: inline-flex;\n padding: inherit;\n\n padding-left: 1.5rem;\n padding-right: 0.5rem;\n font-weight: bold;\n\n\n border-top-width: 1px;\n border-bottom-width: 1px;\n border-right-width: 1px;\n border-left-width: 0;\n border-style: solid;\n\n &:before {\n border: none;\n background: none;\n }\n\n }\n\n & input[type=checkbox] + label:before {\n content:\"\\f023\";\n font-family: \"FontAwesome\";\n font-size: 0.8rem;\n line-height: 1.8;\n text-align: center;\n }\n\n\n &[data-_check-status=\"1\"] input[type=checkbox] + label:before {\n content:\"\\f00c\";\n font-family: \"FontAwesome\";\n }\n\n &[data-_check-status=\"2\"] input[type=checkbox] + label:before {\n content:\"\\f05e\";\n }\n }\n\n & > div:first-child {\n .checkboxes.toggleable {\n label {\n border-left-width: 1px;\n border-radius: $form-border-radius 0 0 $form-border-radius;\n }\n }\n }\n\n & > div:last-of-type {\n .checkboxes.toggleable {\n label {\n border-right-width: 1px;\n border-radius: 0 $form-border-radius $form-border-radius 0;\n }\n }\n }\n }\n}\n\n[data-grav-field=\"cron\"] {\n display: flex;\n align-items: center;\n}\n\n.cron-install {\n\n margin: 1rem;\n padding: 0;\n border-radius: 4px;\n\n form & pre {\n padding: 1rem;\n margin: 0 1.5rem;\n line-height: 1;\n }\n .setup-status {\n font-weight: bold;\n }\n}\n\n.cron-status, .backups-history {\n\n margin-bottom: 4rem;\n\n .cron-at code {\n font-size: 120%;\n padding: 2px 10px;\n border-radius: 2px;\n }\n\n .badge {\n white-space: nowrap;\n }\n\n tr {\n\n &.deleting {\n background: #efefef;\n color: #bbb;\n text-shadow: 0 1px white;\n\n button, .button {\n background: #777;\n pointer-events: none;\n }\n }\n }\n}\n\nform .cron-job-list, form .backups-list {\n li {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .form-field.grid {\n width: calc(50% - 5px);\n\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n }\n}\n","table,\ntbody,\nthead {\n display: inline-block;\n width: 100%;\n}\n\n.gpm-details {\n width: 100%;\n @include flex(auto);\n}\n\ntd {\n border: 0;\n}\n\ntr {\n @include transition(all 0.2s ease);\n\n @include display(flex);\n @include flex-wrap(wrap);\n @include align-items(center);\n\n th, td {\n display: block;\n @include flex(1);\n\n &.shrink {\n @include flex(0);\n }\n\n &.double {\n @include flex(2);\n }\n\n &.triple {\n @include flex(3);\n }\n\n &.quadruple {\n @include flex(4);\n }\n\n &.quintuple {\n @include flex(5);\n }\n\n &.sextuple {\n @include flex(6);\n }\n\n &.septuple {\n @include flex(7);\n }\n\n &.octuple {\n @include flex(8);\n }\n\n &.nontuple {\n @include flex(9);\n }\n\n &.dectuple {\n @include flex(10);\n }\n\n &:first-child {\n padding-left: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-left: 1rem;\n }\n }\n\n &:last-child {\n padding-right: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-right: 1rem;\n }\n }\n\n &.left {\n text-align: left;\n }\n\n &.center {\n text-align: center;\n }\n\n &.right {\n text-align: right;\n }\n\n &.right.pad {\n padding-right: $padding-default;\n .form-data {\n padding-right: 0;\n }\n }\n\n &.left.pad {\n padding-left: $padding-default;\n }\n\n &.ellipsis {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n &.rtl {\n text-align: left;\n }\n }\n\n &.rtl {\n direction: rtl;\n }\n }\n\n th {\n font-weight: bold;\n }\n\n td {\n\n &.gpm-actions {\n line-height: 1;\n text-align: right;\n position: relative;\n padding-right: $padding-default + 1rem;\n min-height: 38px;\n\n .gpm-details-expand {\n position: absolute;\n top: 12px;\n right: 12px;\n }\n }\n\n &.gpm-details {\n margin: 0;\n padding: 0;\n\n @include breakpoint(mobile-only){\n word-wrap: break-word;\n }\n\n > .table-wrapper {\n display: none;\n\n td {\n border-bottom: 0;\n }\n }\n\n tbody {\n width: 100%;\n }\n }\n }\n\n &:last-child {\n td {\n border-bottom: 0;\n }\n }\n}\n\ntable.noflex {\n display: table;\n table-layout: auto;\n\n thead {\n display: table-header-group;\n }\n\n tbody {\n display: table-row-group;\n }\n\n tr {\n display: table-row;\n\n td, th {\n flex: none;\n display: table-cell;\n }\n }\n}\n",".button {\n\t@extend %button;\n}\n\n.button-group {\n position: relative;\n display: inline-block;\n vertical-align: top;\n\n // real button\n > .button:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n }\n\n > .button:first-child {\n margin-left: 0 !important;\n }\n\n > .button {\n }\n\n // toggle caret\n > .button + .dropdown-toggle {\n text-align: center;\n padding-right: 8px;\n padding-left: 8px;\n\n i {\n margin: 0;\n }\n }\n\n > .button:last-child:not(:first-child), > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n }\n\n .button + .button, .button + .button-group, .button-group + .button, .button-group + .button-group {\n margin-left: -3px;\n }\n\n &:last-child {\n .dropdown-menu {\n left: inherit;\n right: 0;\n }\n }\n\n .dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 150px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border-radius: 4px;\n\n .button {\n margin-right: 0 !important;\n }\n\n &.language-switcher {\n min-width: 50px;\n }\n\n &.lang-switcher {\n min-width: 150px;\n left: inherit;\n right: 0;\n\n button {\n width: 100%;\n }\n }\n\n .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n }\n\n li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n\n &:focus, &:hover {\n text-decoration: none;\n }\n }\n }\n}\n\n.open > .dropdown-menu {\n display: block;\n}\n\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n\n// Override style for stubborn gumroad button\n#admin-main .admin-block a.gumroad-button {\n padding: 0.5rem 1rem !important;\n font-size: inherit !important;\n font-weight: 400 !important;\n line-height: inherit !important;\n font-family: inherit !important;\n border-radius: 4px !important;\n box-shadow: inherit !important;\n .gumroad-button-logo {\n display: none !important;\n background-image: none !important;\n }\n}\n","// Error specific styling\n#error {\n\ttext-align: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tpadding-bottom: 6rem;\n\n\th1 {\n\t\tfont-size: $core-font-size + 4.0rem;\n\t}\n\n\tp {\n\t\tmargin: 1rem 0;\n\t}\n}\n","#admin-login {\n @extend %vertical-align;\n max-width: 24rem;\n margin: 0 auto;\n\n &.wide {\n max-width: 50rem;\n\n h1 {\n height: 100px;\n\n &.custom-logo img {\n height: 80px;\n }\n }\n\n form {\n > .padding {\n padding: 3rem 2rem 8rem 2rem;\n > div {\n width: 49%;\n display: inline-block;\n\n @include breakpoint(mobile-only) {\n width: 100%;\n margin-right: 0;\n }\n }\n\n .form-field {\n padding: 0 1rem;\n }\n }\n\n label {\n padding: 0;\n }\n\n input {\n margin-bottom: 1rem;\n text-align: left;\n\n @include placeholder {\n font-size: 1rem;\n line-height: 2rem;\n }\n }\n\n }\n\n .grid {\n display: block;\n }\n\n .form-label, .form-data {\n display: block;\n width: 100%;\n @include flex(1);\n }\n }\n\n .form-field {\n padding-left: 0;\n margin-bottom: 0;\n }\n\n .form-label {\n display: none;\n }\n\n .form-data {\n padding-right: 0;\n }\n\n .wrapper-spacer {\n width: 100% !important;\n display: block !important;\n padding: 0 1rem;\n h3 {\n padding-left: 1rem;\n }\n }\n\n .instructions {\n display: block;\n padding: 2rem 3rem 0;\n margin: 0;\n font-size: 1.3rem;\n p {\n margin: 0;\n }\n }\n\n h1 {\n font-size: 0;\n color: transparent;\n height: 216px;\n margin: 0;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.text-logo {\n text-align: center;\n font-size: 4rem;\n }\n\n &.custom-logo {\n img {\n max-height: 160px;\n }\n }\n\n &.default-logo {\n svg {\n height: 320px;\n }\n }\n }\n\n h5 {\n margin-top: 0;\n text-align: center;\n }\n\n form {\n position: relative;\n\n .padding {\n padding: 3rem 3rem 6rem 3rem;\n }\n\n input {\n margin-bottom: 2rem;\n font-size: 1.4rem;\n line-height: 1.5;\n text-align: center;\n font-weight: 300;\n -webkit-font-smoothing: auto;\n }\n\n .form-actions {\n display: block !important;\n width: 100% !important;\n text-align: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1.5rem 0;\n\n .button {\n margin-bottom: 2px;\n }\n\n button:first-child {\n margin-right: 1rem;\n }\n }\n }\n\n .alert {\n text-align: center;\n padding: 1rem 3rem;\n }\n}\n\n.twofa-secret-code {\n font-weight: bold;\n}\n\n.twofa-wrapper {\n margin-top: 5px;\n}\n\n\n.twofa-secret {\n position: absolute;\n opacity: 0;\n visibility: hidden;\n transition: opacity 600ms, visibility 600ms;\n\n &.show {\n position: static;\n visibility: visible;\n opacity: 1;\n }\n\n}\n","$topbar-height: 4.2rem;\n$update-height: 3rem;\n$sidebar-width-large: 240px;\n$sidebar-width-small: $topbar-height;\n$sidebar-padding: 2rem;\n$content-padding: 1.5rem;\n\n// Special cases\n.sidebar-closed:not(.sidebar-quickopen) {\n #admin-sidebar {\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-small;\n\n #admin-logo {\n h3 {\n font-size: 0;\n &:first-letter {\n font-size: 2.5rem;\n }\n }\n }\n\n .custom-logo {\n margin-right: 0;\n padding-right: 15px;\n\n img {\n padding: 0 5px;\n }\n }\n\n #grav-logo-small {\n display: inline-block;\n }\n\n #grav-logo-large {\n display: none;\n }\n\n .front-end {\n display: none;\n }\n\n #admin-user-details {\n padding: 15px 0 15px 10px;\n text-align: left;\n }\n\n .admin-user-names {\n display: none;\n }\n\n #admin-menu {\n em {\n display: none;\n }\n\n li {\n .badges {\n .updates {\n border-radius: 100%;\n position: absolute;\n top: 4px;\n right: 10px;\n font-size: 9px;\n line-height: 12px;\n padding: 1px 3px;\n min-width: 15px;\n }\n .count {\n display: none;\n }\n }\n }\n }\n\n #open-handle {\n @include breakpoint(large-desktop-plus) {\n .fa-angle-right:before {\n content: \"\\f105\";\n }\n }\n }\n }\n #admin-main {\n margin-left: $sidebar-width-small;\n }\n}\n\n.sidebar-open {\n #admin-sidebar {\n z-index: 10001;\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-large;\n\n h3 {\n font-size: 1.2rem;\n &:first-letter {\n font-size: 1.2rem;\n }\n }\n\n #grav-logo-small {\n display: none;\n }\n\n #grav-logo-large {\n display: inline-block;\n }\n\n #admin-user-details {\n padding: 15px 10px;\n text-align: left;\n }\n\n .admin-user-names {\n display: block;\n }\n\n .front-end {\n display: inline-block;\n }\n\n #admin-menu {\n em {\n display: inline;\n }\n\n li {\n .badges {\n .updates {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n position: relative;\n top: auto;\n right: auto;\n @extend .badge;\n }\n .count {\n display: inline-block;\n }\n }\n }\n }\n\n #open-handle {\n @include breakpoint(mini-nav-range) {\n .fa-angle-right:before {\n content: \"\\f104\";\n }\n }\n }\n }\n}\n\n#admin-sidebar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n max-height: 100vh;\n opacity: 0;\n z-index: 3;\n //transition: opacity 0.2s 0s, visibility 0s 0.2s;\n\n #open-handle {\n display: block;\n position: absolute;\n cursor: pointer;\n right:0;\n top: 0;\n width: 15px;\n height: $topbar-height;\n text-align: center;\n line-height: $topbar-height;\n font-size: 12px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n\n @include breakpoint(large-desktop-plus) {\n .fa-angle-right:before {\n content: \"\\f104\";\n }\n }\n }\n\n &.sidebar-is-visible {\n opacity: 1;\n visibility: visible;\n //transition: opacity 0.2s 0s, visibility 0s 0s\n }\n\n @include breakpoint(mobile-only) {\n z-index: 5;\n }\n\n @include breakpoint(tablet-plus) {\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-small;\n }\n\n @include breakpoint(large-desktop-plus) {\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-large;\n }\n\n}\n\n#admin-logo {\n height: $topbar-height;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.nav-hover {\n .admin-logo {\n margin-right: 0;\n }\n }\n\n .admin-logo {\n margin-right: -10px;\n\n @include breakpoint(tablet-plus) {\n margin-right: 0;\n &.custom-logo {\n\n padding-right: 15px;\n\n img {\n padding: 0 5px;\n }\n }\n }\n\n display: flex;\n align-items: center;\n\n a:not(.front-end) {\n display: inherit;\n }\n\n &.custom-logo {\n img {\n max-height: 30px;\n }\n }\n }\n\n .front-end {\n\n margin-left: 15px;\n opacity: 0.6;\n\n @include breakpoint(mobile-only) {\n display: none;\n }\n\n @include breakpoint(tablet-plus) {\n display: none;\n }\n\n @include breakpoint(large-desktop-plus) {\n display: inline-block;\n }\n\n }\n\n #grav-logo-small {\n height: 30px;\n display: none;\n\n @include breakpoint(tablet-plus) {\n display: inline-block;\n }\n\n @include breakpoint(large-desktop-plus) {\n display: none;\n }\n }\n\n #grav-logo-large {\n height: 30px;\n\n @include breakpoint(tablet-plus) {\n display: none;\n }\n\n @include breakpoint(large-desktop-plus) {\n display: inline-block;\n }\n }\n\n h3 {\n font-size: 1.5rem;\n margin: 0;\n\n @include breakpoint(tablet-plus) {\n font-size: 0;\n &:first-letter {\n font-size: 2.5rem;\n }\n }\n\n @include breakpoint(large-desktop-plus) {\n font-size: 1.5rem;\n &:first-letter {\n font-size: 1.5rem;\n }\n }\n\n i {\n font-size: 1rem;\n vertical-align: middle;\n margin-top: -1px;\n }\n }\n}\n\n.block-userinfo {\n img {\n width: 200px;\n height: 200px;\n object-fit: cover;\n }\n\n & ~ .block-file {\n margin-top: -5rem !important;\n }\n}\n\n#offline-status {\n padding: .2rem 1rem;\n text-align: center;\n display: none;\n\n .fa-plane {\n @include transform(rotate(45deg));\n }\n}\n\n#admin-user-details {\n img {\n width: 47px;\n height: 47px;\n object-fit: cover;\n }\n}\n\n#admin-user-details, .admin-user-details {\n padding: 15px 10px;\n min-height: 80px;\n overflow: hidden;\n text-align: left;\n\n @include breakpoint(mini-nav-range) {\n padding: 1rem 10px;\n text-align: center;\n }\n\n img {\n @include transition(all 0.5s ease);\n border-radius: 100%;\n float: left;\n }\n\n .admin-user-names {\n margin-left: 60px;\n margin-top: 5px;\n display: block;\n\n @include breakpoint(mini-nav-range) {\n display: none;\n }\n\n h4, h5 {\n margin: 0;\n font-size: 1rem;\n line-height: 1.3;\n }\n\n .badge {\n font-size: 0.8rem;\n }\n\n h5 {\n opacity: 0.7;\n font-size: 0.9rem;\n }\n }\n}\n\n#admin-nav-quick-tray {\n margin: 0;\n list-style: none;\n padding-left: 26px;\n padding-right: 10px;\n\n\n li {\n cursor: pointer;\n width: 24px;\n margin: 3px 0 5px;\n }\n\n i {\n transition: all .2s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n }\n}\n\n.content-padding {\n #messages.default-box-shadow {\n margin-bottom: $content-padding;\n\n @include breakpoint(mobile-only) {\n margin-bottom: 0.5rem;\n }\n }\n}\n\n\n.admin-menu-wrapper {\n height: calc(100vh - 180px);\n //overflow: hidden;\n\n @include breakpoint(mini-nav-range) {\n height: calc(100vh - 136px);\n }\n}\n\n#admin-menu {\n display: block;\n margin: 0;\n padding: 0;\n list-style: none;\n\n em {\n font-style: normal;\n\n @include breakpoint(mini-nav-range) {\n display: none;\n }\n }\n\n li {\n .badges {\n float: right;\n margin-right: 1rem;\n\n .badge {\n display: inline-block;\n margin-right: -5px;\n }\n\n .updates {\n display: none;\n }\n\n .count {\n @include breakpoint(mini-nav-range) {\n display: none;\n }\n }\n\n &.with-updates {\n .count {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n }\n\n .updates {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n display: inline-block;\n\n @include breakpoint(mini-nav-range) {\n border-radius: 100%;\n position: absolute;\n top: 4px;\n right: 10px;\n font-size: 9px;\n line-height: 12px;\n padding: 1px 3px;\n min-width: 15px;\n }\n }\n }\n }\n\n a {\n @include transition(all 0.2s ease);\n display: block;\n padding-left: 25px;\n padding-top: 0.7rem;\n padding-bottom: 0.7rem;\n position: relative;\n\n .fa {\n @include transition(all 0.2s ease);\n margin-right: 8px;\n }\n\n }\n\n &.selected {\n a {\n padding-left: 16px;\n }\n }\n }\n}\n\nbody.sidebar-quickopen #admin-main {\n @include breakpoint(large-desktop-plus) {\n margin-left: $sidebar-width-small;\n }\n}\n\n#admin-main {\n\n @include breakpoint(tablet-plus) {\n margin-left: $sidebar-width-small;\n }\n\n @include breakpoint(large-desktop-plus) {\n margin-left: $sidebar-width-large;\n }\n\n .form-label label {\n .hint:after, [data-hint]:after {\n max-width: 300px;\n min-width: 150px;\n display: inline-table;\n white-space: initial;\n line-height: 1.2;\n }\n }\n\n\n h1 {\n margin: 0;\n font-size: 1.3rem;\n text-align: left;\n letter-spacing: -1px;\n line-height: 1.5;\n }\n\n .padding {\n padding: $padding-default;\n }\n\n .lines-button {\n display: none;\n margin-left: $padding-default / 4;\n &:focus {\n outline:none;\n }\n\n @include breakpoint(mobile-only) {\n display: inline-block;\n\n }\n\n }\n\n .button {\n white-space: nowrap;\n }\n\n .titlebar {\n position: relative;\n height: $topbar-height;\n padding: 0 $padding-default;\n z-index: 4;\n\n box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.1);\n\n @include breakpoint(mobile-only) {\n padding: 0 ($padding-default / 4) 0 ($padding-default + 2.5);\n }\n\n h1 {\n @extend %vertical-align;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n\n @include breakpoint(mobile-only) {\n font-size: 18px;\n i {\n display: none;\n }\n }\n }\n\n .button-bar {\n @extend %vertical-align;\n padding: 0;\n white-space: nowrap;\n z-index: 4;\n }\n\n .preview {\n font-size: 90%;\n }\n\n .button {\n padding: 0.5rem 0.4rem;\n vertical-align: top;\n margin-right: -2px;\n\n @include breakpoint(mobile-only) {\n font-size: 0;\n padding: 0.5rem 0.5rem;\n min-height: 36px;\n i {\n font-size: 20px;\n margin-right: 0;\n }\n }\n\n @media only all and (max-width: 20.875em) {\n padding: 0.5rem 0.2rem;\n }\n }\n\n span.button {\n cursor: default;\n pointer-events: none;\n }\n\n\n\n @include breakpoint(mobile-only) {\n .dropdown-menu .button {\n font-size: 0.9rem;\n }\n }\n }\n\n .admin-block .alert {\n margin-top: -2rem;\n margin-bottom: 2rem;\n }\n\n .alert {\n &:before {\n font-family: FontAwesome;\n margin-right: 5px;\n }\n &.info:before {\n content: \"\\f0a1\";\n }\n &.warning:before {\n content: \"\\f071\";\n }\n &.note:before {\n content: \"\\f24a\";\n }\n\n &.grav:before {\n font-family: FontAwesome, sans-serif;\n content: \"\\f2d6\";\n vertical-align: bottom;\n }\n &.grav {\n #grav-update-button {\n margin-top: -3px;\n float: right;\n }\n }\n }\n\n .grav-update {\n @include clearfix;\n padding: 0 $padding-default;\n margin-top: -2rem;\n margin-bottom: 1rem;\n display: none;\n\n @include breakpoint(mobile-only) {\n padding: 0 1rem;\n }\n\n .button {\n float: right;\n margin-top: 0.6rem;\n margin-left: 1rem;\n line-height: 1.5;\n }\n\n p {\n line-height: $update-height;\n margin: 0;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n }\n\n span[class=\"hint--left\"]::after {\n line-height: 1.5;\n }\n\n i {\n padding-right: 0.5rem;\n }\n\n }\n\n .grav-update.grav + .content-wrapper {\n height: calc(100vh - #{$topbar-height} - #{$update-height});\n }\n\n .content-wrapper {\n position: relative;\n //overflow-y: hidden;\n height: calc(100vh - #{$topbar-height});\n //z-index: 0;\n }\n\n .content-padding {\n padding: $content-padding;\n\n @include breakpoint(mobile-only) {\n padding: 0;\n }\n }\n\n .admin-block {\n padding: 1rem 0;\n\n &:empty {\n padding: 0;\n }\n\n h1 {\n padding: 0 $padding-default 0.5rem;\n margin: 0 0 1rem;\n\n @include breakpoint(mobile-only) {\n padding: 0 1rem 0.5rem;\n }\n\n &.no_underline {\n border-bottom: 0;\n }\n }\n\n .button-bar {\n margin: 0 $padding-default;\n\n @include breakpoint(mobile-only) {\n margin: -1rem 0 1rem 0;\n padding: 0 1rem;\n text-align: center;\n\n .button {\n width: 100%;\n }\n }\n }\n }\n\n .flush-bottom {\n &.button-bar {\n margin: 1rem (-$padding-default) -1rem;\n padding: 1rem;\n float: none;\n display: flex;\n\n @include breakpoint(mobile-only) {\n &.stats-bar {\n font-size: 90%;\n b {\n font-size: 1.5rem;\n }\n }\n }\n\n .button {\n margin: 0;\n height: 37px;\n\n &.dropdown-toggle {\n margin-left: -4px;\n }\n }\n }\n }\n\n .danger, .success {\n position: relative;\n\n &.button-bar {\n margin: 2rem 0 -1rem;\n height: 70px;\n padding: 1rem;\n float: none;\n .button {\n @extend %vertical-align;\n }\n }\n }\n}\n\n.content-padding {\n #admin-dashboard {\n\n .dashboard-item-flex {\n &:nth-of-type(2n) .dashboard-item {\n margin-right: 0;\n margin-left: $content-padding / 2;\n }\n\n &:nth-of-type(2n+1) .dashboard-item {\n margin-left: 0;\n margin-right: $content-padding / 2;\n }\n }\n\n .dashboard-item {\n margin-bottom: $content-padding;\n }\n\n }\n}\n\n#admin-dashboard {\n\n @include display(flex);\n @include flex-flow(row wrap);\n\n .dashboard-item-flex {\n @include display(flex);\n @include flex-flow(column nowrap);\n\n width: 50%;\n\n\n\n @include breakpoint(mobile-only) {\n width: 100%;\n .dashboard-item {\n margin-right: 0px !important;\n margin-left: 0px !important;\n margin-bottom: 10px !important;\n }\n }\n }\n\n .dashboard-item {\n\n > div:not(.widget-content) {\n padding: 1rem $padding-default;\n }\n\n h1 .right {\n float: right;\n }\n\n &.admin-block {\n padding: 1rem 0;\n\n ul {\n margin: 0 0 1rem 0;\n padding: 0;\n list-style: none;\n }\n li {\n margin: 0;\n padding: 0.425rem $padding-default 0.2rem $padding-default;\n &:last-child {\n border-bottom: 0;\n }\n }\n }\n }\n\n .chart-loader {\n position: relative;\n\n .fa {\n display: block;\n position: absolute;\n width: 100%;\n text-align: center;\n font-size: 4rem;\n margin-top: -2rem;\n @extend %vertical-align;\n }\n\n text-align: center;\n }\n\n .widget-content {\n position: relative;\n min-height: 335px;\n padding: 0;\n }\n\n .widget-loader {\n position: absolute;\n text-align: center;\n top: 50%;\n left: 50%;\n width: 100%;\n transform: translate(-50%, -50%);\n\n .fa {\n font-size: 4rem;\n }\n }\n\n #updates {\n\n p {\n text-align: center;\n margin: 0;\n }\n\n .updates-chart {\n width: 50%;\n float: left;\n\n }\n\n .flush-bottom {\n &.button-bar {\n height: 70px;\n flex-direction: row-reverse;\n }\n }\n\n .chart-wrapper {\n position: relative;\n }\n\n .backups-chart {\n position: relative;\n width: 50%;\n float: left;\n }\n\n .ct-chart {\n min-height: 157px;\n }\n\n .numeric {\n display: block;\n position: absolute;\n width: 100%;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1;\n @extend %vertical-align;\n\n em {\n display: block;\n font-style: normal;\n font-size: 1rem;\n }\n\n }\n\n .admin-update-charts {\n @include clearfix;\n min-height: 191px;\n }\n\n .button-bar > .button:not(.dropdown-toggle) {\n margin-left: 4px;\n height: 37px;\n }\n }\n\n #popularity {\n .ct-chart {\n min-height: 171px;\n }\n\n .button-bar {\n height: 100px;\n padding: 0 1rem;\n display: flex;\n }\n }\n\n .dashboard-item {\n\n .admin-statistics-chart {\n position: relative;\n }\n\n p {\n text-align: center;\n margin: 0;\n }\n\n .stat {\n width: 33%;\n text-align: center;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n b {\n display: block;\n font-size: 2.5rem;\n line-height: 1;\n font-weight: 300;\n }\n i {\n display: block;\n font-style: normal;\n }\n }\n }\n\n #news-feed {\n .date {\n float: right;\n z-index: 1;\n }\n li {\n\n\n a {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n z-index: 0;\n\n &:before {\n font-family: FontAwesome;\n margin-right: 10px;\n content: \"\\f1ea\";\n }\n }\n\n\n }\n }\n}\n\n.no-flick {\n -webkit-transform: translate3d(0, 0, 0);\n}\n\n.card-row {\n @include justify-content(space-between);\n}\n\n.card-item {\n @extend .no-flick;\n overflow: hidden;\n padding: 1rem;\n margin: 0;\n position: relative;\n width: 31%;\n max-width: 21rem;\n\n @include breakpoint(tablet-range) {\n width: 48%;\n }\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n\n margin-bottom: 2rem;\n\n h4 {\n font-size: 1.2rem;\n line-height: 1.2;\n }\n}\n\n.user-details {\n text-align: left;\n img {\n border-radius: 100%;\n\n }\n h2 {\n margin: 0;\n font-size: 2.1rem !important;\n margin: 1rem 0 0 !important;\n line-height: 1.5;\n\n span {\n font-size: 1.2rem;\n }\n }\n h5 {\n font-size: 1.1rem;\n margin: 0;\n linep-height: 1.2;\n }\n\n .gravatar {\n font-size: 0.9rem;\n padding: 0;\n }\n\n @include breakpoint(mobile-only) {\n text-align: center;\n }\n}\n\n#footer {\n text-align: center;\n padding: 3rem 0 1rem;\n\n p {\n margin: 0;\n }\n}\n\n// Chart overrides\n.ct-chart {\n .ct-series {\n .ct-bar {\n stroke-width: 20px;\n }\n }\n}\n\n#popularity .ct-chart {\n margin: 0 -10px -10px;\n .ct-chart-bar {\n padding: 4px 6px 1px 10px;\n }\n}\n\n#latest {\n .page-title, .page-route {\n overflow: auto;\n }\n}\n\n#overlay {\n position: fixed;\n width: 25%;\n height: 100%;\n z-index: 999999;\n left: 75%;\n top: 0;\n display: none;\n\n @include breakpoint(mobile-only) {\n display: none!important;\n }\n}\n\n// Fix tabs spacing in plugin / theme options\n.gpm-item-info + #blueprints .block-tabs {\n padding-top: 16px;\n}\n\n.plugins-notifications-container,\n.themes-notifications-container {\n margin-bottom: 2rem;\n}\n\n.package-dependencies-container {\n li {\n height: 35px;\n\n .button {\n height: 30px;\n float: right;\n margin-right: 10px;\n line-height: 20px;\n }\n }\n}\n\n.pointer-events-disabled {\n pointer-events: none;\n}\n\n// Reinstall packages\n.updates-checked {\n .button-reinstall-package {\n display: inline-block!important;\n }\n\n &.has-updates {\n .button-reinstall-package {\n display: none!important;\n }\n }\n}\n\n// Preview\n.preview-wrapper {\n .content-padding {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n}\n\n// Config Side Tabs\n@include breakpoint(mobile-only) {\n #admin-main .config-wrapper-system .form-tabs.side-tabs {\n > .tabs-nav {\n display: none;\n width: 0;\n }\n > .tabs-content {\n width: 100%;\n .tab__content {\n display: block;\n }\n }\n }\n}\n\n// Log Viewer\n.logs-output {\n\n form {\n\n .form-data {\n display: flex;\n margin: 0 -0.5rem;\n\n @include breakpoint(small-mobile-range) {\n display: block;\n }\n }\n\n .forms-select-wrapper {\n display: block;\n flex: 1;\n margin: 0.5rem 0.5rem;\n }\n }\n\n h1 {\n margin-top: 2rem !important;\n }\n\n h3 {\n padding: 0.5rem 1.5rem;\n font-size: 1.1rem;\n\n @include breakpoint(mobile-only) {\n padding: 0.5rem 1rem;\n }\n }\n table.noflex {\n\n td {\n vertical-align: top;\n }\n\n td.date, td.level {\n white-space: nowrap;\n }\n\n td.date {\n opacity: 0.7;\n }\n\n th.level, td.level {\n padding: 0.375rem 30px;\n }\n\n td.level {\n font-weight: bold;\n\n span.badge {\n font-size: 0.7rem;\n }\n }\n\n td.message {\n width: 100%;\n word-break: break-all;\n }\n\n .trace {\n ol {\n margin: 10px 0;\n padding: 0;\n font-size: 0.7rem;\n\n code {\n font-size: 0.7rem;\n display: block;\n white-space: pre-wrap\n }\n }\n }\n }\n}\n\n// New 1.7 Permissions\n.permissions-container {\n max-width: 800px;\n\n .badge .icon-super {\n display: block;\n height: 20px;\n width: 14px;\n line-height: 1.5;\n\n &:before {\n content: url('../images/icons/crown.svg');\n }\n }\n\n .switch-toggle {\n input+label:before {\n font-family: FontAwesome;\n margin-right: 5px;\n }\n\n input.label0+label:before{\n content: \"\\f05e\";\n }\n input.label1+label:before {\n content: \"\\f00c\";\n\n }\n }\n fieldset {\n margin: 0 0 1rem 0;\n padding: 1rem;\n border-radius: $border-radius;\n\n legend {\n padding: 0 0.5rem;\n margin-left: -0.5rem;\n font-size: 120%;\n }\n\n fieldset {\n margin: 0;\n border: 0;\n padding: 0.5rem 0 0 2rem;\n\n legend {\n padding: 0;\n margin: 0;\n }\n }\n }\n}\n.permission-container {\n display: flex;\n\n\n .permission-name {\n flex-grow: 1;\n position: relative;\n overflow: hidden;\n margin-right: 8px;\n padding-top: 9px;\n\n span:not(.badge) {\n position: relative;\n padding-right: 5px;\n }\n\n span.badge {\n position: relative;\n float: right;\n font-size: 100%;\n border-radius: 20px;\n margin-right: -2px;\n }\n\n &:before {\n content: \"........................................................................................................................................\";\n height: 1px;\n position: absolute;\n right: 100%;\n left: 0;\n }\n }\n}\n\n// Reports\n.reports-content {\n .report-output {\n table, tbody, thead {\n display: table;\n width: 100%;\n }\n table {\n thead {\n tr {\n th {\n display: table-cell;\n }\n }\n }\n tbody {\n tr {\n td {\n display: table-cell;\n }\n }\n }\n }\n }\n}\n\n\n","#pages-filters {\n margin-bottom: 1rem;\n margin-top: -1rem;\n padding: 1rem;\n\n .button-border {\n padding: .375rem .375rem;\n white-space: nowrap;\n\n &.adv-options {\n &:after {\n content: \"\\f078\";\n font-family: \"FontAwesome\", sans-serif;\n margin-left: 5px;\n }\n &.open:after {\n content: \"\\f077\";\n }\n }\n }\n\n .filters-bar {\n display: flex;\n align-items: center;\n\n .button-border {\n margin-left: 0.5rem;\n }\n }\n\n .filters-advanced {\n overflow: hidden;\n transition:max-height 0.3s ease-out;\n height:auto;\n max-height:600px;\n\n &.hide {\n max-height: 0;\n }\n\n .button-border {\n display: inline-block;\n margin-top: 0.5rem;\n }\n\n fieldset {\n margin: 1rem 0 0;\n border-radius: $border-radius;\n\n legend {\n margin-left: -0.5rem;\n padding: 0 0.5rem;\n }\n\n .checkboxes {\n margin-right: 1.5rem;\n label {\n padding-left: 1.7rem;\n &:before {\n margin-top: -0.6rem;\n margin-right: 0;\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n }\n }\n }\n}\n\n#pages-content-wrapper {\n .grav-loading {\n min-height: 600px;\n\n .grav-loader {\n margin: 0 auto;\n position: relative;\n top: 230px;\n }\n }\n\n .fjs-path-bar {\n margin-bottom: -1rem;\n border-bottom: 0;\n padding: 0.5rem;\n }\n\n .fjs-col {\n width: 33.33333334%;\n min-width: 300px;\n }\n\n .fjs-item {\n max-width: 100%;\n\n > .fjs-item-wrapper {\n display: flex;\n justify-content: flex-start;\n padding: 0;\n margin: 1px 0;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n outline: 0;\n }\n\n a {\n padding: 7px 2px 7px 5px;\n & * {\n @include transition(all 0.5s ease);\n }\n }\n\n .fjs-title {\n display: flex;\n align-items: center;\n flex-grow: 1;\n max-width: 100%;\n overflow: auto;\n\n [data-flexpages-dotx3] {\n .dropdown-toggle {\n padding: 0;\n background: transparent;\n border: 0;\n }\n\n /* FIXME: properly move colors to presets */\n .dropdown-menu {\n top: inherit;\n left: inherit;\n right: inherit;\n bottom: inherit;\n position: fixed;\n cursor: default;\n\n padding: 0 0 0.5rem;\n\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0,0,0,.15);\n border-radius: .25rem;\n width: 350px;\n\n .tags {\n padding-top: 0;\n }\n\n a {\n cursor: pointer;\n }\n\n table {\n display: table;\n\n tbody {\n width: 100%;\n display: inherit;\n }\n\n tr {\n display: table-row;\n }\n\n td {\n display: table-cell;\n text-align: left;\n flex: none;\n word-break: break-all;\n white-space: normal;\n\n &:first-child {\n padding-left: 0;\n width: 80px;\n }\n\n &:last-child {\n padding-right: 0;\n width: calc(100% - 80px);\n }\n }\n }\n\n .divider {\n height: 0;\n margin: .5rem 0;\n overflow: hidden;\n }\n\n .action-bar {\n border-radius: $border-radius $border-radius 0 0;\n & + .divider {\n margin-top: 0;\n }\n\n a.dropdown-item:hover {\n border-radius: 0;\n &:first-child {\n border-top-left-radius: 4px;\n }\n &:last-child {\n border-top-right-radius: 4px;\n }\n }\n }\n\n .dropdown-item {\n display: block;\n width: 100%;\n padding: 0.5rem;\n clear: both;\n font-weight: 400;\n text-align: inherit;\n white-space: nowrap;\n border: 0;\n border-radius: $border-radius;\n\n &:hover {\n text-decoration: none;\n }\n\n\n }\n\n .fa {\n display: inline-block;\n width: 16px;\n height: inherit;\n text-align: left;\n }\n\n .action-bar {\n display: flex;\n\n a, i {\n text-align: center;\n }\n }\n\n .details, .tags, .langs {\n padding: 0 .5rem 0;\n }\n\n .infos {\n margin: 0 .15rem;\n ul {\n margin: 0;\n padding: 0;\n }\n }\n\n .langs {\n .lang {\n display: inline-block;\n .fa {\n font-size: 0.6rem;\n padding: 0 0.15rem;\n }\n }\n }\n }\n }\n\n & > a {\n flex-grow: 1;\n overflow: hidden;\n }\n }\n\n .button-group {\n .fa {\n font-size: 0.9rem;\n width: 28px;\n height: 28px;\n display: flex;\n justify-content: center;\n align-items: center;\n\n &.disabled {\n opacity: 0;\n }\n }\n }\n\n .fjs-icon {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: visible !important;\n width: 34px;\n height: 34px;\n min-width: 34px;\n border-radius: 50%;\n margin-right: 5px;\n margin-left: 5px;\n\n &:before {\n position: relative;\n content: url('../images/icons/book-edit.svg');\n flex: 1;\n max-width: 20px;\n margin-right: 0px;\n margin-bottom: -2px;\n }\n\n &.modular:before {\n content: url('../images/icons/module-four.svg');\n }\n\n &.home:before {\n content: url('../images/icons/house.svg');\n }\n\n &.lock:before {\n content: url('../images/icons/touchid-lock.svg');\n }\n\n &.badge-published:after, &.badge-unpublished:after {\n content: '';\n }\n\n &:after, .badge-clock {\n display: block;\n position: absolute;\n top: -2px;\n right: -2px;\n height: 12px;\n width: 12px;\n border-radius: 50%;\n }\n\n .badge-clock {\n border-radius: 0;\n content: url('../images/icons/clock-hands.svg');\n z-index: 2;\n }\n\n .badge-lang {\n position: absolute;\n bottom: -4px;\n bottom: -4px;\n left: 50%;\n transform: translateX(-50%);\n line-height: 1.2;\n font-weight: 600;\n font-size: 0.6rem;\n border-radius: $border-radius;\n padding: 0 3px;\n }\n }\n\n .fjs-info {\n flex-grow: 1;\n flex-direction: column;\n line-height: 1.2;\n\n > b, > em {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-style: normal;\n }\n\n > b {\n font-size: 110%;\n }\n }\n\n .fjs-actions {\n display: flex;\n align-items: center;\n padding-right: 3px;\n position: relative;\n\n > * {\n margin-right: 3px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n }\n }\n\n .fjs-children {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 28px;\n min-width: 50px;\n outline: 0;\n background-color: transparent;\n\n .badge {\n font-size: 0.7rem;\n margin-right: 5px;\n padding: 0px 3px;\n line-height: 1.3;\n }\n\n .fa {\n display: inline-block !important;\n width: auto !important;\n font-size: 14px;\n }\n }\n\n .breadcrumb-node {\n font-size: 0.9rem;\n\n &:hover span {\n text-decoration: none;\n }\n\n & > i.fa {\n margin: 0 0.4rem -4px;\n }\n\n & > i:not(.fa) {\n position: relative;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n overflow: inherit;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-right: 0.35rem;\n\n &:before {\n position: relative;\n content: url('../images/icons/book-edit.svg');\n flex: 1;\n max-width: 10px;\n }\n\n &.modular:before {\n content: url('../images/icons/module-four.svg');\n }\n\n &.home:before {\n content: url('../images/icons/house.svg');\n }\n\n &.lock:before {\n content: url('../images/icons/touchid-lock.svg');\n }\n\n &.badge-published:after, &.badge-unpublished:after {\n content: '';\n }\n }\n }\n}\n\n.pages-list {\n list-style: none;\n margin: 0;\n padding: 0;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n margin: 0;\n padding: 0;\n\n }\n\n .row {\n @include transition(all 0.2s ease);\n line-height: 2.5rem;\n padding-right: 3rem;\n\n @include breakpoint(mobile-only) {\n padding-right: 1rem;\n }\n [data-hint]:after {\n line-height: 1 !important;\n width: auto !important;\n white-space: nowrap !important;\n }\n\n p.page-route {\n display: block;\n margin: 0;\n line-height: 1;\n font-size: 0.9rem;\n word-break: break-all;\n\n .spacer {\n display: inline-block;\n margin: 0 0.3rem;\n }\n }\n\n // fix for hint alignment\n .hint--bottom:before, .hint--bottom:after {\n left: 4px;\n }\n .hint:after, [data-hint]:after {\n border-radius: 2px;\n }\n\n .badge.lang {\n margin-left: 8px;\n }\n }\n\n .page-home {\n font-size: 1.4rem;\n margin-left: 10px;\n vertical-align: middle;\n }\n\n .page-info {\n font-size: 1.1rem;\n margin-left: 10px;\n vertical-align: middle;\n }\n\n .page-edit {\n text-overflow: ellipsis;\n display: inline-block;\n max-width: 100%;\n white-space: nowrap;\n overflow-x: hidden;\n }\n\n .page-item__row {\n display: flex;\n }\n\n .page-item__toggle {\n width: 25px;\n line-height: 1;\n padding-top: 7px;\n }\n\n .page-item__content {\n padding: 5px 0;\n width: calc(100% - 50px);\n }\n\n .page-item__content-name {\n line-height: 1;\n }\n\n .page-item__content-hint {\n line-height: 1.3;\n vertical-align: middle;\n max-width: 100%;\n }\n\n .page-item__tools {\n width: 90px;\n text-align: right;\n font-size: 1.4rem;\n\n .page-view {\n margin-right: 4px;\n }\n }\n\n .page-icon {\n\n color: #0082BA;\n font-weight: 700;\n\n &.children-open:before {\n content: '\\f056';\n }\n\n &.children-closed:before{\n content: '\\f055';\n }\n\n &.not-routable {\n color: #CE431D;\n }\n\n &.not-visible {\n color: #999;\n }\n\n &.modular {\n color: #9055AF;\n }\n }\n\n #pages-legend {\n margin-top: 1.5rem;\n text-align: center;\n\n h2, ul, li {\n display: inline-block;\n }\n\n li {\n margin-right: 0.75rem;\n }\n }\n}\n\n#page-filtering {\n margin: 0 $padding-default 1rem;\n @include clearfix;\n\n @include breakpoint(mobile-only) {\n margin: -1rem 1rem 1rem;\n }\n\n .page-filters {\n width: 60%;\n float: left;\n\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n\n }\n\n .page-search {\n position: relative;\n width: 40%;\n float: left;\n padding-left: 2rem;\n text-indent: 2.5rem;\n &:after {\n position: absolute;\n right: 15px;\n top: 10px;\n content: '\\f002';\n font-family: 'FontAwesome';\n }\n\n @include breakpoint(mobile-only) {\n width: 100%;\n padding-top: 1rem;\n padding-left: 0rem;\n\n &:after {\n top: 1.5rem;\n }\n }\n }\n\n .page-shortcuts {\n @include clearfix;\n clear: both;\n padding-top:5px;\n }\n\n .selectize-control.single.plugin-remove_button .selectize-input,\n .selectize-control.multi .selectize-input {\n\n padding: ($leading-margin / 4) ($leading-margin / 4);\n\n &.has-items {\n padding-top: 6px;\n padding-bottom: 4px;\n }\n\n input {\n font-size: $core-font-size;\n line-height: $core-line-height;\n }\n\n\n .item {\n color: #777;\n background: #eee;\n\n padding: 2px 10px;\n &[data-value='Routable'] {\n background: #CE431D;\n color: $white;\n }\n &[data-value='NonRoutable'] {\n color: #CE431D;\n }\n &[data-value='Visible'] {\n background: #0082BA;\n color: $white;\n }\n &[data-value='NonVisible'] {\n color: #0082BA;\n }\n &[data-value='Modular'] {\n background: #9055AF;\n color: $white;\n }\n &[data-value='NonModular'] {\n color: #9055AF;\n }\n &[data-value='Published'] {\n background: #0093B8;\n color: $white;\n }\n &[data-value='NonPublished'] {\n color: #0093B8;\n }\n }\n\n }\n}\n\n.admin-form-wrapper {\n position: relative;\n}\n\n#admin-topbar {\n position: absolute;\n right: 5px;\n height: 50px;\n\n @include breakpoint(mobile-only) {\n position: relative;\n width: 100%;\n right: 0;\n padding: 0 .5rem;\n margin: -2rem 0 2rem 0;\n }\n\n #admin-mode-toggle, #admin-lang-toggle {\n @extend %vertical-align;\n height: 38px;\n display: inline-flex;\n vertical-align: inherit;\n\n @include breakpoint(mobile-only) {\n float: right;\n }\n }\n\n #admin-lang-toggle {\n z-index: 3;\n float: left;\n margin-right: 5px;\n\n button {\n padding: 0.3rem 0.5rem;\n height: 100%;\n }\n\n .dropdown-menu {\n button {\n width: 100%;\n\n }\n }\n }\n\n .switch-grav {\n border: 0;\n line-height: 38px;\n\n }\n\n .switch-toggle {\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n }\n}\n\n@for $i from 0 to 10 {\n .depth-#{$i} .row {\n padding-left: 3rem * ($i + 1);\n }\n\n @include breakpoint(mobile-only) {\n .depth-#{$i} .row {\n padding-left: 1rem * ($i + 1);\n }\n }\n}\n\n.selectize-route-option {\n display: flex;\n\n > :first-child {\n flex: 0 0 auto;\n width: auto;\n margin-right: 10px;\n }\n\n > :last-child {\n flex: 1 1 auto;\n\n > * {\n display: block;\n }\n }\n\n}\n\n.hidden {\n display: none!important;\n}\n\n.switch-toggle input[type=\"radio\"] {\n display: none!important;\n}\n\n[data-acl_picker] {\n .permissions-item {\n display: flex;\n align-items: center;\n vertical-align: center;\n\n .selectize-control, a, input, button {\n display: inline-flex;\n margin: 0 .5rem;\n align-items: center;\n vertical-align: center;\n }\n\n .selectize-control {\n flex-grow: 1;\n }\n\n .selectize-control {\n margin-left: 0;\n }\n\n .switch-toggle {\n margin: 0;\n }\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n","/*\n * Remodal - v0.2.0\n * Flat, responsive, lightweight, easy customizable modal window plugin with declarative state notation and hash tracking.\n * http://vodkabears.github.io/remodal/\n *\n * Made by Ilya Makarov\n * Under MIT License\n */\n\n/* ==========================================================================\n Remodal necessary styles\n ========================================================================== */\n\n/* Hide scroll bar */\n\nhtml.remodal-is-locked {\n overflow: hidden;\n\n touch-action: none;\n}\n\n/* Anti FOUC */\n\n.remodal, [data-remodal-id] {\n display: none;\n}\n\n/* Overlay necessary styles */\n\n.remodal-overlay {\n position: fixed;\n z-index: 99999;\n top: -5000px;\n right: -5000px;\n bottom: -5000px;\n left: -5000px;\n\n display: none;\n}\n\n/* Necessary styles of the wrapper */\n\n.remodal-wrapper {\n position: fixed;\n z-index: 100000;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n display: none;\n overflow: auto;\n\n text-align: center;\n\n -webkit-overflow-scrolling: touch;\n\n &:after {\n display: inline-block;\n\n height: 100%;\n margin-left: -0.05em;\n\n content: '';\n }\n}\n\n/* Fix iPad, iPhone glitches */\n\n.remodal-overlay,\n.remodal-wrapper {\n backface-visibility: hidden;\n}\n\n/* Modal dialog necessary styles */\n.remodal {\n position: relative;\n outline: none;\n text-size-adjust: 100%;\n}\n\n.remodal-is-initialized {\n /* Disable Anti-FOUC */\n display: inline-block;\n}\n\n/* ==========================================================================\n Remodal's default mobile first theme\n ========================================================================== */\n\n/* Default theme styles for the background */\n\n.remodal-bg.remodal-is-opening,\n.remodal-bg.remodal-is-opened {\n @include filter(blur(3px));\n}\n\n/* Default theme styles of the overlay */\n\n.remodal-overlay {\n background: rgba(43, 46, 56, 0.9);\n}\n\n.remodal-overlay.remodal-is-opening,\n.remodal-overlay.remodal-is-closing {\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n}\n\n.remodal-overlay.remodal-is-opening {\n animation-name: remodal-overlay-opening-keyframes;\n}\n\n.remodal-overlay.remodal-is-closing {\n animation-name: remodal-overlay-closing-keyframes;\n}\n\n/* Default theme styles of the wrapper */\n\n.remodal-wrapper {\n padding: 10px 10px 0;\n}\n\n/* Default theme styles of the modal dialog */\n\n.remodal {\n box-sizing: border-box;\n width: 100%;\n margin-bottom: 10px;\n padding: 35px;\n\n transform: translate3d(0, 0, 0);\n}\n\n.remodal.remodal-is-opening,\n.remodal.remodal-is-closing {\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n}\n\n.remodal.remodal-is-opening {\n animation-name: remodal-opening-keyframes;\n}\n\n.remodal.remodal-is-closing {\n animation-name: remodal-closing-keyframes;\n}\n\n/* Vertical align of the modal dialog */\n\n.remodal,\n.remodal-wrapper:after {\n vertical-align: middle;\n}\n\n/* Close button */\n\n.remodal-close {\n position: absolute;\n top: 0;\n left: 0;\n\n display: block;\n overflow: visible;\n\n width: 35px;\n height: 35px;\n margin: 0;\n padding: 0;\n\n cursor: pointer;\n transition: color 0.2s;\n text-decoration: none;\n\n border: 0;\n outline: 0;\n background: transparent;\n}\n\n.remodal-close:before {\n font-family: Arial, \"Helvetica CY\", \"Nimbus Sans L\", sans-serif !important;\n font-size: 25px;\n line-height: 35px;\n\n position: absolute;\n top: 0;\n left: 0;\n\n display: block;\n\n width: 35px;\n\n content: \"\\00d7\";\n text-align: center;\n}\n\n/* Dialog buttons */\n\n/*.remodal-confirm,\n.remodal-cancel {\n font: inherit;\n\n display: inline-block;\n overflow: visible;\n\n min-width: 110px;\n margin: 0;\n padding: 12px 0;\n\n cursor: pointer;\n transition: background 0.2s;\n text-align: center;\n vertical-align: middle;\n text-decoration: none;\n\n border: 0;\n outline: 0;\n}\n\n.remodal-confirm {\n color: #fff;\n background: #81c784;\n}\n\n.remodal-confirm:hover,\n.remodal-confirm:focus {\n background: #66bb6a;\n}\n\n.remodal-cancel {\n color: #fff;\n background: #e57373;\n}\n\n.remodal-cancel:hover,\n.remodal-cancel:focus {\n background: #ef5350;\n}\n\n!* Remove inner padding and border in Firefox 4+ for the button tag. *!\n\n.remodal-confirm::-moz-focus-inner,\n.remodal-cancel::-moz-focus-inner,\n.remodal-close::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n}*/\n\n/* Keyframes\n ========================================================================== */\n\n@keyframes remodal-opening-keyframes {\n from {\n transform: scale(1.05);\n\n opacity: 0;\n }\n to {\n transform: none;\n\n opacity: 1;\n }\n}\n\n@keyframes remodal-closing-keyframes {\n from {\n transform: scale(1);\n\n opacity: 1;\n }\n to {\n transform: scale(0.95);\n\n opacity: 0;\n }\n}\n\n@keyframes remodal-overlay-opening-keyframes {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes remodal-overlay-closing-keyframes {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n/* Media queries\n ========================================================================== */\n\n@media only screen and (min-width: 641px) {\n .remodal {\n max-width: 700px;\n }\n}\n\n/* IE8\n ========================================================================== */\n\n.lt-ie9 .remodal-overlay {\n background: #2b2e38;\n}\n\n.lt-ie9 .remodal {\n width: 700px;\n}\n\n/********* GRAV CUSTOM ********/\n\n.remodal {\n padding: 35px 0 0;\n text-align: left;\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);\n border-radius: 3px;\n}\n\n.remodal ul li {\n margin-left: 27px;\n list-style-type: square;\n}","$tab-label-height: 50px;\n\n// New JS powered tabs\n.form-tabs {\n\n .admin-pages &:first-child {\n margin-top: -1rem;\n }\n .admin-pages & {\n .tabs-nav {\n margin-right: 180px;\n\n @include breakpoint(mobile-only) {\n margin-right: 0 !important;\n }\n }\n }\n\n .tabs-nav {\n @include display(flex);\n padding-top: 1px;\n\n a {\n @include flex(1);\n transition: color 0.5s ease, background 0.5s ease;\n cursor: pointer;\n min-height: $tab-label-height;\n text-align:center;\n\n padding: 4px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n }\n\n span {\n display: inline-block;\n line-height: 1.1;\n }\n\n\n }\n\n &.subtle .tabs-nav {\n margin-right: 0 !important;\n }\n\n .tabs-content {\n\n .tab__content {\n display: none;\n padding-top: 2rem;\n\n &.active {\n display: block;\n }\n }\n }\n\n &.side-tabs {\n display: flex;\n background: none;\n\n > .tabs-nav {\n width: 20%;\n display: block;\n padding-top: 1.5rem;\n\n a {\n text-align: left;\n flex: none;\n justify-content: left;\n padding-left: 15px;\n }\n }\n\n > .tabs-content {\n width: 80%;\n }\n }\n}\n\n\n// Old tabs here for posterity!\n//.tab-bar {\n// @include clearfix;\n// margin: 0;\n// padding: 0;\n// list-style: none;\n//\n// li {\n//\n// display: block;\n// float: left;\n// height: $tab-label-height;\n//\n// @include breakpoint(mobile-only) {\n// width: 100%;\n// span, a {\n// width: 100%;\n// text-align: center;\n// }\n// }\n// }\n//\n// span, a {\n// @extend .default-animation;\n// display: inline-block;\n// padding: 0 4rem;\n// line-height: $tab-label-height;\n// }\n//}\n\n\n\n\n","// Grav Editor\n.grav-editor-content {\n position: relative;\n}\n\n.grav-editor {\n [data-grav-editor] {\n height: 300px;\n\n &.code-mirrored {\n padding: 0;\n border: 0;\n position: absolute;\n z-index: -1;\n display: block !important;\n }\n }\n\n .CodeMirror {\n .CodeMirror-vscrollbar, .CodeMirror-hscrollbar {\n z-index: 1;\n &:focus {\n outline: none;\n }\n }\n }\n\n .CodeMirror-scroll {\n //margin-right: -36px;\n position: static;\n\n // hide native scrollbar at the bottom\n padding-bottom: 15px;\n }\n\n .grav-editor-resizer {\n height: 6px;\n cursor: row-resize;\n border-radius: 0 0 3px 3px;\n position: relative;\n z-index: 1;\n }\n .CodeMirror-selected {\n background: #D6E8FF;\n }\n\n .CodeMirror-gutters {\n height: 100%!important;\n }\n}\n\n.grav-editor-fullscreen {\n position: fixed;\n top: 4.2rem;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 3;\n padding: 0 !important;\n margin: 0 !important;\n display: flex;\n flex-direction: column;\n\n .grav-editor-content {\n display: flex;\n flex-direction: column;\n flex: 1 0 0;\n overflow-y: auto;\n }\n\n .grav-editor-content, .CodeMirror-wrap, .grav-editor-preview {\n height: 100% !important;\n }\n\n .grav-editor-toolbar {\n flex: 0 0 auto;\n }\n\n .grav-editor-toolbar, .grav-editor-toolbar ul li:first-child a, .grav-editor-toolbar-flip ul li:last-child a {\n border-radius: 0 !important;\n }\n\n .grav-editor-resizer {\n display: none;\n }\n\n .grav-editor-content.is-active {\n display: flex;\n }\n}\n\n.grav-editor-toolbar {\n @include align-items(stretch);\n @include display(flex);\n @include flex-direction(row);\n\n .grav-editor-actions {\n @include flex(1);\n }\n .grav-editor-modes {\n flex-shrink: 0;\n margin-right: 2px;\n ul {\n float: right;\n }\n }\n}\n\n.grav-editor-toolbar {\n @include clearfix;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n &:first-child a {\n border-top-left-radius: 4px;\n }\n display: inline-block;\n }\n\n a {\n display: inline-block;\n cursor: pointer;\n background-color: transparent;\n border-radius: 0;\n padding: 0.4rem;\n margin-top: -1px;\n border: 1px solid transparent;\n\n &, &:hover, &:active, &:focus {\n outline: 0;\n }\n }\n }\n\n .dropdown-menu li {\n width: 50%;\n }\n}\n\n.grav-editor-hide-toolbar {\n display: none;\n}\n\n.grav-editor-toolbar .grav-editor-modes {\n li {\n &:first-child a {\n border-top-left-radius: 0;\n }\n &:last-child a {\n border-top-right-radius: 4px;\n }\n }\n\n a {\n &:hover {\n /*border: 1px solid transparent;\n border-bottom: 1px solid darken($content-bg, 20%);*/\n }\n }\n}\n\n.grav-editor-toolbar-flip {\n float: right;\n ul li:last-child a {\n border-top-right-radius: 4px;\n }\n}\n\n.grav-editor-content, .grav-editor-preview {\n @include clearfix;\n cursor: text;\n display: none;\n\n &.is-active {\n display: block;\n }\n}\n\n.grav-editor-content {\n /* PADDING */\n .CodeMirror-lines {\n padding: 10px 0; /* Vertical padding around content */\n }\n\n &.fontsize-lg {\n font-size: 16px;\n\n &.fontfamily-sans {\n font-size: 18px;\n }\n }\n\n &.fontsize-md {\n font-size: 14px;\n\n &.fontfamily-sans {\n font-size: 16px;\n }\n }\n\n &.font-size-sm {\n font-size: 12px;\n\n &.fontfamily-sans {\n font-size: 14px;\n }\n }\n}\n\n#admin-main .admin-block {\n .grav-editor-preview {\n padding: 20px;\n overflow-y: scroll;\n position: relative;\n line-height: 1.5;\n background: #fff !important;\n color: #555 !important;\n\n //shortcode {\n // background: #ffc;\n // font-size: 90%;\n //}\n //\n //twig {\n // background: #cfc;\n // font-size: 90%;\n //}\n\n a {\n color: #1c90fb !important;\n }\n\n h1 {\n font-size: 36px;\n }\n\n h2 {\n font-size: 28px;\n }\n\n h3 {\n font-size: 22px;\n }\n\n h4 {\n font-size: 18px;\n }\n\n h5 {\n font-size: 16px;\n }\n\n h6 {\n font-size: 14px;\n }\n\n h1, h2, h3, h4, h5, h6 {\n padding: 0;\n margin: 0.5rem 0;\n border-bottom: 0 !important;\n color: #333 !important;\n font-weight: bold;\n }\n\n p {\n padding: 0;\n margin: 0.5rem 0 1rem;\n }\n\n pre {\n code {\n color: #1c90fb;\n font-size: 14px;\n }\n }\n\n blockquote {\n border-color: #ccc !important;\n background-color: #f0f0f0 !important;\n p {\n color: #444 !important;\n }\n }\n\n hr {\n border-color: #eee !important;\n }\n\n table {\n td, th, tr {\n border-color: #eee !important;\n }\n }\n\n }\n}\n\n\n.grav-editor-toolbar {\n [data-hint]:after {\n white-space: nowrap !important;\n max-width: 300px;\n width: auto !important;\n }\n\n p {\n margin-top: 10px;\n margin-bottom: 10px;\n padding-left: 20px;\n }\n}\n","/* The MIT License */\n\n$preview-width: 200px;\n$preview-height: 150px;\n\n.dropzone {\n position: relative;\n border-radius: $form-border-radius;\n min-height: 4rem;\n\n &.dz-clickable {\n cursor: pointer;\n }\n &.dz-drag-hover {\n border-color: rgba(0,0,0,0.15);\n background: rgba(0,0,0,0.04);\n }\n &.dz-started .dz-message {\n display: none;\n }\n .dz-message {\n opacity: 1;\n -ms-filter: none;\n filter: none;\n }\n .dz-preview {\n position: relative;\n display: inline-block;\n margin: 1rem 1rem 1.5rem 1rem;\n vertical-align: top;\n\n &.dz-file-preview [data-dz-thumbnail] {\n display: none;\n }\n\n &.dz-error .dz-error-mark {\n display: block;\n }\n\n &.dz-success .dz-success-mark {\n display: block;\n }\n\n .dz-success-mark, .dz-error-mark {\n font-family: FontAwesome;\n display: none;\n position: absolute;\n width: 22px;\n height: 22px;\n font-size: 18px;\n line-height: 25px;\n border-radius: 100%;\n text-align: center;\n right: 2px;\n top: 2px;\n span {\n display: none;\n }\n }\n &:hover {\n .dz-success-mark, .dz-error-mark {\n display: none;\n }\n }\n\n .dz-success-mark {\n &::after {\n content: '\\f00c';\n }\n }\n\n .dz-error-mark {\n &::after {\n content: '\\f12a';\n }\n }\n\n .dz-progress {\n position: absolute;\n top: $preview-height;\n left: 0px;\n right: 0px;\n height: 4px;\n display: none;\n\n .dz-upload {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 0%;\n }\n }\n\n .dz-error-message {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n font-size: 0.9rem;\n line-height: 1.2;\n padding: 8px 10px;\n z-index: 500;\n }\n\n &.dz-processing .dz-progress {\n display: block;\n }\n\n &:hover {\n .dz-remove, .dz-unset, .dz-view, .dz-insert, .dz-metadata {\n display: block;\n }\n\n }\n\n &.dz-processing {\n &:hover {\n .dz-unset {\n display: none;\n }\n }\n }\n\n &:hover.dz-error .dz-error-message {\n display: block;\n }\n\n //.dz-remove, .dz-unset, .dz-insert {\n // display: none;\n //}\n\n .dz-filename {\n position: absolute;\n z-index: 1;\n bottom: 0;\n width: 100%;\n padding: 0 5px;\n background: rgba(0,0,0,0.3);\n color: #fff;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .dz-remove, .dz-unset, .dz-view, .dz-insert, .dz-metadata {\n display: none;\n position: absolute;\n width: 25px;\n height: 25px;\n right: -26px;\n font-size: 0;\n cursor: pointer;\n\n &:hover {\n &:after {\n color: #fff;\n }\n }\n\n &:after {\n text-align: center;\n display: block;\n color: #999;\n font-family: FontAwesome;\n font-size: 18px;\n line-height: 25px;\n }\n }\n\n .dz-insert {\n top: -1px;\n border-top-right-radius: 4px;\n &:after {\n content: '\\f055';\n }\n }\n\n .dz-view {\n top: 24px;\n &:after {\n content: '\\f06e';\n }\n }\n\n .dz-remove {\n top: 72px;\n &:after {\n content: '\\f1f8';\n }\n }\n\n .dz-unset {\n top: 96px;\n border-bottom-right-radius: 4px;\n &:after {\n content: '\\f00d';\n }\n }\n \n .dz-metadata {\n top: 49px;\n &:after {\n content: '\\f05a';\n }\n }\n\n &.dz-no-editor {\n .dz-view {\n top: -1px;\n border-top-right-radius: 4px;\n }\n .dz-remove {\n top: 24px;\n }\n .dz-unset {\n top: 72px;\n }\n }\n\n &:hover .dz-remove, &:hover .dz-unset {\n &.file-thumbnail-remove {\n display: block;\n }\n\n &:not(.file-thumbnail-remove) {\n border-left: 0;\n }\n }\n\n &.dz-processing {\n .dz-details {\n overflow: hidden;\n }\n }\n\n .dz-details {\n width: $preview-width;\n height: $preview-height;\n position: relative;\n font-size: 0.8rem;\n\n background-image: url('../images/transparent.png');\n\n img {\n position: absolute;\n object-fit: contain;\n top: 0;\n left: 0;\n width: $preview-width;\n height: $preview-height;\n }\n\n .dz-size {\n position: absolute;\n bottom: -28px;\n left: 0;\n right: 0;\n text-align: center;\n font-size: 0.8rem;\n height: 28px;\n line-height: 28px;\n }\n }\n\n\n }\n\n\n &.dz-clickable {\n .dz-message, .dz-message span {\n cursor: pointer;\n text-align: center;\n font-size: 1.2rem;\n line-height: 1.4;\n margin: 1rem 0;\n }\n }\n * {\n cursor: default;\n }\n}\n",".toast-title {\n font-weight: bold;\n}\n.toast-message {\n -ms-word-wrap: break-word;\n word-wrap: break-word;\n}\n.toast-message a,\n.toast-message label {\n color: #ffffff;\n}\n.toast-message a:hover {\n color: #cccccc;\n text-decoration: none;\n}\n.toast-close-button {\n position: relative;\n right: -0.3em;\n top: -0.3em;\n float: right;\n font-size: 20px;\n font-weight: bold;\n color: #ffffff;\n -webkit-text-shadow: 0 1px 0 #ffffff;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.8;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n filter: alpha(opacity=80);\n}\n.toast-close-button:hover,\n.toast-close-button:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.4;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n filter: alpha(opacity=40);\n}\n/*Additional properties for button version\n iOS requires the button element instead of an anchor tag.\n If you want the anchor version, it requires `href=\"#\"`.*/\nbutton.toast-close-button {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.toast-top-center {\n top: 0;\n right: 0;\n width: 100%;\n}\n.toast-bottom-center {\n bottom: 0;\n right: 0;\n width: 100%;\n}\n.toast-top-full-width {\n top: 0;\n right: 0;\n width: 100%;\n}\n.toast-bottom-full-width {\n bottom: 0;\n right: 0;\n width: 100%;\n}\n.toast-top-left {\n top: 12px;\n left: 12px;\n}\n.toast-top-right {\n top: 5rem;\n right: 1.5rem;\n}\n.toast-bottom-right {\n right: 12px;\n bottom: 12px;\n}\n.toast-bottom-left {\n bottom: 12px;\n left: 12px;\n}\n#toast-container {\n position: fixed;\n z-index: 999999;\n /*overrides*/\n\n}\n#toast-container * {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n#toast-container > div {\n position: relative;\n overflow: hidden;\n margin: 0 0 6px;\n padding: 15px 15px 15px 50px;\n width: 300px;\n border-radius: 3px;\n background-position: 15px center;\n background-repeat: no-repeat;\n color: #ffffff;\n opacity: 0.9;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90);\n filter: alpha(opacity=90);\n}\n#toast-container > :hover {\n opacity: 1;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n filter: alpha(opacity=100);\n cursor: pointer;\n}\n#toast-container > .toast-info {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\") !important;\n}\n#toast-container > .toast-error {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\") !important;\n}\n#toast-container > .toast-success {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important;\n}\n#toast-container > .toast-warning {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\") !important;\n}\n#toast-container.toast-top-center > div,\n#toast-container.toast-bottom-center > div {\n width: 300px;\n margin: auto;\n}\n#toast-container.toast-top-full-width > div,\n#toast-container.toast-bottom-full-width > div {\n width: 96%;\n margin: auto;\n}\n\n.toast-warning {\n background-color: #f89406;\n\n .button {\n background-color: darken(#f89406, 10);\n @include button-color(darken(#f89406, 20));\n }\n}\n.toast-progress {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 4px;\n background-color: #000000;\n opacity: 0.4;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n filter: alpha(opacity=40);\n}\n/*Responsive Design*/\n@media all and (max-width: 240px) {\n #toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 11em;\n }\n #toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em;\n }\n}\n@media all and (min-width: 241px) and (max-width: 480px) {\n #toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 18em;\n }\n #toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em;\n }\n}\n@media all and (min-width: 481px) and (max-width: 768px) {\n #toast-container > div {\n padding: 15px 15px 15px 50px;\n width: 25em;\n }\n}\n",".gpm {\n td {\n border: 0;\n }\n\n .gpm-search {\n position: relative;\n padding: 0 3rem 0.5rem $padding-default;\n text-indent: 2.5rem;\n &:after {\n position: absolute;\n right: 60px;\n top: 10px;\n content: '\\f002';\n font-family: 'FontAwesome';\n }\n\n @include breakpoint(mobile-only) {\n padding-left: 1rem;\n\n }\n }\n\n .sort-actions {\n float: right;\n margin: 0 24px;\n\n @include breakpoint(mobile-only) {\n float: none;\n }\n\n > * {\n font-size: 1rem;\n display: inline-block;\n vertical-align: middle;\n }\n\n .sort-icon {\n cursor: pointer;\n }\n\n select {\n margin: 0;\n display: none;\n }\n\n .selectize-input {\n width: 9rem;\n vertical-align: middle;\n line-height: 21px;\n\n input {\n line-height: 21px;\n }\n }\n }\n\n .gpm-name {\n white-space: nowrap;\n\n @include breakpoint(mobile-only) {\n white-space: normal;\n }\n }\n\n .gpm-version {\n padding-left:0.5rem;\n font-size: 0.9rem;\n }\n\n .gpm-testing {\n @extend .badge;\n border-radius: 3px;\n padding: 0 4px;\n font-size: 0.75rem;\n }\n\n .theme .gpm-testing {\n line-height: 1rem;\n position: absolute;\n top: 0;\n right: 0;\n border-radius: 0 0 0 3px;\n line-height: 1.3;\n }\n\n .gpm-actions {\n\n .enabled, .disabled {\n font-size: 1.6rem;\n }\n }\n\n .gpm-item-info {\n position: relative;\n padding-bottom: 1rem;\n margin-bottom: 3rem;\n overflow: hidden;\n\n\n\n .gpm-item-icon {\n position: absolute;\n right: $padding-default;\n font-size: 20rem;\n }\n table {\n position: relative;\n }\n td {\n border: 0;\n text-align: left !important;\n\n &.double {\n padding-left: 2rem;\n }\n\n &:first-child {\n white-space: nowrap;\n }\n\n @include breakpoint(mobile-only) {\n word-wrap: break-word;\n word-break: break-word;\n @include hyphens(auto);\n }\n }\n tr:hover {\n background: inherit;\n }\n\n\n }\n\n .badge.update {\n display: inline-block;\n border-radius: 4px;\n padding: 2px 10px;\n margin-left: 1rem;\n }\n\n .gpm-ribbon {\n overflow: hidden;\n white-space: nowrap;\n position: absolute;\n top: 1rem;\n right: -2rem;\n @include transform(rotate(45deg));\n\n a {\n display: block;\n font-weight: bold;\n font-size: 0.9rem;\n padding: 5px 40px;\n text-align: center;\n }\n }\n\n .themes {\n padding: $padding-default;\n\n .card-item {\n padding: 1rem 1rem 4rem;\n }\n\n .gpm-screenshot {\n text-align: center;\n img {\n margin: 0 auto;\n max-height: 300px;\n }\n }\n\n .gpm-name {\n margin-bottom: 0.5rem;\n white-space: inherit;\n }\n\n .gpm-actions {\n margin: 1rem -1rem -1rem -1rem;\n height: 4rem;\n text-align: center;\n padding: 1rem;\n font-size: 1rem;\n font-weight: bold;\n\n position: absolute;\n left: 0;\n right: 0;\n bottom: 1rem;\n }\n\n .active-theme .gpm-actions, &.inactive-theme .gpm-actions {\n line-height: 2rem;\n }\n\n .inactive-theme .gpm-actions {\n display: block;\n font-weight: normal;\n }\n }\n\n #gpm-release-toggle {\n float: right;\n margin-right: 3rem;\n }\n}\n","#phpinfo {\n img { display: none;}\n\n table {\n margin: 1rem 0 0;\n }\n \n tr {\n &:hover {\n background: transparent;\n }\n }\n\n td {\n word-wrap: break-word;\n\t overflow: hidden;\n\n h1 {\n margin: 0rem (- $padding-default) 0rem !important;\n }\n }\n\n hr {\n border-bottom: 0;\n }\n\n h1 {\n font-size: 2.3rem;\n }\n\n h2 {\n font-size: 1.7rem;\n margin: 3rem ($padding-default) 0rem !important;\n }\n}\n","$button-size : 2rem;\n$transition: .3s; // increase this to see the transformations in slow-motion\n\n@mixin line {\n display: inline-block;\n width: $button-size;\n height: $button-size / 7;\n border-radius: $button-size / 14;\n transition: $transition;\n}\n\n.lines-button {\n display: inline-block;\n padding: $button-size / 4 $button-size / 4 $button-size / 2;\n transition: .3s;\n cursor: pointer;\n user-select: none;\n border-radius: $button-size / 5;\n position: absolute;\n z-index: 100002;\n top: 10px;\n\n background: transparent;\n\n &:hover {\n opacity: 1;\n }\n\n &:active {\n transition: none;\n background: rgba(0, 0, 0, .1);\n }\n}\n\n.lines {\n position: relative;\n @include line;\n\n /*create the upper and lower lines as pseudo-elements of the middle line*/\n &:before, &:after {\n\n @include line;\n position: absolute;\n left:0;\n content: '';\n transform-origin: $button-size / 14 center;\n }\n &:before { top: $button-size / 4; }\n &:after { top: -$button-size / 4; }\n}\n\n.sidebar-mobile-open .lines-button.x .lines {\n\n /*hide the middle line*/\n background: transparent !important;\n\n /*overlay the lines by setting both their top values to 0*/\n &:before, &:after{\n transform-origin: 50% 50%;\n top:0;\n width: $button-size;\n }\n\n // rotate the lines to form the x shape\n &:before{\n transform: rotate3d(0, 0, 1, 45deg);\n }\n &:after{\n transform: rotate3d(0, 0, 1, -45deg);\n }\n}\n",".single-notification.alert {\n position: relative;\n}\n\n.hide-notification {\n\tright: 1rem;\n position: absolute;\n}\n\n.alert.raw {\n padding: 0 !important;\n}\n\n#admin-dashboard {\n #notifications {\n .admin-block {\n padding: 1rem 0;\n }\n\n li {\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n }\n }\n}\n\n.dashboard-notifications-container, .plugins-notifications-container, .themes-notifications-container {\n\n margin-bottom: 1rem;\n\n .raw {\n position: relative;\n\n .hide-notification {\n position: absolute;\n top: 5px;\n right: 5px;\n line-height: 1;\n font-size: 1.2rem;\n color: #333;\n text-shadow:\n -1px -1px 0 #fff,\n 1px -1px 0 #fff,\n -1px 1px 0 #fff,\n 1px 1px 0 #fff;\n }\n }\n\n &:empty {\n margin: 0;\n }\n}\n\n#admin-main {\n .content-padding {\n\n div[class*=notifications-container] .alert {\n a:hover {\n text-decoration: underline;\n }\n\n a.button, span.button, button.button {\n float: right;\n text-decoration: none;\n }\n\n }\n\n\n\n .top-notifications-container {\n\n margin-bottom: 1rem;\n\n .alert {\n a {\n cursor: pointer;\n }\n }\n\n @include breakpoint(mobile-only) {\n padding-bottom: 20px;\n }\n }\n }\n\n #notifications {\n td:last-child {\n position: relative;\n span {\n position: absolute;\n display: block;\n right: 2rem;\n top: 6px;\n }\n }\n .badge.alert {\n margin: 0;\n font-size: 0.7rem;\n text-transform: uppercase;\n margin-right: 5px;\n border-radius: 4px;\n vertical-align: middle;\n line-height: 1.7;\n\n i {\n margin-right: 3px;\n }\n }\n }\n}\n\n\n\n","// Changelog\nbody .changelog {\n\n text-align: left;\n\n .remodal-close {\n display: none;\n }\n\n code {\n white-space: pre-wrap;\n vertical-align: inherit;\n font-size: 0.8rem;\n }\n\n h1 {\n text-align: center;\n font-size: 2rem;\n margin: 1rem 0;\n letter-spacing: -1px;\n }\n\n .remodal {\n\n }\n\n .remodal-confirm {\n float: right;\n }\n\n .changelog-overflow {\n max-height: 500px;\n overflow: auto;\n margin-bottom: 1em;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n padding: 1em;\n }\n\n margin-top: -2rem;\n\n h3, h4 {\n text-align: center;\n font-weight: bold;\n }\n\n h3 {\n font-size: 1.3rem;\n margin: 1.3rem 0 0 0;\n line-height: 1;\n }\n\n h3 + h4 {\n font-size: 1rem;\n margin: 0 0 1rem 0;\n color: #666;\n }\n\n ol {\n list-style: none;\n padding: 0;\n margin: 0 0 3rem 0;\n\n a[href='#new'] {\n & + ul > li {\n &:before {\n background-color: #207DE5;\n content: 'New';\n }\n }\n }\n a[href='#improved'] {\n & + ul > li {\n &:before {\n background-color: #FBCA04;\n color: #333;\n content: 'Improved';\n }\n }\n }\n a[href='#bugfix'] {\n & + ul > li {\n &:before {\n background-color: #FC2929;\n content: 'Bugfix';\n }\n }\n }\n }\n\n ul {\n list-style: none;\n padding: 0;\n li {\n margin-bottom: 0.5rem;\n padding-left: 6rem;\n margin-left: 0;\n list-style: none;\n\n &:before {\n margin-left: -6rem;\n display: inline-block;\n border-radius: 2px;\n color: #fff;\n font-weight: bold;\n margin-right: 1rem;\n text-align: center;\n width: 5rem;\n font-size: 0.8rem;\n padding: 2px 0;\n font-style: normal;\n }\n }\n }\n\n}\n","/* Media */\n$dark-text: #333;\n\n.pages-list-container {\n width: 30%;\n flex: none!important;\n padding: 0!important;\n\n .pages-list {\n width: 100%;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &.depth-0 .row {\n padding-left: .5rem;\n }\n\n .depth-1 .row {\n padding-left: 1rem;\n }\n\n .page-item {\n .page-link {\n cursor: pointer;\n }\n }\n\n .row.active {\n background-color: rgba(#00a6cf, 0.1);\n }\n }\n}\n\n.media-page-dropzone {\n width: 100%;\n margin-bottom: 20px;\n}\n\n.media-container {\n &.size-2-3 {\n flex: none!important;\n width: 70%;\n }\n\n\n .filters {\n padding-bottom: 30px;\n width: 100%;\n\n\n .filter-wrapper {\n margin-left: 10px;\n margin-right: 10px;\n\n &:after {\n margin-top: -25px;\n border: 0px none;\n content: \"\\f078\";\n font-family: \"FontAwesome\";\n right: 12px;\n top: 50%;\n line-height: 0;\n color: #9BA2A6;\n pointer-events: none;\n float: right;\n padding-right: 10px;\n }\n }\n\n .filter {\n option {\n padding: 8px;\n }\n }\n }\n\n .files {\n padding-left: 30px;\n padding-right: 30px;\n\n }\n\n .admin-media-title {\n\n color: $dark-text;\n margin: 0px;\n font-size: .8rem;\n line-height: 1.3;\n\n }\n\n .card-item {\n width: 49%;\n\n &.empty-space {\n\n background: rgba(255,255,255,0.4);\n border: 1px solid rgba(0,0,0,0.1) !important;\n\n color: rgba(0,0,0,0.3);\n\n max-width: none;\n display: block;\n text-align: center;\n\n top: 20%;\n height: 10rem !important;\n width: 50% !important;\n margin: 0 auto !important;\n font-size: 2rem;\n line-height: 8rem;\n transform: translateY(-50%);\n\n\n }\n }\n\n .media-details {\n text-align: center;\n img {\n width: 50%;\n }\n h2 {\n margin: 0;\n font-size: 1.8rem;\n }\n h5 {\n color: #9BA2A6;\n font-size: 1.1rem;\n margin: 0;\n }\n }\n\n\n h1 {\n padding: 0 2rem 0.5rem!important;\n }\n\n .admin-form-wrapper {\n width: 100%;\n padding-bottom: 20px;\n }\n}\n\n.spinning-wheel {\n text-align: center;\n}\n\n/* Media in-page modal */\n\n.media-container.in-modal {\n h1 {\n font-size: 30px!important;\n margin-top: 0px;\n }\n\n a {\n color: #333;\n }\n\n .pages-list li {\n list-style-type: none;\n margin-left: 0;\n }\n}\n\n//Mediapicker field\n.remodal.remodal-mediapicker {\n max-width: 70vw;\n padding: 0;\n}\n\n.media-container {\n height: 70vh;\n\n\n .grid {\n justify-content: flex-start;\n }\n\n\n &.in-modal {\n\n .gm-scrollbar {\n background: rgba(255,255,255,0.2);\n\n .thumb {\n background-color: rgba(0,0,0,0.2) !important;\n &:hover, &.active {\n background-color: rgba(0,0,0,0.3) !important;\n }\n }\n }\n }\n\n h5 {\n border-bottom: 1px solid #ddd;\n padding: 0.5rem 15px;\n margin: 0;\n height: 55px;\n }\n\n .filter-wrapper {\n float: right;\n margin-right: 5px;\n margin-top: 10px;\n }\n\n .filter-date {\n width: 150px;\n\n }\n\n .filter-type {\n width: 100px;\n margin-right: 15px;\n }\n\n .pages-list-container {\n position: relative;\n\n .pages-list {\n border-top: 0;\n padding-right: 10px;\n font-size: 90%;\n\n .row {\n transition: none !important;\n line-height: 2rem;\n }\n\n @for $i from 1 to 10 {\n .depth-#{$i} .row {\n padding-left: 1rem * ($i + 1);\n }\n\n }\n\n }\n\n .mediapicker-scroll {\n position: absolute;\n top: 55px;\n bottom: 3px;\n height: inherit;\n }\n }\n\n .thumbs-list-container {\n position: relative;\n\n .media-range {\n position: absolute;\n right: 15px;\n bottom: 5px;\n }\n\n .mediapicker-scroll {\n position: absolute;\n top: 55px;\n bottom: 30px;\n height: inherit;\n }\n\n .gm-scrollbar.-horizontal {\n display: none;\n }\n\n }\n\n\n #admin-media {\n\n padding: 15px;\n height: 100%;\n\n align-items: flex-start;\n align-content: flex-start;\n\n .card-item {\n width: 100px;\n padding: 2px;\n margin: 0 5px 5px 0;\n border: 0;\n\n img {\n display: block;\n }\n }\n\n .admin-media-details {\n position: relative;\n\n .admin-media-title {\n position: absolute;\n width: 100%;\n bottom: 0;\n background: rgba(0,0,0,0.3);\n color: #fff;\n font-size: 10px;\n overflow: hidden;\n line-height: 2;\n text-indent: 2px;\n white-space: nowrap;\n }\n }\n }\n}\n\n[data-remodal-id=\"metadata\"] {\n h1 > * {\n vertical-align: middle;\n }\n h1 strong {\n @include ellipsis(75%);\n }\n .metadata-preview {\n display: flex;\n margin: 0 3rem;\n\n .meta-preview {\n max-width: 200px;\n }\n\n .meta-content ul {\n margin: 0;\n }\n }\n}\n","/*\n * This file is part of the Arnapou jqCron package.\n *\n * (c) Arnaud Buathier \n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n.jqCron-selector {\n position: relative;\n}\n.jqCron-cross,\n.jqCron-selector-title {\n cursor: pointer;\n border-radius: 3px;\n margin: 0 0.2em;\n padding: 0 0.5em;\n}\n\n.jqCron-cross {\n border-radius: 1em;\n font-size: 80%;\n padding: 0 0.3em;\n}\n.jqCron-selector-list {\n left: 0.2em;\n list-style: none;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 1.5em;\n z-index: 5;\n}\n.jqCron-selector-list li {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n -ms-box-sizing: border-box;\n box-sizing: border-box;\n cursor: default;\n display: inline-block !important;\n margin: 0;\n padding: 0.1em 0.4em;\n width: 100%;\n}\n.jqCron-selector-list.cols2 {\n width: 4em;\n}\n.jqCron-selector-list.cols2 li {\n width: 50%;\n}\n.jqCron-selector-list.cols3 {\n width: 6em;\n}\n.jqCron-selector-list.cols3 li {\n width: 33%;\n}\n.jqCron-selector-list.cols4 {\n width: 8em;\n}\n.jqCron-selector-list.cols4 li {\n width: 25%;\n}\n.jqCron-selector-list.cols5 {\n width: 10em;\n}\n.jqCron-selector-list.cols5 li {\n width: 20%;\n}\n\n","// Backups\n#backups-stats {\n #backups-usage {\n position: relative;\n margin-bottom: 1.5rem;\n\n h1 {\n position: absolute;\n right: 1rem;\n top: 5px;\n }\n }\n\n .backups-usage-wrapper {\n height: 40px;\n\n background: linear-gradient(90deg, $color-green 0%, $color-lime 20%, $color-yellow 40%, $color-orange 60%, $color-red 80%, $color-maroon 100%);\n\n > div {\n float: right;\n height: 40px;\n &.full {\n width: 100%;\n }\n }\n }\n}\n\n.backups-content {\n #admin-dashboard {\n display: block;\n #backups-stats {\n margin-left: 1rem;\n margin-right: 1rem;\n\n h1 {\n padding: 0rem;\n @include breakpoint(mobile-only) {\n font-size: 1.1rem;\n }\n }\n }\n }\n}\n\n// Scheduler\n.scheduler-content {\n\n #admin-main .admin-block & .alert {\n margin-top: -1rem;\n margin-bottom: 2rem;\n }\n\n .secondary-accent {\n .button {\n float: right;\n margin-top: -3px;\n }\n }\n\n #cron-install {\n @extend .default-animation;\n padding: 0 1.5rem;\n\n pre {\n padding: 0.5rem;\n }\n\n &.hide {\n display: none;\n }\n }\n}\n\n// Reports\n.report-output {\n #admin-main .admin-block & .alert {\n margin-top: 0;\n margin-bottom: 0;\n }\n\n td {\n .key {\n font-weight: bold;\n }\n }\n}\n\n// Direct install\n.direct-install-content {\n padding: 30px;\n\n .button {\n margin-top: 10px;\n margin-bottom: 50px;\n }\n}\n","$dark-text: #333;\n$transparent-image: 'data:image/jpeg;base64,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';\n\n/* Admin settings */\n\n.colorbar {\n [data-hint]:after {\n width: 300px!important;\n margin-left: -300px;\n }\n\n &.current-scheme, &.predefined-scheme {\n padding-bottom: 10px;\n\n span {\n color: transparent;\n }\n }\n\n &.predefined-scheme:hover {\n cursor: pointer;\n\n span {\n color: white;\n }\n\n .light span {\n color: black;\n }\n }\n\n .colorbar-element-container {\n width: 9rem;\n float: left;\n display: block;\n text-align: center;\n background: white;\n margin-bottom: 1px;\n margin-right: 1px;\n //background-image: url($transparent-image);\n\n\n }\n\n .colorbar-element {\n width: 100%;\n text-align: center;\n height: 4rem;\n //border: 1px solid #ccc;\n border-top: 0;\n\n\n span {\n font-size: .7rem;\n }\n\n color: #333;\n input {\n color: #333;\n width: 100% !important;\n }\n\n &.light-text {\n color: #fff;\n & input {\n color: #fff;\n }\n }\n }\n\n .colorbar-title {\n font-size: 0.8rem;\n //border: 1px solid #ccc;\n font-weight: bold;\n padding: 1px;\n background-color: rgba(#000, 0.05);\n }\n\n input {\n width: 100%;\n border: none;\n font-size: 0.8rem;\n text-align: center;\n border-radius: 0;\n height: 35px;\n position: absolute;\n background: transparent;\n &:focus {\n outline: none;\n }\n }\n\n .choose-predefined-scheme {\n cursor: pointer;\n }\n}\n\n// Admin preview\n$ap-width: 8rem;\n$ap-height: 10rem;\n$nav-width: 25%;\n$toolbar-height: 10%;\n$ap-radius: 4px;\n\n.admin-preview-wrapper {\n display: inline-block;\n width: $ap-width;\n position: relative;\n margin-right: 2rem;\n\n}\n.admin-preview-title {\n text-align: center;\n}\n.admin-preview {\n height: $ap-height;\n position: relative;\n border-radius: $ap-radius;\n border-width: 2px !important;\n}\n\n.ap-overlay {\n cursor: pointer;\n opacity: 0;\n position: absolute;\n top:0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: $ap-radius;\n z-index: 2;\n text-align: center;\n transition: opacity .4s ease;\n &:hover {\n opacity: 1;\n background: rgba(0,0,0,0.4);\n }\n b {\n display: inline-block;\n font-weight: normal;\n margin-top: ($ap-height / 2) - 1rem;\n background: #111;\n color: #bbb;\n border-radius: $ap-radius;\n padding: 4px 10px;\n &:hover {\n color: #fff;\n background: #000\n }\n }\n}\n.ap-sidebar {\n position: absolute;\n width: $nav-width;\n top: 0;\n left: 0;\n bottom: 0;\n}\n.ap-logo {\n height: 10%;\n text-align: center;\n &::after {\n display: block;\n position: relative;\n top: 50%;\n margin: 0 auto;\n transform: translateY(-50%);\n content: '';\n height: 8px;\n width: 25%;\n }\n}\n.ap-nav {\n padding: 5px 10px;\n}\n.ap-text, .ap-text::before, .ap-text::after {\n margin-top: 4px;\n position: relative;\n display: block;\n margin-bottom: 3px;\n height: 2px;\n content: '';\n}\n.ap-text::before {\n margin-top: 0;\n top: 7px;\n}\n.ap-text::after {\n margin-top: 0;\n top: 9px;\n}\n.ap-active {\n display: block;\n margin: 19px -10px 0;\n margin-bottom: 5px;\n padding: 5px 10px 5px 7px;\n border-left-width: 3px;\n border-left-style: solid;\n &::after {\n display: block;\n content: '';\n height: 2px;\n }\n}\n.ap-toolbar {\n position: absolute;\n left: $nav-width;\n right: 0;\n height: $toolbar-height;\n padding: 0 10px;\n &::after {\n display: block;\n position: relative;\n top: 50%;\n transform: translateY(-50%);\n content: '';\n width: 33%;\n height: 4px;\n }\n}\n.ap-button {\n float: right;\n position: relative;\n top: 50%;\n transform: translateY(-50%);\n height: 8px;\n width: 25px;\n}\n.ap-page {\n position: absolute;\n top: $toolbar-height;\n left: $nav-width;\n right: 0;\n bottom: 0;\n padding: 10px;\n}\n.ap-content {\n height: 100%;\n overflow: hidden;\n}\n\n.ap-title {\n display: block;\n height: 4px;\n width: 25%;\n margin: 8px 10px 5px;\n}\n.ap-content {\n .ap-text {\n margin-left: 10px;\n margin-right: 10px;\n }\n}\n.ap-update, .ap-notice, .ap-critical {\n margin-top: 19px;\n display: block;\n content: '';\n padding: 5px 10px;\n &::after {\n display: block;\n content: '';\n height: 2px;\n width: 50%;\n }\n}\n.ap-update {\n margin-top: 3px;\n}\n","[data-simplebar] {\n position: relative;\n flex-direction: column;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-content: flex-start;\n align-items: flex-start;\n}\n\n.simplebar-wrapper {\n overflow: hidden;\n width: inherit;\n height: inherit;\n max-width: inherit;\n max-height: inherit;\n}\n\n.simplebar-mask {\n direction: inherit;\n position: absolute;\n overflow: hidden;\n padding: 0;\n margin: 0;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n width: auto !important;\n height: auto !important;\n z-index: 0;\n}\n\n.simplebar-offset {\n direction: inherit !important;\n box-sizing: inherit !important;\n resize: none !important;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n padding: 0;\n margin: 0;\n -webkit-overflow-scrolling: touch;\n}\n\n.simplebar-content-wrapper {\n direction: inherit;\n box-sizing: border-box !important;\n position: relative;\n display: block;\n height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */\n width: auto;\n max-width: 100%; /* Not required for horizontal scroll to trigger */\n max-height: 100%; /* Needed for vertical scroll to trigger */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.simplebar-content-wrapper::-webkit-scrollbar,\n.simplebar-hide-scrollbar::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n\n.simplebar-content:before,\n.simplebar-content:after {\n content: ' ';\n display: table;\n}\n\n.simplebar-placeholder {\n max-height: 100%;\n max-width: 100%;\n width: 100%;\n pointer-events: none;\n}\n\n.simplebar-height-auto-observer-wrapper {\n box-sizing: inherit !important;\n height: 100%;\n width: 100%;\n max-width: 1px;\n position: relative;\n float: left;\n max-height: 1px;\n overflow: hidden;\n z-index: -1;\n padding: 0;\n margin: 0;\n pointer-events: none;\n flex-grow: inherit;\n flex-shrink: 0;\n flex-basis: 0;\n}\n\n.simplebar-height-auto-observer {\n box-sizing: inherit;\n display: block;\n opacity: 0;\n position: absolute;\n top: 0;\n left: 0;\n height: 1000%;\n width: 1000%;\n min-height: 1px;\n min-width: 1px;\n overflow: hidden;\n pointer-events: none;\n z-index: -1;\n}\n\n.simplebar-track {\n z-index: 1;\n position: absolute;\n right: 0;\n bottom: 0;\n pointer-events: none;\n overflow: hidden;\n}\n\n[data-simplebar].simplebar-dragging .simplebar-content {\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n}\n\n[data-simplebar].simplebar-dragging .simplebar-track {\n pointer-events: all;\n}\n\n.simplebar-scrollbar {\n position: absolute;\n left: 0;\n right: 0;\n min-height: 10px;\n}\n\n.simplebar-scrollbar:before {\n position: absolute;\n content: '';\n border-radius: 7px;\n left: 2px;\n right: 2px;\n opacity: 0;\n transition: opacity 0.2s linear;\n}\n\n.simplebar-scrollbar.simplebar-visible:before {\n /* When hovered, remove all transitions from drag handle */\n opacity: 0.3;\n transition: opacity 0s linear;\n}\n\n.simplebar-track.simplebar-vertical {\n top: 0;\n width: 11px;\n}\n\n.simplebar-track.simplebar-vertical .simplebar-scrollbar:before {\n top: 2px;\n bottom: 2px;\n}\n\n.simplebar-track.simplebar-horizontal {\n left: 0;\n height: 11px;\n}\n\n.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before {\n height: 100%;\n left: 2px;\n right: 2px;\n}\n\n.simplebar-track.simplebar-horizontal .simplebar-scrollbar {\n right: auto;\n left: 0;\n top: 2px;\n height: 7px;\n min-height: 0;\n min-width: 10px;\n width: auto;\n}\n\n/* Rtl support */\n[data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical {\n right: auto;\n left: 0;\n}\n\n.hs-dummy-scrollbar-size {\n direction: rtl;\n position: fixed;\n opacity: 0;\n visibility: hidden;\n height: 500px;\n width: 500px;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n\n.simplebar-hide-scrollbar {\n position: fixed;\n left: 0;\n visibility: hidden;\n overflow-y: scroll;\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n",".jquery-horizontal-scroll-wrap{\n position: relative;\n\n .nav-next, .nav-prev{\n position: absolute;\n z-index: 5;\n top: 50%;\n font-size: 20px;\n line-height: 20px;\n display: block;\n padding: 30px 8px;\n color: #fff !important;\n background: #000;\n background: rgba(0,0,0,0.65);\n cursor: pointer;\n margin-top: -40px;\n\n &.hide {\n display: none;\n }\n\n &:hover, &:focus {\n opacity: 1;\n }\n\n &:before{\n display: inline;\n font-family: \"FontAwesome\";\n }\n }\n\n .nav-next {\n right: 0;\n\n &:before {\n content: \"\\f105\";\n }\n\n }\n\n .nav-prev {\n left: 0;\n\n &:before {\n content: \"\\f104\";\n }\n\n }\n\n .jquery-horizontal-scroll{\n overflow: auto;\n position: relative;\n }\n}\n","// Your custom SCSS should be written here...\n\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"template.css","sources":["template.scss","vendor/bourbon/_bourbon.scss","vendor/bourbon/settings/_prefixer.scss","vendor/bourbon/settings/_px-to-em.scss","vendor/bourbon/helpers/_convert-units.scss","vendor/bourbon/helpers/_gradient-positions-parser.scss","vendor/bourbon/helpers/_is-num.scss","vendor/bourbon/helpers/_linear-angle-parser.scss","vendor/bourbon/helpers/_linear-gradient-parser.scss","vendor/bourbon/helpers/_linear-positions-parser.scss","vendor/bourbon/helpers/_linear-side-corner-parser.scss","vendor/bourbon/helpers/_radial-arg-parser.scss","vendor/bourbon/helpers/_radial-positions-parser.scss","vendor/bourbon/helpers/_radial-gradient-parser.scss","vendor/bourbon/helpers/_render-gradients.scss","vendor/bourbon/helpers/_shape-size-stripper.scss","vendor/bourbon/helpers/_str-to-num.scss","vendor/bourbon/functions/_assign.scss","vendor/bourbon/functions/_color-lightness.scss","vendor/bourbon/functions/_flex-grid.scss","vendor/bourbon/functions/_golden-ratio.scss","vendor/bourbon/functions/_grid-width.scss","vendor/bourbon/functions/_modular-scale.scss","vendor/bourbon/functions/_px-to-em.scss","vendor/bourbon/functions/_px-to-rem.scss","vendor/bourbon/functions/_strip-units.scss","vendor/bourbon/functions/_tint-shade.scss","vendor/bourbon/functions/_transition-property-name.scss","vendor/bourbon/functions/_unpack.scss","vendor/bourbon/css3/_animation.scss","vendor/bourbon/css3/_appearance.scss","vendor/bourbon/css3/_backface-visibility.scss","vendor/bourbon/css3/_background.scss","vendor/bourbon/css3/_background-image.scss","vendor/bourbon/css3/_border-image.scss","vendor/bourbon/css3/_border-radius.scss","vendor/bourbon/css3/_box-sizing.scss","vendor/bourbon/css3/_calc.scss","vendor/bourbon/css3/_columns.scss","vendor/bourbon/css3/_filter.scss","vendor/bourbon/css3/_flex-box.scss","vendor/bourbon/css3/_font-face.scss","vendor/bourbon/css3/_hyphens.scss","vendor/bourbon/css3/_hidpi-media-query.scss","vendor/bourbon/css3/_image-rendering.scss","vendor/bourbon/css3/_keyframes.scss","vendor/bourbon/css3/_linear-gradient.scss","vendor/bourbon/css3/_perspective.scss","vendor/bourbon/css3/_radial-gradient.scss","vendor/bourbon/css3/_transform.scss","vendor/bourbon/css3/_transition.scss","vendor/bourbon/css3/_user-select.scss","vendor/bourbon/css3/_placeholder.scss","vendor/bourbon/addons/_button.scss","vendor/bourbon/addons/_clearfix.scss","vendor/bourbon/addons/_directional-values.scss","vendor/bourbon/addons/_ellipsis.scss","vendor/bourbon/addons/_font-family.scss","vendor/bourbon/addons/_hide-text.scss","vendor/bourbon/addons/_html5-input-types.scss","vendor/bourbon/addons/_position.scss","vendor/bourbon/addons/_prefixer.scss","vendor/bourbon/addons/_retina-image.scss","vendor/bourbon/addons/_size.scss","vendor/bourbon/addons/_timing-functions.scss","vendor/bourbon/addons/_triangle.scss","vendor/bourbon/addons/_word-wrap.scss","vendor/bourbon/_bourbon-deprecated-upcoming.scss","configuration/nucleus/_base.scss","configuration/nucleus/_core.scss","configuration/nucleus/_breakpoints.scss","configuration/nucleus/_layout.scss","configuration/nucleus/_typography.scss","configuration/nucleus/_nav.scss","configuration/template/_base.scss","configuration/template/_colors.scss","configuration/template/_variables.scss","nucleus/functions/_base.scss","nucleus/functions/_direction.scss","nucleus/functions/_range.scss","nucleus/mixins/_base.scss","nucleus/mixins/_breakpoints.scss","nucleus/mixins/_utilities.scss","template/modules/_base.scss","template/modules/_buttons.scss","template/modules/_colorpicker.scss","template/modules/_datetimepicker.scss","template/modules/_finderjs.scss","template/modules/_toggle-switch.scss","template/_colors.scss","template/_core.scss","template/_extensions.scss","template/_utilities.scss","template/_header.scss","template/_typography.scss","template/_forms.scss","template/_tables.scss","template/_buttons.scss","template/_errors.scss","template/_login.scss","template/_admin.scss","template/_pages.scss","template/_remodal.scss","template/_tabs.scss","template/_editor.scss","template/_dropzone.scss","template/_toastr.scss","template/_gpm.scss","template/_phpinfo.scss","template/_nav-toggle.scss","template/_notifications.scss","template/_changelog.scss","template/_media.scss","template/_jqcron.scss","template/_tools.scss","template/_whitelabel.scss","template/_scrollbars.scss","template/_horizontal-scroll.scss","template/_custom.scss"],"sourcesContent":["// REQUIRED DEPENDENCIES - DO NOT CHANGE\n\n// Load Third Party Libraries\n@import \"vendor/bourbon/bourbon\";\n\n// Load Nucleus Configuration\n@import \"configuration/nucleus/base\";\n\n// Load Template Configuration\n@import \"configuration/template/base\";\n\n// Load Nucleus Mixins and Functions\n@import \"nucleus/functions/base\";\n@import \"nucleus/mixins/base\";\n\n// Load Template Library\n@import \"template/modules/base\";\n@import \"template/colors\";\n//------------------------------------------\n\n// TEMPLATE COMPONENTS\n\n// Core\n@import \"template/core\";\n\n// Extensions\n@import \"template/extensions\";\n\n// Utilities\n@import \"template/utilities\";\n\n// Header\n@import \"template/header\";\n\n// Typography\n@import \"template/typography\";\n\n// Forms\n@import \"template/forms\";\n\n// Tables\n@import \"template/tables\";\n\n// Buttons\n@import \"template/buttons\";\n\n// Errors\n@import \"template/errors\";\n\n// Login\n@import \"template/login\";\n\n// Admin\n@import \"template/admin\";\n\n// Pages\n@import \"template/pages\";\n\n// Remodal\n@import \"template/remodal\";\n\n// Tabs\n@import \"template/tabs\";\n\n// Editor\n@import \"template/editor\";\n\n// Dropzone\n@import \"template/dropzone\";\n\n// Toastr\n@import \"template/toastr\";\n\n// GPM\n@import \"template/gpm\";\n\n// PHPInfo\n@import \"template/phpinfo\";\n\n// Nav Toggle\n@import \"template/nav-toggle\";\n\n// Notifications\n@import \"template/notifications\";\n\n// Changelog\n@import \"template/changelog\";\n\n// Media\n@import \"template/media\";\n@import \"template/jqcron\";\n\n// Tools\n@import \"template/tools\";\n\n// Whitelabel\n@import \"template/whitelabel\";\n\n// Horizontal Scroll\n@import \"template/scrollbars\";\n\n// Horizontal Scroll\n@import \"template/horizontal-scroll\";\n\n// Custom\n@import \"template/custom\";\n","// Settings\n@import \"settings/prefixer\";\n@import \"settings/px-to-em\";\n\n// Custom Helpers\n@import \"helpers/convert-units\";\n@import \"helpers/gradient-positions-parser\";\n@import \"helpers/is-num\";\n@import \"helpers/linear-angle-parser\";\n@import \"helpers/linear-gradient-parser\";\n@import \"helpers/linear-positions-parser\";\n@import \"helpers/linear-side-corner-parser\";\n@import \"helpers/radial-arg-parser\";\n@import \"helpers/radial-positions-parser\";\n@import \"helpers/radial-gradient-parser\";\n@import \"helpers/render-gradients\";\n@import \"helpers/shape-size-stripper\";\n@import \"helpers/str-to-num\";\n\n// Custom Functions\n@import \"functions/assign\";\n@import \"functions/color-lightness\";\n@import \"functions/flex-grid\";\n@import \"functions/golden-ratio\";\n@import \"functions/grid-width\";\n@import \"functions/modular-scale\";\n@import \"functions/px-to-em\";\n@import \"functions/px-to-rem\";\n@import \"functions/strip-units\";\n@import \"functions/tint-shade\";\n@import \"functions/transition-property-name\";\n@import \"functions/unpack\";\n\n// CSS3 Mixins\n@import \"css3/animation\";\n@import \"css3/appearance\";\n@import \"css3/backface-visibility\";\n@import \"css3/background\";\n@import \"css3/background-image\";\n@import \"css3/border-image\";\n@import \"css3/border-radius\";\n@import \"css3/box-sizing\";\n@import \"css3/calc\";\n@import \"css3/columns\";\n@import \"css3/filter\";\n@import \"css3/flex-box\";\n@import \"css3/font-face\";\n@import \"css3/hyphens\";\n@import \"css3/hidpi-media-query\";\n@import \"css3/image-rendering\";\n@import \"css3/keyframes\";\n@import \"css3/linear-gradient\";\n@import \"css3/perspective\";\n@import \"css3/radial-gradient\";\n@import \"css3/transform\";\n@import \"css3/transition\";\n@import \"css3/user-select\";\n@import \"css3/placeholder\";\n\n// Addons & other mixins\n@import \"addons/button\";\n@import \"addons/clearfix\";\n@import \"addons/directional-values\";\n@import \"addons/ellipsis\";\n@import \"addons/font-family\";\n@import \"addons/hide-text\";\n@import \"addons/html5-input-types\";\n@import \"addons/position\";\n@import \"addons/prefixer\";\n@import \"addons/retina-image\";\n@import \"addons/size\";\n@import \"addons/timing-functions\";\n@import \"addons/triangle\";\n@import \"addons/word-wrap\";\n\n// Soon to be deprecated Mixins\n@import \"bourbon-deprecated-upcoming\";\n","// Variable settings for /addons/prefixer.scss\n$prefix-for-webkit: true !default;\n$prefix-for-mozilla: true !default;\n$prefix-for-microsoft: true !default;\n$prefix-for-opera: true !default;\n$prefix-for-spec: true !default; // required for keyframe mixin\n","$em-base: 16px !default;\n","//************************************************************************//\n// Helper function for str-to-num fn.\n// Source: http://sassmeister.com/gist/9647408\n//************************************************************************//\n@function _convert-units($number, $unit) {\n $strings: 'px' 'cm' 'mm' '%' 'ch' 'pica' 'in' 'em' 'rem' 'pt' 'pc' 'ex' 'vw' 'vh' 'vmin' 'vmax', 'deg', 'rad', 'grad', 'turn';\n $units: 1px 1cm 1mm 1% 1ch 1pica 1in 1em 1rem 1pt 1pc 1ex 1vw 1vh 1vmin 1vmax, 1deg, 1rad, 1grad, 1turn;\n $index: index($strings, $unit);\n\n @if not $index {\n @warn \"Unknown unit `#{$unit}`.\";\n @return false;\n }\n @return $number * nth($units, $index);\n}\n","@function _gradient-positions-parser($gradient-type, $gradient-positions) {\n @if $gradient-positions\n and ($gradient-type == linear)\n and (type-of($gradient-positions) != color) {\n $gradient-positions: _linear-positions-parser($gradient-positions);\n }\n @else if $gradient-positions\n and ($gradient-type == radial)\n and (type-of($gradient-positions) != color) {\n $gradient-positions: _radial-positions-parser($gradient-positions);\n }\n @return $gradient-positions;\n}\n","//************************************************************************//\n// Helper for linear-gradient-parser\n//************************************************************************//\n@function _is-num($char) {\n $values: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 0 1 2 3 4 5 6 7 8 9;\n $index: index($values, $char);\n @return if($index, true, false);\n}\n","// Private function for linear-gradient-parser\n@function _linear-angle-parser($image, $first-val, $prefix, $suffix) {\n $offset: null;\n $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val));\n $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val));\n\n @if ($unit-long == \"grad\") or\n ($unit-long == \"turn\") {\n $offset: if($unit-long == \"grad\", -100grad * 3, -0.75turn);\n }\n\n @else if ($unit-short == \"deg\") or\n ($unit-short == \"rad\") {\n $offset: if($unit-short == \"deg\", -90 * 3, 1.6rad);\n }\n\n @if $offset {\n $num: _str-to-num($first-val);\n\n @return (\n webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix,\n spec-image: $image\n );\n }\n}\n","@function _linear-gradient-parser($image) {\n $image: unquote($image);\n $gradients: ();\n $start: str-index($image, \"(\");\n $end: str-index($image, \",\");\n $first-val: str-slice($image, $start + 1, $end - 1);\n\n $prefix: str-slice($image, 0, $start);\n $suffix: str-slice($image, $end, str-length($image));\n\n $has-multiple-vals: str-index($first-val, \" \");\n $has-single-position: unquote(_position-flipper($first-val) + \"\");\n $has-angle: _is-num(str-slice($first-val, 0, 0));\n\n @if $has-multiple-vals {\n $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals);\n }\n\n @else if $has-single-position != \"\" {\n $pos: unquote($has-single-position + \"\");\n\n $gradients: (\n webkit-image: -webkit- + $image,\n spec-image: $prefix + \"to \" + $pos + $suffix\n );\n }\n\n @else if $has-angle {\n // Rotate degree for webkit\n $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix);\n }\n\n @else {\n $gradients: (\n webkit-image: -webkit- + $image,\n spec-image: $image\n );\n }\n\n @return $gradients;\n}\n","@function _linear-positions-parser($pos) {\n $type: type-of(nth($pos, 1));\n $spec: null;\n $degree: null;\n $side: null;\n $corner: null;\n $length: length($pos);\n // Parse Side and corner positions\n @if ($length > 1) {\n @if nth($pos, 1) == \"to\" { // Newer syntax\n $side: nth($pos, 2);\n\n @if $length == 2 { // eg. to top\n // Swap for backwards compatability\n $degree: _position-flipper(nth($pos, 2));\n }\n @else if $length == 3 { // eg. to top left\n $corner: nth($pos, 3);\n }\n }\n @else if $length == 2 { // Older syntax (\"top left\")\n $side: _position-flipper(nth($pos, 1));\n $corner: _position-flipper(nth($pos, 2));\n }\n\n @if (\"#{$side} #{$corner}\" == \"left top\") or (\"#{$side} #{$corner}\" == \"top left\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n @else if (\"#{$side} #{$corner}\" == \"right top\") or (\"#{$side} #{$corner}\" == \"top right\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n @else if (\"#{$side} #{$corner}\" == \"right bottom\") or (\"#{$side} #{$corner}\" == \"bottom right\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n @else if (\"#{$side} #{$corner}\" == \"left bottom\") or (\"#{$side} #{$corner}\" == \"bottom left\") {\n $degree: _position-flipper(#{$side}) _position-flipper(#{$corner});\n }\n $spec: to $side $corner;\n }\n @else if $length == 1 {\n // Swap for backwards compatability\n @if $type == string {\n $degree: $pos;\n $spec: to _position-flipper($pos);\n }\n @else {\n $degree: -270 - $pos; //rotate the gradient opposite from spec\n $spec: $pos;\n }\n }\n $degree: unquote($degree + \",\");\n $spec: unquote($spec + \",\");\n @return $degree $spec;\n}\n\n@function _position-flipper($pos) {\n @return if($pos == left, right, null)\n if($pos == right, left, null)\n if($pos == top, bottom, null)\n if($pos == bottom, top, null);\n}\n","// Private function for linear-gradient-parser\n@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) {\n $val-1: str-slice($first-val, 0, $has-multiple-vals - 1 );\n $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val));\n $val-3: null;\n $has-val-3: str-index($val-2, \" \");\n\n @if $has-val-3 {\n $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2));\n $val-2: str-slice($val-2, 0, $has-val-3 - 1);\n }\n\n $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3);\n $pos: unquote($pos + \"\");\n\n // Use old spec for webkit\n @if $val-1 == \"to\" {\n @return (\n webkit-image: -webkit- + $prefix + $pos + $suffix,\n spec-image: $image\n );\n }\n\n // Bring the code up to spec\n @else {\n @return (\n webkit-image: -webkit- + $image,\n spec-image: $prefix + \"to \" + $pos + $suffix\n );\n }\n}\n","@function _radial-arg-parser($G1, $G2, $pos, $shape-size) {\n @each $value in $G1, $G2 {\n $first-val: nth($value, 1);\n $pos-type: type-of($first-val);\n $spec-at-index: null;\n\n // Determine if spec was passed to mixin\n @if type-of($value) == list {\n $spec-at-index: if(index($value, at), index($value, at), false);\n }\n @if $spec-at-index {\n @if $spec-at-index > 1 {\n @for $i from 1 through ($spec-at-index - 1) {\n $shape-size: $shape-size nth($value, $i);\n }\n @for $i from ($spec-at-index + 1) through length($value) {\n $pos: $pos nth($value, $i);\n }\n }\n @else if $spec-at-index == 1 {\n @for $i from ($spec-at-index + 1) through length($value) {\n $pos: $pos nth($value, $i);\n }\n }\n $G1: null;\n }\n\n // If not spec calculate correct values\n @else {\n @if ($pos-type != color) or ($first-val != \"transparent\") {\n @if ($pos-type == number)\n or ($first-val == \"center\")\n or ($first-val == \"top\")\n or ($first-val == \"right\")\n or ($first-val == \"bottom\")\n or ($first-val == \"left\") {\n\n $pos: $value;\n\n @if $pos == $G1 {\n $G1: null;\n }\n }\n\n @else if\n ($first-val == \"ellipse\")\n or ($first-val == \"circle\")\n or ($first-val == \"closest-side\")\n or ($first-val == \"closest-corner\")\n or ($first-val == \"farthest-side\")\n or ($first-val == \"farthest-corner\")\n or ($first-val == \"contain\")\n or ($first-val == \"cover\") {\n\n $shape-size: $value;\n\n @if $value == $G1 {\n $G1: null;\n }\n\n @else if $value == $G2 {\n $G2: null;\n }\n }\n }\n }\n }\n @return $G1, $G2, $pos, $shape-size;\n}\n","@function _radial-positions-parser($gradient-pos) {\n $shape-size: nth($gradient-pos, 1);\n $pos: nth($gradient-pos, 2);\n $shape-size-spec: _shape-size-stripper($shape-size);\n\n $pre-spec: unquote(if($pos, \"#{$pos}, \", null))\n unquote(if($shape-size, \"#{$shape-size},\", null));\n $pos-spec: if($pos, \"at #{$pos}\", null);\n\n $spec: \"#{$shape-size-spec} #{$pos-spec}\";\n\n // Add comma\n @if ($spec != ' ') {\n $spec: \"#{$spec},\"\n }\n\n @return $pre-spec $spec;\n}\n","@function _radial-gradient-parser($image) {\n $image: unquote($image);\n $gradients: ();\n $start: str-index($image, \"(\");\n $end: str-index($image, \",\");\n $first-val: str-slice($image, $start + 1, $end - 1);\n\n $prefix: str-slice($image, 0, $start);\n $suffix: str-slice($image, $end, str-length($image));\n\n $is-spec-syntax: str-index($first-val, \"at\");\n\n @if $is-spec-syntax and $is-spec-syntax > 1 {\n $keyword: str-slice($first-val, 1, $is-spec-syntax - 2);\n $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));\n $pos: append($pos, $keyword, comma);\n\n $gradients: (\n webkit-image: -webkit- + $prefix + $pos + $suffix,\n spec-image: $image\n )\n }\n\n @else if $is-spec-syntax == 1 {\n $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val));\n\n $gradients: (\n webkit-image: -webkit- + $prefix + $pos + $suffix,\n spec-image: $image\n )\n }\n\n @else if str-index($image, \"cover\") or str-index($image, \"contain\") {\n @warn \"Radial-gradient needs to be updated to conform to latest spec.\";\n\n $gradients: (\n webkit-image: null,\n spec-image: $image\n )\n }\n\n @else {\n $gradients: (\n webkit-image: -webkit- + $image,\n spec-image: $image\n )\n }\n\n @return $gradients;\n}\n","// User for linear and radial gradients within background-image or border-image properties\n\n@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) {\n $pre-spec: null;\n $spec: null;\n $vendor-gradients: null;\n @if $gradient-type == linear {\n @if $gradient-positions {\n $pre-spec: nth($gradient-positions, 1);\n $spec: nth($gradient-positions, 2);\n }\n }\n @else if $gradient-type == radial {\n $pre-spec: nth($gradient-positions, 1);\n $spec: nth($gradient-positions, 2);\n }\n\n @if $vendor {\n $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients);\n }\n @else if $vendor == false {\n $vendor-gradients: \"#{$gradient-type}-gradient(#{$spec} #{$gradients})\";\n $vendor-gradients: unquote($vendor-gradients);\n }\n @return $vendor-gradients;\n}\n","@function _shape-size-stripper($shape-size) {\n $shape-size-spec: null;\n @each $value in $shape-size {\n @if ($value == \"cover\") or ($value == \"contain\") {\n $value: null;\n }\n $shape-size-spec: \"#{$shape-size-spec} #{$value}\";\n }\n @return $shape-size-spec;\n}\n","//************************************************************************//\n// Helper function for linear/radial-gradient-parsers.\n// Source: http://sassmeister.com/gist/9647408\n//************************************************************************//\n@function _str-to-num($string) {\n // Matrices\n $strings: '0' '1' '2' '3' '4' '5' '6' '7' '8' '9';\n $numbers: 0 1 2 3 4 5 6 7 8 9;\n\n // Result\n $result: 0;\n $divider: 0;\n $minus: false;\n\n // Looping through all characters\n @for $i from 1 through str-length($string) {\n $character: str-slice($string, $i, $i);\n $index: index($strings, $character);\n\n @if $character == '-' {\n $minus: true;\n }\n\n @else if $character == '.' {\n $divider: 1;\n }\n\n @else {\n @if not $index {\n $result: if($minus, $result * -1, $result);\n @return _convert-units($result, str-slice($string, $i));\n }\n\n $number: nth($numbers, $index);\n\n @if $divider == 0 {\n $result: $result * 10;\n }\n\n @else {\n // Move the decimal dot to the left\n $divider: $divider * 10;\n $number: $number / $divider;\n }\n\n $result: $result + $number;\n }\n }\n @return if($minus, $result * -1, $result);\n}\n","@function assign-inputs($inputs, $pseudo: null) {\n $list : ();\n\n @each $input in $inputs {\n $input: unquote($input);\n $input: if($pseudo, $input + \":\" + $pseudo, $input);\n $list: append($list, $input, comma);\n }\n\n @return $list;\n}","// Programatically determines whether a color is light or dark\n// Returns a boolean\n// More details here http://robots.thoughtbot.com/closer-look-color-lightness\n\n@function is-light($hex-color) {\n $-local-red: red(rgba($hex-color, 1.0));\n $-local-green: green(rgba($hex-color, 1.0));\n $-local-blue: blue(rgba($hex-color, 1.0));\n\n $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;\n\n @return $-local-lightness > .6;\n}\n","// Flexible grid\n@function flex-grid($columns, $container-columns: $fg-max-columns) {\n $width: $columns * $fg-column + ($columns - 1) * $fg-gutter;\n $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;\n @return percentage($width / $container-width);\n}\n\n// Flexible gutter\n@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {\n $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;\n @return percentage($gutter / $container-width);\n}\n\n// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.\n// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.\n//\n// The calculation presumes that your column structure will be missing the last gutter:\n//\n// -- column -- gutter -- column -- gutter -- column\n//\n// $fg-column: 60px; // Column Width\n// $fg-gutter: 25px; // Gutter Width\n// $fg-max-columns: 12; // Total Columns For Main Container\n//\n// div {\n// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;\n// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;\n//\n// p {\n// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;\n// float: left;\n// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;\n// }\n//\n// blockquote {\n// float: left;\n// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;\n// }\n// }","@function golden-ratio($value, $increment) {\n @return modular-scale($value, $increment, $golden)\n}\n","@function grid-width($n) {\n @return $n * $gw-column + ($n - 1) * $gw-gutter;\n}\n\n// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.\n//\n// $gw-column: 100px; // Column Width\n// $gw-gutter: 40px; // Gutter Width\n//\n// div {\n// width: grid-width(4); // returns 520px;\n// margin-left: $gw-gutter; // returns 40px;\n// }\n","// Scaling Variables\n$golden: 1.618;\n$minor-second: 1.067;\n$major-second: 1.125;\n$minor-third: 1.2;\n$major-third: 1.25;\n$perfect-fourth: 1.333;\n$augmented-fourth: 1.414;\n$perfect-fifth: 1.5;\n$minor-sixth: 1.6;\n$major-sixth: 1.667;\n$minor-seventh: 1.778;\n$major-seventh: 1.875;\n$octave: 2;\n$major-tenth: 2.5;\n$major-eleventh: 2.667;\n$major-twelfth: 3;\n$double-octave: 4;\n\n@function modular-scale($value, $increment, $ratio) {\n $v1: nth($value, 1);\n $v2: nth($value, length($value));\n $value: $v1;\n\n // scale $v2 to just above $v1\n @while $v2 > $v1 {\n $v2: ($v2 / $ratio); // will be off-by-1\n }\n @while $v2 < $v1 {\n $v2: ($v2 * $ratio); // will fix off-by-1\n }\n\n // check AFTER scaling $v2 to prevent double-counting corner-case\n $double-stranded: $v2 > $v1;\n\n @if $increment > 0 {\n @for $i from 1 through $increment {\n @if $double-stranded and ($v1 * $ratio) > $v2 {\n $value: $v2;\n $v2: ($v2 * $ratio);\n } @else {\n $v1: ($v1 * $ratio);\n $value: $v1;\n }\n }\n }\n\n @if $increment < 0 {\n // adjust $v2 to just below $v1\n @if $double-stranded {\n $v2: ($v2 / $ratio);\n }\n\n @for $i from $increment through -1 {\n @if $double-stranded and ($v1 / $ratio) < $v2 {\n $value: $v2;\n $v2: ($v2 / $ratio);\n } @else {\n $v1: ($v1 / $ratio);\n $value: $v1;\n }\n }\n }\n\n @return $value;\n}\n","// Convert pixels to ems\n// eg. for a relational value of 12px write em(12) when the parent is 16px\n// if the parent is another value say 24px write em(12, 24)\n\n@function em($pxval, $base: $em-base) {\n @if not unitless($pxval) {\n $pxval: strip-units($pxval);\n }\n @if not unitless($base) {\n $base: strip-units($base);\n }\n @return ($pxval / $base) * 1em;\n}\n","// Convert pixels to rems\n// eg. for a relational value of 12px write rem(12)\n// Assumes $em-base is the font-size of \n\n@function rem($pxval) {\n @if not unitless($pxval) {\n $pxval: strip-units($pxval);\n }\n\n $base: $em-base;\n @if not unitless($base) {\n $base: strip-units($base);\n }\n @return ($pxval / $base) * 1rem;\n}\n","// Srtips the units from a value. e.g. 12px -> 12\n\n@function strip-units($val) {\n @return ($val / ($val * 0 + 1));\n}\n","// Add percentage of white to a color\n@function tint($color, $percent){\n @return mix(white, $color, $percent);\n}\n\n// Add percentage of black to a color\n@function shade($color, $percent){\n @return mix(black, $color, $percent);\n}\n","// Return vendor-prefixed property names if appropriate\n// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background\n//************************************************************************//\n@function transition-property-names($props, $vendor: false) {\n\t$new-props: ();\n\t\n\t@each $prop in $props {\n\t\t$new-props: append($new-props, transition-property-name($prop, $vendor), comma);\n\t}\n\n\t@return $new-props;\n}\n\n@function transition-property-name($prop, $vendor: false) {\n\t// put other properties that need to be prefixed here aswell\n\t@if $vendor and $prop == transform {\n\t\t@return unquote('-'+$vendor+'-'+$prop);\n\t}\n\t@else {\n\t\t@return $prop;\n\t}\n}","// Convert shorthand to the 4-value syntax\n\n@function unpack($shorthand) {\n @if length($shorthand) == 1 {\n @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1);\n }\n @else if length($shorthand) == 2 {\n @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2);\n }\n @else if length($shorthand) == 3 {\n @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2);\n }\n @else {\n @return $shorthand;\n }\n}\n\n","// http://www.w3.org/TR/css3-animations/#the-animation-name-property-\n// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties.\n\n// Official animation shorthand property.\n@mixin animation ($animations...) {\n @include prefixer(animation, $animations, webkit moz spec);\n}\n\n// Individual Animation Properties\n@mixin animation-name ($names...) {\n @include prefixer(animation-name, $names, webkit moz spec);\n}\n\n\n@mixin animation-duration ($times...) {\n @include prefixer(animation-duration, $times, webkit moz spec);\n}\n\n\n@mixin animation-timing-function ($motions...) {\n// ease | linear | ease-in | ease-out | ease-in-out\n @include prefixer(animation-timing-function, $motions, webkit moz spec);\n}\n\n\n@mixin animation-iteration-count ($values...) {\n// infinite | \n @include prefixer(animation-iteration-count, $values, webkit moz spec);\n}\n\n\n@mixin animation-direction ($directions...) {\n// normal | alternate\n @include prefixer(animation-direction, $directions, webkit moz spec);\n}\n\n\n@mixin animation-play-state ($states...) {\n// running | paused\n @include prefixer(animation-play-state, $states, webkit moz spec);\n}\n\n\n@mixin animation-delay ($times...) {\n @include prefixer(animation-delay, $times, webkit moz spec);\n}\n\n\n@mixin animation-fill-mode ($modes...) {\n// none | forwards | backwards | both\n @include prefixer(animation-fill-mode, $modes, webkit moz spec);\n}\n","@mixin appearance ($value) {\n @include prefixer(appearance, $value, webkit moz ms o spec);\n}\n","//************************************************************************//\n// Backface-visibility mixin\n//************************************************************************//\n@mixin backface-visibility($visibility) {\n @include prefixer(backface-visibility, $visibility, webkit spec);\n}\n","//************************************************************************//\n// Background property for adding multiple backgrounds using shorthand\n// notation.\n//************************************************************************//\n\n@mixin background($backgrounds...) {\n $webkit-backgrounds: ();\n $spec-backgrounds: ();\n\n @each $background in $backgrounds {\n $webkit-background: ();\n $spec-background: ();\n $background-type: type-of($background);\n\n @if $background-type == string or list {\n $background-str: if($background-type == list, nth($background, 1), $background);\n\n $url-str: str-slice($background-str, 0, 3);\n $gradient-type: str-slice($background-str, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-background: $background;\n $spec-background: $background;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser(\"#{$background}\");\n $webkit-background: map-get($gradients, webkit-image);\n $spec-background: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser(\"#{$background}\");\n $webkit-background: map-get($gradients, webkit-image);\n $spec-background: map-get($gradients, spec-image);\n }\n\n @else {\n $webkit-background: $background;\n $spec-background: $background;\n }\n }\n\n @else {\n $webkit-background: $background;\n $spec-background: $background;\n }\n\n $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma);\n $spec-backgrounds: append($spec-backgrounds, $spec-background, comma);\n }\n\n background: $webkit-backgrounds;\n background: $spec-backgrounds;\n}\n","//************************************************************************//\n// Background-image property for adding multiple background images with\n// gradients, or for stringing multiple gradients together.\n//************************************************************************//\n\n@mixin background-image($images...) {\n $webkit-images: ();\n $spec-images: ();\n\n @each $image in $images {\n $webkit-image: ();\n $spec-image: ();\n\n @if (type-of($image) == string) {\n $url-str: str-slice($image, 0, 3);\n $gradient-type: str-slice($image, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-image: $image;\n $spec-image: $image;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser($image);\n $webkit-image: map-get($gradients, webkit-image);\n $spec-image: map-get($gradients, spec-image);\n }\n }\n\n $webkit-images: append($webkit-images, $webkit-image, comma);\n $spec-images: append($spec-images, $spec-image, comma);\n }\n\n background-image: $webkit-images;\n background-image: $spec-images;\n}\n","@mixin border-image($borders...) {\n $webkit-borders: ();\n $spec-borders: ();\n\n @each $border in $borders {\n $webkit-border: ();\n $spec-border: ();\n $border-type: type-of($border);\n\n @if $border-type == string or list {\n $border-str: if($border-type == list, nth($border, 1), $border);\n\n $url-str: str-slice($border-str, 0, 3);\n $gradient-type: str-slice($border-str, 0, 6);\n\n @if $url-str == \"url\" {\n $webkit-border: $border;\n $spec-border: $border;\n }\n\n @else if $gradient-type == \"linear\" {\n $gradients: _linear-gradient-parser(\"#{$border}\");\n $webkit-border: map-get($gradients, webkit-image);\n $spec-border: map-get($gradients, spec-image);\n }\n\n @else if $gradient-type == \"radial\" {\n $gradients: _radial-gradient-parser(\"#{$border}\");\n $webkit-border: map-get($gradients, webkit-image);\n $spec-border: map-get($gradients, spec-image);\n }\n\n @else {\n $webkit-border: $border;\n $spec-border: $border;\n }\n }\n\n @else {\n $webkit-border: $border;\n $spec-border: $border;\n }\n\n $webkit-borders: append($webkit-borders, $webkit-border, comma);\n $spec-borders: append($spec-borders, $spec-border, comma);\n }\n\n -webkit-border-image: $webkit-borders;\n border-image: $spec-borders;\n border-style: solid;\n}\n\n//Examples:\n// @include border-image(url(\"image.png\"));\n// @include border-image(url(\"image.png\") 20 stretch);\n// @include border-image(linear-gradient(45deg, orange, yellow));\n// @include border-image(linear-gradient(45deg, orange, yellow) stretch);\n// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round);\n// @include border-image(radial-gradient(top, cover, orange, yellow, orange));\n","//************************************************************************//\n// Shorthand Border-radius mixins\n//************************************************************************//\n@mixin border-top-radius($radii) {\n @include prefixer(border-top-left-radius, $radii, spec);\n @include prefixer(border-top-right-radius, $radii, spec);\n}\n\n@mixin border-bottom-radius($radii) {\n @include prefixer(border-bottom-left-radius, $radii, spec);\n @include prefixer(border-bottom-right-radius, $radii, spec);\n}\n\n@mixin border-left-radius($radii) {\n @include prefixer(border-top-left-radius, $radii, spec);\n @include prefixer(border-bottom-left-radius, $radii, spec);\n}\n\n@mixin border-right-radius($radii) {\n @include prefixer(border-top-right-radius, $radii, spec);\n @include prefixer(border-bottom-right-radius, $radii, spec);\n}\n","@mixin box-sizing ($box) {\n// content-box | border-box | inherit\n @include prefixer(box-sizing, $box, webkit moz spec);\n}\n","@mixin calc($property, $value) {\n #{$property}: -webkit-calc(#{$value});\n #{$property}: calc(#{$value});\n}\n","@mixin columns($arg: auto) {\n// || \n @include prefixer(columns, $arg, webkit moz spec);\n}\n\n@mixin column-count($int: auto) {\n// auto || integer\n @include prefixer(column-count, $int, webkit moz spec);\n}\n\n@mixin column-gap($length: normal) {\n// normal || length\n @include prefixer(column-gap, $length, webkit moz spec);\n}\n\n@mixin column-fill($arg: auto) {\n// auto || length\n @include prefixer(column-fill, $arg, webkit moz spec);\n}\n\n@mixin column-rule($arg) {\n// || || \n @include prefixer(column-rule, $arg, webkit moz spec);\n}\n\n@mixin column-rule-color($color) {\n @include prefixer(column-rule-color, $color, webkit moz spec);\n}\n\n@mixin column-rule-style($style: none) {\n// none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid\n @include prefixer(column-rule-style, $style, webkit moz spec);\n}\n\n@mixin column-rule-width ($width: none) {\n @include prefixer(column-rule-width, $width, webkit moz spec);\n}\n\n@mixin column-span($arg: none) {\n// none || all\n @include prefixer(column-span, $arg, webkit moz spec);\n}\n\n@mixin column-width($length: auto) {\n// auto || length\n @include prefixer(column-width, $length, webkit moz spec);\n}\n","@mixin filter($function: none) {\n // [\n @include prefixer(perspective, $depth, webkit moz spec);\n}\n\n@mixin perspective-origin($value: 50% 50%) {\n @include prefixer(perspective-origin, $value, webkit moz spec);\n}\n","// Requires Sass 3.1+\n@mixin radial-gradient($G1, $G2,\n $G3: null, $G4: null,\n $G5: null, $G6: null,\n $G7: null, $G8: null,\n $G9: null, $G10: null,\n $pos: null,\n $shape-size: null,\n $fallback: null) {\n\n $data: _radial-arg-parser($G1, $G2, $pos, $shape-size);\n $G1: nth($data, 1);\n $G2: nth($data, 2);\n $pos: nth($data, 3);\n $shape-size: nth($data, 4);\n\n $full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;\n\n // Strip deprecated cover/contain for spec\n $shape-size-spec: _shape-size-stripper($shape-size);\n\n // Set $G1 as the default fallback color\n $first-color: nth($full, 1);\n $fallback-color: nth($first-color, 1);\n\n @if (type-of($fallback) == color) or ($fallback == \"transparent\") {\n $fallback-color: $fallback;\n }\n\n // Add Commas and spaces\n $shape-size: if($shape-size, '#{$shape-size}, ', null);\n $pos: if($pos, '#{$pos}, ', null);\n $pos-spec: if($pos, 'at #{$pos}', null);\n $shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');\n\n background-color: $fallback-color;\n background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));\n background-image: unquote(\"radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})\");\n}\n","@mixin transform($property: none) {\n// none | \n @include prefixer(transform, $property, webkit moz ms o spec);\n}\n\n@mixin transform-origin($axes: 50%) {\n// x-axis - left | center | right | length | %\n// y-axis - top | center | bottom | length | %\n// z-axis - length\n @include prefixer(transform-origin, $axes, webkit moz ms o spec);\n}\n\n@mixin transform-style ($style: flat) {\n @include prefixer(transform-style, $style, webkit moz ms o spec);\n}\n","// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.\n// Example: @include transition (all 2s ease-in-out);\n// @include transition (opacity 1s ease-in 2s, width 2s ease-out);\n// @include transition-property (transform, opacity);\n\n@mixin transition ($properties...) {\n // Fix for vendor-prefix transform property\n $needs-prefixes: false;\n $webkit: ();\n $moz: ();\n $spec: ();\n\n // Create lists for vendor-prefixed transform\n @each $list in $properties {\n @if nth($list, 1) == \"transform\" {\n $needs-prefixes: true;\n $list1: -webkit-transform;\n $list2: -moz-transform;\n $list3: ();\n\n @each $var in $list {\n $list3: join($list3, $var);\n\n @if $var != \"transform\" {\n $list1: join($list1, $var);\n $list2: join($list2, $var);\n }\n }\n\n $webkit: append($webkit, $list1);\n $moz: append($moz, $list2);\n $spec: append($spec, $list3);\n }\n\n // Create lists for non-prefixed transition properties\n @else {\n $webkit: append($webkit, $list, comma);\n $moz: append($moz, $list, comma);\n $spec: append($spec, $list, comma);\n }\n }\n\n @if $needs-prefixes {\n -webkit-transition: $webkit;\n -moz-transition: $moz;\n transition: $spec;\n }\n @else {\n @if length($properties) >= 1 {\n @include prefixer(transition, $properties, webkit moz spec);\n }\n\n @else {\n $properties: all 0.15s ease-out 0s;\n @include prefixer(transition, $properties, webkit moz spec);\n }\n }\n}\n\n@mixin transition-property ($properties...) {\n -webkit-transition-property: transition-property-names($properties, 'webkit');\n -moz-transition-property: transition-property-names($properties, 'moz');\n transition-property: transition-property-names($properties, false);\n}\n\n@mixin transition-duration ($times...) {\n @include prefixer(transition-duration, $times, webkit moz spec);\n}\n\n@mixin transition-timing-function ($motions...) {\n// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()\n @include prefixer(transition-timing-function, $motions, webkit moz spec);\n}\n\n@mixin transition-delay ($times...) {\n @include prefixer(transition-delay, $times, webkit moz spec);\n}\n","@mixin user-select($arg: none) {\n @include prefixer(user-select, $arg, webkit moz ms spec);\n}\n","@mixin placeholder {\n $placeholders: \":-webkit-input\" \":-moz\" \"-moz\" \"-ms-input\";\n @each $placeholder in $placeholders {\n &:#{$placeholder}-placeholder {\n @content;\n }\n }\n}\n","@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) {\n\n @if type-of($style) == string and type-of($base-color) == color {\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == string and type-of($base-color) == number {\n $padding: $text-size;\n $text-size: $base-color;\n $base-color: #4294f0;\n\n @if $padding == inherit {\n $padding: 7px 18px;\n }\n\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == color and type-of($base-color) == color {\n $base-color: $style;\n $style: simple;\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == color and type-of($base-color) == number {\n $padding: $text-size;\n $text-size: $base-color;\n $base-color: $style;\n $style: simple;\n\n @if $padding == inherit {\n $padding: 7px 18px;\n }\n\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n @if type-of($style) == number {\n $padding: $base-color;\n $text-size: $style;\n $base-color: #4294f0;\n $style: simple;\n\n @if $padding == #4294f0 {\n $padding: 7px 18px;\n }\n\n @include buttonstyle($style, $base-color, $text-size, $padding);\n }\n\n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n\n// Selector Style Button\n//************************************************************************//\n@mixin buttonstyle($type, $b-color, $t-size, $pad) {\n // Grayscale button\n @if $type == simple and $b-color == grayscale($b-color) {\n @include simple($b-color, true, $t-size, $pad);\n }\n\n @if $type == shiny and $b-color == grayscale($b-color) {\n @include shiny($b-color, true, $t-size, $pad);\n }\n\n @if $type == pill and $b-color == grayscale($b-color) {\n @include pill($b-color, true, $t-size, $pad);\n }\n\n @if $type == flat and $b-color == grayscale($b-color) {\n @include flat($b-color, true, $t-size, $pad);\n }\n\n // Colored button\n @if $type == simple {\n @include simple($b-color, false, $t-size, $pad);\n }\n\n @else if $type == shiny {\n @include shiny($b-color, false, $t-size, $pad);\n }\n\n @else if $type == pill {\n @include pill($b-color, false, $t-size, $pad);\n }\n\n @else if $type == flat {\n @include flat($b-color, false, $t-size, $pad);\n }\n}\n\n\n// Simple Button\n//************************************************************************//\n@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%);\n $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%);\n $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%);\n $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);\n }\n\n @if $grayscale == true {\n $border: grayscale($border);\n $inset-shadow: grayscale($inset-shadow);\n $stop-gradient: grayscale($stop-gradient);\n $text-shadow: grayscale($text-shadow);\n }\n\n border: 1px solid $border;\n border-radius: 3px;\n box-shadow: inset 0 1px 0 0 $inset-shadow;\n color: $color;\n display: inline-block;\n font-size: $textsize;\n font-weight: bold;\n @include linear-gradient ($base-color, $stop-gradient);\n padding: $padding;\n text-decoration: none;\n text-shadow: 0 1px 0 $text-shadow;\n background-clip: padding-box;\n\n &:hover:not(:disabled) {\n $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%);\n $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%);\n $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%);\n\n @if $grayscale == true {\n $base-color-hover: grayscale($base-color-hover);\n $inset-shadow-hover: grayscale($inset-shadow-hover);\n $stop-gradient-hover: grayscale($stop-gradient-hover);\n }\n\n box-shadow: inset 0 1px 0 0 $inset-shadow-hover;\n cursor: pointer;\n @include linear-gradient ($base-color-hover, $stop-gradient-hover);\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%);\n $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%);\n\n @if $grayscale == true {\n $border-active: grayscale($border-active);\n $inset-shadow-active: grayscale($inset-shadow-active);\n }\n\n border: 1px solid $border-active;\n box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active;\n }\n}\n\n\n// Shiny Button\n//************************************************************************//\n@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81);\n $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122);\n $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46);\n $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12);\n $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33);\n $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114);\n $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);\n }\n\n @if $grayscale == true {\n $border: grayscale($border);\n $border-bottom: grayscale($border-bottom);\n $fourth-stop: grayscale($fourth-stop);\n $inset-shadow: grayscale($inset-shadow);\n $second-stop: grayscale($second-stop);\n $text-shadow: grayscale($text-shadow);\n $third-stop: grayscale($third-stop);\n }\n\n border: 1px solid $border;\n border-bottom: 1px solid $border-bottom;\n border-radius: 5px;\n box-shadow: inset 0 1px 0 0 $inset-shadow;\n color: $color;\n display: inline-block;\n font-size: $textsize;\n font-weight: bold;\n @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%);\n padding: $padding;\n text-align: center;\n text-decoration: none;\n text-shadow: 0 -1px 1px $text-shadow;\n\n &:hover:not(:disabled) {\n $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18);\n $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51);\n $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66);\n $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63);\n\n @if $grayscale == true {\n $first-stop-hover: grayscale($first-stop-hover);\n $second-stop-hover: grayscale($second-stop-hover);\n $third-stop-hover: grayscale($third-stop-hover);\n $fourth-stop-hover: grayscale($fourth-stop-hover);\n }\n\n cursor: pointer;\n @include linear-gradient(top, $first-stop-hover 0%,\n $second-stop-hover 50%,\n $third-stop-hover 50%,\n $fourth-stop-hover 100%);\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122);\n\n @if $grayscale == true {\n $inset-shadow-active: grayscale($inset-shadow-active);\n }\n\n box-shadow: inset 0 0 20px 0 $inset-shadow-active;\n }\n}\n\n\n// Pill Button\n//************************************************************************//\n@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%);\n $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%);\n $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%);\n $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%);\n $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%);\n $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%);\n }\n\n @if $grayscale == true {\n $border-bottom: grayscale($border-bottom);\n $border-sides: grayscale($border-sides);\n $border-top: grayscale($border-top);\n $inset-shadow: grayscale($inset-shadow);\n $stop-gradient: grayscale($stop-gradient);\n $text-shadow: grayscale($text-shadow);\n }\n\n border: 1px solid $border-top;\n border-color: $border-top $border-sides $border-bottom;\n border-radius: 16px;\n box-shadow: inset 0 1px 0 0 $inset-shadow;\n color: $color;\n display: inline-block;\n font-size: $textsize;\n font-weight: normal;\n line-height: 1;\n @include linear-gradient ($base-color, $stop-gradient);\n padding: $padding;\n text-align: center;\n text-decoration: none;\n text-shadow: 0 -1px 1px $text-shadow;\n background-clip: padding-box;\n\n &:hover:not(:disabled) {\n $base-color-hover: adjust-color($base-color, $lightness: -4.5%);\n $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%);\n $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%);\n $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%);\n $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%);\n $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%);\n $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%);\n\n @if $grayscale == true {\n $base-color-hover: grayscale($base-color-hover);\n $border-bottom: grayscale($border-bottom);\n $border-sides: grayscale($border-sides);\n $border-top: grayscale($border-top);\n $inset-shadow-hover: grayscale($inset-shadow-hover);\n $stop-gradient-hover: grayscale($stop-gradient-hover);\n $text-shadow-hover: grayscale($text-shadow-hover);\n }\n\n border: 1px solid $border-top;\n border-color: $border-top $border-sides $border-bottom;\n box-shadow: inset 0 1px 0 0 $inset-shadow-hover;\n cursor: pointer;\n @include linear-gradient ($base-color-hover, $stop-gradient-hover);\n text-shadow: 0 -1px 1px $text-shadow-hover;\n background-clip: padding-box;\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%);\n $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%);\n $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%);\n $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%);\n $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%);\n\n @if $grayscale == true {\n $active-color: grayscale($active-color);\n $border-active: grayscale($border-active);\n $border-bottom-active: grayscale($border-bottom-active);\n $inset-shadow-active: grayscale($inset-shadow-active);\n $text-shadow-active: grayscale($text-shadow-active);\n }\n\n background: $active-color;\n border: 1px solid $border-active;\n border-bottom: 1px solid $border-bottom-active;\n box-shadow: inset 0 0 6px 3px $inset-shadow-active;\n text-shadow: 0 -1px 1px $text-shadow-active;\n }\n}\n\n\n\n// Flat Button\n//************************************************************************//\n@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) {\n $color: hsl(0, 0, 100%);\n\n @if is-light($base-color) {\n $color: hsl(0, 0, 20%);\n }\n\n background-color: $base-color;\n border-radius: 3px;\n border: none;\n color: $color;\n display: inline-block;\n font-size: inherit;\n font-weight: bold;\n padding: 7px 18px;\n text-decoration: none;\n background-clip: padding-box;\n\n &:hover:not(:disabled){\n $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%);\n\n @if $grayscale == true {\n $base-color-hover: grayscale($base-color-hover);\n }\n\n background-color: $base-color-hover;\n cursor: pointer;\n }\n\n &:active:not(:disabled),\n &:focus:not(:disabled) {\n $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%);\n\n @if $grayscale == true {\n $base-color-active: grayscale($base-color-active);\n }\n\n background-color: $base-color-active;\n cursor: pointer;\n }\n}\n","// Modern micro clearfix provides an easy way to contain floats without adding additional markup.\n//\n// Example usage:\n//\n// // Contain all floats within .wrapper\n// .wrapper {\n// @include clearfix;\n// .content,\n// .sidebar {\n// float : left;\n// }\n// }\n\n@mixin clearfix {\n &:after {\n content:\"\";\n display:table;\n clear:both;\n }\n}\n\n// Acknowledgements\n// Beat *that* clearfix: [Thierry Koblentz](http://www.css-101.org/articles/clearfix/latest-new-clearfix-so-far.php)\n","// directional-property mixins are shorthands\n// for writing properties like the following\n//\n// @include margin(null 0 10px);\n// ------\n// margin-right: 0;\n// margin-bottom: 10px;\n// margin-left: 0;\n//\n// - or -\n//\n// @include border-style(dotted null);\n// ------\n// border-top-style: dotted;\n// border-bottom-style: dotted;\n//\n// ------\n//\n// Note: You can also use false instead of null\n\n@function collapse-directionals($vals) {\n $output: null;\n\n $A: nth( $vals, 1 );\n $B: if( length($vals) < 2, $A, nth($vals, 2));\n $C: if( length($vals) < 3, $A, nth($vals, 3));\n $D: if( length($vals) < 2, $A, nth($vals, if( length($vals) < 4, 2, 4) ));\n\n @if $A == 0 { $A: 0 }\n @if $B == 0 { $B: 0 }\n @if $C == 0 { $C: 0 }\n @if $D == 0 { $D: 0 }\n\n @if $A == $B and $A == $C and $A == $D { $output: $A }\n @else if $A == $C and $B == $D { $output: $A $B }\n @else if $B == $D { $output: $A $B $C }\n @else { $output: $A $B $C $D }\n\n @return $output;\n}\n\n@function contains-falsy($list) {\n @each $item in $list {\n @if not $item {\n @return true;\n }\n }\n\n @return false;\n}\n\n@mixin directional-property($pre, $suf, $vals) {\n // Property Names\n $top: $pre + \"-top\" + if($suf, \"-#{$suf}\", \"\");\n $bottom: $pre + \"-bottom\" + if($suf, \"-#{$suf}\", \"\");\n $left: $pre + \"-left\" + if($suf, \"-#{$suf}\", \"\");\n $right: $pre + \"-right\" + if($suf, \"-#{$suf}\", \"\");\n $all: $pre + if($suf, \"-#{$suf}\", \"\");\n\n $vals: collapse-directionals($vals);\n\n @if contains-falsy($vals) {\n @if nth($vals, 1) { #{$top}: nth($vals, 1); }\n\n @if length($vals) == 1 {\n @if nth($vals, 1) { #{$right}: nth($vals, 1); }\n } @else {\n @if nth($vals, 2) { #{$right}: nth($vals, 2); }\n }\n\n // prop: top/bottom right/left\n @if length($vals) == 2 {\n @if nth($vals, 1) { #{$bottom}: nth($vals, 1); }\n @if nth($vals, 2) { #{$left}: nth($vals, 2); }\n\n // prop: top right/left bottom\n } @else if length($vals) == 3 {\n @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }\n @if nth($vals, 2) { #{$left}: nth($vals, 2); }\n\n // prop: top right bottom left\n } @else if length($vals) == 4 {\n @if nth($vals, 3) { #{$bottom}: nth($vals, 3); }\n @if nth($vals, 4) { #{$left}: nth($vals, 4); }\n }\n\n // prop: top/right/bottom/left\n } @else {\n #{$all}: $vals;\n }\n}\n\n@mixin margin($vals...) {\n @include directional-property(margin, false, $vals...);\n}\n\n@mixin padding($vals...) {\n @include directional-property(padding, false, $vals...);\n}\n\n@mixin border-style($vals...) {\n @include directional-property(border, style, $vals...);\n}\n\n@mixin border-color($vals...) {\n @include directional-property(border, color, $vals...);\n}\n\n@mixin border-width($vals...) {\n @include directional-property(border, width, $vals...);\n}\n","@mixin ellipsis($width: 100%) {\n display: inline-block;\n max-width: $width;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","$georgia: Georgia, Cambria, \"Times New Roman\", Times, serif;\n$helvetica: \"Helvetica Neue\", Helvetica, Roboto, Arial, sans-serif;\n$lucida-grande: \"Lucida Grande\", Tahoma, Verdana, Arial, sans-serif;\n$monospace: \"Bitstream Vera Sans Mono\", Consolas, Courier, monospace;\n$verdana: Verdana, Geneva, sans-serif;\n","@mixin hide-text {\n overflow: hidden;\n\n &:before {\n content: \"\";\n display: block;\n width: 0;\n height: 100%;\n }\n}\n","//************************************************************************//\n// Generate a variable ($all-text-inputs) with a list of all html5\n// input types that have a text-based input, excluding textarea.\n// http://diveintohtml5.org/forms.html\n//************************************************************************//\n$inputs-list: 'input[type=\"email\"]',\n 'input[type=\"number\"]',\n 'input[type=\"password\"]',\n 'input[type=\"search\"]',\n 'input[type=\"tel\"]',\n 'input[type=\"text\"]',\n 'input[type=\"url\"]',\n\n // Webkit & Gecko may change the display of these in the future\n 'input[type=\"color\"]',\n 'input[type=\"date\"]',\n 'input[type=\"datetime\"]',\n 'input[type=\"datetime-local\"]',\n 'input[type=\"month\"]',\n 'input[type=\"time\"]',\n 'input[type=\"week\"]';\n\n// Bare inputs\n//************************************************************************//\n$all-text-inputs: assign-inputs($inputs-list);\n\n// Hover Pseudo-class\n//************************************************************************//\n$all-text-inputs-hover: assign-inputs($inputs-list, hover);\n\n// Focus Pseudo-class\n//************************************************************************//\n$all-text-inputs-focus: assign-inputs($inputs-list, focus);\n\n\n\n// You must use interpolation on the variable:\n// #{$all-text-inputs}\n// #{$all-text-inputs-hover}\n// #{$all-text-inputs-focus}\n\n// Example\n//************************************************************************//\n// #{$all-text-inputs}, textarea {\n// border: 1px solid red;\n// }\n\n\n\n//************************************************************************//\n// Generate a variable ($all-button-inputs) with a list of all html5\n// input types that have a button-based input, excluding button.\n//************************************************************************//\n$inputs-button-list: 'input[type=\"button\"]',\n 'input[type=\"reset\"]',\n 'input[type=\"submit\"]';\n\n// Bare inputs\n//************************************************************************//\n$all-button-inputs: assign-inputs($inputs-button-list);\n\n// Hover Pseudo-class\n//************************************************************************//\n$all-button-inputs-hover: assign-inputs($inputs-button-list, hover);\n\n// Focus Pseudo-class\n//************************************************************************//\n$all-button-inputs-focus: assign-inputs($inputs-button-list, focus);\n\n// Active Pseudo-class\n//************************************************************************//\n$all-button-inputs-active: assign-inputs($inputs-button-list, active);\n\n\n\n// You must use interpolation on the variable:\n// #{$all-button-inputs}\n// #{$all-button-inputs-hover}\n// #{$all-button-inputs-focus}\n// #{$all-button-inputs-active}\n\n// Example\n//************************************************************************//\n// #{$all-button-inputs}, button {\n// border: 1px solid red;\n// }\n","@mixin position ($position: relative, $coordinates: null null null null) {\n\n @if type-of($position) == list {\n $coordinates: $position;\n $position: relative;\n }\n\n $coordinates: unpack($coordinates);\n\n $top: nth($coordinates, 1);\n $right: nth($coordinates, 2);\n $bottom: nth($coordinates, 3);\n $left: nth($coordinates, 4);\n\n position: $position;\n\n @if ($top and $top == auto) or (type-of($top) == number) {\n top: $top;\n }\n\n @if ($right and $right == auto) or (type-of($right) == number) {\n right: $right;\n }\n\n @if ($bottom and $bottom == auto) or (type-of($bottom) == number) {\n bottom: $bottom;\n }\n\n @if ($left and $left == auto) or (type-of($left) == number) {\n left: $left;\n }\n}\n","//************************************************************************//\n// Example: @include prefixer(border-radius, $radii, webkit ms spec);\n//************************************************************************//\n// Variables located in /settings/_prefixer.scss\n\n@mixin prefixer ($property, $value, $prefixes) {\n @each $prefix in $prefixes {\n @if $prefix == webkit {\n @if $prefix-for-webkit {\n -webkit-#{$property}: $value;\n }\n }\n @else if $prefix == moz {\n @if $prefix-for-mozilla {\n -moz-#{$property}: $value;\n }\n }\n @else if $prefix == ms {\n @if $prefix-for-microsoft {\n -ms-#{$property}: $value;\n }\n }\n @else if $prefix == o {\n @if $prefix-for-opera {\n -o-#{$property}: $value;\n }\n }\n @else if $prefix == spec {\n @if $prefix-for-spec {\n #{$property}: $value;\n }\n }\n @else {\n @warn \"Unrecognized prefix: #{$prefix}\";\n }\n }\n}\n\n@mixin disable-prefix-for-all() {\n $prefix-for-webkit: false !global;\n $prefix-for-mozilla: false !global;\n $prefix-for-microsoft: false !global;\n $prefix-for-opera: false !global;\n $prefix-for-spec: false !global;\n}\n","@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: false) {\n @if $asset-pipeline {\n background-image: image-url(\"#{$filename}.#{$extension}\");\n }\n @else {\n background-image: url(\"#{$filename}.#{$extension}\");\n }\n\n @include hidpi {\n @if $asset-pipeline {\n @if $retina-filename {\n background-image: image-url(\"#{$retina-filename}.#{$extension}\");\n }\n @else {\n background-image: image-url(\"#{$filename}#{$retina-suffix}.#{$extension}\");\n }\n }\n\n @else {\n @if $retina-filename {\n background-image: url(\"#{$retina-filename}.#{$extension}\");\n }\n @else {\n background-image: url(\"#{$filename}#{$retina-suffix}.#{$extension}\");\n }\n }\n\n background-size: $background-size;\n\n }\n}\n","@mixin size($size) {\n $height: nth($size, 1);\n $width: $height;\n\n @if length($size) > 1 {\n $height: nth($size, 2);\n }\n\n @if $height == auto or (type-of($height) == number and not unitless($height)) {\n height: $height;\n }\n\n @if $width == auto or (type-of($height) == number and not unitless($width)) {\n width: $width;\n }\n}\n","// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie)\n// Timing functions are the same as demo'ed here: http://jqueryui.com/demos/effect/easing.html\n\n// EASE IN\n$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530);\n$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220);\n$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715);\n$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035);\n$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335);\n$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045);\n\n// EASE OUT\n$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940);\n$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000);\n$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000);\n$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000);\n$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000);\n$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000);\n$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275);\n\n// EASE IN OUT\n$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955);\n$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000);\n$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000);\n$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000);\n$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950);\n$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000);\n$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860);\n$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550);\n","@mixin triangle ($size, $color, $direction) {\n height: 0;\n width: 0;\n\n $width: nth($size, 1);\n $height: nth($size, length($size));\n\n $foreground-color: nth($color, 1);\n $background-color: if(length($color) == 2, nth($color, 2), transparent);\n\n @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) {\n\n $width: $width / 2;\n $height: if(length($size) > 1, $height, $height/2);\n\n @if $direction == up {\n border-left: $width solid $background-color;\n border-right: $width solid $background-color;\n border-bottom: $height solid $foreground-color;\n\n } @else if $direction == right {\n border-top: $width solid $background-color;\n border-bottom: $width solid $background-color;\n border-left: $height solid $foreground-color;\n\n } @else if $direction == down {\n border-left: $width solid $background-color;\n border-right: $width solid $background-color;\n border-top: $height solid $foreground-color;\n\n } @else if $direction == left {\n border-top: $width solid $background-color;\n border-bottom: $width solid $background-color;\n border-right: $height solid $foreground-color;\n }\n }\n\n @else if ($direction == up-right) or ($direction == up-left) {\n border-top: $height solid $foreground-color;\n\n @if $direction == up-right {\n border-left: $width solid $background-color;\n\n } @else if $direction == up-left {\n border-right: $width solid $background-color;\n }\n }\n\n @else if ($direction == down-right) or ($direction == down-left) {\n border-bottom: $height solid $foreground-color;\n\n @if $direction == down-right {\n border-left: $width solid $background-color;\n\n } @else if $direction == down-left {\n border-right: $width solid $background-color;\n }\n }\n\n @else if ($direction == inset-up) {\n border-width: $height $width;\n border-style: solid;\n border-color: $background-color $background-color $foreground-color;\n }\n\n @else if ($direction == inset-down) {\n border-width: $height $width;\n border-style: solid;\n border-color: $foreground-color $background-color $background-color;\n }\n\n @else if ($direction == inset-right) {\n border-width: $width $height;\n border-style: solid;\n border-color: $background-color $background-color $background-color $foreground-color;\n }\n\n @else if ($direction == inset-left) {\n border-width: $width $height;\n border-style: solid;\n border-color: $background-color $foreground-color $background-color $background-color;\n }\n}\n","@mixin word-wrap($wrap: break-word) {\n word-wrap: $wrap;\n\n @if $wrap == break-word {\n overflow-wrap: break-word;\n word-break: break-all;\n }\n}\n","//************************************************************************//\n// These mixins/functions are deprecated\n// They will be removed in the next MAJOR version release\n//************************************************************************//\n@mixin inline-block {\n display: inline-block;\n @warn \"inline-block mixin is deprecated and will be removed in the next major version release\";\n}\n","// Core\n@import \"core\";\n\n// Breakpoints\n@import \"breakpoints\";\n\n// Layout\n@import \"layout\";\n\n// Typography\n@import \"typography\";\n\n// Nav\n@import \"nav\";","// Border Radius\n$core-border-radius:\t\t\trem(3) !default;","// Media Device Breakpoints\n$large-desktop-container:\t\t75.000em !default;\n$desktop-container:\t\t\t\t60.000em !default;\n$tablet-container:\t\t\t\t48.000em !default;\n$large-mobile-container:\t\t30.000em !default;\n$mobile-container:\t\t\t\t100% !default;\n\n// Breakpoint Variables For Particles\n$media: \"all\" !default;\n$mobile-only: \"#{$media} and (max-width:#{$tablet-container - 0.062})\" !default;\n$no-mobile: \"#{$media} and (min-width:#{$tablet-container})\" !default;\n$small-mobile-range: \"#{$media} and (max-width:#{$large-mobile-container})\" !default;\n$large-mobile-range: \"#{$media} and (min-width:#{$large-mobile-container + 0.063}) and (max-width:#{$tablet-container - 0.062})\" !default;\n$tablet-range: \"#{$media} and (min-width:#{$tablet-container}) and (max-width:#{$desktop-container - 0.062})\" !default;\n$desktop-range: \"#{$media} and (min-width:#{$desktop-container}) and (max-width:#{$large-desktop-container - 0.062})\" !default;\n$large-desktop-range: \"#{$media} and (min-width:#{$large-desktop-container})\" !default;\n","// Content Block Spacing Variables\n$content-margin:\t\t\t\t0.625rem !default;\n$content-padding:\t\t\t\t0.938rem !default;\n\n// Fixed Block Variables\n$fixed-block-full:\t\t\t\tpercentage(1/4) !default;\n$fixed-block-desktop:\t\t\tpercentage(1/3) !default;\n$fixed-block-tablet:\t\t\tpercentage(1/2) !default;","// Base Sizes\n$core-font-size:\t\t\t\t.9rem !default;\n$core-line-height:\t\t\t\t1.5 !default;\n\n// Heading Sizes\n$h1-font-size:\t\t\t\t\t$core-font-size + 2.20 !default;\n$h2-font-size:\t\t\t\t\t$core-font-size + 1.50 !default;\n$h3-font-size:\t\t\t\t\t$core-font-size + 1.10 !default;\n$h4-font-size:\t\t\t\t\t$core-font-size + 0.75 !default;\n$h5-font-size:\t\t\t\t\t$core-font-size + 0.35 !default;\n$h6-font-size:\t\t\t\t\t$core-font-size - 0.15 !default;\n\n// Spacing\n$leading-margin:\t\t\t\t$core-line-height * 1rem !default;\n","// Dropdowns\n$dropdown-width:\t\t\t\t140px !default;\n$flyout-width:\t\t\t\t\t140px !default;","// Colors\n@import \"colors\";\n\n// Variables\n@import \"variables\";\n","// Core\n$white:\t\t\t\t\t\t\t#ffffff;\n$black:\t\t\t\t\t\t\t#000000;\n$light-gray:\t\t\t\t\t#dddddd;\n\n$core-border-color:\t\t\t\t$light-gray;\n$core-border-color-hover: \t\tdarken($core-border-color, 10);\n\n$code-text:\t\t\t\t\t\t#c7254e;\n$code-bg:\t\t\t\t\t\t#f9f2f4;\n$pre-text:\t\t\t\t\t\t#237794;\n$pre-bg:\t\t\t\t\t\t#f6f6f6;\n\n// Shadows\n$core-box-shadow: \t\t\t\tinset 0 1px 3px hsla(0, 0%, 0%, 0.06);\n","// Sizes\n$header-height: 5rem;\n$footer-height: 6rem;\n$border-radius: 4px;\n\n// Font Weights\n$font-weight-bold: 600;\n$font-weight-regular: 400;\n$font-weight-light:300;\n\n// Global Paddings\n$padding-default: 1.5rem;\n$padding-horiz: 7rem;\n$padding-vert: 3rem;\n\n//Forms\n$form-label-width: 30%;\n$form-border-radius: 4px;\n$form-border-width: 1px;\n$form-label-pad: 5px 0 5px 3rem;\n$form-input-pad: 5px 10px;\n$form-select-pad: 5px 30px 5px 10px;\n","@import \"direction\";\n@import \"range\";","@function opposite-direction($dir) {\n\t@if $dir == 'left' {\n\t\t@return right;\n\t}\n\t@else if $dir == 'right' {\n\t\t@return left;\n\t}\n\t@else if $dir == 'ltr' {\n\t\t@return rtl;\n\t}\n\t@else if $dir == 'rtl' {\n\t\t@return ltr;\n\t}\n\t@else if $dir == 'top' {\n\t\t@return bottom;\n\t}\n\t@else if $dir == 'bottom' {\n\t\t@return top;\n\t}\n\t@else {\n\t\t@warn \"#{$dir} is not a direction! Make sure your direction is all lowercase!\";\n\t\t@return false;\n\t}\n}\n\n@function named-direction($dir) {\n\t@if $dir == 'ltr' {\n\t\t@return left;\n\t}\n\t@else if $dir == 'rtl' {\n\t\t@return right;\n\t}\n\t@else {\n\t\t@warn \"#{$dir} is not a valid HTML direction! Make sure you are using a valid HTML direction\";\n\t\t@return false;\n\t}\n}","@function lower-bound($range){\n\t@if length($range) <= 0 {\n\t\t@return 0;\n\t}\n\t@return nth($range,1);\n}\n\n@function upper-bound($range) {\n\t@if length($range) < 2 {\n\t\t@return 999999999999;\n\t}\n\t@return nth($range, 2);\n}","@import \"breakpoints\";\n@import \"utilities\";","// Breakpoints\n@mixin breakpoint($breakpoints, $media: all) {\n @each $breakpoint in $breakpoints {\n @if $breakpoint == large-desktop-range {\n @media only #{$media} and (min-width: $large-desktop-container) { @content; }\n }\n @else if $breakpoint == desktop-range {\n @media only #{$media} and (min-width: $desktop-container) and (max-width: $large-desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == tablet-range {\n @media only #{$media} and (min-width: $tablet-container) and (max-width: $desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == large-mobile-range {\n @media only #{$media} and (min-width: $large-mobile-container + 0.063) and (max-width: $tablet-container - 0.062) { @content; }\n }\n @else if $breakpoint == mini-nav-range {\n @media only #{$media} and (min-width: $tablet-container - 0.062) and (max-width: $large-desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == small-mobile-range {\n @media only #{$media} and (max-width: $large-mobile-container) { @content; }\n }\n @else if $breakpoint == no-mobile {\n @media only #{$media} and (min-width: $tablet-container) { @content; }\n }\n @else if $breakpoint == mobile-only {\n @media only #{$media} and (max-width: $tablet-container - 0.062) { @content; }\n }\n @else if $breakpoint == desktop-only {\n @media only #{$media} and (max-width: $desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == mobile-plus {\n @media only #{$media} and (min-width: $mobile-container - 0.062) { @content; }\n }\n @else if $breakpoint == tablet-plus {\n @media only #{$media} and (min-width: $tablet-container - 0.062) { @content; }\n }\n @else if $breakpoint == desktop-plus {\n @media only #{$media} and (min-width: $desktop-container - 0.062) { @content; }\n }\n @else if $breakpoint == large-desktop-plus {\n @media only #{$media} and (min-width: $large-desktop-container - 0.062) { @content; }\n }\n }\n}\n","\n\n// List Reset\n%list-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n// Vertical Centering\n%vertical-align {\n\tposition: relative;\n\ttop: 50%;\n\t-webkit-transform: translateY(-50%);\n\t-moz-transform: translateY(-50%);\n\t-o-transform: translateY(-50%);\n\t-ms-transform: translateY(-50%);\n\ttransform: translateY(-50%);\n}\n\n// Columns\n@mixin columns($columns) {\n\twidth: percentage(1/$columns);\n}\n\n// Float with margin variable\n@mixin float($direction, $margin: 0) {\n\tfloat: $direction;\n\tmargin-#{opposite-direction($direction)}: $margin;\n}\n","@import \"buttons\";\n@import \"colorpicker\";\n@import \"datetimepicker\";\n@import \"finderjs\";\n@import \"toggle-switch\";\n","%button {\n\tdisplay: inline-block;\n\tpadding: 0.5rem 1rem;\n font-weight: 400;\n cursor: pointer;\n vertical-align: middle;\n outline: none;\n\n &:active {\n margin: 1px 0 -1px 0;\n }\n\n i {\n //margin-right: 5px;\n }\n\n &.button-small {\n padding: 4px 8px;\n font-size: 95%;\n }\n\n &.button-x-small {\n padding: 2px 5px;\n font-size: 90%;\n }\n\n &:disabled {\n opacity: .6;\n cursor: no-drop;\n }\n\n}\n\n@mixin button-color($color, $text:$white, $lighter:null) {\n color: rgba(red($text), green($text), blue($text), opacity($text) - 0.15);\n\n\tborder-radius: $border-radius;\n background: $color;\n\n @if ($lighter == null) {\n $lighter: lightness($color) > 50;\n }\n\n @if ($lighter) {\n &:focus,\n &:hover {\n background: shade($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid lighten($color, 5%);\n }\n } @else {\n &:focus,\n &:hover {\n background: tint($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid darken($color, 5%);\n }\n }\n}\n\n@mixin button-color-border($color, $text:$white, $lighter:null) {\n color: $text;\n border-radius: $border-radius;\n border: 1px solid $color;\n\n @if ($lighter == null) {\n $lighter: lightness($color) > 50;\n }\n\n @if ($lighter) {\n &:hover {\n border-color: shade($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid lighten($color, 5%);\n }\n } @else {\n &:hover {\n border-color: tint($color,15%);\n color: $text;\n }\n &.dropdown-toggle {\n border-left: 1px solid darken($color, 5%);\n }\n }\n}\n",".g-colorpicker {\n position: relative;\n border-radius: $core-border-radius;\n max-width: 100%;\n display: flex;\n\n input {\n //width: 100% !important;\n flex-basis: 75%;\n }\n\n i {\n position: absolute;\n top: 15px;\n right: 10px;\n z-index: 2;\n }\n\n .g-colorpicker-preview-wrap {\n cursor: default;\n position: relative;\n border-radius: 3px;\n border: 1px solid #fff;\n margin-left: 5px;\n width: 41px;\n\n }\n\n .g-colorpicker-preview {\n position: absolute;\n top: 0px;\n right: 0px;\n bottom: 0px;\n left: 0px;\n border-radius: 3px;\n }\n}\n\n.cp-sprite {\n background-image: url(data:image/png;base64,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);\n}\n\n/* Panel */\n.cp-wrapper {\n position: absolute;\n width: 173px;\n height: 211px;\n background: white;\n border: solid 1px #CCC;\n box-shadow: 0 0 20px rgba(0, 0, 0, .2);\n z-index: 99999;\n @include box-sizing(content-box);\n display: none;\n}\n\n.cp-wrapper.cp-visible {\n display: block;\n}\n\n/* Panel positioning */\n.cp-position-top .cp-wrapper {\n top: -154px;\n}\n\n.cp-position-right .cp-wrapper {\n right: 0;\n}\n\n.cp-position-bottom .cp-wrapper {\n top: auto;\n}\n\n.cp-position-left .cp-wrapper {\n left: 0;\n}\n\n.cp-with-opacity.cp-wrapper {\n width: 194px;\n}\n\n.cp-wrapper .cp-grid {\n position: absolute;\n top: 1px;\n left: 1px;\n width: 150px;\n height: 150px;\n background-position: -120px 0;\n cursor: crosshair;\n}\n\n.cp-wrapper .cp-grid-inner {\n position: absolute;\n top: 0;\n left: 0;\n width: 150px;\n height: 150px;\n}\n\n.cp-mode-saturation .cp-grid {\n background-position: -420px 0;\n}\n\n.cp-mode-saturation .cp-grid-inner {\n background-position: -270px 0;\n background-image: inherit;\n}\n\n.cp-mode-brightness .cp-grid {\n background-position: -570px 0;\n}\n\n.cp-mode-brightness .cp-grid-inner {\n background-color: black;\n}\n\n.cp-mode-wheel .cp-grid {\n background-position: -720px 0;\n}\n\n.cp-slider,\n.cp-opacity-slider {\n position: absolute;\n top: 1px;\n left: 152px;\n width: 20px;\n height: 150px;\n background-color: white;\n background-position: 0 0;\n cursor: row-resize;\n}\n\n.cp-mode-saturation .cp-slider {\n background-position: -60px 0;\n}\n\n.cp-mode-brightness .cp-slider {\n background-position: -20px 0;\n}\n\n.cp-mode-wheel .cp-slider {\n background-position: -20px 0;\n}\n\n.cp-opacity-slider {\n left: 173px;\n background-position: -40px 0;\n display: none;\n}\n\n.cp-with-opacity .cp-opacity-slider {\n display: block;\n}\n\n/* Pickers */\n.cp-grid .cp-picker {\n position: absolute;\n top: 70px;\n left: 70px;\n width: 12px;\n height: 12px;\n border: solid 1px black;\n border-radius: 10px;\n margin-top: -6px;\n margin-left: -6px;\n background: none;\n}\n\n.cp-grid .cp-picker > div {\n position: absolute;\n top: 0;\n left: 0;\n width: 8px;\n height: 8px;\n border-radius: 8px;\n border: solid 2px white;\n @include box-sizing(content-box);\n}\n\n.cp-picker {\n position: absolute;\n top: 0;\n left: 0;\n width: 18px;\n height: 2px;\n background: white;\n border: solid 1px black;\n margin-top: -2px;\n @include box-sizing(content-box);\n z-index: 2;\n}\n\n/* Tabs */\n.cp-tabs {\n @include box-sizing(border-box);\n position: absolute;\n bottom: 0;\n color: #777;\n left: 0;\n right: 0;\n background: #eee;\n\n > div {\n display: inline-block;\n padding: 6px 0 4px;\n font-family: Helvetica, sans-serif;\n font-size: 11px;\n border-left: 1px solid #ddd;\n width: 48px;\n border-right: 0;\n text-align: center;\n cursor: pointer;\n\n &:first-child {\n border-left: 0;\n }\n\n &.active {\n background-color: #fff;\n }\n\n &.cp-tab-transp {\n width: 100%;\n border-top: 1px solid #ddd;\n }\n }\n}\n\n/* Default theme */\n.cp-theme-default.cp-wrapper {\n width: auto;\n display: inline-block;\n}\n\n.cp-theme-default .cp-input {\n height: 20px;\n width: auto;\n display: inline-block;\n padding-left: 26px;\n}\n\n.cp-theme-default.cp-position-right .cp-input {\n padding-right: 26px;\n padding-left: inherit;\n}\n\n.input-group .cp-theme-bootstrap:not(:first-child) .cp-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.g-colorpicker-preview-wrap {\n background-image: url(data:image/jpeg;base64,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);\n}\n",".datetime-picker-wrapper {\n position: relative;\n input {\n padding-right: 2.5rem;\n }\n\n .field-icons {\n position: absolute;\n top: 0;\n right: 10px;\n bottom: 0;\n line-height: 2.5rem;\n }\n}\n\n.collapse {\n display: none;\n &.in {\n display: block;\n }\n\n tr &.in {\n display: table-row;\n }\n\n tbody &.in {\n display: table-row-group;\n }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n @include transition(height .35s ease, visibility .35s ease);\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n/* Bootstrap variables styling */\n.bootstrap-datetimepicker-widget {\n &.dropdown-menu {\n position: absolute;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, .15);\n border-radius: 4px;\n box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n }\n\n .list-unstyled {\n padding-left: 0;\n list-style: none;\n }\n\n .collapse {\n display: none;\n visibility: hidden;\n\n &.in {\n display: block;\n visibility: visible;\n }\n }\n\n .datepicker-years .picker-switch {\n cursor: default !important;\n background: inherit !important;\n }\n\n .table-condensed > thead > tr > th {\n padding: 5px;\n }\n\n table {\n display: table;\n\n thead {\n display: table-header-group;\n }\n\n tbody {\n display: table-row-group;\n }\n\n tr {\n display: table-row;\n\n &:hover {\n background: inherit;\n }\n\n th, td {\n border: 0;\n display: table-cell;\n &:first-child {\n padding-left: inherit;\n }\n\n &:last-child {\n padding-right: inherit;\n }\n }\n }\n }\n}\n\n\n\n/*!\n * Datetimepicker for Bootstrap 3\n * ! version : 4.7.14\n * https://github.com/Eonasdan/bootstrap-datetimepicker/\n */\n$bs-datetimepicker-timepicker-font-size: 1.2em !default;\n$bs-datetimepicker-active-bg: white !default;\n$bs-datetimepicker-active-color: blue !default;\n$bs-datetimepicker-border-radius: 3px !default;\n$bs-datetimepicker-btn-hover-bg: #ddd !default;\n$bs-datetimepicker-disabled-color: #ccc !default;\n$bs-datetimepicker-alternate-color: #ccc !default;\n$bs-datetimepicker-secondary-border-color: #ccc !default;\n$bs-datetimepicker-secondary-border-color-rgba: rgba(0, 0, 0, 0.2) !default;\n$bs-datetimepicker-primary-border-color: white !default;\n$bs-datetimepicker-text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25) !default;\n\n.bootstrap-datetimepicker-widget {\n list-style: none;\n\n &.dropdown-menu {\n margin: 2px 0;\n padding: 4px;\n width: 19em;\n\n &.timepicker-sbs {\n @media (min-width: 768px) {\n width: 38em;\n }\n\n @media (min-width: 992px) {\n width: 38em;\n }\n\n @media (min-width: 1200px) {\n width: 38em;\n }\n }\n\n &:before, &:after {\n content: '';\n display: inline-block;\n position: absolute;\n }\n\n &.bottom {\n &:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-bottom: 7px solid $bs-datetimepicker-secondary-border-color;\n border-bottom-color: $bs-datetimepicker-secondary-border-color-rgba;\n top: -7px;\n left: 7px;\n }\n\n &:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid $bs-datetimepicker-primary-border-color;\n top: -6px;\n left: 8px;\n }\n }\n\n &.top {\n &:before {\n border-left: 7px solid transparent;\n border-right: 7px solid transparent;\n border-top: 7px solid $bs-datetimepicker-secondary-border-color;\n border-top-color: $bs-datetimepicker-secondary-border-color-rgba;\n bottom: -7px;\n left: 6px;\n }\n\n &:after {\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid $bs-datetimepicker-primary-border-color;\n bottom: -6px;\n left: 7px;\n }\n }\n\n &.pull-right {\n &:before {\n left: auto;\n right: 6px;\n }\n\n &:after {\n left: auto;\n right: 7px;\n }\n }\n }\n\n .list-unstyled {\n margin: 0;\n }\n\n a[data-action] {\n padding: 6px 0;\n }\n\n a[data-action]:active {\n box-shadow: none;\n }\n\n .timepicker-hour, .timepicker-minute, .timepicker-second {\n width: 54px;\n font-weight: bold;\n font-size: $bs-datetimepicker-timepicker-font-size;\n margin: 0;\n }\n\n button[data-action] {\n padding: 6px;\n }\n\n .btn[data-action=\"incrementHours\"]::after {\n @extend .sr-only;\n content: \"Increment Hours\";\n }\n\n .btn[data-action=\"incrementMinutes\"]::after {\n @extend .sr-only;\n content: \"Increment Minutes\";\n }\n\n .btn[data-action=\"decrementHours\"]::after {\n @extend .sr-only;\n content: \"Decrement Hours\";\n }\n\n .btn[data-action=\"decrementMinutes\"]::after {\n @extend .sr-only;\n content: \"Decrement Minutes\";\n }\n\n .btn[data-action=\"showHours\"]::after {\n @extend .sr-only;\n content: \"Show Hours\";\n }\n\n .btn[data-action=\"showMinutes\"]::after {\n @extend .sr-only;\n content: \"Show Minutes\";\n }\n\n .btn[data-action=\"togglePeriod\"]::after {\n @extend .sr-only;\n content: \"Toggle AM/PM\";\n }\n\n .btn[data-action=\"clear\"]::after {\n @extend .sr-only;\n content: \"Clear the picker\";\n }\n\n .btn[data-action=\"today\"]::after {\n @extend .sr-only;\n content: \"Set the date to today\";\n }\n\n .picker-switch {\n text-align: center;\n\n &::after {\n @extend .sr-only;\n content: \"Toggle Date and Time Screens\";\n }\n\n td {\n padding: 0;\n margin: 0;\n height: auto;\n width: auto;\n line-height: inherit;\n\n span {\n line-height: 2.5;\n height: 2.5em;\n width: 100%;\n }\n }\n }\n\n table {\n width: 100%;\n margin: 0;\n\n\n & td,\n & th {\n text-align: center;\n border-radius: $bs-datetimepicker-border-radius;\n }\n\n & th {\n height: 29px;\n line-height: 29px;\n width: 29px;\n\n &.picker-switch {\n width: 145px;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n\n &.prev::after {\n @extend .sr-only;\n content: \"Previous Month\";\n }\n\n &.next::after {\n @extend .sr-only;\n content: \"Next Month\";\n }\n }\n\n & thead tr:first-child th {\n cursor: pointer;\n\n &:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n }\n }\n\n & td {\n height: 54px;\n line-height: 54px;\n width: 54px;\n\n &.cw {\n font-size: .8em;\n height: 20px;\n line-height: 20px;\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.day {\n height: 29px;\n line-height: 29px;\n width: 29px;\n }\n\n &.day:hover,\n &.hour:hover,\n &.minute:hover,\n &.second:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n cursor: pointer;\n }\n\n &.old,\n &.new {\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.today {\n position: relative;\n\n &:before {\n content: '';\n display: inline-block;\n border: 0 0 7px 7px solid transparent;\n border-bottom-color: $bs-datetimepicker-active-bg;\n border-top-color: $bs-datetimepicker-secondary-border-color-rgba;\n position: absolute;\n bottom: 4px;\n right: 4px;\n }\n }\n\n &.active,\n &.active:hover {\n background-color: $bs-datetimepicker-active-bg;\n color: $bs-datetimepicker-active-color;\n text-shadow: $bs-datetimepicker-text-shadow;\n }\n\n &.active.today:before {\n border-bottom-color: #fff;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n\n span {\n display: inline-block;\n width: 54px;\n height: 54px;\n line-height: 54px;\n margin: 2px 1.5px;\n cursor: pointer;\n border-radius: $bs-datetimepicker-border-radius;\n\n &:hover {\n background: $bs-datetimepicker-btn-hover-bg;\n }\n\n &.active {\n background-color: $bs-datetimepicker-active-bg;\n color: $bs-datetimepicker-active-color;\n text-shadow: $bs-datetimepicker-text-shadow;\n }\n\n &.old {\n color: $bs-datetimepicker-alternate-color;\n }\n\n &.disabled,\n &.disabled:hover {\n background: none;\n color: $bs-datetimepicker-disabled-color;\n cursor: not-allowed;\n }\n }\n }\n }\n\n &.usetwentyfour {\n td.hour {\n height: 27px;\n line-height: 27px;\n }\n }\n}\n\n.input-group.date {\n & .input-group-addon {\n cursor: pointer;\n }\n}\n",".fjs-container {\n display: flex;\n font-size: .9em;\n min-height: 400px;\n overflow: auto;\n overflow-x: scroll;\n\n &:focus {\n outline: none;\n }\n\n .fjs-col {\n border-right: solid 1px lightgray;\n max-height: 600px;\n min-height: inherit;\n min-width: 200px;\n overflow-y: auto;\n }\n\n .fjs-item a {\n color: black;\n justify-content: space-between;\n padding: 5px;\n text-decoration: none;\n display: flex;\n align-items: center;\n }\n\n .fjs-item a:focus {\n outline: none;\n }\n\n .fjs-item a span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .fjs-item a span i {\n padding-right: 5px;\n }\n\n //.fjs-active a {\n // background-color: #DEDEDE;\n //}\n //\n //.fjs-col:nth-last-child(2) .fjs-active a,\n //.fjs-col:last-child .fjs-active a {\n // background-color: dodgerblue;\n // color: white;\n //}\n\n .info-container {\n display: flex;\n align-items: center;\n }\n\n .fjs-list {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .fjs-item-content {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .fa-caret-right {\n //color: gray;\n padding: 0 0 0 .5em;\n }\n\n .fjs-col:nth-last-child(2) .fjs-active a .fa-caret-right,\n .fjs-col:last-child .fjs-active a .fa-caret-right {\n //color: white;\n }\n\n .leaf-col {\n align-items: center;\n border-right: 0;\n display: flex;\n flex: 2;\n justify-content: center;\n padding: 0 1.5em;\n }\n\n .leaf-row {\n display: flex;\n flex-direction: column;\n font-size: 1.3em;\n text-align: center;\n }\n\n .leaf-row .fa {\n //color: #A7A7A7;\n font-size: 4em;\n margin: 20px 0;\n }\n\n .leaf-row .fa-refresh {\n font-size: 2em;\n }\n\n .leaf-col .meta {\n font-size: .7em;\n }\n\n .leaf-col .meta strong {\n //color: #C1C1C1;\n font-weight: normal;\n }\n\n .leaf-col .meta:first-of-type {\n margin-top: 1.5em;\n }\n}\n\n.fjs-path-bar {\n font-size: 0.9em;\n padding: .25rem .5rem;\n //background: #f6f6f6;\n //border-bottom: 1px solid #eee;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n\n [data-breadcrumb-node] {\n cursor: pointer;\n\n &:hover {\n span {\n text-decoration: underline;\n }\n }\n }\n\n .fa-chevron-right {\n font-size: .8em;\n }\n}\n\n[data-parents-field-name] {\n font-weight: bold;\n}\n\n.fjs-container, .fjs-path-bar {\n .fa-folder {\n color: #90E4FF;\n }\n\n .fa-file-o {\n color: #A7A7A7;\n }\n\n .fa-external-link {\n color: #629EFF;\n font-size: smaller;\n }\n}\n",".switch-toggle {\n display: inline-block;\n display: inline-flex;\n overflow: hidden;\n border-radius: $form-border-radius;\n line-height: 35px;\n\n input[type=radio] {\n position: absolute;\n visibility: hidden;\n display: none;\n }\n\n label {\n display: inline-block;\n cursor: pointer;\n padding: 0 15px;\n white-space: nowrap;\n }\n}\n","// +-------------------------------------------------------------------------+\n// | Flat Colors |\n// +-------------------------------------------------------------------------+\n\n// Greens\n$color-navy: #001f3f;\n$color-blue: #0074D9;\n$color-aqua: #7FDBFF;\n$color-teal: #39CCCC;\n$color-olive: #3D9970;\n$color-green: #2ECC40;\n$color-lime: #01FF70;\n$color-yellow: #FFDC00;\n$color-orange: #FF851B;\n$color-red: #FF4136;\n$color-maroon: #85144b;\n$color-fuchsia: #F012BE;\n$color-purple: #B10DC9;\n\n// +-------------------------------------------------------------------------+\n// | Flat UI |\n// +-------------------------------------------------------------------------+\n\n// Greens\n$flat-turquoise: #1ABC9C;\n$flat-green-sea: #16A085;\n$flat-emerald: #2ECC71;\n$flat-nephritis: #27AE60;\n\n// Blues\n$flat-peter-river: #3498DB;\n$flat-belize-hole: #2980B9;\n$flat-wet-asphalt: #34495E;\n$flat-midnight-blue: #2C3E50;\n\n// Purples\n$flat-amethyst: #9B59B6;\n$flat-wisteria: #8E44AD;\n\n// Yellows\n$flat-sunflower: #F1C40F;\n\n// Oranges\n$flat-orange: #F39C12;\n$flat-carrot: #E67E22;\n$flat-pumpkin: #D35400;\n\n// Reds\n$flat-alizarin: #E74C3C;\n$flat-pomegranate: #C0392B;\n\n// Grays\n$flat-clouds: #ECF0F1;\n$flat-silver: #BDC3C7;\n$flat-concrete: #95A5A6;\n$flat-asbestos: #7F8C8D;\n\n// Aliases make colors easier to remember.\n\n// Greens\n$flat-green-1: $flat-turquoise;\n$flat-green-2: $flat-green-sea;\n$flat-green-3: $flat-emerald;\n$flat-green-4: $flat-nephritis;\n\n// Blues\n$flat-blue-1: $flat-peter-river;\n$flat-blue-2: $flat-belize-hole;\n$flat-blue-3: $flat-wet-asphalt;\n$flat-blue-4: $flat-midnight-blue;\n\n// Purples\n$flat-purple-1: $flat-amethyst;\n$flat-purple-2: $flat-wisteria;\n\n// Yellows\n$flat-yellow-1: $flat-sunflower;\n\n// Oranges\n$flat-orange-1: $flat-orange;\n$flat-orange-2: $flat-carrot;\n$flat-orange-3: $flat-pumpkin;\n\n// Refs\n$flat-red-1: $flat-alizarin;\n$flat-red-2: $flat-pomegranate;\n\n// Grays\n$flat-gray-1: $flat-clouds;\n$flat-gray-2: $flat-silver;\n$flat-gray-3: $flat-concrete;\n$flat-gray-4: $flat-asbestos;\n\n","html, body {\n\theight: 100%;\n}\n\nbody {\n\t-webkit-font-smoothing: antialiased;\n \t-moz-osx-font-smoothing: grayscale;\n overflow: hidden;\n}\n\nb, strong {\n\tfont-weight: $font-weight-bold\n}\n\n.bigger {\n font-size: 1.2rem;\n\n}\n\n.button-bar {\n text-align: right;\n float: right;\n z-index: 0;\n}\n\n.alert {\n font-size: 1rem;\n padding: 0.5rem $padding-default;\n position: relative;\n\n @include breakpoint(mobile-only) {\n padding: 0.5rem 1rem;\n }\n}\n\n.badge {\n display: inline-block;\n font-size: 0.8rem;\n font-weight: 500;\n border-radius: 10px;\n padding: 0px 6px;\n min-width: 20px;\n line-height: 20px;\n text-align: center;\n}\n\n.empty-state {\n margin: 0 auto;\n text-align: center;\n padding-top: 100px;\n}\n",".default-animation {\n @include transition(all 0.5s ease);\n}\n\n// Pulse Animation\n.pulse {\n\tanimation-name: pulse_animation;\n\tanimation-duration: 2000ms;\n\ttransform-origin:70% 70%;\n\tanimation-iteration-count: infinite;\n\tanimation-timing-function: linear;\n}\n\n@keyframes pulse_animation {\n\t0% { transform: scale(1); }\n\t30% { transform: scale(1); }\n\t40% { transform: scale(1.08); }\n\t50% { transform: scale(1); }\n\t60% { transform: scale(1); }\n\t70% { transform: scale(1.05); }\n\t80% { transform: scale(1); }\n\t100% { transform: scale(1); }\n}\n\n.default-border-radius {\n border-radius: 4px;\n}\n\n.default-glow-shadow {\n box-shadow: 0 0 20px rgba(0,0,0,0.2);\n}\n\n.default-box-shadow {\n box-shadow: 0 0 10px 2px rgba(0,0,0,0.03);\n}\n\n.login-box-shadow {\n\tbox-shadow: 0 10px 100px 0px rgba(0,0,0,0.4);\n}\n\n.padding-horiz {\n\tpadding-left: $padding-horiz;\n\tpadding-right: $padding-horiz;\n\t@include breakpoint(desktop-only) {\n\t\tpadding-left: $padding-horiz - 3rem;\n\t\tpadding-right: $padding-horiz - 3rem;\n\t}\n\n\t@include breakpoint(mobile-only) {\n\t\tpadding-left: $padding-horiz - 6rem;\n\t\tpadding-right: $padding-horiz - 6rem;\n\t}\n}\n\n.padding-vert {\n\tpadding-top: $padding-vert;\n\tpadding-bottom: $padding-vert;\n}\n",".pointer-events-none {\n pointer-events: none;\n}\n\n@include breakpoint(mobile-only) {\n .hidden-mobile {\n display: none!important;\n }\n}\n","// Header styling\n\n\n","// Body Base\nbody {\n\tfont-weight: 400;\n @include breakpoint(mobile-only) {\n font-size: 0.8rem;\n }\n}\n\n// Headings\nh1, h2, h3, h4, h5, h6 {\n\tfont-weight: 400;\n\ttext-rendering: optimizeLegibility;\n\tletter-spacing: -0px;\n}\n\nh1 {\n\tfont-size: $h1-font-size;\n @include breakpoint(mobile-only) {\n font-size: 2.5rem;\n line-height: 1.2;\n margin-bottom: 2.5rem;\n }\n}\n\nh2 {\n\t@include breakpoint(tablet-range) {\n\t\tfont-size: $h2-font-size - .40;\n\t}\n\t@include breakpoint(mobile-only) {\n\t\tfont-size: $h2-font-size - .50;\n\t}\n}\n\nh3 {\n\t@include breakpoint(tablet-range) {\n\t\tfont-size: $h3-font-size - .40;\n\t}\n\t@include breakpoint(mobile-only) {\n\t\tfont-size: $h3-font-size - .50;\n\t}\n}\n\nh4 {\n\t@include breakpoint(tablet-range) {\n\t\tfont-size: $h4-font-size - .40;\n\t}\n\t@include breakpoint(mobile-only) {\n\t\tfont-size: $h4-font-size - .50;\n\t}\n}\n\nh1 {\n\tletter-spacing: -3px;\n}\n\nh2 {\n\tletter-spacing: -2px;\n}\n\nh3 {\n\tletter-spacing: -1px;\n}\n\n// Icon Tweaks\ni.fa {\n\t&.fa-heart, &.fa-heart-o {\n\t\t&.pulse {\n\t\t\tcolor: #920\n\t\t}\n\t}\n}\n\ncode {\n vertical-align: inherit;\n}\n\npre {\n\tpadding: 2rem;\n\tborder-radius: 3px;\n\tcode {\n\t\tbackground: inherit;\n\t}\n}\n\n// Label\n.label {\n vertical-align: middle;\n border-radius: 100%;\n height: 1rem;\n min-width: 1rem;\n line-height: 1rem;\n display: inline-block;\n text-align: center;\n font-size: $core-font-size - 0.3rem;\n margin-right: 0.75rem;\n}\n\n// Display RESET\nform {\n .form-display-wrapper {\n h1 {\n padding: 0 !important;\n font-size: 1.7rem !important;\n border-bottom-width: 2px !important;\n }\n\n h2 {\n padding: 0 !important;\n font-size: 1.5rem !important;\n border-bottom-width: 1px !important;\n }\n\n h3 {\n padding: 0 !important;\n font-size: 1.3rem !important;\n border-bottom-width: 1px !important;\n }\n\n h4 {\n padding: 0 !important;\n font-size: 1.1rem !important;\n }\n\n blockquote {\n padding: 15px;\n p {\n font-size: 0.9rem;\n color: inherit;\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n code, pre {\n font-size: 0.8rem;\n }\n\n table {\n border-collapse: collapse;\n width: 100%;\n\n th {\n padding: 10px !important;\n &:last-child {\n border-right: none;\n }\n }\n\n td {\n padding: 10px !important;\n &:last-child {\n border-right: none;\n }\n }\n\n tr {\n &:last-child {\n border-bottom: none;\n }\n }\n }\n }\n\n}\n\n","// Forms\nform {\n\n h1, h3, .form-spacer h3 {\n padding: 0 $padding-default 0.5rem;\n margin: 0 0 1rem;\n font-size: 1.5rem;\n text-align: left;\n letter-spacing: -1px;\n }\n\n h3 {\n padding-left: 0;\n }\n\n p {\n padding: 0 $padding-default;\n }\n\n pre {\n padding: 1.5rem 3rem;\n }\n\n .nowrap {\n white-space: nowrap;\n }\n\n .form-description {\n p {\n padding: 0;\n }\n }\n\n .button {\n @include breakpoint(mobile-only) {\n padding: 0.25rem 0.5rem;\n }\n }\n\n .form-field {\n margin-bottom: 1rem;\n padding-left: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-left: 1rem;\n }\n\n\n\n .file-thumbnail-wrapper {\n display: inline-block;\n position: relative;\n }\n\n .file-thumbnail {\n max-height: 150px;\n vertical-align: top;\n display: inline-block;\n margin-bottom: 10px;\n }\n\n .file-thumbnail-remove {\n position: absolute;\n text-align: center;\n display: block;\n top: 3px;\n right: 3px;\n width: 25px;\n height: 25px;\n border-radius:100%;\n\n .fa {\n font-size: 20px;\n line-height: 25px;\n vertical-align: top;\n }\n }\n }\n\n .form-data {\n padding-right: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-right: 1rem;\n }\n }\n\n .form-input-addon-wrapper {\n display: flex;\n\n .form-input-addon {\n display: flex;\n padding: 0 5px;\n justify-content: center;\n align-items: center;\n\n &.copy-to-clipboard {\n cursor: pointer;\n }\n }\n input {\n height: 35px;\n display: table-cell;\n }\n .form-input-prepend {\n border-radius: 4px 0 0 4px;\n border-right-width: 0 !important;\n\n }\n .form-input-append {\n border-radius: 0 4px 4px 0;\n border-left-width: 0 !important;\n }\n\n input:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n input:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n .overlay {\n padding-top: 1rem;\n padding-bottom: 1px;\n\n &.bottom {\n margin: 2rem auto -2rem auto;\n }\n }\n\n .required {\n display: inline-block;\n font-family: helvetica, arial, sans-serif;\n vertical-align: middle;\n line-height: 0;\n font-size: 30px;\n margin-left: 0px;\n margin-bottom: -5px;\n }\n\n label {\n padding: 5px 0;\n font-weight: 400;\n margin:0;\n\n p {\n margin: 0;\n }\n\n [data-hint] {\n display: inline;\n }\n\n &.inline {\n display: inline;\n vertical-align: middle;\n margin-right: 15px;\n }\n\n &.toggleable {\n display: inline;\n }\n }\n\n .form-sublabel {\n p {\n opacity: 0.8;\n font-size: 0.9rem;\n margin: 10px 20px 0 0;\n padding: 0;\n }\n }\n\n input, select, textarea, button, .selectize-input {\n font-size: $core-font-size;\n line-height: $core-line-height;\n border-radius: $form-border-radius;\n -webkit-font-smoothing: antialiased;\n }\n\n .form-input-file {\n\n position: relative;\n min-height: 70px;\n border-radius: $form-border-radius;\n\n ul {\n margin: 1rem 0;\n text-align: left;\n font-size: 1rem;\n border-radius: $form-border-radius;\n }\n\n p {\n display: block;\n height: 100%;\n text-align: center;\n margin: 0;\n padding: 0.8rem 1rem 0;\n font-size: 1.2rem;\n }\n\n input {\n display: none;\n }\n }\n\n\n .selectize-dropdown {\n z-index: 100000;\n }\n\n // vertical alignment of forms\n .grid.vertical {\n @include flex-flow(column);\n }\n\n // compact\n .compact {\n .form-field {\n margin-bottom: 0.2rem;\n }\n\n .form-list-wrapper {\n li {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .form-field {\n width: 50%;\n\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n }\n }\n }\n }\n\n .form-select-wrapper, .selectize-control.single .selectize-input {\n position: relative;\n\n &:after {\n margin-top: 0;\n border: 0;\n position: absolute;\n content: '\\f078';\n font-family: 'FontAwesome';\n right: 12px;\n top: 50%;\n line-height: 0;\n pointer-events: none;\n }\n }\n\n .selectize-input {\n display: block !important;\n box-shadow: none;\n padding: $form-select-pad;\n margin: 0;\n\n > input {\n font-size: $core-font-size;\n line-height: $core-line-height;\n }\n }\n\n .selectize-control.single.plugin-remove_button .selectize-input {\n .item, .remove-single {\n cursor: pointer;\n margin: 0 3px 3px 0;\n padding: 2px 6px;\n display: inline-block;\n border-radius: 2px 0 0 2px !important;\n }\n .remove-single {\n border-radius: 0 2px 2px 0 !important;\n margin-left: -2px;\n }\n }\n\n .selectize-control.single.plugin-remove_button .selectize-input,\n .selectize-control.multi .selectize-input {\n padding: ($leading-margin / 4) ($leading-margin / 4);\n\n &.has-items {\n padding-top: 6px;\n padding-bottom: 4px;\n }\n\n .item, .remove-single {\n border-radius: 2px;\n line-height: 1.5;\n }\n\n .item > img {\n max-height: 20px !important;\n max-width: inherit !important;\n }\n }\n\n .selectize-control.single .selectize-input {\n\n &:after {\n right: 27px;\n }\n &.dropdown-active {\n &:after {\n content: '\\f077';\n }\n }\n }\n\n .x-small {\n max-width: 5rem !important;\n\n &.form-input-addon-wrapper {\n max-width: inherit !important;\n input {\n max-width: 5rem !important;\n }\n }\n }\n\n .small {\n max-width: 10rem !important;\n\n &.form-input-addon-wrapper {\n max-width: inherit !important;\n input {\n max-width: 10rem !important;\n }\n }\n }\n\n .medium:not(.switch-toggle), .medium.form-input-addon-wrapper input {\n max-width: 20rem;\n textarea {\n height: 7rem;\n }\n\n &[data-grav-array-type=\"container\"] {\n max-width: 100% !important;\n input[type=text] {\n width: calc(70% - 110px);\n }\n }\n }\n\n .large, .large.form-input-addon-wrapper input {\n max-width: 30rem !important;\n\n textarea {\n height: 10rem;\n }\n\n &[data-grav-array-type=\"container\"] {\n max-width: 100% !important;\n input[type=text] {\n width: calc(100% - 110px);\n }\n }\n }\n\n select {\n width: 100%;\n -webkit-appearance:none;\n -moz-appearance:none;\n appearance:none;\n padding: $form-select-pad;\n cursor: pointer;\n margin: 0;\n }\n\n input[type=text],\n input[type=password],\n input[type=email],\n input[type=date],\n input[type=tel],\n input[type=time],\n input[type=week],\n input[type=month],\n input[type=number],\n input[type=color],\n input[type=url] {\n width: 100%;\n }\n\n textarea {\n width: 100%;\n }\n\n .form-frontmatter-wrapper {\n border-radius: $form-border-radius;\n }\n\n .switch-toggle {\n label {\n cursor: pointer;\n }\n\n a,label {\n outline: none !important;\n }\n }\n\n .dynfields, [data-grav-field=\"array\"], [data-grav-field=\"multilevel\"] {\n\n input[type=text] {\n width: 40%;\n float: left;\n margin: 0 5px 5px 0;\n }\n\n .form-row {\n display: inline-block;\n width: 100%;\n margin-right: 0;\n max-width: 100% !important;\n\n span {\n padding: 0.5rem;\n display: inline-block;\n line-height: 1.5;\n cursor: pointer;\n\n &[data-grav-array-action=\"sort\"] {\n float: left;\n cursor: move;\n }\n }\n\n &.array-field-value_only {\n width: 100%;\n }\n }\n }\n\n [data-grav-field=\"multilevel\"] input:disabled {\n background-color: lightgray;\n }\n\n [data-grav-array-type=\"container\"].one-child {\n [data-grav-array-action=\"sort\"] {\n display: none;\n }\n }\n\n .button-bar {\n margin-top: 1rem;\n padding: 1.2rem 3rem;\n width: 100%;\n border-bottom-left-radius: 5px;\n border-bottom-right-radius: 5px;\n }\n\n .checkboxes {\n display: inline-block;\n padding: 5px 0;\n\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n\n label {\n display: inline;\n cursor: pointer;\n position: relative;\n padding: 0 0 0 2rem;\n margin-right: 15px;\n\n }\n label:before {\n content:\"\";\n display: inline-block;\n width: 1.5rem;\n height: 1.5rem;\n top: 50%;\n left: 0;\n margin-top: -0.75rem;\n margin-right: 10px;\n position: absolute;\n border-radius: $form-border-radius;\n }\n input[type=checkbox] {\n display: none;\n }\n input[type=checkbox]:checked + label:before {\n content:\"\\f00c\";\n font-family: \"FontAwesome\", sans-serif;\n font-size: 1.2rem;\n line-height: 1;\n text-align: center;\n }\n\n &.toggleable label{\n margin-right: 0;\n }\n }\n}\n\n// Display\n.form-display-wrapper {\n p {\n padding-left: 0;\n padding-right: 0;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n// Frontmatter Field\ndiv.frontmatter {\n margin-bottom: 3rem;\n}\n\n// parents\n[data-grav-field=\"parents\"] {\n\n .form-input-wrapper {\n cursor: pointer;\n\n i {\n margin-right: .25rem;\n }\n }\n}\n\n[data-remodal-id].parents-container {\n form {\n overflow: hidden;\n }\n\n form > h1 {\n margin-bottom: 0;\n border-bottom: 1px solid #eee;\n }\n form > .button-bar {\n margin-top: 0;\n }\n\n .fjs-list {\n overflow: auto;\n overflow-y: scroll;\n max-height: 400px;\n min-height: 100%;\n }\n\n .fjs-item {\n margin-left: 0;\n list-style-type: none;\n text-align: left;\n }\n\n .parents-content:empty {\n display: none;\n }\n}\n\ntextarea.frontmatter {\n height: 130px !important;\n\n & + .CodeMirror {\n height: 130px;\n }\n}\n\n// parents\n[data-grav-field=\"parents\"] {\n\n .form-input-wrapper {\n cursor: pointer;\n\n i {\n margin-right: .25rem;\n }\n }\n}\n\n[data-remodal-id].parents-container {\n form {\n overflow: hidden;\n }\n\n form > h1 {\n margin-bottom: 0;\n border-bottom: 1px solid #eee;\n }\n form > .button-bar {\n margin-top: 0;\n }\n\n .fjs-list {\n overflow: auto;\n overflow-y: scroll;\n max-height: 400px;\n min-height: 100%;\n }\n\n .fjs-item {\n margin-left: 0;\n list-style-type: none;\n text-align: left;\n }\n\n .parents-content:empty {\n display: none;\n }\n}\n\n// Sortables\n.form-order-wrapper {\n\n .notice {\n padding: 5px;\n }\n\n ul.orderable {\n\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n padding: 0.2rem 1rem;\n border-radius: $form-border-radius;\n margin: 3px 0;\n position: relative;\n\n &.drag-handle {\n cursor: move;\n &::after {\n content: '\\f0c9';\n font-family: FontAwesome;\n position: absolute;\n right: 10px;\n }\n }\n\n i {\n font-size: 0.8rem;\n }\n }\n }\n}\n\n// Sortables\n.form-list-wrapper {\n ul[data-collection-holder] {\n\n list-style: none;\n margin: 0;\n padding: 0;\n\n > li {\n padding: 1rem;\n border-radius: $form-border-radius;\n margin: 3px 0;\n position: relative;\n\n .item-actions {\n position: absolute;\n right: 10px;\n top: 4px;\n\n .fa {\n cursor: pointer;\n }\n }\n\n &.collection-collapsed {\n height: 70px;\n overflow: hidden;\n @include transform(translateZ(0));\n\n @include breakpoint(mobile-only) {\n height: 120px;\n }\n }\n }\n\n &[data-collection-nosort] > li {\n cursor: default;\n }\n }\n\n .collection-actions {\n text-align: right;\n }\n\n .collection-sort {\n position: absolute;\n top: 0;\n left: 0;\n width: 32px;\n bottom: 0;\n cursor: move;\n\n @include breakpoint(mobile-only) {\n width: 20px;\n\n .fa {\n font-size: 0.8rem;\n }\n }\n\n .fa {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n [data-collection-nosort] .collection-sort {\n display: none;\n }\n}\n\n.form-label.block {\n position: relative;\n\n &:hover {\n z-index: 2;\n }\n label {\n z-index: 2;\n }\n}\n\n// Fieldset\n#admin-main .admin-block h2 {\n font-size: 1.25rem;\n margin: 0 0 .5rem;\n\n letter-spacing: normal;\n}\n.form-fieldset {\n margin: 1rem 1.5rem;\n}\n\n.form-fieldset--label {\n label {\n display: table;\n font-size: 1.25rem;\n padding: .5rem 1rem;\n width: 100%;\n }\n\n h2 {\n margin: 0 !important;\n }\n\n .actions {\n font-size: initial;\n display: table-cell;\n text-align: right;\n vertical-align: middle;\n }\n\n & + .form-data {\n margin-top: 1rem;\n padding: 0;\n }\n}\n.form-fieldset--cursor {\n cursor: pointer;\n}\n.form-fieldset--info {\n font-size: small;\n}\n.form-fieldset > input:checked ~ .form-data,\n.form-fieldset--collapsible .open,\n.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .close {\n display: block;\n}\n.form-fieldset > .form-data,\n.form-fieldset--collapsible .close,\n.form-fieldset input:checked ~ .form-label .form-fieldset--collapsible .open {\n display: none;\n}\n\n.filepicker-field-image {\n width: 30px;\n vertical-align: middle;\n margin-right: 5px;\n}\n\n.filepicker-field-name {\n vertical-align: middle;\n}\n\n.permissions-container {\n .permission-value {\n width: 50%;\n float: left;\n margin: 0 5px 5px 0;\n height: 39px;\n }\n\n .switch-toggle {\n line-height: 37px;\n margin: 0 5px 5px 0;\n\n }\n\n .crudp-container {\n display: flex;\n\n .checkboxes.toggleable {\n\n display: block;\n\n label {\n display: inline-flex;\n padding: inherit;\n\n padding-left: 1.5rem;\n padding-right: 0.5rem;\n font-weight: bold;\n\n\n border-top-width: 1px;\n border-bottom-width: 1px;\n border-right-width: 1px;\n border-left-width: 0;\n border-style: solid;\n\n &:before {\n border: none;\n background: none;\n }\n\n }\n\n & input[type=checkbox] + label:before {\n content:\"\\f023\";\n font-family: \"FontAwesome\";\n font-size: 0.8rem;\n line-height: 1.8;\n text-align: center;\n }\n\n\n &[data-_check-status=\"1\"] input[type=checkbox] + label:before {\n content:\"\\f00c\";\n font-family: \"FontAwesome\";\n }\n\n &[data-_check-status=\"2\"] input[type=checkbox] + label:before {\n content:\"\\f05e\";\n }\n }\n\n & > div:first-child {\n .checkboxes.toggleable {\n label {\n border-left-width: 1px;\n border-radius: $form-border-radius 0 0 $form-border-radius;\n }\n }\n }\n\n & > div:last-of-type {\n .checkboxes.toggleable {\n label {\n border-right-width: 1px;\n border-radius: 0 $form-border-radius $form-border-radius 0;\n }\n }\n }\n }\n}\n\n[data-grav-field=\"cron\"] {\n display: flex;\n align-items: center;\n}\n\n.cron-install {\n\n margin: 1rem;\n padding: 0;\n border-radius: 4px;\n\n form & pre {\n padding: 1rem;\n margin: 0 1.5rem;\n line-height: 1;\n }\n .setup-status {\n font-weight: bold;\n }\n}\n\n.cron-status, .backups-history {\n\n margin-bottom: 4rem;\n\n .cron-at code {\n font-size: 120%;\n padding: 2px 10px;\n border-radius: 2px;\n }\n\n .badge {\n white-space: nowrap;\n }\n\n tr {\n\n &.deleting {\n background: #efefef;\n color: #bbb;\n text-shadow: 0 1px white;\n\n button, .button {\n background: #777;\n pointer-events: none;\n }\n }\n }\n}\n\nform .cron-job-list, form .backups-list {\n li {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .form-field.grid {\n width: calc(50% - 5px);\n\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n }\n}\n","table,\ntbody,\nthead {\n display: inline-block;\n width: 100%;\n}\n\n.gpm-details {\n width: 100%;\n @include flex(auto);\n}\n\ntd {\n border: 0;\n}\n\ntr {\n @include transition(all 0.2s ease);\n\n @include display(flex);\n @include flex-wrap(wrap);\n @include align-items(center);\n\n th, td {\n display: block;\n @include flex(1);\n\n &.shrink {\n @include flex(0);\n }\n\n &.double {\n @include flex(2);\n }\n\n &.triple {\n @include flex(3);\n }\n\n &.quadruple {\n @include flex(4);\n }\n\n &.quintuple {\n @include flex(5);\n }\n\n &.sextuple {\n @include flex(6);\n }\n\n &.septuple {\n @include flex(7);\n }\n\n &.octuple {\n @include flex(8);\n }\n\n &.nontuple {\n @include flex(9);\n }\n\n &.dectuple {\n @include flex(10);\n }\n\n &:first-child {\n padding-left: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-left: 1rem;\n }\n }\n\n &:last-child {\n padding-right: $padding-default;\n\n @include breakpoint(mobile-only) {\n padding-right: 1rem;\n }\n }\n\n &.left {\n text-align: left;\n }\n\n &.center {\n text-align: center;\n }\n\n &.right {\n text-align: right;\n }\n\n &.right.pad {\n padding-right: $padding-default;\n .form-data {\n padding-right: 0;\n }\n }\n\n &.left.pad {\n padding-left: $padding-default;\n }\n\n &.ellipsis {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n &.rtl {\n text-align: left;\n }\n }\n\n &.rtl {\n direction: rtl;\n }\n }\n\n th {\n font-weight: bold;\n }\n\n td {\n\n &.gpm-actions {\n line-height: 1;\n text-align: right;\n position: relative;\n padding-right: $padding-default + 1rem;\n min-height: 38px;\n\n .gpm-details-expand {\n position: absolute;\n top: 12px;\n right: 12px;\n }\n }\n\n &.gpm-details {\n margin: 0;\n padding: 0;\n\n @include breakpoint(mobile-only){\n word-wrap: break-word;\n }\n\n > .table-wrapper {\n display: none;\n\n td {\n border-bottom: 0;\n }\n }\n\n tbody {\n width: 100%;\n }\n }\n }\n\n &:last-child {\n td {\n border-bottom: 0;\n }\n }\n}\n\ntable.noflex {\n display: table;\n table-layout: auto;\n\n thead {\n display: table-header-group;\n }\n\n tbody {\n display: table-row-group;\n }\n\n tr {\n display: table-row;\n\n td, th {\n flex: none;\n display: table-cell;\n }\n }\n}\n",".button {\n\t@extend %button;\n}\n\n.button-group {\n position: relative;\n display: inline-block;\n vertical-align: top;\n\n // real button\n > .button:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n }\n\n > .button:first-child {\n margin-left: 0 !important;\n }\n\n > .button {\n }\n\n // toggle caret\n > .button + .dropdown-toggle {\n text-align: center;\n padding-right: 8px;\n padding-left: 8px;\n\n i {\n margin: 0;\n }\n }\n\n > .button:last-child:not(:first-child), > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n }\n\n .button + .button, .button + .button-group, .button-group + .button, .button-group + .button-group {\n margin-left: -3px;\n }\n\n &:last-child {\n .dropdown-menu {\n left: inherit;\n right: 0;\n }\n }\n\n .dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 150px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border-radius: 4px;\n\n .button {\n margin-right: 0 !important;\n }\n\n &.language-switcher {\n min-width: 50px;\n }\n\n &.lang-switcher {\n min-width: 150px;\n left: inherit;\n right: 0;\n\n button {\n width: 100%;\n }\n }\n\n .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n }\n\n li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: 400;\n line-height: 1.42857143;\n\n &:focus, &:hover {\n text-decoration: none;\n }\n }\n }\n}\n\n.open > .dropdown-menu {\n display: block;\n}\n\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n\n// Override style for stubborn gumroad button\n#admin-main .admin-block a.gumroad-button {\n padding: 0.5rem 1rem !important;\n font-size: inherit !important;\n font-weight: 400 !important;\n line-height: inherit !important;\n font-family: inherit !important;\n border-radius: 4px !important;\n box-shadow: inherit !important;\n .gumroad-button-logo {\n display: none !important;\n background-image: none !important;\n }\n}\n","// Error specific styling\n#error {\n\ttext-align: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tpadding-bottom: 6rem;\n\n\th1 {\n\t\tfont-size: $core-font-size + 4.0rem;\n\t}\n\n\tp {\n\t\tmargin: 1rem 0;\n\t}\n}\n","#admin-login {\n @extend %vertical-align;\n max-width: 24rem;\n margin: 0 auto;\n\n &.wide {\n max-width: 50rem;\n\n h1 {\n height: 100px;\n\n &.custom-logo img {\n height: 80px;\n }\n }\n\n form {\n > .padding {\n padding: 3rem 2rem 8rem 2rem;\n > div {\n width: 49%;\n display: inline-block;\n\n @include breakpoint(mobile-only) {\n width: 100%;\n margin-right: 0;\n }\n }\n\n .form-field {\n padding: 0 1rem;\n }\n }\n\n label {\n padding: 0;\n }\n\n input {\n margin-bottom: 1rem;\n text-align: left;\n\n @include placeholder {\n font-size: 1rem;\n line-height: 2rem;\n }\n }\n\n }\n\n .grid {\n display: block;\n }\n\n .form-label, .form-data {\n display: block;\n width: 100%;\n @include flex(1);\n }\n }\n\n .form-field {\n padding-left: 0;\n margin-bottom: 0;\n }\n\n .form-label {\n display: none;\n }\n\n .form-data {\n padding-right: 0;\n }\n\n .wrapper-spacer {\n width: 100% !important;\n display: block !important;\n padding: 0 1rem;\n h3 {\n padding-left: 1rem;\n }\n }\n\n .instructions {\n display: block;\n padding: 2rem 3rem 0;\n margin: 0;\n font-size: 1.3rem;\n p {\n margin: 0;\n }\n }\n\n h1 {\n font-size: 0;\n color: transparent;\n height: 216px;\n margin: 0;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.text-logo {\n text-align: center;\n font-size: 4rem;\n }\n\n &.custom-logo {\n img {\n max-height: 160px;\n }\n }\n\n &.default-logo {\n svg {\n height: 320px;\n }\n }\n }\n\n h5 {\n margin-top: 0;\n text-align: center;\n }\n\n form {\n position: relative;\n\n .padding {\n padding: 3rem 3rem 6rem 3rem;\n }\n\n input {\n margin-bottom: 2rem;\n font-size: 1.4rem;\n line-height: 1.5;\n text-align: center;\n font-weight: 300;\n -webkit-font-smoothing: auto;\n }\n\n .form-actions {\n display: block !important;\n width: 100% !important;\n text-align: center;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 1.5rem 0;\n\n .button {\n margin-bottom: 2px;\n }\n\n button:first-child {\n margin-right: 1rem;\n }\n }\n }\n\n .alert {\n text-align: center;\n padding: 1rem 3rem;\n }\n}\n\n.twofa-secret-code {\n font-weight: bold;\n}\n\n.twofa-wrapper {\n margin-top: 5px;\n}\n\n\n.twofa-secret {\n position: absolute;\n opacity: 0;\n visibility: hidden;\n transition: opacity 600ms, visibility 600ms;\n\n &.show {\n position: static;\n visibility: visible;\n opacity: 1;\n }\n\n}\n","$topbar-height: 4.2rem;\n$update-height: 3rem;\n$sidebar-width-large: 240px;\n$sidebar-width-small: $topbar-height;\n$sidebar-padding: 2rem;\n$content-padding: 1.5rem;\n\n// Special cases\n.sidebar-closed:not(.sidebar-quickopen) {\n #admin-sidebar {\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-small;\n\n #admin-logo {\n h3 {\n font-size: 0;\n &:first-letter {\n font-size: 2.5rem;\n }\n }\n }\n\n .custom-logo {\n margin-right: 0;\n padding-right: 15px;\n\n img {\n padding: 0 5px;\n }\n }\n\n #grav-logo-small {\n display: inline-block;\n }\n\n #grav-logo-large {\n display: none;\n }\n\n .front-end {\n display: none;\n }\n\n #admin-user-details {\n padding: 15px 0 15px 10px;\n text-align: left;\n }\n\n .admin-user-names {\n display: none;\n }\n\n #admin-menu {\n em {\n display: none;\n }\n\n li {\n .badges {\n .updates {\n border-radius: 100%;\n position: absolute;\n top: 4px;\n right: 10px;\n font-size: 9px;\n line-height: 12px;\n padding: 1px 3px;\n min-width: 15px;\n }\n .count {\n display: none;\n }\n }\n }\n }\n\n #open-handle {\n @include breakpoint(large-desktop-plus) {\n .fa-angle-right:before {\n content: \"\\f105\";\n }\n }\n }\n }\n #admin-main {\n margin-left: $sidebar-width-small;\n }\n}\n\n.sidebar-open {\n #admin-sidebar {\n z-index: 10001;\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-large;\n\n h3 {\n font-size: 1.2rem;\n &:first-letter {\n font-size: 1.2rem;\n }\n }\n\n #grav-logo-small {\n display: none;\n }\n\n #grav-logo-large {\n display: inline-block;\n }\n\n #admin-user-details {\n padding: 15px 10px;\n text-align: left;\n }\n\n .admin-user-names {\n display: block;\n }\n\n .front-end {\n display: inline-block;\n }\n\n #admin-menu {\n em {\n display: inline;\n }\n\n li {\n .badges {\n .updates {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n position: relative;\n top: auto;\n right: auto;\n @extend .badge;\n }\n .count {\n display: inline-block;\n }\n }\n }\n }\n\n #open-handle {\n @include breakpoint(mini-nav-range) {\n .fa-angle-right:before {\n content: \"\\f104\";\n }\n }\n }\n }\n}\n\n#admin-sidebar {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 100%;\n max-height: 100vh;\n opacity: 0;\n z-index: 3;\n //transition: opacity 0.2s 0s, visibility 0s 0.2s;\n\n #open-handle {\n display: block;\n position: absolute;\n cursor: pointer;\n right:0;\n top: 0;\n width: 15px;\n height: $topbar-height;\n text-align: center;\n line-height: $topbar-height;\n font-size: 12px;\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n\n @include breakpoint(large-desktop-plus) {\n .fa-angle-right:before {\n content: \"\\f104\";\n }\n }\n }\n\n &.sidebar-is-visible {\n opacity: 1;\n visibility: visible;\n //transition: opacity 0.2s 0s, visibility 0s 0s\n }\n\n @include breakpoint(mobile-only) {\n z-index: 5;\n }\n\n @include breakpoint(tablet-plus) {\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-small;\n }\n\n @include breakpoint(large-desktop-plus) {\n float: left;\n visibility: visible;\n opacity: 1;\n width: $sidebar-width-large;\n }\n\n}\n\n#admin-logo {\n height: $topbar-height;\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.nav-hover {\n .admin-logo {\n margin-right: 0;\n }\n }\n\n .admin-logo {\n margin-right: -10px;\n\n @include breakpoint(tablet-plus) {\n margin-right: 0;\n &.custom-logo {\n\n padding-right: 15px;\n\n img {\n padding: 0 5px;\n }\n }\n }\n\n display: flex;\n align-items: center;\n\n a:not(.front-end) {\n display: inherit;\n }\n\n &.custom-logo {\n img {\n max-height: 30px;\n }\n }\n }\n\n .front-end {\n\n margin-left: 15px;\n opacity: 0.6;\n\n @include breakpoint(mobile-only) {\n display: none;\n }\n\n @include breakpoint(tablet-plus) {\n display: none;\n }\n\n @include breakpoint(large-desktop-plus) {\n display: inline-block;\n }\n\n }\n\n #grav-logo-small {\n height: 30px;\n display: none;\n\n @include breakpoint(tablet-plus) {\n display: inline-block;\n }\n\n @include breakpoint(large-desktop-plus) {\n display: none;\n }\n }\n\n #grav-logo-large {\n height: 30px;\n\n @include breakpoint(tablet-plus) {\n display: none;\n }\n\n @include breakpoint(large-desktop-plus) {\n display: inline-block;\n }\n }\n\n h3 {\n font-size: 1.5rem;\n margin: 0;\n\n @include breakpoint(tablet-plus) {\n font-size: 0;\n &:first-letter {\n font-size: 2.5rem;\n }\n }\n\n @include breakpoint(large-desktop-plus) {\n font-size: 1.5rem;\n &:first-letter {\n font-size: 1.5rem;\n }\n }\n\n i {\n font-size: 1rem;\n vertical-align: middle;\n margin-top: -1px;\n }\n }\n}\n\n.block-userinfo {\n img {\n width: 200px;\n height: 200px;\n object-fit: cover;\n }\n\n & ~ .block-file {\n margin-top: -5rem !important;\n }\n}\n\n#offline-status {\n padding: .2rem 1rem;\n text-align: center;\n display: none;\n\n .fa-plane {\n @include transform(rotate(45deg));\n }\n}\n\n#admin-user-details {\n img {\n width: 47px;\n height: 47px;\n object-fit: cover;\n }\n}\n\n#admin-user-details, .admin-user-details {\n padding: 15px 10px;\n min-height: 80px;\n overflow: hidden;\n text-align: left;\n\n @include breakpoint(mini-nav-range) {\n padding: 1rem 10px;\n text-align: center;\n }\n\n img {\n @include transition(all 0.5s ease);\n border-radius: 100%;\n float: left;\n }\n\n .admin-user-names {\n margin-left: 60px;\n margin-top: 5px;\n display: block;\n\n @include breakpoint(mini-nav-range) {\n display: none;\n }\n\n h4, h5 {\n margin: 0;\n font-size: 1rem;\n line-height: 1.3;\n }\n\n .badge {\n font-size: 0.8rem;\n }\n\n h5 {\n opacity: 0.7;\n font-size: 0.9rem;\n }\n }\n}\n\n#admin-nav-quick-tray {\n margin: 0;\n list-style: none;\n padding-left: 26px;\n padding-right: 10px;\n\n\n li {\n cursor: pointer;\n width: 24px;\n margin: 3px 0 5px;\n }\n\n i {\n transition: all .2s ease-in-out;\n\n &:hover {\n transform: scale(1.2);\n }\n }\n}\n\n.content-padding {\n #messages.default-box-shadow {\n margin-bottom: $content-padding;\n\n @include breakpoint(mobile-only) {\n margin-bottom: 0.5rem;\n }\n }\n}\n\n\n.admin-menu-wrapper {\n height: calc(100vh - 180px);\n //overflow: hidden;\n\n @include breakpoint(mini-nav-range) {\n height: calc(100vh - 136px);\n }\n}\n\n#admin-menu {\n display: block;\n margin: 0;\n padding: 0;\n list-style: none;\n\n em {\n font-style: normal;\n\n @include breakpoint(mini-nav-range) {\n display: none;\n }\n }\n\n li {\n .badges {\n float: right;\n margin-right: 1rem;\n\n .badge {\n display: inline-block;\n margin-right: -5px;\n }\n\n .updates {\n display: none;\n }\n\n .count {\n @include breakpoint(mini-nav-range) {\n display: none;\n }\n }\n\n &.with-updates {\n .count {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n }\n\n .updates {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n display: inline-block;\n\n @include breakpoint(mini-nav-range) {\n border-radius: 100%;\n position: absolute;\n top: 4px;\n right: 10px;\n font-size: 9px;\n line-height: 12px;\n padding: 1px 3px;\n min-width: 15px;\n }\n }\n }\n }\n\n a {\n @include transition(all 0.2s ease);\n display: block;\n padding-left: 25px;\n padding-top: 0.7rem;\n padding-bottom: 0.7rem;\n position: relative;\n\n .fa {\n @include transition(all 0.2s ease);\n margin-right: 8px;\n }\n\n }\n\n &.selected {\n a {\n padding-left: 16px;\n }\n }\n }\n}\n\nbody.sidebar-quickopen #admin-main {\n @include breakpoint(large-desktop-plus) {\n margin-left: $sidebar-width-small;\n }\n}\n\n#admin-main {\n\n @include breakpoint(tablet-plus) {\n margin-left: $sidebar-width-small;\n }\n\n @include breakpoint(large-desktop-plus) {\n margin-left: $sidebar-width-large;\n }\n\n .form-label label {\n .hint:after, [data-hint]:after {\n max-width: 300px;\n min-width: 150px;\n display: inline-table;\n white-space: initial;\n line-height: 1.2;\n }\n }\n\n\n h1 {\n margin: 0;\n font-size: 1.3rem;\n text-align: left;\n letter-spacing: -1px;\n line-height: 1.5;\n }\n\n .padding {\n padding: $padding-default;\n }\n\n .lines-button {\n display: none;\n margin-left: $padding-default / 4;\n &:focus {\n outline:none;\n }\n\n @include breakpoint(mobile-only) {\n display: inline-block;\n\n }\n\n }\n\n .button {\n white-space: nowrap;\n }\n\n .titlebar {\n position: relative;\n height: $topbar-height;\n padding: 0 $padding-default;\n z-index: 4;\n\n box-shadow: 0px 3px 15px 0px rgba(0, 0, 0, 0.1);\n\n @include breakpoint(mobile-only) {\n padding: 0 ($padding-default / 4) 0 ($padding-default + 2.5);\n }\n\n h1 {\n @extend %vertical-align;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n\n @include breakpoint(mobile-only) {\n font-size: 18px;\n i {\n display: none;\n }\n }\n }\n\n .button-bar {\n @extend %vertical-align;\n padding: 0;\n white-space: nowrap;\n z-index: 4;\n }\n\n .preview {\n font-size: 90%;\n }\n\n .button {\n padding: 0.5rem 0.4rem;\n vertical-align: top;\n margin-right: -2px;\n\n @include breakpoint(mobile-only) {\n font-size: 0;\n padding: 0.5rem 0.5rem;\n min-height: 36px;\n i {\n font-size: 20px;\n margin-right: 0;\n }\n }\n\n @media only all and (max-width: 20.875em) {\n padding: 0.5rem 0.2rem;\n }\n }\n\n span.button {\n cursor: default;\n pointer-events: none;\n }\n\n\n\n @include breakpoint(mobile-only) {\n .dropdown-menu .button {\n font-size: 0.9rem;\n }\n }\n }\n\n .admin-block .alert {\n margin-top: -2rem;\n margin-bottom: 2rem;\n }\n\n .alert {\n &:before {\n font-family: FontAwesome;\n margin-right: 5px;\n }\n &.info:before {\n content: \"\\f0a1\";\n }\n &.warning:before {\n content: \"\\f071\";\n }\n &.note:before {\n content: \"\\f24a\";\n }\n\n &.grav:before {\n font-family: FontAwesome, sans-serif;\n content: \"\\f2d6\";\n vertical-align: bottom;\n }\n &.grav {\n #grav-update-button {\n margin-top: -3px;\n float: right;\n }\n }\n }\n\n .grav-update {\n @include clearfix;\n padding: 0 $padding-default;\n margin-top: -2rem;\n margin-bottom: 1rem;\n display: none;\n\n @include breakpoint(mobile-only) {\n padding: 0 1rem;\n }\n\n .button {\n float: right;\n margin-top: 0.6rem;\n margin-left: 1rem;\n line-height: 1.5;\n }\n\n p {\n line-height: $update-height;\n margin: 0;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n }\n\n span[class=\"hint--left\"]::after {\n line-height: 1.5;\n }\n\n i {\n padding-right: 0.5rem;\n }\n\n }\n\n .grav-update.grav + .content-wrapper {\n height: calc(100vh - #{$topbar-height} - #{$update-height});\n }\n\n .content-wrapper {\n position: relative;\n //overflow-y: hidden;\n height: calc(100vh - #{$topbar-height});\n //z-index: 0;\n }\n\n .content-padding {\n padding: $content-padding;\n\n @include breakpoint(mobile-only) {\n padding: 0;\n }\n }\n\n .admin-block {\n padding: 1rem 0;\n\n &:empty {\n padding: 0;\n }\n\n h1 {\n padding: 0 $padding-default 0.5rem;\n margin: 0 0 1rem;\n\n @include breakpoint(mobile-only) {\n padding: 0 1rem 0.5rem;\n }\n\n &.no_underline {\n border-bottom: 0;\n }\n }\n\n .button-bar {\n margin: 0 $padding-default;\n\n @include breakpoint(mobile-only) {\n margin: -1rem 0 1rem 0;\n padding: 0 1rem;\n text-align: center;\n\n .button {\n width: 100%;\n }\n }\n }\n }\n\n .flush-bottom {\n &.button-bar {\n margin: 1rem (-$padding-default) -1rem;\n padding: 1rem;\n float: none;\n display: flex;\n\n @include breakpoint(mobile-only) {\n &.stats-bar {\n font-size: 90%;\n b {\n font-size: 1.5rem;\n }\n }\n }\n\n .button {\n margin: 0;\n height: 37px;\n\n &.dropdown-toggle {\n margin-left: -4px;\n }\n }\n }\n }\n\n .danger, .success {\n position: relative;\n\n &.button-bar {\n margin: 2rem 0 -1rem;\n height: 70px;\n padding: 1rem;\n float: none;\n .button {\n @extend %vertical-align;\n }\n }\n }\n}\n\n.content-padding {\n #admin-dashboard {\n\n .dashboard-item-flex {\n &:nth-of-type(2n) .dashboard-item {\n margin-right: 0;\n margin-left: $content-padding / 2;\n }\n\n &:nth-of-type(2n+1) .dashboard-item {\n margin-left: 0;\n margin-right: $content-padding / 2;\n }\n }\n\n .dashboard-item {\n margin-bottom: $content-padding;\n }\n\n }\n}\n\n#admin-dashboard {\n\n @include display(flex);\n @include flex-flow(row wrap);\n\n .dashboard-item-flex {\n @include display(flex);\n @include flex-flow(column nowrap);\n\n width: 50%;\n\n\n\n @include breakpoint(mobile-only) {\n width: 100%;\n .dashboard-item {\n margin-right: 0px !important;\n margin-left: 0px !important;\n margin-bottom: 10px !important;\n }\n }\n }\n\n .dashboard-item {\n\n > div:not(.widget-content) {\n padding: 1rem $padding-default;\n }\n\n h1 .right {\n float: right;\n }\n\n &.admin-block {\n padding: 1rem 0;\n\n ul {\n margin: 0 0 1rem 0;\n padding: 0;\n list-style: none;\n }\n li {\n margin: 0;\n padding: 0.425rem $padding-default 0.2rem $padding-default;\n &:last-child {\n border-bottom: 0;\n }\n }\n }\n }\n\n .chart-loader {\n position: relative;\n\n .fa {\n display: block;\n position: absolute;\n width: 100%;\n text-align: center;\n font-size: 4rem;\n margin-top: -2rem;\n @extend %vertical-align;\n }\n\n text-align: center;\n }\n\n .widget-content {\n position: relative;\n min-height: 335px;\n padding: 0;\n }\n\n .widget-loader {\n position: absolute;\n text-align: center;\n top: 50%;\n left: 50%;\n width: 100%;\n transform: translate(-50%, -50%);\n\n .fa {\n font-size: 4rem;\n }\n }\n\n #updates {\n\n p {\n text-align: center;\n margin: 0;\n }\n\n .updates-chart {\n width: 50%;\n float: left;\n\n }\n\n .flush-bottom {\n &.button-bar {\n height: 70px;\n flex-direction: row-reverse;\n }\n }\n\n .chart-wrapper {\n position: relative;\n }\n\n .backups-chart {\n position: relative;\n width: 50%;\n float: left;\n }\n\n .ct-chart {\n min-height: 157px;\n }\n\n .numeric {\n display: block;\n position: absolute;\n width: 100%;\n text-align: center;\n font-size: 1.5rem;\n line-height: 1;\n @extend %vertical-align;\n\n em {\n display: block;\n font-style: normal;\n font-size: 1rem;\n }\n\n }\n\n .admin-update-charts {\n @include clearfix;\n min-height: 191px;\n }\n\n .button-bar > .button:not(.dropdown-toggle) {\n margin-left: 4px;\n height: 37px;\n }\n }\n\n #popularity {\n .ct-chart {\n min-height: 171px;\n }\n\n .button-bar {\n height: 100px;\n padding: 0 1rem;\n display: flex;\n }\n }\n\n .dashboard-item {\n\n .admin-statistics-chart {\n position: relative;\n }\n\n p {\n text-align: center;\n margin: 0;\n }\n\n .stat {\n width: 33%;\n text-align: center;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n\n b {\n display: block;\n font-size: 2.5rem;\n line-height: 1;\n font-weight: 300;\n }\n i {\n display: block;\n font-style: normal;\n }\n }\n }\n\n #news-feed {\n .date {\n float: right;\n z-index: 1;\n }\n li {\n\n\n a {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n z-index: 0;\n\n &:before {\n font-family: FontAwesome;\n margin-right: 10px;\n content: \"\\f1ea\";\n }\n }\n\n\n }\n }\n}\n\n.no-flick {\n -webkit-transform: translate3d(0, 0, 0);\n}\n\n.card-row {\n @include justify-content(space-between);\n}\n\n.card-item {\n @extend .no-flick;\n overflow: hidden;\n padding: 1rem;\n margin: 0;\n position: relative;\n width: 31%;\n max-width: 21rem;\n\n @include breakpoint(tablet-range) {\n width: 48%;\n }\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n\n margin-bottom: 2rem;\n\n h4 {\n font-size: 1.2rem;\n line-height: 1.2;\n }\n}\n\n.user-details {\n text-align: left;\n img {\n border-radius: 100%;\n\n }\n h2 {\n margin: 0;\n font-size: 2.1rem !important;\n margin: 1rem 0 0 !important;\n line-height: 1.5;\n\n span {\n font-size: 1.2rem;\n }\n }\n h5 {\n font-size: 1.1rem;\n margin: 0;\n linep-height: 1.2;\n }\n\n .gravatar {\n font-size: 0.9rem;\n padding: 0;\n }\n\n @include breakpoint(mobile-only) {\n text-align: center;\n }\n}\n\n#footer {\n text-align: center;\n padding: 3rem 0 1rem;\n\n p {\n margin: 0;\n }\n}\n\n// Chart overrides\n.ct-chart {\n .ct-series {\n .ct-bar {\n stroke-width: 20px;\n }\n }\n}\n\n#popularity .ct-chart {\n margin: 0 -10px -10px;\n .ct-chart-bar {\n padding: 4px 6px 1px 10px;\n }\n}\n\n#latest {\n .page-title, .page-route {\n overflow: auto;\n }\n}\n\n#overlay {\n position: fixed;\n width: 25%;\n height: 100%;\n z-index: 999999;\n left: 75%;\n top: 0;\n display: none;\n\n @include breakpoint(mobile-only) {\n display: none!important;\n }\n}\n\n// Fix tabs spacing in plugin / theme options\n.gpm-item-info + #blueprints .block-tabs {\n padding-top: 16px;\n}\n\n.plugins-notifications-container,\n.themes-notifications-container {\n margin-bottom: 2rem;\n}\n\n.package-dependencies-container {\n li {\n height: 35px;\n\n .button {\n height: 30px;\n float: right;\n margin-right: 10px;\n line-height: 20px;\n }\n }\n}\n\n.pointer-events-disabled {\n pointer-events: none;\n}\n\n// Reinstall packages\n.updates-checked {\n .button-reinstall-package {\n display: inline-block!important;\n }\n\n &.has-updates {\n .button-reinstall-package {\n display: none!important;\n }\n }\n}\n\n// Preview\n.preview-wrapper {\n .content-padding {\n position: absolute;\n top: 0;\n bottom: 0;\n right: 0;\n left: 0;\n }\n}\n\n// Config Side Tabs\n@include breakpoint(mobile-only) {\n #admin-main .config-wrapper-system .form-tabs.side-tabs {\n > .tabs-nav {\n display: none;\n width: 0;\n }\n > .tabs-content {\n width: 100%;\n .tab__content {\n display: block;\n }\n }\n }\n}\n\n// Log Viewer\n.logs-output {\n\n form {\n\n .form-data {\n display: flex;\n margin: 0 -0.5rem;\n\n @include breakpoint(small-mobile-range) {\n display: block;\n }\n }\n\n .forms-select-wrapper {\n display: block;\n flex: 1;\n margin: 0.5rem 0.5rem;\n }\n }\n\n h1 {\n margin-top: 2rem !important;\n }\n\n h3 {\n padding: 0.5rem 1.5rem;\n font-size: 1.1rem;\n\n @include breakpoint(mobile-only) {\n padding: 0.5rem 1rem;\n }\n }\n table.noflex {\n\n td {\n vertical-align: top;\n }\n\n td.date, td.level {\n white-space: nowrap;\n }\n\n td.date {\n opacity: 0.7;\n }\n\n th.level, td.level {\n padding: 0.375rem 30px;\n }\n\n td.level {\n font-weight: bold;\n\n span.badge {\n font-size: 0.7rem;\n }\n }\n\n td.message {\n width: 100%;\n word-break: break-all;\n }\n\n .trace {\n ol {\n margin: 10px 0;\n padding: 0;\n font-size: 0.7rem;\n\n code {\n font-size: 0.7rem;\n display: block;\n white-space: pre-wrap\n }\n }\n }\n }\n}\n\n// New 1.7 Permissions\n.permissions-container {\n max-width: 800px;\n\n .badge .icon-super {\n display: block;\n height: 20px;\n width: 14px;\n line-height: 1.5;\n\n &:before {\n content: url('../images/icons/crown.svg');\n }\n }\n\n .switch-toggle {\n input+label:before {\n font-family: FontAwesome;\n margin-right: 5px;\n }\n\n input.label0+label:before{\n content: \"\\f05e\";\n }\n input.label1+label:before {\n content: \"\\f00c\";\n\n }\n }\n fieldset {\n margin: 0 0 1rem 0;\n padding: 1rem;\n border-radius: $border-radius;\n\n legend {\n padding: 0 0.5rem;\n margin-left: -0.5rem;\n font-size: 120%;\n }\n\n fieldset {\n margin: 0;\n border: 0;\n padding: 0.5rem 0 0 2rem;\n\n legend {\n padding: 0;\n margin: 0;\n }\n }\n }\n}\n.permission-container {\n display: flex;\n\n\n .permission-name {\n flex-grow: 1;\n position: relative;\n overflow: hidden;\n margin-right: 8px;\n padding-top: 9px;\n\n span:not(.badge) {\n position: relative;\n padding-right: 5px;\n }\n\n span.badge {\n position: relative;\n float: right;\n font-size: 100%;\n border-radius: 20px;\n margin-right: -2px;\n }\n\n &:before {\n content: \"........................................................................................................................................\";\n height: 1px;\n position: absolute;\n right: 100%;\n left: 0;\n }\n }\n}\n\n// Reports\n.reports-content {\n .report-output {\n table, tbody, thead {\n display: table;\n width: 100%;\n }\n table {\n thead {\n tr {\n th {\n display: table-cell;\n }\n }\n }\n tbody {\n tr {\n td {\n display: table-cell;\n }\n }\n }\n }\n }\n}\n\n\n","#pages-filters {\n margin-bottom: 1rem;\n margin-top: -1rem;\n padding: 1rem;\n\n .button-border {\n padding: .375rem .375rem;\n white-space: nowrap;\n\n &.adv-options {\n &:after {\n content: \"\\f078\";\n font-family: \"FontAwesome\", sans-serif;\n margin-left: 5px;\n }\n &.open:after {\n content: \"\\f077\";\n }\n }\n }\n\n .filters-bar {\n display: flex;\n align-items: center;\n\n .button-border {\n margin-left: 0.5rem;\n }\n }\n\n .filters-advanced {\n overflow: hidden;\n transition:max-height 0.3s ease-out;\n height:auto;\n max-height:600px;\n\n &.hide {\n max-height: 0;\n }\n\n .button-border {\n display: inline-block;\n margin-top: 0.5rem;\n }\n\n fieldset {\n margin: 1rem 0 0;\n border-radius: $border-radius;\n\n legend {\n margin-left: -0.5rem;\n padding: 0 0.5rem;\n }\n\n .checkboxes {\n margin-right: 1.5rem;\n label {\n padding-left: 1.7rem;\n &:before {\n margin-top: -0.6rem;\n margin-right: 0;\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n }\n }\n }\n}\n\n#pages-content-wrapper {\n .grav-loading {\n min-height: 600px;\n\n .grav-loader {\n margin: 0 auto;\n position: relative;\n top: 230px;\n }\n }\n\n .fjs-path-bar {\n margin-bottom: -1rem;\n border-bottom: 0;\n padding: 0.5rem;\n }\n\n .fjs-col {\n width: 33.33333334%;\n min-width: 300px;\n }\n\n .fjs-item {\n max-width: 100%;\n\n > .fjs-item-wrapper {\n display: flex;\n justify-content: flex-start;\n padding: 0;\n margin: 1px 0;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n outline: 0;\n }\n\n a {\n padding: 7px 2px 7px 5px;\n & * {\n @include transition(all 0.5s ease);\n }\n }\n\n .fjs-title {\n display: flex;\n align-items: center;\n flex-grow: 1;\n max-width: 100%;\n overflow: auto;\n\n [data-flexpages-dotx3] {\n .dropdown-toggle {\n padding: 0;\n background: transparent;\n border: 0;\n }\n\n /* FIXME: properly move colors to presets */\n .dropdown-menu {\n top: inherit;\n left: inherit;\n right: inherit;\n bottom: inherit;\n position: fixed;\n cursor: default;\n\n padding: 0 0 0.5rem;\n\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0,0,0,.15);\n border-radius: .25rem;\n width: 350px;\n\n .tags {\n padding-top: 0;\n }\n\n a {\n cursor: pointer;\n }\n\n table {\n display: table;\n\n tbody {\n width: 100%;\n display: inherit;\n }\n\n tr {\n display: table-row;\n }\n\n td {\n display: table-cell;\n text-align: left;\n flex: none;\n word-break: break-all;\n white-space: normal;\n\n &:first-child {\n padding-left: 0;\n width: 80px;\n }\n\n &:last-child {\n padding-right: 0;\n width: calc(100% - 80px);\n }\n }\n }\n\n .divider {\n height: 0;\n margin: .5rem 0;\n overflow: hidden;\n }\n\n .action-bar {\n border-radius: $border-radius $border-radius 0 0;\n & + .divider {\n margin-top: 0;\n }\n\n a.dropdown-item:hover {\n border-radius: 0;\n &:first-child {\n border-top-left-radius: 4px;\n }\n &:last-child {\n border-top-right-radius: 4px;\n }\n }\n }\n\n .dropdown-item {\n display: block;\n width: 100%;\n padding: 0.5rem;\n clear: both;\n font-weight: 400;\n text-align: inherit;\n white-space: nowrap;\n border: 0;\n border-radius: $border-radius;\n\n &:hover {\n text-decoration: none;\n }\n\n\n }\n\n .fa {\n display: inline-block;\n width: 16px;\n height: inherit;\n text-align: left;\n }\n\n .action-bar {\n display: flex;\n\n a, i {\n text-align: center;\n }\n }\n\n .details, .tags, .langs {\n padding: 0 .5rem 0;\n }\n\n .infos {\n margin: 0 .15rem;\n ul {\n margin: 0;\n padding: 0;\n }\n }\n\n .langs {\n .lang {\n display: inline-block;\n .fa {\n font-size: 0.6rem;\n padding: 0 0.15rem;\n }\n }\n }\n }\n }\n\n & > a {\n flex-grow: 1;\n overflow: hidden;\n }\n }\n\n .button-group {\n .fa {\n font-size: 0.9rem;\n width: 28px;\n height: 28px;\n display: flex;\n justify-content: center;\n align-items: center;\n\n &.disabled {\n opacity: 0;\n }\n }\n }\n\n .fjs-icon {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n overflow: visible !important;\n width: 34px;\n height: 34px;\n min-width: 34px;\n border-radius: 50%;\n margin-right: 5px;\n margin-left: 5px;\n\n &:before {\n position: relative;\n content: url('../images/icons/book-edit.svg');\n flex: 1;\n max-width: 20px;\n margin-right: 0px;\n margin-bottom: -2px;\n }\n\n &.modular:before {\n content: url('../images/icons/module-four.svg');\n }\n\n &.home:before {\n content: url('../images/icons/house.svg');\n }\n\n &.lock:before {\n content: url('../images/icons/touchid-lock.svg');\n }\n\n &.badge-published:after, &.badge-unpublished:after {\n content: '';\n }\n\n &:after, .badge-clock {\n display: block;\n position: absolute;\n top: -2px;\n right: -2px;\n height: 12px;\n width: 12px;\n border-radius: 50%;\n }\n\n .badge-clock {\n border-radius: 0;\n content: url('../images/icons/clock-hands.svg');\n z-index: 2;\n }\n\n .badge-lang {\n position: absolute;\n bottom: -4px;\n bottom: -4px;\n left: 50%;\n transform: translateX(-50%);\n line-height: 1.2;\n font-weight: 600;\n font-size: 0.6rem;\n border-radius: $border-radius;\n padding: 0 3px;\n }\n }\n\n .fjs-info {\n flex-grow: 1;\n flex-direction: column;\n line-height: 1.2;\n\n > b, > em {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-style: normal;\n }\n\n > b {\n font-size: 110%;\n }\n }\n\n .fjs-actions {\n display: flex;\n align-items: center;\n padding-right: 3px;\n position: relative;\n\n > * {\n margin-right: 3px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n }\n }\n\n .fjs-children {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 28px;\n min-width: 50px;\n outline: 0;\n background-color: transparent;\n\n .badge {\n font-size: 0.7rem;\n margin-right: 5px;\n padding: 0px 3px;\n line-height: 1.3;\n }\n\n .fa {\n display: inline-block !important;\n width: auto !important;\n font-size: 14px;\n }\n }\n\n .breadcrumb-node {\n font-size: 0.9rem;\n\n &:hover span {\n text-decoration: none;\n }\n\n & > i.fa {\n margin: 0 0.4rem -4px;\n }\n\n & > i:not(.fa) {\n position: relative;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n overflow: inherit;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-right: 0.35rem;\n\n &:before {\n position: relative;\n content: url('../images/icons/book-edit.svg');\n flex: 1;\n max-width: 10px;\n }\n\n &.modular:before {\n content: url('../images/icons/module-four.svg');\n }\n\n &.home:before {\n content: url('../images/icons/house.svg');\n }\n\n &.lock:before {\n content: url('../images/icons/touchid-lock.svg');\n }\n\n &.badge-published:after, &.badge-unpublished:after {\n content: '';\n }\n }\n }\n}\n\n.pages-list {\n list-style: none;\n margin: 0;\n padding: 0;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n li {\n margin: 0;\n padding: 0;\n\n }\n\n .row {\n @include transition(all 0.2s ease);\n line-height: 2.5rem;\n padding-right: 3rem;\n\n @include breakpoint(mobile-only) {\n padding-right: 1rem;\n }\n [data-hint]:after {\n line-height: 1 !important;\n width: auto !important;\n white-space: nowrap !important;\n }\n\n p.page-route {\n display: block;\n margin: 0;\n line-height: 1;\n font-size: 0.9rem;\n word-break: break-all;\n\n .spacer {\n display: inline-block;\n margin: 0 0.3rem;\n }\n }\n\n // fix for hint alignment\n .hint--bottom:before, .hint--bottom:after {\n left: 4px;\n }\n .hint:after, [data-hint]:after {\n border-radius: 2px;\n }\n\n .badge.lang {\n margin-left: 8px;\n }\n }\n\n .page-home {\n font-size: 1.4rem;\n margin-left: 10px;\n vertical-align: middle;\n }\n\n .page-info {\n font-size: 1.1rem;\n margin-left: 10px;\n vertical-align: middle;\n }\n\n .page-edit {\n text-overflow: ellipsis;\n display: inline-block;\n max-width: 100%;\n white-space: nowrap;\n overflow-x: hidden;\n }\n\n .page-item__row {\n display: flex;\n }\n\n .page-item__toggle {\n width: 25px;\n line-height: 1;\n padding-top: 7px;\n }\n\n .page-item__content {\n padding: 5px 0;\n width: calc(100% - 50px);\n }\n\n .page-item__content-name {\n line-height: 1;\n }\n\n .page-item__content-hint {\n line-height: 1.3;\n vertical-align: middle;\n max-width: 100%;\n }\n\n .page-item__tools {\n width: 90px;\n text-align: right;\n font-size: 1.4rem;\n\n .page-view {\n margin-right: 4px;\n }\n }\n\n .page-icon {\n\n color: #0082BA;\n font-weight: 700;\n\n &.children-open:before {\n content: '\\f056';\n }\n\n &.children-closed:before{\n content: '\\f055';\n }\n\n &.not-routable {\n color: #CE431D;\n }\n\n &.not-visible {\n color: #999;\n }\n\n &.modular {\n color: #9055AF;\n }\n }\n\n #pages-legend {\n margin-top: 1.5rem;\n text-align: center;\n\n h2, ul, li {\n display: inline-block;\n }\n\n li {\n margin-right: 0.75rem;\n }\n }\n}\n\n#page-filtering {\n margin: 0 $padding-default 1rem;\n @include clearfix;\n\n @include breakpoint(mobile-only) {\n margin: -1rem 1rem 1rem;\n }\n\n .page-filters {\n width: 60%;\n float: left;\n\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n\n }\n\n .page-search {\n position: relative;\n width: 40%;\n float: left;\n padding-left: 2rem;\n text-indent: 2.5rem;\n &:after {\n position: absolute;\n right: 15px;\n top: 10px;\n content: '\\f002';\n font-family: 'FontAwesome';\n }\n\n @include breakpoint(mobile-only) {\n width: 100%;\n padding-top: 1rem;\n padding-left: 0rem;\n\n &:after {\n top: 1.5rem;\n }\n }\n }\n\n .page-shortcuts {\n @include clearfix;\n clear: both;\n padding-top:5px;\n }\n\n .selectize-control.single.plugin-remove_button .selectize-input,\n .selectize-control.multi .selectize-input {\n\n padding: ($leading-margin / 4) ($leading-margin / 4);\n\n &.has-items {\n padding-top: 6px;\n padding-bottom: 4px;\n }\n\n input {\n font-size: $core-font-size;\n line-height: $core-line-height;\n }\n\n\n .item {\n color: #777;\n background: #eee;\n\n padding: 2px 10px;\n &[data-value='Routable'] {\n background: #CE431D;\n color: $white;\n }\n &[data-value='NonRoutable'] {\n color: #CE431D;\n }\n &[data-value='Visible'] {\n background: #0082BA;\n color: $white;\n }\n &[data-value='NonVisible'] {\n color: #0082BA;\n }\n &[data-value='Modular'] {\n background: #9055AF;\n color: $white;\n }\n &[data-value='NonModular'] {\n color: #9055AF;\n }\n &[data-value='Published'] {\n background: #0093B8;\n color: $white;\n }\n &[data-value='NonPublished'] {\n color: #0093B8;\n }\n }\n\n }\n}\n\n.admin-form-wrapper {\n position: relative;\n}\n\n#admin-topbar {\n position: absolute;\n right: 5px;\n height: 50px;\n\n @include breakpoint(mobile-only) {\n position: relative;\n width: 100%;\n right: 0;\n padding: 0 .5rem;\n margin: -2rem 0 2rem 0;\n }\n\n #admin-mode-toggle, #admin-lang-toggle {\n @extend %vertical-align;\n height: 38px;\n display: inline-flex;\n vertical-align: inherit;\n\n @include breakpoint(mobile-only) {\n float: right;\n }\n }\n\n #admin-lang-toggle {\n z-index: 3;\n float: left;\n margin-right: 5px;\n\n button {\n padding: 0.3rem 0.5rem;\n height: 100%;\n }\n\n .dropdown-menu {\n button {\n width: 100%;\n\n }\n }\n }\n\n .switch-grav {\n border: 0;\n line-height: 38px;\n\n }\n\n .switch-toggle {\n @include breakpoint(mobile-only) {\n width: 100%;\n }\n }\n}\n\n@for $i from 0 to 10 {\n .depth-#{$i} .row {\n padding-left: 3rem * ($i + 1);\n }\n\n @include breakpoint(mobile-only) {\n .depth-#{$i} .row {\n padding-left: 1rem * ($i + 1);\n }\n }\n}\n\n.selectize-route-option {\n display: flex;\n\n > :first-child {\n flex: 0 0 auto;\n width: auto;\n margin-right: 10px;\n }\n\n > :last-child {\n flex: 1 1 auto;\n\n > * {\n display: block;\n }\n }\n\n}\n\n.hidden {\n display: none!important;\n}\n\n.switch-toggle input[type=\"radio\"] {\n display: none!important;\n}\n\n[data-acl_picker] {\n .permissions-item {\n display: flex;\n align-items: center;\n vertical-align: center;\n\n .selectize-control, a, input, button {\n display: inline-flex;\n margin: 0 .5rem;\n align-items: center;\n vertical-align: center;\n }\n\n .selectize-control {\n flex-grow: 1;\n }\n\n .selectize-control {\n margin-left: 0;\n }\n\n .switch-toggle {\n margin: 0;\n }\n\n &:last-child {\n margin-right: 0;\n }\n }\n}\n","/*\n * Remodal - v0.2.0\n * Flat, responsive, lightweight, easy customizable modal window plugin with declarative state notation and hash tracking.\n * http://vodkabears.github.io/remodal/\n *\n * Made by Ilya Makarov\n * Under MIT License\n */\n\n/* ==========================================================================\n Remodal necessary styles\n ========================================================================== */\n\n/* Hide scroll bar */\n\nhtml.remodal-is-locked {\n overflow: hidden;\n\n touch-action: none;\n}\n\n/* Anti FOUC */\n\n.remodal, [data-remodal-id] {\n display: none;\n}\n\n/* Overlay necessary styles */\n\n.remodal-overlay {\n position: fixed;\n z-index: 99999;\n top: -5000px;\n right: -5000px;\n bottom: -5000px;\n left: -5000px;\n\n display: none;\n}\n\n/* Necessary styles of the wrapper */\n\n.remodal-wrapper {\n position: fixed;\n z-index: 100000;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n display: none;\n overflow: auto;\n\n text-align: center;\n\n -webkit-overflow-scrolling: touch;\n\n &:after {\n display: inline-block;\n\n height: 100%;\n margin-left: -0.05em;\n\n content: '';\n }\n}\n\n/* Fix iPad, iPhone glitches */\n\n.remodal-overlay,\n.remodal-wrapper {\n backface-visibility: hidden;\n}\n\n/* Modal dialog necessary styles */\n.remodal {\n position: relative;\n outline: none;\n text-size-adjust: 100%;\n}\n\n.remodal-is-initialized {\n /* Disable Anti-FOUC */\n display: inline-block;\n}\n\n/* ==========================================================================\n Remodal's default mobile first theme\n ========================================================================== */\n\n/* Default theme styles for the background */\n\n.remodal-bg.remodal-is-opening,\n.remodal-bg.remodal-is-opened {\n @include filter(blur(3px));\n}\n\n/* Default theme styles of the overlay */\n\n.remodal-overlay {\n background: rgba(43, 46, 56, 0.9);\n}\n\n.remodal-overlay.remodal-is-opening,\n.remodal-overlay.remodal-is-closing {\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n}\n\n.remodal-overlay.remodal-is-opening {\n animation-name: remodal-overlay-opening-keyframes;\n}\n\n.remodal-overlay.remodal-is-closing {\n animation-name: remodal-overlay-closing-keyframes;\n}\n\n/* Default theme styles of the wrapper */\n\n.remodal-wrapper {\n padding: 10px 10px 0;\n}\n\n/* Default theme styles of the modal dialog */\n\n.remodal {\n box-sizing: border-box;\n width: 100%;\n margin-bottom: 10px;\n padding: 35px;\n\n transform: translate3d(0, 0, 0);\n}\n\n.remodal.remodal-is-opening,\n.remodal.remodal-is-closing {\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n}\n\n.remodal.remodal-is-opening {\n animation-name: remodal-opening-keyframes;\n}\n\n.remodal.remodal-is-closing {\n animation-name: remodal-closing-keyframes;\n}\n\n/* Vertical align of the modal dialog */\n\n.remodal,\n.remodal-wrapper:after {\n vertical-align: middle;\n}\n\n/* Close button */\n\n.remodal-close {\n position: absolute;\n top: 0;\n left: 0;\n\n display: block;\n overflow: visible;\n\n width: 35px;\n height: 35px;\n margin: 0;\n padding: 0;\n\n cursor: pointer;\n transition: color 0.2s;\n text-decoration: none;\n\n border: 0;\n outline: 0;\n background: transparent;\n}\n\n.remodal-close:before {\n font-family: Arial, \"Helvetica CY\", \"Nimbus Sans L\", sans-serif !important;\n font-size: 25px;\n line-height: 35px;\n\n position: absolute;\n top: 0;\n left: 0;\n\n display: block;\n\n width: 35px;\n\n content: \"\\00d7\";\n text-align: center;\n}\n\n/* Dialog buttons */\n\n/*.remodal-confirm,\n.remodal-cancel {\n font: inherit;\n\n display: inline-block;\n overflow: visible;\n\n min-width: 110px;\n margin: 0;\n padding: 12px 0;\n\n cursor: pointer;\n transition: background 0.2s;\n text-align: center;\n vertical-align: middle;\n text-decoration: none;\n\n border: 0;\n outline: 0;\n}\n\n.remodal-confirm {\n color: #fff;\n background: #81c784;\n}\n\n.remodal-confirm:hover,\n.remodal-confirm:focus {\n background: #66bb6a;\n}\n\n.remodal-cancel {\n color: #fff;\n background: #e57373;\n}\n\n.remodal-cancel:hover,\n.remodal-cancel:focus {\n background: #ef5350;\n}\n\n!* Remove inner padding and border in Firefox 4+ for the button tag. *!\n\n.remodal-confirm::-moz-focus-inner,\n.remodal-cancel::-moz-focus-inner,\n.remodal-close::-moz-focus-inner {\n padding: 0;\n\n border: 0;\n}*/\n\n/* Keyframes\n ========================================================================== */\n\n@keyframes remodal-opening-keyframes {\n from {\n transform: scale(1.05);\n\n opacity: 0;\n }\n to {\n transform: none;\n\n opacity: 1;\n }\n}\n\n@keyframes remodal-closing-keyframes {\n from {\n transform: scale(1);\n\n opacity: 1;\n }\n to {\n transform: scale(0.95);\n\n opacity: 0;\n }\n}\n\n@keyframes remodal-overlay-opening-keyframes {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes remodal-overlay-closing-keyframes {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n/* Media queries\n ========================================================================== */\n\n@media only screen and (min-width: 641px) {\n .remodal {\n max-width: 700px;\n }\n}\n\n/* IE8\n ========================================================================== */\n\n.lt-ie9 .remodal-overlay {\n background: #2b2e38;\n}\n\n.lt-ie9 .remodal {\n width: 700px;\n}\n\n/********* GRAV CUSTOM ********/\n\n.remodal {\n padding: 35px 0 0;\n text-align: left;\n box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3);\n border-radius: 3px;\n}\n\n.remodal ul li {\n margin-left: 27px;\n list-style-type: square;\n}","$tab-label-height: 50px;\n\n// New JS powered tabs\n.form-tabs {\n\n .admin-pages &:first-child {\n margin-top: -1rem;\n }\n .admin-pages & {\n .tabs-nav {\n margin-right: 180px;\n\n @include breakpoint(mobile-only) {\n margin-right: 0 !important;\n }\n }\n }\n\n .tabs-nav {\n @include display(flex);\n padding-top: 1px;\n\n a {\n @include flex(1);\n transition: color 0.5s ease, background 0.5s ease;\n cursor: pointer;\n min-height: $tab-label-height;\n text-align:center;\n\n padding: 4px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n }\n\n span {\n display: inline-block;\n line-height: 1.1;\n }\n\n\n }\n\n &.subtle .tabs-nav {\n margin-right: 0 !important;\n }\n\n .tabs-content {\n\n .tab__content {\n display: none;\n padding-top: 2rem;\n\n &.active {\n display: block;\n }\n }\n }\n\n &.side-tabs {\n display: flex;\n background: none;\n\n > .tabs-nav {\n width: 20%;\n display: block;\n padding-top: 1.5rem;\n\n a {\n text-align: left;\n flex: none;\n justify-content: left;\n padding-left: 15px;\n }\n }\n\n > .tabs-content {\n width: 80%;\n }\n }\n}\n\n\n// Old tabs here for posterity!\n//.tab-bar {\n// @include clearfix;\n// margin: 0;\n// padding: 0;\n// list-style: none;\n//\n// li {\n//\n// display: block;\n// float: left;\n// height: $tab-label-height;\n//\n// @include breakpoint(mobile-only) {\n// width: 100%;\n// span, a {\n// width: 100%;\n// text-align: center;\n// }\n// }\n// }\n//\n// span, a {\n// @extend .default-animation;\n// display: inline-block;\n// padding: 0 4rem;\n// line-height: $tab-label-height;\n// }\n//}\n\n\n\n\n","// Grav Editor\n.grav-editor-content {\n position: relative;\n}\n\n.grav-editor {\n [data-grav-editor] {\n height: 300px;\n\n &.code-mirrored {\n padding: 0;\n border: 0;\n position: absolute;\n z-index: -1;\n display: block !important;\n }\n }\n\n .CodeMirror {\n .CodeMirror-vscrollbar, .CodeMirror-hscrollbar {\n z-index: 1;\n &:focus {\n outline: none;\n }\n }\n }\n\n .CodeMirror-scroll {\n //margin-right: -36px;\n position: static;\n\n // hide native scrollbar at the bottom\n padding-bottom: 15px;\n }\n\n .grav-editor-resizer {\n height: 6px;\n cursor: row-resize;\n border-radius: 0 0 3px 3px;\n position: relative;\n z-index: 1;\n }\n .CodeMirror-selected {\n background: #D6E8FF;\n }\n\n .CodeMirror-gutters {\n height: 100%!important;\n }\n}\n\n.grav-editor-fullscreen {\n position: fixed;\n top: 4.2rem;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 3;\n padding: 0 !important;\n margin: 0 !important;\n display: flex;\n flex-direction: column;\n\n .grav-editor-content {\n display: flex;\n flex-direction: column;\n flex: 1 0 0;\n overflow-y: auto;\n }\n\n .grav-editor-content, .CodeMirror-wrap, .grav-editor-preview {\n height: 100% !important;\n }\n\n .grav-editor-toolbar {\n flex: 0 0 auto;\n }\n\n .grav-editor-toolbar, .grav-editor-toolbar ul li:first-child a, .grav-editor-toolbar-flip ul li:last-child a {\n border-radius: 0 !important;\n }\n\n .grav-editor-resizer {\n display: none;\n }\n\n .grav-editor-content.is-active {\n display: flex;\n }\n}\n\n.grav-editor-toolbar {\n @include align-items(stretch);\n @include display(flex);\n @include flex-direction(row);\n\n .grav-editor-actions {\n @include flex(1);\n }\n .grav-editor-modes {\n flex-shrink: 0;\n margin-right: 2px;\n ul {\n float: right;\n }\n }\n}\n\n.grav-editor-toolbar {\n @include clearfix;\n\n ul {\n list-style: none;\n margin: 0;\n padding: 0;\n\n li {\n &:first-child a {\n border-top-left-radius: 4px;\n }\n display: inline-block;\n }\n\n a {\n display: inline-block;\n cursor: pointer;\n background-color: transparent;\n border-radius: 0;\n padding: 0.4rem;\n margin-top: -1px;\n border: 1px solid transparent;\n\n &, &:hover, &:active, &:focus {\n outline: 0;\n }\n }\n }\n\n .dropdown-menu li {\n width: 50%;\n }\n}\n\n.grav-editor-hide-toolbar {\n display: none;\n}\n\n.grav-editor-toolbar .grav-editor-modes {\n li {\n &:first-child a {\n border-top-left-radius: 0;\n }\n &:last-child a {\n border-top-right-radius: 4px;\n }\n }\n\n a {\n &:hover {\n /*border: 1px solid transparent;\n border-bottom: 1px solid darken($content-bg, 20%);*/\n }\n }\n}\n\n.grav-editor-toolbar-flip {\n float: right;\n ul li:last-child a {\n border-top-right-radius: 4px;\n }\n}\n\n.grav-editor-content, .grav-editor-preview {\n @include clearfix;\n cursor: text;\n display: none;\n\n &.is-active {\n display: block;\n }\n}\n\n.grav-editor-content {\n /* PADDING */\n .CodeMirror-lines {\n padding: 10px 0; /* Vertical padding around content */\n }\n\n &.fontsize-lg {\n font-size: 16px;\n\n &.fontfamily-sans {\n font-size: 18px;\n }\n }\n\n &.fontsize-md {\n font-size: 14px;\n\n &.fontfamily-sans {\n font-size: 16px;\n }\n }\n\n &.font-size-sm {\n font-size: 12px;\n\n &.fontfamily-sans {\n font-size: 14px;\n }\n }\n}\n\n#admin-main .admin-block {\n .grav-editor-preview {\n padding: 20px;\n overflow-y: scroll;\n position: relative;\n line-height: 1.5;\n background: #fff !important;\n color: #555 !important;\n\n //shortcode {\n // background: #ffc;\n // font-size: 90%;\n //}\n //\n //twig {\n // background: #cfc;\n // font-size: 90%;\n //}\n\n a {\n color: #1c90fb !important;\n }\n\n h1 {\n font-size: 36px;\n }\n\n h2 {\n font-size: 28px;\n }\n\n h3 {\n font-size: 22px;\n }\n\n h4 {\n font-size: 18px;\n }\n\n h5 {\n font-size: 16px;\n }\n\n h6 {\n font-size: 14px;\n }\n\n h1, h2, h3, h4, h5, h6 {\n padding: 0;\n margin: 0.5rem 0;\n border-bottom: 0 !important;\n color: #333 !important;\n font-weight: bold;\n }\n\n p {\n padding: 0;\n margin: 0.5rem 0 1rem;\n }\n\n pre {\n code {\n color: #1c90fb;\n font-size: 14px;\n }\n }\n\n blockquote {\n border-color: #ccc !important;\n background-color: #f0f0f0 !important;\n p {\n color: #444 !important;\n }\n }\n\n hr {\n border-color: #eee !important;\n }\n\n table {\n td, th, tr {\n border-color: #eee !important;\n }\n }\n\n }\n}\n\n\n.grav-editor-toolbar {\n [data-hint]:after {\n white-space: nowrap !important;\n max-width: 300px;\n width: auto !important;\n }\n\n p {\n margin-top: 10px;\n margin-bottom: 10px;\n padding-left: 20px;\n }\n}\n","/* The MIT License */\n\n$preview-width: 200px;\n$preview-height: 150px;\n\n.dropzone {\n position: relative;\n border-radius: $form-border-radius;\n min-height: 4rem;\n\n &.dz-clickable {\n cursor: pointer;\n }\n &.dz-drag-hover {\n border-color: rgba(0,0,0,0.15);\n background: rgba(0,0,0,0.04);\n }\n &.dz-started .dz-message {\n display: none;\n }\n .dz-message {\n opacity: 1;\n -ms-filter: none;\n filter: none;\n }\n .dz-preview {\n position: relative;\n display: inline-block;\n margin: 1rem 1rem 1.5rem 1rem;\n vertical-align: top;\n\n &.dz-file-preview [data-dz-thumbnail] {\n display: none;\n }\n\n &.dz-error .dz-error-mark {\n display: block;\n }\n\n &.dz-success .dz-success-mark {\n display: block;\n }\n\n .dz-success-mark, .dz-error-mark {\n font-family: FontAwesome;\n display: none;\n position: absolute;\n width: 22px;\n height: 22px;\n font-size: 18px;\n line-height: 25px;\n border-radius: 100%;\n text-align: center;\n right: 2px;\n top: 2px;\n span {\n display: none;\n }\n }\n &:hover {\n .dz-success-mark, .dz-error-mark {\n display: none;\n }\n }\n\n .dz-success-mark {\n &::after {\n content: '\\f00c';\n }\n }\n\n .dz-error-mark {\n &::after {\n content: '\\f12a';\n }\n }\n\n .dz-progress {\n position: absolute;\n top: $preview-height;\n left: 0px;\n right: 0px;\n height: 4px;\n display: none;\n\n .dz-upload {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 0%;\n }\n }\n\n .dz-error-message {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n font-size: 0.9rem;\n line-height: 1.2;\n padding: 8px 10px;\n z-index: 500;\n }\n\n &.dz-processing .dz-progress {\n display: block;\n }\n\n &:hover {\n .dz-remove, .dz-unset, .dz-view, .dz-insert, .dz-metadata {\n display: block;\n }\n\n }\n\n &.dz-processing {\n &:hover {\n .dz-unset {\n display: none;\n }\n }\n }\n\n &:hover.dz-error .dz-error-message {\n display: block;\n }\n\n //.dz-remove, .dz-unset, .dz-insert {\n // display: none;\n //}\n\n .dz-filename {\n position: absolute;\n z-index: 1;\n bottom: 0;\n width: 100%;\n padding: 0 5px;\n background: rgba(0,0,0,0.3);\n color: #fff;\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .dz-remove, .dz-unset, .dz-view, .dz-insert, .dz-metadata {\n display: none;\n position: absolute;\n width: 25px;\n height: 25px;\n right: -26px;\n font-size: 0;\n cursor: pointer;\n\n &:hover {\n &:after {\n color: #fff;\n }\n }\n\n &:after {\n text-align: center;\n display: block;\n color: #999;\n font-family: FontAwesome;\n font-size: 18px;\n line-height: 25px;\n }\n }\n\n .dz-insert {\n top: -1px;\n border-top-right-radius: 4px;\n &:after {\n content: '\\f055';\n }\n }\n\n .dz-view {\n top: 24px;\n &:after {\n content: '\\f06e';\n }\n }\n\n .dz-remove {\n top: 72px;\n &:after {\n content: '\\f1f8';\n }\n }\n\n .dz-unset {\n top: 96px;\n border-bottom-right-radius: 4px;\n &:after {\n content: '\\f00d';\n }\n }\n \n .dz-metadata {\n top: 49px;\n &:after {\n content: '\\f05a';\n }\n }\n\n &.dz-no-editor {\n .dz-view {\n top: -1px;\n border-top-right-radius: 4px;\n }\n .dz-remove {\n top: 24px;\n }\n .dz-unset {\n top: 72px;\n }\n }\n\n &:hover .dz-remove, &:hover .dz-unset {\n &.file-thumbnail-remove {\n display: block;\n }\n\n &:not(.file-thumbnail-remove) {\n border-left: 0;\n }\n }\n\n &.dz-processing {\n .dz-details {\n overflow: hidden;\n }\n }\n\n .dz-details {\n width: $preview-width;\n height: $preview-height;\n position: relative;\n font-size: 0.8rem;\n\n background-image: url('../images/transparent.png');\n\n img {\n position: absolute;\n object-fit: contain;\n top: 0;\n left: 0;\n width: $preview-width;\n height: $preview-height;\n }\n\n .dz-size {\n position: absolute;\n bottom: -28px;\n left: 0;\n right: 0;\n text-align: center;\n font-size: 0.8rem;\n height: 28px;\n line-height: 28px;\n }\n }\n\n\n }\n\n\n &.dz-clickable {\n .dz-message, .dz-message span {\n cursor: pointer;\n text-align: center;\n font-size: 1.2rem;\n line-height: 1.4;\n margin: 1rem 0;\n }\n }\n * {\n cursor: default;\n }\n}\n",".toast-title {\n font-weight: bold;\n}\n.toast-message {\n -ms-word-wrap: break-word;\n word-wrap: break-word;\n}\n.toast-message a,\n.toast-message label {\n color: #ffffff;\n}\n.toast-message a:hover {\n color: #cccccc;\n text-decoration: none;\n}\n.toast-close-button {\n position: relative;\n right: -0.3em;\n top: -0.3em;\n float: right;\n font-size: 20px;\n font-weight: bold;\n color: #ffffff;\n -webkit-text-shadow: 0 1px 0 #ffffff;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.8;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n filter: alpha(opacity=80);\n}\n.toast-close-button:hover,\n.toast-close-button:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.4;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n filter: alpha(opacity=40);\n}\n/*Additional properties for button version\n iOS requires the button element instead of an anchor tag.\n If you want the anchor version, it requires `href=\"#\"`.*/\nbutton.toast-close-button {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.toast-top-center {\n top: 0;\n right: 0;\n width: 100%;\n}\n.toast-bottom-center {\n bottom: 0;\n right: 0;\n width: 100%;\n}\n.toast-top-full-width {\n top: 0;\n right: 0;\n width: 100%;\n}\n.toast-bottom-full-width {\n bottom: 0;\n right: 0;\n width: 100%;\n}\n.toast-top-left {\n top: 12px;\n left: 12px;\n}\n.toast-top-right {\n top: 5rem;\n right: 1.5rem;\n}\n.toast-bottom-right {\n right: 12px;\n bottom: 12px;\n}\n.toast-bottom-left {\n bottom: 12px;\n left: 12px;\n}\n#toast-container {\n position: fixed;\n z-index: 999999;\n /*overrides*/\n\n}\n#toast-container * {\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n#toast-container > div {\n position: relative;\n overflow: hidden;\n margin: 0 0 6px;\n padding: 15px 15px 15px 50px;\n width: 300px;\n border-radius: 3px;\n background-position: 15px center;\n background-repeat: no-repeat;\n color: #ffffff;\n opacity: 0.9;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90);\n filter: alpha(opacity=90);\n}\n#toast-container > :hover {\n opacity: 1;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n filter: alpha(opacity=100);\n cursor: pointer;\n}\n#toast-container > .toast-info {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=\") !important;\n}\n#toast-container > .toast-error {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=\") !important;\n}\n#toast-container > .toast-success {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important;\n}\n#toast-container > .toast-warning {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=\") !important;\n}\n#toast-container.toast-top-center > div,\n#toast-container.toast-bottom-center > div {\n width: 300px;\n margin: auto;\n}\n#toast-container.toast-top-full-width > div,\n#toast-container.toast-bottom-full-width > div {\n width: 96%;\n margin: auto;\n}\n\n.toast-warning {\n background-color: #f89406;\n\n .button {\n background-color: darken(#f89406, 10);\n @include button-color(darken(#f89406, 20));\n }\n}\n.toast-progress {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 4px;\n background-color: #000000;\n opacity: 0.4;\n -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n filter: alpha(opacity=40);\n}\n/*Responsive Design*/\n@media all and (max-width: 240px) {\n #toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 11em;\n }\n #toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em;\n }\n}\n@media all and (min-width: 241px) and (max-width: 480px) {\n #toast-container > div {\n padding: 8px 8px 8px 50px;\n width: 18em;\n }\n #toast-container .toast-close-button {\n right: -0.2em;\n top: -0.2em;\n }\n}\n@media all and (min-width: 481px) and (max-width: 768px) {\n #toast-container > div {\n padding: 15px 15px 15px 50px;\n width: 25em;\n }\n}\n",".gpm {\n td {\n border: 0;\n }\n\n .gpm-search {\n position: relative;\n padding: 0 3rem 0.5rem $padding-default;\n text-indent: 2.5rem;\n &:after {\n position: absolute;\n right: 60px;\n top: 10px;\n content: '\\f002';\n font-family: 'FontAwesome';\n }\n\n @include breakpoint(mobile-only) {\n padding-left: 1rem;\n\n }\n }\n\n .sort-actions {\n float: right;\n margin: 0 24px;\n\n @include breakpoint(mobile-only) {\n float: none;\n }\n\n > * {\n font-size: 1rem;\n display: inline-block;\n vertical-align: middle;\n }\n\n .sort-icon {\n cursor: pointer;\n }\n\n select {\n margin: 0;\n display: none;\n }\n\n .selectize-input {\n width: 9rem;\n vertical-align: middle;\n line-height: 21px;\n\n input {\n line-height: 21px;\n }\n }\n }\n\n .gpm-name {\n white-space: nowrap;\n\n @include breakpoint(mobile-only) {\n white-space: normal;\n }\n }\n\n .gpm-version {\n padding-left:0.5rem;\n font-size: 0.9rem;\n }\n\n .gpm-testing {\n @extend .badge;\n border-radius: 3px;\n padding: 0 4px;\n font-size: 0.75rem;\n }\n\n .theme .gpm-testing {\n line-height: 1rem;\n position: absolute;\n top: 0;\n right: 0;\n border-radius: 0 0 0 3px;\n line-height: 1.3;\n }\n\n .gpm-actions {\n\n .enabled, .disabled {\n font-size: 1.6rem;\n }\n }\n\n .gpm-item-info {\n position: relative;\n padding-bottom: 1rem;\n margin-bottom: 3rem;\n overflow: hidden;\n\n\n\n .gpm-item-icon {\n position: absolute;\n right: $padding-default;\n font-size: 20rem;\n }\n table {\n position: relative;\n }\n td {\n border: 0;\n text-align: left !important;\n\n &.double {\n padding-left: 2rem;\n }\n\n &:first-child {\n white-space: nowrap;\n }\n\n @include breakpoint(mobile-only) {\n word-wrap: break-word;\n word-break: break-word;\n @include hyphens(auto);\n }\n }\n tr:hover {\n background: inherit;\n }\n\n\n }\n\n .badge.update {\n display: inline-block;\n border-radius: 4px;\n padding: 2px 10px;\n margin-left: 1rem;\n }\n\n .gpm-ribbon {\n overflow: hidden;\n white-space: nowrap;\n position: absolute;\n top: 1rem;\n right: -2rem;\n @include transform(rotate(45deg));\n\n a {\n display: block;\n font-weight: bold;\n font-size: 0.9rem;\n padding: 5px 40px;\n text-align: center;\n }\n }\n\n .themes {\n padding: $padding-default;\n\n .card-item {\n padding: 1rem 1rem 4rem;\n }\n\n .gpm-screenshot {\n text-align: center;\n img {\n margin: 0 auto;\n max-height: 300px;\n }\n }\n\n .gpm-name {\n margin-bottom: 0.5rem;\n white-space: inherit;\n }\n\n .gpm-actions {\n margin: 1rem -1rem -1rem -1rem;\n height: 4rem;\n text-align: center;\n padding: 1rem;\n font-size: 1rem;\n font-weight: bold;\n\n position: absolute;\n left: 0;\n right: 0;\n bottom: 1rem;\n }\n\n .active-theme .gpm-actions, &.inactive-theme .gpm-actions {\n line-height: 2rem;\n }\n\n .inactive-theme .gpm-actions {\n display: block;\n font-weight: normal;\n }\n }\n\n #gpm-release-toggle {\n float: right;\n margin-right: 3rem;\n }\n}\n","#phpinfo {\n img { display: none;}\n\n table {\n margin: 1rem 0 0;\n }\n \n tr {\n &:hover {\n background: transparent;\n }\n }\n\n td {\n word-wrap: break-word;\n\t overflow: hidden;\n\n h1 {\n margin: 0rem (- $padding-default) 0rem !important;\n }\n }\n\n hr {\n border-bottom: 0;\n }\n\n h1 {\n font-size: 2.3rem;\n }\n\n h2 {\n font-size: 1.7rem;\n margin: 3rem ($padding-default) 0rem !important;\n }\n}\n","$button-size : 2rem;\n$transition: .3s; // increase this to see the transformations in slow-motion\n\n@mixin line {\n display: inline-block;\n width: $button-size;\n height: $button-size / 7;\n border-radius: $button-size / 14;\n transition: $transition;\n}\n\n.lines-button {\n display: inline-block;\n padding: $button-size / 4 $button-size / 4 $button-size / 2;\n transition: .3s;\n cursor: pointer;\n user-select: none;\n border-radius: $button-size / 5;\n position: absolute;\n z-index: 100002;\n top: 10px;\n\n background: transparent;\n\n &:hover {\n opacity: 1;\n }\n\n &:active {\n transition: none;\n background: rgba(0, 0, 0, .1);\n }\n}\n\n.lines {\n position: relative;\n @include line;\n\n /*create the upper and lower lines as pseudo-elements of the middle line*/\n &:before, &:after {\n\n @include line;\n position: absolute;\n left:0;\n content: '';\n transform-origin: $button-size / 14 center;\n }\n &:before { top: $button-size / 4; }\n &:after { top: -$button-size / 4; }\n}\n\n.sidebar-mobile-open .lines-button.x .lines {\n\n /*hide the middle line*/\n background: transparent !important;\n\n /*overlay the lines by setting both their top values to 0*/\n &:before, &:after{\n transform-origin: 50% 50%;\n top:0;\n width: $button-size;\n }\n\n // rotate the lines to form the x shape\n &:before{\n transform: rotate3d(0, 0, 1, 45deg);\n }\n &:after{\n transform: rotate3d(0, 0, 1, -45deg);\n }\n}\n",".single-notification.alert {\n position: relative;\n}\n\n.hide-notification {\n\tright: 1rem;\n position: absolute;\n}\n\n.alert.raw {\n padding: 0 !important;\n}\n\n#admin-dashboard {\n #notifications {\n .admin-block {\n padding: 1rem 0;\n }\n\n li {\n white-space: nowrap;\n overflow: hidden;\n -ms-text-overflow: ellipsis;\n text-overflow: ellipsis;\n }\n }\n}\n\n.dashboard-notifications-container, .plugins-notifications-container, .themes-notifications-container {\n\n margin-bottom: 1rem;\n\n .raw {\n position: relative;\n\n .hide-notification {\n position: absolute;\n top: 5px;\n right: 5px;\n line-height: 1;\n font-size: 1.2rem;\n color: #333;\n text-shadow:\n -1px -1px 0 #fff,\n 1px -1px 0 #fff,\n -1px 1px 0 #fff,\n 1px 1px 0 #fff;\n }\n }\n\n &:empty {\n margin: 0;\n }\n}\n\n#admin-main {\n .content-padding {\n\n div[class*=notifications-container] .alert {\n a:hover {\n text-decoration: underline;\n }\n\n a.button, span.button, button.button {\n float: right;\n text-decoration: none;\n }\n\n }\n\n\n\n .top-notifications-container {\n\n margin-bottom: 1rem;\n\n .alert {\n a {\n cursor: pointer;\n }\n }\n\n @include breakpoint(mobile-only) {\n padding-bottom: 20px;\n }\n }\n }\n\n #notifications {\n td:last-child {\n position: relative;\n span {\n position: absolute;\n display: block;\n right: 2rem;\n top: 6px;\n }\n }\n .badge.alert {\n margin: 0;\n font-size: 0.7rem;\n text-transform: uppercase;\n margin-right: 5px;\n border-radius: 4px;\n vertical-align: middle;\n line-height: 1.7;\n\n i {\n margin-right: 3px;\n }\n }\n }\n}\n\n\n\n","// Changelog\nbody .changelog {\n\n text-align: left;\n\n .remodal-close {\n display: none;\n }\n\n code {\n white-space: pre-wrap;\n vertical-align: inherit;\n font-size: 0.8rem;\n }\n\n h1 {\n text-align: center;\n font-size: 2rem;\n margin: 1rem 0;\n letter-spacing: -1px;\n }\n\n .remodal {\n\n }\n\n .remodal-confirm {\n float: right;\n }\n\n .changelog-overflow {\n max-height: 500px;\n overflow: auto;\n margin-bottom: 1em;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n padding: 1em;\n }\n\n margin-top: -2rem;\n\n h3, h4 {\n text-align: center;\n font-weight: bold;\n }\n\n h3 {\n font-size: 1.3rem;\n margin: 1.3rem 0 0 0;\n line-height: 1;\n }\n\n h3 + h4 {\n font-size: 1rem;\n margin: 0 0 1rem 0;\n color: #666;\n }\n\n ol {\n list-style: none;\n padding: 0;\n margin: 0 0 3rem 0;\n\n a[href='#new'] {\n & + ul > li {\n &:before {\n background-color: #207DE5;\n content: 'New';\n }\n }\n }\n a[href='#improved'] {\n & + ul > li {\n &:before {\n background-color: #FBCA04;\n color: #333;\n content: 'Improved';\n }\n }\n }\n a[href='#bugfix'] {\n & + ul > li {\n &:before {\n background-color: #FC2929;\n content: 'Bugfix';\n }\n }\n }\n }\n\n ul {\n list-style: none;\n padding: 0;\n li {\n margin-bottom: 0.5rem;\n padding-left: 6rem;\n margin-left: 0;\n list-style: none;\n\n &:before {\n margin-left: -6rem;\n display: inline-block;\n border-radius: 2px;\n color: #fff;\n font-weight: bold;\n margin-right: 1rem;\n text-align: center;\n width: 5rem;\n font-size: 0.8rem;\n padding: 2px 0;\n font-style: normal;\n }\n }\n }\n\n}\n","/* Media */\n$dark-text: #333;\n\n.pages-list-container {\n width: 30%;\n flex: none!important;\n padding: 0!important;\n\n .pages-list {\n width: 100%;\n\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &.depth-0 .row {\n padding-left: .5rem;\n }\n\n .depth-1 .row {\n padding-left: 1rem;\n }\n\n .page-item {\n .page-link {\n cursor: pointer;\n }\n }\n\n .row.active {\n background-color: rgba(#00a6cf, 0.1);\n }\n }\n}\n\n.media-page-dropzone {\n width: 100%;\n margin-bottom: 20px;\n}\n\n.media-container {\n &.size-2-3 {\n flex: none!important;\n width: 70%;\n }\n\n\n .filters {\n padding-bottom: 30px;\n width: 100%;\n\n\n .filter-wrapper {\n margin-left: 10px;\n margin-right: 10px;\n\n &:after {\n margin-top: -25px;\n border: 0px none;\n content: \"\\f078\";\n font-family: \"FontAwesome\";\n right: 12px;\n top: 50%;\n line-height: 0;\n color: #9BA2A6;\n pointer-events: none;\n float: right;\n padding-right: 10px;\n }\n }\n\n .filter {\n option {\n padding: 8px;\n }\n }\n }\n\n .files {\n padding-left: 30px;\n padding-right: 30px;\n\n }\n\n .admin-media-title {\n\n color: $dark-text;\n margin: 0px;\n font-size: .8rem;\n line-height: 1.3;\n\n }\n\n .card-item {\n width: 49%;\n\n &.empty-space {\n\n background: rgba(255,255,255,0.4);\n border: 1px solid rgba(0,0,0,0.1) !important;\n\n color: rgba(0,0,0,0.3);\n\n max-width: none;\n display: block;\n text-align: center;\n\n top: 20%;\n height: 10rem !important;\n width: 50% !important;\n margin: 0 auto !important;\n font-size: 2rem;\n line-height: 8rem;\n transform: translateY(-50%);\n\n\n }\n }\n\n .media-details {\n text-align: center;\n img {\n width: 50%;\n }\n h2 {\n margin: 0;\n font-size: 1.8rem;\n }\n h5 {\n color: #9BA2A6;\n font-size: 1.1rem;\n margin: 0;\n }\n }\n\n\n h1 {\n padding: 0 2rem 0.5rem!important;\n }\n\n .admin-form-wrapper {\n width: 100%;\n padding-bottom: 20px;\n }\n}\n\n.spinning-wheel {\n text-align: center;\n}\n\n/* Media in-page modal */\n\n.media-container.in-modal {\n h1 {\n font-size: 30px!important;\n margin-top: 0px;\n }\n\n a {\n color: #333;\n }\n\n .pages-list li {\n list-style-type: none;\n margin-left: 0;\n }\n}\n\n//Mediapicker field\n.remodal.remodal-mediapicker {\n max-width: 70vw;\n padding: 0;\n}\n\n.media-container {\n height: 70vh;\n\n\n .grid {\n justify-content: flex-start;\n }\n\n\n &.in-modal {\n\n .gm-scrollbar {\n background: rgba(255,255,255,0.2);\n\n .thumb {\n background-color: rgba(0,0,0,0.2) !important;\n &:hover, &.active {\n background-color: rgba(0,0,0,0.3) !important;\n }\n }\n }\n }\n\n h5 {\n border-bottom: 1px solid #ddd;\n padding: 0.5rem 15px;\n margin: 0;\n height: 55px;\n }\n\n .filter-wrapper {\n float: right;\n margin-right: 5px;\n margin-top: 10px;\n }\n\n .filter-date {\n width: 150px;\n\n }\n\n .filter-type {\n width: 100px;\n margin-right: 15px;\n }\n\n .pages-list-container {\n position: relative;\n\n .pages-list {\n border-top: 0;\n padding-right: 10px;\n font-size: 90%;\n\n .row {\n transition: none !important;\n line-height: 2rem;\n }\n\n @for $i from 1 to 10 {\n .depth-#{$i} .row {\n padding-left: 1rem * ($i + 1);\n }\n\n }\n\n }\n\n .mediapicker-scroll {\n position: absolute;\n top: 55px;\n bottom: 3px;\n height: inherit;\n }\n }\n\n .thumbs-list-container {\n position: relative;\n\n .media-range {\n position: absolute;\n right: 15px;\n bottom: 5px;\n }\n\n .mediapicker-scroll {\n position: absolute;\n top: 55px;\n bottom: 30px;\n height: inherit;\n }\n\n .gm-scrollbar.-horizontal {\n display: none;\n }\n\n }\n\n\n #admin-media {\n\n padding: 15px;\n height: 100%;\n\n align-items: flex-start;\n align-content: flex-start;\n\n .card-item {\n width: 100px;\n padding: 2px;\n margin: 0 5px 5px 0;\n border: 0;\n\n img {\n display: block;\n }\n }\n\n .admin-media-details {\n position: relative;\n\n .admin-media-title {\n position: absolute;\n width: 100%;\n bottom: 0;\n background: rgba(0,0,0,0.3);\n color: #fff;\n font-size: 10px;\n overflow: hidden;\n line-height: 2;\n text-indent: 2px;\n white-space: nowrap;\n }\n }\n }\n}\n\n[data-remodal-id=\"metadata\"] {\n h1 > * {\n vertical-align: middle;\n }\n h1 strong {\n @include ellipsis(75%);\n }\n .metadata-preview {\n display: flex;\n margin: 0 3rem;\n\n .meta-preview {\n max-width: 200px;\n }\n\n .meta-content ul {\n margin: 0;\n }\n }\n}\n","/*\n * This file is part of the Arnapou jqCron package.\n *\n * (c) Arnaud Buathier \n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n.jqCron-selector {\n position: relative;\n}\n.jqCron-cross,\n.jqCron-selector-title {\n cursor: pointer;\n border-radius: 3px;\n margin: 0 0.2em;\n padding: 0 0.5em;\n}\n\n.jqCron-cross {\n border-radius: 1em;\n font-size: 80%;\n padding: 0 0.3em;\n}\n.jqCron-selector-list {\n left: 0.2em;\n list-style: none;\n margin: 0;\n padding: 0;\n position: absolute;\n top: 1.5em;\n z-index: 5;\n}\n.jqCron-selector-list li {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n -ms-box-sizing: border-box;\n box-sizing: border-box;\n cursor: default;\n display: inline-block !important;\n margin: 0;\n padding: 0.1em 0.4em;\n width: 100%;\n}\n.jqCron-selector-list.cols2 {\n width: 4em;\n}\n.jqCron-selector-list.cols2 li {\n width: 50%;\n}\n.jqCron-selector-list.cols3 {\n width: 6em;\n}\n.jqCron-selector-list.cols3 li {\n width: 33%;\n}\n.jqCron-selector-list.cols4 {\n width: 8em;\n}\n.jqCron-selector-list.cols4 li {\n width: 25%;\n}\n.jqCron-selector-list.cols5 {\n width: 10em;\n}\n.jqCron-selector-list.cols5 li {\n width: 20%;\n}\n\n","// Backups\n#backups-stats {\n #backups-usage {\n position: relative;\n margin-bottom: 1.5rem;\n\n h1 {\n position: absolute;\n right: 1rem;\n top: 5px;\n }\n }\n\n .backups-usage-wrapper {\n height: 40px;\n\n background: linear-gradient(90deg, $color-green 0%, $color-lime 20%, $color-yellow 40%, $color-orange 60%, $color-red 80%, $color-maroon 100%);\n\n > div {\n float: right;\n height: 40px;\n &.full {\n width: 100%;\n }\n }\n }\n}\n\n.backups-content {\n #admin-dashboard {\n display: block;\n #backups-stats {\n margin-left: 1rem;\n margin-right: 1rem;\n\n h1 {\n padding: 0rem;\n @include breakpoint(mobile-only) {\n font-size: 1.1rem;\n }\n }\n }\n }\n}\n\n// Scheduler\n.scheduler-content {\n\n #admin-main .admin-block & .alert {\n margin-top: -1rem;\n margin-bottom: 2rem;\n }\n\n .secondary-accent {\n .button {\n float: right;\n margin-top: -3px;\n }\n }\n\n #cron-install {\n @extend .default-animation;\n padding: 0 1.5rem;\n\n pre {\n padding: 0.5rem;\n }\n\n &.hide {\n display: none;\n }\n }\n}\n\n// Reports\n.report-output {\n #admin-main .admin-block & .alert {\n margin-top: 0;\n margin-bottom: 0;\n }\n\n td {\n .key {\n font-weight: bold;\n }\n }\n}\n\n// Direct install\n.direct-install-content {\n padding: 30px;\n\n .button {\n margin-top: 10px;\n margin-bottom: 50px;\n }\n}\n","$dark-text: #333;\n$transparent-image: 'data:image/jpeg;base64,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';\n\n/* Admin settings */\n\n.colorbar {\n [data-hint]:after {\n width: 300px!important;\n margin-left: -300px;\n }\n\n &.current-scheme, &.predefined-scheme {\n padding-bottom: 10px;\n\n span {\n color: transparent;\n }\n }\n\n &.predefined-scheme:hover {\n cursor: pointer;\n\n span {\n color: white;\n }\n\n .light span {\n color: black;\n }\n }\n\n .colorbar-element-container {\n width: 9rem;\n float: left;\n display: block;\n text-align: center;\n background: white;\n margin-bottom: 1px;\n margin-right: 1px;\n //background-image: url($transparent-image);\n\n\n }\n\n .colorbar-element {\n width: 100%;\n text-align: center;\n height: 4rem;\n //border: 1px solid #ccc;\n border-top: 0;\n\n\n span {\n font-size: .7rem;\n }\n\n color: #333;\n input {\n color: #333;\n width: 100% !important;\n }\n\n &.light-text {\n color: #fff;\n & input {\n color: #fff;\n }\n }\n }\n\n .colorbar-title {\n font-size: 0.8rem;\n //border: 1px solid #ccc;\n font-weight: bold;\n padding: 1px;\n background-color: rgba(#000, 0.05);\n }\n\n input {\n width: 100%;\n border: none;\n font-size: 0.8rem;\n text-align: center;\n border-radius: 0;\n height: 35px;\n position: absolute;\n background: transparent;\n &:focus {\n outline: none;\n }\n }\n\n .choose-predefined-scheme {\n cursor: pointer;\n }\n}\n\n// Admin preview\n$ap-width: 8rem;\n$ap-height: 10rem;\n$nav-width: 25%;\n$toolbar-height: 10%;\n$ap-radius: 4px;\n\n.admin-preview-wrapper {\n display: inline-block;\n width: $ap-width;\n position: relative;\n margin-right: 2rem;\n\n}\n.admin-preview-title {\n text-align: center;\n}\n.admin-preview {\n height: $ap-height;\n position: relative;\n border-radius: $ap-radius;\n border-width: 2px !important;\n}\n\n.ap-overlay {\n cursor: pointer;\n opacity: 0;\n position: absolute;\n top:0;\n left: 0;\n right: 0;\n bottom: 0;\n border-radius: $ap-radius;\n z-index: 2;\n text-align: center;\n transition: opacity .4s ease;\n &:hover {\n opacity: 1;\n background: rgba(0,0,0,0.4);\n }\n b {\n display: inline-block;\n font-weight: normal;\n margin-top: ($ap-height / 2) - 1rem;\n background: #111;\n color: #bbb;\n border-radius: $ap-radius;\n padding: 4px 10px;\n &:hover {\n color: #fff;\n background: #000\n }\n }\n}\n.ap-sidebar {\n position: absolute;\n width: $nav-width;\n top: 0;\n left: 0;\n bottom: 0;\n}\n.ap-logo {\n height: 10%;\n text-align: center;\n &::after {\n display: block;\n position: relative;\n top: 50%;\n margin: 0 auto;\n transform: translateY(-50%);\n content: '';\n height: 8px;\n width: 25%;\n }\n}\n.ap-nav {\n padding: 5px 10px;\n}\n.ap-text, .ap-text::before, .ap-text::after {\n margin-top: 4px;\n position: relative;\n display: block;\n margin-bottom: 3px;\n height: 2px;\n content: '';\n}\n.ap-text::before {\n margin-top: 0;\n top: 7px;\n}\n.ap-text::after {\n margin-top: 0;\n top: 9px;\n}\n.ap-active {\n display: block;\n margin: 19px -10px 0;\n margin-bottom: 5px;\n padding: 5px 10px 5px 7px;\n border-left-width: 3px;\n border-left-style: solid;\n &::after {\n display: block;\n content: '';\n height: 2px;\n }\n}\n.ap-toolbar {\n position: absolute;\n left: $nav-width;\n right: 0;\n height: $toolbar-height;\n padding: 0 10px;\n &::after {\n display: block;\n position: relative;\n top: 50%;\n transform: translateY(-50%);\n content: '';\n width: 33%;\n height: 4px;\n }\n}\n.ap-button {\n float: right;\n position: relative;\n top: 50%;\n transform: translateY(-50%);\n height: 8px;\n width: 25px;\n}\n.ap-page {\n position: absolute;\n top: $toolbar-height;\n left: $nav-width;\n right: 0;\n bottom: 0;\n padding: 10px;\n}\n.ap-content {\n height: 100%;\n overflow: hidden;\n}\n\n.ap-title {\n display: block;\n height: 4px;\n width: 25%;\n margin: 8px 10px 5px;\n}\n.ap-content {\n .ap-text {\n margin-left: 10px;\n margin-right: 10px;\n }\n}\n.ap-update, .ap-notice, .ap-critical {\n margin-top: 19px;\n display: block;\n content: '';\n padding: 5px 10px;\n &::after {\n display: block;\n content: '';\n height: 2px;\n width: 50%;\n }\n}\n.ap-update {\n margin-top: 3px;\n}\n","[data-simplebar] {\n position: relative;\n flex-direction: column;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-content: flex-start;\n align-items: flex-start;\n}\n\n.simplebar-wrapper {\n overflow: hidden;\n width: inherit;\n height: inherit;\n max-width: inherit;\n max-height: inherit;\n}\n\n.simplebar-mask {\n direction: inherit;\n position: absolute;\n overflow: hidden;\n padding: 0;\n margin: 0;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n width: auto !important;\n height: auto !important;\n z-index: 0;\n}\n\n.simplebar-offset {\n direction: inherit !important;\n box-sizing: inherit !important;\n resize: none !important;\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n padding: 0;\n margin: 0;\n -webkit-overflow-scrolling: touch;\n}\n\n.simplebar-content-wrapper {\n direction: inherit;\n box-sizing: border-box !important;\n position: relative;\n display: block;\n height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */\n width: auto;\n max-width: 100%; /* Not required for horizontal scroll to trigger */\n max-height: 100%; /* Needed for vertical scroll to trigger */\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n.simplebar-content-wrapper::-webkit-scrollbar,\n.simplebar-hide-scrollbar::-webkit-scrollbar {\n width: 0;\n height: 0;\n}\n\n.simplebar-content:before,\n.simplebar-content:after {\n content: ' ';\n display: table;\n}\n\n.simplebar-placeholder {\n max-height: 100%;\n max-width: 100%;\n width: 100%;\n pointer-events: none;\n}\n\n.simplebar-height-auto-observer-wrapper {\n box-sizing: inherit !important;\n height: 100%;\n width: 100%;\n max-width: 1px;\n position: relative;\n float: left;\n max-height: 1px;\n overflow: hidden;\n z-index: -1;\n padding: 0;\n margin: 0;\n pointer-events: none;\n flex-grow: inherit;\n flex-shrink: 0;\n flex-basis: 0;\n}\n\n.simplebar-height-auto-observer {\n box-sizing: inherit;\n display: block;\n opacity: 0;\n position: absolute;\n top: 0;\n left: 0;\n height: 1000%;\n width: 1000%;\n min-height: 1px;\n min-width: 1px;\n overflow: hidden;\n pointer-events: none;\n z-index: -1;\n}\n\n.simplebar-track {\n z-index: 1;\n position: absolute;\n right: 0;\n bottom: 0;\n pointer-events: none;\n overflow: hidden;\n}\n\n[data-simplebar].simplebar-dragging .simplebar-content {\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n}\n\n[data-simplebar].simplebar-dragging .simplebar-track {\n pointer-events: all;\n}\n\n.simplebar-scrollbar {\n position: absolute;\n left: 0;\n right: 0;\n min-height: 10px;\n}\n\n.simplebar-scrollbar:before {\n position: absolute;\n content: '';\n border-radius: 7px;\n left: 2px;\n right: 2px;\n opacity: 0;\n transition: opacity 0.2s linear;\n}\n\n.simplebar-scrollbar.simplebar-visible:before {\n /* When hovered, remove all transitions from drag handle */\n opacity: 0.3;\n transition: opacity 0s linear;\n}\n\n.simplebar-track.simplebar-vertical {\n top: 0;\n width: 11px;\n}\n\n.simplebar-track.simplebar-vertical .simplebar-scrollbar:before {\n top: 2px;\n bottom: 2px;\n}\n\n.simplebar-track.simplebar-horizontal {\n left: 0;\n height: 11px;\n}\n\n.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before {\n height: 100%;\n left: 2px;\n right: 2px;\n}\n\n.simplebar-track.simplebar-horizontal .simplebar-scrollbar {\n right: auto;\n left: 0;\n top: 2px;\n height: 7px;\n min-height: 0;\n min-width: 10px;\n width: auto;\n}\n\n/* Rtl support */\n[data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical {\n right: auto;\n left: 0;\n}\n\n.hs-dummy-scrollbar-size {\n direction: rtl;\n position: fixed;\n opacity: 0;\n visibility: hidden;\n height: 500px;\n width: 500px;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n\n.simplebar-hide-scrollbar {\n position: fixed;\n left: 0;\n visibility: hidden;\n overflow-y: scroll;\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n",".jquery-horizontal-scroll-wrap{\n position: relative;\n\n .nav-next, .nav-prev{\n position: absolute;\n z-index: 5;\n top: 50%;\n font-size: 20px;\n line-height: 20px;\n display: block;\n padding: 30px 8px;\n color: #fff !important;\n background: #000;\n background: rgba(0,0,0,0.65);\n cursor: pointer;\n margin-top: -40px;\n\n &.hide {\n display: none;\n }\n\n &:hover, &:focus {\n opacity: 1;\n }\n\n &:before{\n display: inline;\n font-family: \"FontAwesome\";\n }\n }\n\n .nav-next {\n right: 0;\n\n &:before {\n content: \"\\f105\";\n }\n\n }\n\n .nav-prev {\n left: 0;\n\n &:before {\n content: \"\\f104\";\n }\n\n }\n\n .jquery-horizontal-scroll{\n overflow: auto;\n position: relative;\n }\n}\n","// Your custom SCSS should be written here...\n\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/themes/grav/js/admin.min.js b/themes/grav/js/admin.min.js index bcfcc721..7ae7fda7 100644 --- a/themes/grav/js/admin.min.js +++ b/themes/grav/js/admin.min.js @@ -740,7 +740,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => /* binding */ Updates,\n/* harmony export */ \"Instance\": () => /* binding */ Instance,\n/* harmony export */ \"Notifications\": () => /* reexport safe */ _notifications__WEBPACK_IMPORTED_MODULE_5__.default,\n/* harmony export */ \"Feed\": () => /* reexport safe */ _feed__WEBPACK_IMPORTED_MODULE_6__.default\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mout/array/unique */ \"./node_modules/mout/array/unique.js\");\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mout_array_unique__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_formatbytes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/formatbytes */ \"./app/utils/formatbytes.js\");\n/* harmony import */ var _utils_gpm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/gpm */ \"./app/utils/gpm.js\");\n/* harmony import */ var _notifications__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./notifications */ \"./app/updates/notifications.js\");\n/* harmony import */ var _feed__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./feed */ \"./app/updates/feed.js\");\n/* harmony import */ var _check__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./check */ \"./app/updates/check.js\");\n/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./update */ \"./app/updates/update.js\");\n/* harmony import */ var _channel_switcher__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./channel-switcher */ \"./app/updates/channel-switcher.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\nvar Updates = /*#__PURE__*/function () {\n function Updates() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Updates);\n\n this.setPayload(payload);\n this.task = \"task\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.param_sep);\n }\n\n _createClass(Updates, [{\n key: \"setPayload\",\n value: function setPayload() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.payload = payload;\n return this;\n }\n }, {\n key: \"fetch\",\n value: function fetch() {\n var _this = this;\n\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n _utils_gpm__WEBPACK_IMPORTED_MODULE_4__.Instance.fetch(function (response) {\n return _this.setPayload(response);\n }, force);\n return this;\n }\n }, {\n key: \"maintenance\",\n value: function maintenance() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide';\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#updates [data-update-packages]');\n element[mode === 'show' ? 'fadeIn' : 'fadeOut']();\n\n if (mode === 'hide') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove();\n }\n\n return this;\n }\n }, {\n key: \"grav\",\n value: function grav() {\n var payload = this.payload.grav;\n\n if (payload && payload.isUpdatable) {\n var task = this.task;\n var bar = '';\n\n if (!payload.isSymlink) {\n bar += \"\");\n } else {\n bar += \"\");\n }\n\n bar += \"\\n Grav v\".concat(payload.available, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"! (\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.CURRENT, \" v\").concat(payload.version, \")\\n \");\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').removeClass('hidden');\n\n if (element.is(':empty')) {\n element.hide();\n }\n\n element.addClass('grav').html(\"\".concat(bar)).slideDown(150).parent('#messages').addClass('default-box-shadow');\n }\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#grav-update-button').on('click', function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).html(\"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, \" \").concat((0,_utils_formatbytes__WEBPACK_IMPORTED_MODULE_3__.default)(payload.assets['grav-update'].size), \"..\"));\n });\n return this;\n }\n }, {\n key: \"resources\",\n value: function resources() {\n if (!this.payload || !this.payload.resources || !this.payload.resources.total) {\n return this.maintenance('hide');\n }\n\n var is_current_package_latest = true;\n var map = ['plugins', 'themes'];\n var singles = ['plugin', 'theme'];\n var _this$payload$resourc = this.payload.resources,\n plugins = _this$payload$resourc.plugins,\n themes = _this$payload$resourc.themes;\n\n if (!this.payload.resources.total) {\n return this;\n }\n\n [plugins, themes].forEach(function (resources, index) {\n if (!resources || Array.isArray(resources)) {\n return;\n }\n\n var length = Object.keys(resources).length;\n var type = map[index]; // sidebar\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#admin-menu a[href$=\\\"/\".concat(map[index], \"\\\"]\")).find('.badges').addClass('with-updates').find('.badge.updates').text(length);\n var type_translation = ''; // update all\n\n if (type === 'plugins') {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.PLUGINS;\n } else {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.THEMES;\n }\n\n var updateAll = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(type));\n updateAll.css('display', 'block').html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.ALL, \" \").concat(type_translation, \"\\n \\n \").concat(length, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_YOUR, \" \").concat(type_translation.toLowerCase(), \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, \"\\n

\\n \"));\n var existing_slugs = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs') || '';\n\n if (existing_slugs) {\n existing_slugs = existing_slugs.split(',');\n } else {\n existing_slugs = [];\n }\n\n var slugs = mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default()(existing_slugs.concat(Object.keys(resources))).join();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs', \"\".concat(slugs));\n Object.keys(resources).forEach(function (item) {\n // listing page\n var container = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-gpm-\".concat(singles[index], \"=\\\"\").concat(item, \"\\\"]\"));\n var element = container.find('.gpm-name');\n var url = element.find('a');\n var content_wrapper = container.parents('.content-wrapper');\n\n if (type === 'plugins' && !element.find('.badge.update').length) {\n element.append(\"\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, \"!\"));\n content_wrapper.addClass('has-updates');\n } else if (type === 'themes') {\n element.append(\"\"));\n content_wrapper.addClass('has-updates');\n } // details page\n\n\n if (container.length) {\n var details = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(singles[index]));\n\n if (details.length) {\n var releaseType = resources[item].type === 'testing' ? 'test release' : '';\n details.html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), \"\\n \\n v\").concat(resources[item].available, \" \").concat(releaseType, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_THIS, \" \").concat(singles[index], \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"!\\n

\\n \")).css('display', 'block');\n is_current_package_latest = false;\n }\n }\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').removeClass('hidden');\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.content-wrapper').addClass('updates-checked');\n\n if (!is_current_package_latest) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.warning-reinstall-not-latest-release').removeClass('hidden');\n }\n }\n }]);\n\n return Updates;\n}();\n\n\nvar Instance = new Updates();\n // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch\n\n_utils_gpm__WEBPACK_IMPORTED_MODULE_4__.Instance.on('fetched', function (response, raw) {\n Instance.setPayload(response.payload || {});\n Instance.grav().resources();\n});\n\nif (grav_config__WEBPACK_IMPORTED_MODULE_2__.config.enable_auto_updates_check === '1') {\n _utils_gpm__WEBPACK_IMPORTED_MODULE_4__.Instance.fetch();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvaW5kZXguanM/MjBmMCJdLCJuYW1lcyI6WyJVcGRhdGVzIiwicGF5bG9hZCIsInNldFBheWxvYWQiLCJ0YXNrIiwiY29uZmlnIiwiZm9yY2UiLCJncG0iLCJyZXNwb25zZSIsIm1vZGUiLCJlbGVtZW50IiwiJCIsInJlbW92ZUNsYXNzIiwiZmluZCIsInJlbW92ZSIsImdyYXYiLCJpc1VwZGF0YWJsZSIsImJhciIsImlzU3ltbGluayIsInRyYW5zbGF0aW9ucyIsImF2YWlsYWJsZSIsInZlcnNpb24iLCJpcyIsImhpZGUiLCJhZGRDbGFzcyIsImh0bWwiLCJzbGlkZURvd24iLCJwYXJlbnQiLCJvbiIsImZvcm1hdEJ5dGVzIiwiYXNzZXRzIiwic2l6ZSIsInJlc291cmNlcyIsInRvdGFsIiwibWFpbnRlbmFuY2UiLCJpc19jdXJyZW50X3BhY2thZ2VfbGF0ZXN0IiwibWFwIiwic2luZ2xlcyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJmb3JFYWNoIiwiaW5kZXgiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJPYmplY3QiLCJrZXlzIiwidHlwZSIsInRleHQiLCJ0eXBlX3RyYW5zbGF0aW9uIiwidXBkYXRlQWxsIiwiY3NzIiwiam9pbiIsInRvTG93ZXJDYXNlIiwiZXhpc3Rpbmdfc2x1Z3MiLCJhdHRyIiwic3BsaXQiLCJzbHVncyIsInVuaXF1ZSIsImNvbmNhdCIsIml0ZW0iLCJjb250YWluZXIiLCJ1cmwiLCJjb250ZW50X3dyYXBwZXIiLCJwYXJlbnRzIiwiYXBwZW5kIiwiZGV0YWlscyIsInJlbGVhc2VUeXBlIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHIiLCJJbnN0YW5jZSIsInJhdyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLE87QUFDakIscUJBQTBC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QixTQUFTLENBQUM0QixJQUFELENBQVQsQ0FBZ0J4QyxTQUpuQyx1QkFJeUQrQyxXQUp6RCxjQUl3RWhELDBFQUp4RSxjQUk2R2tCLE9BQU8sQ0FBQ0ksS0FBRCxDQUpwSCxjQUkrSHRCLG1GQUovSCxvRUFNR2dDLEdBTkgsQ0FNTyxTQU5QLEVBTWtCLE9BTmxCO0FBUUFoQix1Q0FBeUIsR0FBRyxLQUE1QjtBQUNIO0FBQ0o7QUFDSixTQS9CRDtBQWlDQXhCLHFEQUFDLENBQUMsd0JBQUQsQ0FBRCxDQUE0QkMsV0FBNUIsQ0FBd0MsUUFBeEM7QUFDSCxPQTFFRDtBQTRFQUQsbURBQUMsQ0FBQyxrQkFBRCxDQUFELENBQXNCYSxRQUF0QixDQUErQixpQkFBL0I7O0FBRUEsVUFBSSxDQUFDVyx5QkFBTCxFQUFnQztBQUM1QnhCLHFEQUFDLENBQUMsdUNBQUQsQ0FBRCxDQUEyQ0MsV0FBM0MsQ0FBdUQsUUFBdkQ7QUFDSDtBQUNKOzs7Ozs7O0FBR0wsSUFBSTJELFFBQVEsR0FBRyxJQUFJdEUsT0FBSixFQUFmO0NBR0E7O0FBQ0FNLG1EQUFBLENBQU8sU0FBUCxFQUFrQixVQUFDQyxRQUFELEVBQVdnRSxHQUFYLEVBQW1CO0FBQ2pDRCxVQUFRLENBQUNwRSxVQUFULENBQW9CSyxRQUFRLENBQUNOLE9BQVQsSUFBb0IsRUFBeEM7QUFDQXFFLFVBQVEsQ0FBQ3hELElBQVQsR0FBZ0JpQixTQUFoQjtBQUNILENBSEQ7O0FBS0EsSUFBSTNCLHlFQUFBLEtBQXFDLEdBQXpDLEVBQThDO0FBQzFDRSx3REFBQTtBQUNIIiwiZmlsZSI6Ii4vYXBwL3VwZGF0ZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHVuaXF1ZSBmcm9tICdtb3V0L2FycmF5L3VuaXF1ZSc7XG5pbXBvcnQgeyBjb25maWcsIHRyYW5zbGF0aW9ucyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCBmb3JtYXRCeXRlcyBmcm9tICcuLi91dGlscy9mb3JtYXRieXRlcyc7XG5pbXBvcnQgeyBJbnN0YW5jZSBhcyBncG0gfSBmcm9tICcuLi91dGlscy9ncG0nO1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25zJztcbmltcG9ydCBGZWVkIGZyb20gJy4vZmVlZCc7XG5pbXBvcnQgJy4vY2hlY2snO1xuaW1wb3J0ICcuL3VwZGF0ZSc7XG5pbXBvcnQgJy4vY2hhbm5lbC1zd2l0Y2hlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwZGF0ZXMge1xuICAgIGNvbnN0cnVjdG9yKHBheWxvYWQgPSB7fSkge1xuICAgICAgICB0aGlzLnNldFBheWxvYWQocGF5bG9hZCk7XG4gICAgICAgIHRoaXMudGFzayA9IGB0YXNrJHtjb25maWcucGFyYW1fc2VwfWA7XG4gICAgfVxuXG4gICAgc2V0UGF5bG9hZChwYXlsb2FkID0ge30pIHtcbiAgICAgICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmZXRjaChmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIGdwbS5mZXRjaCgocmVzcG9uc2UpID0+IHRoaXMuc2V0UGF5bG9hZChyZXNwb25zZSksIGZvcmNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBtYWludGVuYW5jZShtb2RlID0gJ2hpZGUnKSB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gJCgnI3VwZGF0ZXMgW2RhdGEtdXBkYXRlLXBhY2thZ2VzXScpO1xuXG4gICAgICAgIGVsZW1lbnRbbW9kZSA9PT0gJ3Nob3cnID8gJ2ZhZGVJbicgOiAnZmFkZU91dCddKCk7XG5cbiAgICAgICAgaWYgKG1vZGUgPT09ICdoaWRlJykge1xuICAgICAgICAgICAgJCgnLmJhZGdlcy53aXRoLXVwZGF0ZXMnKS5yZW1vdmVDbGFzcygnd2l0aC11cGRhdGVzJykuZmluZCgnLmJhZGdlLnVwZGF0ZXMnKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdyYXYoKSB7XG4gICAgICAgIGxldCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkLmdyYXY7XG5cbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5pc1VwZGF0YWJsZSkge1xuICAgICAgICAgICAgbGV0IHRhc2sgPSB0aGlzLnRhc2s7XG4gICAgICAgICAgICBsZXQgYmFyID0gJyc7XG5cbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5pc1N5bWxpbmspIHtcbiAgICAgICAgICAgICAgICBiYXIgKz0gYDxidXR0b24gZGF0YS1tYWludGVuYW5jZS11cGRhdGU9XCIke2NvbmZpZy5iYXNlX3VybF9yZWxhdGl2ZX0vdXBkYXRlLmpzb24vJHt0YXNrfXVwZGF0ZWdyYXYvYWRtaW4tbm9uY2Uke2NvbmZpZy5wYXJhbV9zZXB9JHtjb25maWcuYWRtaW5fbm9uY2V9XCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIHNlY29uZGFyeVwiIGlkPVwiZ3Jhdi11cGRhdGUtYnV0dG9uXCI+JHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFURV9HUkFWX05PV308L2J1dHRvbj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBiYXIgKz0gYDxzcGFuIGNsYXNzPVwiaGludC0tbGVmdFwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0O1wiIGRhdGEtaGludD1cIiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5HUkFWX1NZTUJPTElDQUxMWV9MSU5LRUR9XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1saW5rXCI+PC9pPjwvc3Bhbj5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiYXIgKz0gYFxuICAgICAgICAgICAgICAgIEdyYXYgPGI+diR7cGF5bG9hZC5hdmFpbGFibGV9PC9iPiAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uSVNfTk9XX0FWQUlMQUJMRX0hIDxzcGFuIGNsYXNzPVwibGVzc1wiPigke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uQ1VSUkVOVH0gdiR7cGF5bG9hZC52ZXJzaW9ufSk8L3NwYW4+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9ICQoJ1tkYXRhLWdwbS1ncmF2XScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoJzplbXB0eScpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5oaWRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2dyYXYnKVxuICAgICAgICAgICAgICAgIC5odG1sKGAke2Jhcn1gKVxuICAgICAgICAgICAgICAgIC5zbGlkZURvd24oMTUwKVxuICAgICAgICAgICAgICAgIC5wYXJlbnQoJyNtZXNzYWdlcycpLmFkZENsYXNzKCdkZWZhdWx0LWJveC1zaGFkb3cnKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoJyNncmF2LXVwZGF0ZS1idXR0b24nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQodGhpcykuaHRtbChgJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFUSU5HX1BMRUFTRV9XQUlUfSAke2Zvcm1hdEJ5dGVzKHBheWxvYWQuYXNzZXRzWydncmF2LXVwZGF0ZSddLnNpemUpfS4uYCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlc291cmNlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBheWxvYWQgfHwgIXRoaXMucGF5bG9hZC5yZXNvdXJjZXMgfHwgIXRoaXMucGF5bG9hZC5yZXNvdXJjZXMudG90YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1haW50ZW5hbmNlKCdoaWRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNfY3VycmVudF9wYWNrYWdlX2xhdGVzdCA9IHRydWU7XG4gICAgICAgIGxldCBtYXAgPSBbJ3BsdWdpbnMnLCAndGhlbWVzJ107XG4gICAgICAgIGxldCBzaW5nbGVzID0gWydwbHVnaW4nLCAndGhlbWUnXTtcbiAgICAgICAgbGV0IHsgcGx1Z2lucywgdGhlbWVzIH0gPSB0aGlzLnBheWxvYWQucmVzb3VyY2VzO1xuXG4gICAgICAgIGlmICghdGhpcy5wYXlsb2FkLnJlc291cmNlcy50b3RhbCkgeyByZXR1cm4gdGhpczsgfVxuXG4gICAgICAgIFtwbHVnaW5zLCB0aGVtZXNdLmZvckVhY2goZnVuY3Rpb24ocmVzb3VyY2VzLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKCFyZXNvdXJjZXMgfHwgQXJyYXkuaXNBcnJheShyZXNvdXJjZXMpKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IE9iamVjdC5rZXlzKHJlc291cmNlcykubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBtYXBbaW5kZXhdO1xuXG4gICAgICAgICAgICAvLyBzaWRlYmFyXG4gICAgICAgICAgICAkKGAjYWRtaW4tbWVudSBhW2hyZWYkPVwiLyR7bWFwW2luZGV4XX1cIl1gKVxuICAgICAgICAgICAgICAgIC5maW5kKCcuYmFkZ2VzJylcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3dpdGgtdXBkYXRlcycpXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5iYWRnZS51cGRhdGVzJykudGV4dChsZW5ndGgpO1xuXG4gICAgICAgICAgICB2YXIgdHlwZV90cmFuc2xhdGlvbiA9ICcnO1xuICAgICAgICAgICAgLy8gdXBkYXRlIGFsbFxuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3BsdWdpbnMnKSB7XG4gICAgICAgICAgICAgICAgdHlwZV90cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uUExVR0lOUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHlwZV90cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVEhFTUVTO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdXBkYXRlQWxsID0gJChgLmdyYXYtdXBkYXRlLiR7dHlwZX1gKTtcbiAgICAgICAgICAgIHVwZGF0ZUFsbC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKS5odG1sKGBcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIHNlY29uZGFyeVwiIGRhdGEtcmVtb2RhbC10YXJnZXQ9XCJ1cGRhdGUtcGFja2FnZXNcIiBkYXRhLXBhY2thZ2VzLXNsdWdzPVwiJHtPYmplY3Qua2V5cyhyZXNvdXJjZXMpLmpvaW4oKX1cIiBkYXRhLSR7c2luZ2xlc1tpbmRleF19LWFjdGlvbj1cInN0YXJ0LXBhY2thZ2VzLXVwZGF0ZVwiPiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5VUERBVEV9ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5BTEx9ICR7dHlwZV90cmFuc2xhdGlvbn08L2E+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1idWxsaG9yblwiPjwvaT5cbiAgICAgICAgICAgICAgICAke2xlbmd0aH0gJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLk9GX1lPVVJ9ICR7dHlwZV90cmFuc2xhdGlvbi50b0xvd2VyQ2FzZSgpfSAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uSEFWRV9BTl9VUERBVEVfQVZBSUxBQkxFfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgYCk7XG5cbiAgICAgICAgICAgIGxldCBleGlzdGluZ19zbHVncyA9ICQoJ1tkYXRhLXVwZGF0ZS1wYWNrYWdlc10nKS5hdHRyKCdkYXRhLXBhY2thZ2VzLXNsdWdzJykgfHwgJyc7XG5cbiAgICAgICAgICAgIGlmIChleGlzdGluZ19zbHVncykge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nX3NsdWdzID0gZXhpc3Rpbmdfc2x1Z3Muc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3Rpbmdfc2x1Z3MgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNsdWdzID0gdW5pcXVlKGV4aXN0aW5nX3NsdWdzLmNvbmNhdChPYmplY3Qua2V5cyhyZXNvdXJjZXMpKSkuam9pbigpO1xuICAgICAgICAgICAgJCgnW2RhdGEtdXBkYXRlLXBhY2thZ2VzXScpLmF0dHIoJ2RhdGEtcGFja2FnZXMtc2x1Z3MnLCBgJHtzbHVnc31gKTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzb3VyY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAvLyBsaXN0aW5nIHBhZ2VcbiAgICAgICAgICAgICAgICBsZXQgY29udGFpbmVyID0gJChgW2RhdGEtZ3BtLSR7c2luZ2xlc1tpbmRleF19PVwiJHtpdGVtfVwiXWApO1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gY29udGFpbmVyLmZpbmQoJy5ncG0tbmFtZScpO1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBlbGVtZW50LmZpbmQoJ2EnKTtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudF93cmFwcGVyID0gY29udGFpbmVyLnBhcmVudHMoJy5jb250ZW50LXdyYXBwZXInKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAncGx1Z2lucycgJiYgIWVsZW1lbnQuZmluZCgnLmJhZGdlLnVwZGF0ZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZChgPGEgY2xhc3M9XCJwbHVnaW4tdXBkYXRlLWJ1dHRvblwiIGhyZWY9XCIke3VybC5hdHRyKCdocmVmJyl9XCI+PHNwYW4gY2xhc3M9XCJiYWRnZSB1cGRhdGVcIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFX0FWQUlMQUJMRX0hPC9zcGFuPjwvYT5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF93cmFwcGVyLmFkZENsYXNzKCdoYXMtdXBkYXRlcycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RoZW1lcycpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoYDxkaXYgY2xhc3M9XCJncG0tcmliYm9uXCI+PGEgaHJlZj1cIiR7dXJsLmF0dHIoJ2hyZWYnKX1cIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFLnRvVXBwZXJDYXNlKCl9PC9hPjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50X3dyYXBwZXIuYWRkQ2xhc3MoJ2hhcy11cGRhdGVzJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZGV0YWlscyBwYWdlXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRldGFpbHMgPSAkKGAuZ3Jhdi11cGRhdGUuJHtzaW5nbGVzW2luZGV4XX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVsZWFzZVR5cGUgPSByZXNvdXJjZXNbaXRlbV0udHlwZSA9PT0gJ3Rlc3RpbmcnID8gJzxzcGFuIGNsYXNzPVwiZ3BtLXRlc3RpbmdcIj50ZXN0IHJlbGVhc2U8L3NwYW4+JyA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5odG1sKGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgc2Vjb25kYXJ5XCIgZGF0YS1yZW1vZGFsLXRhcmdldD1cInVwZGF0ZS1wYWNrYWdlc1wiIGRhdGEtcGFja2FnZXMtc2x1Z3M9XCIke2l0ZW19XCIgZGF0YS0ke3NpbmdsZXNbaW5kZXhdfS1hY3Rpb249XCJzdGFydC1wYWNrYWdlLWluc3RhbGxhdGlvblwiPiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5VUERBVEV9ICR7c2luZ2xlc1tpbmRleF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzaW5nbGVzW2luZGV4XS5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYnVsbGhvcm5cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+diR7cmVzb3VyY2VzW2l0ZW1dLmF2YWlsYWJsZX08L3N0cm9uZz4gJHtyZWxlYXNlVHlwZX0gJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLk9GX1RISVN9ICR7c2luZ2xlc1tpbmRleF19ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5JU19OT1dfQVZBSUxBQkxFfSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICBgKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaXNfY3VycmVudF9wYWNrYWdlX2xhdGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICQoJ1tkYXRhLXVwZGF0ZS1wYWNrYWdlc10nKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJy5jb250ZW50LXdyYXBwZXInKS5hZGRDbGFzcygndXBkYXRlcy1jaGVja2VkJyk7XG5cbiAgICAgICAgaWYgKCFpc19jdXJyZW50X3BhY2thZ2VfbGF0ZXN0KSB7XG4gICAgICAgICAgICAkKCcud2FybmluZy1yZWluc3RhbGwtbm90LWxhdGVzdC1yZWxlYXNlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5sZXQgSW5zdGFuY2UgPSBuZXcgVXBkYXRlcygpO1xuZXhwb3J0IHsgSW5zdGFuY2UsIE5vdGlmaWNhdGlvbnMsIEZlZWQgfTtcblxuLy8gYXV0b21hdGljYWxseSByZWZyZXNoIFVJIGZvciB1cGRhdGVzIChncmFwaCwgc2lkZWJhciwgcGx1Z2luL3RoZW1lcyBwYWdlcykgYWZ0ZXIgZXZlcnkgZmV0Y2hcbmdwbS5vbignZmV0Y2hlZCcsIChyZXNwb25zZSwgcmF3KSA9PiB7XG4gICAgSW5zdGFuY2Uuc2V0UGF5bG9hZChyZXNwb25zZS5wYXlsb2FkIHx8IHt9KTtcbiAgICBJbnN0YW5jZS5ncmF2KCkucmVzb3VyY2VzKCk7XG59KTtcblxuaWYgKGNvbmZpZy5lbmFibGVfYXV0b191cGRhdGVzX2NoZWNrID09PSAnMScpIHtcbiAgICBncG0uZmV0Y2goKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./app/updates/index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => /* binding */ Updates,\n/* harmony export */ \"Instance\": () => /* binding */ Instance,\n/* harmony export */ \"Notifications\": () => /* reexport safe */ _notifications__WEBPACK_IMPORTED_MODULE_4__.default,\n/* harmony export */ \"Feed\": () => /* reexport safe */ _feed__WEBPACK_IMPORTED_MODULE_5__.default\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mout/array/unique */ \"./node_modules/mout/array/unique.js\");\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mout_array_unique__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_gpm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/gpm */ \"./app/utils/gpm.js\");\n/* harmony import */ var _notifications__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./notifications */ \"./app/updates/notifications.js\");\n/* harmony import */ var _feed__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./feed */ \"./app/updates/feed.js\");\n/* harmony import */ var _check__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./check */ \"./app/updates/check.js\");\n/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./update */ \"./app/updates/update.js\");\n/* harmony import */ var _channel_switcher__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./channel-switcher */ \"./app/updates/channel-switcher.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\nvar Updates = /*#__PURE__*/function () {\n function Updates() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Updates);\n\n this.setPayload(payload);\n this.task = \"task\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.param_sep);\n this.updateURL = '';\n }\n\n _createClass(Updates, [{\n key: \"setPayload\",\n value: function setPayload() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.payload = payload;\n return this;\n }\n }, {\n key: \"fetch\",\n value: function fetch() {\n var _this = this;\n\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n _utils_gpm__WEBPACK_IMPORTED_MODULE_3__.Instance.fetch(function (response) {\n return _this.setPayload(response);\n }, force);\n return this;\n }\n }, {\n key: \"maintenance\",\n value: function maintenance() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide';\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#updates [data-update-packages]');\n element[mode === 'show' ? 'fadeIn' : 'fadeOut']();\n\n if (mode === 'hide') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove();\n }\n\n return this;\n }\n }, {\n key: \"grav\",\n value: function grav() {\n var payload = this.payload.grav;\n\n if (payload && payload.isUpdatable) {\n var task = this.task;\n var bar = '';\n\n if (!payload.isSymlink) {\n this.updateURL = \"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.base_url_relative, \"/update.json/\").concat(task, \"updategrav/admin-nonce\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.param_sep).concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.admin_nonce);\n bar += \"\");\n } else {\n bar += \"\");\n }\n\n bar += \"\\n Grav v\".concat(payload.available, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"! (\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.CURRENT, \" v\").concat(payload.version, \")\\n \");\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').removeClass('hidden');\n\n if (element.is(':empty')) {\n element.hide();\n }\n\n element.addClass('grav').html(\"\".concat(bar)).slideDown(150, function () {\n var c = 5;\n var x = setInterval(function () {\n c -= 1;\n element.find('.pointer-events-none .cnt-down').text('(' + c + 's)');\n }, 1000);\n setTimeout(function () {\n clearInterval(x);\n element.find('.pointer-events-none .cnt-down').remove();\n element.find('.pointer-events-none').removeClass('pointer-events-none');\n }, 5000);\n }).parent('#messages').addClass('default-box-shadow');\n }\n\n return this;\n }\n }, {\n key: \"resources\",\n value: function resources() {\n if (!this.payload || !this.payload.resources || !this.payload.resources.total) {\n return this.maintenance('hide');\n }\n\n var is_current_package_latest = true;\n var map = ['plugins', 'themes'];\n var singles = ['plugin', 'theme'];\n var _this$payload$resourc = this.payload.resources,\n plugins = _this$payload$resourc.plugins,\n themes = _this$payload$resourc.themes;\n\n if (!this.payload.resources.total) {\n return this;\n }\n\n [plugins, themes].forEach(function (resources, index) {\n if (!resources || Array.isArray(resources)) {\n return;\n }\n\n var length = Object.keys(resources).length;\n var type = map[index]; // sidebar\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#admin-menu a[href$=\\\"/\".concat(map[index], \"\\\"]\")).find('.badges').addClass('with-updates').find('.badge.updates').text(length);\n var type_translation = ''; // update all\n\n if (type === 'plugins') {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.PLUGINS;\n } else {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.THEMES;\n }\n\n var updateAll = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(type));\n updateAll.css('display', 'block').html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.ALL, \" \").concat(type_translation, \"\\n \\n \").concat(length, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_YOUR, \" \").concat(type_translation.toLowerCase(), \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, \"\\n

\\n \"));\n var existing_slugs = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs') || '';\n\n if (existing_slugs) {\n existing_slugs = existing_slugs.split(',');\n } else {\n existing_slugs = [];\n }\n\n var slugs = mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default()(existing_slugs.concat(Object.keys(resources))).join();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs', \"\".concat(slugs));\n Object.keys(resources).forEach(function (item) {\n // listing page\n var container = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-gpm-\".concat(singles[index], \"=\\\"\").concat(item, \"\\\"]\"));\n var element = container.find('.gpm-name');\n var url = element.find('a');\n var content_wrapper = container.parents('.content-wrapper');\n\n if (type === 'plugins' && !element.find('.badge.update').length) {\n element.append(\"\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, \"!\"));\n content_wrapper.addClass('has-updates');\n } else if (type === 'themes') {\n element.append(\"\"));\n content_wrapper.addClass('has-updates');\n } // details page\n\n\n if (container.length) {\n var details = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(singles[index]));\n\n if (details.length) {\n var releaseType = resources[item].type === 'testing' ? 'test release' : '';\n details.html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), \"\\n \\n v\").concat(resources[item].available, \" \").concat(releaseType, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_THIS, \" \").concat(singles[index], \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"!\\n

\\n \")).css('display', 'block');\n is_current_package_latest = false;\n }\n }\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').removeClass('hidden');\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.content-wrapper').addClass('updates-checked');\n\n if (!is_current_package_latest) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.warning-reinstall-not-latest-release').removeClass('hidden');\n }\n }\n }]);\n\n return Updates;\n}();\n\n\nvar Instance = new Updates();\n // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch\n\n_utils_gpm__WEBPACK_IMPORTED_MODULE_3__.Instance.on('fetched', function (response, raw) {\n Instance.setPayload(response.payload || {});\n Instance.grav().resources();\n});\n\nif (grav_config__WEBPACK_IMPORTED_MODULE_2__.config.enable_auto_updates_check === '1') {\n _utils_gpm__WEBPACK_IMPORTED_MODULE_3__.Instance.fetch();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvaW5kZXguanM/MjBmMCJdLCJuYW1lcyI6WyJVcGRhdGVzIiwicGF5bG9hZCIsInNldFBheWxvYWQiLCJ0YXNrIiwiY29uZmlnIiwidXBkYXRlVVJMIiwiZm9yY2UiLCJncG0iLCJyZXNwb25zZSIsIm1vZGUiLCJlbGVtZW50IiwiJCIsInJlbW92ZUNsYXNzIiwiZmluZCIsInJlbW92ZSIsImdyYXYiLCJpc1VwZGF0YWJsZSIsImJhciIsImlzU3ltbGluayIsInRyYW5zbGF0aW9ucyIsImF2YWlsYWJsZSIsInZlcnNpb24iLCJpcyIsImhpZGUiLCJhZGRDbGFzcyIsImh0bWwiLCJzbGlkZURvd24iLCJjIiwieCIsInNldEludGVydmFsIiwidGV4dCIsInNldFRpbWVvdXQiLCJjbGVhckludGVydmFsIiwicGFyZW50IiwicmVzb3VyY2VzIiwidG90YWwiLCJtYWludGVuYW5jZSIsImlzX2N1cnJlbnRfcGFja2FnZV9sYXRlc3QiLCJtYXAiLCJzaW5nbGVzIiwicGx1Z2lucyIsInRoZW1lcyIsImZvckVhY2giLCJpbmRleCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIk9iamVjdCIsImtleXMiLCJ0eXBlIiwidHlwZV90cmFuc2xhdGlvbiIsInVwZGF0ZUFsbCIsImNzcyIsImpvaW4iLCJ0b0xvd2VyQ2FzZSIsImV4aXN0aW5nX3NsdWdzIiwiYXR0ciIsInNwbGl0Iiwic2x1Z3MiLCJ1bmlxdWUiLCJjb25jYXQiLCJpdGVtIiwiY29udGFpbmVyIiwidXJsIiwiY29udGVudF93cmFwcGVyIiwicGFyZW50cyIsImFwcGVuZCIsImRldGFpbHMiLCJyZWxlYXNlVHlwZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwiSW5zdGFuY2UiLCJyYXciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QUhEOztBQUtBLElBQUk5Qix5RUFBQSxLQUFxQyxHQUF6QyxFQUE4QztBQUMxQ0csd0RBQUE7QUFDSCIsImZpbGUiOiIuL2FwcC91cGRhdGVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB1bmlxdWUgZnJvbSAnbW91dC9hcnJheS91bmlxdWUnO1xuaW1wb3J0IHsgY29uZmlnLCB0cmFuc2xhdGlvbnMgfSBmcm9tICdncmF2LWNvbmZpZyc7XG5pbXBvcnQgeyBJbnN0YW5jZSBhcyBncG0gfSBmcm9tICcuLi91dGlscy9ncG0nO1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25zJztcblxuaW1wb3J0IEZlZWQgZnJvbSAnLi9mZWVkJztcbmltcG9ydCAnLi9jaGVjayc7XG5pbXBvcnQgJy4vdXBkYXRlJztcbmltcG9ydCAnLi9jaGFubmVsLXN3aXRjaGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBkYXRlcyB7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZCA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2V0UGF5bG9hZChwYXlsb2FkKTtcbiAgICAgICAgdGhpcy50YXNrID0gYHRhc2ske2NvbmZpZy5wYXJhbV9zZXB9YDtcbiAgICAgICAgdGhpcy51cGRhdGVVUkwgPSAnJztcbiAgICB9XG5cbiAgICBzZXRQYXlsb2FkKHBheWxvYWQgPSB7fSkge1xuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZldGNoKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgZ3BtLmZldGNoKChyZXNwb25zZSkgPT4gdGhpcy5zZXRQYXlsb2FkKHJlc3BvbnNlKSwgZm9yY2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG1haW50ZW5hbmNlKG1vZGUgPSAnaGlkZScpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSAkKCcjdXBkYXRlcyBbZGF0YS11cGRhdGUtcGFja2FnZXNdJyk7XG5cbiAgICAgICAgZWxlbWVudFttb2RlID09PSAnc2hvdycgPyAnZmFkZUluJyA6ICdmYWRlT3V0J10oKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ2hpZGUnKSB7XG4gICAgICAgICAgICAkKCcuYmFkZ2VzLndpdGgtdXBkYXRlcycpLnJlbW92ZUNsYXNzKCd3aXRoLXVwZGF0ZXMnKS5maW5kKCcuYmFkZ2UudXBkYXRlcycpLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ3JhdigpIHtcbiAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQuZ3JhdjtcblxuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmlzVXBkYXRhYmxlKSB7XG4gICAgICAgICAgICBsZXQgdGFzayA9IHRoaXMudGFzaztcbiAgICAgICAgICAgIGxldCBiYXIgPSAnJztcblxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlzU3ltbGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVVJMID0gYCR7Y29uZmlnLmJhc2VfdXJsX3JlbGF0aXZlfS91cGRhdGUuanNvbi8ke3Rhc2t9dXBkYXRlZ3Jhdi9hZG1pbi1ub25jZSR7Y29uZmlnLnBhcmFtX3NlcH0ke2NvbmZpZy5hZG1pbl9ub25jZX1gO1xuICAgICAgICAgICAgICAgIGJhciArPSBgPGJ1dHRvbiBkYXRhLXJlbW9kYWwtdGFyZ2V0PVwidXBkYXRlLWdyYXZcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgc2Vjb25kYXJ5IHBvaW50ZXItZXZlbnRzLW5vbmVcIiBpZD1cImdyYXYtdXBkYXRlLWJ1dHRvblwiPiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5VUERBVEVfR1JBVl9OT1d9IDxzcGFuIGNsYXNzPVwiY250LWRvd25cIj4oNXMpPC9zcGFuPjwvYnV0dG9uPmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhciArPSBgPHNwYW4gY2xhc3M9XCJoaW50LS1sZWZ0XCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCIgZGF0YS1oaW50PVwiJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLkdSQVZfU1lNQk9MSUNBTExZX0xJTktFRH1cIj48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWxpbmtcIj48L2k+PC9zcGFuPmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhciArPSBgXG4gICAgICAgICAgICAgICAgR3JhdiA8Yj52JHtwYXlsb2FkLmF2YWlsYWJsZX08L2I+ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5JU19OT1dfQVZBSUxBQkxFfSEgPHNwYW4gY2xhc3M9XCJsZXNzXCI+KCR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5DVVJSRU5UfSB2JHtwYXlsb2FkLnZlcnNpb259KTwvc3Bhbj5cbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gJCgnW2RhdGEtZ3BtLWdyYXZdJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pcygnOmVtcHR5JykpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmhpZGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnZ3JhdicpXG4gICAgICAgICAgICAgICAgLmh0bWwoYCR7YmFyfWApXG4gICAgICAgICAgICAgICAgLnNsaWRlRG93bigxNTAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IDU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB4ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoJy5wb2ludGVyLWV2ZW50cy1ub25lIC5jbnQtZG93bicpLnRleHQoJygnICsgYyArICdzKScpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZCgnLnBvaW50ZXItZXZlbnRzLW5vbmUgLmNudC1kb3duJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoJy5wb2ludGVyLWV2ZW50cy1ub25lJykucmVtb3ZlQ2xhc3MoJ3BvaW50ZXItZXZlbnRzLW5vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGFyZW50KCcjbWVzc2FnZXMnKS5hZGRDbGFzcygnZGVmYXVsdC1ib3gtc2hhZG93Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXNvdXJjZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXlsb2FkIHx8ICF0aGlzLnBheWxvYWQucmVzb3VyY2VzIHx8ICF0aGlzLnBheWxvYWQucmVzb3VyY2VzLnRvdGFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWludGVuYW5jZSgnaGlkZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlzX2N1cnJlbnRfcGFja2FnZV9sYXRlc3QgPSB0cnVlO1xuICAgICAgICBsZXQgbWFwID0gWydwbHVnaW5zJywgJ3RoZW1lcyddO1xuICAgICAgICBsZXQgc2luZ2xlcyA9IFsncGx1Z2luJywgJ3RoZW1lJ107XG4gICAgICAgIGxldCB7IHBsdWdpbnMsIHRoZW1lcyB9ID0gdGhpcy5wYXlsb2FkLnJlc291cmNlcztcblxuICAgICAgICBpZiAoIXRoaXMucGF5bG9hZC5yZXNvdXJjZXMudG90YWwpIHsgcmV0dXJuIHRoaXM7IH1cblxuICAgICAgICBbcGx1Z2lucywgdGhlbWVzXS5mb3JFYWNoKGZ1bmN0aW9uKHJlc291cmNlcywgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghcmVzb3VyY2VzIHx8IEFycmF5LmlzQXJyYXkocmVzb3VyY2VzKSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIGxldCBsZW5ndGggPSBPYmplY3Qua2V5cyhyZXNvdXJjZXMpLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCB0eXBlID0gbWFwW2luZGV4XTtcblxuICAgICAgICAgICAgLy8gc2lkZWJhclxuICAgICAgICAgICAgJChgI2FkbWluLW1lbnUgYVtocmVmJD1cIi8ke21hcFtpbmRleF19XCJdYClcbiAgICAgICAgICAgICAgICAuZmluZCgnLmJhZGdlcycpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCd3aXRoLXVwZGF0ZXMnKVxuICAgICAgICAgICAgICAgIC5maW5kKCcuYmFkZ2UudXBkYXRlcycpLnRleHQobGVuZ3RoKTtcblxuICAgICAgICAgICAgdmFyIHR5cGVfdHJhbnNsYXRpb24gPSAnJztcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBhbGxcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdwbHVnaW5zJykge1xuICAgICAgICAgICAgICAgIHR5cGVfdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlBMVUdJTlM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHR5cGVfdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlRIRU1FUztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVwZGF0ZUFsbCA9ICQoYC5ncmF2LXVwZGF0ZS4ke3R5cGV9YCk7XG4gICAgICAgICAgICB1cGRhdGVBbGwuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykuaHRtbChgXG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBzZWNvbmRhcnlcIiBkYXRhLXJlbW9kYWwtdGFyZ2V0PVwidXBkYXRlLXBhY2thZ2VzXCIgZGF0YS1wYWNrYWdlcy1zbHVncz1cIiR7T2JqZWN0LmtleXMocmVzb3VyY2VzKS5qb2luKCl9XCIgZGF0YS0ke3NpbmdsZXNbaW5kZXhdfS1hY3Rpb249XCJzdGFydC1wYWNrYWdlcy11cGRhdGVcIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFfSAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uQUxMfSAke3R5cGVfdHJhbnNsYXRpb259PC9hPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYnVsbGhvcm5cIj48L2k+XG4gICAgICAgICAgICAgICAgJHtsZW5ndGh9ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5PRl9ZT1VSfSAke3R5cGVfdHJhbnNsYXRpb24udG9Mb3dlckNhc2UoKX0gJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLkhBVkVfQU5fVVBEQVRFX0FWQUlMQUJMRX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIGApO1xuXG4gICAgICAgICAgICBsZXQgZXhpc3Rpbmdfc2x1Z3MgPSAkKCdbZGF0YS11cGRhdGUtcGFja2FnZXNdJykuYXR0cignZGF0YS1wYWNrYWdlcy1zbHVncycpIHx8ICcnO1xuXG4gICAgICAgICAgICBpZiAoZXhpc3Rpbmdfc2x1Z3MpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ19zbHVncyA9IGV4aXN0aW5nX3NsdWdzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nX3NsdWdzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzbHVncyA9IHVuaXF1ZShleGlzdGluZ19zbHVncy5jb25jYXQoT2JqZWN0LmtleXMocmVzb3VyY2VzKSkpLmpvaW4oKTtcbiAgICAgICAgICAgICQoJ1tkYXRhLXVwZGF0ZS1wYWNrYWdlc10nKS5hdHRyKCdkYXRhLXBhY2thZ2VzLXNsdWdzJywgYCR7c2x1Z3N9YCk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc291cmNlcykuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgLy8gbGlzdGluZyBwYWdlXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9ICQoYFtkYXRhLWdwbS0ke3NpbmdsZXNbaW5kZXhdfT1cIiR7aXRlbX1cIl1gKTtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGNvbnRhaW5lci5maW5kKCcuZ3BtLW5hbWUnKTtcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gZWxlbWVudC5maW5kKCdhJyk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRfd3JhcHBlciA9IGNvbnRhaW5lci5wYXJlbnRzKCcuY29udGVudC13cmFwcGVyJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3BsdWdpbnMnICYmICFlbGVtZW50LmZpbmQoJy5iYWRnZS51cGRhdGUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoYDxhIGNsYXNzPVwicGx1Z2luLXVwZGF0ZS1idXR0b25cIiBocmVmPVwiJHt1cmwuYXR0cignaHJlZicpfVwiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgdXBkYXRlXCI+JHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFURV9BVkFJTEFCTEV9ITwvc3Bhbj48L2E+YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfd3JhcHBlci5hZGRDbGFzcygnaGFzLXVwZGF0ZXMnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0aGVtZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKGA8ZGl2IGNsYXNzPVwiZ3BtLXJpYmJvblwiPjxhIGhyZWY9XCIke3VybC5hdHRyKCdocmVmJyl9XCI+JHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFURS50b1VwcGVyQ2FzZSgpfTwvYT48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF93cmFwcGVyLmFkZENsYXNzKCdoYXMtdXBkYXRlcycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGRldGFpbHMgcGFnZVxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJChgLmdyYXYtdXBkYXRlLiR7c2luZ2xlc1tpbmRleF19YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbGVhc2VUeXBlID0gcmVzb3VyY2VzW2l0ZW1dLnR5cGUgPT09ICd0ZXN0aW5nJyA/ICc8c3BhbiBjbGFzcz1cImdwbS10ZXN0aW5nXCI+dGVzdCByZWxlYXNlPC9zcGFuPicgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuaHRtbChgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIHNlY29uZGFyeVwiIGRhdGEtcmVtb2RhbC10YXJnZXQ9XCJ1cGRhdGUtcGFja2FnZXNcIiBkYXRhLXBhY2thZ2VzLXNsdWdzPVwiJHtpdGVtfVwiIGRhdGEtJHtzaW5nbGVzW2luZGV4XX0tYWN0aW9uPVwic3RhcnQtcGFja2FnZS1pbnN0YWxsYXRpb25cIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFfSAke3NpbmdsZXNbaW5kZXhdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc2luZ2xlc1tpbmRleF0uc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCl9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJ1bGxob3JuXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnYke3Jlc291cmNlc1tpdGVtXS5hdmFpbGFibGV9PC9zdHJvbmc+ICR7cmVsZWFzZVR5cGV9ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5PRl9USElTfSAke3NpbmdsZXNbaW5kZXhdfSAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uSVNfTk9XX0FWQUlMQUJMRX0hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgYCkuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzX2N1cnJlbnRfcGFja2FnZV9sYXRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCdbZGF0YS11cGRhdGUtcGFja2FnZXNdJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKCcuY29udGVudC13cmFwcGVyJykuYWRkQ2xhc3MoJ3VwZGF0ZXMtY2hlY2tlZCcpO1xuXG4gICAgICAgIGlmICghaXNfY3VycmVudF9wYWNrYWdlX2xhdGVzdCkge1xuICAgICAgICAgICAgJCgnLndhcm5pbmctcmVpbnN0YWxsLW5vdC1sYXRlc3QtcmVsZWFzZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IEluc3RhbmNlID0gbmV3IFVwZGF0ZXMoKTtcbmV4cG9ydCB7IEluc3RhbmNlLCBOb3RpZmljYXRpb25zLCBGZWVkIH07XG5cbi8vIGF1dG9tYXRpY2FsbHkgcmVmcmVzaCBVSSBmb3IgdXBkYXRlcyAoZ3JhcGgsIHNpZGViYXIsIHBsdWdpbi90aGVtZXMgcGFnZXMpIGFmdGVyIGV2ZXJ5IGZldGNoXG5ncG0ub24oJ2ZldGNoZWQnLCAocmVzcG9uc2UsIHJhdykgPT4ge1xuICAgIEluc3RhbmNlLnNldFBheWxvYWQocmVzcG9uc2UucGF5bG9hZCB8fCB7fSk7XG4gICAgSW5zdGFuY2UuZ3JhdigpLnJlc291cmNlcygpO1xufSk7XG5cbmlmIChjb25maWcuZW5hYmxlX2F1dG9fdXBkYXRlc19jaGVjayA9PT0gJzEnKSB7XG4gICAgZ3BtLmZldGNoKCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./app/updates/index.js\n"); /***/ }), @@ -769,7 +769,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_request__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/request */ \"./app/utils/request.js\");\n\n // Dashboard update and Grav update\n\njquery__WEBPACK_IMPORTED_MODULE_0___default()('body').on('click', '[data-maintenance-update]', function () {\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n var url = element.data('maintenanceUpdate');\n element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');\n (0,_utils_request__WEBPACK_IMPORTED_MODULE_1__.default)(url, function (response) {\n if (response.type === 'updategrav') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').remove();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#footer .grav-version').html(response.version);\n }\n\n element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download');\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvdXBkYXRlLmpzPzQ3NjkiXSwibmFtZXMiOlsiJCIsIm9uIiwiZWxlbWVudCIsInVybCIsImRhdGEiLCJhdHRyIiwiZmluZCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJ0eXBlIiwicmVtb3ZlIiwiaHRtbCIsInZlcnNpb24iLCJyZW1vdmVBdHRyIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Q0FHQTs7QUFDQUEsNkNBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsRUFBVixDQUFhLE9BQWIsRUFBc0IsMkJBQXRCLEVBQW1ELFlBQVc7QUFDMUQsTUFBSUMsT0FBTyxHQUFHRiw2Q0FBQyxDQUFDLElBQUQsQ0FBZjtBQUNBLE1BQUlHLEdBQUcsR0FBR0QsT0FBTyxDQUFDRSxJQUFSLENBQWEsbUJBQWIsQ0FBVjtBQUVBRixTQUFPLENBQUNHLElBQVIsQ0FBYSxVQUFiLEVBQXlCLFVBQXpCLEVBQXFDQyxJQUFyQyxDQUEwQyxPQUExQyxFQUFtREMsV0FBbkQsQ0FBK0QsbUJBQS9ELEVBQW9GQyxRQUFwRixDQUE2RixvQkFBN0Y7QUFFQUMseURBQU8sQ0FBQ04sR0FBRCxFQUFNLFVBQUNPLFFBQUQsRUFBYztBQUN2QixRQUFJQSxRQUFRLENBQUNDLElBQVQsS0FBa0IsWUFBdEIsRUFBb0M7QUFDaENYLG1EQUFDLENBQUMsaUJBQUQsQ0FBRCxDQUFxQlksTUFBckI7QUFDQVosbURBQUMsQ0FBQyx1QkFBRCxDQUFELENBQTJCYSxJQUEzQixDQUFnQ0gsUUFBUSxDQUFDSSxPQUF6QztBQUNIOztBQUVEWixXQUFPLENBQUNhLFVBQVIsQ0FBbUIsVUFBbkIsRUFBK0JULElBQS9CLENBQW9DLE9BQXBDLEVBQTZDQyxXQUE3QyxDQUF5RCxvQkFBekQsRUFBK0VDLFFBQS9FLENBQXdGLG1CQUF4RjtBQUNILEdBUE0sQ0FBUDtBQVFILENBZEQiLCJmaWxlIjoiLi9hcHAvdXBkYXRlcy91cGRhdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vdXRpbHMvcmVxdWVzdCc7XG5cbi8vIERhc2hib2FyZCB1cGRhdGUgYW5kIEdyYXYgdXBkYXRlXG4kKCdib2R5Jykub24oJ2NsaWNrJywgJ1tkYXRhLW1haW50ZW5hbmNlLXVwZGF0ZV0nLCBmdW5jdGlvbigpIHtcbiAgICBsZXQgZWxlbWVudCA9ICQodGhpcyk7XG4gICAgbGV0IHVybCA9IGVsZW1lbnQuZGF0YSgnbWFpbnRlbmFuY2VVcGRhdGUnKTtcblxuICAgIGVsZW1lbnQuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKS5maW5kKCc+IC5mYScpLnJlbW92ZUNsYXNzKCdmYS1jbG91ZC1kb3dubG9hZCcpLmFkZENsYXNzKCdmYS1yZWZyZXNoIGZhLXNwaW4nKTtcblxuICAgIHJlcXVlc3QodXJsLCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICd1cGRhdGVncmF2Jykge1xuICAgICAgICAgICAgJCgnW2RhdGEtZ3BtLWdyYXZdJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAkKCcjZm9vdGVyIC5ncmF2LXZlcnNpb24nKS5odG1sKHJlc3BvbnNlLnZlcnNpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpLmZpbmQoJz4gLmZhJykucmVtb3ZlQ2xhc3MoJ2ZhLXJlZnJlc2ggZmEtc3BpbicpLmFkZENsYXNzKCdmYS1jbG91ZC1kb3dubG9hZCcpO1xuICAgIH0pO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./app/updates/update.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_formatbytes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/formatbytes */ \"./app/utils/formatbytes.js\");\n/* harmony import */ var _utils_request__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/request */ \"./app/utils/request.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index */ \"./app/updates/index.js\");\n\n\n\n\n // Dashboard update and Grav update\n\njquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on('click.remodal', '[data-remodal-id=\"update-grav\"] [data-remodal-action=\"confirm\"]', function () {\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#grav-update-button');\n element.html(\"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_1__.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, \" \").concat((0,_utils_formatbytes__WEBPACK_IMPORTED_MODULE_2__.default)(_index__WEBPACK_IMPORTED_MODULE_4__.Instance.payload.grav.assets[\"grav-update\"].size), \"..\"));\n element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');\n (0,_utils_request__WEBPACK_IMPORTED_MODULE_3__.default)(_index__WEBPACK_IMPORTED_MODULE_4__.Instance.updateURL, function (response) {\n if (response.type === 'updategrav') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').remove();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#footer .grav-version').html(response.version);\n }\n\n element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download');\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvdXBkYXRlLmpzPzQ3NjkiXSwibmFtZXMiOlsiJCIsImRvY3VtZW50Iiwib24iLCJlbGVtZW50IiwiaHRtbCIsInRyYW5zbGF0aW9ucyIsImZvcm1hdEJ5dGVzIiwiVXBkYXRlIiwiYXR0ciIsImZpbmQiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwidHlwZSIsInJlbW92ZSIsInZlcnNpb24iLCJyZW1vdmVBdHRyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0FBLDZDQUFDLENBQUNDLFFBQUQsQ0FBRCxDQUFZQyxFQUFaLENBQWUsZUFBZixFQUFnQyxpRUFBaEMsRUFBbUcsWUFBTTtBQUNyRyxNQUFNQyxPQUFPLEdBQUdILDZDQUFDLENBQUMscUJBQUQsQ0FBakI7QUFDQUcsU0FBTyxDQUFDQyxJQUFSLFdBQWdCQyx1RkFBaEIsY0FBa0VDLDJEQUFXLENBQUNDLG9GQUFELENBQTdFO0FBRUFKLFNBQU8sQ0FBQ0ssSUFBUixDQUFhLFVBQWIsRUFBeUIsVUFBekIsRUFBcUNDLElBQXJDLENBQTBDLE9BQTFDLEVBQW1EQyxXQUFuRCxDQUErRCxtQkFBL0QsRUFBb0ZDLFFBQXBGLENBQTZGLG9CQUE3RjtBQUVBQyx5REFBTyxDQUFDTCxzREFBRCxFQUFtQixVQUFDTSxRQUFELEVBQWM7QUFDcEMsUUFBSUEsUUFBUSxDQUFDQyxJQUFULEtBQWtCLFlBQXRCLEVBQW9DO0FBQ2hDZCxtREFBQyxDQUFDLGlCQUFELENBQUQsQ0FBcUJlLE1BQXJCO0FBQ0FmLG1EQUFDLENBQUMsdUJBQUQsQ0FBRCxDQUEyQkksSUFBM0IsQ0FBZ0NTLFFBQVEsQ0FBQ0csT0FBekM7QUFDSDs7QUFFRGIsV0FBTyxDQUFDYyxVQUFSLENBQW1CLFVBQW5CLEVBQStCUixJQUEvQixDQUFvQyxPQUFwQyxFQUE2Q0MsV0FBN0MsQ0FBeUQsb0JBQXpELEVBQStFQyxRQUEvRSxDQUF3RixtQkFBeEY7QUFDSCxHQVBNLENBQVA7QUFRSCxDQWREIiwiZmlsZSI6Ii4vYXBwL3VwZGF0ZXMvdXBkYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7IHRyYW5zbGF0aW9ucyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCBmb3JtYXRCeXRlcyBmcm9tICcuLi91dGlscy9mb3JtYXRieXRlcyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IEluc3RhbmNlIGFzIFVwZGF0ZSB9IGZyb20gJy4vaW5kZXgnO1xuXG4vLyBEYXNoYm9hcmQgdXBkYXRlIGFuZCBHcmF2IHVwZGF0ZVxuJChkb2N1bWVudCkub24oJ2NsaWNrLnJlbW9kYWwnLCAnW2RhdGEtcmVtb2RhbC1pZD1cInVwZGF0ZS1ncmF2XCJdIFtkYXRhLXJlbW9kYWwtYWN0aW9uPVwiY29uZmlybVwiXScsICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gJCgnI2dyYXYtdXBkYXRlLWJ1dHRvbicpO1xuICAgIGVsZW1lbnQuaHRtbChgJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFUSU5HX1BMRUFTRV9XQUlUfSAke2Zvcm1hdEJ5dGVzKFVwZGF0ZS5wYXlsb2FkLmdyYXYuYXNzZXRzWydncmF2LXVwZGF0ZSddLnNpemUpfS4uYCk7XG5cbiAgICBlbGVtZW50LmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJykuZmluZCgnPiAuZmEnKS5yZW1vdmVDbGFzcygnZmEtY2xvdWQtZG93bmxvYWQnKS5hZGRDbGFzcygnZmEtcmVmcmVzaCBmYS1zcGluJyk7XG5cbiAgICByZXF1ZXN0KFVwZGF0ZS51cGRhdGVVUkwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ3VwZGF0ZWdyYXYnKSB7XG4gICAgICAgICAgICAkKCdbZGF0YS1ncG0tZ3Jhdl0nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICQoJyNmb290ZXIgLmdyYXYtdmVyc2lvbicpLmh0bWwocmVzcG9uc2UudmVyc2lvbik7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHIoJ2Rpc2FibGVkJykuZmluZCgnPiAuZmEnKS5yZW1vdmVDbGFzcygnZmEtcmVmcmVzaCBmYS1zcGluJykuYWRkQ2xhc3MoJ2ZhLWNsb3VkLWRvd25sb2FkJyk7XG4gICAgfSk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./app/updates/update.js\n"); /***/ }), diff --git a/themes/grav/js/app.js b/themes/grav/js/app.js index 5164736f..09760ba0 100644 --- a/themes/grav/js/app.js +++ b/themes/grav/js/app.js @@ -740,7 +740,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => /* binding */ Updates,\n/* harmony export */ \"Instance\": () => /* binding */ Instance,\n/* harmony export */ \"Notifications\": () => /* reexport safe */ _notifications__WEBPACK_IMPORTED_MODULE_5__.default,\n/* harmony export */ \"Feed\": () => /* reexport safe */ _feed__WEBPACK_IMPORTED_MODULE_6__.default\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mout/array/unique */ \"./node_modules/mout/array/unique.js\");\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mout_array_unique__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_formatbytes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/formatbytes */ \"./app/utils/formatbytes.js\");\n/* harmony import */ var _utils_gpm__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/gpm */ \"./app/utils/gpm.js\");\n/* harmony import */ var _notifications__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./notifications */ \"./app/updates/notifications.js\");\n/* harmony import */ var _feed__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./feed */ \"./app/updates/feed.js\");\n/* harmony import */ var _check__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./check */ \"./app/updates/check.js\");\n/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./update */ \"./app/updates/update.js\");\n/* harmony import */ var _channel_switcher__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./channel-switcher */ \"./app/updates/channel-switcher.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\n\nvar Updates = /*#__PURE__*/function () {\n function Updates() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Updates);\n\n this.setPayload(payload);\n this.task = \"task\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.param_sep);\n }\n\n _createClass(Updates, [{\n key: \"setPayload\",\n value: function setPayload() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.payload = payload;\n return this;\n }\n }, {\n key: \"fetch\",\n value: function fetch() {\n var _this = this;\n\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n _utils_gpm__WEBPACK_IMPORTED_MODULE_4__.Instance.fetch(function (response) {\n return _this.setPayload(response);\n }, force);\n return this;\n }\n }, {\n key: \"maintenance\",\n value: function maintenance() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide';\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#updates [data-update-packages]');\n element[mode === 'show' ? 'fadeIn' : 'fadeOut']();\n\n if (mode === 'hide') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove();\n }\n\n return this;\n }\n }, {\n key: \"grav\",\n value: function grav() {\n var payload = this.payload.grav;\n\n if (payload && payload.isUpdatable) {\n var task = this.task;\n var bar = '';\n\n if (!payload.isSymlink) {\n bar += \"\");\n } else {\n bar += \"\");\n }\n\n bar += \"\\n Grav v\".concat(payload.available, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"! (\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.CURRENT, \" v\").concat(payload.version, \")\\n \");\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').removeClass('hidden');\n\n if (element.is(':empty')) {\n element.hide();\n }\n\n element.addClass('grav').html(\"\".concat(bar)).slideDown(150).parent('#messages').addClass('default-box-shadow');\n }\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#grav-update-button').on('click', function () {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).html(\"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, \" \").concat((0,_utils_formatbytes__WEBPACK_IMPORTED_MODULE_3__.default)(payload.assets['grav-update'].size), \"..\"));\n });\n return this;\n }\n }, {\n key: \"resources\",\n value: function resources() {\n if (!this.payload || !this.payload.resources || !this.payload.resources.total) {\n return this.maintenance('hide');\n }\n\n var is_current_package_latest = true;\n var map = ['plugins', 'themes'];\n var singles = ['plugin', 'theme'];\n var _this$payload$resourc = this.payload.resources,\n plugins = _this$payload$resourc.plugins,\n themes = _this$payload$resourc.themes;\n\n if (!this.payload.resources.total) {\n return this;\n }\n\n [plugins, themes].forEach(function (resources, index) {\n if (!resources || Array.isArray(resources)) {\n return;\n }\n\n var length = Object.keys(resources).length;\n var type = map[index]; // sidebar\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#admin-menu a[href$=\\\"/\".concat(map[index], \"\\\"]\")).find('.badges').addClass('with-updates').find('.badge.updates').text(length);\n var type_translation = ''; // update all\n\n if (type === 'plugins') {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.PLUGINS;\n } else {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.THEMES;\n }\n\n var updateAll = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(type));\n updateAll.css('display', 'block').html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.ALL, \" \").concat(type_translation, \"\\n \\n \").concat(length, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_YOUR, \" \").concat(type_translation.toLowerCase(), \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, \"\\n

\\n \"));\n var existing_slugs = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs') || '';\n\n if (existing_slugs) {\n existing_slugs = existing_slugs.split(',');\n } else {\n existing_slugs = [];\n }\n\n var slugs = mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default()(existing_slugs.concat(Object.keys(resources))).join();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs', \"\".concat(slugs));\n Object.keys(resources).forEach(function (item) {\n // listing page\n var container = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-gpm-\".concat(singles[index], \"=\\\"\").concat(item, \"\\\"]\"));\n var element = container.find('.gpm-name');\n var url = element.find('a');\n var content_wrapper = container.parents('.content-wrapper');\n\n if (type === 'plugins' && !element.find('.badge.update').length) {\n element.append(\"\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, \"!\"));\n content_wrapper.addClass('has-updates');\n } else if (type === 'themes') {\n element.append(\"\"));\n content_wrapper.addClass('has-updates');\n } // details page\n\n\n if (container.length) {\n var details = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(singles[index]));\n\n if (details.length) {\n var releaseType = resources[item].type === 'testing' ? 'test release' : '';\n details.html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), \"\\n \\n v\").concat(resources[item].available, \" \").concat(releaseType, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_THIS, \" \").concat(singles[index], \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"!\\n

\\n \")).css('display', 'block');\n is_current_package_latest = false;\n }\n }\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').removeClass('hidden');\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.content-wrapper').addClass('updates-checked');\n\n if (!is_current_package_latest) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.warning-reinstall-not-latest-release').removeClass('hidden');\n }\n }\n }]);\n\n return Updates;\n}();\n\n\nvar Instance = new Updates();\n // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch\n\n_utils_gpm__WEBPACK_IMPORTED_MODULE_4__.Instance.on('fetched', function (response, raw) {\n Instance.setPayload(response.payload || {});\n Instance.grav().resources();\n});\n\nif (grav_config__WEBPACK_IMPORTED_MODULE_2__.config.enable_auto_updates_check === '1') {\n _utils_gpm__WEBPACK_IMPORTED_MODULE_4__.Instance.fetch();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvaW5kZXguanM/MjBmMCJdLCJuYW1lcyI6WyJVcGRhdGVzIiwicGF5bG9hZCIsInNldFBheWxvYWQiLCJ0YXNrIiwiY29uZmlnIiwiZm9yY2UiLCJncG0iLCJyZXNwb25zZSIsIm1vZGUiLCJlbGVtZW50IiwiJCIsInJlbW92ZUNsYXNzIiwiZmluZCIsInJlbW92ZSIsImdyYXYiLCJpc1VwZGF0YWJsZSIsImJhciIsImlzU3ltbGluayIsInRyYW5zbGF0aW9ucyIsImF2YWlsYWJsZSIsInZlcnNpb24iLCJpcyIsImhpZGUiLCJhZGRDbGFzcyIsImh0bWwiLCJzbGlkZURvd24iLCJwYXJlbnQiLCJvbiIsImZvcm1hdEJ5dGVzIiwiYXNzZXRzIiwic2l6ZSIsInJlc291cmNlcyIsInRvdGFsIiwibWFpbnRlbmFuY2UiLCJpc19jdXJyZW50X3BhY2thZ2VfbGF0ZXN0IiwibWFwIiwic2luZ2xlcyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJmb3JFYWNoIiwiaW5kZXgiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJPYmplY3QiLCJrZXlzIiwidHlwZSIsInRleHQiLCJ0eXBlX3RyYW5zbGF0aW9uIiwidXBkYXRlQWxsIiwiY3NzIiwiam9pbiIsInRvTG93ZXJDYXNlIiwiZXhpc3Rpbmdfc2x1Z3MiLCJhdHRyIiwic3BsaXQiLCJzbHVncyIsInVuaXF1ZSIsImNvbmNhdCIsIml0ZW0iLCJjb250YWluZXIiLCJ1cmwiLCJjb250ZW50X3dyYXBwZXIiLCJwYXJlbnRzIiwiYXBwZW5kIiwiZGV0YWlscyIsInJlbGVhc2VUeXBlIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzdWJzdHIiLCJJbnN0YW5jZSIsInJhdyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7SUFFcUJBLE87QUFDakIscUJBQTBC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QixTQUFTLENBQUM0QixJQUFELENBQVQsQ0FBZ0J4QyxTQUpuQyx1QkFJeUQrQyxXQUp6RCxjQUl3RWhELDBFQUp4RSxjQUk2R2tCLE9BQU8sQ0FBQ0ksS0FBRCxDQUpwSCxjQUkrSHRCLG1GQUovSCxvRUFNR2dDLEdBTkgsQ0FNTyxTQU5QLEVBTWtCLE9BTmxCO0FBUUFoQix1Q0FBeUIsR0FBRyxLQUE1QjtBQUNIO0FBQ0o7QUFDSixTQS9CRDtBQWlDQXhCLHFEQUFDLENBQUMsd0JBQUQsQ0FBRCxDQUE0QkMsV0FBNUIsQ0FBd0MsUUFBeEM7QUFDSCxPQTFFRDtBQTRFQUQsbURBQUMsQ0FBQyxrQkFBRCxDQUFELENBQXNCYSxRQUF0QixDQUErQixpQkFBL0I7O0FBRUEsVUFBSSxDQUFDVyx5QkFBTCxFQUFnQztBQUM1QnhCLHFEQUFDLENBQUMsdUNBQUQsQ0FBRCxDQUEyQ0MsV0FBM0MsQ0FBdUQsUUFBdkQ7QUFDSDtBQUNKOzs7Ozs7O0FBR0wsSUFBSTJELFFBQVEsR0FBRyxJQUFJdEUsT0FBSixFQUFmO0NBR0E7O0FBQ0FNLG1EQUFBLENBQU8sU0FBUCxFQUFrQixVQUFDQyxRQUFELEVBQVdnRSxHQUFYLEVBQW1CO0FBQ2pDRCxVQUFRLENBQUNwRSxVQUFULENBQW9CSyxRQUFRLENBQUNOLE9BQVQsSUFBb0IsRUFBeEM7QUFDQXFFLFVBQVEsQ0FBQ3hELElBQVQsR0FBZ0JpQixTQUFoQjtBQUNILENBSEQ7O0FBS0EsSUFBSTNCLHlFQUFBLEtBQXFDLEdBQXpDLEVBQThDO0FBQzFDRSx3REFBQTtBQUNIIiwiZmlsZSI6Ii4vYXBwL3VwZGF0ZXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHVuaXF1ZSBmcm9tICdtb3V0L2FycmF5L3VuaXF1ZSc7XG5pbXBvcnQgeyBjb25maWcsIHRyYW5zbGF0aW9ucyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCBmb3JtYXRCeXRlcyBmcm9tICcuLi91dGlscy9mb3JtYXRieXRlcyc7XG5pbXBvcnQgeyBJbnN0YW5jZSBhcyBncG0gfSBmcm9tICcuLi91dGlscy9ncG0nO1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25zJztcbmltcG9ydCBGZWVkIGZyb20gJy4vZmVlZCc7XG5pbXBvcnQgJy4vY2hlY2snO1xuaW1wb3J0ICcuL3VwZGF0ZSc7XG5pbXBvcnQgJy4vY2hhbm5lbC1zd2l0Y2hlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwZGF0ZXMge1xuICAgIGNvbnN0cnVjdG9yKHBheWxvYWQgPSB7fSkge1xuICAgICAgICB0aGlzLnNldFBheWxvYWQocGF5bG9hZCk7XG4gICAgICAgIHRoaXMudGFzayA9IGB0YXNrJHtjb25maWcucGFyYW1fc2VwfWA7XG4gICAgfVxuXG4gICAgc2V0UGF5bG9hZChwYXlsb2FkID0ge30pIHtcbiAgICAgICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmZXRjaChmb3JjZSA9IGZhbHNlKSB7XG4gICAgICAgIGdwbS5mZXRjaCgocmVzcG9uc2UpID0+IHRoaXMuc2V0UGF5bG9hZChyZXNwb25zZSksIGZvcmNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBtYWludGVuYW5jZShtb2RlID0gJ2hpZGUnKSB7XG4gICAgICAgIGxldCBlbGVtZW50ID0gJCgnI3VwZGF0ZXMgW2RhdGEtdXBkYXRlLXBhY2thZ2VzXScpO1xuXG4gICAgICAgIGVsZW1lbnRbbW9kZSA9PT0gJ3Nob3cnID8gJ2ZhZGVJbicgOiAnZmFkZU91dCddKCk7XG5cbiAgICAgICAgaWYgKG1vZGUgPT09ICdoaWRlJykge1xuICAgICAgICAgICAgJCgnLmJhZGdlcy53aXRoLXVwZGF0ZXMnKS5yZW1vdmVDbGFzcygnd2l0aC11cGRhdGVzJykuZmluZCgnLmJhZGdlLnVwZGF0ZXMnKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdyYXYoKSB7XG4gICAgICAgIGxldCBwYXlsb2FkID0gdGhpcy5wYXlsb2FkLmdyYXY7XG5cbiAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5pc1VwZGF0YWJsZSkge1xuICAgICAgICAgICAgbGV0IHRhc2sgPSB0aGlzLnRhc2s7XG4gICAgICAgICAgICBsZXQgYmFyID0gJyc7XG5cbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5pc1N5bWxpbmspIHtcbiAgICAgICAgICAgICAgICBiYXIgKz0gYDxidXR0b24gZGF0YS1tYWludGVuYW5jZS11cGRhdGU9XCIke2NvbmZpZy5iYXNlX3VybF9yZWxhdGl2ZX0vdXBkYXRlLmpzb24vJHt0YXNrfXVwZGF0ZWdyYXYvYWRtaW4tbm9uY2Uke2NvbmZpZy5wYXJhbV9zZXB9JHtjb25maWcuYWRtaW5fbm9uY2V9XCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIHNlY29uZGFyeVwiIGlkPVwiZ3Jhdi11cGRhdGUtYnV0dG9uXCI+JHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFURV9HUkFWX05PV308L2J1dHRvbj5gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBiYXIgKz0gYDxzcGFuIGNsYXNzPVwiaGludC0tbGVmdFwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0O1wiIGRhdGEtaGludD1cIiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5HUkFWX1NZTUJPTElDQUxMWV9MSU5LRUR9XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1saW5rXCI+PC9pPjwvc3Bhbj5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiYXIgKz0gYFxuICAgICAgICAgICAgICAgIEdyYXYgPGI+diR7cGF5bG9hZC5hdmFpbGFibGV9PC9iPiAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uSVNfTk9XX0FWQUlMQUJMRX0hIDxzcGFuIGNsYXNzPVwibGVzc1wiPigke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uQ1VSUkVOVH0gdiR7cGF5bG9hZC52ZXJzaW9ufSk8L3NwYW4+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9ICQoJ1tkYXRhLWdwbS1ncmF2XScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoJzplbXB0eScpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5oaWRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2dyYXYnKVxuICAgICAgICAgICAgICAgIC5odG1sKGAke2Jhcn1gKVxuICAgICAgICAgICAgICAgIC5zbGlkZURvd24oMTUwKVxuICAgICAgICAgICAgICAgIC5wYXJlbnQoJyNtZXNzYWdlcycpLmFkZENsYXNzKCdkZWZhdWx0LWJveC1zaGFkb3cnKTtcbiAgICAgICAgfVxuXG4gICAgICAgICQoJyNncmF2LXVwZGF0ZS1idXR0b24nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQodGhpcykuaHRtbChgJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFUSU5HX1BMRUFTRV9XQUlUfSAke2Zvcm1hdEJ5dGVzKHBheWxvYWQuYXNzZXRzWydncmF2LXVwZGF0ZSddLnNpemUpfS4uYCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJlc291cmNlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBheWxvYWQgfHwgIXRoaXMucGF5bG9hZC5yZXNvdXJjZXMgfHwgIXRoaXMucGF5bG9hZC5yZXNvdXJjZXMudG90YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1haW50ZW5hbmNlKCdoaWRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNfY3VycmVudF9wYWNrYWdlX2xhdGVzdCA9IHRydWU7XG4gICAgICAgIGxldCBtYXAgPSBbJ3BsdWdpbnMnLCAndGhlbWVzJ107XG4gICAgICAgIGxldCBzaW5nbGVzID0gWydwbHVnaW4nLCAndGhlbWUnXTtcbiAgICAgICAgbGV0IHsgcGx1Z2lucywgdGhlbWVzIH0gPSB0aGlzLnBheWxvYWQucmVzb3VyY2VzO1xuXG4gICAgICAgIGlmICghdGhpcy5wYXlsb2FkLnJlc291cmNlcy50b3RhbCkgeyByZXR1cm4gdGhpczsgfVxuXG4gICAgICAgIFtwbHVnaW5zLCB0aGVtZXNdLmZvckVhY2goZnVuY3Rpb24ocmVzb3VyY2VzLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKCFyZXNvdXJjZXMgfHwgQXJyYXkuaXNBcnJheShyZXNvdXJjZXMpKSB7IHJldHVybjsgfVxuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IE9iamVjdC5rZXlzKHJlc291cmNlcykubGVuZ3RoO1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBtYXBbaW5kZXhdO1xuXG4gICAgICAgICAgICAvLyBzaWRlYmFyXG4gICAgICAgICAgICAkKGAjYWRtaW4tbWVudSBhW2hyZWYkPVwiLyR7bWFwW2luZGV4XX1cIl1gKVxuICAgICAgICAgICAgICAgIC5maW5kKCcuYmFkZ2VzJylcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3dpdGgtdXBkYXRlcycpXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5iYWRnZS51cGRhdGVzJykudGV4dChsZW5ndGgpO1xuXG4gICAgICAgICAgICB2YXIgdHlwZV90cmFuc2xhdGlvbiA9ICcnO1xuICAgICAgICAgICAgLy8gdXBkYXRlIGFsbFxuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3BsdWdpbnMnKSB7XG4gICAgICAgICAgICAgICAgdHlwZV90cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uUExVR0lOUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHlwZV90cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVEhFTUVTO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdXBkYXRlQWxsID0gJChgLmdyYXYtdXBkYXRlLiR7dHlwZX1gKTtcbiAgICAgICAgICAgIHVwZGF0ZUFsbC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKS5odG1sKGBcbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIHNlY29uZGFyeVwiIGRhdGEtcmVtb2RhbC10YXJnZXQ9XCJ1cGRhdGUtcGFja2FnZXNcIiBkYXRhLXBhY2thZ2VzLXNsdWdzPVwiJHtPYmplY3Qua2V5cyhyZXNvdXJjZXMpLmpvaW4oKX1cIiBkYXRhLSR7c2luZ2xlc1tpbmRleF19LWFjdGlvbj1cInN0YXJ0LXBhY2thZ2VzLXVwZGF0ZVwiPiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5VUERBVEV9ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5BTEx9ICR7dHlwZV90cmFuc2xhdGlvbn08L2E+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1idWxsaG9yblwiPjwvaT5cbiAgICAgICAgICAgICAgICAke2xlbmd0aH0gJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLk9GX1lPVVJ9ICR7dHlwZV90cmFuc2xhdGlvbi50b0xvd2VyQ2FzZSgpfSAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uSEFWRV9BTl9VUERBVEVfQVZBSUxBQkxFfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgYCk7XG5cbiAgICAgICAgICAgIGxldCBleGlzdGluZ19zbHVncyA9ICQoJ1tkYXRhLXVwZGF0ZS1wYWNrYWdlc10nKS5hdHRyKCdkYXRhLXBhY2thZ2VzLXNsdWdzJykgfHwgJyc7XG5cbiAgICAgICAgICAgIGlmIChleGlzdGluZ19zbHVncykge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nX3NsdWdzID0gZXhpc3Rpbmdfc2x1Z3Muc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3Rpbmdfc2x1Z3MgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHNsdWdzID0gdW5pcXVlKGV4aXN0aW5nX3NsdWdzLmNvbmNhdChPYmplY3Qua2V5cyhyZXNvdXJjZXMpKSkuam9pbigpO1xuICAgICAgICAgICAgJCgnW2RhdGEtdXBkYXRlLXBhY2thZ2VzXScpLmF0dHIoJ2RhdGEtcGFja2FnZXMtc2x1Z3MnLCBgJHtzbHVnc31gKTtcblxuICAgICAgICAgICAgT2JqZWN0LmtleXMocmVzb3VyY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAvLyBsaXN0aW5nIHBhZ2VcbiAgICAgICAgICAgICAgICBsZXQgY29udGFpbmVyID0gJChgW2RhdGEtZ3BtLSR7c2luZ2xlc1tpbmRleF19PVwiJHtpdGVtfVwiXWApO1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gY29udGFpbmVyLmZpbmQoJy5ncG0tbmFtZScpO1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSBlbGVtZW50LmZpbmQoJ2EnKTtcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudF93cmFwcGVyID0gY29udGFpbmVyLnBhcmVudHMoJy5jb250ZW50LXdyYXBwZXInKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAncGx1Z2lucycgJiYgIWVsZW1lbnQuZmluZCgnLmJhZGdlLnVwZGF0ZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZChgPGEgY2xhc3M9XCJwbHVnaW4tdXBkYXRlLWJ1dHRvblwiIGhyZWY9XCIke3VybC5hdHRyKCdocmVmJyl9XCI+PHNwYW4gY2xhc3M9XCJiYWRnZSB1cGRhdGVcIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFX0FWQUlMQUJMRX0hPC9zcGFuPjwvYT5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF93cmFwcGVyLmFkZENsYXNzKCdoYXMtdXBkYXRlcycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RoZW1lcycpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoYDxkaXYgY2xhc3M9XCJncG0tcmliYm9uXCI+PGEgaHJlZj1cIiR7dXJsLmF0dHIoJ2hyZWYnKX1cIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFLnRvVXBwZXJDYXNlKCl9PC9hPjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50X3dyYXBwZXIuYWRkQ2xhc3MoJ2hhcy11cGRhdGVzJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZGV0YWlscyBwYWdlXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRldGFpbHMgPSAkKGAuZ3Jhdi11cGRhdGUuJHtzaW5nbGVzW2luZGV4XX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVsZWFzZVR5cGUgPSByZXNvdXJjZXNbaXRlbV0udHlwZSA9PT0gJ3Rlc3RpbmcnID8gJzxzcGFuIGNsYXNzPVwiZ3BtLXRlc3RpbmdcIj50ZXN0IHJlbGVhc2U8L3NwYW4+JyA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscy5odG1sKGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgc2Vjb25kYXJ5XCIgZGF0YS1yZW1vZGFsLXRhcmdldD1cInVwZGF0ZS1wYWNrYWdlc1wiIGRhdGEtcGFja2FnZXMtc2x1Z3M9XCIke2l0ZW19XCIgZGF0YS0ke3NpbmdsZXNbaW5kZXhdfS1hY3Rpb249XCJzdGFydC1wYWNrYWdlLWluc3RhbGxhdGlvblwiPiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5VUERBVEV9ICR7c2luZ2xlc1tpbmRleF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzaW5nbGVzW2luZGV4XS5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYnVsbGhvcm5cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+diR7cmVzb3VyY2VzW2l0ZW1dLmF2YWlsYWJsZX08L3N0cm9uZz4gJHtyZWxlYXNlVHlwZX0gJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLk9GX1RISVN9ICR7c2luZ2xlc1tpbmRleF19ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5JU19OT1dfQVZBSUxBQkxFfSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICBgKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaXNfY3VycmVudF9wYWNrYWdlX2xhdGVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICQoJ1tkYXRhLXVwZGF0ZS1wYWNrYWdlc10nKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICQoJy5jb250ZW50LXdyYXBwZXInKS5hZGRDbGFzcygndXBkYXRlcy1jaGVja2VkJyk7XG5cbiAgICAgICAgaWYgKCFpc19jdXJyZW50X3BhY2thZ2VfbGF0ZXN0KSB7XG4gICAgICAgICAgICAkKCcud2FybmluZy1yZWluc3RhbGwtbm90LWxhdGVzdC1yZWxlYXNlJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5sZXQgSW5zdGFuY2UgPSBuZXcgVXBkYXRlcygpO1xuZXhwb3J0IHsgSW5zdGFuY2UsIE5vdGlmaWNhdGlvbnMsIEZlZWQgfTtcblxuLy8gYXV0b21hdGljYWxseSByZWZyZXNoIFVJIGZvciB1cGRhdGVzIChncmFwaCwgc2lkZWJhciwgcGx1Z2luL3RoZW1lcyBwYWdlcykgYWZ0ZXIgZXZlcnkgZmV0Y2hcbmdwbS5vbignZmV0Y2hlZCcsIChyZXNwb25zZSwgcmF3KSA9PiB7XG4gICAgSW5zdGFuY2Uuc2V0UGF5bG9hZChyZXNwb25zZS5wYXlsb2FkIHx8IHt9KTtcbiAgICBJbnN0YW5jZS5ncmF2KCkucmVzb3VyY2VzKCk7XG59KTtcblxuaWYgKGNvbmZpZy5lbmFibGVfYXV0b191cGRhdGVzX2NoZWNrID09PSAnMScpIHtcbiAgICBncG0uZmV0Y2goKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./app/updates/index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => /* binding */ Updates,\n/* harmony export */ \"Instance\": () => /* binding */ Instance,\n/* harmony export */ \"Notifications\": () => /* reexport safe */ _notifications__WEBPACK_IMPORTED_MODULE_4__.default,\n/* harmony export */ \"Feed\": () => /* reexport safe */ _feed__WEBPACK_IMPORTED_MODULE_5__.default\n/* harmony export */ });\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mout/array/unique */ \"./node_modules/mout/array/unique.js\");\n/* harmony import */ var mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(mout_array_unique__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_gpm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/gpm */ \"./app/utils/gpm.js\");\n/* harmony import */ var _notifications__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./notifications */ \"./app/updates/notifications.js\");\n/* harmony import */ var _feed__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./feed */ \"./app/updates/feed.js\");\n/* harmony import */ var _check__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./check */ \"./app/updates/check.js\");\n/* harmony import */ var _update__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./update */ \"./app/updates/update.js\");\n/* harmony import */ var _channel_switcher__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./channel-switcher */ \"./app/updates/channel-switcher.js\");\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\nvar Updates = /*#__PURE__*/function () {\n function Updates() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, Updates);\n\n this.setPayload(payload);\n this.task = \"task\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.param_sep);\n this.updateURL = '';\n }\n\n _createClass(Updates, [{\n key: \"setPayload\",\n value: function setPayload() {\n var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.payload = payload;\n return this;\n }\n }, {\n key: \"fetch\",\n value: function fetch() {\n var _this = this;\n\n var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n _utils_gpm__WEBPACK_IMPORTED_MODULE_3__.Instance.fetch(function (response) {\n return _this.setPayload(response);\n }, force);\n return this;\n }\n }, {\n key: \"maintenance\",\n value: function maintenance() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'hide';\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#updates [data-update-packages]');\n element[mode === 'show' ? 'fadeIn' : 'fadeOut']();\n\n if (mode === 'hide') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.badges.with-updates').removeClass('with-updates').find('.badge.updates').remove();\n }\n\n return this;\n }\n }, {\n key: \"grav\",\n value: function grav() {\n var payload = this.payload.grav;\n\n if (payload && payload.isUpdatable) {\n var task = this.task;\n var bar = '';\n\n if (!payload.isSymlink) {\n this.updateURL = \"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.base_url_relative, \"/update.json/\").concat(task, \"updategrav/admin-nonce\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.param_sep).concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.config.admin_nonce);\n bar += \"\");\n } else {\n bar += \"\");\n }\n\n bar += \"\\n Grav v\".concat(payload.available, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"! (\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.CURRENT, \" v\").concat(payload.version, \")\\n \");\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').removeClass('hidden');\n\n if (element.is(':empty')) {\n element.hide();\n }\n\n element.addClass('grav').html(\"\".concat(bar)).slideDown(150, function () {\n var c = 5;\n var x = setInterval(function () {\n c -= 1;\n element.find('.pointer-events-none .cnt-down').text('(' + c + 's)');\n }, 1000);\n setTimeout(function () {\n clearInterval(x);\n element.find('.pointer-events-none .cnt-down').remove();\n element.find('.pointer-events-none').removeClass('pointer-events-none');\n }, 5000);\n }).parent('#messages').addClass('default-box-shadow');\n }\n\n return this;\n }\n }, {\n key: \"resources\",\n value: function resources() {\n if (!this.payload || !this.payload.resources || !this.payload.resources.total) {\n return this.maintenance('hide');\n }\n\n var is_current_package_latest = true;\n var map = ['plugins', 'themes'];\n var singles = ['plugin', 'theme'];\n var _this$payload$resourc = this.payload.resources,\n plugins = _this$payload$resourc.plugins,\n themes = _this$payload$resourc.themes;\n\n if (!this.payload.resources.total) {\n return this;\n }\n\n [plugins, themes].forEach(function (resources, index) {\n if (!resources || Array.isArray(resources)) {\n return;\n }\n\n var length = Object.keys(resources).length;\n var type = map[index]; // sidebar\n\n jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"#admin-menu a[href$=\\\"/\".concat(map[index], \"\\\"]\")).find('.badges').addClass('with-updates').find('.badge.updates').text(length);\n var type_translation = ''; // update all\n\n if (type === 'plugins') {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.PLUGINS;\n } else {\n type_translation = grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.THEMES;\n }\n\n var updateAll = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(type));\n updateAll.css('display', 'block').html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.ALL, \" \").concat(type_translation, \"\\n \\n \").concat(length, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_YOUR, \" \").concat(type_translation.toLowerCase(), \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.HAVE_AN_UPDATE_AVAILABLE, \"\\n

\\n \"));\n var existing_slugs = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs') || '';\n\n if (existing_slugs) {\n existing_slugs = existing_slugs.split(',');\n } else {\n existing_slugs = [];\n }\n\n var slugs = mout_array_unique__WEBPACK_IMPORTED_MODULE_1___default()(existing_slugs.concat(Object.keys(resources))).join();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').attr('data-packages-slugs', \"\".concat(slugs));\n Object.keys(resources).forEach(function (item) {\n // listing page\n var container = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\"[data-gpm-\".concat(singles[index], \"=\\\"\").concat(item, \"\\\"]\"));\n var element = container.find('.gpm-name');\n var url = element.find('a');\n var content_wrapper = container.parents('.content-wrapper');\n\n if (type === 'plugins' && !element.find('.badge.update').length) {\n element.append(\"\").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE_AVAILABLE, \"!\"));\n content_wrapper.addClass('has-updates');\n } else if (type === 'themes') {\n element.append(\"\"));\n content_wrapper.addClass('has-updates');\n } // details page\n\n\n if (container.length) {\n var details = jquery__WEBPACK_IMPORTED_MODULE_0___default()(\".grav-update.\".concat(singles[index]));\n\n if (details.length) {\n var releaseType = resources[item].type === 'testing' ? 'test release' : '';\n details.html(\"\\n

\\n \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.UPDATE, \" \").concat(singles[index].charAt(0).toUpperCase() + singles[index].substr(1).toLowerCase(), \"\\n \\n v\").concat(resources[item].available, \" \").concat(releaseType, \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.OF_THIS, \" \").concat(singles[index], \" \").concat(grav_config__WEBPACK_IMPORTED_MODULE_2__.translations.PLUGIN_ADMIN.IS_NOW_AVAILABLE, \"!\\n

\\n \")).css('display', 'block');\n is_current_package_latest = false;\n }\n }\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-update-packages]').removeClass('hidden');\n });\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.content-wrapper').addClass('updates-checked');\n\n if (!is_current_package_latest) {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('.warning-reinstall-not-latest-release').removeClass('hidden');\n }\n }\n }]);\n\n return Updates;\n}();\n\n\nvar Instance = new Updates();\n // automatically refresh UI for updates (graph, sidebar, plugin/themes pages) after every fetch\n\n_utils_gpm__WEBPACK_IMPORTED_MODULE_3__.Instance.on('fetched', function (response, raw) {\n Instance.setPayload(response.payload || {});\n Instance.grav().resources();\n});\n\nif (grav_config__WEBPACK_IMPORTED_MODULE_2__.config.enable_auto_updates_check === '1') {\n _utils_gpm__WEBPACK_IMPORTED_MODULE_3__.Instance.fetch();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvaW5kZXguanM/MjBmMCJdLCJuYW1lcyI6WyJVcGRhdGVzIiwicGF5bG9hZCIsInNldFBheWxvYWQiLCJ0YXNrIiwiY29uZmlnIiwidXBkYXRlVVJMIiwiZm9yY2UiLCJncG0iLCJyZXNwb25zZSIsIm1vZGUiLCJlbGVtZW50IiwiJCIsInJlbW92ZUNsYXNzIiwiZmluZCIsInJlbW92ZSIsImdyYXYiLCJpc1VwZGF0YWJsZSIsImJhciIsImlzU3ltbGluayIsInRyYW5zbGF0aW9ucyIsImF2YWlsYWJsZSIsInZlcnNpb24iLCJpcyIsImhpZGUiLCJhZGRDbGFzcyIsImh0bWwiLCJzbGlkZURvd24iLCJjIiwieCIsInNldEludGVydmFsIiwidGV4dCIsInNldFRpbWVvdXQiLCJjbGVhckludGVydmFsIiwicGFyZW50IiwicmVzb3VyY2VzIiwidG90YWwiLCJtYWludGVuYW5jZSIsImlzX2N1cnJlbnRfcGFja2FnZV9sYXRlc3QiLCJtYXAiLCJzaW5nbGVzIiwicGx1Z2lucyIsInRoZW1lcyIsImZvckVhY2giLCJpbmRleCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsIk9iamVjdCIsImtleXMiLCJ0eXBlIiwidHlwZV90cmFuc2xhdGlvbiIsInVwZGF0ZUFsbCIsImNzcyIsImpvaW4iLCJ0b0xvd2VyQ2FzZSIsImV4aXN0aW5nX3NsdWdzIiwiYXR0ciIsInNwbGl0Iiwic2x1Z3MiLCJ1bmlxdWUiLCJjb25jYXQiLCJpdGVtIiwiY29udGFpbmVyIiwidXJsIiwiY29udGVudF93cmFwcGVyIiwicGFyZW50cyIsImFwcGVuZCIsImRldGFpbHMiLCJyZWxlYXNlVHlwZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic3Vic3RyIiwiSW5zdGFuY2UiLCJyYXciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0lBRXFCQSxPO0FBQ2pCLHFCQUEwQjtBQUFBLFFBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFBQTs7QUFDdEIsU0FBS0MsVUFBTCxDQUFnQkQsT0FBaEI7QUFDQSxTQUFLRSxJQUFMLGlCQUFtQkMseURBQW5CO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixFQUFqQjtBQUNIOzs7O2lDQUV3QjtBQUFBLFVBQWRKLE9BQWMsdUVBQUosRUFBSTtBQUNyQixXQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFFQSxhQUFPLElBQVA7QUFDSDs7OzRCQUVvQjtBQUFBOztBQUFBLFVBQWZLLEtBQWUsdUVBQVAsS0FBTztBQUNqQkMsNERBQUEsQ0FBVSxVQUFDQyxRQUFEO0FBQUEsZUFBYyxLQUFJLENBQUNOLFVBQUwsQ0FBZ0JNLFFBQWhCLENBQWQ7QUFBQSxPQUFWLEVBQW1ERixLQUFuRDtBQUVBLGFBQU8sSUFBUDtBQUNIOzs7a0NBRTBCO0FBQUEsVUFBZkcsSUFBZSx1RUFBUixNQUFRO0FBQ3ZCLFVBQUlDLE9BQU8sR0FBR0MsNkNBQUMsQ0FBQyxpQ0FBRCxDQUFmO0FBRUFELGFBQU8sQ0FBQ0QsSUFBSSxLQUFLLE1BQVQsR0FBa0IsUUFBbEIsR0FBNkIsU0FBOUIsQ0FBUDs7QUFFQSxVQUFJQSxJQUFJLEtBQUssTUFBYixFQUFxQjtBQUNqQkUscURBQUMsQ0FBQyxzQkFBRCxDQUFELENBQTBCQyxXQUExQixDQUFzQyxjQUF0QyxFQUFzREMsSUFBdEQsQ0FBMkQsZ0JBQTNELEVBQTZFQyxNQUE3RTtBQUNIOztBQUVELGFBQU8sSUFBUDtBQUNIOzs7MkJBRU07QUFDSCxVQUFJYixPQUFPLEdBQUcsS0FBS0EsT0FBTCxDQUFhYyxJQUEzQjs7QUFFQSxVQUFJZCxPQUFPLElBQUlBLE9BQU8sQ0FBQ2UsV0FBdkIsRUFBb0M7QUFDaEMsWUFBSWIsSUFBSSxHQUFHLEtBQUtBLElBQWhCO0FBQ0EsWUFBSWMsR0FBRyxHQUFHLEVBQVY7O0FBRUEsWUFBSSxDQUFDaEIsT0FBTyxDQUFDaUIsU0FBYixFQUF3QjtBQUNwQixlQUFLYixTQUFMLGFBQW9CRCxpRUFBcEIsMEJBQTRERCxJQUE1RCxtQ0FBeUZDLHlEQUF6RixTQUE0R0EsMkRBQTVHO0FBQ0FhLGFBQUcsZ0pBQW1JRSxrRkFBbkksbURBQUg7QUFDSCxTQUhELE1BR087QUFDSEYsYUFBRyw2RUFBaUVFLDJGQUFqRSxpREFBSDtBQUNIOztBQUVERixXQUFHLHlDQUNZaEIsT0FBTyxDQUFDbUIsU0FEcEIsa0JBQ3FDRCxtRkFEckMscUNBQ3dHQSwwRUFEeEcsZUFDOElsQixPQUFPLENBQUNvQixPQUR0SiwyQkFBSDtBQUlBLFlBQUlYLE9BQU8sR0FBR0MsNkNBQUMsQ0FBQyxpQkFBRCxDQUFELENBQXFCQyxXQUFyQixDQUFpQyxRQUFqQyxDQUFkOztBQUVBLFlBQUlGLE9BQU8sQ0FBQ1ksRUFBUixDQUFXLFFBQVgsQ0FBSixFQUEwQjtBQUN0QlosaUJBQU8sQ0FBQ2EsSUFBUjtBQUNIOztBQUVEYixlQUFPLENBQ0ZjLFFBREwsQ0FDYyxNQURkLEVBRUtDLElBRkwsV0FFYVIsR0FGYixHQUdLUyxTQUhMLENBR2UsR0FIZixFQUdvQixZQUFXO0FBQ3ZCLGNBQUlDLENBQUMsR0FBRyxDQUFSO0FBQ0EsY0FBSUMsQ0FBQyxHQUFHQyxXQUFXLENBQUMsWUFBVztBQUMzQkYsYUFBQyxJQUFJLENBQUw7QUFDQWpCLG1CQUFPLENBQUNHLElBQVIsQ0FBYSxnQ0FBYixFQUErQ2lCLElBQS9DLENBQW9ELE1BQU1ILENBQU4sR0FBVSxJQUE5RDtBQUNILFdBSGtCLEVBR2hCLElBSGdCLENBQW5CO0FBS0FJLG9CQUFVLENBQUMsWUFBVztBQUNsQkMseUJBQWEsQ0FBQ0osQ0FBRCxDQUFiO0FBQ0FsQixtQkFBTyxDQUFDRyxJQUFSLENBQWEsZ0NBQWIsRUFBK0NDLE1BQS9DO0FBQ0FKLG1CQUFPLENBQUNHLElBQVIsQ0FBYSxzQkFBYixFQUFxQ0QsV0FBckMsQ0FBaUQscUJBQWpEO0FBQ0gsV0FKUyxFQUlQLElBSk8sQ0FBVjtBQUtILFNBZkwsRUFnQktxQixNQWhCTCxDQWdCWSxXQWhCWixFQWdCeUJULFFBaEJ6QixDQWdCa0Msb0JBaEJsQztBQWlCSDs7QUFFRCxhQUFPLElBQVA7QUFDSDs7O2dDQUVXO0FBQ1IsVUFBSSxDQUFDLEtBQUt2QixPQUFOLElBQWlCLENBQUMsS0FBS0EsT0FBTCxDQUFhaUMsU0FBL0IsSUFBNEMsQ0FBQyxLQUFLakMsT0FBTCxDQUFhaUMsU0FBYixDQUF1QkMsS0FBeEUsRUFBK0U7QUFDM0UsZUFBTyxLQUFLQyxXQUFMLENBQWlCLE1BQWpCLENBQVA7QUFDSDs7QUFFRCxVQUFJQyx5QkFBeUIsR0FBRyxJQUFoQztBQUNBLFVBQUlDLEdBQUcsR0FBRyxDQUFDLFNBQUQsRUFBWSxRQUFaLENBQVY7QUFDQSxVQUFJQyxPQUFPLEdBQUcsQ0FBQyxRQUFELEVBQVcsT0FBWCxDQUFkO0FBUFEsa0NBUWtCLEtBQUt0QyxPQUFMLENBQWFpQyxTQVIvQjtBQUFBLFVBUUZNLE9BUkUseUJBUUZBLE9BUkU7QUFBQSxVQVFPQyxNQVJQLHlCQVFPQSxNQVJQOztBQVVSLFVBQUksQ0FBQyxLQUFLeEMsT0FBTCxDQUFhaUMsU0FBYixDQUF1QkMsS0FBNUIsRUFBbUM7QUFBRSxlQUFPLElBQVA7QUFBYzs7QUFFbkQsT0FBQ0ssT0FBRCxFQUFVQyxNQUFWLEVBQWtCQyxPQUFsQixDQUEwQixVQUFTUixTQUFULEVBQW9CUyxLQUFwQixFQUEyQjtBQUNqRCxZQUFJLENBQUNULFNBQUQsSUFBY1UsS0FBSyxDQUFDQyxPQUFOLENBQWNYLFNBQWQsQ0FBbEIsRUFBNEM7QUFBRTtBQUFTOztBQUN2RCxZQUFJWSxNQUFNLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZZCxTQUFaLEVBQXVCWSxNQUFwQztBQUNBLFlBQUlHLElBQUksR0FBR1gsR0FBRyxDQUFDSyxLQUFELENBQWQsQ0FIaUQsQ0FLakQ7O0FBQ0FoQyxxREFBQyxrQ0FBMEIyQixHQUFHLENBQUNLLEtBQUQsQ0FBN0IsU0FBRCxDQUNLOUIsSUFETCxDQUNVLFNBRFYsRUFFS1csUUFGTCxDQUVjLGNBRmQsRUFHS1gsSUFITCxDQUdVLGdCQUhWLEVBRzRCaUIsSUFINUIsQ0FHaUNnQixNQUhqQztBQUtBLFlBQUlJLGdCQUFnQixHQUFHLEVBQXZCLENBWGlELENBWWpEOztBQUVBLFlBQUlELElBQUksS0FBSyxTQUFiLEVBQXdCO0FBQ3BCQywwQkFBZ0IsR0FBRy9CLDBFQUFuQjtBQUNILFNBRkQsTUFFTztBQUNIK0IsMEJBQWdCLEdBQUcvQix5RUFBbkI7QUFDSDs7QUFFRCxZQUFJZ0MsU0FBUyxHQUFHeEMsNkNBQUMsd0JBQWlCc0MsSUFBakIsRUFBakI7QUFDQUUsaUJBQVMsQ0FBQ0MsR0FBVixDQUFjLFNBQWQsRUFBeUIsT0FBekIsRUFBa0MzQixJQUFsQyxrS0FFbUhzQixNQUFNLENBQUNDLElBQVAsQ0FBWWQsU0FBWixFQUF1Qm1CLElBQXZCLEVBRm5ILHFCQUUwSmQsT0FBTyxDQUFDSSxLQUFELENBRmpLLCtDQUUyTXhCLHlFQUYzTSxjQUUrT0Esc0VBRi9PLGNBRWdSK0IsZ0JBRmhSLHFGQUlNSixNQUpOLGNBSWdCM0IsMEVBSmhCLGNBSXFEK0IsZ0JBQWdCLENBQUNJLFdBQWpCLEVBSnJELGNBSXVGbkMsMkZBSnZGO0FBUUEsWUFBSW9DLGNBQWMsR0FBRzVDLDZDQUFDLENBQUMsd0JBQUQsQ0FBRCxDQUE0QjZDLElBQTVCLENBQWlDLHFCQUFqQyxLQUEyRCxFQUFoRjs7QUFFQSxZQUFJRCxjQUFKLEVBQW9CO0FBQ2hCQSx3QkFBYyxHQUFHQSxjQUFjLENBQUNFLEtBQWYsQ0FBcUIsR0FBckIsQ0FBakI7QUFDSCxTQUZELE1BRU87QUFDSEYsd0JBQWMsR0FBRyxFQUFqQjtBQUNIOztBQUVELFlBQUlHLEtBQUssR0FBR0Msd0RBQU0sQ0FBQ0osY0FBYyxDQUFDSyxNQUFmLENBQXNCYixNQUFNLENBQUNDLElBQVAsQ0FBWWQsU0FBWixDQUF0QixDQUFELENBQU4sQ0FBc0RtQixJQUF0RCxFQUFaO0FBQ0ExQyxxREFBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEI2QyxJQUE1QixDQUFpQyxxQkFBakMsWUFBMkRFLEtBQTNEO0FBRUFYLGNBQU0sQ0FBQ0MsSUFBUCxDQUFZZCxTQUFaLEVBQXVCUSxPQUF2QixDQUErQixVQUFTbUIsSUFBVCxFQUFlO0FBQzFDO0FBQ0EsY0FBSUMsU0FBUyxHQUFHbkQsNkNBQUMscUJBQWM0QixPQUFPLENBQUNJLEtBQUQsQ0FBckIsZ0JBQWlDa0IsSUFBakMsU0FBakI7QUFDQSxjQUFJbkQsT0FBTyxHQUFHb0QsU0FBUyxDQUFDakQsSUFBVixDQUFlLFdBQWYsQ0FBZDtBQUNBLGNBQUlrRCxHQUFHLEdBQUdyRCxPQUFPLENBQUNHLElBQVIsQ0FBYSxHQUFiLENBQVY7QUFDQSxjQUFJbUQsZUFBZSxHQUFHRixTQUFTLENBQUNHLE9BQVYsQ0FBa0Isa0JBQWxCLENBQXRCOztBQUVBLGNBQUloQixJQUFJLEtBQUssU0FBVCxJQUFzQixDQUFDdkMsT0FBTyxDQUFDRyxJQUFSLENBQWEsZUFBYixFQUE4QmlDLE1BQXpELEVBQWlFO0FBQzdEcEMsbUJBQU8sQ0FBQ3dELE1BQVIsb0RBQXdESCxHQUFHLENBQUNQLElBQUosQ0FBUyxNQUFULENBQXhELDZDQUF3R3JDLG1GQUF4RztBQUNBNkMsMkJBQWUsQ0FBQ3hDLFFBQWhCLENBQXlCLGFBQXpCO0FBQ0gsV0FIRCxNQUdPLElBQUl5QixJQUFJLEtBQUssUUFBYixFQUF1QjtBQUMxQnZDLG1CQUFPLENBQUN3RCxNQUFSLCtDQUFtREgsR0FBRyxDQUFDUCxJQUFKLENBQVMsTUFBVCxDQUFuRCxnQkFBd0VyQyxxRkFBQSxFQUF4RTtBQUNBNkMsMkJBQWUsQ0FBQ3hDLFFBQWhCLENBQXlCLGFBQXpCO0FBQ0gsV0FieUMsQ0FlMUM7OztBQUNBLGNBQUlzQyxTQUFTLENBQUNoQixNQUFkLEVBQXNCO0FBQ2xCLGdCQUFJcUIsT0FBTyxHQUFHeEQsNkNBQUMsd0JBQWlCNEIsT0FBTyxDQUFDSSxLQUFELENBQXhCLEVBQWY7O0FBQ0EsZ0JBQUl3QixPQUFPLENBQUNyQixNQUFaLEVBQW9CO0FBQ2hCLGtCQUFJc0IsV0FBVyxHQUFHbEMsU0FBUyxDQUFDMkIsSUFBRCxDQUFULENBQWdCWixJQUFoQixLQUF5QixTQUF6QixHQUFxQywrQ0FBckMsR0FBdUYsRUFBekc7QUFDQWtCLHFCQUFPLENBQUMxQyxJQUFSLGtNQUV1SG9DLElBRnZILHFCQUVxSXRCLE9BQU8sQ0FBQ0ksS0FBRCxDQUY1SSxvREFFMkx4Qix5RUFGM0wsY0FFK05vQixPQUFPLENBQUNJLEtBQUQsQ0FBUCxDQUFlMEIsTUFBZixDQUFzQixDQUF0QixFQUF5QkMsV0FBekIsS0FBeUMvQixPQUFPLENBQUNJLEtBQUQsQ0FBUCxDQUFlNEIsTUFBZixDQUFzQixDQUF0QixFQUF5QmpCLFdBQXpCLEVBRnhRLDhIQUltQnBCLFNBQVMsQ0FBQzJCLElBQUQsQ0FBVCxDQUFnQnpDLFNBSm5DLHVCQUl5RGdELFdBSnpELGNBSXdFakQsMEVBSnhFLGNBSTZHb0IsT0FBTyxDQUFDSSxLQUFELENBSnBILGNBSStIeEIsbUZBSi9ILG9FQU1HaUMsR0FOSCxDQU1PLFNBTlAsRUFNa0IsT0FObEI7QUFRQWYsdUNBQXlCLEdBQUcsS0FBNUI7QUFDSDtBQUNKO0FBQ0osU0EvQkQ7QUFpQ0ExQixxREFBQyxDQUFDLHdCQUFELENBQUQsQ0FBNEJDLFdBQTVCLENBQXdDLFFBQXhDO0FBQ0gsT0ExRUQ7QUE0RUFELG1EQUFDLENBQUMsa0JBQUQsQ0FBRCxDQUFzQmEsUUFBdEIsQ0FBK0IsaUJBQS9COztBQUVBLFVBQUksQ0FBQ2EseUJBQUwsRUFBZ0M7QUFDNUIxQixxREFBQyxDQUFDLHVDQUFELENBQUQsQ0FBMkNDLFdBQTNDLENBQXVELFFBQXZEO0FBQ0g7QUFDSjs7Ozs7OztBQUdMLElBQUk0RCxRQUFRLEdBQUcsSUFBSXhFLE9BQUosRUFBZjtDQUdBOztBQUNBTyxtREFBQSxDQUFPLFNBQVAsRUFBa0IsVUFBQ0MsUUFBRCxFQUFXaUUsR0FBWCxFQUFtQjtBQUNqQ0QsVUFBUSxDQUFDdEUsVUFBVCxDQUFvQk0sUUFBUSxDQUFDUCxPQUFULElBQW9CLEVBQXhDO0FBQ0F1RSxVQUFRLENBQUN6RCxJQUFULEdBQWdCbUIsU0FBaEI7QUFDSCxDQUhEOztBQUtBLElBQUk5Qix5RUFBQSxLQUFxQyxHQUF6QyxFQUE4QztBQUMxQ0csd0RBQUE7QUFDSCIsImZpbGUiOiIuL2FwcC91cGRhdGVzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB1bmlxdWUgZnJvbSAnbW91dC9hcnJheS91bmlxdWUnO1xuaW1wb3J0IHsgY29uZmlnLCB0cmFuc2xhdGlvbnMgfSBmcm9tICdncmF2LWNvbmZpZyc7XG5pbXBvcnQgeyBJbnN0YW5jZSBhcyBncG0gfSBmcm9tICcuLi91dGlscy9ncG0nO1xuaW1wb3J0IE5vdGlmaWNhdGlvbnMgZnJvbSAnLi9ub3RpZmljYXRpb25zJztcblxuaW1wb3J0IEZlZWQgZnJvbSAnLi9mZWVkJztcbmltcG9ydCAnLi9jaGVjayc7XG5pbXBvcnQgJy4vdXBkYXRlJztcbmltcG9ydCAnLi9jaGFubmVsLXN3aXRjaGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXBkYXRlcyB7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZCA9IHt9KSB7XG4gICAgICAgIHRoaXMuc2V0UGF5bG9hZChwYXlsb2FkKTtcbiAgICAgICAgdGhpcy50YXNrID0gYHRhc2ske2NvbmZpZy5wYXJhbV9zZXB9YDtcbiAgICAgICAgdGhpcy51cGRhdGVVUkwgPSAnJztcbiAgICB9XG5cbiAgICBzZXRQYXlsb2FkKHBheWxvYWQgPSB7fSkge1xuICAgICAgICB0aGlzLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZldGNoKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgICAgZ3BtLmZldGNoKChyZXNwb25zZSkgPT4gdGhpcy5zZXRQYXlsb2FkKHJlc3BvbnNlKSwgZm9yY2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG1haW50ZW5hbmNlKG1vZGUgPSAnaGlkZScpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSAkKCcjdXBkYXRlcyBbZGF0YS11cGRhdGUtcGFja2FnZXNdJyk7XG5cbiAgICAgICAgZWxlbWVudFttb2RlID09PSAnc2hvdycgPyAnZmFkZUluJyA6ICdmYWRlT3V0J10oKTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gJ2hpZGUnKSB7XG4gICAgICAgICAgICAkKCcuYmFkZ2VzLndpdGgtdXBkYXRlcycpLnJlbW92ZUNsYXNzKCd3aXRoLXVwZGF0ZXMnKS5maW5kKCcuYmFkZ2UudXBkYXRlcycpLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ3JhdigpIHtcbiAgICAgICAgbGV0IHBheWxvYWQgPSB0aGlzLnBheWxvYWQuZ3JhdjtcblxuICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmlzVXBkYXRhYmxlKSB7XG4gICAgICAgICAgICBsZXQgdGFzayA9IHRoaXMudGFzaztcbiAgICAgICAgICAgIGxldCBiYXIgPSAnJztcblxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlzU3ltbGluaykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVVJMID0gYCR7Y29uZmlnLmJhc2VfdXJsX3JlbGF0aXZlfS91cGRhdGUuanNvbi8ke3Rhc2t9dXBkYXRlZ3Jhdi9hZG1pbi1ub25jZSR7Y29uZmlnLnBhcmFtX3NlcH0ke2NvbmZpZy5hZG1pbl9ub25jZX1gO1xuICAgICAgICAgICAgICAgIGJhciArPSBgPGJ1dHRvbiBkYXRhLXJlbW9kYWwtdGFyZ2V0PVwidXBkYXRlLWdyYXZcIiBjbGFzcz1cImJ1dHRvbiBidXR0b24tc21hbGwgc2Vjb25kYXJ5IHBvaW50ZXItZXZlbnRzLW5vbmVcIiBpZD1cImdyYXYtdXBkYXRlLWJ1dHRvblwiPiR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5VUERBVEVfR1JBVl9OT1d9IDxzcGFuIGNsYXNzPVwiY250LWRvd25cIj4oNXMpPC9zcGFuPjwvYnV0dG9uPmA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJhciArPSBgPHNwYW4gY2xhc3M9XCJoaW50LS1sZWZ0XCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7XCIgZGF0YS1oaW50PVwiJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLkdSQVZfU1lNQk9MSUNBTExZX0xJTktFRH1cIj48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWxpbmtcIj48L2k+PC9zcGFuPmA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJhciArPSBgXG4gICAgICAgICAgICAgICAgR3JhdiA8Yj52JHtwYXlsb2FkLmF2YWlsYWJsZX08L2I+ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5JU19OT1dfQVZBSUxBQkxFfSEgPHNwYW4gY2xhc3M9XCJsZXNzXCI+KCR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5DVVJSRU5UfSB2JHtwYXlsb2FkLnZlcnNpb259KTwvc3Bhbj5cbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gJCgnW2RhdGEtZ3BtLWdyYXZdJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pcygnOmVtcHR5JykpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmhpZGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnZ3JhdicpXG4gICAgICAgICAgICAgICAgLmh0bWwoYCR7YmFyfWApXG4gICAgICAgICAgICAgICAgLnNsaWRlRG93bigxNTAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IDU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB4ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjIC09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoJy5wb2ludGVyLWV2ZW50cy1ub25lIC5jbnQtZG93bicpLnRleHQoJygnICsgYyArICdzKScpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZmluZCgnLnBvaW50ZXItZXZlbnRzLW5vbmUgLmNudC1kb3duJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoJy5wb2ludGVyLWV2ZW50cy1ub25lJykucmVtb3ZlQ2xhc3MoJ3BvaW50ZXItZXZlbnRzLW5vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwMCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGFyZW50KCcjbWVzc2FnZXMnKS5hZGRDbGFzcygnZGVmYXVsdC1ib3gtc2hhZG93Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXNvdXJjZXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXlsb2FkIHx8ICF0aGlzLnBheWxvYWQucmVzb3VyY2VzIHx8ICF0aGlzLnBheWxvYWQucmVzb3VyY2VzLnRvdGFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWludGVuYW5jZSgnaGlkZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGlzX2N1cnJlbnRfcGFja2FnZV9sYXRlc3QgPSB0cnVlO1xuICAgICAgICBsZXQgbWFwID0gWydwbHVnaW5zJywgJ3RoZW1lcyddO1xuICAgICAgICBsZXQgc2luZ2xlcyA9IFsncGx1Z2luJywgJ3RoZW1lJ107XG4gICAgICAgIGxldCB7IHBsdWdpbnMsIHRoZW1lcyB9ID0gdGhpcy5wYXlsb2FkLnJlc291cmNlcztcblxuICAgICAgICBpZiAoIXRoaXMucGF5bG9hZC5yZXNvdXJjZXMudG90YWwpIHsgcmV0dXJuIHRoaXM7IH1cblxuICAgICAgICBbcGx1Z2lucywgdGhlbWVzXS5mb3JFYWNoKGZ1bmN0aW9uKHJlc291cmNlcywgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghcmVzb3VyY2VzIHx8IEFycmF5LmlzQXJyYXkocmVzb3VyY2VzKSkgeyByZXR1cm47IH1cbiAgICAgICAgICAgIGxldCBsZW5ndGggPSBPYmplY3Qua2V5cyhyZXNvdXJjZXMpLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCB0eXBlID0gbWFwW2luZGV4XTtcblxuICAgICAgICAgICAgLy8gc2lkZWJhclxuICAgICAgICAgICAgJChgI2FkbWluLW1lbnUgYVtocmVmJD1cIi8ke21hcFtpbmRleF19XCJdYClcbiAgICAgICAgICAgICAgICAuZmluZCgnLmJhZGdlcycpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCd3aXRoLXVwZGF0ZXMnKVxuICAgICAgICAgICAgICAgIC5maW5kKCcuYmFkZ2UudXBkYXRlcycpLnRleHQobGVuZ3RoKTtcblxuICAgICAgICAgICAgdmFyIHR5cGVfdHJhbnNsYXRpb24gPSAnJztcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBhbGxcblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdwbHVnaW5zJykge1xuICAgICAgICAgICAgICAgIHR5cGVfdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlBMVUdJTlM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHR5cGVfdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlRIRU1FUztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVwZGF0ZUFsbCA9ICQoYC5ncmF2LXVwZGF0ZS4ke3R5cGV9YCk7XG4gICAgICAgICAgICB1cGRhdGVBbGwuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykuaHRtbChgXG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnV0dG9uIGJ1dHRvbi1zbWFsbCBzZWNvbmRhcnlcIiBkYXRhLXJlbW9kYWwtdGFyZ2V0PVwidXBkYXRlLXBhY2thZ2VzXCIgZGF0YS1wYWNrYWdlcy1zbHVncz1cIiR7T2JqZWN0LmtleXMocmVzb3VyY2VzKS5qb2luKCl9XCIgZGF0YS0ke3NpbmdsZXNbaW5kZXhdfS1hY3Rpb249XCJzdGFydC1wYWNrYWdlcy11cGRhdGVcIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFfSAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uQUxMfSAke3R5cGVfdHJhbnNsYXRpb259PC9hPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYnVsbGhvcm5cIj48L2k+XG4gICAgICAgICAgICAgICAgJHtsZW5ndGh9ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5PRl9ZT1VSfSAke3R5cGVfdHJhbnNsYXRpb24udG9Mb3dlckNhc2UoKX0gJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLkhBVkVfQU5fVVBEQVRFX0FWQUlMQUJMRX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIGApO1xuXG4gICAgICAgICAgICBsZXQgZXhpc3Rpbmdfc2x1Z3MgPSAkKCdbZGF0YS11cGRhdGUtcGFja2FnZXNdJykuYXR0cignZGF0YS1wYWNrYWdlcy1zbHVncycpIHx8ICcnO1xuXG4gICAgICAgICAgICBpZiAoZXhpc3Rpbmdfc2x1Z3MpIHtcbiAgICAgICAgICAgICAgICBleGlzdGluZ19zbHVncyA9IGV4aXN0aW5nX3NsdWdzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4aXN0aW5nX3NsdWdzID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzbHVncyA9IHVuaXF1ZShleGlzdGluZ19zbHVncy5jb25jYXQoT2JqZWN0LmtleXMocmVzb3VyY2VzKSkpLmpvaW4oKTtcbiAgICAgICAgICAgICQoJ1tkYXRhLXVwZGF0ZS1wYWNrYWdlc10nKS5hdHRyKCdkYXRhLXBhY2thZ2VzLXNsdWdzJywgYCR7c2x1Z3N9YCk7XG5cbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJlc291cmNlcykuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgLy8gbGlzdGluZyBwYWdlXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9ICQoYFtkYXRhLWdwbS0ke3NpbmdsZXNbaW5kZXhdfT1cIiR7aXRlbX1cIl1gKTtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGNvbnRhaW5lci5maW5kKCcuZ3BtLW5hbWUnKTtcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gZWxlbWVudC5maW5kKCdhJyk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnRfd3JhcHBlciA9IGNvbnRhaW5lci5wYXJlbnRzKCcuY29udGVudC13cmFwcGVyJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3BsdWdpbnMnICYmICFlbGVtZW50LmZpbmQoJy5iYWRnZS51cGRhdGUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmQoYDxhIGNsYXNzPVwicGx1Z2luLXVwZGF0ZS1idXR0b25cIiBocmVmPVwiJHt1cmwuYXR0cignaHJlZicpfVwiPjxzcGFuIGNsYXNzPVwiYmFkZ2UgdXBkYXRlXCI+JHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFURV9BVkFJTEFCTEV9ITwvc3Bhbj48L2E+YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfd3JhcHBlci5hZGRDbGFzcygnaGFzLXVwZGF0ZXMnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0aGVtZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kKGA8ZGl2IGNsYXNzPVwiZ3BtLXJpYmJvblwiPjxhIGhyZWY9XCIke3VybC5hdHRyKCdocmVmJyl9XCI+JHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFURS50b1VwcGVyQ2FzZSgpfTwvYT48L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF93cmFwcGVyLmFkZENsYXNzKCdoYXMtdXBkYXRlcycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGRldGFpbHMgcGFnZVxuICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZXRhaWxzID0gJChgLmdyYXYtdXBkYXRlLiR7c2luZ2xlc1tpbmRleF19YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlbGVhc2VUeXBlID0gcmVzb3VyY2VzW2l0ZW1dLnR5cGUgPT09ICd0ZXN0aW5nJyA/ICc8c3BhbiBjbGFzcz1cImdwbS10ZXN0aW5nXCI+dGVzdCByZWxlYXNlPC9zcGFuPicgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuaHRtbChgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNtYWxsIHNlY29uZGFyeVwiIGRhdGEtcmVtb2RhbC10YXJnZXQ9XCJ1cGRhdGUtcGFja2FnZXNcIiBkYXRhLXBhY2thZ2VzLXNsdWdzPVwiJHtpdGVtfVwiIGRhdGEtJHtzaW5nbGVzW2luZGV4XX0tYWN0aW9uPVwic3RhcnQtcGFja2FnZS1pbnN0YWxsYXRpb25cIj4ke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uVVBEQVRFfSAke3NpbmdsZXNbaW5kZXhdLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc2luZ2xlc1tpbmRleF0uc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCl9PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJ1bGxob3JuXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnYke3Jlc291cmNlc1tpdGVtXS5hdmFpbGFibGV9PC9zdHJvbmc+ICR7cmVsZWFzZVR5cGV9ICR7dHJhbnNsYXRpb25zLlBMVUdJTl9BRE1JTi5PRl9USElTfSAke3NpbmdsZXNbaW5kZXhdfSAke3RyYW5zbGF0aW9ucy5QTFVHSU5fQURNSU4uSVNfTk9XX0FWQUlMQUJMRX0hXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgYCkuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzX2N1cnJlbnRfcGFja2FnZV9sYXRlc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkKCdbZGF0YS11cGRhdGUtcGFja2FnZXNdJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICB9KTtcblxuICAgICAgICAkKCcuY29udGVudC13cmFwcGVyJykuYWRkQ2xhc3MoJ3VwZGF0ZXMtY2hlY2tlZCcpO1xuXG4gICAgICAgIGlmICghaXNfY3VycmVudF9wYWNrYWdlX2xhdGVzdCkge1xuICAgICAgICAgICAgJCgnLndhcm5pbmctcmVpbnN0YWxsLW5vdC1sYXRlc3QtcmVsZWFzZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubGV0IEluc3RhbmNlID0gbmV3IFVwZGF0ZXMoKTtcbmV4cG9ydCB7IEluc3RhbmNlLCBOb3RpZmljYXRpb25zLCBGZWVkIH07XG5cbi8vIGF1dG9tYXRpY2FsbHkgcmVmcmVzaCBVSSBmb3IgdXBkYXRlcyAoZ3JhcGgsIHNpZGViYXIsIHBsdWdpbi90aGVtZXMgcGFnZXMpIGFmdGVyIGV2ZXJ5IGZldGNoXG5ncG0ub24oJ2ZldGNoZWQnLCAocmVzcG9uc2UsIHJhdykgPT4ge1xuICAgIEluc3RhbmNlLnNldFBheWxvYWQocmVzcG9uc2UucGF5bG9hZCB8fCB7fSk7XG4gICAgSW5zdGFuY2UuZ3JhdigpLnJlc291cmNlcygpO1xufSk7XG5cbmlmIChjb25maWcuZW5hYmxlX2F1dG9fdXBkYXRlc19jaGVjayA9PT0gJzEnKSB7XG4gICAgZ3BtLmZldGNoKCk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./app/updates/index.js\n"); /***/ }), @@ -769,7 +769,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_request__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/request */ \"./app/utils/request.js\");\n\n // Dashboard update and Grav update\n\njquery__WEBPACK_IMPORTED_MODULE_0___default()('body').on('click', '[data-maintenance-update]', function () {\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this);\n var url = element.data('maintenanceUpdate');\n element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');\n (0,_utils_request__WEBPACK_IMPORTED_MODULE_1__.default)(url, function (response) {\n if (response.type === 'updategrav') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').remove();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#footer .grav-version').html(response.version);\n }\n\n element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download');\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvdXBkYXRlLmpzPzQ3NjkiXSwibmFtZXMiOlsiJCIsIm9uIiwiZWxlbWVudCIsInVybCIsImRhdGEiLCJhdHRyIiwiZmluZCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJ0eXBlIiwicmVtb3ZlIiwiaHRtbCIsInZlcnNpb24iLCJyZW1vdmVBdHRyIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Q0FHQTs7QUFDQUEsNkNBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsRUFBVixDQUFhLE9BQWIsRUFBc0IsMkJBQXRCLEVBQW1ELFlBQVc7QUFDMUQsTUFBSUMsT0FBTyxHQUFHRiw2Q0FBQyxDQUFDLElBQUQsQ0FBZjtBQUNBLE1BQUlHLEdBQUcsR0FBR0QsT0FBTyxDQUFDRSxJQUFSLENBQWEsbUJBQWIsQ0FBVjtBQUVBRixTQUFPLENBQUNHLElBQVIsQ0FBYSxVQUFiLEVBQXlCLFVBQXpCLEVBQXFDQyxJQUFyQyxDQUEwQyxPQUExQyxFQUFtREMsV0FBbkQsQ0FBK0QsbUJBQS9ELEVBQW9GQyxRQUFwRixDQUE2RixvQkFBN0Y7QUFFQUMseURBQU8sQ0FBQ04sR0FBRCxFQUFNLFVBQUNPLFFBQUQsRUFBYztBQUN2QixRQUFJQSxRQUFRLENBQUNDLElBQVQsS0FBa0IsWUFBdEIsRUFBb0M7QUFDaENYLG1EQUFDLENBQUMsaUJBQUQsQ0FBRCxDQUFxQlksTUFBckI7QUFDQVosbURBQUMsQ0FBQyx1QkFBRCxDQUFELENBQTJCYSxJQUEzQixDQUFnQ0gsUUFBUSxDQUFDSSxPQUF6QztBQUNIOztBQUVEWixXQUFPLENBQUNhLFVBQVIsQ0FBbUIsVUFBbkIsRUFBK0JULElBQS9CLENBQW9DLE9BQXBDLEVBQTZDQyxXQUE3QyxDQUF5RCxvQkFBekQsRUFBK0VDLFFBQS9FLENBQXdGLG1CQUF4RjtBQUNILEdBUE0sQ0FBUDtBQVFILENBZEQiLCJmaWxlIjoiLi9hcHAvdXBkYXRlcy91cGRhdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vdXRpbHMvcmVxdWVzdCc7XG5cbi8vIERhc2hib2FyZCB1cGRhdGUgYW5kIEdyYXYgdXBkYXRlXG4kKCdib2R5Jykub24oJ2NsaWNrJywgJ1tkYXRhLW1haW50ZW5hbmNlLXVwZGF0ZV0nLCBmdW5jdGlvbigpIHtcbiAgICBsZXQgZWxlbWVudCA9ICQodGhpcyk7XG4gICAgbGV0IHVybCA9IGVsZW1lbnQuZGF0YSgnbWFpbnRlbmFuY2VVcGRhdGUnKTtcblxuICAgIGVsZW1lbnQuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKS5maW5kKCc+IC5mYScpLnJlbW92ZUNsYXNzKCdmYS1jbG91ZC1kb3dubG9hZCcpLmFkZENsYXNzKCdmYS1yZWZyZXNoIGZhLXNwaW4nKTtcblxuICAgIHJlcXVlc3QodXJsLCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICd1cGRhdGVncmF2Jykge1xuICAgICAgICAgICAgJCgnW2RhdGEtZ3BtLWdyYXZdJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAkKCcjZm9vdGVyIC5ncmF2LXZlcnNpb24nKS5odG1sKHJlc3BvbnNlLnZlcnNpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpLmZpbmQoJz4gLmZhJykucmVtb3ZlQ2xhc3MoJ2ZhLXJlZnJlc2ggZmEtc3BpbicpLmFkZENsYXNzKCdmYS1jbG91ZC1kb3dubG9hZCcpO1xuICAgIH0pO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./app/updates/update.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ \"jquery\");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! grav-config */ \"grav-config\");\n/* harmony import */ var grav_config__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(grav_config__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_formatbytes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/formatbytes */ \"./app/utils/formatbytes.js\");\n/* harmony import */ var _utils_request__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/request */ \"./app/utils/request.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index */ \"./app/updates/index.js\");\n\n\n\n\n // Dashboard update and Grav update\n\njquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on('click.remodal', '[data-remodal-id=\"update-grav\"] [data-remodal-action=\"confirm\"]', function () {\n var element = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#grav-update-button');\n element.html(\"\".concat(grav_config__WEBPACK_IMPORTED_MODULE_1__.translations.PLUGIN_ADMIN.UPDATING_PLEASE_WAIT, \" \").concat((0,_utils_formatbytes__WEBPACK_IMPORTED_MODULE_2__.default)(_index__WEBPACK_IMPORTED_MODULE_4__.Instance.payload.grav.assets[\"grav-update\"].size), \"..\"));\n element.attr('disabled', 'disabled').find('> .fa').removeClass('fa-cloud-download').addClass('fa-refresh fa-spin');\n (0,_utils_request__WEBPACK_IMPORTED_MODULE_3__.default)(_index__WEBPACK_IMPORTED_MODULE_4__.Instance.updateURL, function (response) {\n if (response.type === 'updategrav') {\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-gpm-grav]').remove();\n jquery__WEBPACK_IMPORTED_MODULE_0___default()('#footer .grav-version').html(response.version);\n }\n\n element.removeAttr('disabled').find('> .fa').removeClass('fa-refresh fa-spin').addClass('fa-cloud-download');\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vYXBwL3VwZGF0ZXMvdXBkYXRlLmpzPzQ3NjkiXSwibmFtZXMiOlsiJCIsImRvY3VtZW50Iiwib24iLCJlbGVtZW50IiwiaHRtbCIsInRyYW5zbGF0aW9ucyIsImZvcm1hdEJ5dGVzIiwiVXBkYXRlIiwiYXR0ciIsImZpbmQiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwidHlwZSIsInJlbW92ZSIsInZlcnNpb24iLCJyZW1vdmVBdHRyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0FBLDZDQUFDLENBQUNDLFFBQUQsQ0FBRCxDQUFZQyxFQUFaLENBQWUsZUFBZixFQUFnQyxpRUFBaEMsRUFBbUcsWUFBTTtBQUNyRyxNQUFNQyxPQUFPLEdBQUdILDZDQUFDLENBQUMscUJBQUQsQ0FBakI7QUFDQUcsU0FBTyxDQUFDQyxJQUFSLFdBQWdCQyx1RkFBaEIsY0FBa0VDLDJEQUFXLENBQUNDLG9GQUFELENBQTdFO0FBRUFKLFNBQU8sQ0FBQ0ssSUFBUixDQUFhLFVBQWIsRUFBeUIsVUFBekIsRUFBcUNDLElBQXJDLENBQTBDLE9BQTFDLEVBQW1EQyxXQUFuRCxDQUErRCxtQkFBL0QsRUFBb0ZDLFFBQXBGLENBQTZGLG9CQUE3RjtBQUVBQyx5REFBTyxDQUFDTCxzREFBRCxFQUFtQixVQUFDTSxRQUFELEVBQWM7QUFDcEMsUUFBSUEsUUFBUSxDQUFDQyxJQUFULEtBQWtCLFlBQXRCLEVBQW9DO0FBQ2hDZCxtREFBQyxDQUFDLGlCQUFELENBQUQsQ0FBcUJlLE1BQXJCO0FBQ0FmLG1EQUFDLENBQUMsdUJBQUQsQ0FBRCxDQUEyQkksSUFBM0IsQ0FBZ0NTLFFBQVEsQ0FBQ0csT0FBekM7QUFDSDs7QUFFRGIsV0FBTyxDQUFDYyxVQUFSLENBQW1CLFVBQW5CLEVBQStCUixJQUEvQixDQUFvQyxPQUFwQyxFQUE2Q0MsV0FBN0MsQ0FBeUQsb0JBQXpELEVBQStFQyxRQUEvRSxDQUF3RixtQkFBeEY7QUFDSCxHQVBNLENBQVA7QUFRSCxDQWREIiwiZmlsZSI6Ii4vYXBwL3VwZGF0ZXMvdXBkYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7IHRyYW5zbGF0aW9ucyB9IGZyb20gJ2dyYXYtY29uZmlnJztcbmltcG9ydCBmb3JtYXRCeXRlcyBmcm9tICcuLi91dGlscy9mb3JtYXRieXRlcyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi91dGlscy9yZXF1ZXN0JztcbmltcG9ydCB7IEluc3RhbmNlIGFzIFVwZGF0ZSB9IGZyb20gJy4vaW5kZXgnO1xuXG4vLyBEYXNoYm9hcmQgdXBkYXRlIGFuZCBHcmF2IHVwZGF0ZVxuJChkb2N1bWVudCkub24oJ2NsaWNrLnJlbW9kYWwnLCAnW2RhdGEtcmVtb2RhbC1pZD1cInVwZGF0ZS1ncmF2XCJdIFtkYXRhLXJlbW9kYWwtYWN0aW9uPVwiY29uZmlybVwiXScsICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gJCgnI2dyYXYtdXBkYXRlLWJ1dHRvbicpO1xuICAgIGVsZW1lbnQuaHRtbChgJHt0cmFuc2xhdGlvbnMuUExVR0lOX0FETUlOLlVQREFUSU5HX1BMRUFTRV9XQUlUfSAke2Zvcm1hdEJ5dGVzKFVwZGF0ZS5wYXlsb2FkLmdyYXYuYXNzZXRzWydncmF2LXVwZGF0ZSddLnNpemUpfS4uYCk7XG5cbiAgICBlbGVtZW50LmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJykuZmluZCgnPiAuZmEnKS5yZW1vdmVDbGFzcygnZmEtY2xvdWQtZG93bmxvYWQnKS5hZGRDbGFzcygnZmEtcmVmcmVzaCBmYS1zcGluJyk7XG5cbiAgICByZXF1ZXN0KFVwZGF0ZS51cGRhdGVVUkwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ3VwZGF0ZWdyYXYnKSB7XG4gICAgICAgICAgICAkKCdbZGF0YS1ncG0tZ3Jhdl0nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICQoJyNmb290ZXIgLmdyYXYtdmVyc2lvbicpLmh0bWwocmVzcG9uc2UudmVyc2lvbik7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHIoJ2Rpc2FibGVkJykuZmluZCgnPiAuZmEnKS5yZW1vdmVDbGFzcygnZmEtcmVmcmVzaCBmYS1zcGluJykuYWRkQ2xhc3MoJ2ZhLWNsb3VkLWRvd25sb2FkJyk7XG4gICAgfSk7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./app/updates/update.js\n"); /***/ }), diff --git a/themes/grav/js/vendor.min.js b/themes/grav/js/vendor.min.js index 9ee67ceb..5b540a8c 100644 --- a/themes/grav/js/vendor.min.js +++ b/themes/grav/js/vendor.min.js @@ -75,7 +75,6 @@ eval("/*!\n * The buffer module from node.js, for the browser.\n *\n * @author \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module) => { eval("var canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nmodule.exports = canUseDOM;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2Nhbi11c2UtZG9tL2luZGV4LmpzPzAzMTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jYW4tdXNlLWRvbS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjYW5Vc2VET00gPSAhIShcbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgd2luZG93LmRvY3VtZW50ICYmXG4gIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNhblVzZURPTTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/can-use-dom/index.js\n"); @@ -88,7 +87,6 @@ eval("var canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__.g, __webpack_exports__, module, __webpack_require__.* */ -/*! CommonJS bailout: this is used directly at 15:2-6 */ /***/ (function(module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (root, factory) {\n if (true) {\n // AMD. Register as an anonymous module unless amdModuleId is set\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return (root['Chartist'] = factory());\n }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(this, function () {\n\n/* Chartist.js 0.11.4\n * Copyright © 2019 Gion Kunz\n * Free to use under either the WTFPL license or the MIT license.\n * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-WTFPL\n * https://raw.githubusercontent.com/gionkunz/chartist-js/master/LICENSE-MIT\n */\n/**\n * The core module of Chartist that is mainly providing static functions and higher level functions for chart modules.\n *\n * @module Chartist.Core\n */\nvar Chartist = {\n version: '0.11.4'\n};\n\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * This object contains all namespaces used within Chartist.\n *\n * @memberof Chartist.Core\n * @type {{svg: string, xmlns: string, xhtml: string, xlink: string, ct: string}}\n */\n Chartist.namespaces = {\n svg: 'http://www.w3.org/2000/svg',\n xmlns: 'http://www.w3.org/2000/xmlns/',\n xhtml: 'http://www.w3.org/1999/xhtml',\n xlink: 'http://www.w3.org/1999/xlink',\n ct: 'http://gionkunz.github.com/chartist-js/ct'\n };\n\n /**\n * Helps to simplify functional style code\n *\n * @memberof Chartist.Core\n * @param {*} n This exact value will be returned by the noop function\n * @return {*} The same value that was provided to the n parameter\n */\n Chartist.noop = function (n) {\n return n;\n };\n\n /**\n * Generates a-z from a number 0 to 26\n *\n * @memberof Chartist.Core\n * @param {Number} n A number from 0 to 26 that will result in a letter a-z\n * @return {String} A character from a-z based on the input number n\n */\n Chartist.alphaNumerate = function (n) {\n // Limit to a-z\n return String.fromCharCode(97 + n % 26);\n };\n\n /**\n * Simple recursive object extend\n *\n * @memberof Chartist.Core\n * @param {Object} target Target object where the source will be merged into\n * @param {Object...} sources This object (objects) will be merged into target and then target is returned\n * @return {Object} An object that has the same reference as target but is extended and merged with the properties of source\n */\n Chartist.extend = function (target) {\n var i, source, sourceProp;\n target = target || {};\n\n for (i = 1; i < arguments.length; i++) {\n source = arguments[i];\n for (var prop in source) {\n sourceProp = source[prop];\n if (typeof sourceProp === 'object' && sourceProp !== null && !(sourceProp instanceof Array)) {\n target[prop] = Chartist.extend(target[prop], sourceProp);\n } else {\n target[prop] = sourceProp;\n }\n }\n }\n\n return target;\n };\n\n /**\n * Replaces all occurrences of subStr in str with newSubStr and returns a new string.\n *\n * @memberof Chartist.Core\n * @param {String} str\n * @param {String} subStr\n * @param {String} newSubStr\n * @return {String}\n */\n Chartist.replaceAll = function(str, subStr, newSubStr) {\n return str.replace(new RegExp(subStr, 'g'), newSubStr);\n };\n\n /**\n * Converts a number to a string with a unit. If a string is passed then this will be returned unmodified.\n *\n * @memberof Chartist.Core\n * @param {Number} value\n * @param {String} unit\n * @return {String} Returns the passed number value with unit.\n */\n Chartist.ensureUnit = function(value, unit) {\n if(typeof value === 'number') {\n value = value + unit;\n }\n\n return value;\n };\n\n /**\n * Converts a number or string to a quantity object.\n *\n * @memberof Chartist.Core\n * @param {String|Number} input\n * @return {Object} Returns an object containing the value as number and the unit as string.\n */\n Chartist.quantity = function(input) {\n if (typeof input === 'string') {\n var match = (/^(\\d+)\\s*(.*)$/g).exec(input);\n return {\n value : +match[1],\n unit: match[2] || undefined\n };\n }\n return { value: input };\n };\n\n /**\n * This is a wrapper around document.querySelector that will return the query if it's already of type Node\n *\n * @memberof Chartist.Core\n * @param {String|Node} query The query to use for selecting a Node or a DOM node that will be returned directly\n * @return {Node}\n */\n Chartist.querySelector = function(query) {\n return query instanceof Node ? query : document.querySelector(query);\n };\n\n /**\n * Functional style helper to produce array with given length initialized with undefined values\n *\n * @memberof Chartist.Core\n * @param length\n * @return {Array}\n */\n Chartist.times = function(length) {\n return Array.apply(null, new Array(length));\n };\n\n /**\n * Sum helper to be used in reduce functions\n *\n * @memberof Chartist.Core\n * @param previous\n * @param current\n * @return {*}\n */\n Chartist.sum = function(previous, current) {\n return previous + (current ? current : 0);\n };\n\n /**\n * Multiply helper to be used in `Array.map` for multiplying each value of an array with a factor.\n *\n * @memberof Chartist.Core\n * @param {Number} factor\n * @returns {Function} Function that can be used in `Array.map` to multiply each value in an array\n */\n Chartist.mapMultiply = function(factor) {\n return function(num) {\n return num * factor;\n };\n };\n\n /**\n * Add helper to be used in `Array.map` for adding a addend to each value of an array.\n *\n * @memberof Chartist.Core\n * @param {Number} addend\n * @returns {Function} Function that can be used in `Array.map` to add a addend to each value in an array\n */\n Chartist.mapAdd = function(addend) {\n return function(num) {\n return num + addend;\n };\n };\n\n /**\n * Map for multi dimensional arrays where their nested arrays will be mapped in serial. The output array will have the length of the largest nested array. The callback function is called with variable arguments where each argument is the nested array value (or undefined if there are no more values).\n *\n * @memberof Chartist.Core\n * @param arr\n * @param cb\n * @return {Array}\n */\n Chartist.serialMap = function(arr, cb) {\n var result = [],\n length = Math.max.apply(null, arr.map(function(e) {\n return e.length;\n }));\n\n Chartist.times(length).forEach(function(e, index) {\n var args = arr.map(function(e) {\n return e[index];\n });\n\n result[index] = cb.apply(null, args);\n });\n\n return result;\n };\n\n /**\n * This helper function can be used to round values with certain precision level after decimal. This is used to prevent rounding errors near float point precision limit.\n *\n * @memberof Chartist.Core\n * @param {Number} value The value that should be rounded with precision\n * @param {Number} [digits] The number of digits after decimal used to do the rounding\n * @returns {number} Rounded value\n */\n Chartist.roundWithPrecision = function(value, digits) {\n var precision = Math.pow(10, digits || Chartist.precision);\n return Math.round(value * precision) / precision;\n };\n\n /**\n * Precision level used internally in Chartist for rounding. If you require more decimal places you can increase this number.\n *\n * @memberof Chartist.Core\n * @type {number}\n */\n Chartist.precision = 8;\n\n /**\n * A map with characters to escape for strings to be safely used as attribute values.\n *\n * @memberof Chartist.Core\n * @type {Object}\n */\n Chartist.escapingMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n };\n\n /**\n * This function serializes arbitrary data to a string. In case of data that can't be easily converted to a string, this function will create a wrapper object and serialize the data using JSON.stringify. The outcoming string will always be escaped using Chartist.escapingMap.\n * If called with null or undefined the function will return immediately with null or undefined.\n *\n * @memberof Chartist.Core\n * @param {Number|String|Object} data\n * @return {String}\n */\n Chartist.serialize = function(data) {\n if(data === null || data === undefined) {\n return data;\n } else if(typeof data === 'number') {\n data = ''+data;\n } else if(typeof data === 'object') {\n data = JSON.stringify({data: data});\n }\n\n return Object.keys(Chartist.escapingMap).reduce(function(result, key) {\n return Chartist.replaceAll(result, key, Chartist.escapingMap[key]);\n }, data);\n };\n\n /**\n * This function de-serializes a string previously serialized with Chartist.serialize. The string will always be unescaped using Chartist.escapingMap before it's returned. Based on the input value the return type can be Number, String or Object. JSON.parse is used with try / catch to see if the unescaped string can be parsed into an Object and this Object will be returned on success.\n *\n * @memberof Chartist.Core\n * @param {String} data\n * @return {String|Number|Object}\n */\n Chartist.deserialize = function(data) {\n if(typeof data !== 'string') {\n return data;\n }\n\n data = Object.keys(Chartist.escapingMap).reduce(function(result, key) {\n return Chartist.replaceAll(result, Chartist.escapingMap[key], key);\n }, data);\n\n try {\n data = JSON.parse(data);\n data = data.data !== undefined ? data.data : data;\n } catch(e) {}\n\n return data;\n };\n\n /**\n * Create or reinitialize the SVG element for the chart\n *\n * @memberof Chartist.Core\n * @param {Node} container The containing DOM Node object that will be used to plant the SVG element\n * @param {String} width Set the width of the SVG element. Default is 100%\n * @param {String} height Set the height of the SVG element. Default is 100%\n * @param {String} className Specify a class to be added to the SVG element\n * @return {Object} The created/reinitialized SVG element\n */\n Chartist.createSvg = function (container, width, height, className) {\n var svg;\n\n width = width || '100%';\n height = height || '100%';\n\n // Check if there is a previous SVG element in the container that contains the Chartist XML namespace and remove it\n // Since the DOM API does not support namespaces we need to manually search the returned list http://www.w3.org/TR/selectors-api/\n Array.prototype.slice.call(container.querySelectorAll('svg')).filter(function filterChartistSvgObjects(svg) {\n return svg.getAttributeNS(Chartist.namespaces.xmlns, 'ct');\n }).forEach(function removePreviousElement(svg) {\n container.removeChild(svg);\n });\n\n // Create svg object with width and height or use 100% as default\n svg = new Chartist.Svg('svg').attr({\n width: width,\n height: height\n }).addClass(className);\n\n svg._node.style.width = width;\n svg._node.style.height = height;\n\n // Add the DOM node to our container\n container.appendChild(svg._node);\n\n return svg;\n };\n\n /**\n * Ensures that the data object passed as second argument to the charts is present and correctly initialized.\n *\n * @param {Object} data The data object that is passed as second argument to the charts\n * @return {Object} The normalized data object\n */\n Chartist.normalizeData = function(data, reverse, multi) {\n var labelCount;\n var output = {\n raw: data,\n normalized: {}\n };\n\n // Check if we should generate some labels based on existing series data\n output.normalized.series = Chartist.getDataArray({\n series: data.series || []\n }, reverse, multi);\n\n // If all elements of the normalized data array are arrays we're dealing with\n // multi series data and we need to find the largest series if they are un-even\n if (output.normalized.series.every(function(value) {\n return value instanceof Array;\n })) {\n // Getting the series with the the most elements\n labelCount = Math.max.apply(null, output.normalized.series.map(function(series) {\n return series.length;\n }));\n } else {\n // We're dealing with Pie data so we just take the normalized array length\n labelCount = output.normalized.series.length;\n }\n\n output.normalized.labels = (data.labels || []).slice();\n // Padding the labels to labelCount with empty strings\n Array.prototype.push.apply(\n output.normalized.labels,\n Chartist.times(Math.max(0, labelCount - output.normalized.labels.length)).map(function() {\n return '';\n })\n );\n\n if(reverse) {\n Chartist.reverseData(output.normalized);\n }\n\n return output;\n };\n\n /**\n * This function safely checks if an objects has an owned property.\n *\n * @param {Object} object The object where to check for a property\n * @param {string} property The property name\n * @returns {boolean} Returns true if the object owns the specified property\n */\n Chartist.safeHasProperty = function(object, property) {\n return object !== null &&\n typeof object === 'object' &&\n object.hasOwnProperty(property);\n };\n\n /**\n * Checks if a value is considered a hole in the data series.\n *\n * @param {*} value\n * @returns {boolean} True if the value is considered a data hole\n */\n Chartist.isDataHoleValue = function(value) {\n return value === null ||\n value === undefined ||\n (typeof value === 'number' && isNaN(value));\n };\n\n /**\n * Reverses the series, labels and series data arrays.\n *\n * @memberof Chartist.Core\n * @param data\n */\n Chartist.reverseData = function(data) {\n data.labels.reverse();\n data.series.reverse();\n for (var i = 0; i < data.series.length; i++) {\n if(typeof(data.series[i]) === 'object' && data.series[i].data !== undefined) {\n data.series[i].data.reverse();\n } else if(data.series[i] instanceof Array) {\n data.series[i].reverse();\n }\n }\n };\n\n /**\n * Convert data series into plain array\n *\n * @memberof Chartist.Core\n * @param {Object} data The series object that contains the data to be visualized in the chart\n * @param {Boolean} [reverse] If true the whole data is reversed by the getDataArray call. This will modify the data object passed as first parameter. The labels as well as the series order is reversed. The whole series data arrays are reversed too.\n * @param {Boolean} [multi] Create a multi dimensional array from a series data array where a value object with `x` and `y` values will be created.\n * @return {Array} A plain array that contains the data to be visualized in the chart\n */\n Chartist.getDataArray = function(data, reverse, multi) {\n // Recursively walks through nested arrays and convert string values to numbers and objects with value properties\n // to values. Check the tests in data core -> data normalization for a detailed specification of expected values\n function recursiveConvert(value) {\n if(Chartist.safeHasProperty(value, 'value')) {\n // We are dealing with value object notation so we need to recurse on value property\n return recursiveConvert(value.value);\n } else if(Chartist.safeHasProperty(value, 'data')) {\n // We are dealing with series object notation so we need to recurse on data property\n return recursiveConvert(value.data);\n } else if(value instanceof Array) {\n // Data is of type array so we need to recurse on the series\n return value.map(recursiveConvert);\n } else if(Chartist.isDataHoleValue(value)) {\n // We're dealing with a hole in the data and therefore need to return undefined\n // We're also returning undefined for multi value output\n return undefined;\n } else {\n // We need to prepare multi value output (x and y data)\n if(multi) {\n var multiValue = {};\n\n // Single series value arrays are assumed to specify the Y-Axis value\n // For example: [1, 2] => [{x: undefined, y: 1}, {x: undefined, y: 2}]\n // If multi is a string then it's assumed that it specified which dimension should be filled as default\n if(typeof multi === 'string') {\n multiValue[multi] = Chartist.getNumberOrUndefined(value);\n } else {\n multiValue.y = Chartist.getNumberOrUndefined(value);\n }\n\n multiValue.x = value.hasOwnProperty('x') ? Chartist.getNumberOrUndefined(value.x) : multiValue.x;\n multiValue.y = value.hasOwnProperty('y') ? Chartist.getNumberOrUndefined(value.y) : multiValue.y;\n\n return multiValue;\n\n } else {\n // We can return simple data\n return Chartist.getNumberOrUndefined(value);\n }\n }\n }\n\n return data.series.map(recursiveConvert);\n };\n\n /**\n * Converts a number into a padding object.\n *\n * @memberof Chartist.Core\n * @param {Object|Number} padding\n * @param {Number} [fallback] This value is used to fill missing values if a incomplete padding object was passed\n * @returns {Object} Returns a padding object containing top, right, bottom, left properties filled with the padding number passed in as argument. If the argument is something else than a number (presumably already a correct padding object) then this argument is directly returned.\n */\n Chartist.normalizePadding = function(padding, fallback) {\n fallback = fallback || 0;\n\n return typeof padding === 'number' ? {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n } : {\n top: typeof padding.top === 'number' ? padding.top : fallback,\n right: typeof padding.right === 'number' ? padding.right : fallback,\n bottom: typeof padding.bottom === 'number' ? padding.bottom : fallback,\n left: typeof padding.left === 'number' ? padding.left : fallback\n };\n };\n\n Chartist.getMetaData = function(series, index) {\n var value = series.data ? series.data[index] : series[index];\n return value ? value.meta : undefined;\n };\n\n /**\n * Calculate the order of magnitude for the chart scale\n *\n * @memberof Chartist.Core\n * @param {Number} value The value Range of the chart\n * @return {Number} The order of magnitude\n */\n Chartist.orderOfMagnitude = function (value) {\n return Math.floor(Math.log(Math.abs(value)) / Math.LN10);\n };\n\n /**\n * Project a data length into screen coordinates (pixels)\n *\n * @memberof Chartist.Core\n * @param {Object} axisLength The svg element for the chart\n * @param {Number} length Single data value from a series array\n * @param {Object} bounds All the values to set the bounds of the chart\n * @return {Number} The projected data length in pixels\n */\n Chartist.projectLength = function (axisLength, length, bounds) {\n return length / bounds.range * axisLength;\n };\n\n /**\n * Get the height of the area in the chart for the data series\n *\n * @memberof Chartist.Core\n * @param {Object} svg The svg element for the chart\n * @param {Object} options The Object that contains all the optional values for the chart\n * @return {Number} The height of the area in the chart for the data series\n */\n Chartist.getAvailableHeight = function (svg, options) {\n return Math.max((Chartist.quantity(options.height).value || svg.height()) - (options.chartPadding.top + options.chartPadding.bottom) - options.axisX.offset, 0);\n };\n\n /**\n * Get highest and lowest value of data array. This Array contains the data that will be visualized in the chart.\n *\n * @memberof Chartist.Core\n * @param {Array} data The array that contains the data to be visualized in the chart\n * @param {Object} options The Object that contains the chart options\n * @param {String} dimension Axis dimension 'x' or 'y' used to access the correct value and high / low configuration\n * @return {Object} An object that contains the highest and lowest value that will be visualized on the chart.\n */\n Chartist.getHighLow = function (data, options, dimension) {\n // TODO: Remove workaround for deprecated global high / low config. Axis high / low configuration is preferred\n options = Chartist.extend({}, options, dimension ? options['axis' + dimension.toUpperCase()] : {});\n\n var highLow = {\n high: options.high === undefined ? -Number.MAX_VALUE : +options.high,\n low: options.low === undefined ? Number.MAX_VALUE : +options.low\n };\n var findHigh = options.high === undefined;\n var findLow = options.low === undefined;\n\n // Function to recursively walk through arrays and find highest and lowest number\n function recursiveHighLow(data) {\n if(data === undefined) {\n return undefined;\n } else if(data instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n recursiveHighLow(data[i]);\n }\n } else {\n var value = dimension ? +data[dimension] : +data;\n\n if (findHigh && value > highLow.high) {\n highLow.high = value;\n }\n\n if (findLow && value < highLow.low) {\n highLow.low = value;\n }\n }\n }\n\n // Start to find highest and lowest number recursively\n if(findHigh || findLow) {\n recursiveHighLow(data);\n }\n\n // Overrides of high / low based on reference value, it will make sure that the invisible reference value is\n // used to generate the chart. This is useful when the chart always needs to contain the position of the\n // invisible reference value in the view i.e. for bipolar scales.\n if (options.referenceValue || options.referenceValue === 0) {\n highLow.high = Math.max(options.referenceValue, highLow.high);\n highLow.low = Math.min(options.referenceValue, highLow.low);\n }\n\n // If high and low are the same because of misconfiguration or flat data (only the same value) we need\n // to set the high or low to 0 depending on the polarity\n if (highLow.high <= highLow.low) {\n // If both values are 0 we set high to 1\n if (highLow.low === 0) {\n highLow.high = 1;\n } else if (highLow.low < 0) {\n // If we have the same negative value for the bounds we set bounds.high to 0\n highLow.high = 0;\n } else if (highLow.high > 0) {\n // If we have the same positive value for the bounds we set bounds.low to 0\n highLow.low = 0;\n } else {\n // If data array was empty, values are Number.MAX_VALUE and -Number.MAX_VALUE. Set bounds to prevent errors\n highLow.high = 1;\n highLow.low = 0;\n }\n }\n\n return highLow;\n };\n\n /**\n * Checks if a value can be safely coerced to a number. This includes all values except null which result in finite numbers when coerced. This excludes NaN, since it's not finite.\n *\n * @memberof Chartist.Core\n * @param value\n * @returns {Boolean}\n */\n Chartist.isNumeric = function(value) {\n return value === null ? false : isFinite(value);\n };\n\n /**\n * Returns true on all falsey values except the numeric value 0.\n *\n * @memberof Chartist.Core\n * @param value\n * @returns {boolean}\n */\n Chartist.isFalseyButZero = function(value) {\n return !value && value !== 0;\n };\n\n /**\n * Returns a number if the passed parameter is a valid number or the function will return undefined. On all other values than a valid number, this function will return undefined.\n *\n * @memberof Chartist.Core\n * @param value\n * @returns {*}\n */\n Chartist.getNumberOrUndefined = function(value) {\n return Chartist.isNumeric(value) ? +value : undefined;\n };\n\n /**\n * Checks if provided value object is multi value (contains x or y properties)\n *\n * @memberof Chartist.Core\n * @param value\n */\n Chartist.isMultiValue = function(value) {\n return typeof value === 'object' && ('x' in value || 'y' in value);\n };\n\n /**\n * Gets a value from a dimension `value.x` or `value.y` while returning value directly if it's a valid numeric value. If the value is not numeric and it's falsey this function will return `defaultValue`.\n *\n * @memberof Chartist.Core\n * @param value\n * @param dimension\n * @param defaultValue\n * @returns {*}\n */\n Chartist.getMultiValue = function(value, dimension) {\n if(Chartist.isMultiValue(value)) {\n return Chartist.getNumberOrUndefined(value[dimension || 'y']);\n } else {\n return Chartist.getNumberOrUndefined(value);\n }\n };\n\n /**\n * Pollard Rho Algorithm to find smallest factor of an integer value. There are more efficient algorithms for factorization, but this one is quite efficient and not so complex.\n *\n * @memberof Chartist.Core\n * @param {Number} num An integer number where the smallest factor should be searched for\n * @returns {Number} The smallest integer factor of the parameter num.\n */\n Chartist.rho = function(num) {\n if(num === 1) {\n return num;\n }\n\n function gcd(p, q) {\n if (p % q === 0) {\n return q;\n } else {\n return gcd(q, p % q);\n }\n }\n\n function f(x) {\n return x * x + 1;\n }\n\n var x1 = 2, x2 = 2, divisor;\n if (num % 2 === 0) {\n return 2;\n }\n\n do {\n x1 = f(x1) % num;\n x2 = f(f(x2)) % num;\n divisor = gcd(Math.abs(x1 - x2), num);\n } while (divisor === 1);\n\n return divisor;\n };\n\n /**\n * Calculate and retrieve all the bounds for the chart and return them in one array\n *\n * @memberof Chartist.Core\n * @param {Number} axisLength The length of the Axis used for\n * @param {Object} highLow An object containing a high and low property indicating the value range of the chart.\n * @param {Number} scaleMinSpace The minimum projected length a step should result in\n * @param {Boolean} onlyInteger\n * @return {Object} All the values to set the bounds of the chart\n */\n Chartist.getBounds = function (axisLength, highLow, scaleMinSpace, onlyInteger) {\n var i,\n optimizationCounter = 0,\n newMin,\n newMax,\n bounds = {\n high: highLow.high,\n low: highLow.low\n };\n\n bounds.valueRange = bounds.high - bounds.low;\n bounds.oom = Chartist.orderOfMagnitude(bounds.valueRange);\n bounds.step = Math.pow(10, bounds.oom);\n bounds.min = Math.floor(bounds.low / bounds.step) * bounds.step;\n bounds.max = Math.ceil(bounds.high / bounds.step) * bounds.step;\n bounds.range = bounds.max - bounds.min;\n bounds.numberOfSteps = Math.round(bounds.range / bounds.step);\n\n // Optimize scale step by checking if subdivision is possible based on horizontalGridMinSpace\n // If we are already below the scaleMinSpace value we will scale up\n var length = Chartist.projectLength(axisLength, bounds.step, bounds);\n var scaleUp = length < scaleMinSpace;\n var smallestFactor = onlyInteger ? Chartist.rho(bounds.range) : 0;\n\n // First check if we should only use integer steps and if step 1 is still larger than scaleMinSpace so we can use 1\n if(onlyInteger && Chartist.projectLength(axisLength, 1, bounds) >= scaleMinSpace) {\n bounds.step = 1;\n } else if(onlyInteger && smallestFactor < bounds.step && Chartist.projectLength(axisLength, smallestFactor, bounds) >= scaleMinSpace) {\n // If step 1 was too small, we can try the smallest factor of range\n // If the smallest factor is smaller than the current bounds.step and the projected length of smallest factor\n // is larger than the scaleMinSpace we should go for it.\n bounds.step = smallestFactor;\n } else {\n // Trying to divide or multiply by 2 and find the best step value\n while (true) {\n if (scaleUp && Chartist.projectLength(axisLength, bounds.step, bounds) <= scaleMinSpace) {\n bounds.step *= 2;\n } else if (!scaleUp && Chartist.projectLength(axisLength, bounds.step / 2, bounds) >= scaleMinSpace) {\n bounds.step /= 2;\n if(onlyInteger && bounds.step % 1 !== 0) {\n bounds.step *= 2;\n break;\n }\n } else {\n break;\n }\n\n if(optimizationCounter++ > 1000) {\n throw new Error('Exceeded maximum number of iterations while optimizing scale step!');\n }\n }\n }\n\n var EPSILON = 2.221E-16;\n bounds.step = Math.max(bounds.step, EPSILON);\n function safeIncrement(value, increment) {\n // If increment is too small use *= (1+EPSILON) as a simple nextafter\n if (value === (value += increment)) {\n \tvalue *= (1 + (increment > 0 ? EPSILON : -EPSILON));\n }\n return value;\n }\n\n // Narrow min and max based on new step\n newMin = bounds.min;\n newMax = bounds.max;\n while (newMin + bounds.step <= bounds.low) {\n \tnewMin = safeIncrement(newMin, bounds.step);\n }\n while (newMax - bounds.step >= bounds.high) {\n \tnewMax = safeIncrement(newMax, -bounds.step);\n }\n bounds.min = newMin;\n bounds.max = newMax;\n bounds.range = bounds.max - bounds.min;\n\n var values = [];\n for (i = bounds.min; i <= bounds.max; i = safeIncrement(i, bounds.step)) {\n var value = Chartist.roundWithPrecision(i);\n if (value !== values[values.length - 1]) {\n values.push(value);\n }\n }\n bounds.values = values;\n return bounds;\n };\n\n /**\n * Calculate cartesian coordinates of polar coordinates\n *\n * @memberof Chartist.Core\n * @param {Number} centerX X-axis coordinates of center point of circle segment\n * @param {Number} centerY X-axis coordinates of center point of circle segment\n * @param {Number} radius Radius of circle segment\n * @param {Number} angleInDegrees Angle of circle segment in degrees\n * @return {{x:Number, y:Number}} Coordinates of point on circumference\n */\n Chartist.polarToCartesian = function (centerX, centerY, radius, angleInDegrees) {\n var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\n\n return {\n x: centerX + (radius * Math.cos(angleInRadians)),\n y: centerY + (radius * Math.sin(angleInRadians))\n };\n };\n\n /**\n * Initialize chart drawing rectangle (area where chart is drawn) x1,y1 = bottom left / x2,y2 = top right\n *\n * @memberof Chartist.Core\n * @param {Object} svg The svg element for the chart\n * @param {Object} options The Object that contains all the optional values for the chart\n * @param {Number} [fallbackPadding] The fallback padding if partial padding objects are used\n * @return {Object} The chart rectangles coordinates inside the svg element plus the rectangles measurements\n */\n Chartist.createChartRect = function (svg, options, fallbackPadding) {\n var hasAxis = !!(options.axisX || options.axisY);\n var yAxisOffset = hasAxis ? options.axisY.offset : 0;\n var xAxisOffset = hasAxis ? options.axisX.offset : 0;\n // If width or height results in invalid value (including 0) we fallback to the unitless settings or even 0\n var width = svg.width() || Chartist.quantity(options.width).value || 0;\n var height = svg.height() || Chartist.quantity(options.height).value || 0;\n var normalizedPadding = Chartist.normalizePadding(options.chartPadding, fallbackPadding);\n\n // If settings were to small to cope with offset (legacy) and padding, we'll adjust\n width = Math.max(width, yAxisOffset + normalizedPadding.left + normalizedPadding.right);\n height = Math.max(height, xAxisOffset + normalizedPadding.top + normalizedPadding.bottom);\n\n var chartRect = {\n padding: normalizedPadding,\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y1 - this.y2;\n }\n };\n\n if(hasAxis) {\n if (options.axisX.position === 'start') {\n chartRect.y2 = normalizedPadding.top + xAxisOffset;\n chartRect.y1 = Math.max(height - normalizedPadding.bottom, chartRect.y2 + 1);\n } else {\n chartRect.y2 = normalizedPadding.top;\n chartRect.y1 = Math.max(height - normalizedPadding.bottom - xAxisOffset, chartRect.y2 + 1);\n }\n\n if (options.axisY.position === 'start') {\n chartRect.x1 = normalizedPadding.left + yAxisOffset;\n chartRect.x2 = Math.max(width - normalizedPadding.right, chartRect.x1 + 1);\n } else {\n chartRect.x1 = normalizedPadding.left;\n chartRect.x2 = Math.max(width - normalizedPadding.right - yAxisOffset, chartRect.x1 + 1);\n }\n } else {\n chartRect.x1 = normalizedPadding.left;\n chartRect.x2 = Math.max(width - normalizedPadding.right, chartRect.x1 + 1);\n chartRect.y2 = normalizedPadding.top;\n chartRect.y1 = Math.max(height - normalizedPadding.bottom, chartRect.y2 + 1);\n }\n\n return chartRect;\n };\n\n /**\n * Creates a grid line based on a projected value.\n *\n * @memberof Chartist.Core\n * @param position\n * @param index\n * @param axis\n * @param offset\n * @param length\n * @param group\n * @param classes\n * @param eventEmitter\n */\n Chartist.createGrid = function(position, index, axis, offset, length, group, classes, eventEmitter) {\n var positionalData = {};\n positionalData[axis.units.pos + '1'] = position;\n positionalData[axis.units.pos + '2'] = position;\n positionalData[axis.counterUnits.pos + '1'] = offset;\n positionalData[axis.counterUnits.pos + '2'] = offset + length;\n\n var gridElement = group.elem('line', positionalData, classes.join(' '));\n\n // Event for grid draw\n eventEmitter.emit('draw',\n Chartist.extend({\n type: 'grid',\n axis: axis,\n index: index,\n group: group,\n element: gridElement\n }, positionalData)\n );\n };\n\n /**\n * Creates a grid background rect and emits the draw event.\n *\n * @memberof Chartist.Core\n * @param gridGroup\n * @param chartRect\n * @param className\n * @param eventEmitter\n */\n Chartist.createGridBackground = function (gridGroup, chartRect, className, eventEmitter) {\n var gridBackground = gridGroup.elem('rect', {\n x: chartRect.x1,\n y: chartRect.y2,\n width: chartRect.width(),\n height: chartRect.height(),\n }, className, true);\n\n // Event for grid background draw\n eventEmitter.emit('draw', {\n type: 'gridBackground',\n group: gridGroup,\n element: gridBackground\n });\n };\n\n /**\n * Creates a label based on a projected value and an axis.\n *\n * @memberof Chartist.Core\n * @param position\n * @param length\n * @param index\n * @param labels\n * @param axis\n * @param axisOffset\n * @param labelOffset\n * @param group\n * @param classes\n * @param useForeignObject\n * @param eventEmitter\n */\n Chartist.createLabel = function(position, length, index, labels, axis, axisOffset, labelOffset, group, classes, useForeignObject, eventEmitter) {\n var labelElement;\n var positionalData = {};\n\n positionalData[axis.units.pos] = position + labelOffset[axis.units.pos];\n positionalData[axis.counterUnits.pos] = labelOffset[axis.counterUnits.pos];\n positionalData[axis.units.len] = length;\n positionalData[axis.counterUnits.len] = Math.max(0, axisOffset - 10);\n\n if(useForeignObject) {\n // We need to set width and height explicitly to px as span will not expand with width and height being\n // 100% in all browsers\n var content = document.createElement('span');\n content.className = classes.join(' ');\n content.setAttribute('xmlns', Chartist.namespaces.xhtml);\n content.innerText = labels[index];\n content.style[axis.units.len] = Math.round(positionalData[axis.units.len]) + 'px';\n content.style[axis.counterUnits.len] = Math.round(positionalData[axis.counterUnits.len]) + 'px';\n\n labelElement = group.foreignObject(content, Chartist.extend({\n style: 'overflow: visible;'\n }, positionalData));\n } else {\n labelElement = group.elem('text', positionalData, classes.join(' ')).text(labels[index]);\n }\n\n eventEmitter.emit('draw', Chartist.extend({\n type: 'label',\n axis: axis,\n index: index,\n group: group,\n element: labelElement,\n text: labels[index]\n }, positionalData));\n };\n\n /**\n * Helper to read series specific options from options object. It automatically falls back to the global option if\n * there is no option in the series options.\n *\n * @param {Object} series Series object\n * @param {Object} options Chartist options object\n * @param {string} key The options key that should be used to obtain the options\n * @returns {*}\n */\n Chartist.getSeriesOption = function(series, options, key) {\n if(series.name && options.series && options.series[series.name]) {\n var seriesOptions = options.series[series.name];\n return seriesOptions.hasOwnProperty(key) ? seriesOptions[key] : options[key];\n } else {\n return options[key];\n }\n };\n\n /**\n * Provides options handling functionality with callback for options changes triggered by responsive options and media query matches\n *\n * @memberof Chartist.Core\n * @param {Object} options Options set by user\n * @param {Array} responsiveOptions Optional functions to add responsive behavior to chart\n * @param {Object} eventEmitter The event emitter that will be used to emit the options changed events\n * @return {Object} The consolidated options object from the defaults, base and matching responsive options\n */\n Chartist.optionsProvider = function (options, responsiveOptions, eventEmitter) {\n var baseOptions = Chartist.extend({}, options),\n currentOptions,\n mediaQueryListeners = [],\n i;\n\n function updateCurrentOptions(mediaEvent) {\n var previousOptions = currentOptions;\n currentOptions = Chartist.extend({}, baseOptions);\n\n if (responsiveOptions) {\n for (i = 0; i < responsiveOptions.length; i++) {\n var mql = window.matchMedia(responsiveOptions[i][0]);\n if (mql.matches) {\n currentOptions = Chartist.extend(currentOptions, responsiveOptions[i][1]);\n }\n }\n }\n\n if(eventEmitter && mediaEvent) {\n eventEmitter.emit('optionsChanged', {\n previousOptions: previousOptions,\n currentOptions: currentOptions\n });\n }\n }\n\n function removeMediaQueryListeners() {\n mediaQueryListeners.forEach(function(mql) {\n mql.removeListener(updateCurrentOptions);\n });\n }\n\n if (!window.matchMedia) {\n throw 'window.matchMedia not found! Make sure you\\'re using a polyfill.';\n } else if (responsiveOptions) {\n\n for (i = 0; i < responsiveOptions.length; i++) {\n var mql = window.matchMedia(responsiveOptions[i][0]);\n mql.addListener(updateCurrentOptions);\n mediaQueryListeners.push(mql);\n }\n }\n // Execute initially without an event argument so we get the correct options\n updateCurrentOptions();\n\n return {\n removeMediaQueryListeners: removeMediaQueryListeners,\n getCurrentOptions: function getCurrentOptions() {\n return Chartist.extend({}, currentOptions);\n }\n };\n };\n\n\n /**\n * Splits a list of coordinates and associated values into segments. Each returned segment contains a pathCoordinates\n * valueData property describing the segment.\n *\n * With the default options, segments consist of contiguous sets of points that do not have an undefined value. Any\n * points with undefined values are discarded.\n *\n * **Options**\n * The following options are used to determine how segments are formed\n * ```javascript\n * var options = {\n * // If fillHoles is true, undefined values are simply discarded without creating a new segment. Assuming other options are default, this returns single segment.\n * fillHoles: false,\n * // If increasingX is true, the coordinates in all segments have strictly increasing x-values.\n * increasingX: false\n * };\n * ```\n *\n * @memberof Chartist.Core\n * @param {Array} pathCoordinates List of point coordinates to be split in the form [x1, y1, x2, y2 ... xn, yn]\n * @param {Array} values List of associated point values in the form [v1, v2 .. vn]\n * @param {Object} options Options set by user\n * @return {Array} List of segments, each containing a pathCoordinates and valueData property.\n */\n Chartist.splitIntoSegments = function(pathCoordinates, valueData, options) {\n var defaultOptions = {\n increasingX: false,\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n var segments = [];\n var hole = true;\n\n for(var i = 0; i < pathCoordinates.length; i += 2) {\n // If this value is a \"hole\" we set the hole flag\n if(Chartist.getMultiValue(valueData[i / 2].value) === undefined) {\n // if(valueData[i / 2].value === undefined) {\n if(!options.fillHoles) {\n hole = true;\n }\n } else {\n if(options.increasingX && i >= 2 && pathCoordinates[i] <= pathCoordinates[i-2]) {\n // X is not increasing, so we need to make sure we start a new segment\n hole = true;\n }\n\n\n // If it's a valid value we need to check if we're coming out of a hole and create a new empty segment\n if(hole) {\n segments.push({\n pathCoordinates: [],\n valueData: []\n });\n // As we have a valid value now, we are not in a \"hole\" anymore\n hole = false;\n }\n\n // Add to the segment pathCoordinates and valueData\n segments[segments.length - 1].pathCoordinates.push(pathCoordinates[i], pathCoordinates[i + 1]);\n segments[segments.length - 1].valueData.push(valueData[i / 2]);\n }\n }\n\n return segments;\n };\n}(this || __webpack_require__.g, Chartist));\n;/**\n * Chartist path interpolation functions.\n *\n * @module Chartist.Interpolation\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n Chartist.Interpolation = {};\n\n /**\n * This interpolation function does not smooth the path and the result is only containing lines and no curves.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.none({\n * fillHoles: false\n * })\n * });\n *\n *\n * @memberof Chartist.Interpolation\n * @return {Function}\n */\n Chartist.Interpolation.none = function(options) {\n var defaultOptions = {\n fillHoles: false\n };\n options = Chartist.extend({}, defaultOptions, options);\n return function none(pathCoordinates, valueData) {\n var path = new Chartist.Svg.Path();\n var hole = true;\n\n for(var i = 0; i < pathCoordinates.length; i += 2) {\n var currX = pathCoordinates[i];\n var currY = pathCoordinates[i + 1];\n var currData = valueData[i / 2];\n\n if(Chartist.getMultiValue(currData.value) !== undefined) {\n\n if(hole) {\n path.move(currX, currY, false, currData);\n } else {\n path.line(currX, currY, false, currData);\n }\n\n hole = false;\n } else if(!options.fillHoles) {\n hole = true;\n }\n }\n\n return path;\n };\n };\n\n /**\n * Simple smoothing creates horizontal handles that are positioned with a fraction of the length between two data points. You can use the divisor option to specify the amount of smoothing.\n *\n * Simple smoothing can be used instead of `Chartist.Smoothing.cardinal` if you'd like to get rid of the artifacts it produces sometimes. Simple smoothing produces less flowing lines but is accurate by hitting the points and it also doesn't swing below or above the given data point.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter. The simple interpolation function accepts one configuration parameter `divisor`, between 1 and ∞, which controls the smoothing characteristics.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.simple({\n * divisor: 2,\n * fillHoles: false\n * })\n * });\n *\n *\n * @memberof Chartist.Interpolation\n * @param {Object} options The options of the simple interpolation factory function.\n * @return {Function}\n */\n Chartist.Interpolation.simple = function(options) {\n var defaultOptions = {\n divisor: 2,\n fillHoles: false\n };\n options = Chartist.extend({}, defaultOptions, options);\n\n var d = 1 / Math.max(1, options.divisor);\n\n return function simple(pathCoordinates, valueData) {\n var path = new Chartist.Svg.Path();\n var prevX, prevY, prevData;\n\n for(var i = 0; i < pathCoordinates.length; i += 2) {\n var currX = pathCoordinates[i];\n var currY = pathCoordinates[i + 1];\n var length = (currX - prevX) * d;\n var currData = valueData[i / 2];\n\n if(currData.value !== undefined) {\n\n if(prevData === undefined) {\n path.move(currX, currY, false, currData);\n } else {\n path.curve(\n prevX + length,\n prevY,\n currX - length,\n currY,\n currX,\n currY,\n false,\n currData\n );\n }\n\n prevX = currX;\n prevY = currY;\n prevData = currData;\n } else if(!options.fillHoles) {\n prevX = currX = prevData = undefined;\n }\n }\n\n return path;\n };\n };\n\n /**\n * Cardinal / Catmull-Rome spline interpolation is the default smoothing function in Chartist. It produces nice results where the splines will always meet the points. It produces some artifacts though when data values are increased or decreased rapidly. The line may not follow a very accurate path and if the line should be accurate this smoothing function does not produce the best results.\n *\n * Cardinal splines can only be created if there are more than two data points. If this is not the case this smoothing will fallback to `Chartist.Smoothing.none`.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter. The cardinal interpolation function accepts one configuration parameter `tension`, between 0 and 1, which controls the smoothing intensity.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.cardinal({\n * tension: 1,\n * fillHoles: false\n * })\n * });\n *\n * @memberof Chartist.Interpolation\n * @param {Object} options The options of the cardinal factory function.\n * @return {Function}\n */\n Chartist.Interpolation.cardinal = function(options) {\n var defaultOptions = {\n tension: 1,\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n var t = Math.min(1, Math.max(0, options.tension)),\n c = 1 - t;\n\n return function cardinal(pathCoordinates, valueData) {\n // First we try to split the coordinates into segments\n // This is necessary to treat \"holes\" in line charts\n var segments = Chartist.splitIntoSegments(pathCoordinates, valueData, {\n fillHoles: options.fillHoles\n });\n\n if(!segments.length) {\n // If there were no segments return 'Chartist.Interpolation.none'\n return Chartist.Interpolation.none()([]);\n } else if(segments.length > 1) {\n // If the split resulted in more that one segment we need to interpolate each segment individually and join them\n // afterwards together into a single path.\n var paths = [];\n // For each segment we will recurse the cardinal function\n segments.forEach(function(segment) {\n paths.push(cardinal(segment.pathCoordinates, segment.valueData));\n });\n // Join the segment path data into a single path and return\n return Chartist.Svg.Path.join(paths);\n } else {\n // If there was only one segment we can proceed regularly by using pathCoordinates and valueData from the first\n // segment\n pathCoordinates = segments[0].pathCoordinates;\n valueData = segments[0].valueData;\n\n // If less than two points we need to fallback to no smoothing\n if(pathCoordinates.length <= 4) {\n return Chartist.Interpolation.none()(pathCoordinates, valueData);\n }\n\n var path = new Chartist.Svg.Path().move(pathCoordinates[0], pathCoordinates[1], false, valueData[0]),\n z;\n\n for (var i = 0, iLen = pathCoordinates.length; iLen - 2 * !z > i; i += 2) {\n var p = [\n {x: +pathCoordinates[i - 2], y: +pathCoordinates[i - 1]},\n {x: +pathCoordinates[i], y: +pathCoordinates[i + 1]},\n {x: +pathCoordinates[i + 2], y: +pathCoordinates[i + 3]},\n {x: +pathCoordinates[i + 4], y: +pathCoordinates[i + 5]}\n ];\n if (z) {\n if (!i) {\n p[0] = {x: +pathCoordinates[iLen - 2], y: +pathCoordinates[iLen - 1]};\n } else if (iLen - 4 === i) {\n p[3] = {x: +pathCoordinates[0], y: +pathCoordinates[1]};\n } else if (iLen - 2 === i) {\n p[2] = {x: +pathCoordinates[0], y: +pathCoordinates[1]};\n p[3] = {x: +pathCoordinates[2], y: +pathCoordinates[3]};\n }\n } else {\n if (iLen - 4 === i) {\n p[3] = p[2];\n } else if (!i) {\n p[0] = {x: +pathCoordinates[i], y: +pathCoordinates[i + 1]};\n }\n }\n\n path.curve(\n (t * (-p[0].x + 6 * p[1].x + p[2].x) / 6) + (c * p[2].x),\n (t * (-p[0].y + 6 * p[1].y + p[2].y) / 6) + (c * p[2].y),\n (t * (p[1].x + 6 * p[2].x - p[3].x) / 6) + (c * p[2].x),\n (t * (p[1].y + 6 * p[2].y - p[3].y) / 6) + (c * p[2].y),\n p[2].x,\n p[2].y,\n false,\n valueData[(i + 2) / 2]\n );\n }\n\n return path;\n }\n };\n };\n\n /**\n * Monotone Cubic spline interpolation produces a smooth curve which preserves monotonicity. Unlike cardinal splines, the curve will not extend beyond the range of y-values of the original data points.\n *\n * Monotone Cubic splines can only be created if there are more than two data points. If this is not the case this smoothing will fallback to `Chartist.Smoothing.none`.\n *\n * The x-values of subsequent points must be increasing to fit a Monotone Cubic spline. If this condition is not met for a pair of adjacent points, then there will be a break in the curve between those data points.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.monotoneCubic({\n * fillHoles: false\n * })\n * });\n *\n * @memberof Chartist.Interpolation\n * @param {Object} options The options of the monotoneCubic factory function.\n * @return {Function}\n */\n Chartist.Interpolation.monotoneCubic = function(options) {\n var defaultOptions = {\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n return function monotoneCubic(pathCoordinates, valueData) {\n // First we try to split the coordinates into segments\n // This is necessary to treat \"holes\" in line charts\n var segments = Chartist.splitIntoSegments(pathCoordinates, valueData, {\n fillHoles: options.fillHoles,\n increasingX: true\n });\n\n if(!segments.length) {\n // If there were no segments return 'Chartist.Interpolation.none'\n return Chartist.Interpolation.none()([]);\n } else if(segments.length > 1) {\n // If the split resulted in more that one segment we need to interpolate each segment individually and join them\n // afterwards together into a single path.\n var paths = [];\n // For each segment we will recurse the monotoneCubic fn function\n segments.forEach(function(segment) {\n paths.push(monotoneCubic(segment.pathCoordinates, segment.valueData));\n });\n // Join the segment path data into a single path and return\n return Chartist.Svg.Path.join(paths);\n } else {\n // If there was only one segment we can proceed regularly by using pathCoordinates and valueData from the first\n // segment\n pathCoordinates = segments[0].pathCoordinates;\n valueData = segments[0].valueData;\n\n // If less than three points we need to fallback to no smoothing\n if(pathCoordinates.length <= 4) {\n return Chartist.Interpolation.none()(pathCoordinates, valueData);\n }\n\n var xs = [],\n ys = [],\n i,\n n = pathCoordinates.length / 2,\n ms = [],\n ds = [], dys = [], dxs = [],\n path;\n\n // Populate x and y coordinates into separate arrays, for readability\n\n for(i = 0; i < n; i++) {\n xs[i] = pathCoordinates[i * 2];\n ys[i] = pathCoordinates[i * 2 + 1];\n }\n\n // Calculate deltas and derivative\n\n for(i = 0; i < n - 1; i++) {\n dys[i] = ys[i + 1] - ys[i];\n dxs[i] = xs[i + 1] - xs[i];\n ds[i] = dys[i] / dxs[i];\n }\n\n // Determine desired slope (m) at each point using Fritsch-Carlson method\n // See: http://math.stackexchange.com/questions/45218/implementation-of-monotone-cubic-interpolation\n\n ms[0] = ds[0];\n ms[n - 1] = ds[n - 2];\n\n for(i = 1; i < n - 1; i++) {\n if(ds[i] === 0 || ds[i - 1] === 0 || (ds[i - 1] > 0) !== (ds[i] > 0)) {\n ms[i] = 0;\n } else {\n ms[i] = 3 * (dxs[i - 1] + dxs[i]) / (\n (2 * dxs[i] + dxs[i - 1]) / ds[i - 1] +\n (dxs[i] + 2 * dxs[i - 1]) / ds[i]);\n\n if(!isFinite(ms[i])) {\n ms[i] = 0;\n }\n }\n }\n\n // Now build a path from the slopes\n\n path = new Chartist.Svg.Path().move(xs[0], ys[0], false, valueData[0]);\n\n for(i = 0; i < n - 1; i++) {\n path.curve(\n // First control point\n xs[i] + dxs[i] / 3,\n ys[i] + ms[i] * dxs[i] / 3,\n // Second control point\n xs[i + 1] - dxs[i] / 3,\n ys[i + 1] - ms[i + 1] * dxs[i] / 3,\n // End point\n xs[i + 1],\n ys[i + 1],\n\n false,\n valueData[i + 1]\n );\n }\n\n return path;\n }\n };\n };\n\n /**\n * Step interpolation will cause the line chart to move in steps rather than diagonal or smoothed lines. This interpolation will create additional points that will also be drawn when the `showPoint` option is enabled.\n *\n * All smoothing functions within Chartist are factory functions that accept an options parameter. The step interpolation function accepts one configuration parameter `postpone`, that can be `true` or `false`. The default value is `true` and will cause the step to occur where the value actually changes. If a different behaviour is needed where the step is shifted to the left and happens before the actual value, this option can be set to `false`.\n *\n * @example\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [[1, 2, 8, 1, 7]]\n * }, {\n * lineSmooth: Chartist.Interpolation.step({\n * postpone: true,\n * fillHoles: false\n * })\n * });\n *\n * @memberof Chartist.Interpolation\n * @param options\n * @returns {Function}\n */\n Chartist.Interpolation.step = function(options) {\n var defaultOptions = {\n postpone: true,\n fillHoles: false\n };\n\n options = Chartist.extend({}, defaultOptions, options);\n\n return function step(pathCoordinates, valueData) {\n var path = new Chartist.Svg.Path();\n\n var prevX, prevY, prevData;\n\n for (var i = 0; i < pathCoordinates.length; i += 2) {\n var currX = pathCoordinates[i];\n var currY = pathCoordinates[i + 1];\n var currData = valueData[i / 2];\n\n // If the current point is also not a hole we can draw the step lines\n if(currData.value !== undefined) {\n if(prevData === undefined) {\n path.move(currX, currY, false, currData);\n } else {\n if(options.postpone) {\n // If postponed we should draw the step line with the value of the previous value\n path.line(currX, prevY, false, prevData);\n } else {\n // If not postponed we should draw the step line with the value of the current value\n path.line(prevX, currY, false, currData);\n }\n // Line to the actual point (this should only be a Y-Axis movement\n path.line(currX, currY, false, currData);\n }\n\n prevX = currX;\n prevY = currY;\n prevData = currData;\n } else if(!options.fillHoles) {\n prevX = prevY = prevData = undefined;\n }\n }\n\n return path;\n };\n };\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * A very basic event module that helps to generate and catch events.\n *\n * @module Chartist.Event\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n Chartist.EventEmitter = function () {\n var handlers = [];\n\n /**\n * Add an event handler for a specific event\n *\n * @memberof Chartist.Event\n * @param {String} event The event name\n * @param {Function} handler A event handler function\n */\n function addEventHandler(event, handler) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n }\n\n /**\n * Remove an event handler of a specific event name or remove all event handlers for a specific event.\n *\n * @memberof Chartist.Event\n * @param {String} event The event name where a specific or all handlers should be removed\n * @param {Function} [handler] An optional event handler function. If specified only this specific handler will be removed and otherwise all handlers are removed.\n */\n function removeEventHandler(event, handler) {\n // Only do something if there are event handlers with this name existing\n if(handlers[event]) {\n // If handler is set we will look for a specific handler and only remove this\n if(handler) {\n handlers[event].splice(handlers[event].indexOf(handler), 1);\n if(handlers[event].length === 0) {\n delete handlers[event];\n }\n } else {\n // If no handler is specified we remove all handlers for this event\n delete handlers[event];\n }\n }\n }\n\n /**\n * Use this function to emit an event. All handlers that are listening for this event will be triggered with the data parameter.\n *\n * @memberof Chartist.Event\n * @param {String} event The event name that should be triggered\n * @param {*} data Arbitrary data that will be passed to the event handler callback functions\n */\n function emit(event, data) {\n // Only do something if there are event handlers with this name existing\n if(handlers[event]) {\n handlers[event].forEach(function(handler) {\n handler(data);\n });\n }\n\n // Emit event to star event handlers\n if(handlers['*']) {\n handlers['*'].forEach(function(starHandler) {\n starHandler(event, data);\n });\n }\n }\n\n return {\n addEventHandler: addEventHandler,\n removeEventHandler: removeEventHandler,\n emit: emit\n };\n };\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * This module provides some basic prototype inheritance utilities.\n *\n * @module Chartist.Class\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n function listToArray(list) {\n var arr = [];\n if (list.length) {\n for (var i = 0; i < list.length; i++) {\n arr.push(list[i]);\n }\n }\n return arr;\n }\n\n /**\n * Method to extend from current prototype.\n *\n * @memberof Chartist.Class\n * @param {Object} properties The object that serves as definition for the prototype that gets created for the new class. This object should always contain a constructor property that is the desired constructor for the newly created class.\n * @param {Object} [superProtoOverride] By default extens will use the current class prototype or Chartist.class. With this parameter you can specify any super prototype that will be used.\n * @return {Function} Constructor function of the new class\n *\n * @example\n * var Fruit = Class.extend({\n * color: undefined,\n * sugar: undefined,\n *\n * constructor: function(color, sugar) {\n * this.color = color;\n * this.sugar = sugar;\n * },\n *\n * eat: function() {\n * this.sugar = 0;\n * return this;\n * }\n * });\n *\n * var Banana = Fruit.extend({\n * length: undefined,\n *\n * constructor: function(length, sugar) {\n * Banana.super.constructor.call(this, 'Yellow', sugar);\n * this.length = length;\n * }\n * });\n *\n * var banana = new Banana(20, 40);\n * console.log('banana instanceof Fruit', banana instanceof Fruit);\n * console.log('Fruit is prototype of banana', Fruit.prototype.isPrototypeOf(banana));\n * console.log('bananas prototype is Fruit', Object.getPrototypeOf(banana) === Fruit.prototype);\n * console.log(banana.sugar);\n * console.log(banana.eat().sugar);\n * console.log(banana.color);\n */\n function extend(properties, superProtoOverride) {\n var superProto = superProtoOverride || this.prototype || Chartist.Class;\n var proto = Object.create(superProto);\n\n Chartist.Class.cloneDefinitions(proto, properties);\n\n var constr = function() {\n var fn = proto.constructor || function () {},\n instance;\n\n // If this is linked to the Chartist namespace the constructor was not called with new\n // To provide a fallback we will instantiate here and return the instance\n instance = this === Chartist ? Object.create(proto) : this;\n fn.apply(instance, Array.prototype.slice.call(arguments, 0));\n\n // If this constructor was not called with new we need to return the instance\n // This will not harm when the constructor has been called with new as the returned value is ignored\n return instance;\n };\n\n constr.prototype = proto;\n constr.super = superProto;\n constr.extend = this.extend;\n\n return constr;\n }\n\n // Variable argument list clones args > 0 into args[0] and retruns modified args[0]\n function cloneDefinitions() {\n var args = listToArray(arguments);\n var target = args[0];\n\n args.splice(1, args.length - 1).forEach(function (source) {\n Object.getOwnPropertyNames(source).forEach(function (propName) {\n // If this property already exist in target we delete it first\n delete target[propName];\n // Define the property with the descriptor from source\n Object.defineProperty(target, propName,\n Object.getOwnPropertyDescriptor(source, propName));\n });\n });\n\n return target;\n }\n\n Chartist.Class = {\n extend: extend,\n cloneDefinitions: cloneDefinitions\n };\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * Base for all chart types. The methods in Chartist.Base are inherited to all chart types.\n *\n * @module Chartist.Base\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n\n // TODO: Currently we need to re-draw the chart on window resize. This is usually very bad and will affect performance.\n // This is done because we can't work with relative coordinates when drawing the chart because SVG Path does not\n // work with relative positions yet. We need to check if we can do a viewBox hack to switch to percentage.\n // See http://mozilla.6506.n7.nabble.com/Specyfing-paths-with-percentages-unit-td247474.html\n // Update: can be done using the above method tested here: http://codepen.io/gionkunz/pen/KDvLj\n // The problem is with the label offsets that can't be converted into percentage and affecting the chart container\n /**\n * Updates the chart which currently does a full reconstruction of the SVG DOM\n *\n * @param {Object} [data] Optional data you'd like to set for the chart before it will update. If not specified the update method will use the data that is already configured with the chart.\n * @param {Object} [options] Optional options you'd like to add to the previous options for the chart before it will update. If not specified the update method will use the options that have been already configured with the chart.\n * @param {Boolean} [override] If set to true, the passed options will be used to extend the options that have been configured already. Otherwise the chart default options will be used as the base\n * @memberof Chartist.Base\n */\n function update(data, options, override) {\n if(data) {\n this.data = data || {};\n this.data.labels = this.data.labels || [];\n this.data.series = this.data.series || [];\n // Event for data transformation that allows to manipulate the data before it gets rendered in the charts\n this.eventEmitter.emit('data', {\n type: 'update',\n data: this.data\n });\n }\n\n if(options) {\n this.options = Chartist.extend({}, override ? this.options : this.defaultOptions, options);\n\n // If chartist was not initialized yet, we just set the options and leave the rest to the initialization\n // Otherwise we re-create the optionsProvider at this point\n if(!this.initializeTimeoutId) {\n this.optionsProvider.removeMediaQueryListeners();\n this.optionsProvider = Chartist.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter);\n }\n }\n\n // Only re-created the chart if it has been initialized yet\n if(!this.initializeTimeoutId) {\n this.createChart(this.optionsProvider.getCurrentOptions());\n }\n\n // Return a reference to the chart object to chain up calls\n return this;\n }\n\n /**\n * This method can be called on the API object of each chart and will un-register all event listeners that were added to other components. This currently includes a window.resize listener as well as media query listeners if any responsive options have been provided. Use this function if you need to destroy and recreate Chartist charts dynamically.\n *\n * @memberof Chartist.Base\n */\n function detach() {\n // Only detach if initialization already occurred on this chart. If this chart still hasn't initialized (therefore\n // the initializationTimeoutId is still a valid timeout reference, we will clear the timeout\n if(!this.initializeTimeoutId) {\n window.removeEventListener('resize', this.resizeListener);\n this.optionsProvider.removeMediaQueryListeners();\n } else {\n window.clearTimeout(this.initializeTimeoutId);\n }\n\n return this;\n }\n\n /**\n * Use this function to register event handlers. The handler callbacks are synchronous and will run in the main thread rather than the event loop.\n *\n * @memberof Chartist.Base\n * @param {String} event Name of the event. Check the examples for supported events.\n * @param {Function} handler The handler function that will be called when an event with the given name was emitted. This function will receive a data argument which contains event data. See the example for more details.\n */\n function on(event, handler) {\n this.eventEmitter.addEventHandler(event, handler);\n return this;\n }\n\n /**\n * Use this function to un-register event handlers. If the handler function parameter is omitted all handlers for the given event will be un-registered.\n *\n * @memberof Chartist.Base\n * @param {String} event Name of the event for which a handler should be removed\n * @param {Function} [handler] The handler function that that was previously used to register a new event handler. This handler will be removed from the event handler list. If this parameter is omitted then all event handlers for the given event are removed from the list.\n */\n function off(event, handler) {\n this.eventEmitter.removeEventHandler(event, handler);\n return this;\n }\n\n function initialize() {\n // Add window resize listener that re-creates the chart\n window.addEventListener('resize', this.resizeListener);\n\n // Obtain current options based on matching media queries (if responsive options are given)\n // This will also register a listener that is re-creating the chart based on media changes\n this.optionsProvider = Chartist.optionsProvider(this.options, this.responsiveOptions, this.eventEmitter);\n // Register options change listener that will trigger a chart update\n this.eventEmitter.addEventHandler('optionsChanged', function() {\n this.update();\n }.bind(this));\n\n // Before the first chart creation we need to register us with all plugins that are configured\n // Initialize all relevant plugins with our chart object and the plugin options specified in the config\n if(this.options.plugins) {\n this.options.plugins.forEach(function(plugin) {\n if(plugin instanceof Array) {\n plugin[0](this, plugin[1]);\n } else {\n plugin(this);\n }\n }.bind(this));\n }\n\n // Event for data transformation that allows to manipulate the data before it gets rendered in the charts\n this.eventEmitter.emit('data', {\n type: 'initial',\n data: this.data\n });\n\n // Create the first chart\n this.createChart(this.optionsProvider.getCurrentOptions());\n\n // As chart is initialized from the event loop now we can reset our timeout reference\n // This is important if the chart gets initialized on the same element twice\n this.initializeTimeoutId = undefined;\n }\n\n /**\n * Constructor of chart base class.\n *\n * @param query\n * @param data\n * @param defaultOptions\n * @param options\n * @param responsiveOptions\n * @constructor\n */\n function Base(query, data, defaultOptions, options, responsiveOptions) {\n this.container = Chartist.querySelector(query);\n this.data = data || {};\n this.data.labels = this.data.labels || [];\n this.data.series = this.data.series || [];\n this.defaultOptions = defaultOptions;\n this.options = options;\n this.responsiveOptions = responsiveOptions;\n this.eventEmitter = Chartist.EventEmitter();\n this.supportsForeignObject = Chartist.Svg.isSupported('Extensibility');\n this.supportsAnimations = Chartist.Svg.isSupported('AnimationEventsAttribute');\n this.resizeListener = function resizeListener(){\n this.update();\n }.bind(this);\n\n if(this.container) {\n // If chartist was already initialized in this container we are detaching all event listeners first\n if(this.container.__chartist__) {\n this.container.__chartist__.detach();\n }\n\n this.container.__chartist__ = this;\n }\n\n // Using event loop for first draw to make it possible to register event listeners in the same call stack where\n // the chart was created.\n this.initializeTimeoutId = setTimeout(initialize.bind(this), 0);\n }\n\n // Creating the chart base class\n Chartist.Base = Chartist.Class.extend({\n constructor: Base,\n optionsProvider: undefined,\n container: undefined,\n svg: undefined,\n eventEmitter: undefined,\n createChart: function() {\n throw new Error('Base chart type can\\'t be instantiated!');\n },\n update: update,\n detach: detach,\n on: on,\n off: off,\n version: Chartist.version,\n supportsForeignObject: false\n });\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * Chartist SVG module for simple SVG DOM abstraction\n *\n * @module Chartist.Svg\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n var document = globalRoot.document;\n\n /**\n * Chartist.Svg creates a new SVG object wrapper with a starting element. You can use the wrapper to fluently create sub-elements and modify them.\n *\n * @memberof Chartist.Svg\n * @constructor\n * @param {String|Element} name The name of the SVG element to create or an SVG dom element which should be wrapped into Chartist.Svg\n * @param {Object} attributes An object with properties that will be added as attributes to the SVG element that is created. Attributes with undefined values will not be added.\n * @param {String} className This class or class list will be added to the SVG element\n * @param {Object} parent The parent SVG wrapper object where this newly created wrapper and it's element will be attached to as child\n * @param {Boolean} insertFirst If this param is set to true in conjunction with a parent element the newly created element will be added as first child element in the parent element\n */\n function Svg(name, attributes, className, parent, insertFirst) {\n // If Svg is getting called with an SVG element we just return the wrapper\n if(name instanceof Element) {\n this._node = name;\n } else {\n this._node = document.createElementNS(Chartist.namespaces.svg, name);\n\n // If this is an SVG element created then custom namespace\n if(name === 'svg') {\n this.attr({\n 'xmlns:ct': Chartist.namespaces.ct\n });\n }\n }\n\n if(attributes) {\n this.attr(attributes);\n }\n\n if(className) {\n this.addClass(className);\n }\n\n if(parent) {\n if (insertFirst && parent._node.firstChild) {\n parent._node.insertBefore(this._node, parent._node.firstChild);\n } else {\n parent._node.appendChild(this._node);\n }\n }\n }\n\n /**\n * Set attributes on the current SVG element of the wrapper you're currently working on.\n *\n * @memberof Chartist.Svg\n * @param {Object|String} attributes An object with properties that will be added as attributes to the SVG element that is created. Attributes with undefined values will not be added. If this parameter is a String then the function is used as a getter and will return the attribute value.\n * @param {String} [ns] If specified, the attribute will be obtained using getAttributeNs. In order to write namepsaced attributes you can use the namespace:attribute notation within the attributes object.\n * @return {Object|String} The current wrapper object will be returned so it can be used for chaining or the attribute value if used as getter function.\n */\n function attr(attributes, ns) {\n if(typeof attributes === 'string') {\n if(ns) {\n return this._node.getAttributeNS(ns, attributes);\n } else {\n return this._node.getAttribute(attributes);\n }\n }\n\n Object.keys(attributes).forEach(function(key) {\n // If the attribute value is undefined we can skip this one\n if(attributes[key] === undefined) {\n return;\n }\n\n if (key.indexOf(':') !== -1) {\n var namespacedAttribute = key.split(':');\n this._node.setAttributeNS(Chartist.namespaces[namespacedAttribute[0]], key, attributes[key]);\n } else {\n this._node.setAttribute(key, attributes[key]);\n }\n }.bind(this));\n\n return this;\n }\n\n /**\n * Create a new SVG element whose wrapper object will be selected for further operations. This way you can also create nested groups easily.\n *\n * @memberof Chartist.Svg\n * @param {String} name The name of the SVG element that should be created as child element of the currently selected element wrapper\n * @param {Object} [attributes] An object with properties that will be added as attributes to the SVG element that is created. Attributes with undefined values will not be added.\n * @param {String} [className] This class or class list will be added to the SVG element\n * @param {Boolean} [insertFirst] If this param is set to true in conjunction with a parent element the newly created element will be added as first child element in the parent element\n * @return {Chartist.Svg} Returns a Chartist.Svg wrapper object that can be used to modify the containing SVG data\n */\n function elem(name, attributes, className, insertFirst) {\n return new Chartist.Svg(name, attributes, className, this, insertFirst);\n }\n\n /**\n * Returns the parent Chartist.SVG wrapper object\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} Returns a Chartist.Svg wrapper around the parent node of the current node. If the parent node is not existing or it's not an SVG node then this function will return null.\n */\n function parent() {\n return this._node.parentNode instanceof SVGElement ? new Chartist.Svg(this._node.parentNode) : null;\n }\n\n /**\n * This method returns a Chartist.Svg wrapper around the root SVG element of the current tree.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The root SVG element wrapped in a Chartist.Svg element\n */\n function root() {\n var node = this._node;\n while(node.nodeName !== 'svg') {\n node = node.parentNode;\n }\n return new Chartist.Svg(node);\n }\n\n /**\n * Find the first child SVG element of the current element that matches a CSS selector. The returned object is a Chartist.Svg wrapper.\n *\n * @memberof Chartist.Svg\n * @param {String} selector A CSS selector that is used to query for child SVG elements\n * @return {Chartist.Svg} The SVG wrapper for the element found or null if no element was found\n */\n function querySelector(selector) {\n var foundNode = this._node.querySelector(selector);\n return foundNode ? new Chartist.Svg(foundNode) : null;\n }\n\n /**\n * Find the all child SVG elements of the current element that match a CSS selector. The returned object is a Chartist.Svg.List wrapper.\n *\n * @memberof Chartist.Svg\n * @param {String} selector A CSS selector that is used to query for child SVG elements\n * @return {Chartist.Svg.List} The SVG wrapper list for the element found or null if no element was found\n */\n function querySelectorAll(selector) {\n var foundNodes = this._node.querySelectorAll(selector);\n return foundNodes.length ? new Chartist.Svg.List(foundNodes) : null;\n }\n\n /**\n * Returns the underlying SVG node for the current element.\n *\n * @memberof Chartist.Svg\n * @returns {Node}\n */\n function getNode() {\n return this._node;\n }\n\n /**\n * This method creates a foreignObject (see https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject) that allows to embed HTML content into a SVG graphic. With the help of foreignObjects you can enable the usage of regular HTML elements inside of SVG where they are subject for SVG positioning and transformation but the Browser will use the HTML rendering capabilities for the containing DOM.\n *\n * @memberof Chartist.Svg\n * @param {Node|String} content The DOM Node, or HTML string that will be converted to a DOM Node, that is then placed into and wrapped by the foreignObject\n * @param {String} [attributes] An object with properties that will be added as attributes to the foreignObject element that is created. Attributes with undefined values will not be added.\n * @param {String} [className] This class or class list will be added to the SVG element\n * @param {Boolean} [insertFirst] Specifies if the foreignObject should be inserted as first child\n * @return {Chartist.Svg} New wrapper object that wraps the foreignObject element\n */\n function foreignObject(content, attributes, className, insertFirst) {\n // If content is string then we convert it to DOM\n // TODO: Handle case where content is not a string nor a DOM Node\n if(typeof content === 'string') {\n var container = document.createElement('div');\n container.innerHTML = content;\n content = container.firstChild;\n }\n\n // Adding namespace to content element\n content.setAttribute('xmlns', Chartist.namespaces.xmlns);\n\n // Creating the foreignObject without required extension attribute (as described here\n // http://www.w3.org/TR/SVG/extend.html#ForeignObjectElement)\n var fnObj = this.elem('foreignObject', attributes, className, insertFirst);\n\n // Add content to foreignObjectElement\n fnObj._node.appendChild(content);\n\n return fnObj;\n }\n\n /**\n * This method adds a new text element to the current Chartist.Svg wrapper.\n *\n * @memberof Chartist.Svg\n * @param {String} t The text that should be added to the text element that is created\n * @return {Chartist.Svg} The same wrapper object that was used to add the newly created element\n */\n function text(t) {\n this._node.appendChild(document.createTextNode(t));\n return this;\n }\n\n /**\n * This method will clear all child nodes of the current wrapper object.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The same wrapper object that got emptied\n */\n function empty() {\n while (this._node.firstChild) {\n this._node.removeChild(this._node.firstChild);\n }\n\n return this;\n }\n\n /**\n * This method will cause the current wrapper to remove itself from its parent wrapper. Use this method if you'd like to get rid of an element in a given DOM structure.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The parent wrapper object of the element that got removed\n */\n function remove() {\n this._node.parentNode.removeChild(this._node);\n return this.parent();\n }\n\n /**\n * This method will replace the element with a new element that can be created outside of the current DOM.\n *\n * @memberof Chartist.Svg\n * @param {Chartist.Svg} newElement The new Chartist.Svg object that will be used to replace the current wrapper object\n * @return {Chartist.Svg} The wrapper of the new element\n */\n function replace(newElement) {\n this._node.parentNode.replaceChild(newElement._node, this._node);\n return newElement;\n }\n\n /**\n * This method will append an element to the current element as a child.\n *\n * @memberof Chartist.Svg\n * @param {Chartist.Svg} element The Chartist.Svg element that should be added as a child\n * @param {Boolean} [insertFirst] Specifies if the element should be inserted as first child\n * @return {Chartist.Svg} The wrapper of the appended object\n */\n function append(element, insertFirst) {\n if(insertFirst && this._node.firstChild) {\n this._node.insertBefore(element._node, this._node.firstChild);\n } else {\n this._node.appendChild(element._node);\n }\n\n return this;\n }\n\n /**\n * Returns an array of class names that are attached to the current wrapper element. This method can not be chained further.\n *\n * @memberof Chartist.Svg\n * @return {Array} A list of classes or an empty array if there are no classes on the current element\n */\n function classes() {\n return this._node.getAttribute('class') ? this._node.getAttribute('class').trim().split(/\\s+/) : [];\n }\n\n /**\n * Adds one or a space separated list of classes to the current element and ensures the classes are only existing once.\n *\n * @memberof Chartist.Svg\n * @param {String} names A white space separated list of class names\n * @return {Chartist.Svg} The wrapper of the current element\n */\n function addClass(names) {\n this._node.setAttribute('class',\n this.classes(this._node)\n .concat(names.trim().split(/\\s+/))\n .filter(function(elem, pos, self) {\n return self.indexOf(elem) === pos;\n }).join(' ')\n );\n\n return this;\n }\n\n /**\n * Removes one or a space separated list of classes from the current element.\n *\n * @memberof Chartist.Svg\n * @param {String} names A white space separated list of class names\n * @return {Chartist.Svg} The wrapper of the current element\n */\n function removeClass(names) {\n var removedClasses = names.trim().split(/\\s+/);\n\n this._node.setAttribute('class', this.classes(this._node).filter(function(name) {\n return removedClasses.indexOf(name) === -1;\n }).join(' '));\n\n return this;\n }\n\n /**\n * Removes all classes from the current element.\n *\n * @memberof Chartist.Svg\n * @return {Chartist.Svg} The wrapper of the current element\n */\n function removeAllClasses() {\n this._node.setAttribute('class', '');\n\n return this;\n }\n\n /**\n * Get element height using `getBoundingClientRect`\n *\n * @memberof Chartist.Svg\n * @return {Number} The elements height in pixels\n */\n function height() {\n return this._node.getBoundingClientRect().height;\n }\n\n /**\n * Get element width using `getBoundingClientRect`\n *\n * @memberof Chartist.Core\n * @return {Number} The elements width in pixels\n */\n function width() {\n return this._node.getBoundingClientRect().width;\n }\n\n /**\n * The animate function lets you animate the current element with SMIL animations. You can add animations for multiple attributes at the same time by using an animation definition object. This object should contain SMIL animation attributes. Please refer to http://www.w3.org/TR/SVG/animate.html for a detailed specification about the available animation attributes. Additionally an easing property can be passed in the animation definition object. This can be a string with a name of an easing function in `Chartist.Svg.Easing` or an array with four numbers specifying a cubic Bézier curve.\n * **An animations object could look like this:**\n * ```javascript\n * element.animate({\n * opacity: {\n * dur: 1000,\n * from: 0,\n * to: 1\n * },\n * x1: {\n * dur: '1000ms',\n * from: 100,\n * to: 200,\n * easing: 'easeOutQuart'\n * },\n * y1: {\n * dur: '2s',\n * from: 0,\n * to: 100\n * }\n * });\n * ```\n * **Automatic unit conversion**\n * For the `dur` and the `begin` animate attribute you can also omit a unit by passing a number. The number will automatically be converted to milli seconds.\n * **Guided mode**\n * The default behavior of SMIL animations with offset using the `begin` attribute is that the attribute will keep it's original value until the animation starts. Mostly this behavior is not desired as you'd like to have your element attributes already initialized with the animation `from` value even before the animation starts. Also if you don't specify `fill=\"freeze\"` on an animate element or if you delete the animation after it's done (which is done in guided mode) the attribute will switch back to the initial value. This behavior is also not desired when performing simple one-time animations. For one-time animations you'd want to trigger animations immediately instead of relative to the document begin time. That's why in guided mode Chartist.Svg will also use the `begin` property to schedule a timeout and manually start the animation after the timeout. If you're using multiple SMIL definition objects for an attribute (in an array), guided mode will be disabled for this attribute, even if you explicitly enabled it.\n * If guided mode is enabled the following behavior is added:\n * - Before the animation starts (even when delayed with `begin`) the animated attribute will be set already to the `from` value of the animation\n * - `begin` is explicitly set to `indefinite` so it can be started manually without relying on document begin time (creation)\n * - The animate element will be forced to use `fill=\"freeze\"`\n * - The animation will be triggered with `beginElement()` in a timeout where `begin` of the definition object is interpreted in milli seconds. If no `begin` was specified the timeout is triggered immediately.\n * - After the animation the element attribute value will be set to the `to` value of the animation\n * - The animate element is deleted from the DOM\n *\n * @memberof Chartist.Svg\n * @param {Object} animations An animations object where the property keys are the attributes you'd like to animate. The properties should be objects again that contain the SMIL animation attributes (usually begin, dur, from, and to). The property begin and dur is auto converted (see Automatic unit conversion). You can also schedule multiple animations for the same attribute by passing an Array of SMIL definition objects. Attributes that contain an array of SMIL definition objects will not be executed in guided mode.\n * @param {Boolean} guided Specify if guided mode should be activated for this animation (see Guided mode). If not otherwise specified, guided mode will be activated.\n * @param {Object} eventEmitter If specified, this event emitter will be notified when an animation starts or ends.\n * @return {Chartist.Svg} The current element where the animation was added\n */\n function animate(animations, guided, eventEmitter) {\n if(guided === undefined) {\n guided = true;\n }\n\n Object.keys(animations).forEach(function createAnimateForAttributes(attribute) {\n\n function createAnimate(animationDefinition, guided) {\n var attributeProperties = {},\n animate,\n timeout,\n easing;\n\n // Check if an easing is specified in the definition object and delete it from the object as it will not\n // be part of the animate element attributes.\n if(animationDefinition.easing) {\n // If already an easing Bézier curve array we take it or we lookup a easing array in the Easing object\n easing = animationDefinition.easing instanceof Array ?\n animationDefinition.easing :\n Chartist.Svg.Easing[animationDefinition.easing];\n delete animationDefinition.easing;\n }\n\n // If numeric dur or begin was provided we assume milli seconds\n animationDefinition.begin = Chartist.ensureUnit(animationDefinition.begin, 'ms');\n animationDefinition.dur = Chartist.ensureUnit(animationDefinition.dur, 'ms');\n\n if(easing) {\n animationDefinition.calcMode = 'spline';\n animationDefinition.keySplines = easing.join(' ');\n animationDefinition.keyTimes = '0;1';\n }\n\n // Adding \"fill: freeze\" if we are in guided mode and set initial attribute values\n if(guided) {\n animationDefinition.fill = 'freeze';\n // Animated property on our element should already be set to the animation from value in guided mode\n attributeProperties[attribute] = animationDefinition.from;\n this.attr(attributeProperties);\n\n // In guided mode we also set begin to indefinite so we can trigger the start manually and put the begin\n // which needs to be in ms aside\n timeout = Chartist.quantity(animationDefinition.begin || 0).value;\n animationDefinition.begin = 'indefinite';\n }\n\n animate = this.elem('animate', Chartist.extend({\n attributeName: attribute\n }, animationDefinition));\n\n if(guided) {\n // If guided we take the value that was put aside in timeout and trigger the animation manually with a timeout\n setTimeout(function() {\n // If beginElement fails we set the animated attribute to the end position and remove the animate element\n // This happens if the SMIL ElementTimeControl interface is not supported or any other problems occured in\n // the browser. (Currently FF 34 does not support animate elements in foreignObjects)\n try {\n animate._node.beginElement();\n } catch(err) {\n // Set animated attribute to current animated value\n attributeProperties[attribute] = animationDefinition.to;\n this.attr(attributeProperties);\n // Remove the animate element as it's no longer required\n animate.remove();\n }\n }.bind(this), timeout);\n }\n\n if(eventEmitter) {\n animate._node.addEventListener('beginEvent', function handleBeginEvent() {\n eventEmitter.emit('animationBegin', {\n element: this,\n animate: animate._node,\n params: animationDefinition\n });\n }.bind(this));\n }\n\n animate._node.addEventListener('endEvent', function handleEndEvent() {\n if(eventEmitter) {\n eventEmitter.emit('animationEnd', {\n element: this,\n animate: animate._node,\n params: animationDefinition\n });\n }\n\n if(guided) {\n // Set animated attribute to current animated value\n attributeProperties[attribute] = animationDefinition.to;\n this.attr(attributeProperties);\n // Remove the animate element as it's no longer required\n animate.remove();\n }\n }.bind(this));\n }\n\n // If current attribute is an array of definition objects we create an animate for each and disable guided mode\n if(animations[attribute] instanceof Array) {\n animations[attribute].forEach(function(animationDefinition) {\n createAnimate.bind(this)(animationDefinition, false);\n }.bind(this));\n } else {\n createAnimate.bind(this)(animations[attribute], guided);\n }\n\n }.bind(this));\n\n return this;\n }\n\n Chartist.Svg = Chartist.Class.extend({\n constructor: Svg,\n attr: attr,\n elem: elem,\n parent: parent,\n root: root,\n querySelector: querySelector,\n querySelectorAll: querySelectorAll,\n getNode: getNode,\n foreignObject: foreignObject,\n text: text,\n empty: empty,\n remove: remove,\n replace: replace,\n append: append,\n classes: classes,\n addClass: addClass,\n removeClass: removeClass,\n removeAllClasses: removeAllClasses,\n height: height,\n width: width,\n animate: animate\n });\n\n /**\n * This method checks for support of a given SVG feature like Extensibility, SVG-animation or the like. Check http://www.w3.org/TR/SVG11/feature for a detailed list.\n *\n * @memberof Chartist.Svg\n * @param {String} feature The SVG 1.1 feature that should be checked for support.\n * @return {Boolean} True of false if the feature is supported or not\n */\n Chartist.Svg.isSupported = function(feature) {\n return document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#' + feature, '1.1');\n };\n\n /**\n * This Object contains some standard easing cubic bezier curves. Then can be used with their name in the `Chartist.Svg.animate`. You can also extend the list and use your own name in the `animate` function. Click the show code button to see the available bezier functions.\n *\n * @memberof Chartist.Svg\n */\n var easingCubicBeziers = {\n easeInSine: [0.47, 0, 0.745, 0.715],\n easeOutSine: [0.39, 0.575, 0.565, 1],\n easeInOutSine: [0.445, 0.05, 0.55, 0.95],\n easeInQuad: [0.55, 0.085, 0.68, 0.53],\n easeOutQuad: [0.25, 0.46, 0.45, 0.94],\n easeInOutQuad: [0.455, 0.03, 0.515, 0.955],\n easeInCubic: [0.55, 0.055, 0.675, 0.19],\n easeOutCubic: [0.215, 0.61, 0.355, 1],\n easeInOutCubic: [0.645, 0.045, 0.355, 1],\n easeInQuart: [0.895, 0.03, 0.685, 0.22],\n easeOutQuart: [0.165, 0.84, 0.44, 1],\n easeInOutQuart: [0.77, 0, 0.175, 1],\n easeInQuint: [0.755, 0.05, 0.855, 0.06],\n easeOutQuint: [0.23, 1, 0.32, 1],\n easeInOutQuint: [0.86, 0, 0.07, 1],\n easeInExpo: [0.95, 0.05, 0.795, 0.035],\n easeOutExpo: [0.19, 1, 0.22, 1],\n easeInOutExpo: [1, 0, 0, 1],\n easeInCirc: [0.6, 0.04, 0.98, 0.335],\n easeOutCirc: [0.075, 0.82, 0.165, 1],\n easeInOutCirc: [0.785, 0.135, 0.15, 0.86],\n easeInBack: [0.6, -0.28, 0.735, 0.045],\n easeOutBack: [0.175, 0.885, 0.32, 1.275],\n easeInOutBack: [0.68, -0.55, 0.265, 1.55]\n };\n\n Chartist.Svg.Easing = easingCubicBeziers;\n\n /**\n * This helper class is to wrap multiple `Chartist.Svg` elements into a list where you can call the `Chartist.Svg` functions on all elements in the list with one call. This is helpful when you'd like to perform calls with `Chartist.Svg` on multiple elements.\n * An instance of this class is also returned by `Chartist.Svg.querySelectorAll`.\n *\n * @memberof Chartist.Svg\n * @param {Array|NodeList} nodeList An Array of SVG DOM nodes or a SVG DOM NodeList (as returned by document.querySelectorAll)\n * @constructor\n */\n function SvgList(nodeList) {\n var list = this;\n\n this.svgElements = [];\n for(var i = 0; i < nodeList.length; i++) {\n this.svgElements.push(new Chartist.Svg(nodeList[i]));\n }\n\n // Add delegation methods for Chartist.Svg\n Object.keys(Chartist.Svg.prototype).filter(function(prototypeProperty) {\n return ['constructor',\n 'parent',\n 'querySelector',\n 'querySelectorAll',\n 'replace',\n 'append',\n 'classes',\n 'height',\n 'width'].indexOf(prototypeProperty) === -1;\n }).forEach(function(prototypeProperty) {\n list[prototypeProperty] = function() {\n var args = Array.prototype.slice.call(arguments, 0);\n list.svgElements.forEach(function(element) {\n Chartist.Svg.prototype[prototypeProperty].apply(element, args);\n });\n return list;\n };\n });\n }\n\n Chartist.Svg.List = Chartist.Class.extend({\n constructor: SvgList\n });\n}(this || __webpack_require__.g, Chartist));\n;/**\n * Chartist SVG path module for SVG path description creation and modification.\n *\n * @module Chartist.Svg.Path\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n /**\n * Contains the descriptors of supported element types in a SVG path. Currently only move, line and curve are supported.\n *\n * @memberof Chartist.Svg.Path\n * @type {Object}\n */\n var elementDescriptions = {\n m: ['x', 'y'],\n l: ['x', 'y'],\n c: ['x1', 'y1', 'x2', 'y2', 'x', 'y'],\n a: ['rx', 'ry', 'xAr', 'lAf', 'sf', 'x', 'y']\n };\n\n /**\n * Default options for newly created SVG path objects.\n *\n * @memberof Chartist.Svg.Path\n * @type {Object}\n */\n var defaultOptions = {\n // The accuracy in digit count after the decimal point. This will be used to round numbers in the SVG path. If this option is set to false then no rounding will be performed.\n accuracy: 3\n };\n\n function element(command, params, pathElements, pos, relative, data) {\n var pathElement = Chartist.extend({\n command: relative ? command.toLowerCase() : command.toUpperCase()\n }, params, data ? { data: data } : {} );\n\n pathElements.splice(pos, 0, pathElement);\n }\n\n function forEachParam(pathElements, cb) {\n pathElements.forEach(function(pathElement, pathElementIndex) {\n elementDescriptions[pathElement.command.toLowerCase()].forEach(function(paramName, paramIndex) {\n cb(pathElement, paramName, pathElementIndex, paramIndex, pathElements);\n });\n });\n }\n\n /**\n * Used to construct a new path object.\n *\n * @memberof Chartist.Svg.Path\n * @param {Boolean} close If set to true then this path will be closed when stringified (with a Z at the end)\n * @param {Object} options Options object that overrides the default objects. See default options for more details.\n * @constructor\n */\n function SvgPath(close, options) {\n this.pathElements = [];\n this.pos = 0;\n this.close = close;\n this.options = Chartist.extend({}, defaultOptions, options);\n }\n\n /**\n * Gets or sets the current position (cursor) inside of the path. You can move around the cursor freely but limited to 0 or the count of existing elements. All modifications with element functions will insert new elements at the position of this cursor.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} [pos] If a number is passed then the cursor is set to this position in the path element array.\n * @return {Chartist.Svg.Path|Number} If the position parameter was passed then the return value will be the path object for easy call chaining. If no position parameter was passed then the current position is returned.\n */\n function position(pos) {\n if(pos !== undefined) {\n this.pos = Math.max(0, Math.min(this.pathElements.length, pos));\n return this;\n } else {\n return this.pos;\n }\n }\n\n /**\n * Removes elements from the path starting at the current position.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} count Number of path elements that should be removed from the current position.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function remove(count) {\n this.pathElements.splice(this.pos, count);\n return this;\n }\n\n /**\n * Use this function to add a new move SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The x coordinate for the move element.\n * @param {Number} y The y coordinate for the move element.\n * @param {Boolean} [relative] If set to true the move element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function move(x, y, relative, data) {\n element('M', {\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Use this function to add a new line SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The x coordinate for the line element.\n * @param {Number} y The y coordinate for the line element.\n * @param {Boolean} [relative] If set to true the line element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function line(x, y, relative, data) {\n element('L', {\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Use this function to add a new curve SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x1 The x coordinate for the first control point of the bezier curve.\n * @param {Number} y1 The y coordinate for the first control point of the bezier curve.\n * @param {Number} x2 The x coordinate for the second control point of the bezier curve.\n * @param {Number} y2 The y coordinate for the second control point of the bezier curve.\n * @param {Number} x The x coordinate for the target point of the curve element.\n * @param {Number} y The y coordinate for the target point of the curve element.\n * @param {Boolean} [relative] If set to true the curve element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function curve(x1, y1, x2, y2, x, y, relative, data) {\n element('C', {\n x1: +x1,\n y1: +y1,\n x2: +x2,\n y2: +y2,\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Use this function to add a new non-bezier curve SVG path element.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} rx The radius to be used for the x-axis of the arc.\n * @param {Number} ry The radius to be used for the y-axis of the arc.\n * @param {Number} xAr Defines the orientation of the arc\n * @param {Number} lAf Large arc flag\n * @param {Number} sf Sweep flag\n * @param {Number} x The x coordinate for the target point of the curve element.\n * @param {Number} y The y coordinate for the target point of the curve element.\n * @param {Boolean} [relative] If set to true the curve element will be created with relative coordinates (lowercase letter)\n * @param {*} [data] Any data that should be stored with the element object that will be accessible in pathElement\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function arc(rx, ry, xAr, lAf, sf, x, y, relative, data) {\n element('A', {\n rx: +rx,\n ry: +ry,\n xAr: +xAr,\n lAf: +lAf,\n sf: +sf,\n x: +x,\n y: +y\n }, this.pathElements, this.pos++, relative, data);\n return this;\n }\n\n /**\n * Parses an SVG path seen in the d attribute of path elements, and inserts the parsed elements into the existing path object at the current cursor position. Any closing path indicators (Z at the end of the path) will be ignored by the parser as this is provided by the close option in the options of the path object.\n *\n * @memberof Chartist.Svg.Path\n * @param {String} path Any SVG path that contains move (m), line (l) or curve (c) components.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function parse(path) {\n // Parsing the SVG path string into an array of arrays [['M', '10', '10'], ['L', '100', '100']]\n var chunks = path.replace(/([A-Za-z])([0-9])/g, '$1 $2')\n .replace(/([0-9])([A-Za-z])/g, '$1 $2')\n .split(/[\\s,]+/)\n .reduce(function(result, element) {\n if(element.match(/[A-Za-z]/)) {\n result.push([]);\n }\n\n result[result.length - 1].push(element);\n return result;\n }, []);\n\n // If this is a closed path we remove the Z at the end because this is determined by the close option\n if(chunks[chunks.length - 1][0].toUpperCase() === 'Z') {\n chunks.pop();\n }\n\n // Using svgPathElementDescriptions to map raw path arrays into objects that contain the command and the parameters\n // For example {command: 'M', x: '10', y: '10'}\n var elements = chunks.map(function(chunk) {\n var command = chunk.shift(),\n description = elementDescriptions[command.toLowerCase()];\n\n return Chartist.extend({\n command: command\n }, description.reduce(function(result, paramName, index) {\n result[paramName] = +chunk[index];\n return result;\n }, {}));\n });\n\n // Preparing a splice call with the elements array as var arg params and insert the parsed elements at the current position\n var spliceArgs = [this.pos, 0];\n Array.prototype.push.apply(spliceArgs, elements);\n Array.prototype.splice.apply(this.pathElements, spliceArgs);\n // Increase the internal position by the element count\n this.pos += elements.length;\n\n return this;\n }\n\n /**\n * This function renders to current SVG path object into a final SVG string that can be used in the d attribute of SVG path elements. It uses the accuracy option to round big decimals. If the close parameter was set in the constructor of this path object then a path closing Z will be appended to the output string.\n *\n * @memberof Chartist.Svg.Path\n * @return {String}\n */\n function stringify() {\n var accuracyMultiplier = Math.pow(10, this.options.accuracy);\n\n return this.pathElements.reduce(function(path, pathElement) {\n var params = elementDescriptions[pathElement.command.toLowerCase()].map(function(paramName) {\n return this.options.accuracy ?\n (Math.round(pathElement[paramName] * accuracyMultiplier) / accuracyMultiplier) :\n pathElement[paramName];\n }.bind(this));\n\n return path + pathElement.command + params.join(',');\n }.bind(this), '') + (this.close ? 'Z' : '');\n }\n\n /**\n * Scales all elements in the current SVG path object. There is an individual parameter for each coordinate. Scaling will also be done for control points of curves, affecting the given coordinate.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The number which will be used to scale the x, x1 and x2 of all path elements.\n * @param {Number} y The number which will be used to scale the y, y1 and y2 of all path elements.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function scale(x, y) {\n forEachParam(this.pathElements, function(pathElement, paramName) {\n pathElement[paramName] *= paramName[0] === 'x' ? x : y;\n });\n return this;\n }\n\n /**\n * Translates all elements in the current SVG path object. The translation is relative and there is an individual parameter for each coordinate. Translation will also be done for control points of curves, affecting the given coordinate.\n *\n * @memberof Chartist.Svg.Path\n * @param {Number} x The number which will be used to translate the x, x1 and x2 of all path elements.\n * @param {Number} y The number which will be used to translate the y, y1 and y2 of all path elements.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function translate(x, y) {\n forEachParam(this.pathElements, function(pathElement, paramName) {\n pathElement[paramName] += paramName[0] === 'x' ? x : y;\n });\n return this;\n }\n\n /**\n * This function will run over all existing path elements and then loop over their attributes. The callback function will be called for every path element attribute that exists in the current path.\n * The method signature of the callback function looks like this:\n * ```javascript\n * function(pathElement, paramName, pathElementIndex, paramIndex, pathElements)\n * ```\n * If something else than undefined is returned by the callback function, this value will be used to replace the old value. This allows you to build custom transformations of path objects that can't be achieved using the basic transformation functions scale and translate.\n *\n * @memberof Chartist.Svg.Path\n * @param {Function} transformFnc The callback function for the transformation. Check the signature in the function description.\n * @return {Chartist.Svg.Path} The current path object for easy call chaining.\n */\n function transform(transformFnc) {\n forEachParam(this.pathElements, function(pathElement, paramName, pathElementIndex, paramIndex, pathElements) {\n var transformed = transformFnc(pathElement, paramName, pathElementIndex, paramIndex, pathElements);\n if(transformed || transformed === 0) {\n pathElement[paramName] = transformed;\n }\n });\n return this;\n }\n\n /**\n * This function clones a whole path object with all its properties. This is a deep clone and path element objects will also be cloned.\n *\n * @memberof Chartist.Svg.Path\n * @param {Boolean} [close] Optional option to set the new cloned path to closed. If not specified or false, the original path close option will be used.\n * @return {Chartist.Svg.Path}\n */\n function clone(close) {\n var c = new Chartist.Svg.Path(close || this.close);\n c.pos = this.pos;\n c.pathElements = this.pathElements.slice().map(function cloneElements(pathElement) {\n return Chartist.extend({}, pathElement);\n });\n c.options = Chartist.extend({}, this.options);\n return c;\n }\n\n /**\n * Split a Svg.Path object by a specific command in the path chain. The path chain will be split and an array of newly created paths objects will be returned. This is useful if you'd like to split an SVG path by it's move commands, for example, in order to isolate chunks of drawings.\n *\n * @memberof Chartist.Svg.Path\n * @param {String} command The command you'd like to use to split the path\n * @return {Array}\n */\n function splitByCommand(command) {\n var split = [\n new Chartist.Svg.Path()\n ];\n\n this.pathElements.forEach(function(pathElement) {\n if(pathElement.command === command.toUpperCase() && split[split.length - 1].pathElements.length !== 0) {\n split.push(new Chartist.Svg.Path());\n }\n\n split[split.length - 1].pathElements.push(pathElement);\n });\n\n return split;\n }\n\n /**\n * This static function on `Chartist.Svg.Path` is joining multiple paths together into one paths.\n *\n * @memberof Chartist.Svg.Path\n * @param {Array} paths A list of paths to be joined together. The order is important.\n * @param {boolean} close If the newly created path should be a closed path\n * @param {Object} options Path options for the newly created path.\n * @return {Chartist.Svg.Path}\n */\n\n function join(paths, close, options) {\n var joinedPath = new Chartist.Svg.Path(close, options);\n for(var i = 0; i < paths.length; i++) {\n var path = paths[i];\n for(var j = 0; j < path.pathElements.length; j++) {\n joinedPath.pathElements.push(path.pathElements[j]);\n }\n }\n return joinedPath;\n }\n\n Chartist.Svg.Path = Chartist.Class.extend({\n constructor: SvgPath,\n position: position,\n remove: remove,\n move: move,\n line: line,\n curve: curve,\n arc: arc,\n scale: scale,\n translate: translate,\n transform: transform,\n parse: parse,\n stringify: stringify,\n clone: clone,\n splitByCommand: splitByCommand\n });\n\n Chartist.Svg.Path.elementDescriptions = elementDescriptions;\n Chartist.Svg.Path.join = join;\n}(this || __webpack_require__.g, Chartist));\n;/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n var axisUnits = {\n x: {\n pos: 'x',\n len: 'width',\n dir: 'horizontal',\n rectStart: 'x1',\n rectEnd: 'x2',\n rectOffset: 'y2'\n },\n y: {\n pos: 'y',\n len: 'height',\n dir: 'vertical',\n rectStart: 'y2',\n rectEnd: 'y1',\n rectOffset: 'x1'\n }\n };\n\n function Axis(units, chartRect, ticks, options) {\n this.units = units;\n this.counterUnits = units === axisUnits.x ? axisUnits.y : axisUnits.x;\n this.chartRect = chartRect;\n this.axisLength = chartRect[units.rectEnd] - chartRect[units.rectStart];\n this.gridOffset = chartRect[units.rectOffset];\n this.ticks = ticks;\n this.options = options;\n }\n\n function createGridAndLabels(gridGroup, labelGroup, useForeignObject, chartOptions, eventEmitter) {\n var axisOptions = chartOptions['axis' + this.units.pos.toUpperCase()];\n var projectedValues = this.ticks.map(this.projectValue.bind(this));\n var labelValues = this.ticks.map(axisOptions.labelInterpolationFnc);\n\n projectedValues.forEach(function(projectedValue, index) {\n var labelOffset = {\n x: 0,\n y: 0\n };\n\n // TODO: Find better solution for solving this problem\n // Calculate how much space we have available for the label\n var labelLength;\n if(projectedValues[index + 1]) {\n // If we still have one label ahead, we can calculate the distance to the next tick / label\n labelLength = projectedValues[index + 1] - projectedValue;\n } else {\n // If we don't have a label ahead and we have only two labels in total, we just take the remaining distance to\n // on the whole axis length. We limit that to a minimum of 30 pixel, so that labels close to the border will\n // still be visible inside of the chart padding.\n labelLength = Math.max(this.axisLength - projectedValue, 30);\n }\n\n // Skip grid lines and labels where interpolated label values are falsey (execpt for 0)\n if(Chartist.isFalseyButZero(labelValues[index]) && labelValues[index] !== '') {\n return;\n }\n\n // Transform to global coordinates using the chartRect\n // We also need to set the label offset for the createLabel function\n if(this.units.pos === 'x') {\n projectedValue = this.chartRect.x1 + projectedValue;\n labelOffset.x = chartOptions.axisX.labelOffset.x;\n\n // If the labels should be positioned in start position (top side for vertical axis) we need to set a\n // different offset as for positioned with end (bottom)\n if(chartOptions.axisX.position === 'start') {\n labelOffset.y = this.chartRect.padding.top + chartOptions.axisX.labelOffset.y + (useForeignObject ? 5 : 20);\n } else {\n labelOffset.y = this.chartRect.y1 + chartOptions.axisX.labelOffset.y + (useForeignObject ? 5 : 20);\n }\n } else {\n projectedValue = this.chartRect.y1 - projectedValue;\n labelOffset.y = chartOptions.axisY.labelOffset.y - (useForeignObject ? labelLength : 0);\n\n // If the labels should be positioned in start position (left side for horizontal axis) we need to set a\n // different offset as for positioned with end (right side)\n if(chartOptions.axisY.position === 'start') {\n labelOffset.x = useForeignObject ? this.chartRect.padding.left + chartOptions.axisY.labelOffset.x : this.chartRect.x1 - 10;\n } else {\n labelOffset.x = this.chartRect.x2 + chartOptions.axisY.labelOffset.x + 10;\n }\n }\n\n if(axisOptions.showGrid) {\n Chartist.createGrid(projectedValue, index, this, this.gridOffset, this.chartRect[this.counterUnits.len](), gridGroup, [\n chartOptions.classNames.grid,\n chartOptions.classNames[this.units.dir]\n ], eventEmitter);\n }\n\n if(axisOptions.showLabel) {\n Chartist.createLabel(projectedValue, labelLength, index, labelValues, this, axisOptions.offset, labelOffset, labelGroup, [\n chartOptions.classNames.label,\n chartOptions.classNames[this.units.dir],\n (axisOptions.position === 'start' ? chartOptions.classNames[axisOptions.position] : chartOptions.classNames['end'])\n ], useForeignObject, eventEmitter);\n }\n }.bind(this));\n }\n\n Chartist.Axis = Chartist.Class.extend({\n constructor: Axis,\n createGridAndLabels: createGridAndLabels,\n projectValue: function(value, index, data) {\n throw new Error('Base axis can\\'t be instantiated!');\n }\n });\n\n Chartist.Axis.units = axisUnits;\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * The auto scale axis uses standard linear scale projection of values along an axis. It uses order of magnitude to find a scale automatically and evaluates the available space in order to find the perfect amount of ticks for your chart.\n * **Options**\n * The following options are used by this axis in addition to the default axis options outlined in the axis configuration of the chart default settings.\n * ```javascript\n * var options = {\n * // If high is specified then the axis will display values explicitly up to this value and the computed maximum from the data is ignored\n * high: 100,\n * // If low is specified then the axis will display values explicitly down to this value and the computed minimum from the data is ignored\n * low: 0,\n * // This option will be used when finding the right scale division settings. The amount of ticks on the scale will be determined so that as many ticks as possible will be displayed, while not violating this minimum required space (in pixel).\n * scaleMinSpace: 20,\n * // Can be set to true or false. If set to true, the scale will be generated with whole numbers only.\n * onlyInteger: true,\n * // The reference value can be used to make sure that this value will always be on the chart. This is especially useful on bipolar charts where the bipolar center always needs to be part of the chart.\n * referenceValue: 5\n * };\n * ```\n *\n * @module Chartist.AutoScaleAxis\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n function AutoScaleAxis(axisUnit, data, chartRect, options) {\n // Usually we calculate highLow based on the data but this can be overriden by a highLow object in the options\n var highLow = options.highLow || Chartist.getHighLow(data, options, axisUnit.pos);\n this.bounds = Chartist.getBounds(chartRect[axisUnit.rectEnd] - chartRect[axisUnit.rectStart], highLow, options.scaleMinSpace || 20, options.onlyInteger);\n this.range = {\n min: this.bounds.min,\n max: this.bounds.max\n };\n\n Chartist.AutoScaleAxis.super.constructor.call(this,\n axisUnit,\n chartRect,\n this.bounds.values,\n options);\n }\n\n function projectValue(value) {\n return this.axisLength * (+Chartist.getMultiValue(value, this.units.pos) - this.bounds.min) / this.bounds.range;\n }\n\n Chartist.AutoScaleAxis = Chartist.Axis.extend({\n constructor: AutoScaleAxis,\n projectValue: projectValue\n });\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * The fixed scale axis uses standard linear projection of values along an axis. It makes use of a divisor option to divide the range provided from the minimum and maximum value or the options high and low that will override the computed minimum and maximum.\n * **Options**\n * The following options are used by this axis in addition to the default axis options outlined in the axis configuration of the chart default settings.\n * ```javascript\n * var options = {\n * // If high is specified then the axis will display values explicitly up to this value and the computed maximum from the data is ignored\n * high: 100,\n * // If low is specified then the axis will display values explicitly down to this value and the computed minimum from the data is ignored\n * low: 0,\n * // If specified then the value range determined from minimum to maximum (or low and high) will be divided by this number and ticks will be generated at those division points. The default divisor is 1.\n * divisor: 4,\n * // If ticks is explicitly set, then the axis will not compute the ticks with the divisor, but directly use the data in ticks to determine at what points on the axis a tick need to be generated.\n * ticks: [1, 10, 20, 30]\n * };\n * ```\n *\n * @module Chartist.FixedScaleAxis\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n function FixedScaleAxis(axisUnit, data, chartRect, options) {\n var highLow = options.highLow || Chartist.getHighLow(data, options, axisUnit.pos);\n this.divisor = options.divisor || 1;\n this.ticks = options.ticks || Chartist.times(this.divisor).map(function(value, index) {\n return highLow.low + (highLow.high - highLow.low) / this.divisor * index;\n }.bind(this));\n this.ticks.sort(function(a, b) {\n return a - b;\n });\n this.range = {\n min: highLow.low,\n max: highLow.high\n };\n\n Chartist.FixedScaleAxis.super.constructor.call(this,\n axisUnit,\n chartRect,\n this.ticks,\n options);\n\n this.stepLength = this.axisLength / this.divisor;\n }\n\n function projectValue(value) {\n return this.axisLength * (+Chartist.getMultiValue(value, this.units.pos) - this.range.min) / (this.range.max - this.range.min);\n }\n\n Chartist.FixedScaleAxis = Chartist.Axis.extend({\n constructor: FixedScaleAxis,\n projectValue: projectValue\n });\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * The step axis for step based charts like bar chart or step based line charts. It uses a fixed amount of ticks that will be equally distributed across the whole axis length. The projection is done using the index of the data value rather than the value itself and therefore it's only useful for distribution purpose.\n * **Options**\n * The following options are used by this axis in addition to the default axis options outlined in the axis configuration of the chart default settings.\n * ```javascript\n * var options = {\n * // Ticks to be used to distribute across the axis length. As this axis type relies on the index of the value rather than the value, arbitrary data that can be converted to a string can be used as ticks.\n * ticks: ['One', 'Two', 'Three'],\n * // If set to true the full width will be used to distribute the values where the last value will be at the maximum of the axis length. If false the spaces between the ticks will be evenly distributed instead.\n * stretch: true\n * };\n * ```\n *\n * @module Chartist.StepAxis\n */\n/* global Chartist */\n(function (globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n function StepAxis(axisUnit, data, chartRect, options) {\n Chartist.StepAxis.super.constructor.call(this,\n axisUnit,\n chartRect,\n options.ticks,\n options);\n\n var calc = Math.max(1, options.ticks.length - (options.stretch ? 1 : 0));\n this.stepLength = this.axisLength / calc;\n }\n\n function projectValue(value, index) {\n return this.stepLength * index;\n }\n\n Chartist.StepAxis = Chartist.Axis.extend({\n constructor: StepAxis,\n projectValue: projectValue\n });\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * The Chartist line chart can be used to draw Line or Scatter charts. If used in the browser you can access the global `Chartist` namespace where you find the `Line` function as a main entry point.\n *\n * For examples on how to use the line chart please check the examples of the `Chartist.Line` method.\n *\n * @module Chartist.Line\n */\n/* global Chartist */\n(function(globalRoot, Chartist){\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * Default options in line charts. Expand the code view to see a detailed list of options with comments.\n *\n * @memberof Chartist.Line\n */\n var defaultOptions = {\n // Options for X-Axis\n axisX: {\n // The offset of the labels to the chart area\n offset: 30,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'end',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // Set the axis type to be used to project values on this axis. If not defined, Chartist.StepAxis will be used for the X-Axis, where the ticks option will be set to the labels in the data and the stretch option will be set to the global fullWidth option. This type can be changed to any axis constructor available (e.g. Chartist.FixedScaleAxis), where all axis options should be present here.\n type: undefined\n },\n // Options for Y-Axis\n axisY: {\n // The offset of the labels to the chart area\n offset: 40,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'start',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // Set the axis type to be used to project values on this axis. If not defined, Chartist.AutoScaleAxis will be used for the Y-Axis, where the high and low options will be set to the global high and low options. This type can be changed to any axis constructor available (e.g. Chartist.FixedScaleAxis), where all axis options should be present here.\n type: undefined,\n // This value specifies the minimum height in pixel of the scale steps\n scaleMinSpace: 20,\n // Use only integer values (whole numbers) for the scale steps\n onlyInteger: false\n },\n // Specify a fixed width for the chart as a string (i.e. '100px' or '50%')\n width: undefined,\n // Specify a fixed height for the chart as a string (i.e. '100px' or '50%')\n height: undefined,\n // If the line should be drawn or not\n showLine: true,\n // If dots should be drawn or not\n showPoint: true,\n // If the line chart should draw an area\n showArea: false,\n // The base for the area chart that will be used to close the area shape (is normally 0)\n areaBase: 0,\n // Specify if the lines should be smoothed. This value can be true or false where true will result in smoothing using the default smoothing interpolation function Chartist.Interpolation.cardinal and false results in Chartist.Interpolation.none. You can also choose other smoothing / interpolation functions available in the Chartist.Interpolation module, or write your own interpolation function. Check the examples for a brief description.\n lineSmooth: true,\n // If the line chart should add a background fill to the .ct-grids group.\n showGridBackground: false,\n // Overriding the natural low of the chart allows you to zoom in or limit the charts lowest displayed value\n low: undefined,\n // Overriding the natural high of the chart allows you to zoom in or limit the charts highest displayed value\n high: undefined,\n // Padding of the chart drawing area to the container element and labels as a number or padding object {top: 5, right: 5, bottom: 5, left: 5}\n chartPadding: {\n top: 15,\n right: 15,\n bottom: 5,\n left: 10\n },\n // When set to true, the last grid line on the x-axis is not drawn and the chart elements will expand to the full available width of the chart. For the last label to be drawn correctly you might need to add chart padding or offset the last label with a draw event handler.\n fullWidth: false,\n // If true the whole data is reversed including labels, the series order as well as the whole series data arrays.\n reverseData: false,\n // Override the class names that get used to generate the SVG structure of the chart\n classNames: {\n chart: 'ct-chart-line',\n label: 'ct-label',\n labelGroup: 'ct-labels',\n series: 'ct-series',\n line: 'ct-line',\n point: 'ct-point',\n area: 'ct-area',\n grid: 'ct-grid',\n gridGroup: 'ct-grids',\n gridBackground: 'ct-grid-background',\n vertical: 'ct-vertical',\n horizontal: 'ct-horizontal',\n start: 'ct-start',\n end: 'ct-end'\n }\n };\n\n /**\n * Creates a new chart\n *\n */\n function createChart(options) {\n var data = Chartist.normalizeData(this.data, options.reverseData, true);\n\n // Create new svg object\n this.svg = Chartist.createSvg(this.container, options.width, options.height, options.classNames.chart);\n // Create groups for labels, grid and series\n var gridGroup = this.svg.elem('g').addClass(options.classNames.gridGroup);\n var seriesGroup = this.svg.elem('g');\n var labelGroup = this.svg.elem('g').addClass(options.classNames.labelGroup);\n\n var chartRect = Chartist.createChartRect(this.svg, options, defaultOptions.padding);\n var axisX, axisY;\n\n if(options.axisX.type === undefined) {\n axisX = new Chartist.StepAxis(Chartist.Axis.units.x, data.normalized.series, chartRect, Chartist.extend({}, options.axisX, {\n ticks: data.normalized.labels,\n stretch: options.fullWidth\n }));\n } else {\n axisX = options.axisX.type.call(Chartist, Chartist.Axis.units.x, data.normalized.series, chartRect, options.axisX);\n }\n\n if(options.axisY.type === undefined) {\n axisY = new Chartist.AutoScaleAxis(Chartist.Axis.units.y, data.normalized.series, chartRect, Chartist.extend({}, options.axisY, {\n high: Chartist.isNumeric(options.high) ? options.high : options.axisY.high,\n low: Chartist.isNumeric(options.low) ? options.low : options.axisY.low\n }));\n } else {\n axisY = options.axisY.type.call(Chartist, Chartist.Axis.units.y, data.normalized.series, chartRect, options.axisY);\n }\n\n axisX.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n axisY.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n\n if (options.showGridBackground) {\n Chartist.createGridBackground(gridGroup, chartRect, options.classNames.gridBackground, this.eventEmitter);\n }\n\n // Draw the series\n data.raw.series.forEach(function(series, seriesIndex) {\n var seriesElement = seriesGroup.elem('g');\n\n // Write attributes to series group element. If series name or meta is undefined the attributes will not be written\n seriesElement.attr({\n 'ct:series-name': series.name,\n 'ct:meta': Chartist.serialize(series.meta)\n });\n\n // Use series class from series data or if not set generate one\n seriesElement.addClass([\n options.classNames.series,\n (series.className || options.classNames.series + '-' + Chartist.alphaNumerate(seriesIndex))\n ].join(' '));\n\n var pathCoordinates = [],\n pathData = [];\n\n data.normalized.series[seriesIndex].forEach(function(value, valueIndex) {\n var p = {\n x: chartRect.x1 + axisX.projectValue(value, valueIndex, data.normalized.series[seriesIndex]),\n y: chartRect.y1 - axisY.projectValue(value, valueIndex, data.normalized.series[seriesIndex])\n };\n pathCoordinates.push(p.x, p.y);\n pathData.push({\n value: value,\n valueIndex: valueIndex,\n meta: Chartist.getMetaData(series, valueIndex)\n });\n }.bind(this));\n\n var seriesOptions = {\n lineSmooth: Chartist.getSeriesOption(series, options, 'lineSmooth'),\n showPoint: Chartist.getSeriesOption(series, options, 'showPoint'),\n showLine: Chartist.getSeriesOption(series, options, 'showLine'),\n showArea: Chartist.getSeriesOption(series, options, 'showArea'),\n areaBase: Chartist.getSeriesOption(series, options, 'areaBase')\n };\n\n var smoothing = typeof seriesOptions.lineSmooth === 'function' ?\n seriesOptions.lineSmooth : (seriesOptions.lineSmooth ? Chartist.Interpolation.monotoneCubic() : Chartist.Interpolation.none());\n // Interpolating path where pathData will be used to annotate each path element so we can trace back the original\n // index, value and meta data\n var path = smoothing(pathCoordinates, pathData);\n\n // If we should show points we need to create them now to avoid secondary loop\n // Points are drawn from the pathElements returned by the interpolation function\n // Small offset for Firefox to render squares correctly\n if (seriesOptions.showPoint) {\n\n path.pathElements.forEach(function(pathElement) {\n var point = seriesElement.elem('line', {\n x1: pathElement.x,\n y1: pathElement.y,\n x2: pathElement.x + 0.01,\n y2: pathElement.y\n }, options.classNames.point).attr({\n 'ct:value': [pathElement.data.value.x, pathElement.data.value.y].filter(Chartist.isNumeric).join(','),\n 'ct:meta': Chartist.serialize(pathElement.data.meta)\n });\n\n this.eventEmitter.emit('draw', {\n type: 'point',\n value: pathElement.data.value,\n index: pathElement.data.valueIndex,\n meta: pathElement.data.meta,\n series: series,\n seriesIndex: seriesIndex,\n axisX: axisX,\n axisY: axisY,\n group: seriesElement,\n element: point,\n x: pathElement.x,\n y: pathElement.y\n });\n }.bind(this));\n }\n\n if(seriesOptions.showLine) {\n var line = seriesElement.elem('path', {\n d: path.stringify()\n }, options.classNames.line, true);\n\n this.eventEmitter.emit('draw', {\n type: 'line',\n values: data.normalized.series[seriesIndex],\n path: path.clone(),\n chartRect: chartRect,\n index: seriesIndex,\n series: series,\n seriesIndex: seriesIndex,\n seriesMeta: series.meta,\n axisX: axisX,\n axisY: axisY,\n group: seriesElement,\n element: line\n });\n }\n\n // Area currently only works with axes that support a range!\n if(seriesOptions.showArea && axisY.range) {\n // If areaBase is outside the chart area (< min or > max) we need to set it respectively so that\n // the area is not drawn outside the chart area.\n var areaBase = Math.max(Math.min(seriesOptions.areaBase, axisY.range.max), axisY.range.min);\n\n // We project the areaBase value into screen coordinates\n var areaBaseProjected = chartRect.y1 - axisY.projectValue(areaBase);\n\n // In order to form the area we'll first split the path by move commands so we can chunk it up into segments\n path.splitByCommand('M').filter(function onlySolidSegments(pathSegment) {\n // We filter only \"solid\" segments that contain more than one point. Otherwise there's no need for an area\n return pathSegment.pathElements.length > 1;\n }).map(function convertToArea(solidPathSegments) {\n // Receiving the filtered solid path segments we can now convert those segments into fill areas\n var firstElement = solidPathSegments.pathElements[0];\n var lastElement = solidPathSegments.pathElements[solidPathSegments.pathElements.length - 1];\n\n // Cloning the solid path segment with closing option and removing the first move command from the clone\n // We then insert a new move that should start at the area base and draw a straight line up or down\n // at the end of the path we add an additional straight line to the projected area base value\n // As the closing option is set our path will be automatically closed\n return solidPathSegments.clone(true)\n .position(0)\n .remove(1)\n .move(firstElement.x, areaBaseProjected)\n .line(firstElement.x, firstElement.y)\n .position(solidPathSegments.pathElements.length + 1)\n .line(lastElement.x, areaBaseProjected);\n\n }).forEach(function createArea(areaPath) {\n // For each of our newly created area paths, we'll now create path elements by stringifying our path objects\n // and adding the created DOM elements to the correct series group\n var area = seriesElement.elem('path', {\n d: areaPath.stringify()\n }, options.classNames.area, true);\n\n // Emit an event for each area that was drawn\n this.eventEmitter.emit('draw', {\n type: 'area',\n values: data.normalized.series[seriesIndex],\n path: areaPath.clone(),\n series: series,\n seriesIndex: seriesIndex,\n axisX: axisX,\n axisY: axisY,\n chartRect: chartRect,\n index: seriesIndex,\n group: seriesElement,\n element: area\n });\n }.bind(this));\n }\n }.bind(this));\n\n this.eventEmitter.emit('created', {\n bounds: axisY.bounds,\n chartRect: chartRect,\n axisX: axisX,\n axisY: axisY,\n svg: this.svg,\n options: options\n });\n }\n\n /**\n * This method creates a new line chart.\n *\n * @memberof Chartist.Line\n * @param {String|Node} query A selector query string or directly a DOM element\n * @param {Object} data The data object that needs to consist of a labels and a series array\n * @param {Object} [options] The options object with options that override the default options. Check the examples for a detailed list.\n * @param {Array} [responsiveOptions] Specify an array of responsive option arrays which are a media query and options object pair => [[mediaQueryString, optionsObject],[more...]]\n * @return {Object} An object which exposes the API for the created chart\n *\n * @example\n * // Create a simple line chart\n * var data = {\n * // A labels array that can contain any sort of values\n * labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],\n * // Our series array that contains series objects or in this case series data arrays\n * series: [\n * [5, 2, 4, 2, 0]\n * ]\n * };\n *\n * // As options we currently only set a static size of 300x200 px\n * var options = {\n * width: '300px',\n * height: '200px'\n * };\n *\n * // In the global name space Chartist we call the Line function to initialize a line chart. As a first parameter we pass in a selector where we would like to get our chart created. Second parameter is the actual data object and as a third parameter we pass in our options\n * new Chartist.Line('.ct-chart', data, options);\n *\n * @example\n * // Use specific interpolation function with configuration from the Chartist.Interpolation module\n *\n * var chart = new Chartist.Line('.ct-chart', {\n * labels: [1, 2, 3, 4, 5],\n * series: [\n * [1, 1, 8, 1, 7]\n * ]\n * }, {\n * lineSmooth: Chartist.Interpolation.cardinal({\n * tension: 0.2\n * })\n * });\n *\n * @example\n * // Create a line chart with responsive options\n *\n * var data = {\n * // A labels array that can contain any sort of values\n * labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],\n * // Our series array that contains series objects or in this case series data arrays\n * series: [\n * [5, 2, 4, 2, 0]\n * ]\n * };\n *\n * // In addition to the regular options we specify responsive option overrides that will override the default configutation based on the matching media queries.\n * var responsiveOptions = [\n * ['screen and (min-width: 641px) and (max-width: 1024px)', {\n * showPoint: false,\n * axisX: {\n * labelInterpolationFnc: function(value) {\n * // Will return Mon, Tue, Wed etc. on medium screens\n * return value.slice(0, 3);\n * }\n * }\n * }],\n * ['screen and (max-width: 640px)', {\n * showLine: false,\n * axisX: {\n * labelInterpolationFnc: function(value) {\n * // Will return M, T, W etc. on small screens\n * return value[0];\n * }\n * }\n * }]\n * ];\n *\n * new Chartist.Line('.ct-chart', data, null, responsiveOptions);\n *\n */\n function Line(query, data, options, responsiveOptions) {\n Chartist.Line.super.constructor.call(this,\n query,\n data,\n defaultOptions,\n Chartist.extend({}, defaultOptions, options),\n responsiveOptions);\n }\n\n // Creating line chart type in Chartist namespace\n Chartist.Line = Chartist.Base.extend({\n constructor: Line,\n createChart: createChart\n });\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * The bar chart module of Chartist that can be used to draw unipolar or bipolar bar and grouped bar charts.\n *\n * @module Chartist.Bar\n */\n/* global Chartist */\n(function(globalRoot, Chartist){\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * Default options in bar charts. Expand the code view to see a detailed list of options with comments.\n *\n * @memberof Chartist.Bar\n */\n var defaultOptions = {\n // Options for X-Axis\n axisX: {\n // The offset of the chart drawing area to the border of the container\n offset: 30,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'end',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // This value specifies the minimum width in pixel of the scale steps\n scaleMinSpace: 30,\n // Use only integer values (whole numbers) for the scale steps\n onlyInteger: false\n },\n // Options for Y-Axis\n axisY: {\n // The offset of the chart drawing area to the border of the container\n offset: 40,\n // Position where labels are placed. Can be set to `start` or `end` where `start` is equivalent to left or top on vertical axis and `end` is equivalent to right or bottom on horizontal axis.\n position: 'start',\n // Allows you to correct label positioning on this axis by positive or negative x and y offset.\n labelOffset: {\n x: 0,\n y: 0\n },\n // If labels should be shown or not\n showLabel: true,\n // If the axis grid should be drawn or not\n showGrid: true,\n // Interpolation function that allows you to intercept the value from the axis label\n labelInterpolationFnc: Chartist.noop,\n // This value specifies the minimum height in pixel of the scale steps\n scaleMinSpace: 20,\n // Use only integer values (whole numbers) for the scale steps\n onlyInteger: false\n },\n // Specify a fixed width for the chart as a string (i.e. '100px' or '50%')\n width: undefined,\n // Specify a fixed height for the chart as a string (i.e. '100px' or '50%')\n height: undefined,\n // Overriding the natural high of the chart allows you to zoom in or limit the charts highest displayed value\n high: undefined,\n // Overriding the natural low of the chart allows you to zoom in or limit the charts lowest displayed value\n low: undefined,\n // Unless low/high are explicitly set, bar chart will be centered at zero by default. Set referenceValue to null to auto scale.\n referenceValue: 0,\n // Padding of the chart drawing area to the container element and labels as a number or padding object {top: 5, right: 5, bottom: 5, left: 5}\n chartPadding: {\n top: 15,\n right: 15,\n bottom: 5,\n left: 10\n },\n // Specify the distance in pixel of bars in a group\n seriesBarDistance: 15,\n // If set to true this property will cause the series bars to be stacked. Check the `stackMode` option for further stacking options.\n stackBars: false,\n // If set to 'overlap' this property will force the stacked bars to draw from the zero line.\n // If set to 'accumulate' this property will form a total for each series point. This will also influence the y-axis and the overall bounds of the chart. In stacked mode the seriesBarDistance property will have no effect.\n stackMode: 'accumulate',\n // Inverts the axes of the bar chart in order to draw a horizontal bar chart. Be aware that you also need to invert your axis settings as the Y Axis will now display the labels and the X Axis the values.\n horizontalBars: false,\n // If set to true then each bar will represent a series and the data array is expected to be a one dimensional array of data values rather than a series array of series. This is useful if the bar chart should represent a profile rather than some data over time.\n distributeSeries: false,\n // If true the whole data is reversed including labels, the series order as well as the whole series data arrays.\n reverseData: false,\n // If the bar chart should add a background fill to the .ct-grids group.\n showGridBackground: false,\n // Override the class names that get used to generate the SVG structure of the chart\n classNames: {\n chart: 'ct-chart-bar',\n horizontalBars: 'ct-horizontal-bars',\n label: 'ct-label',\n labelGroup: 'ct-labels',\n series: 'ct-series',\n bar: 'ct-bar',\n grid: 'ct-grid',\n gridGroup: 'ct-grids',\n gridBackground: 'ct-grid-background',\n vertical: 'ct-vertical',\n horizontal: 'ct-horizontal',\n start: 'ct-start',\n end: 'ct-end'\n }\n };\n\n /**\n * Creates a new chart\n *\n */\n function createChart(options) {\n var data;\n var highLow;\n\n if(options.distributeSeries) {\n data = Chartist.normalizeData(this.data, options.reverseData, options.horizontalBars ? 'x' : 'y');\n data.normalized.series = data.normalized.series.map(function(value) {\n return [value];\n });\n } else {\n data = Chartist.normalizeData(this.data, options.reverseData, options.horizontalBars ? 'x' : 'y');\n }\n\n // Create new svg element\n this.svg = Chartist.createSvg(\n this.container,\n options.width,\n options.height,\n options.classNames.chart + (options.horizontalBars ? ' ' + options.classNames.horizontalBars : '')\n );\n\n // Drawing groups in correct order\n var gridGroup = this.svg.elem('g').addClass(options.classNames.gridGroup);\n var seriesGroup = this.svg.elem('g');\n var labelGroup = this.svg.elem('g').addClass(options.classNames.labelGroup);\n\n if(options.stackBars && data.normalized.series.length !== 0) {\n\n // If stacked bars we need to calculate the high low from stacked values from each series\n var serialSums = Chartist.serialMap(data.normalized.series, function serialSums() {\n return Array.prototype.slice.call(arguments).map(function(value) {\n return value;\n }).reduce(function(prev, curr) {\n return {\n x: prev.x + (curr && curr.x) || 0,\n y: prev.y + (curr && curr.y) || 0\n };\n }, {x: 0, y: 0});\n });\n\n highLow = Chartist.getHighLow([serialSums], options, options.horizontalBars ? 'x' : 'y');\n\n } else {\n\n highLow = Chartist.getHighLow(data.normalized.series, options, options.horizontalBars ? 'x' : 'y');\n }\n\n // Overrides of high / low from settings\n highLow.high = +options.high || (options.high === 0 ? 0 : highLow.high);\n highLow.low = +options.low || (options.low === 0 ? 0 : highLow.low);\n\n var chartRect = Chartist.createChartRect(this.svg, options, defaultOptions.padding);\n\n var valueAxis,\n labelAxisTicks,\n labelAxis,\n axisX,\n axisY;\n\n // We need to set step count based on some options combinations\n if(options.distributeSeries && options.stackBars) {\n // If distributed series are enabled and bars need to be stacked, we'll only have one bar and therefore should\n // use only the first label for the step axis\n labelAxisTicks = data.normalized.labels.slice(0, 1);\n } else {\n // If distributed series are enabled but stacked bars aren't, we should use the series labels\n // If we are drawing a regular bar chart with two dimensional series data, we just use the labels array\n // as the bars are normalized\n labelAxisTicks = data.normalized.labels;\n }\n\n // Set labelAxis and valueAxis based on the horizontalBars setting. This setting will flip the axes if necessary.\n if(options.horizontalBars) {\n if(options.axisX.type === undefined) {\n valueAxis = axisX = new Chartist.AutoScaleAxis(Chartist.Axis.units.x, data.normalized.series, chartRect, Chartist.extend({}, options.axisX, {\n highLow: highLow,\n referenceValue: 0\n }));\n } else {\n valueAxis = axisX = options.axisX.type.call(Chartist, Chartist.Axis.units.x, data.normalized.series, chartRect, Chartist.extend({}, options.axisX, {\n highLow: highLow,\n referenceValue: 0\n }));\n }\n\n if(options.axisY.type === undefined) {\n labelAxis = axisY = new Chartist.StepAxis(Chartist.Axis.units.y, data.normalized.series, chartRect, {\n ticks: labelAxisTicks\n });\n } else {\n labelAxis = axisY = options.axisY.type.call(Chartist, Chartist.Axis.units.y, data.normalized.series, chartRect, options.axisY);\n }\n } else {\n if(options.axisX.type === undefined) {\n labelAxis = axisX = new Chartist.StepAxis(Chartist.Axis.units.x, data.normalized.series, chartRect, {\n ticks: labelAxisTicks\n });\n } else {\n labelAxis = axisX = options.axisX.type.call(Chartist, Chartist.Axis.units.x, data.normalized.series, chartRect, options.axisX);\n }\n\n if(options.axisY.type === undefined) {\n valueAxis = axisY = new Chartist.AutoScaleAxis(Chartist.Axis.units.y, data.normalized.series, chartRect, Chartist.extend({}, options.axisY, {\n highLow: highLow,\n referenceValue: 0\n }));\n } else {\n valueAxis = axisY = options.axisY.type.call(Chartist, Chartist.Axis.units.y, data.normalized.series, chartRect, Chartist.extend({}, options.axisY, {\n highLow: highLow,\n referenceValue: 0\n }));\n }\n }\n\n // Projected 0 point\n var zeroPoint = options.horizontalBars ? (chartRect.x1 + valueAxis.projectValue(0)) : (chartRect.y1 - valueAxis.projectValue(0));\n // Used to track the screen coordinates of stacked bars\n var stackedBarValues = [];\n\n labelAxis.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n valueAxis.createGridAndLabels(gridGroup, labelGroup, this.supportsForeignObject, options, this.eventEmitter);\n\n if (options.showGridBackground) {\n Chartist.createGridBackground(gridGroup, chartRect, options.classNames.gridBackground, this.eventEmitter);\n }\n\n // Draw the series\n data.raw.series.forEach(function(series, seriesIndex) {\n // Calculating bi-polar value of index for seriesOffset. For i = 0..4 biPol will be -1.5, -0.5, 0.5, 1.5 etc.\n var biPol = seriesIndex - (data.raw.series.length - 1) / 2;\n // Half of the period width between vertical grid lines used to position bars\n var periodHalfLength;\n // Current series SVG element\n var seriesElement;\n\n // We need to set periodHalfLength based on some options combinations\n if(options.distributeSeries && !options.stackBars) {\n // If distributed series are enabled but stacked bars aren't, we need to use the length of the normaizedData array\n // which is the series count and divide by 2\n periodHalfLength = labelAxis.axisLength / data.normalized.series.length / 2;\n } else if(options.distributeSeries && options.stackBars) {\n // If distributed series and stacked bars are enabled we'll only get one bar so we should just divide the axis\n // length by 2\n periodHalfLength = labelAxis.axisLength / 2;\n } else {\n // On regular bar charts we should just use the series length\n periodHalfLength = labelAxis.axisLength / data.normalized.series[seriesIndex].length / 2;\n }\n\n // Adding the series group to the series element\n seriesElement = seriesGroup.elem('g');\n\n // Write attributes to series group element. If series name or meta is undefined the attributes will not be written\n seriesElement.attr({\n 'ct:series-name': series.name,\n 'ct:meta': Chartist.serialize(series.meta)\n });\n\n // Use series class from series data or if not set generate one\n seriesElement.addClass([\n options.classNames.series,\n (series.className || options.classNames.series + '-' + Chartist.alphaNumerate(seriesIndex))\n ].join(' '));\n\n data.normalized.series[seriesIndex].forEach(function(value, valueIndex) {\n var projected,\n bar,\n previousStack,\n labelAxisValueIndex;\n\n // We need to set labelAxisValueIndex based on some options combinations\n if(options.distributeSeries && !options.stackBars) {\n // If distributed series are enabled but stacked bars aren't, we can use the seriesIndex for later projection\n // on the step axis for label positioning\n labelAxisValueIndex = seriesIndex;\n } else if(options.distributeSeries && options.stackBars) {\n // If distributed series and stacked bars are enabled, we will only get one bar and therefore always use\n // 0 for projection on the label step axis\n labelAxisValueIndex = 0;\n } else {\n // On regular bar charts we just use the value index to project on the label step axis\n labelAxisValueIndex = valueIndex;\n }\n\n // We need to transform coordinates differently based on the chart layout\n if(options.horizontalBars) {\n projected = {\n x: chartRect.x1 + valueAxis.projectValue(value && value.x ? value.x : 0, valueIndex, data.normalized.series[seriesIndex]),\n y: chartRect.y1 - labelAxis.projectValue(value && value.y ? value.y : 0, labelAxisValueIndex, data.normalized.series[seriesIndex])\n };\n } else {\n projected = {\n x: chartRect.x1 + labelAxis.projectValue(value && value.x ? value.x : 0, labelAxisValueIndex, data.normalized.series[seriesIndex]),\n y: chartRect.y1 - valueAxis.projectValue(value && value.y ? value.y : 0, valueIndex, data.normalized.series[seriesIndex])\n }\n }\n\n // If the label axis is a step based axis we will offset the bar into the middle of between two steps using\n // the periodHalfLength value. Also we do arrange the different series so that they align up to each other using\n // the seriesBarDistance. If we don't have a step axis, the bar positions can be chosen freely so we should not\n // add any automated positioning.\n if(labelAxis instanceof Chartist.StepAxis) {\n // Offset to center bar between grid lines, but only if the step axis is not stretched\n if(!labelAxis.options.stretch) {\n projected[labelAxis.units.pos] += periodHalfLength * (options.horizontalBars ? -1 : 1);\n }\n // Using bi-polar offset for multiple series if no stacked bars or series distribution is used\n projected[labelAxis.units.pos] += (options.stackBars || options.distributeSeries) ? 0 : biPol * options.seriesBarDistance * (options.horizontalBars ? -1 : 1);\n }\n\n // Enter value in stacked bar values used to remember previous screen value for stacking up bars\n previousStack = stackedBarValues[valueIndex] || zeroPoint;\n stackedBarValues[valueIndex] = previousStack - (zeroPoint - projected[labelAxis.counterUnits.pos]);\n\n // Skip if value is undefined\n if(value === undefined) {\n return;\n }\n\n var positions = {};\n positions[labelAxis.units.pos + '1'] = projected[labelAxis.units.pos];\n positions[labelAxis.units.pos + '2'] = projected[labelAxis.units.pos];\n\n if(options.stackBars && (options.stackMode === 'accumulate' || !options.stackMode)) {\n // Stack mode: accumulate (default)\n // If bars are stacked we use the stackedBarValues reference and otherwise base all bars off the zero line\n // We want backwards compatibility, so the expected fallback without the 'stackMode' option\n // to be the original behaviour (accumulate)\n positions[labelAxis.counterUnits.pos + '1'] = previousStack;\n positions[labelAxis.counterUnits.pos + '2'] = stackedBarValues[valueIndex];\n } else {\n // Draw from the zero line normally\n // This is also the same code for Stack mode: overlap\n positions[labelAxis.counterUnits.pos + '1'] = zeroPoint;\n positions[labelAxis.counterUnits.pos + '2'] = projected[labelAxis.counterUnits.pos];\n }\n\n // Limit x and y so that they are within the chart rect\n positions.x1 = Math.min(Math.max(positions.x1, chartRect.x1), chartRect.x2);\n positions.x2 = Math.min(Math.max(positions.x2, chartRect.x1), chartRect.x2);\n positions.y1 = Math.min(Math.max(positions.y1, chartRect.y2), chartRect.y1);\n positions.y2 = Math.min(Math.max(positions.y2, chartRect.y2), chartRect.y1);\n\n var metaData = Chartist.getMetaData(series, valueIndex);\n\n // Create bar element\n bar = seriesElement.elem('line', positions, options.classNames.bar).attr({\n 'ct:value': [value.x, value.y].filter(Chartist.isNumeric).join(','),\n 'ct:meta': Chartist.serialize(metaData)\n });\n\n this.eventEmitter.emit('draw', Chartist.extend({\n type: 'bar',\n value: value,\n index: valueIndex,\n meta: metaData,\n series: series,\n seriesIndex: seriesIndex,\n axisX: axisX,\n axisY: axisY,\n chartRect: chartRect,\n group: seriesElement,\n element: bar\n }, positions));\n }.bind(this));\n }.bind(this));\n\n this.eventEmitter.emit('created', {\n bounds: valueAxis.bounds,\n chartRect: chartRect,\n axisX: axisX,\n axisY: axisY,\n svg: this.svg,\n options: options\n });\n }\n\n /**\n * This method creates a new bar chart and returns API object that you can use for later changes.\n *\n * @memberof Chartist.Bar\n * @param {String|Node} query A selector query string or directly a DOM element\n * @param {Object} data The data object that needs to consist of a labels and a series array\n * @param {Object} [options] The options object with options that override the default options. Check the examples for a detailed list.\n * @param {Array} [responsiveOptions] Specify an array of responsive option arrays which are a media query and options object pair => [[mediaQueryString, optionsObject],[more...]]\n * @return {Object} An object which exposes the API for the created chart\n *\n * @example\n * // Create a simple bar chart\n * var data = {\n * labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],\n * series: [\n * [5, 2, 4, 2, 0]\n * ]\n * };\n *\n * // In the global name space Chartist we call the Bar function to initialize a bar chart. As a first parameter we pass in a selector where we would like to get our chart created and as a second parameter we pass our data object.\n * new Chartist.Bar('.ct-chart', data);\n *\n * @example\n * // This example creates a bipolar grouped bar chart where the boundaries are limitted to -10 and 10\n * new Chartist.Bar('.ct-chart', {\n * labels: [1, 2, 3, 4, 5, 6, 7],\n * series: [\n * [1, 3, 2, -5, -3, 1, -6],\n * [-5, -2, -4, -1, 2, -3, 1]\n * ]\n * }, {\n * seriesBarDistance: 12,\n * low: -10,\n * high: 10\n * });\n *\n */\n function Bar(query, data, options, responsiveOptions) {\n Chartist.Bar.super.constructor.call(this,\n query,\n data,\n defaultOptions,\n Chartist.extend({}, defaultOptions, options),\n responsiveOptions);\n }\n\n // Creating bar chart type in Chartist namespace\n Chartist.Bar = Chartist.Base.extend({\n constructor: Bar,\n createChart: createChart\n });\n\n}(this || __webpack_require__.g, Chartist));\n;/**\n * The pie chart module of Chartist that can be used to draw pie, donut or gauge charts\n *\n * @module Chartist.Pie\n */\n/* global Chartist */\n(function(globalRoot, Chartist) {\n 'use strict';\n\n var window = globalRoot.window;\n var document = globalRoot.document;\n\n /**\n * Default options in line charts. Expand the code view to see a detailed list of options with comments.\n *\n * @memberof Chartist.Pie\n */\n var defaultOptions = {\n // Specify a fixed width for the chart as a string (i.e. '100px' or '50%')\n width: undefined,\n // Specify a fixed height for the chart as a string (i.e. '100px' or '50%')\n height: undefined,\n // Padding of the chart drawing area to the container element and labels as a number or padding object {top: 5, right: 5, bottom: 5, left: 5}\n chartPadding: 5,\n // Override the class names that are used to generate the SVG structure of the chart\n classNames: {\n chartPie: 'ct-chart-pie',\n chartDonut: 'ct-chart-donut',\n series: 'ct-series',\n slicePie: 'ct-slice-pie',\n sliceDonut: 'ct-slice-donut',\n sliceDonutSolid: 'ct-slice-donut-solid',\n label: 'ct-label'\n },\n // The start angle of the pie chart in degrees where 0 points north. A higher value offsets the start angle clockwise.\n startAngle: 0,\n // An optional total you can specify. By specifying a total value, the sum of the values in the series must be this total in order to draw a full pie. You can use this parameter to draw only parts of a pie or gauge charts.\n total: undefined,\n // If specified the donut CSS classes will be used and strokes will be drawn instead of pie slices.\n donut: false,\n // If specified the donut segments will be drawn as shapes instead of strokes.\n donutSolid: false,\n // Specify the donut stroke width, currently done in javascript for convenience. May move to CSS styles in the future.\n // This option can be set as number or string to specify a relative width (i.e. 100 or '30%').\n donutWidth: 60,\n // If a label should be shown or not\n showLabel: true,\n // Label position offset from the standard position which is half distance of the radius. This value can be either positive or negative. Positive values will position the label away from the center.\n labelOffset: 0,\n // This option can be set to 'inside', 'outside' or 'center'. Positioned with 'inside' the labels will be placed on half the distance of the radius to the border of the Pie by respecting the 'labelOffset'. The 'outside' option will place the labels at the border of the pie and 'center' will place the labels in the absolute center point of the chart. The 'center' option only makes sense in conjunction with the 'labelOffset' option.\n labelPosition: 'inside',\n // An interpolation function for the label value\n labelInterpolationFnc: Chartist.noop,\n // Label direction can be 'neutral', 'explode' or 'implode'. The labels anchor will be positioned based on those settings as well as the fact if the labels are on the right or left side of the center of the chart. Usually explode is useful when labels are positioned far away from the center.\n labelDirection: 'neutral',\n // If true the whole data is reversed including labels, the series order as well as the whole series data arrays.\n reverseData: false,\n // If true empty values will be ignored to avoid drawing unncessary slices and labels\n ignoreEmptyValues: false\n };\n\n /**\n * Determines SVG anchor position based on direction and center parameter\n *\n * @param center\n * @param label\n * @param direction\n * @return {string}\n */\n function determineAnchorPosition(center, label, direction) {\n var toTheRight = label.x > center.x;\n\n if(toTheRight && direction === 'explode' ||\n !toTheRight && direction === 'implode') {\n return 'start';\n } else if(toTheRight && direction === 'implode' ||\n !toTheRight && direction === 'explode') {\n return 'end';\n } else {\n return 'middle';\n }\n }\n\n /**\n * Creates the pie chart\n *\n * @param options\n */\n function createChart(options) {\n var data = Chartist.normalizeData(this.data);\n var seriesGroups = [],\n labelsGroup,\n chartRect,\n radius,\n labelRadius,\n totalDataSum,\n startAngle = options.startAngle;\n\n // Create SVG.js draw\n this.svg = Chartist.createSvg(this.container, options.width, options.height,options.donut ? options.classNames.chartDonut : options.classNames.chartPie);\n // Calculate charting rect\n chartRect = Chartist.createChartRect(this.svg, options, defaultOptions.padding);\n // Get biggest circle radius possible within chartRect\n radius = Math.min(chartRect.width() / 2, chartRect.height() / 2);\n // Calculate total of all series to get reference value or use total reference from optional options\n totalDataSum = options.total || data.normalized.series.reduce(function(previousValue, currentValue) {\n return previousValue + currentValue;\n }, 0);\n\n var donutWidth = Chartist.quantity(options.donutWidth);\n if (donutWidth.unit === '%') {\n donutWidth.value *= radius / 100;\n }\n\n // If this is a donut chart we need to adjust our radius to enable strokes to be drawn inside\n // Unfortunately this is not possible with the current SVG Spec\n // See this proposal for more details: http://lists.w3.org/Archives/Public/www-svg/2003Oct/0000.html\n radius -= options.donut && !options.donutSolid ? donutWidth.value / 2 : 0;\n\n // If labelPosition is set to `outside` or a donut chart is drawn then the label position is at the radius,\n // if regular pie chart it's half of the radius\n if(options.labelPosition === 'outside' || options.donut && !options.donutSolid) {\n labelRadius = radius;\n } else if(options.labelPosition === 'center') {\n // If labelPosition is center we start with 0 and will later wait for the labelOffset\n labelRadius = 0;\n } else if(options.donutSolid) {\n labelRadius = radius - donutWidth.value / 2;\n } else {\n // Default option is 'inside' where we use half the radius so the label will be placed in the center of the pie\n // slice\n labelRadius = radius / 2;\n }\n // Add the offset to the labelRadius where a negative offset means closed to the center of the chart\n labelRadius += options.labelOffset;\n\n // Calculate end angle based on total sum and current data value and offset with padding\n var center = {\n x: chartRect.x1 + chartRect.width() / 2,\n y: chartRect.y2 + chartRect.height() / 2\n };\n\n // Check if there is only one non-zero value in the series array.\n var hasSingleValInSeries = data.raw.series.filter(function(val) {\n return val.hasOwnProperty('value') ? val.value !== 0 : val !== 0;\n }).length === 1;\n\n // Creating the series groups\n data.raw.series.forEach(function(series, index) {\n seriesGroups[index] = this.svg.elem('g', null, null);\n }.bind(this));\n //if we need to show labels we create the label group now\n if(options.showLabel) {\n labelsGroup = this.svg.elem('g', null, null);\n }\n\n // Draw the series\n // initialize series groups\n data.raw.series.forEach(function(series, index) {\n // If current value is zero and we are ignoring empty values then skip to next value\n if (data.normalized.series[index] === 0 && options.ignoreEmptyValues) return;\n\n // If the series is an object and contains a name or meta data we add a custom attribute\n seriesGroups[index].attr({\n 'ct:series-name': series.name\n });\n\n // Use series class from series data or if not set generate one\n seriesGroups[index].addClass([\n options.classNames.series,\n (series.className || options.classNames.series + '-' + Chartist.alphaNumerate(index))\n ].join(' '));\n\n // If the whole dataset is 0 endAngle should be zero. Can't divide by 0.\n var endAngle = (totalDataSum > 0 ? startAngle + data.normalized.series[index] / totalDataSum * 360 : 0);\n\n // Use slight offset so there are no transparent hairline issues\n var overlappigStartAngle = Math.max(0, startAngle - (index === 0 || hasSingleValInSeries ? 0 : 0.2));\n\n // If we need to draw the arc for all 360 degrees we need to add a hack where we close the circle\n // with Z and use 359.99 degrees\n if(endAngle - overlappigStartAngle >= 359.99) {\n endAngle = overlappigStartAngle + 359.99;\n }\n\n var start = Chartist.polarToCartesian(center.x, center.y, radius, overlappigStartAngle),\n end = Chartist.polarToCartesian(center.x, center.y, radius, endAngle);\n\n var innerStart,\n innerEnd,\n donutSolidRadius;\n\n // Create a new path element for the pie chart. If this isn't a donut chart we should close the path for a correct stroke\n var path = new Chartist.Svg.Path(!options.donut || options.donutSolid)\n .move(end.x, end.y)\n .arc(radius, radius, 0, endAngle - startAngle > 180, 0, start.x, start.y);\n\n // If regular pie chart (no donut) we add a line to the center of the circle for completing the pie\n if(!options.donut) {\n path.line(center.x, center.y);\n } else if (options.donutSolid) {\n donutSolidRadius = radius - donutWidth.value;\n innerStart = Chartist.polarToCartesian(center.x, center.y, donutSolidRadius, startAngle - (index === 0 || hasSingleValInSeries ? 0 : 0.2));\n innerEnd = Chartist.polarToCartesian(center.x, center.y, donutSolidRadius, endAngle);\n path.line(innerStart.x, innerStart.y);\n path.arc(donutSolidRadius, donutSolidRadius, 0, endAngle - startAngle > 180, 1, innerEnd.x, innerEnd.y);\n }\n\n // Create the SVG path\n // If this is a donut chart we add the donut class, otherwise just a regular slice\n var pathClassName = options.classNames.slicePie;\n if (options.donut) {\n pathClassName = options.classNames.sliceDonut;\n if (options.donutSolid) {\n pathClassName = options.classNames.sliceDonutSolid;\n }\n }\n var pathElement = seriesGroups[index].elem('path', {\n d: path.stringify()\n }, pathClassName);\n\n // Adding the pie series value to the path\n pathElement.attr({\n 'ct:value': data.normalized.series[index],\n 'ct:meta': Chartist.serialize(series.meta)\n });\n\n // If this is a donut, we add the stroke-width as style attribute\n if(options.donut && !options.donutSolid) {\n pathElement._node.style.strokeWidth = donutWidth.value + 'px';\n }\n\n // Fire off draw event\n this.eventEmitter.emit('draw', {\n type: 'slice',\n value: data.normalized.series[index],\n totalDataSum: totalDataSum,\n index: index,\n meta: series.meta,\n series: series,\n group: seriesGroups[index],\n element: pathElement,\n path: path.clone(),\n center: center,\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle\n });\n\n // If we need to show labels we need to add the label for this slice now\n if(options.showLabel) {\n var labelPosition;\n if(data.raw.series.length === 1) {\n // If we have only 1 series, we can position the label in the center of the pie\n labelPosition = {\n x: center.x,\n y: center.y\n };\n } else {\n // Position at the labelRadius distance from center and between start and end angle\n labelPosition = Chartist.polarToCartesian(\n center.x,\n center.y,\n labelRadius,\n startAngle + (endAngle - startAngle) / 2\n );\n }\n\n var rawValue;\n if(data.normalized.labels && !Chartist.isFalseyButZero(data.normalized.labels[index])) {\n rawValue = data.normalized.labels[index];\n } else {\n rawValue = data.normalized.series[index];\n }\n\n var interpolatedValue = options.labelInterpolationFnc(rawValue, index);\n\n if(interpolatedValue || interpolatedValue === 0) {\n var labelElement = labelsGroup.elem('text', {\n dx: labelPosition.x,\n dy: labelPosition.y,\n 'text-anchor': determineAnchorPosition(center, labelPosition, options.labelDirection)\n }, options.classNames.label).text('' + interpolatedValue);\n\n // Fire off draw event\n this.eventEmitter.emit('draw', {\n type: 'label',\n index: index,\n group: labelsGroup,\n element: labelElement,\n text: '' + interpolatedValue,\n x: labelPosition.x,\n y: labelPosition.y\n });\n }\n }\n\n // Set next startAngle to current endAngle.\n // (except for last slice)\n startAngle = endAngle;\n }.bind(this));\n\n this.eventEmitter.emit('created', {\n chartRect: chartRect,\n svg: this.svg,\n options: options\n });\n }\n\n /**\n * This method creates a new pie chart and returns an object that can be used to redraw the chart.\n *\n * @memberof Chartist.Pie\n * @param {String|Node} query A selector query string or directly a DOM element\n * @param {Object} data The data object in the pie chart needs to have a series property with a one dimensional data array. The values will be normalized against each other and don't necessarily need to be in percentage. The series property can also be an array of value objects that contain a value property and a className property to override the CSS class name for the series group.\n * @param {Object} [options] The options object with options that override the default options. Check the examples for a detailed list.\n * @param {Array} [responsiveOptions] Specify an array of responsive option arrays which are a media query and options object pair => [[mediaQueryString, optionsObject],[more...]]\n * @return {Object} An object with a version and an update method to manually redraw the chart\n *\n * @example\n * // Simple pie chart example with four series\n * new Chartist.Pie('.ct-chart', {\n * series: [10, 2, 4, 3]\n * });\n *\n * @example\n * // Drawing a donut chart\n * new Chartist.Pie('.ct-chart', {\n * series: [10, 2, 4, 3]\n * }, {\n * donut: true\n * });\n *\n * @example\n * // Using donut, startAngle and total to draw a gauge chart\n * new Chartist.Pie('.ct-chart', {\n * series: [20, 10, 30, 40]\n * }, {\n * donut: true,\n * donutWidth: 20,\n * startAngle: 270,\n * total: 200\n * });\n *\n * @example\n * // Drawing a pie chart with padding and labels that are outside the pie\n * new Chartist.Pie('.ct-chart', {\n * series: [20, 10, 30, 40]\n * }, {\n * chartPadding: 30,\n * labelOffset: 50,\n * labelDirection: 'explode'\n * });\n *\n * @example\n * // Overriding the class names for individual series as well as a name and meta data.\n * // The name will be written as ct:series-name attribute and the meta data will be serialized and written\n * // to a ct:meta attribute.\n * new Chartist.Pie('.ct-chart', {\n * series: [{\n * value: 20,\n * name: 'Series 1',\n * className: 'my-custom-class-one',\n * meta: 'Meta One'\n * }, {\n * value: 10,\n * name: 'Series 2',\n * className: 'my-custom-class-two',\n * meta: 'Meta Two'\n * }, {\n * value: 70,\n * name: 'Series 3',\n * className: 'my-custom-class-three',\n * meta: 'Meta Three'\n * }]\n * });\n */\n function Pie(query, data, options, responsiveOptions) {\n Chartist.Pie.super.constructor.call(this,\n query,\n data,\n defaultOptions,\n Chartist.extend({}, defaultOptions, options),\n responsiveOptions);\n }\n\n // Creating pie chart type in Chartist namespace\n Chartist.Pie = Chartist.Base.extend({\n constructor: Pie,\n createChart: createChart,\n determineAnchorPosition: determineAnchorPosition\n });\n\n}(this || __webpack_require__.g, Chartist));\n\nreturn Chartist;\n\n}));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NoYXJ0aXN0L2Rpc3QvY2hhcnRpc3QuanM/YmE0OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLE1BQU0sSUFBMEM7QUFDaEQ7QUFDQSxJQUFJLGlDQUFtQixFQUFFLG1DQUFFO0FBQzNCO0FBQ0EsS0FBSztBQUFBLGtHQUFDO0FBQ04sR0FBRyxNQUFNLEVBT047QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLEVBQUU7QUFDZixjQUFjLEVBQUU7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxVQUFVO0FBQ3ZCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUEsQ0FBQyxTQUFTLHFCQUFNO0FBQ2hCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsQ0FBQyxTQUFTLHFCQUFNO0FBQ2hCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILENBQUMsU0FBUyxxQkFBTTtBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsQ0FBQyxTQUFTLHFCQUFNO0FBQ2hCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEdBQTRHO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQSxxSEFBcUg7QUFDckg7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOztBQUVYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixhQUFhLE1BQU07QUFDbkIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILENBQUMsU0FBUyxxQkFBTTtBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLEdBQUcsV0FBVztBQUN2QixPQUFPOztBQUVQOztBQUVBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUlBQW1JO0FBQ25JO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLDBJQUEwSTtBQUMxSTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxtSUFBbUk7QUFDbkk7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsMElBQTBJO0FBQzFJO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFZO0FBQ3pCLGFBQWEsT0FBTztBQUNwQixhQUFhLE9BQU87QUFDcEIsYUFBYSxNQUFNO0FBQ25CLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVILENBQUMsU0FBUyxxQkFBTTtBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsWUFBWTtBQUN6QixhQUFhLE9BQU87QUFDcEIsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsTUFBTTtBQUNuQixjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUgsQ0FBQyxTQUFTLHFCQUFNOztBQUVoQjs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NoYXJ0aXN0L2Rpc3QvY2hhcnRpc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZSB1bmxlc3MgYW1kTW9kdWxlSWQgaXMgc2V0XG4gICAgZGVmaW5lKCdDaGFydGlzdCcsIFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKHJvb3RbJ0NoYXJ0aXN0J10gPSBmYWN0b3J5KCkpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgLy8gbGlrZSBOb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIHJvb3RbJ0NoYXJ0aXN0J10gPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG4vKiBDaGFydGlzdC5qcyAwLjExLjRcbiAqIENvcHlyaWdodCDCqSAyMDE5IEdpb24gS3VuelxuICogRnJlZSB0byB1c2UgdW5kZXIgZWl0aGVyIHRoZSBXVEZQTCBsaWNlbnNlIG9yIHRoZSBNSVQgbGljZW5zZS5cbiAqIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9naW9ua3Vuei9jaGFydGlzdC1qcy9tYXN0ZXIvTElDRU5TRS1XVEZQTFxuICogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2dpb25rdW56L2NoYXJ0aXN0LWpzL21hc3Rlci9MSUNFTlNFLU1JVFxuICovXG4vKipcbiAqIFRoZSBjb3JlIG1vZHVsZSBvZiBDaGFydGlzdCB0aGF0IGlzIG1haW5seSBwcm92aWRpbmcgc3RhdGljIGZ1bmN0aW9ucyBhbmQgaGlnaGVyIGxldmVsIGZ1bmN0aW9ucyBmb3IgY2hhcnQgbW9kdWxlcy5cbiAqXG4gKiBAbW9kdWxlIENoYXJ0aXN0LkNvcmVcbiAqL1xudmFyIENoYXJ0aXN0ID0ge1xuICB2ZXJzaW9uOiAnMC4xMS40J1xufTtcblxuKGZ1bmN0aW9uIChnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIC8qKlxuICAgKiBUaGlzIG9iamVjdCBjb250YWlucyBhbGwgbmFtZXNwYWNlcyB1c2VkIHdpdGhpbiBDaGFydGlzdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHR5cGUge3tzdmc6IHN0cmluZywgeG1sbnM6IHN0cmluZywgeGh0bWw6IHN0cmluZywgeGxpbms6IHN0cmluZywgY3Q6IHN0cmluZ319XG4gICAqL1xuICBDaGFydGlzdC5uYW1lc3BhY2VzID0ge1xuICAgIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcbiAgICB4bWxuczogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvJyxcbiAgICB4aHRtbDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLFxuICAgIHhsaW5rOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsXG4gICAgY3Q6ICdodHRwOi8vZ2lvbmt1bnouZ2l0aHViLmNvbS9jaGFydGlzdC1qcy9jdCdcbiAgfTtcblxuICAvKipcbiAgICogSGVscHMgdG8gc2ltcGxpZnkgZnVuY3Rpb25hbCBzdHlsZSBjb2RlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7Kn0gbiBUaGlzIGV4YWN0IHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIG5vb3AgZnVuY3Rpb25cbiAgICogQHJldHVybiB7Kn0gVGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcHJvdmlkZWQgdG8gdGhlIG4gcGFyYW1ldGVyXG4gICAqL1xuICBDaGFydGlzdC5ub29wID0gZnVuY3Rpb24gKG4pIHtcbiAgICByZXR1cm4gbjtcbiAgfTtcblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEteiBmcm9tIGEgbnVtYmVyIDAgdG8gMjZcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG4gQSBudW1iZXIgZnJvbSAwIHRvIDI2IHRoYXQgd2lsbCByZXN1bHQgaW4gYSBsZXR0ZXIgYS16XG4gICAqIEByZXR1cm4ge1N0cmluZ30gQSBjaGFyYWN0ZXIgZnJvbSBhLXogYmFzZWQgb24gdGhlIGlucHV0IG51bWJlciBuXG4gICAqL1xuICBDaGFydGlzdC5hbHBoYU51bWVyYXRlID0gZnVuY3Rpb24gKG4pIHtcbiAgICAvLyBMaW1pdCB0byBhLXpcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSg5NyArIG4gJSAyNik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNpbXBsZSByZWN1cnNpdmUgb2JqZWN0IGV4dGVuZFxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0IFRhcmdldCBvYmplY3Qgd2hlcmUgdGhlIHNvdXJjZSB3aWxsIGJlIG1lcmdlZCBpbnRvXG4gICAqIEBwYXJhbSB7T2JqZWN0Li4ufSBzb3VyY2VzIFRoaXMgb2JqZWN0IChvYmplY3RzKSB3aWxsIGJlIG1lcmdlZCBpbnRvIHRhcmdldCBhbmQgdGhlbiB0YXJnZXQgaXMgcmV0dXJuZWRcbiAgICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3QgdGhhdCBoYXMgdGhlIHNhbWUgcmVmZXJlbmNlIGFzIHRhcmdldCBidXQgaXMgZXh0ZW5kZWQgYW5kIG1lcmdlZCB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICAgKi9cbiAgQ2hhcnRpc3QuZXh0ZW5kID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIHZhciBpLCBzb3VyY2UsIHNvdXJjZVByb3A7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IHt9O1xuXG4gICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgc291cmNlUHJvcCA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wID09PSAnb2JqZWN0JyAmJiBzb3VyY2VQcm9wICE9PSBudWxsICYmICEoc291cmNlUHJvcCBpbnN0YW5jZW9mIEFycmF5KSkge1xuICAgICAgICAgIHRhcmdldFtwcm9wXSA9IENoYXJ0aXN0LmV4dGVuZCh0YXJnZXRbcHJvcF0sIHNvdXJjZVByb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVByb3A7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2Ygc3ViU3RyIGluIHN0ciB3aXRoIG5ld1N1YlN0ciBhbmQgcmV0dXJucyBhIG5ldyBzdHJpbmcuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN1YlN0clxuICAgKiBAcGFyYW0ge1N0cmluZ30gbmV3U3ViU3RyXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG4gIENoYXJ0aXN0LnJlcGxhY2VBbGwgPSBmdW5jdGlvbihzdHIsIHN1YlN0ciwgbmV3U3ViU3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKG5ldyBSZWdFeHAoc3ViU3RyLCAnZycpLCBuZXdTdWJTdHIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG51bWJlciB0byBhIHN0cmluZyB3aXRoIGEgdW5pdC4gSWYgYSBzdHJpbmcgaXMgcGFzc2VkIHRoZW4gdGhpcyB3aWxsIGJlIHJldHVybmVkIHVubW9kaWZpZWQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ30gdW5pdFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IFJldHVybnMgdGhlIHBhc3NlZCBudW1iZXIgdmFsdWUgd2l0aCB1bml0LlxuICAgKi9cbiAgQ2hhcnRpc3QuZW5zdXJlVW5pdCA9IGZ1bmN0aW9uKHZhbHVlLCB1bml0KSB7XG4gICAgaWYodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZSArIHVuaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG51bWJlciBvciBzdHJpbmcgdG8gYSBxdWFudGl0eSBvYmplY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0gaW5wdXRcbiAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSB2YWx1ZSBhcyBudW1iZXIgYW5kIHRoZSB1bml0IGFzIHN0cmluZy5cbiAgICovXG4gIENoYXJ0aXN0LnF1YW50aXR5ID0gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG1hdGNoID0gKC9eKFxcZCspXFxzKiguKikkL2cpLmV4ZWMoaW5wdXQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUgOiArbWF0Y2hbMV0sXG4gICAgICAgIHVuaXQ6IG1hdGNoWzJdIHx8IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IGlucHV0IH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yIHRoYXQgd2lsbCByZXR1cm4gdGhlIHF1ZXJ5IGlmIGl0J3MgYWxyZWFkeSBvZiB0eXBlIE5vZGVcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtTdHJpbmd8Tm9kZX0gcXVlcnkgVGhlIHF1ZXJ5IHRvIHVzZSBmb3Igc2VsZWN0aW5nIGEgTm9kZSBvciBhIERPTSBub2RlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBkaXJlY3RseVxuICAgKiBAcmV0dXJuIHtOb2RlfVxuICAgKi9cbiAgQ2hhcnRpc3QucXVlcnlTZWxlY3RvciA9IGZ1bmN0aW9uKHF1ZXJ5KSB7XG4gICAgcmV0dXJuIHF1ZXJ5IGluc3RhbmNlb2YgTm9kZSA/IHF1ZXJ5IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihxdWVyeSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uYWwgc3R5bGUgaGVscGVyIHRvIHByb2R1Y2UgYXJyYXkgd2l0aCBnaXZlbiBsZW5ndGggaW5pdGlhbGl6ZWQgd2l0aCB1bmRlZmluZWQgdmFsdWVzXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSBsZW5ndGhcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuICBDaGFydGlzdC50aW1lcyA9IGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgIHJldHVybiBBcnJheS5hcHBseShudWxsLCBuZXcgQXJyYXkobGVuZ3RoKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN1bSBoZWxwZXIgdG8gYmUgdXNlZCBpbiByZWR1Y2UgZnVuY3Rpb25zXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSBwcmV2aW91c1xuICAgKiBAcGFyYW0gY3VycmVudFxuICAgKiBAcmV0dXJuIHsqfVxuICAgKi9cbiAgQ2hhcnRpc3Quc3VtID0gZnVuY3Rpb24ocHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICByZXR1cm4gcHJldmlvdXMgKyAoY3VycmVudCA/IGN1cnJlbnQgOiAwKTtcbiAgfTtcblxuICAvKipcbiAgICogTXVsdGlwbHkgaGVscGVyIHRvIGJlIHVzZWQgaW4gYEFycmF5Lm1hcGAgZm9yIG11bHRpcGx5aW5nIGVhY2ggdmFsdWUgb2YgYW4gYXJyYXkgd2l0aCBhIGZhY3Rvci5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGZhY3RvclxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgaW4gYEFycmF5Lm1hcGAgdG8gbXVsdGlwbHkgZWFjaCB2YWx1ZSBpbiBhbiBhcnJheVxuICAgKi9cbiAgQ2hhcnRpc3QubWFwTXVsdGlwbHkgPSBmdW5jdGlvbihmYWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obnVtKSB7XG4gICAgICByZXR1cm4gbnVtICogZmFjdG9yO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBoZWxwZXIgdG8gYmUgdXNlZCBpbiBgQXJyYXkubWFwYCBmb3IgYWRkaW5nIGEgYWRkZW5kIHRvIGVhY2ggdmFsdWUgb2YgYW4gYXJyYXkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBhZGRlbmRcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBGdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGluIGBBcnJheS5tYXBgIHRvIGFkZCBhIGFkZGVuZCB0byBlYWNoIHZhbHVlIGluIGFuIGFycmF5XG4gICAqL1xuICBDaGFydGlzdC5tYXBBZGQgPSBmdW5jdGlvbihhZGRlbmQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24obnVtKSB7XG4gICAgICByZXR1cm4gbnVtICsgYWRkZW5kO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcCBmb3IgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlzIHdoZXJlIHRoZWlyIG5lc3RlZCBhcnJheXMgd2lsbCBiZSBtYXBwZWQgaW4gc2VyaWFsLiBUaGUgb3V0cHV0IGFycmF5IHdpbGwgaGF2ZSB0aGUgbGVuZ3RoIG9mIHRoZSBsYXJnZXN0IG5lc3RlZCBhcnJheS4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cyB3aGVyZSBlYWNoIGFyZ3VtZW50IGlzIHRoZSBuZXN0ZWQgYXJyYXkgdmFsdWUgKG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gbW9yZSB2YWx1ZXMpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0gYXJyXG4gICAqIEBwYXJhbSBjYlxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG4gIENoYXJ0aXN0LnNlcmlhbE1hcCA9IGZ1bmN0aW9uKGFyciwgY2IpIHtcbiAgICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICAgIGxlbmd0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGFyci5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlLmxlbmd0aDtcbiAgICAgICAgfSkpO1xuXG4gICAgQ2hhcnRpc3QudGltZXMobGVuZ3RoKS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGluZGV4KSB7XG4gICAgICB2YXIgYXJncyA9IGFyci5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZVtpbmRleF07XG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0W2luZGV4XSA9IGNiLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcm91bmQgdmFsdWVzIHdpdGggY2VydGFpbiBwcmVjaXNpb24gbGV2ZWwgYWZ0ZXIgZGVjaW1hbC4gVGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgcm91bmRpbmcgZXJyb3JzIG5lYXIgZmxvYXQgcG9pbnQgcHJlY2lzaW9uIGxpbWl0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0ge051bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHJvdW5kZWQgd2l0aCBwcmVjaXNpb25cbiAgICogQHBhcmFtIHtOdW1iZXJ9IFtkaWdpdHNdIFRoZSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGRlY2ltYWwgdXNlZCB0byBkbyB0aGUgcm91bmRpbmdcbiAgICogQHJldHVybnMge251bWJlcn0gUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgQ2hhcnRpc3Qucm91bmRXaXRoUHJlY2lzaW9uID0gZnVuY3Rpb24odmFsdWUsIGRpZ2l0cykge1xuICAgIHZhciBwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgZGlnaXRzIHx8IENoYXJ0aXN0LnByZWNpc2lvbik7XG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcmVjaXNpb24gbGV2ZWwgdXNlZCBpbnRlcm5hbGx5IGluIENoYXJ0aXN0IGZvciByb3VuZGluZy4gSWYgeW91IHJlcXVpcmUgbW9yZSBkZWNpbWFsIHBsYWNlcyB5b3UgY2FuIGluY3JlYXNlIHRoaXMgbnVtYmVyLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgQ2hhcnRpc3QucHJlY2lzaW9uID0gODtcblxuICAvKipcbiAgICogQSBtYXAgd2l0aCBjaGFyYWN0ZXJzIHRvIGVzY2FwZSBmb3Igc3RyaW5ncyB0byBiZSBzYWZlbHkgdXNlZCBhcyBhdHRyaWJ1dGUgdmFsdWVzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cbiAgQ2hhcnRpc3QuZXNjYXBpbmdNYXAgPSB7XG4gICAgJyYnOiAnJmFtcDsnLFxuICAgICc8JzogJyZsdDsnLFxuICAgICc+JzogJyZndDsnLFxuICAgICdcIic6ICcmcXVvdDsnLFxuICAgICdcXCcnOiAnJiMwMzk7J1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHNlcmlhbGl6ZXMgYXJiaXRyYXJ5IGRhdGEgdG8gYSBzdHJpbmcuIEluIGNhc2Ugb2YgZGF0YSB0aGF0IGNhbid0IGJlIGVhc2lseSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSB3cmFwcGVyIG9iamVjdCBhbmQgc2VyaWFsaXplIHRoZSBkYXRhIHVzaW5nIEpTT04uc3RyaW5naWZ5LiBUaGUgb3V0Y29taW5nIHN0cmluZyB3aWxsIGFsd2F5cyBiZSBlc2NhcGVkIHVzaW5nIENoYXJ0aXN0LmVzY2FwaW5nTWFwLlxuICAgKiBJZiBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkgd2l0aCBudWxsIG9yIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtOdW1iZXJ8U3RyaW5nfE9iamVjdH0gZGF0YVxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuICBDaGFydGlzdC5zZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgaWYoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gZWxzZSBpZih0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGRhdGEgPSAnJytkYXRhO1xuICAgIH0gZWxzZSBpZih0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeSh7ZGF0YTogZGF0YX0pO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhDaGFydGlzdC5lc2NhcGluZ01hcCkucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXR1cm4gQ2hhcnRpc3QucmVwbGFjZUFsbChyZXN1bHQsIGtleSwgQ2hhcnRpc3QuZXNjYXBpbmdNYXBba2V5XSk7XG4gICAgfSwgZGF0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gZGUtc2VyaWFsaXplcyBhIHN0cmluZyBwcmV2aW91c2x5IHNlcmlhbGl6ZWQgd2l0aCBDaGFydGlzdC5zZXJpYWxpemUuIFRoZSBzdHJpbmcgd2lsbCBhbHdheXMgYmUgdW5lc2NhcGVkIHVzaW5nIENoYXJ0aXN0LmVzY2FwaW5nTWFwIGJlZm9yZSBpdCdzIHJldHVybmVkLiBCYXNlZCBvbiB0aGUgaW5wdXQgdmFsdWUgdGhlIHJldHVybiB0eXBlIGNhbiBiZSBOdW1iZXIsIFN0cmluZyBvciBPYmplY3QuIEpTT04ucGFyc2UgaXMgdXNlZCB3aXRoIHRyeSAvIGNhdGNoIHRvIHNlZSBpZiB0aGUgdW5lc2NhcGVkIHN0cmluZyBjYW4gYmUgcGFyc2VkIGludG8gYW4gT2JqZWN0IGFuZCB0aGlzIE9iamVjdCB3aWxsIGJlIHJldHVybmVkIG9uIHN1Y2Nlc3MuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gICAqIEByZXR1cm4ge1N0cmluZ3xOdW1iZXJ8T2JqZWN0fVxuICAgKi9cbiAgQ2hhcnRpc3QuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgaWYodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBkYXRhID0gT2JqZWN0LmtleXMoQ2hhcnRpc3QuZXNjYXBpbmdNYXApLnJlZHVjZShmdW5jdGlvbihyZXN1bHQsIGtleSkge1xuICAgICAgcmV0dXJuIENoYXJ0aXN0LnJlcGxhY2VBbGwocmVzdWx0LCBDaGFydGlzdC5lc2NhcGluZ01hcFtrZXldLCBrZXkpO1xuICAgIH0sIGRhdGEpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgZGF0YSA9IGRhdGEuZGF0YSAhPT0gdW5kZWZpbmVkID8gZGF0YS5kYXRhIDogZGF0YTtcbiAgICB9IGNhdGNoKGUpIHt9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlIG9yIHJlaW5pdGlhbGl6ZSB0aGUgU1ZHIGVsZW1lbnQgZm9yIHRoZSBjaGFydFxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0ge05vZGV9IGNvbnRhaW5lciBUaGUgY29udGFpbmluZyBET00gTm9kZSBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGxhbnQgdGhlIFNWRyBlbGVtZW50XG4gICAqIEBwYXJhbSB7U3RyaW5nfSB3aWR0aCBTZXQgdGhlIHdpZHRoIG9mIHRoZSBTVkcgZWxlbWVudC4gRGVmYXVsdCBpcyAxMDAlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBoZWlnaHQgU2V0IHRoZSBoZWlnaHQgb2YgdGhlIFNWRyBlbGVtZW50LiBEZWZhdWx0IGlzIDEwMCVcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsYXNzTmFtZSBTcGVjaWZ5IGEgY2xhc3MgdG8gYmUgYWRkZWQgdG8gdGhlIFNWRyBlbGVtZW50XG4gICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNyZWF0ZWQvcmVpbml0aWFsaXplZCBTVkcgZWxlbWVudFxuICAgKi9cbiAgQ2hhcnRpc3QuY3JlYXRlU3ZnID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgd2lkdGgsIGhlaWdodCwgY2xhc3NOYW1lKSB7XG4gICAgdmFyIHN2ZztcblxuICAgIHdpZHRoID0gd2lkdGggfHwgJzEwMCUnO1xuICAgIGhlaWdodCA9IGhlaWdodCB8fCAnMTAwJSc7XG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIFNWRyBlbGVtZW50IGluIHRoZSBjb250YWluZXIgdGhhdCBjb250YWlucyB0aGUgQ2hhcnRpc3QgWE1MIG5hbWVzcGFjZSBhbmQgcmVtb3ZlIGl0XG4gICAgLy8gU2luY2UgdGhlIERPTSBBUEkgZG9lcyBub3Qgc3VwcG9ydCBuYW1lc3BhY2VzIHdlIG5lZWQgdG8gbWFudWFsbHkgc2VhcmNoIHRoZSByZXR1cm5lZCBsaXN0IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy1hcGkvXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3N2ZycpKS5maWx0ZXIoZnVuY3Rpb24gZmlsdGVyQ2hhcnRpc3RTdmdPYmplY3RzKHN2Zykge1xuICAgICAgcmV0dXJuIHN2Zy5nZXRBdHRyaWJ1dGVOUyhDaGFydGlzdC5uYW1lc3BhY2VzLnhtbG5zLCAnY3QnKTtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIHJlbW92ZVByZXZpb3VzRWxlbWVudChzdmcpIHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChzdmcpO1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHN2ZyBvYmplY3Qgd2l0aCB3aWR0aCBhbmQgaGVpZ2h0IG9yIHVzZSAxMDAlIGFzIGRlZmF1bHRcbiAgICBzdmcgPSBuZXcgQ2hhcnRpc3QuU3ZnKCdzdmcnKS5hdHRyKHtcbiAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgfSkuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcblxuICAgIHN2Zy5fbm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgIHN2Zy5fbm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBZGQgdGhlIERPTSBub2RlIHRvIG91ciBjb250YWluZXJcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3ZnLl9ub2RlKTtcblxuICAgIHJldHVybiBzdmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCB0aGUgZGF0YSBvYmplY3QgcGFzc2VkIGFzIHNlY29uZCBhcmd1bWVudCB0byB0aGUgY2hhcnRzIGlzIHByZXNlbnQgYW5kIGNvcnJlY3RseSBpbml0aWFsaXplZC5cbiAgICpcbiAgICogQHBhcmFtICB7T2JqZWN0fSBkYXRhIFRoZSBkYXRhIG9iamVjdCB0aGF0IGlzIHBhc3NlZCBhcyBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGNoYXJ0c1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBub3JtYWxpemVkIGRhdGEgb2JqZWN0XG4gICAqL1xuICBDaGFydGlzdC5ub3JtYWxpemVEYXRhID0gZnVuY3Rpb24oZGF0YSwgcmV2ZXJzZSwgbXVsdGkpIHtcbiAgICB2YXIgbGFiZWxDb3VudDtcbiAgICB2YXIgb3V0cHV0ID0ge1xuICAgICAgcmF3OiBkYXRhLFxuICAgICAgbm9ybWFsaXplZDoge31cbiAgICB9O1xuXG4gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGdlbmVyYXRlIHNvbWUgbGFiZWxzIGJhc2VkIG9uIGV4aXN0aW5nIHNlcmllcyBkYXRhXG4gICAgb3V0cHV0Lm5vcm1hbGl6ZWQuc2VyaWVzID0gQ2hhcnRpc3QuZ2V0RGF0YUFycmF5KHtcbiAgICAgIHNlcmllczogZGF0YS5zZXJpZXMgfHwgW11cbiAgICB9LCByZXZlcnNlLCBtdWx0aSk7XG5cbiAgICAvLyBJZiBhbGwgZWxlbWVudHMgb2YgdGhlIG5vcm1hbGl6ZWQgZGF0YSBhcnJheSBhcmUgYXJyYXlzIHdlJ3JlIGRlYWxpbmcgd2l0aFxuICAgIC8vIG11bHRpIHNlcmllcyBkYXRhIGFuZCB3ZSBuZWVkIHRvIGZpbmQgdGhlIGxhcmdlc3Qgc2VyaWVzIGlmIHRoZXkgYXJlIHVuLWV2ZW5cbiAgICBpZiAob3V0cHV0Lm5vcm1hbGl6ZWQuc2VyaWVzLmV2ZXJ5KGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5O1xuICAgICAgfSkpIHtcbiAgICAgIC8vIEdldHRpbmcgdGhlIHNlcmllcyB3aXRoIHRoZSB0aGUgbW9zdCBlbGVtZW50c1xuICAgICAgbGFiZWxDb3VudCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIG91dHB1dC5ub3JtYWxpemVkLnNlcmllcy5tYXAoZnVuY3Rpb24oc2VyaWVzKSB7XG4gICAgICAgIHJldHVybiBzZXJpZXMubGVuZ3RoO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSdyZSBkZWFsaW5nIHdpdGggUGllIGRhdGEgc28gd2UganVzdCB0YWtlIHRoZSBub3JtYWxpemVkIGFycmF5IGxlbmd0aFxuICAgICAgbGFiZWxDb3VudCA9IG91dHB1dC5ub3JtYWxpemVkLnNlcmllcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgb3V0cHV0Lm5vcm1hbGl6ZWQubGFiZWxzID0gKGRhdGEubGFiZWxzIHx8IFtdKS5zbGljZSgpO1xuICAgIC8vIFBhZGRpbmcgdGhlIGxhYmVscyB0byBsYWJlbENvdW50IHdpdGggZW1wdHkgc3RyaW5nc1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KFxuICAgICAgb3V0cHV0Lm5vcm1hbGl6ZWQubGFiZWxzLFxuICAgICAgQ2hhcnRpc3QudGltZXMoTWF0aC5tYXgoMCwgbGFiZWxDb3VudCAtIG91dHB1dC5ub3JtYWxpemVkLmxhYmVscy5sZW5ndGgpKS5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmKHJldmVyc2UpIHtcbiAgICAgIENoYXJ0aXN0LnJldmVyc2VEYXRhKG91dHB1dC5ub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHNhZmVseSBjaGVja3MgaWYgYW4gb2JqZWN0cyBoYXMgYW4gb3duZWQgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB3aGVyZSB0byBjaGVjayBmb3IgYSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgVGhlIHByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IG93bnMgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eVxuICAgKi9cbiAgQ2hhcnRpc3Quc2FmZUhhc1Byb3BlcnR5ID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIHJldHVybiBvYmplY3QgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICBvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBjb25zaWRlcmVkIGEgaG9sZSBpbiB0aGUgZGF0YSBzZXJpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIGNvbnNpZGVyZWQgYSBkYXRhIGhvbGVcbiAgICovXG4gIENoYXJ0aXN0LmlzRGF0YUhvbGVWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8XG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXZlcnNlcyB0aGUgc2VyaWVzLCBsYWJlbHMgYW5kIHNlcmllcyBkYXRhIGFycmF5cy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIENoYXJ0aXN0LnJldmVyc2VEYXRhID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIGRhdGEubGFiZWxzLnJldmVyc2UoKTtcbiAgICBkYXRhLnNlcmllcy5yZXZlcnNlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnNlcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYodHlwZW9mKGRhdGEuc2VyaWVzW2ldKSA9PT0gJ29iamVjdCcgJiYgZGF0YS5zZXJpZXNbaV0uZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGEuc2VyaWVzW2ldLmRhdGEucmV2ZXJzZSgpO1xuICAgICAgfSBlbHNlIGlmKGRhdGEuc2VyaWVzW2ldIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgZGF0YS5zZXJpZXNbaV0ucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydCBkYXRhIHNlcmllcyBpbnRvIHBsYWluIGFycmF5XG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFRoZSBzZXJpZXMgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gYmUgdmlzdWFsaXplZCBpbiB0aGUgY2hhcnRcbiAgICogQHBhcmFtIHtCb29sZWFufSBbcmV2ZXJzZV0gSWYgdHJ1ZSB0aGUgd2hvbGUgZGF0YSBpcyByZXZlcnNlZCBieSB0aGUgZ2V0RGF0YUFycmF5IGNhbGwuIFRoaXMgd2lsbCBtb2RpZnkgdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCBhcyBmaXJzdCBwYXJhbWV0ZXIuIFRoZSBsYWJlbHMgYXMgd2VsbCBhcyB0aGUgc2VyaWVzIG9yZGVyIGlzIHJldmVyc2VkLiBUaGUgd2hvbGUgc2VyaWVzIGRhdGEgYXJyYXlzIGFyZSByZXZlcnNlZCB0b28uXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW211bHRpXSBDcmVhdGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSBmcm9tIGEgc2VyaWVzIGRhdGEgYXJyYXkgd2hlcmUgYSB2YWx1ZSBvYmplY3Qgd2l0aCBgeGAgYW5kIGB5YCB2YWx1ZXMgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtBcnJheX0gQSBwbGFpbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIGNoYXJ0XG4gICAqL1xuICBDaGFydGlzdC5nZXREYXRhQXJyYXkgPSBmdW5jdGlvbihkYXRhLCByZXZlcnNlLCBtdWx0aSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRocm91Z2ggbmVzdGVkIGFycmF5cyBhbmQgY29udmVydCBzdHJpbmcgdmFsdWVzIHRvIG51bWJlcnMgYW5kIG9iamVjdHMgd2l0aCB2YWx1ZSBwcm9wZXJ0aWVzXG4gICAgLy8gdG8gdmFsdWVzLiBDaGVjayB0aGUgdGVzdHMgaW4gZGF0YSBjb3JlIC0+IGRhdGEgbm9ybWFsaXphdGlvbiBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIG9mIGV4cGVjdGVkIHZhbHVlc1xuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZUNvbnZlcnQodmFsdWUpIHtcbiAgICAgIGlmKENoYXJ0aXN0LnNhZmVIYXNQcm9wZXJ0eSh2YWx1ZSwgJ3ZhbHVlJykpIHtcbiAgICAgICAgLy8gV2UgYXJlIGRlYWxpbmcgd2l0aCB2YWx1ZSBvYmplY3Qgbm90YXRpb24gc28gd2UgbmVlZCB0byByZWN1cnNlIG9uIHZhbHVlIHByb3BlcnR5XG4gICAgICAgIHJldHVybiByZWN1cnNpdmVDb252ZXJ0KHZhbHVlLnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZihDaGFydGlzdC5zYWZlSGFzUHJvcGVydHkodmFsdWUsICdkYXRhJykpIHtcbiAgICAgICAgLy8gV2UgYXJlIGRlYWxpbmcgd2l0aCBzZXJpZXMgb2JqZWN0IG5vdGF0aW9uIHNvIHdlIG5lZWQgdG8gcmVjdXJzZSBvbiBkYXRhIHByb3BlcnR5XG4gICAgICAgIHJldHVybiByZWN1cnNpdmVDb252ZXJ0KHZhbHVlLmRhdGEpO1xuICAgICAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgLy8gRGF0YSBpcyBvZiB0eXBlIGFycmF5IHNvIHdlIG5lZWQgdG8gcmVjdXJzZSBvbiB0aGUgc2VyaWVzXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAocmVjdXJzaXZlQ29udmVydCk7XG4gICAgICB9IGVsc2UgaWYoQ2hhcnRpc3QuaXNEYXRhSG9sZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAvLyBXZSdyZSBkZWFsaW5nIHdpdGggYSBob2xlIGluIHRoZSBkYXRhIGFuZCB0aGVyZWZvcmUgbmVlZCB0byByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIC8vIFdlJ3JlIGFsc28gcmV0dXJuaW5nIHVuZGVmaW5lZCBmb3IgbXVsdGkgdmFsdWUgb3V0cHV0XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHByZXBhcmUgbXVsdGkgdmFsdWUgb3V0cHV0ICh4IGFuZCB5IGRhdGEpXG4gICAgICAgIGlmKG11bHRpKSB7XG4gICAgICAgICAgdmFyIG11bHRpVmFsdWUgPSB7fTtcblxuICAgICAgICAgIC8vIFNpbmdsZSBzZXJpZXMgdmFsdWUgYXJyYXlzIGFyZSBhc3N1bWVkIHRvIHNwZWNpZnkgdGhlIFktQXhpcyB2YWx1ZVxuICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBbMSwgMl0gPT4gW3t4OiB1bmRlZmluZWQsIHk6IDF9LCB7eDogdW5kZWZpbmVkLCB5OiAyfV1cbiAgICAgICAgICAvLyBJZiBtdWx0aSBpcyBhIHN0cmluZyB0aGVuIGl0J3MgYXNzdW1lZCB0aGF0IGl0IHNwZWNpZmllZCB3aGljaCBkaW1lbnNpb24gc2hvdWxkIGJlIGZpbGxlZCBhcyBkZWZhdWx0XG4gICAgICAgICAgaWYodHlwZW9mIG11bHRpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbXVsdGlWYWx1ZVttdWx0aV0gPSBDaGFydGlzdC5nZXROdW1iZXJPclVuZGVmaW5lZCh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG11bHRpVmFsdWUueSA9IENoYXJ0aXN0LmdldE51bWJlck9yVW5kZWZpbmVkKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtdWx0aVZhbHVlLnggPSB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgneCcpID8gQ2hhcnRpc3QuZ2V0TnVtYmVyT3JVbmRlZmluZWQodmFsdWUueCkgOiBtdWx0aVZhbHVlLng7XG4gICAgICAgICAgbXVsdGlWYWx1ZS55ID0gdmFsdWUuaGFzT3duUHJvcGVydHkoJ3knKSA/IENoYXJ0aXN0LmdldE51bWJlck9yVW5kZWZpbmVkKHZhbHVlLnkpIDogbXVsdGlWYWx1ZS55O1xuXG4gICAgICAgICAgcmV0dXJuIG11bHRpVmFsdWU7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIHNpbXBsZSBkYXRhXG4gICAgICAgICAgcmV0dXJuIENoYXJ0aXN0LmdldE51bWJlck9yVW5kZWZpbmVkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhLnNlcmllcy5tYXAocmVjdXJzaXZlQ29udmVydCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgbnVtYmVyIGludG8gYSBwYWRkaW5nIG9iamVjdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtPYmplY3R8TnVtYmVyfSBwYWRkaW5nXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbZmFsbGJhY2tdIFRoaXMgdmFsdWUgaXMgdXNlZCB0byBmaWxsIG1pc3NpbmcgdmFsdWVzIGlmIGEgaW5jb21wbGV0ZSBwYWRkaW5nIG9iamVjdCB3YXMgcGFzc2VkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBwYWRkaW5nIG9iamVjdCBjb250YWluaW5nIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCBwcm9wZXJ0aWVzIGZpbGxlZCB3aXRoIHRoZSBwYWRkaW5nIG51bWJlciBwYXNzZWQgaW4gYXMgYXJndW1lbnQuIElmIHRoZSBhcmd1bWVudCBpcyBzb21ldGhpbmcgZWxzZSB0aGFuIGEgbnVtYmVyIChwcmVzdW1hYmx5IGFscmVhZHkgYSBjb3JyZWN0IHBhZGRpbmcgb2JqZWN0KSB0aGVuIHRoaXMgYXJndW1lbnQgaXMgZGlyZWN0bHkgcmV0dXJuZWQuXG4gICAqL1xuICBDaGFydGlzdC5ub3JtYWxpemVQYWRkaW5nID0gZnVuY3Rpb24ocGFkZGluZywgZmFsbGJhY2spIHtcbiAgICBmYWxsYmFjayA9IGZhbGxiYWNrIHx8IDA7XG5cbiAgICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgPT09ICdudW1iZXInID8ge1xuICAgICAgdG9wOiBwYWRkaW5nLFxuICAgICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgICBib3R0b206IHBhZGRpbmcsXG4gICAgICBsZWZ0OiBwYWRkaW5nXG4gICAgfSA6IHtcbiAgICAgIHRvcDogdHlwZW9mIHBhZGRpbmcudG9wID09PSAnbnVtYmVyJyA/IHBhZGRpbmcudG9wIDogZmFsbGJhY2ssXG4gICAgICByaWdodDogdHlwZW9mIHBhZGRpbmcucmlnaHQgPT09ICdudW1iZXInID8gcGFkZGluZy5yaWdodCA6IGZhbGxiYWNrLFxuICAgICAgYm90dG9tOiB0eXBlb2YgcGFkZGluZy5ib3R0b20gPT09ICdudW1iZXInID8gcGFkZGluZy5ib3R0b20gOiBmYWxsYmFjayxcbiAgICAgIGxlZnQ6IHR5cGVvZiBwYWRkaW5nLmxlZnQgPT09ICdudW1iZXInID8gcGFkZGluZy5sZWZ0IDogZmFsbGJhY2tcbiAgICB9O1xuICB9O1xuXG4gIENoYXJ0aXN0LmdldE1ldGFEYXRhID0gZnVuY3Rpb24oc2VyaWVzLCBpbmRleCkge1xuICAgIHZhciB2YWx1ZSA9IHNlcmllcy5kYXRhID8gc2VyaWVzLmRhdGFbaW5kZXhdIDogc2VyaWVzW2luZGV4XTtcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5tZXRhIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG9yZGVyIG9mIG1hZ25pdHVkZSBmb3IgdGhlIGNoYXJ0IHNjYWxlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgdmFsdWUgUmFuZ2Ugb2YgdGhlIGNoYXJ0XG4gICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG9yZGVyIG9mIG1hZ25pdHVkZVxuICAgKi9cbiAgQ2hhcnRpc3Qub3JkZXJPZk1hZ25pdHVkZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKHZhbHVlKSkgLyBNYXRoLkxOMTApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IGEgZGF0YSBsZW5ndGggaW50byBzY3JlZW4gY29vcmRpbmF0ZXMgKHBpeGVscylcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IGF4aXNMZW5ndGggVGhlIHN2ZyBlbGVtZW50IGZvciB0aGUgY2hhcnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCBTaW5nbGUgZGF0YSB2YWx1ZSBmcm9tIGEgc2VyaWVzIGFycmF5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZHMgQWxsIHRoZSB2YWx1ZXMgdG8gc2V0IHRoZSBib3VuZHMgb2YgdGhlIGNoYXJ0XG4gICAqIEByZXR1cm4ge051bWJlcn0gVGhlIHByb2plY3RlZCBkYXRhIGxlbmd0aCBpbiBwaXhlbHNcbiAgICovXG4gIENoYXJ0aXN0LnByb2plY3RMZW5ndGggPSBmdW5jdGlvbiAoYXhpc0xlbmd0aCwgbGVuZ3RoLCBib3VuZHMpIHtcbiAgICByZXR1cm4gbGVuZ3RoIC8gYm91bmRzLnJhbmdlICogYXhpc0xlbmd0aDtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgaW4gdGhlIGNoYXJ0IGZvciB0aGUgZGF0YSBzZXJpZXNcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IHN2ZyBUaGUgc3ZnIGVsZW1lbnQgZm9yIHRoZSBjaGFydFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBvcHRpb25hbCB2YWx1ZXMgZm9yIHRoZSBjaGFydFxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IFRoZSBoZWlnaHQgb2YgdGhlIGFyZWEgaW4gdGhlIGNoYXJ0IGZvciB0aGUgZGF0YSBzZXJpZXNcbiAgICovXG4gIENoYXJ0aXN0LmdldEF2YWlsYWJsZUhlaWdodCA9IGZ1bmN0aW9uIChzdmcsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoKENoYXJ0aXN0LnF1YW50aXR5KG9wdGlvbnMuaGVpZ2h0KS52YWx1ZSB8fCBzdmcuaGVpZ2h0KCkpIC0gKG9wdGlvbnMuY2hhcnRQYWRkaW5nLnRvcCArICBvcHRpb25zLmNoYXJ0UGFkZGluZy5ib3R0b20pIC0gb3B0aW9ucy5heGlzWC5vZmZzZXQsIDApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgaGlnaGVzdCBhbmQgbG93ZXN0IHZhbHVlIG9mIGRhdGEgYXJyYXkuIFRoaXMgQXJyYXkgY29udGFpbnMgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIGNoYXJ0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGJlIHZpc3VhbGl6ZWQgaW4gdGhlIGNoYXJ0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgY2hhcnQgb3B0aW9uc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZGltZW5zaW9uIEF4aXMgZGltZW5zaW9uICd4JyBvciAneScgdXNlZCB0byBhY2Nlc3MgdGhlIGNvcnJlY3QgdmFsdWUgYW5kIGhpZ2ggLyBsb3cgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QgdmFsdWUgdGhhdCB3aWxsIGJlIHZpc3VhbGl6ZWQgb24gdGhlIGNoYXJ0LlxuICAgKi9cbiAgQ2hhcnRpc3QuZ2V0SGlnaExvdyA9IGZ1bmN0aW9uIChkYXRhLCBvcHRpb25zLCBkaW1lbnNpb24pIHtcbiAgICAvLyBUT0RPOiBSZW1vdmUgd29ya2Fyb3VuZCBmb3IgZGVwcmVjYXRlZCBnbG9iYWwgaGlnaCAvIGxvdyBjb25maWcuIEF4aXMgaGlnaCAvIGxvdyBjb25maWd1cmF0aW9uIGlzIHByZWZlcnJlZFxuICAgIG9wdGlvbnMgPSBDaGFydGlzdC5leHRlbmQoe30sIG9wdGlvbnMsIGRpbWVuc2lvbiA/IG9wdGlvbnNbJ2F4aXMnICsgZGltZW5zaW9uLnRvVXBwZXJDYXNlKCldIDoge30pO1xuXG4gICAgdmFyIGhpZ2hMb3cgPSB7XG4gICAgICAgIGhpZ2g6IG9wdGlvbnMuaGlnaCA9PT0gdW5kZWZpbmVkID8gLU51bWJlci5NQVhfVkFMVUUgOiArb3B0aW9ucy5oaWdoLFxuICAgICAgICBsb3c6IG9wdGlvbnMubG93ID09PSB1bmRlZmluZWQgPyBOdW1iZXIuTUFYX1ZBTFVFIDogK29wdGlvbnMubG93XG4gICAgICB9O1xuICAgIHZhciBmaW5kSGlnaCA9IG9wdGlvbnMuaGlnaCA9PT0gdW5kZWZpbmVkO1xuICAgIHZhciBmaW5kTG93ID0gb3B0aW9ucy5sb3cgPT09IHVuZGVmaW5lZDtcblxuICAgIC8vIEZ1bmN0aW9uIHRvIHJlY3Vyc2l2ZWx5IHdhbGsgdGhyb3VnaCBhcnJheXMgYW5kIGZpbmQgaGlnaGVzdCBhbmQgbG93ZXN0IG51bWJlclxuICAgIGZ1bmN0aW9uIHJlY3Vyc2l2ZUhpZ2hMb3coZGF0YSkge1xuICAgICAgaWYoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYoZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHJlY3Vyc2l2ZUhpZ2hMb3coZGF0YVtpXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGRpbWVuc2lvbiA/ICtkYXRhW2RpbWVuc2lvbl0gOiArZGF0YTtcblxuICAgICAgICBpZiAoZmluZEhpZ2ggJiYgdmFsdWUgPiBoaWdoTG93LmhpZ2gpIHtcbiAgICAgICAgICBoaWdoTG93LmhpZ2ggPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaW5kTG93ICYmIHZhbHVlIDwgaGlnaExvdy5sb3cpIHtcbiAgICAgICAgICBoaWdoTG93LmxvdyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgdG8gZmluZCBoaWdoZXN0IGFuZCBsb3dlc3QgbnVtYmVyIHJlY3Vyc2l2ZWx5XG4gICAgaWYoZmluZEhpZ2ggfHwgZmluZExvdykge1xuICAgICAgcmVjdXJzaXZlSGlnaExvdyhkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZXMgb2YgaGlnaCAvIGxvdyBiYXNlZCBvbiByZWZlcmVuY2UgdmFsdWUsIGl0IHdpbGwgbWFrZSBzdXJlIHRoYXQgdGhlIGludmlzaWJsZSByZWZlcmVuY2UgdmFsdWUgaXNcbiAgICAvLyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjaGFydC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB0aGUgY2hhcnQgYWx3YXlzIG5lZWRzIHRvIGNvbnRhaW4gdGhlIHBvc2l0aW9uIG9mIHRoZVxuICAgIC8vIGludmlzaWJsZSByZWZlcmVuY2UgdmFsdWUgaW4gdGhlIHZpZXcgaS5lLiBmb3IgYmlwb2xhciBzY2FsZXMuXG4gICAgaWYgKG9wdGlvbnMucmVmZXJlbmNlVmFsdWUgfHwgb3B0aW9ucy5yZWZlcmVuY2VWYWx1ZSA9PT0gMCkge1xuICAgICAgaGlnaExvdy5oaWdoID0gTWF0aC5tYXgob3B0aW9ucy5yZWZlcmVuY2VWYWx1ZSwgaGlnaExvdy5oaWdoKTtcbiAgICAgIGhpZ2hMb3cubG93ID0gTWF0aC5taW4ob3B0aW9ucy5yZWZlcmVuY2VWYWx1ZSwgaGlnaExvdy5sb3cpO1xuICAgIH1cblxuICAgIC8vIElmIGhpZ2ggYW5kIGxvdyBhcmUgdGhlIHNhbWUgYmVjYXVzZSBvZiBtaXNjb25maWd1cmF0aW9uIG9yIGZsYXQgZGF0YSAob25seSB0aGUgc2FtZSB2YWx1ZSkgd2UgbmVlZFxuICAgIC8vIHRvIHNldCB0aGUgaGlnaCBvciBsb3cgdG8gMCBkZXBlbmRpbmcgb24gdGhlIHBvbGFyaXR5XG4gICAgaWYgKGhpZ2hMb3cuaGlnaCA8PSBoaWdoTG93Lmxvdykge1xuICAgICAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIDAgd2Ugc2V0IGhpZ2ggdG8gMVxuICAgICAgaWYgKGhpZ2hMb3cubG93ID09PSAwKSB7XG4gICAgICAgIGhpZ2hMb3cuaGlnaCA9IDE7XG4gICAgICB9IGVsc2UgaWYgKGhpZ2hMb3cubG93IDwgMCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIHRoZSBzYW1lIG5lZ2F0aXZlIHZhbHVlIGZvciB0aGUgYm91bmRzIHdlIHNldCBib3VuZHMuaGlnaCB0byAwXG4gICAgICAgIGhpZ2hMb3cuaGlnaCA9IDA7XG4gICAgICB9IGVsc2UgaWYgKGhpZ2hMb3cuaGlnaCA+IDApIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSB0aGUgc2FtZSBwb3NpdGl2ZSB2YWx1ZSBmb3IgdGhlIGJvdW5kcyB3ZSBzZXQgYm91bmRzLmxvdyB0byAwXG4gICAgICAgIGhpZ2hMb3cubG93ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGRhdGEgYXJyYXkgd2FzIGVtcHR5LCB2YWx1ZXMgYXJlIE51bWJlci5NQVhfVkFMVUUgYW5kIC1OdW1iZXIuTUFYX1ZBTFVFLiBTZXQgYm91bmRzIHRvIHByZXZlbnQgZXJyb3JzXG4gICAgICAgIGhpZ2hMb3cuaGlnaCA9IDE7XG4gICAgICAgIGhpZ2hMb3cubG93ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGlnaExvdztcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgY2FuIGJlIHNhZmVseSBjb2VyY2VkIHRvIGEgbnVtYmVyLiBUaGlzIGluY2x1ZGVzIGFsbCB2YWx1ZXMgZXhjZXB0IG51bGwgd2hpY2ggcmVzdWx0IGluIGZpbml0ZSBudW1iZXJzIHdoZW4gY29lcmNlZC4gVGhpcyBleGNsdWRlcyBOYU4sIHNpbmNlIGl0J3Mgbm90IGZpbml0ZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgKi9cbiAgQ2hhcnRpc3QuaXNOdW1lcmljID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgPyBmYWxzZSA6IGlzRmluaXRlKHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIG9uIGFsbCBmYWxzZXkgdmFsdWVzIGV4Y2VwdCB0aGUgbnVtZXJpYyB2YWx1ZSAwLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBDaGFydGlzdC5pc0ZhbHNleUJ1dFplcm8gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAhdmFsdWUgJiYgdmFsdWUgIT09IDA7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgaWYgdGhlIHBhc3NlZCBwYXJhbWV0ZXIgaXMgYSB2YWxpZCBudW1iZXIgb3IgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHVuZGVmaW5lZC4gT24gYWxsIG90aGVyIHZhbHVlcyB0aGFuIGEgdmFsaWQgbnVtYmVyLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgQ2hhcnRpc3QuZ2V0TnVtYmVyT3JVbmRlZmluZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBDaGFydGlzdC5pc051bWVyaWModmFsdWUpID8gK3ZhbHVlIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcHJvdmlkZWQgdmFsdWUgb2JqZWN0IGlzIG11bHRpIHZhbHVlIChjb250YWlucyB4IG9yIHkgcHJvcGVydGllcylcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBDaGFydGlzdC5pc011bHRpVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICgneCcgaW4gdmFsdWUgfHwgJ3knIGluIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0cyBhIHZhbHVlIGZyb20gYSBkaW1lbnNpb24gYHZhbHVlLnhgIG9yIGB2YWx1ZS55YCB3aGlsZSByZXR1cm5pbmcgdmFsdWUgZGlyZWN0bHkgaWYgaXQncyBhIHZhbGlkIG51bWVyaWMgdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBub3QgbnVtZXJpYyBhbmQgaXQncyBmYWxzZXkgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBgZGVmYXVsdFZhbHVlYC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSBkaW1lbnNpb25cbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIENoYXJ0aXN0LmdldE11bHRpVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgZGltZW5zaW9uKSB7XG4gICAgaWYoQ2hhcnRpc3QuaXNNdWx0aVZhbHVlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIENoYXJ0aXN0LmdldE51bWJlck9yVW5kZWZpbmVkKHZhbHVlW2RpbWVuc2lvbiB8fCAneSddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIENoYXJ0aXN0LmdldE51bWJlck9yVW5kZWZpbmVkKHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFBvbGxhcmQgUmhvIEFsZ29yaXRobSB0byBmaW5kIHNtYWxsZXN0IGZhY3RvciBvZiBhbiBpbnRlZ2VyIHZhbHVlLiBUaGVyZSBhcmUgbW9yZSBlZmZpY2llbnQgYWxnb3JpdGhtcyBmb3IgZmFjdG9yaXphdGlvbiwgYnV0IHRoaXMgb25lIGlzIHF1aXRlIGVmZmljaWVudCBhbmQgbm90IHNvIGNvbXBsZXguXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBudW0gQW4gaW50ZWdlciBudW1iZXIgd2hlcmUgdGhlIHNtYWxsZXN0IGZhY3RvciBzaG91bGQgYmUgc2VhcmNoZWQgZm9yXG4gICAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBzbWFsbGVzdCBpbnRlZ2VyIGZhY3RvciBvZiB0aGUgcGFyYW1ldGVyIG51bS5cbiAgICovXG4gIENoYXJ0aXN0LnJobyA9IGZ1bmN0aW9uKG51bSkge1xuICAgIGlmKG51bSA9PT0gMSkge1xuICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnY2QocCwgcSkge1xuICAgICAgaWYgKHAgJSBxID09PSAwKSB7XG4gICAgICAgIHJldHVybiBxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdjZChxLCBwICUgcSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZih4KSB7XG4gICAgICByZXR1cm4geCAqIHggKyAxO1xuICAgIH1cblxuICAgIHZhciB4MSA9IDIsIHgyID0gMiwgZGl2aXNvcjtcbiAgICBpZiAobnVtICUgMiA9PT0gMCkge1xuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgeDEgPSBmKHgxKSAlIG51bTtcbiAgICAgIHgyID0gZihmKHgyKSkgJSBudW07XG4gICAgICBkaXZpc29yID0gZ2NkKE1hdGguYWJzKHgxIC0geDIpLCBudW0pO1xuICAgIH0gd2hpbGUgKGRpdmlzb3IgPT09IDEpO1xuXG4gICAgcmV0dXJuIGRpdmlzb3I7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhbmQgcmV0cmlldmUgYWxsIHRoZSBib3VuZHMgZm9yIHRoZSBjaGFydCBhbmQgcmV0dXJuIHRoZW0gaW4gb25lIGFycmF5XG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBheGlzTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIEF4aXMgdXNlZCBmb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGhpZ2hMb3cgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYSBoaWdoIGFuZCBsb3cgcHJvcGVydHkgaW5kaWNhdGluZyB0aGUgdmFsdWUgcmFuZ2Ugb2YgdGhlIGNoYXJ0LlxuICAgKiBAcGFyYW0ge051bWJlcn0gc2NhbGVNaW5TcGFjZSBUaGUgbWluaW11bSBwcm9qZWN0ZWQgbGVuZ3RoIGEgc3RlcCBzaG91bGQgcmVzdWx0IGluXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gb25seUludGVnZXJcbiAgICogQHJldHVybiB7T2JqZWN0fSBBbGwgdGhlIHZhbHVlcyB0byBzZXQgdGhlIGJvdW5kcyBvZiB0aGUgY2hhcnRcbiAgICovXG4gIENoYXJ0aXN0LmdldEJvdW5kcyA9IGZ1bmN0aW9uIChheGlzTGVuZ3RoLCBoaWdoTG93LCBzY2FsZU1pblNwYWNlLCBvbmx5SW50ZWdlcikge1xuICAgIHZhciBpLFxuICAgICAgb3B0aW1pemF0aW9uQ291bnRlciA9IDAsXG4gICAgICBuZXdNaW4sXG4gICAgICBuZXdNYXgsXG4gICAgICBib3VuZHMgPSB7XG4gICAgICAgIGhpZ2g6IGhpZ2hMb3cuaGlnaCxcbiAgICAgICAgbG93OiBoaWdoTG93Lmxvd1xuICAgICAgfTtcblxuICAgIGJvdW5kcy52YWx1ZVJhbmdlID0gYm91bmRzLmhpZ2ggLSBib3VuZHMubG93O1xuICAgIGJvdW5kcy5vb20gPSBDaGFydGlzdC5vcmRlck9mTWFnbml0dWRlKGJvdW5kcy52YWx1ZVJhbmdlKTtcbiAgICBib3VuZHMuc3RlcCA9IE1hdGgucG93KDEwLCBib3VuZHMub29tKTtcbiAgICBib3VuZHMubWluID0gTWF0aC5mbG9vcihib3VuZHMubG93IC8gYm91bmRzLnN0ZXApICogYm91bmRzLnN0ZXA7XG4gICAgYm91bmRzLm1heCA9IE1hdGguY2VpbChib3VuZHMuaGlnaCAvIGJvdW5kcy5zdGVwKSAqIGJvdW5kcy5zdGVwO1xuICAgIGJvdW5kcy5yYW5nZSA9IGJvdW5kcy5tYXggLSBib3VuZHMubWluO1xuICAgIGJvdW5kcy5udW1iZXJPZlN0ZXBzID0gTWF0aC5yb3VuZChib3VuZHMucmFuZ2UgLyBib3VuZHMuc3RlcCk7XG5cbiAgICAvLyBPcHRpbWl6ZSBzY2FsZSBzdGVwIGJ5IGNoZWNraW5nIGlmIHN1YmRpdmlzaW9uIGlzIHBvc3NpYmxlIGJhc2VkIG9uIGhvcml6b250YWxHcmlkTWluU3BhY2VcbiAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSBiZWxvdyB0aGUgc2NhbGVNaW5TcGFjZSB2YWx1ZSB3ZSB3aWxsIHNjYWxlIHVwXG4gICAgdmFyIGxlbmd0aCA9IENoYXJ0aXN0LnByb2plY3RMZW5ndGgoYXhpc0xlbmd0aCwgYm91bmRzLnN0ZXAsIGJvdW5kcyk7XG4gICAgdmFyIHNjYWxlVXAgPSBsZW5ndGggPCBzY2FsZU1pblNwYWNlO1xuICAgIHZhciBzbWFsbGVzdEZhY3RvciA9IG9ubHlJbnRlZ2VyID8gQ2hhcnRpc3QucmhvKGJvdW5kcy5yYW5nZSkgOiAwO1xuXG4gICAgLy8gRmlyc3QgY2hlY2sgaWYgd2Ugc2hvdWxkIG9ubHkgdXNlIGludGVnZXIgc3RlcHMgYW5kIGlmIHN0ZXAgMSBpcyBzdGlsbCBsYXJnZXIgdGhhbiBzY2FsZU1pblNwYWNlIHNvIHdlIGNhbiB1c2UgMVxuICAgIGlmKG9ubHlJbnRlZ2VyICYmIENoYXJ0aXN0LnByb2plY3RMZW5ndGgoYXhpc0xlbmd0aCwgMSwgYm91bmRzKSA+PSBzY2FsZU1pblNwYWNlKSB7XG4gICAgICBib3VuZHMuc3RlcCA9IDE7XG4gICAgfSBlbHNlIGlmKG9ubHlJbnRlZ2VyICYmIHNtYWxsZXN0RmFjdG9yIDwgYm91bmRzLnN0ZXAgJiYgQ2hhcnRpc3QucHJvamVjdExlbmd0aChheGlzTGVuZ3RoLCBzbWFsbGVzdEZhY3RvciwgYm91bmRzKSA+PSBzY2FsZU1pblNwYWNlKSB7XG4gICAgICAvLyBJZiBzdGVwIDEgd2FzIHRvbyBzbWFsbCwgd2UgY2FuIHRyeSB0aGUgc21hbGxlc3QgZmFjdG9yIG9mIHJhbmdlXG4gICAgICAvLyBJZiB0aGUgc21hbGxlc3QgZmFjdG9yIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBib3VuZHMuc3RlcCBhbmQgdGhlIHByb2plY3RlZCBsZW5ndGggb2Ygc21hbGxlc3QgZmFjdG9yXG4gICAgICAvLyBpcyBsYXJnZXIgdGhhbiB0aGUgc2NhbGVNaW5TcGFjZSB3ZSBzaG91bGQgZ28gZm9yIGl0LlxuICAgICAgYm91bmRzLnN0ZXAgPSBzbWFsbGVzdEZhY3RvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJ5aW5nIHRvIGRpdmlkZSBvciBtdWx0aXBseSBieSAyIGFuZCBmaW5kIHRoZSBiZXN0IHN0ZXAgdmFsdWVcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChzY2FsZVVwICYmIENoYXJ0aXN0LnByb2plY3RMZW5ndGgoYXhpc0xlbmd0aCwgYm91bmRzLnN0ZXAsIGJvdW5kcykgPD0gc2NhbGVNaW5TcGFjZSkge1xuICAgICAgICAgIGJvdW5kcy5zdGVwICo9IDI7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNjYWxlVXAgJiYgQ2hhcnRpc3QucHJvamVjdExlbmd0aChheGlzTGVuZ3RoLCBib3VuZHMuc3RlcCAvIDIsIGJvdW5kcykgPj0gc2NhbGVNaW5TcGFjZSkge1xuICAgICAgICAgIGJvdW5kcy5zdGVwIC89IDI7XG4gICAgICAgICAgaWYob25seUludGVnZXIgJiYgYm91bmRzLnN0ZXAgJSAxICE9PSAwKSB7XG4gICAgICAgICAgICBib3VuZHMuc3RlcCAqPSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYob3B0aW1pemF0aW9uQ291bnRlcisrID4gMTAwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhjZWVkZWQgbWF4aW11bSBudW1iZXIgb2YgaXRlcmF0aW9ucyB3aGlsZSBvcHRpbWl6aW5nIHNjYWxlIHN0ZXAhJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgRVBTSUxPTiA9IDIuMjIxRS0xNjtcbiAgICBib3VuZHMuc3RlcCA9IE1hdGgubWF4KGJvdW5kcy5zdGVwLCBFUFNJTE9OKTtcbiAgICBmdW5jdGlvbiBzYWZlSW5jcmVtZW50KHZhbHVlLCBpbmNyZW1lbnQpIHtcbiAgICAgIC8vIElmIGluY3JlbWVudCBpcyB0b28gc21hbGwgdXNlICo9ICgxK0VQU0lMT04pIGFzIGEgc2ltcGxlIG5leHRhZnRlclxuICAgICAgaWYgKHZhbHVlID09PSAodmFsdWUgKz0gaW5jcmVtZW50KSkge1xuICAgICAgXHR2YWx1ZSAqPSAoMSArIChpbmNyZW1lbnQgPiAwID8gRVBTSUxPTiA6IC1FUFNJTE9OKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTmFycm93IG1pbiBhbmQgbWF4IGJhc2VkIG9uIG5ldyBzdGVwXG4gICAgbmV3TWluID0gYm91bmRzLm1pbjtcbiAgICBuZXdNYXggPSBib3VuZHMubWF4O1xuICAgIHdoaWxlIChuZXdNaW4gKyBib3VuZHMuc3RlcCA8PSBib3VuZHMubG93KSB7XG4gICAgXHRuZXdNaW4gPSBzYWZlSW5jcmVtZW50KG5ld01pbiwgYm91bmRzLnN0ZXApO1xuICAgIH1cbiAgICB3aGlsZSAobmV3TWF4IC0gYm91bmRzLnN0ZXAgPj0gYm91bmRzLmhpZ2gpIHtcbiAgICBcdG5ld01heCA9IHNhZmVJbmNyZW1lbnQobmV3TWF4LCAtYm91bmRzLnN0ZXApO1xuICAgIH1cbiAgICBib3VuZHMubWluID0gbmV3TWluO1xuICAgIGJvdW5kcy5tYXggPSBuZXdNYXg7XG4gICAgYm91bmRzLnJhbmdlID0gYm91bmRzLm1heCAtIGJvdW5kcy5taW47XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yIChpID0gYm91bmRzLm1pbjsgaSA8PSBib3VuZHMubWF4OyBpID0gc2FmZUluY3JlbWVudChpLCBib3VuZHMuc3RlcCkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IENoYXJ0aXN0LnJvdW5kV2l0aFByZWNpc2lvbihpKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGJvdW5kcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgcmV0dXJuIGJvdW5kcztcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGNhcnRlc2lhbiBjb29yZGluYXRlcyBvZiBwb2xhciBjb29yZGluYXRlc1xuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0ge051bWJlcn0gY2VudGVyWCBYLWF4aXMgY29vcmRpbmF0ZXMgb2YgY2VudGVyIHBvaW50IG9mIGNpcmNsZSBzZWdtZW50XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjZW50ZXJZIFgtYXhpcyBjb29yZGluYXRlcyBvZiBjZW50ZXIgcG9pbnQgb2YgY2lyY2xlIHNlZ21lbnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHJhZGl1cyBSYWRpdXMgb2YgY2lyY2xlIHNlZ21lbnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGFuZ2xlSW5EZWdyZWVzIEFuZ2xlIG9mIGNpcmNsZSBzZWdtZW50IGluIGRlZ3JlZXNcbiAgICogQHJldHVybiB7e3g6TnVtYmVyLCB5Ok51bWJlcn19IENvb3JkaW5hdGVzIG9mIHBvaW50IG9uIGNpcmN1bWZlcmVuY2VcbiAgICovXG4gIENoYXJ0aXN0LnBvbGFyVG9DYXJ0ZXNpYW4gPSBmdW5jdGlvbiAoY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdsZUluRGVncmVlcykge1xuICAgIHZhciBhbmdsZUluUmFkaWFucyA9IChhbmdsZUluRGVncmVlcyAtIDkwKSAqIE1hdGguUEkgLyAxODAuMDtcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBjZW50ZXJYICsgKHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlSW5SYWRpYW5zKSksXG4gICAgICB5OiBjZW50ZXJZICsgKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW5zKSlcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNoYXJ0IGRyYXdpbmcgcmVjdGFuZ2xlIChhcmVhIHdoZXJlIGNoYXJ0IGlzIGRyYXduKSB4MSx5MSA9IGJvdHRvbSBsZWZ0IC8geDIseTIgPSB0b3AgcmlnaHRcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IHN2ZyBUaGUgc3ZnIGVsZW1lbnQgZm9yIHRoZSBjaGFydFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBUaGUgT2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBvcHRpb25hbCB2YWx1ZXMgZm9yIHRoZSBjaGFydFxuICAgKiBAcGFyYW0ge051bWJlcn0gW2ZhbGxiYWNrUGFkZGluZ10gVGhlIGZhbGxiYWNrIHBhZGRpbmcgaWYgcGFydGlhbCBwYWRkaW5nIG9iamVjdHMgYXJlIHVzZWRcbiAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2hhcnQgcmVjdGFuZ2xlcyBjb29yZGluYXRlcyBpbnNpZGUgdGhlIHN2ZyBlbGVtZW50IHBsdXMgdGhlIHJlY3RhbmdsZXMgbWVhc3VyZW1lbnRzXG4gICAqL1xuICBDaGFydGlzdC5jcmVhdGVDaGFydFJlY3QgPSBmdW5jdGlvbiAoc3ZnLCBvcHRpb25zLCBmYWxsYmFja1BhZGRpbmcpIHtcbiAgICB2YXIgaGFzQXhpcyA9ICEhKG9wdGlvbnMuYXhpc1ggfHwgb3B0aW9ucy5heGlzWSk7XG4gICAgdmFyIHlBeGlzT2Zmc2V0ID0gaGFzQXhpcyA/IG9wdGlvbnMuYXhpc1kub2Zmc2V0IDogMDtcbiAgICB2YXIgeEF4aXNPZmZzZXQgPSBoYXNBeGlzID8gb3B0aW9ucy5heGlzWC5vZmZzZXQgOiAwO1xuICAgIC8vIElmIHdpZHRoIG9yIGhlaWdodCByZXN1bHRzIGluIGludmFsaWQgdmFsdWUgKGluY2x1ZGluZyAwKSB3ZSBmYWxsYmFjayB0byB0aGUgdW5pdGxlc3Mgc2V0dGluZ3Mgb3IgZXZlbiAwXG4gICAgdmFyIHdpZHRoID0gc3ZnLndpZHRoKCkgfHwgQ2hhcnRpc3QucXVhbnRpdHkob3B0aW9ucy53aWR0aCkudmFsdWUgfHwgMDtcbiAgICB2YXIgaGVpZ2h0ID0gc3ZnLmhlaWdodCgpIHx8IENoYXJ0aXN0LnF1YW50aXR5KG9wdGlvbnMuaGVpZ2h0KS52YWx1ZSB8fCAwO1xuICAgIHZhciBub3JtYWxpemVkUGFkZGluZyA9IENoYXJ0aXN0Lm5vcm1hbGl6ZVBhZGRpbmcob3B0aW9ucy5jaGFydFBhZGRpbmcsIGZhbGxiYWNrUGFkZGluZyk7XG5cbiAgICAvLyBJZiBzZXR0aW5ncyB3ZXJlIHRvIHNtYWxsIHRvIGNvcGUgd2l0aCBvZmZzZXQgKGxlZ2FjeSkgYW5kIHBhZGRpbmcsIHdlJ2xsIGFkanVzdFxuICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIHlBeGlzT2Zmc2V0ICsgbm9ybWFsaXplZFBhZGRpbmcubGVmdCArIG5vcm1hbGl6ZWRQYWRkaW5nLnJpZ2h0KTtcbiAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIHhBeGlzT2Zmc2V0ICsgbm9ybWFsaXplZFBhZGRpbmcudG9wICsgbm9ybWFsaXplZFBhZGRpbmcuYm90dG9tKTtcblxuICAgIHZhciBjaGFydFJlY3QgPSB7XG4gICAgICBwYWRkaW5nOiBub3JtYWxpemVkUGFkZGluZyxcbiAgICAgIHdpZHRoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLngyIC0gdGhpcy54MTtcbiAgICAgIH0sXG4gICAgICBoZWlnaHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueTEgLSB0aGlzLnkyO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZihoYXNBeGlzKSB7XG4gICAgICBpZiAob3B0aW9ucy5heGlzWC5wb3NpdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICBjaGFydFJlY3QueTIgPSBub3JtYWxpemVkUGFkZGluZy50b3AgKyB4QXhpc09mZnNldDtcbiAgICAgICAgY2hhcnRSZWN0LnkxID0gTWF0aC5tYXgoaGVpZ2h0IC0gbm9ybWFsaXplZFBhZGRpbmcuYm90dG9tLCBjaGFydFJlY3QueTIgKyAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYXJ0UmVjdC55MiA9IG5vcm1hbGl6ZWRQYWRkaW5nLnRvcDtcbiAgICAgICAgY2hhcnRSZWN0LnkxID0gTWF0aC5tYXgoaGVpZ2h0IC0gbm9ybWFsaXplZFBhZGRpbmcuYm90dG9tIC0geEF4aXNPZmZzZXQsIGNoYXJ0UmVjdC55MiArIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5heGlzWS5wb3NpdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICBjaGFydFJlY3QueDEgPSBub3JtYWxpemVkUGFkZGluZy5sZWZ0ICsgeUF4aXNPZmZzZXQ7XG4gICAgICAgIGNoYXJ0UmVjdC54MiA9IE1hdGgubWF4KHdpZHRoIC0gbm9ybWFsaXplZFBhZGRpbmcucmlnaHQsIGNoYXJ0UmVjdC54MSArIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhcnRSZWN0LngxID0gbm9ybWFsaXplZFBhZGRpbmcubGVmdDtcbiAgICAgICAgY2hhcnRSZWN0LngyID0gTWF0aC5tYXgod2lkdGggLSBub3JtYWxpemVkUGFkZGluZy5yaWdodCAtIHlBeGlzT2Zmc2V0LCBjaGFydFJlY3QueDEgKyAxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hhcnRSZWN0LngxID0gbm9ybWFsaXplZFBhZGRpbmcubGVmdDtcbiAgICAgIGNoYXJ0UmVjdC54MiA9IE1hdGgubWF4KHdpZHRoIC0gbm9ybWFsaXplZFBhZGRpbmcucmlnaHQsIGNoYXJ0UmVjdC54MSArIDEpO1xuICAgICAgY2hhcnRSZWN0LnkyID0gbm9ybWFsaXplZFBhZGRpbmcudG9wO1xuICAgICAgY2hhcnRSZWN0LnkxID0gTWF0aC5tYXgoaGVpZ2h0IC0gbm9ybWFsaXplZFBhZGRpbmcuYm90dG9tLCBjaGFydFJlY3QueTIgKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcnRSZWN0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZ3JpZCBsaW5lIGJhc2VkIG9uIGEgcHJvamVjdGVkIHZhbHVlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuQ29yZVxuICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICogQHBhcmFtIGluZGV4XG4gICAqIEBwYXJhbSBheGlzXG4gICAqIEBwYXJhbSBvZmZzZXRcbiAgICogQHBhcmFtIGxlbmd0aFxuICAgKiBAcGFyYW0gZ3JvdXBcbiAgICogQHBhcmFtIGNsYXNzZXNcbiAgICogQHBhcmFtIGV2ZW50RW1pdHRlclxuICAgKi9cbiAgQ2hhcnRpc3QuY3JlYXRlR3JpZCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBpbmRleCwgYXhpcywgb2Zmc2V0LCBsZW5ndGgsIGdyb3VwLCBjbGFzc2VzLCBldmVudEVtaXR0ZXIpIHtcbiAgICB2YXIgcG9zaXRpb25hbERhdGEgPSB7fTtcbiAgICBwb3NpdGlvbmFsRGF0YVtheGlzLnVuaXRzLnBvcyArICcxJ10gPSBwb3NpdGlvbjtcbiAgICBwb3NpdGlvbmFsRGF0YVtheGlzLnVuaXRzLnBvcyArICcyJ10gPSBwb3NpdGlvbjtcbiAgICBwb3NpdGlvbmFsRGF0YVtheGlzLmNvdW50ZXJVbml0cy5wb3MgKyAnMSddID0gb2Zmc2V0O1xuICAgIHBvc2l0aW9uYWxEYXRhW2F4aXMuY291bnRlclVuaXRzLnBvcyArICcyJ10gPSBvZmZzZXQgKyBsZW5ndGg7XG5cbiAgICB2YXIgZ3JpZEVsZW1lbnQgPSBncm91cC5lbGVtKCdsaW5lJywgcG9zaXRpb25hbERhdGEsIGNsYXNzZXMuam9pbignICcpKTtcblxuICAgIC8vIEV2ZW50IGZvciBncmlkIGRyYXdcbiAgICBldmVudEVtaXR0ZXIuZW1pdCgnZHJhdycsXG4gICAgICBDaGFydGlzdC5leHRlbmQoe1xuICAgICAgICB0eXBlOiAnZ3JpZCcsXG4gICAgICAgIGF4aXM6IGF4aXMsXG4gICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgZ3JvdXA6IGdyb3VwLFxuICAgICAgICBlbGVtZW50OiBncmlkRWxlbWVudFxuICAgICAgfSwgcG9zaXRpb25hbERhdGEpXG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGdyaWQgYmFja2dyb3VuZCByZWN0IGFuZCBlbWl0cyB0aGUgZHJhdyBldmVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIGdyaWRHcm91cFxuICAgKiBAcGFyYW0gY2hhcnRSZWN0XG4gICAqIEBwYXJhbSBjbGFzc05hbWVcbiAgICogQHBhcmFtIGV2ZW50RW1pdHRlclxuICAgKi9cbiAgQ2hhcnRpc3QuY3JlYXRlR3JpZEJhY2tncm91bmQgPSBmdW5jdGlvbiAoZ3JpZEdyb3VwLCBjaGFydFJlY3QsIGNsYXNzTmFtZSwgZXZlbnRFbWl0dGVyKSB7XG4gICAgdmFyIGdyaWRCYWNrZ3JvdW5kID0gZ3JpZEdyb3VwLmVsZW0oJ3JlY3QnLCB7XG4gICAgICAgIHg6IGNoYXJ0UmVjdC54MSxcbiAgICAgICAgeTogY2hhcnRSZWN0LnkyLFxuICAgICAgICB3aWR0aDogY2hhcnRSZWN0LndpZHRoKCksXG4gICAgICAgIGhlaWdodDogY2hhcnRSZWN0LmhlaWdodCgpLFxuICAgICAgfSwgY2xhc3NOYW1lLCB0cnVlKTtcblxuICAgICAgLy8gRXZlbnQgZm9yIGdyaWQgYmFja2dyb3VuZCBkcmF3XG4gICAgICBldmVudEVtaXR0ZXIuZW1pdCgnZHJhdycsIHtcbiAgICAgICAgdHlwZTogJ2dyaWRCYWNrZ3JvdW5kJyxcbiAgICAgICAgZ3JvdXA6IGdyaWRHcm91cCxcbiAgICAgICAgZWxlbWVudDogZ3JpZEJhY2tncm91bmRcbiAgICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbGFiZWwgYmFzZWQgb24gYSBwcm9qZWN0ZWQgdmFsdWUgYW5kIGFuIGF4aXMuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5Db3JlXG4gICAqIEBwYXJhbSBwb3NpdGlvblxuICAgKiBAcGFyYW0gbGVuZ3RoXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gbGFiZWxzXG4gICAqIEBwYXJhbSBheGlzXG4gICAqIEBwYXJhbSBheGlzT2Zmc2V0XG4gICAqIEBwYXJhbSBsYWJlbE9mZnNldFxuICAgKiBAcGFyYW0gZ3JvdXBcbiAgICogQHBhcmFtIGNsYXNzZXNcbiAgICogQHBhcmFtIHVzZUZvcmVpZ25PYmplY3RcbiAgICogQHBhcmFtIGV2ZW50RW1pdHRlclxuICAgKi9cbiAgQ2hhcnRpc3QuY3JlYXRlTGFiZWwgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGVuZ3RoLCBpbmRleCwgbGFiZWxzLCBheGlzLCBheGlzT2Zmc2V0LCBsYWJlbE9mZnNldCwgZ3JvdXAsIGNsYXNzZXMsIHVzZUZvcmVpZ25PYmplY3QsIGV2ZW50RW1pdHRlcikge1xuICAgIHZhciBsYWJlbEVsZW1lbnQ7XG4gICAgdmFyIHBvc2l0aW9uYWxEYXRhID0ge307XG5cbiAgICBwb3NpdGlvbmFsRGF0YVtheGlzLnVuaXRzLnBvc10gPSBwb3NpdGlvbiArIGxhYmVsT2Zmc2V0W2F4aXMudW5pdHMucG9zXTtcbiAgICBwb3NpdGlvbmFsRGF0YVtheGlzLmNvdW50ZXJVbml0cy5wb3NdID0gbGFiZWxPZmZzZXRbYXhpcy5jb3VudGVyVW5pdHMucG9zXTtcbiAgICBwb3NpdGlvbmFsRGF0YVtheGlzLnVuaXRzLmxlbl0gPSBsZW5ndGg7XG4gICAgcG9zaXRpb25hbERhdGFbYXhpcy5jb3VudGVyVW5pdHMubGVuXSA9IE1hdGgubWF4KDAsIGF4aXNPZmZzZXQgLSAxMCk7XG5cbiAgICBpZih1c2VGb3JlaWduT2JqZWN0KSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHNldCB3aWR0aCBhbmQgaGVpZ2h0IGV4cGxpY2l0bHkgdG8gcHggYXMgc3BhbiB3aWxsIG5vdCBleHBhbmQgd2l0aCB3aWR0aCBhbmQgaGVpZ2h0IGJlaW5nXG4gICAgICAvLyAxMDAlIGluIGFsbCBicm93c2Vyc1xuICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICBjb250ZW50LmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbignICcpO1xuICAgICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgQ2hhcnRpc3QubmFtZXNwYWNlcy54aHRtbCk7XG4gICAgICBjb250ZW50LmlubmVyVGV4dCA9IGxhYmVsc1tpbmRleF07XG4gICAgICBjb250ZW50LnN0eWxlW2F4aXMudW5pdHMubGVuXSA9IE1hdGgucm91bmQocG9zaXRpb25hbERhdGFbYXhpcy51bml0cy5sZW5dKSArICdweCc7XG4gICAgICBjb250ZW50LnN0eWxlW2F4aXMuY291bnRlclVuaXRzLmxlbl0gPSBNYXRoLnJvdW5kKHBvc2l0aW9uYWxEYXRhW2F4aXMuY291bnRlclVuaXRzLmxlbl0pICsgJ3B4JztcblxuICAgICAgbGFiZWxFbGVtZW50ID0gZ3JvdXAuZm9yZWlnbk9iamVjdChjb250ZW50LCBDaGFydGlzdC5leHRlbmQoe1xuICAgICAgICBzdHlsZTogJ292ZXJmbG93OiB2aXNpYmxlOydcbiAgICAgIH0sIHBvc2l0aW9uYWxEYXRhKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhYmVsRWxlbWVudCA9IGdyb3VwLmVsZW0oJ3RleHQnLCBwb3NpdGlvbmFsRGF0YSwgY2xhc3Nlcy5qb2luKCcgJykpLnRleHQobGFiZWxzW2luZGV4XSk7XG4gICAgfVxuXG4gICAgZXZlbnRFbWl0dGVyLmVtaXQoJ2RyYXcnLCBDaGFydGlzdC5leHRlbmQoe1xuICAgICAgdHlwZTogJ2xhYmVsJyxcbiAgICAgIGF4aXM6IGF4aXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBncm91cDogZ3JvdXAsXG4gICAgICBlbGVtZW50OiBsYWJlbEVsZW1lbnQsXG4gICAgICB0ZXh0OiBsYWJlbHNbaW5kZXhdXG4gICAgfSwgcG9zaXRpb25hbERhdGEpKTtcbiAgfTtcblxuICAvKipcbiAgICogSGVscGVyIHRvIHJlYWQgc2VyaWVzIHNwZWNpZmljIG9wdGlvbnMgZnJvbSBvcHRpb25zIG9iamVjdC4gSXQgYXV0b21hdGljYWxseSBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb3B0aW9uIGlmXG4gICAqIHRoZXJlIGlzIG5vIG9wdGlvbiBpbiB0aGUgc2VyaWVzIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZXJpZXMgU2VyaWVzIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBDaGFydGlzdCBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBvcHRpb25zIGtleSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIG9idGFpbiB0aGUgb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIENoYXJ0aXN0LmdldFNlcmllc09wdGlvbiA9IGZ1bmN0aW9uKHNlcmllcywgb3B0aW9ucywga2V5KSB7XG4gICAgaWYoc2VyaWVzLm5hbWUgJiYgb3B0aW9ucy5zZXJpZXMgJiYgb3B0aW9ucy5zZXJpZXNbc2VyaWVzLm5hbWVdKSB7XG4gICAgICB2YXIgc2VyaWVzT3B0aW9ucyA9IG9wdGlvbnMuc2VyaWVzW3Nlcmllcy5uYW1lXTtcbiAgICAgIHJldHVybiBzZXJpZXNPcHRpb25zLmhhc093blByb3BlcnR5KGtleSkgPyBzZXJpZXNPcHRpb25zW2tleV0gOiBvcHRpb25zW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zW2tleV07XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBvcHRpb25zIGhhbmRsaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBjYWxsYmFjayBmb3Igb3B0aW9ucyBjaGFuZ2VzIHRyaWdnZXJlZCBieSByZXNwb25zaXZlIG9wdGlvbnMgYW5kIG1lZGlhIHF1ZXJ5IG1hdGNoZXNcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBzZXQgYnkgdXNlclxuICAgKiBAcGFyYW0ge0FycmF5fSByZXNwb25zaXZlT3B0aW9ucyBPcHRpb25hbCBmdW5jdGlvbnMgdG8gYWRkIHJlc3BvbnNpdmUgYmVoYXZpb3IgdG8gY2hhcnRcbiAgICogQHBhcmFtIHtPYmplY3R9IGV2ZW50RW1pdHRlciBUaGUgZXZlbnQgZW1pdHRlciB0aGF0IHdpbGwgYmUgdXNlZCB0byBlbWl0IHRoZSBvcHRpb25zIGNoYW5nZWQgZXZlbnRzXG4gICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNvbnNvbGlkYXRlZCBvcHRpb25zIG9iamVjdCBmcm9tIHRoZSBkZWZhdWx0cywgYmFzZSBhbmQgbWF0Y2hpbmcgcmVzcG9uc2l2ZSBvcHRpb25zXG4gICAqL1xuICBDaGFydGlzdC5vcHRpb25zUHJvdmlkZXIgPSBmdW5jdGlvbiAob3B0aW9ucywgcmVzcG9uc2l2ZU9wdGlvbnMsIGV2ZW50RW1pdHRlcikge1xuICAgIHZhciBiYXNlT3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgb3B0aW9ucyksXG4gICAgICBjdXJyZW50T3B0aW9ucyxcbiAgICAgIG1lZGlhUXVlcnlMaXN0ZW5lcnMgPSBbXSxcbiAgICAgIGk7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVDdXJyZW50T3B0aW9ucyhtZWRpYUV2ZW50KSB7XG4gICAgICB2YXIgcHJldmlvdXNPcHRpb25zID0gY3VycmVudE9wdGlvbnM7XG4gICAgICBjdXJyZW50T3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgYmFzZU9wdGlvbnMpO1xuXG4gICAgICBpZiAocmVzcG9uc2l2ZU9wdGlvbnMpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlc3BvbnNpdmVPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG1xbCA9IHdpbmRvdy5tYXRjaE1lZGlhKHJlc3BvbnNpdmVPcHRpb25zW2ldWzBdKTtcbiAgICAgICAgICBpZiAobXFsLm1hdGNoZXMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb25zID0gQ2hhcnRpc3QuZXh0ZW5kKGN1cnJlbnRPcHRpb25zLCByZXNwb25zaXZlT3B0aW9uc1tpXVsxXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGV2ZW50RW1pdHRlciAmJiBtZWRpYUV2ZW50KSB7XG4gICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KCdvcHRpb25zQ2hhbmdlZCcsIHtcbiAgICAgICAgICBwcmV2aW91c09wdGlvbnM6IHByZXZpb3VzT3B0aW9ucyxcbiAgICAgICAgICBjdXJyZW50T3B0aW9uczogY3VycmVudE9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlTWVkaWFRdWVyeUxpc3RlbmVycygpIHtcbiAgICAgIG1lZGlhUXVlcnlMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbihtcWwpIHtcbiAgICAgICAgbXFsLnJlbW92ZUxpc3RlbmVyKHVwZGF0ZUN1cnJlbnRPcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghd2luZG93Lm1hdGNoTWVkaWEpIHtcbiAgICAgIHRocm93ICd3aW5kb3cubWF0Y2hNZWRpYSBub3QgZm91bmQhIE1ha2Ugc3VyZSB5b3VcXCdyZSB1c2luZyBhIHBvbHlmaWxsLic7XG4gICAgfSBlbHNlIGlmIChyZXNwb25zaXZlT3B0aW9ucykge1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcmVzcG9uc2l2ZU9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIG1xbCA9IHdpbmRvdy5tYXRjaE1lZGlhKHJlc3BvbnNpdmVPcHRpb25zW2ldWzBdKTtcbiAgICAgICAgbXFsLmFkZExpc3RlbmVyKHVwZGF0ZUN1cnJlbnRPcHRpb25zKTtcbiAgICAgICAgbWVkaWFRdWVyeUxpc3RlbmVycy5wdXNoKG1xbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEV4ZWN1dGUgaW5pdGlhbGx5IHdpdGhvdXQgYW4gZXZlbnQgYXJndW1lbnQgc28gd2UgZ2V0IHRoZSBjb3JyZWN0IG9wdGlvbnNcbiAgICB1cGRhdGVDdXJyZW50T3B0aW9ucygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbW92ZU1lZGlhUXVlcnlMaXN0ZW5lcnM6IHJlbW92ZU1lZGlhUXVlcnlMaXN0ZW5lcnMsXG4gICAgICBnZXRDdXJyZW50T3B0aW9uczogZnVuY3Rpb24gZ2V0Q3VycmVudE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBDaGFydGlzdC5leHRlbmQoe30sIGN1cnJlbnRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhIGxpc3Qgb2YgY29vcmRpbmF0ZXMgYW5kIGFzc29jaWF0ZWQgdmFsdWVzIGludG8gc2VnbWVudHMuIEVhY2ggcmV0dXJuZWQgc2VnbWVudCBjb250YWlucyBhIHBhdGhDb29yZGluYXRlc1xuICAgKiB2YWx1ZURhdGEgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgc2VnbWVudC5cbiAgICpcbiAgICogV2l0aCB0aGUgZGVmYXVsdCBvcHRpb25zLCBzZWdtZW50cyBjb25zaXN0IG9mIGNvbnRpZ3VvdXMgc2V0cyBvZiBwb2ludHMgdGhhdCBkbyBub3QgaGF2ZSBhbiB1bmRlZmluZWQgdmFsdWUuIEFueVxuICAgKiBwb2ludHMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIGFyZSBkaXNjYXJkZWQuXG4gICAqXG4gICAqICoqT3B0aW9ucyoqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgaG93IHNlZ21lbnRzIGFyZSBmb3JtZWRcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiB2YXIgb3B0aW9ucyA9IHtcbiAgICogICAvLyBJZiBmaWxsSG9sZXMgaXMgdHJ1ZSwgdW5kZWZpbmVkIHZhbHVlcyBhcmUgc2ltcGx5IGRpc2NhcmRlZCB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHNlZ21lbnQuIEFzc3VtaW5nIG90aGVyIG9wdGlvbnMgYXJlIGRlZmF1bHQsIHRoaXMgcmV0dXJucyBzaW5nbGUgc2VnbWVudC5cbiAgICogICBmaWxsSG9sZXM6IGZhbHNlLFxuICAgKiAgIC8vIElmIGluY3JlYXNpbmdYIGlzIHRydWUsIHRoZSBjb29yZGluYXRlcyBpbiBhbGwgc2VnbWVudHMgaGF2ZSBzdHJpY3RseSBpbmNyZWFzaW5nIHgtdmFsdWVzLlxuICAgKiAgIGluY3JlYXNpbmdYOiBmYWxzZVxuICAgKiB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHBhcmFtIHtBcnJheX0gcGF0aENvb3JkaW5hdGVzIExpc3Qgb2YgcG9pbnQgY29vcmRpbmF0ZXMgdG8gYmUgc3BsaXQgaW4gdGhlIGZvcm0gW3gxLCB5MSwgeDIsIHkyIC4uLiB4biwgeW5dXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBMaXN0IG9mIGFzc29jaWF0ZWQgcG9pbnQgdmFsdWVzIGluIHRoZSBmb3JtIFt2MSwgdjIgLi4gdm5dXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgc2V0IGJ5IHVzZXJcbiAgICogQHJldHVybiB7QXJyYXl9IExpc3Qgb2Ygc2VnbWVudHMsIGVhY2ggY29udGFpbmluZyBhIHBhdGhDb29yZGluYXRlcyBhbmQgdmFsdWVEYXRhIHByb3BlcnR5LlxuICAgKi9cbiAgQ2hhcnRpc3Quc3BsaXRJbnRvU2VnbWVudHMgPSBmdW5jdGlvbihwYXRoQ29vcmRpbmF0ZXMsIHZhbHVlRGF0YSwgb3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGluY3JlYXNpbmdYOiBmYWxzZSxcbiAgICAgIGZpbGxIb2xlczogZmFsc2VcbiAgICB9O1xuXG4gICAgb3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgdmFyIHNlZ21lbnRzID0gW107XG4gICAgdmFyIGhvbGUgPSB0cnVlO1xuXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHBhdGhDb29yZGluYXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgLy8gSWYgdGhpcyB2YWx1ZSBpcyBhIFwiaG9sZVwiIHdlIHNldCB0aGUgaG9sZSBmbGFnXG4gICAgICBpZihDaGFydGlzdC5nZXRNdWx0aVZhbHVlKHZhbHVlRGF0YVtpIC8gMl0udmFsdWUpID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGlmKHZhbHVlRGF0YVtpIC8gMl0udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZighb3B0aW9ucy5maWxsSG9sZXMpIHtcbiAgICAgICAgICBob2xlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYob3B0aW9ucy5pbmNyZWFzaW5nWCAmJiBpID49IDIgJiYgcGF0aENvb3JkaW5hdGVzW2ldIDw9IHBhdGhDb29yZGluYXRlc1tpLTJdKSB7XG4gICAgICAgICAgLy8gWCBpcyBub3QgaW5jcmVhc2luZywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2Ugc3RhcnQgYSBuZXcgc2VnbWVudFxuICAgICAgICAgIGhvbGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyBJZiBpdCdzIGEgdmFsaWQgdmFsdWUgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSdyZSBjb21pbmcgb3V0IG9mIGEgaG9sZSBhbmQgY3JlYXRlIGEgbmV3IGVtcHR5IHNlZ21lbnRcbiAgICAgICAgaWYoaG9sZSkge1xuICAgICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgICAgcGF0aENvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgICAgIHZhbHVlRGF0YTogW11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBBcyB3ZSBoYXZlIGEgdmFsaWQgdmFsdWUgbm93LCB3ZSBhcmUgbm90IGluIGEgXCJob2xlXCIgYW55bW9yZVxuICAgICAgICAgIGhvbGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCB0byB0aGUgc2VnbWVudCBwYXRoQ29vcmRpbmF0ZXMgYW5kIHZhbHVlRGF0YVxuICAgICAgICBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5wYXRoQ29vcmRpbmF0ZXMucHVzaChwYXRoQ29vcmRpbmF0ZXNbaV0sIHBhdGhDb29yZGluYXRlc1tpICsgMV0pO1xuICAgICAgICBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS52YWx1ZURhdGEucHVzaCh2YWx1ZURhdGFbaSAvIDJdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH07XG59KHRoaXMgfHwgZ2xvYmFsLCBDaGFydGlzdCkpO1xuOy8qKlxuICogQ2hhcnRpc3QgcGF0aCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucy5cbiAqXG4gKiBAbW9kdWxlIENoYXJ0aXN0LkludGVycG9sYXRpb25cbiAqL1xuLyogZ2xvYmFsIENoYXJ0aXN0ICovXG4oZnVuY3Rpb24oZ2xvYmFsUm9vdCwgQ2hhcnRpc3QpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIENoYXJ0aXN0LkludGVycG9sYXRpb24gPSB7fTtcblxuICAvKipcbiAgICogVGhpcyBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGRvZXMgbm90IHNtb290aCB0aGUgcGF0aCBhbmQgdGhlIHJlc3VsdCBpcyBvbmx5IGNvbnRhaW5pbmcgbGluZXMgYW5kIG5vIGN1cnZlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGNoYXJ0ID0gbmV3IENoYXJ0aXN0LkxpbmUoJy5jdC1jaGFydCcsIHtcbiAgICogICBsYWJlbHM6IFsxLCAyLCAzLCA0LCA1XSxcbiAgICogICBzZXJpZXM6IFtbMSwgMiwgOCwgMSwgN11dXG4gICAqIH0sIHtcbiAgICogICBsaW5lU21vb3RoOiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLm5vbmUoe1xuICAgKiAgICAgZmlsbEhvbGVzOiBmYWxzZVxuICAgKiAgIH0pXG4gICAqIH0pO1xuICAgKlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuSW50ZXJwb2xhdGlvblxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIENoYXJ0aXN0LkludGVycG9sYXRpb24ubm9uZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICBmaWxsSG9sZXM6IGZhbHNlXG4gICAgfTtcbiAgICBvcHRpb25zID0gQ2hhcnRpc3QuZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5vbmUocGF0aENvb3JkaW5hdGVzLCB2YWx1ZURhdGEpIHtcbiAgICAgIHZhciBwYXRoID0gbmV3IENoYXJ0aXN0LlN2Zy5QYXRoKCk7XG4gICAgICB2YXIgaG9sZSA9IHRydWU7XG5cbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwYXRoQ29vcmRpbmF0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGN1cnJYID0gcGF0aENvb3JkaW5hdGVzW2ldO1xuICAgICAgICB2YXIgY3VyclkgPSBwYXRoQ29vcmRpbmF0ZXNbaSArIDFdO1xuICAgICAgICB2YXIgY3VyckRhdGEgPSB2YWx1ZURhdGFbaSAvIDJdO1xuXG4gICAgICAgIGlmKENoYXJ0aXN0LmdldE11bHRpVmFsdWUoY3VyckRhdGEudmFsdWUpICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgIGlmKGhvbGUpIHtcbiAgICAgICAgICAgIHBhdGgubW92ZShjdXJyWCwgY3VyclksIGZhbHNlLCBjdXJyRGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdGgubGluZShjdXJyWCwgY3VyclksIGZhbHNlLCBjdXJyRGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaG9sZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYoIW9wdGlvbnMuZmlsbEhvbGVzKSB7XG4gICAgICAgICAgaG9sZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogU2ltcGxlIHNtb290aGluZyBjcmVhdGVzIGhvcml6b250YWwgaGFuZGxlcyB0aGF0IGFyZSBwb3NpdGlvbmVkIHdpdGggYSBmcmFjdGlvbiBvZiB0aGUgbGVuZ3RoIGJldHdlZW4gdHdvIGRhdGEgcG9pbnRzLiBZb3UgY2FuIHVzZSB0aGUgZGl2aXNvciBvcHRpb24gdG8gc3BlY2lmeSB0aGUgYW1vdW50IG9mIHNtb290aGluZy5cbiAgICpcbiAgICogU2ltcGxlIHNtb290aGluZyBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGBDaGFydGlzdC5TbW9vdGhpbmcuY2FyZGluYWxgIGlmIHlvdSdkIGxpa2UgdG8gZ2V0IHJpZCBvZiB0aGUgYXJ0aWZhY3RzIGl0IHByb2R1Y2VzIHNvbWV0aW1lcy4gU2ltcGxlIHNtb290aGluZyBwcm9kdWNlcyBsZXNzIGZsb3dpbmcgbGluZXMgYnV0IGlzIGFjY3VyYXRlIGJ5IGhpdHRpbmcgdGhlIHBvaW50cyBhbmQgaXQgYWxzbyBkb2Vzbid0IHN3aW5nIGJlbG93IG9yIGFib3ZlIHRoZSBnaXZlbiBkYXRhIHBvaW50LlxuICAgKlxuICAgKiBBbGwgc21vb3RoaW5nIGZ1bmN0aW9ucyB3aXRoaW4gQ2hhcnRpc3QgYXJlIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IGFuIG9wdGlvbnMgcGFyYW1ldGVyLiBUaGUgc2ltcGxlIGludGVycG9sYXRpb24gZnVuY3Rpb24gYWNjZXB0cyBvbmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgYGRpdmlzb3JgLCBiZXR3ZWVuIDEgYW5kIOKIniwgd2hpY2ggY29udHJvbHMgdGhlIHNtb290aGluZyBjaGFyYWN0ZXJpc3RpY3MuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHZhciBjaGFydCA9IG5ldyBDaGFydGlzdC5MaW5lKCcuY3QtY2hhcnQnLCB7XG4gICAqICAgbGFiZWxzOiBbMSwgMiwgMywgNCwgNV0sXG4gICAqICAgc2VyaWVzOiBbWzEsIDIsIDgsIDEsIDddXVxuICAgKiB9LCB7XG4gICAqICAgbGluZVNtb290aDogQ2hhcnRpc3QuSW50ZXJwb2xhdGlvbi5zaW1wbGUoe1xuICAgKiAgICAgZGl2aXNvcjogMixcbiAgICogICAgIGZpbGxIb2xlczogZmFsc2VcbiAgICogICB9KVxuICAgKiB9KTtcbiAgICpcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkludGVycG9sYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMgb2YgdGhlIHNpbXBsZSBpbnRlcnBvbGF0aW9uIGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgQ2hhcnRpc3QuSW50ZXJwb2xhdGlvbi5zaW1wbGUgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgZGl2aXNvcjogMixcbiAgICAgIGZpbGxIb2xlczogZmFsc2VcbiAgICB9O1xuICAgIG9wdGlvbnMgPSBDaGFydGlzdC5leHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgIHZhciBkID0gMSAvIE1hdGgubWF4KDEsIG9wdGlvbnMuZGl2aXNvcik7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gc2ltcGxlKHBhdGhDb29yZGluYXRlcywgdmFsdWVEYXRhKSB7XG4gICAgICB2YXIgcGF0aCA9IG5ldyBDaGFydGlzdC5TdmcuUGF0aCgpO1xuICAgICAgdmFyIHByZXZYLCBwcmV2WSwgcHJldkRhdGE7XG5cbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBwYXRoQ29vcmRpbmF0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGN1cnJYID0gcGF0aENvb3JkaW5hdGVzW2ldO1xuICAgICAgICB2YXIgY3VyclkgPSBwYXRoQ29vcmRpbmF0ZXNbaSArIDFdO1xuICAgICAgICB2YXIgbGVuZ3RoID0gKGN1cnJYIC0gcHJldlgpICogZDtcbiAgICAgICAgdmFyIGN1cnJEYXRhID0gdmFsdWVEYXRhW2kgLyAyXTtcblxuICAgICAgICBpZihjdXJyRGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgICAgICBpZihwcmV2RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXRoLm1vdmUoY3VyclgsIGN1cnJZLCBmYWxzZSwgY3VyckRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXRoLmN1cnZlKFxuICAgICAgICAgICAgICBwcmV2WCArIGxlbmd0aCxcbiAgICAgICAgICAgICAgcHJldlksXG4gICAgICAgICAgICAgIGN1cnJYIC0gbGVuZ3RoLFxuICAgICAgICAgICAgICBjdXJyWSxcbiAgICAgICAgICAgICAgY3VyclgsXG4gICAgICAgICAgICAgIGN1cnJZLFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgY3VyckRhdGFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJldlggPSBjdXJyWDtcbiAgICAgICAgICBwcmV2WSA9IGN1cnJZO1xuICAgICAgICAgIHByZXZEYXRhID0gY3VyckRhdGE7XG4gICAgICAgIH0gZWxzZSBpZighb3B0aW9ucy5maWxsSG9sZXMpIHtcbiAgICAgICAgICBwcmV2WCA9IGN1cnJYID0gcHJldkRhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FyZGluYWwgLyBDYXRtdWxsLVJvbWUgc3BsaW5lIGludGVycG9sYXRpb24gaXMgdGhlIGRlZmF1bHQgc21vb3RoaW5nIGZ1bmN0aW9uIGluIENoYXJ0aXN0LiBJdCBwcm9kdWNlcyBuaWNlIHJlc3VsdHMgd2hlcmUgdGhlIHNwbGluZXMgd2lsbCBhbHdheXMgbWVldCB0aGUgcG9pbnRzLiBJdCBwcm9kdWNlcyBzb21lIGFydGlmYWN0cyB0aG91Z2ggd2hlbiBkYXRhIHZhbHVlcyBhcmUgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCByYXBpZGx5LiBUaGUgbGluZSBtYXkgbm90IGZvbGxvdyBhIHZlcnkgYWNjdXJhdGUgcGF0aCBhbmQgaWYgdGhlIGxpbmUgc2hvdWxkIGJlIGFjY3VyYXRlIHRoaXMgc21vb3RoaW5nIGZ1bmN0aW9uIGRvZXMgbm90IHByb2R1Y2UgdGhlIGJlc3QgcmVzdWx0cy5cbiAgICpcbiAgICogQ2FyZGluYWwgc3BsaW5lcyBjYW4gb25seSBiZSBjcmVhdGVkIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIGRhdGEgcG9pbnRzLiBJZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSB0aGlzIHNtb290aGluZyB3aWxsIGZhbGxiYWNrIHRvIGBDaGFydGlzdC5TbW9vdGhpbmcubm9uZWAuXG4gICAqXG4gICAqIEFsbCBzbW9vdGhpbmcgZnVuY3Rpb25zIHdpdGhpbiBDaGFydGlzdCBhcmUgZmFjdG9yeSBmdW5jdGlvbnMgdGhhdCBhY2NlcHQgYW4gb3B0aW9ucyBwYXJhbWV0ZXIuIFRoZSBjYXJkaW5hbCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGFjY2VwdHMgb25lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGB0ZW5zaW9uYCwgYmV0d2VlbiAwIGFuZCAxLCB3aGljaCBjb250cm9scyB0aGUgc21vb3RoaW5nIGludGVuc2l0eS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdmFyIGNoYXJ0ID0gbmV3IENoYXJ0aXN0LkxpbmUoJy5jdC1jaGFydCcsIHtcbiAgICogICBsYWJlbHM6IFsxLCAyLCAzLCA0LCA1XSxcbiAgICogICBzZXJpZXM6IFtbMSwgMiwgOCwgMSwgN11dXG4gICAqIH0sIHtcbiAgICogICBsaW5lU21vb3RoOiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLmNhcmRpbmFsKHtcbiAgICogICAgIHRlbnNpb246IDEsXG4gICAqICAgICBmaWxsSG9sZXM6IGZhbHNlXG4gICAqICAgfSlcbiAgICogfSk7XG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIG9mIHRoZSBjYXJkaW5hbCBmYWN0b3J5IGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG4gIENoYXJ0aXN0LkludGVycG9sYXRpb24uY2FyZGluYWwgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgdGVuc2lvbjogMSxcbiAgICAgIGZpbGxIb2xlczogZmFsc2VcbiAgICB9O1xuXG4gICAgb3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgdmFyIHQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBvcHRpb25zLnRlbnNpb24pKSxcbiAgICAgIGMgPSAxIC0gdDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBjYXJkaW5hbChwYXRoQ29vcmRpbmF0ZXMsIHZhbHVlRGF0YSkge1xuICAgICAgLy8gRmlyc3Qgd2UgdHJ5IHRvIHNwbGl0IHRoZSBjb29yZGluYXRlcyBpbnRvIHNlZ21lbnRzXG4gICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byB0cmVhdCBcImhvbGVzXCIgaW4gbGluZSBjaGFydHNcbiAgICAgIHZhciBzZWdtZW50cyA9IENoYXJ0aXN0LnNwbGl0SW50b1NlZ21lbnRzKHBhdGhDb29yZGluYXRlcywgdmFsdWVEYXRhLCB7XG4gICAgICAgIGZpbGxIb2xlczogb3B0aW9ucy5maWxsSG9sZXNcbiAgICAgIH0pO1xuXG4gICAgICBpZighc2VnbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gc2VnbWVudHMgcmV0dXJuICdDaGFydGlzdC5JbnRlcnBvbGF0aW9uLm5vbmUnXG4gICAgICAgIHJldHVybiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLm5vbmUoKShbXSk7XG4gICAgICB9IGVsc2UgaWYoc2VnbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyBJZiB0aGUgc3BsaXQgcmVzdWx0ZWQgaW4gbW9yZSB0aGF0IG9uZSBzZWdtZW50IHdlIG5lZWQgdG8gaW50ZXJwb2xhdGUgZWFjaCBzZWdtZW50IGluZGl2aWR1YWxseSBhbmQgam9pbiB0aGVtXG4gICAgICAgIC8vIGFmdGVyd2FyZHMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBwYXRoLlxuICAgICAgICAgIHZhciBwYXRocyA9IFtdO1xuICAgICAgICAvLyBGb3IgZWFjaCBzZWdtZW50IHdlIHdpbGwgcmVjdXJzZSB0aGUgY2FyZGluYWwgZnVuY3Rpb25cbiAgICAgICAgc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihzZWdtZW50KSB7XG4gICAgICAgICAgcGF0aHMucHVzaChjYXJkaW5hbChzZWdtZW50LnBhdGhDb29yZGluYXRlcywgc2VnbWVudC52YWx1ZURhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEpvaW4gdGhlIHNlZ21lbnQgcGF0aCBkYXRhIGludG8gYSBzaW5nbGUgcGF0aCBhbmQgcmV0dXJuXG4gICAgICAgIHJldHVybiBDaGFydGlzdC5TdmcuUGF0aC5qb2luKHBhdGhzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZXJlIHdhcyBvbmx5IG9uZSBzZWdtZW50IHdlIGNhbiBwcm9jZWVkIHJlZ3VsYXJseSBieSB1c2luZyBwYXRoQ29vcmRpbmF0ZXMgYW5kIHZhbHVlRGF0YSBmcm9tIHRoZSBmaXJzdFxuICAgICAgICAvLyBzZWdtZW50XG4gICAgICAgIHBhdGhDb29yZGluYXRlcyA9IHNlZ21lbnRzWzBdLnBhdGhDb29yZGluYXRlcztcbiAgICAgICAgdmFsdWVEYXRhID0gc2VnbWVudHNbMF0udmFsdWVEYXRhO1xuXG4gICAgICAgIC8vIElmIGxlc3MgdGhhbiB0d28gcG9pbnRzIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gbm8gc21vb3RoaW5nXG4gICAgICAgIGlmKHBhdGhDb29yZGluYXRlcy5sZW5ndGggPD0gNCkge1xuICAgICAgICAgIHJldHVybiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLm5vbmUoKShwYXRoQ29vcmRpbmF0ZXMsIHZhbHVlRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGF0aCA9IG5ldyBDaGFydGlzdC5TdmcuUGF0aCgpLm1vdmUocGF0aENvb3JkaW5hdGVzWzBdLCBwYXRoQ29vcmRpbmF0ZXNbMV0sIGZhbHNlLCB2YWx1ZURhdGFbMF0pLFxuICAgICAgICAgIHo7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlMZW4gPSBwYXRoQ29vcmRpbmF0ZXMubGVuZ3RoOyBpTGVuIC0gMiAqICF6ID4gaTsgaSArPSAyKSB7XG4gICAgICAgICAgdmFyIHAgPSBbXG4gICAgICAgICAgICB7eDogK3BhdGhDb29yZGluYXRlc1tpIC0gMl0sIHk6ICtwYXRoQ29vcmRpbmF0ZXNbaSAtIDFdfSxcbiAgICAgICAgICAgIHt4OiArcGF0aENvb3JkaW5hdGVzW2ldLCB5OiArcGF0aENvb3JkaW5hdGVzW2kgKyAxXX0sXG4gICAgICAgICAgICB7eDogK3BhdGhDb29yZGluYXRlc1tpICsgMl0sIHk6ICtwYXRoQ29vcmRpbmF0ZXNbaSArIDNdfSxcbiAgICAgICAgICAgIHt4OiArcGF0aENvb3JkaW5hdGVzW2kgKyA0XSwgeTogK3BhdGhDb29yZGluYXRlc1tpICsgNV19XG4gICAgICAgICAgXTtcbiAgICAgICAgICBpZiAoeikge1xuICAgICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICAgIHBbMF0gPSB7eDogK3BhdGhDb29yZGluYXRlc1tpTGVuIC0gMl0sIHk6ICtwYXRoQ29vcmRpbmF0ZXNbaUxlbiAtIDFdfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaUxlbiAtIDQgPT09IGkpIHtcbiAgICAgICAgICAgICAgcFszXSA9IHt4OiArcGF0aENvb3JkaW5hdGVzWzBdLCB5OiArcGF0aENvb3JkaW5hdGVzWzFdfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaUxlbiAtIDIgPT09IGkpIHtcbiAgICAgICAgICAgICAgcFsyXSA9IHt4OiArcGF0aENvb3JkaW5hdGVzWzBdLCB5OiArcGF0aENvb3JkaW5hdGVzWzFdfTtcbiAgICAgICAgICAgICAgcFszXSA9IHt4OiArcGF0aENvb3JkaW5hdGVzWzJdLCB5OiArcGF0aENvb3JkaW5hdGVzWzNdfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlMZW4gLSA0ID09PSBpKSB7XG4gICAgICAgICAgICAgIHBbM10gPSBwWzJdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghaSkge1xuICAgICAgICAgICAgICBwWzBdID0ge3g6ICtwYXRoQ29vcmRpbmF0ZXNbaV0sIHk6ICtwYXRoQ29vcmRpbmF0ZXNbaSArIDFdfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwYXRoLmN1cnZlKFxuICAgICAgICAgICAgKHQgKiAoLXBbMF0ueCArIDYgKiBwWzFdLnggKyBwWzJdLngpIC8gNikgKyAoYyAqIHBbMl0ueCksXG4gICAgICAgICAgICAodCAqICgtcFswXS55ICsgNiAqIHBbMV0ueSArIHBbMl0ueSkgLyA2KSArIChjICogcFsyXS55KSxcbiAgICAgICAgICAgICh0ICogKHBbMV0ueCArIDYgKiBwWzJdLnggLSBwWzNdLngpIC8gNikgKyAoYyAqIHBbMl0ueCksXG4gICAgICAgICAgICAodCAqIChwWzFdLnkgKyA2ICogcFsyXS55IC0gcFszXS55KSAvIDYpICsgKGMgKiBwWzJdLnkpLFxuICAgICAgICAgICAgcFsyXS54LFxuICAgICAgICAgICAgcFsyXS55LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICB2YWx1ZURhdGFbKGkgKyAyKSAvIDJdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIE1vbm90b25lIEN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uIHByb2R1Y2VzIGEgc21vb3RoIGN1cnZlIHdoaWNoIHByZXNlcnZlcyBtb25vdG9uaWNpdHkuIFVubGlrZSBjYXJkaW5hbCBzcGxpbmVzLCB0aGUgY3VydmUgd2lsbCBub3QgZXh0ZW5kIGJleW9uZCB0aGUgcmFuZ2Ugb2YgeS12YWx1ZXMgb2YgdGhlIG9yaWdpbmFsIGRhdGEgcG9pbnRzLlxuICAgKlxuICAgKiBNb25vdG9uZSBDdWJpYyBzcGxpbmVzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gZGF0YSBwb2ludHMuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlIHRoaXMgc21vb3RoaW5nIHdpbGwgZmFsbGJhY2sgdG8gYENoYXJ0aXN0LlNtb290aGluZy5ub25lYC5cbiAgICpcbiAgICogVGhlIHgtdmFsdWVzIG9mIHN1YnNlcXVlbnQgcG9pbnRzIG11c3QgYmUgaW5jcmVhc2luZyB0byBmaXQgYSBNb25vdG9uZSBDdWJpYyBzcGxpbmUuIElmIHRoaXMgY29uZGl0aW9uIGlzIG5vdCBtZXQgZm9yIGEgcGFpciBvZiBhZGphY2VudCBwb2ludHMsIHRoZW4gdGhlcmUgd2lsbCBiZSBhIGJyZWFrIGluIHRoZSBjdXJ2ZSBiZXR3ZWVuIHRob3NlIGRhdGEgcG9pbnRzLlxuICAgKlxuICAgKiBBbGwgc21vb3RoaW5nIGZ1bmN0aW9ucyB3aXRoaW4gQ2hhcnRpc3QgYXJlIGZhY3RvcnkgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IGFuIG9wdGlvbnMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB2YXIgY2hhcnQgPSBuZXcgQ2hhcnRpc3QuTGluZSgnLmN0LWNoYXJ0Jywge1xuICAgKiAgIGxhYmVsczogWzEsIDIsIDMsIDQsIDVdLFxuICAgKiAgIHNlcmllczogW1sxLCAyLCA4LCAxLCA3XV1cbiAgICogfSwge1xuICAgKiAgIGxpbmVTbW9vdGg6IENoYXJ0aXN0LkludGVycG9sYXRpb24ubW9ub3RvbmVDdWJpYyh7XG4gICAqICAgICBmaWxsSG9sZXM6IGZhbHNlXG4gICAqICAgfSlcbiAgICogfSk7XG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zIG9mIHRoZSBtb25vdG9uZUN1YmljIGZhY3RvcnkgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICAgKi9cbiAgQ2hhcnRpc3QuSW50ZXJwb2xhdGlvbi5tb25vdG9uZUN1YmljID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIGZpbGxIb2xlczogZmFsc2VcbiAgICB9O1xuXG4gICAgb3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1vbm90b25lQ3ViaWMocGF0aENvb3JkaW5hdGVzLCB2YWx1ZURhdGEpIHtcbiAgICAgIC8vIEZpcnN0IHdlIHRyeSB0byBzcGxpdCB0aGUgY29vcmRpbmF0ZXMgaW50byBzZWdtZW50c1xuICAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gdHJlYXQgXCJob2xlc1wiIGluIGxpbmUgY2hhcnRzXG4gICAgICB2YXIgc2VnbWVudHMgPSBDaGFydGlzdC5zcGxpdEludG9TZWdtZW50cyhwYXRoQ29vcmRpbmF0ZXMsIHZhbHVlRGF0YSwge1xuICAgICAgICBmaWxsSG9sZXM6IG9wdGlvbnMuZmlsbEhvbGVzLFxuICAgICAgICBpbmNyZWFzaW5nWDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmKCFzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyBzZWdtZW50cyByZXR1cm4gJ0NoYXJ0aXN0LkludGVycG9sYXRpb24ubm9uZSdcbiAgICAgICAgcmV0dXJuIENoYXJ0aXN0LkludGVycG9sYXRpb24ubm9uZSgpKFtdKTtcbiAgICAgIH0gZWxzZSBpZihzZWdtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIElmIHRoZSBzcGxpdCByZXN1bHRlZCBpbiBtb3JlIHRoYXQgb25lIHNlZ21lbnQgd2UgbmVlZCB0byBpbnRlcnBvbGF0ZSBlYWNoIHNlZ21lbnQgaW5kaXZpZHVhbGx5IGFuZCBqb2luIHRoZW1cbiAgICAgICAgLy8gYWZ0ZXJ3YXJkcyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIHBhdGguXG4gICAgICAgICAgdmFyIHBhdGhzID0gW107XG4gICAgICAgIC8vIEZvciBlYWNoIHNlZ21lbnQgd2Ugd2lsbCByZWN1cnNlIHRoZSBtb25vdG9uZUN1YmljIGZuIGZ1bmN0aW9uXG4gICAgICAgIHNlZ21lbnRzLmZvckVhY2goZnVuY3Rpb24oc2VnbWVudCkge1xuICAgICAgICAgIHBhdGhzLnB1c2gobW9ub3RvbmVDdWJpYyhzZWdtZW50LnBhdGhDb29yZGluYXRlcywgc2VnbWVudC52YWx1ZURhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEpvaW4gdGhlIHNlZ21lbnQgcGF0aCBkYXRhIGludG8gYSBzaW5nbGUgcGF0aCBhbmQgcmV0dXJuXG4gICAgICAgIHJldHVybiBDaGFydGlzdC5TdmcuUGF0aC5qb2luKHBhdGhzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZXJlIHdhcyBvbmx5IG9uZSBzZWdtZW50IHdlIGNhbiBwcm9jZWVkIHJlZ3VsYXJseSBieSB1c2luZyBwYXRoQ29vcmRpbmF0ZXMgYW5kIHZhbHVlRGF0YSBmcm9tIHRoZSBmaXJzdFxuICAgICAgICAvLyBzZWdtZW50XG4gICAgICAgIHBhdGhDb29yZGluYXRlcyA9IHNlZ21lbnRzWzBdLnBhdGhDb29yZGluYXRlcztcbiAgICAgICAgdmFsdWVEYXRhID0gc2VnbWVudHNbMF0udmFsdWVEYXRhO1xuXG4gICAgICAgIC8vIElmIGxlc3MgdGhhbiB0aHJlZSBwb2ludHMgd2UgbmVlZCB0byBmYWxsYmFjayB0byBubyBzbW9vdGhpbmdcbiAgICAgICAgaWYocGF0aENvb3JkaW5hdGVzLmxlbmd0aCA8PSA0KSB7XG4gICAgICAgICAgcmV0dXJuIENoYXJ0aXN0LkludGVycG9sYXRpb24ubm9uZSgpKHBhdGhDb29yZGluYXRlcywgdmFsdWVEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB4cyA9IFtdLFxuICAgICAgICAgIHlzID0gW10sXG4gICAgICAgICAgaSxcbiAgICAgICAgICBuID0gcGF0aENvb3JkaW5hdGVzLmxlbmd0aCAvIDIsXG4gICAgICAgICAgbXMgPSBbXSxcbiAgICAgICAgICBkcyA9IFtdLCBkeXMgPSBbXSwgZHhzID0gW10sXG4gICAgICAgICAgcGF0aDtcblxuICAgICAgICAvLyBQb3B1bGF0ZSB4IGFuZCB5IGNvb3JkaW5hdGVzIGludG8gc2VwYXJhdGUgYXJyYXlzLCBmb3IgcmVhZGFiaWxpdHlcblxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICB4c1tpXSA9IHBhdGhDb29yZGluYXRlc1tpICogMl07XG4gICAgICAgICAgeXNbaV0gPSBwYXRoQ29vcmRpbmF0ZXNbaSAqIDIgKyAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBkZWx0YXMgYW5kIGRlcml2YXRpdmVcblxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgICAgICAgZHlzW2ldID0geXNbaSArIDFdIC0geXNbaV07XG4gICAgICAgICAgZHhzW2ldID0geHNbaSArIDFdIC0geHNbaV07XG4gICAgICAgICAgZHNbaV0gPSBkeXNbaV0gLyBkeHNbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRlcm1pbmUgZGVzaXJlZCBzbG9wZSAobSkgYXQgZWFjaCBwb2ludCB1c2luZyBGcml0c2NoLUNhcmxzb24gbWV0aG9kXG4gICAgICAgIC8vIFNlZTogaHR0cDovL21hdGguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzQ1MjE4L2ltcGxlbWVudGF0aW9uLW9mLW1vbm90b25lLWN1YmljLWludGVycG9sYXRpb25cblxuICAgICAgICBtc1swXSA9IGRzWzBdO1xuICAgICAgICBtc1tuIC0gMV0gPSBkc1tuIC0gMl07XG5cbiAgICAgICAgZm9yKGkgPSAxOyBpIDwgbiAtIDE7IGkrKykge1xuICAgICAgICAgIGlmKGRzW2ldID09PSAwIHx8IGRzW2kgLSAxXSA9PT0gMCB8fCAoZHNbaSAtIDFdID4gMCkgIT09IChkc1tpXSA+IDApKSB7XG4gICAgICAgICAgICBtc1tpXSA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1zW2ldID0gMyAqIChkeHNbaSAtIDFdICsgZHhzW2ldKSAvIChcbiAgICAgICAgICAgICAgKDIgKiBkeHNbaV0gKyBkeHNbaSAtIDFdKSAvIGRzW2kgLSAxXSArXG4gICAgICAgICAgICAgIChkeHNbaV0gKyAyICogZHhzW2kgLSAxXSkgLyBkc1tpXSk7XG5cbiAgICAgICAgICAgIGlmKCFpc0Zpbml0ZShtc1tpXSkpIHtcbiAgICAgICAgICAgICAgbXNbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vdyBidWlsZCBhIHBhdGggZnJvbSB0aGUgc2xvcGVzXG5cbiAgICAgICAgcGF0aCA9IG5ldyBDaGFydGlzdC5TdmcuUGF0aCgpLm1vdmUoeHNbMF0sIHlzWzBdLCBmYWxzZSwgdmFsdWVEYXRhWzBdKTtcblxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgICAgICAgcGF0aC5jdXJ2ZShcbiAgICAgICAgICAgIC8vIEZpcnN0IGNvbnRyb2wgcG9pbnRcbiAgICAgICAgICAgIHhzW2ldICsgZHhzW2ldIC8gMyxcbiAgICAgICAgICAgIHlzW2ldICsgbXNbaV0gKiBkeHNbaV0gLyAzLFxuICAgICAgICAgICAgLy8gU2Vjb25kIGNvbnRyb2wgcG9pbnRcbiAgICAgICAgICAgIHhzW2kgKyAxXSAtIGR4c1tpXSAvIDMsXG4gICAgICAgICAgICB5c1tpICsgMV0gLSBtc1tpICsgMV0gKiBkeHNbaV0gLyAzLFxuICAgICAgICAgICAgLy8gRW5kIHBvaW50XG4gICAgICAgICAgICB4c1tpICsgMV0sXG4gICAgICAgICAgICB5c1tpICsgMV0sXG5cbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdmFsdWVEYXRhW2kgKyAxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdGVwIGludGVycG9sYXRpb24gd2lsbCBjYXVzZSB0aGUgbGluZSBjaGFydCB0byBtb3ZlIGluIHN0ZXBzIHJhdGhlciB0aGFuIGRpYWdvbmFsIG9yIHNtb290aGVkIGxpbmVzLiBUaGlzIGludGVycG9sYXRpb24gd2lsbCBjcmVhdGUgYWRkaXRpb25hbCBwb2ludHMgdGhhdCB3aWxsIGFsc28gYmUgZHJhd24gd2hlbiB0aGUgYHNob3dQb2ludGAgb3B0aW9uIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEFsbCBzbW9vdGhpbmcgZnVuY3Rpb25zIHdpdGhpbiBDaGFydGlzdCBhcmUgZmFjdG9yeSBmdW5jdGlvbnMgdGhhdCBhY2NlcHQgYW4gb3B0aW9ucyBwYXJhbWV0ZXIuIFRoZSBzdGVwIGludGVycG9sYXRpb24gZnVuY3Rpb24gYWNjZXB0cyBvbmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgYHBvc3Rwb25lYCwgdGhhdCBjYW4gYmUgYHRydWVgIG9yIGBmYWxzZWAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYCBhbmQgd2lsbCBjYXVzZSB0aGUgc3RlcCB0byBvY2N1ciB3aGVyZSB0aGUgdmFsdWUgYWN0dWFsbHkgY2hhbmdlcy4gSWYgYSBkaWZmZXJlbnQgYmVoYXZpb3VyIGlzIG5lZWRlZCB3aGVyZSB0aGUgc3RlcCBpcyBzaGlmdGVkIHRvIHRoZSBsZWZ0IGFuZCBoYXBwZW5zIGJlZm9yZSB0aGUgYWN0dWFsIHZhbHVlLCB0aGlzIG9wdGlvbiBjYW4gYmUgc2V0IHRvIGBmYWxzZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHZhciBjaGFydCA9IG5ldyBDaGFydGlzdC5MaW5lKCcuY3QtY2hhcnQnLCB7XG4gICAqICAgbGFiZWxzOiBbMSwgMiwgMywgNCwgNV0sXG4gICAqICAgc2VyaWVzOiBbWzEsIDIsIDgsIDEsIDddXVxuICAgKiB9LCB7XG4gICAqICAgbGluZVNtb290aDogQ2hhcnRpc3QuSW50ZXJwb2xhdGlvbi5zdGVwKHtcbiAgICogICAgIHBvc3Rwb25lOiB0cnVlLFxuICAgKiAgICAgZmlsbEhvbGVzOiBmYWxzZVxuICAgKiAgIH0pXG4gICAqIH0pO1xuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuSW50ZXJwb2xhdGlvblxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuICBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLnN0ZXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgcG9zdHBvbmU6IHRydWUsXG4gICAgICBmaWxsSG9sZXM6IGZhbHNlXG4gICAgfTtcblxuICAgIG9wdGlvbnMgPSBDaGFydGlzdC5leHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBzdGVwKHBhdGhDb29yZGluYXRlcywgdmFsdWVEYXRhKSB7XG4gICAgICB2YXIgcGF0aCA9IG5ldyBDaGFydGlzdC5TdmcuUGF0aCgpO1xuXG4gICAgICB2YXIgcHJldlgsIHByZXZZLCBwcmV2RGF0YTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQ29vcmRpbmF0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGN1cnJYID0gcGF0aENvb3JkaW5hdGVzW2ldO1xuICAgICAgICB2YXIgY3VyclkgPSBwYXRoQ29vcmRpbmF0ZXNbaSArIDFdO1xuICAgICAgICB2YXIgY3VyckRhdGEgPSB2YWx1ZURhdGFbaSAvIDJdO1xuXG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHBvaW50IGlzIGFsc28gbm90IGEgaG9sZSB3ZSBjYW4gZHJhdyB0aGUgc3RlcCBsaW5lc1xuICAgICAgICBpZihjdXJyRGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYocHJldkRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGF0aC5tb3ZlKGN1cnJYLCBjdXJyWSwgZmFsc2UsIGN1cnJEYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYob3B0aW9ucy5wb3N0cG9uZSkge1xuICAgICAgICAgICAgICAvLyBJZiBwb3N0cG9uZWQgd2Ugc2hvdWxkIGRyYXcgdGhlIHN0ZXAgbGluZSB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgcHJldmlvdXMgdmFsdWVcbiAgICAgICAgICAgICAgcGF0aC5saW5lKGN1cnJYLCBwcmV2WSwgZmFsc2UsIHByZXZEYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIG5vdCBwb3N0cG9uZWQgd2Ugc2hvdWxkIGRyYXcgdGhlIHN0ZXAgbGluZSB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB2YWx1ZVxuICAgICAgICAgICAgICBwYXRoLmxpbmUocHJldlgsIGN1cnJZLCBmYWxzZSwgY3VyckRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTGluZSB0byB0aGUgYWN0dWFsIHBvaW50ICh0aGlzIHNob3VsZCBvbmx5IGJlIGEgWS1BeGlzIG1vdmVtZW50XG4gICAgICAgICAgICBwYXRoLmxpbmUoY3VyclgsIGN1cnJZLCBmYWxzZSwgY3VyckRhdGEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHByZXZYID0gY3Vyclg7XG4gICAgICAgICAgcHJldlkgPSBjdXJyWTtcbiAgICAgICAgICBwcmV2RGF0YSA9IGN1cnJEYXRhO1xuICAgICAgICB9IGVsc2UgaWYoIW9wdGlvbnMuZmlsbEhvbGVzKSB7XG4gICAgICAgICAgcHJldlggPSBwcmV2WSA9IHByZXZEYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH07XG4gIH07XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBBIHZlcnkgYmFzaWMgZXZlbnQgbW9kdWxlIHRoYXQgaGVscHMgdG8gZ2VuZXJhdGUgYW5kIGNhdGNoIGV2ZW50cy5cbiAqXG4gKiBAbW9kdWxlIENoYXJ0aXN0LkV2ZW50XG4gKi9cbi8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uIChnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgQ2hhcnRpc3QuRXZlbnRFbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVycyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQWRkIGFuIGV2ZW50IGhhbmRsZXIgZm9yIGEgc3BlY2lmaWMgZXZlbnRcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBDaGFydGlzdC5FdmVudFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgQSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYWRkRXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyc1tldmVudF0gPSBoYW5kbGVyc1tldmVudF0gfHwgW107XG4gICAgICBoYW5kbGVyc1tldmVudF0ucHVzaChoYW5kbGVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYW4gZXZlbnQgaGFuZGxlciBvZiBhIHNwZWNpZmljIGV2ZW50IG5hbWUgb3IgcmVtb3ZlIGFsbCBldmVudCBoYW5kbGVycyBmb3IgYSBzcGVjaWZpYyBldmVudC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBDaGFydGlzdC5FdmVudFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZSB3aGVyZSBhIHNwZWNpZmljIG9yIGFsbCBoYW5kbGVycyBzaG91bGQgYmUgcmVtb3ZlZFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXSBBbiBvcHRpb25hbCBldmVudCBoYW5kbGVyIGZ1bmN0aW9uLiBJZiBzcGVjaWZpZWQgb25seSB0aGlzIHNwZWNpZmljIGhhbmRsZXIgd2lsbCBiZSByZW1vdmVkIGFuZCBvdGhlcndpc2UgYWxsIGhhbmRsZXJzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcikge1xuICAgICAgLy8gT25seSBkbyBzb21ldGhpbmcgaWYgdGhlcmUgYXJlIGV2ZW50IGhhbmRsZXJzIHdpdGggdGhpcyBuYW1lIGV4aXN0aW5nXG4gICAgICBpZihoYW5kbGVyc1tldmVudF0pIHtcbiAgICAgICAgLy8gSWYgaGFuZGxlciBpcyBzZXQgd2Ugd2lsbCBsb29rIGZvciBhIHNwZWNpZmljIGhhbmRsZXIgYW5kIG9ubHkgcmVtb3ZlIHRoaXNcbiAgICAgICAgaWYoaGFuZGxlcikge1xuICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XS5zcGxpY2UoaGFuZGxlcnNbZXZlbnRdLmluZGV4T2YoaGFuZGxlciksIDEpO1xuICAgICAgICAgIGlmKGhhbmRsZXJzW2V2ZW50XS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIG5vIGhhbmRsZXIgaXMgc3BlY2lmaWVkIHdlIHJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICBkZWxldGUgaGFuZGxlcnNbZXZlbnRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZW1pdCBhbiBldmVudC4gQWxsIGhhbmRsZXJzIHRoYXQgYXJlIGxpc3RlbmluZyBmb3IgdGhpcyBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCB3aXRoIHRoZSBkYXRhIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBDaGFydGlzdC5FdmVudFxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZSB0aGF0IHNob3VsZCBiZSB0cmlnZ2VyZWRcbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgQXJiaXRyYXJ5IGRhdGEgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZXZlbnQgaGFuZGxlciBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgICAvLyBPbmx5IGRvIHNvbWV0aGluZyBpZiB0aGVyZSBhcmUgZXZlbnQgaGFuZGxlcnMgd2l0aCB0aGlzIG5hbWUgZXhpc3RpbmdcbiAgICAgIGlmKGhhbmRsZXJzW2V2ZW50XSkge1xuICAgICAgICBoYW5kbGVyc1tldmVudF0uZm9yRWFjaChmdW5jdGlvbihoYW5kbGVyKSB7XG4gICAgICAgICAgaGFuZGxlcihkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gc3RhciBldmVudCBoYW5kbGVyc1xuICAgICAgaWYoaGFuZGxlcnNbJyonXSkge1xuICAgICAgICBoYW5kbGVyc1snKiddLmZvckVhY2goZnVuY3Rpb24oc3RhckhhbmRsZXIpIHtcbiAgICAgICAgICBzdGFySGFuZGxlcihldmVudCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZGRFdmVudEhhbmRsZXI6IGFkZEV2ZW50SGFuZGxlcixcbiAgICAgIHJlbW92ZUV2ZW50SGFuZGxlcjogcmVtb3ZlRXZlbnRIYW5kbGVyLFxuICAgICAgZW1pdDogZW1pdFxuICAgIH07XG4gIH07XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIGJhc2ljIHByb3RvdHlwZSBpbmhlcml0YW5jZSB1dGlsaXRpZXMuXG4gKlxuICogQG1vZHVsZSBDaGFydGlzdC5DbGFzc1xuICovXG4vKiBnbG9iYWwgQ2hhcnRpc3QgKi9cbihmdW5jdGlvbihnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gbGlzdFRvQXJyYXkobGlzdCkge1xuICAgIHZhciBhcnIgPSBbXTtcbiAgICBpZiAobGlzdC5sZW5ndGgpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcnIucHVzaChsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gZXh0ZW5kIGZyb20gY3VycmVudCBwcm90b3R5cGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5DbGFzc1xuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvcGVydGllcyBUaGUgb2JqZWN0IHRoYXQgc2VydmVzIGFzIGRlZmluaXRpb24gZm9yIHRoZSBwcm90b3R5cGUgdGhhdCBnZXRzIGNyZWF0ZWQgZm9yIHRoZSBuZXcgY2xhc3MuIFRoaXMgb2JqZWN0IHNob3VsZCBhbHdheXMgY29udGFpbiBhIGNvbnN0cnVjdG9yIHByb3BlcnR5IHRoYXQgaXMgdGhlIGRlc2lyZWQgY29uc3RydWN0b3IgZm9yIHRoZSBuZXdseSBjcmVhdGVkIGNsYXNzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW3N1cGVyUHJvdG9PdmVycmlkZV0gQnkgZGVmYXVsdCBleHRlbnMgd2lsbCB1c2UgdGhlIGN1cnJlbnQgY2xhc3MgcHJvdG90eXBlIG9yIENoYXJ0aXN0LmNsYXNzLiBXaXRoIHRoaXMgcGFyYW1ldGVyIHlvdSBjYW4gc3BlY2lmeSBhbnkgc3VwZXIgcHJvdG90eXBlIHRoYXQgd2lsbCBiZSB1c2VkLlxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gQ29uc3RydWN0b3IgZnVuY3Rpb24gb2YgdGhlIG5ldyBjbGFzc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB2YXIgRnJ1aXQgPSBDbGFzcy5leHRlbmQoe1xuICAgICAqIGNvbG9yOiB1bmRlZmluZWQsXG4gICAgICogICBzdWdhcjogdW5kZWZpbmVkLFxuICAgICAqXG4gICAgICogICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24oY29sb3IsIHN1Z2FyKSB7XG4gICAgICogICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcbiAgICAgKiAgICAgdGhpcy5zdWdhciA9IHN1Z2FyO1xuICAgICAqICAgfSxcbiAgICAgKlxuICAgICAqICAgZWF0OiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgdGhpcy5zdWdhciA9IDA7XG4gICAgICogICAgIHJldHVybiB0aGlzO1xuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgKlxuICAgKiB2YXIgQmFuYW5hID0gRnJ1aXQuZXh0ZW5kKHtcbiAgICAgKiAgIGxlbmd0aDogdW5kZWZpbmVkLFxuICAgICAqXG4gICAgICogICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24obGVuZ3RoLCBzdWdhcikge1xuICAgICAqICAgICBCYW5hbmEuc3VwZXIuY29uc3RydWN0b3IuY2FsbCh0aGlzLCAnWWVsbG93Jywgc3VnYXIpO1xuICAgICAqICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICpcbiAgICogdmFyIGJhbmFuYSA9IG5ldyBCYW5hbmEoMjAsIDQwKTtcbiAgICogY29uc29sZS5sb2coJ2JhbmFuYSBpbnN0YW5jZW9mIEZydWl0JywgYmFuYW5hIGluc3RhbmNlb2YgRnJ1aXQpO1xuICAgKiBjb25zb2xlLmxvZygnRnJ1aXQgaXMgcHJvdG90eXBlIG9mIGJhbmFuYScsIEZydWl0LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJhbmFuYSkpO1xuICAgKiBjb25zb2xlLmxvZygnYmFuYW5hcyBwcm90b3R5cGUgaXMgRnJ1aXQnLCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFuYW5hKSA9PT0gRnJ1aXQucHJvdG90eXBlKTtcbiAgICogY29uc29sZS5sb2coYmFuYW5hLnN1Z2FyKTtcbiAgICogY29uc29sZS5sb2coYmFuYW5hLmVhdCgpLnN1Z2FyKTtcbiAgICogY29uc29sZS5sb2coYmFuYW5hLmNvbG9yKTtcbiAgICovXG4gIGZ1bmN0aW9uIGV4dGVuZChwcm9wZXJ0aWVzLCBzdXBlclByb3RvT3ZlcnJpZGUpIHtcbiAgICB2YXIgc3VwZXJQcm90byA9IHN1cGVyUHJvdG9PdmVycmlkZSB8fCB0aGlzLnByb3RvdHlwZSB8fCBDaGFydGlzdC5DbGFzcztcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuY3JlYXRlKHN1cGVyUHJvdG8pO1xuXG4gICAgQ2hhcnRpc3QuQ2xhc3MuY2xvbmVEZWZpbml0aW9ucyhwcm90bywgcHJvcGVydGllcyk7XG5cbiAgICB2YXIgY29uc3RyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgZm4gPSBwcm90by5jb25zdHJ1Y3RvciB8fCBmdW5jdGlvbiAoKSB7fSxcbiAgICAgICAgaW5zdGFuY2U7XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgbGlua2VkIHRvIHRoZSBDaGFydGlzdCBuYW1lc3BhY2UgdGhlIGNvbnN0cnVjdG9yIHdhcyBub3QgY2FsbGVkIHdpdGggbmV3XG4gICAgICAvLyBUbyBwcm92aWRlIGEgZmFsbGJhY2sgd2Ugd2lsbCBpbnN0YW50aWF0ZSBoZXJlIGFuZCByZXR1cm4gdGhlIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZSA9IHRoaXMgPT09IENoYXJ0aXN0ID8gT2JqZWN0LmNyZWF0ZShwcm90bykgOiB0aGlzO1xuICAgICAgZm4uYXBwbHkoaW5zdGFuY2UsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpO1xuXG4gICAgICAvLyBJZiB0aGlzIGNvbnN0cnVjdG9yIHdhcyBub3QgY2FsbGVkIHdpdGggbmV3IHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBpbnN0YW5jZVxuICAgICAgLy8gVGhpcyB3aWxsIG5vdCBoYXJtIHdoZW4gdGhlIGNvbnN0cnVjdG9yIGhhcyBiZWVuIGNhbGxlZCB3aXRoIG5ldyBhcyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgaWdub3JlZFxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG5cbiAgICBjb25zdHIucHJvdG90eXBlID0gcHJvdG87XG4gICAgY29uc3RyLnN1cGVyID0gc3VwZXJQcm90bztcbiAgICBjb25zdHIuZXh0ZW5kID0gdGhpcy5leHRlbmQ7XG5cbiAgICByZXR1cm4gY29uc3RyO1xuICB9XG5cbiAgLy8gVmFyaWFibGUgYXJndW1lbnQgbGlzdCBjbG9uZXMgYXJncyA+IDAgaW50byBhcmdzWzBdIGFuZCByZXRydW5zIG1vZGlmaWVkIGFyZ3NbMF1cbiAgZnVuY3Rpb24gY2xvbmVEZWZpbml0aW9ucygpIHtcbiAgICB2YXIgYXJncyA9IGxpc3RUb0FycmF5KGFyZ3VtZW50cyk7XG4gICAgdmFyIHRhcmdldCA9IGFyZ3NbMF07XG5cbiAgICBhcmdzLnNwbGljZSgxLCBhcmdzLmxlbmd0aCAtIDEpLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wTmFtZSkge1xuICAgICAgICAvLyBJZiB0aGlzIHByb3BlcnR5IGFscmVhZHkgZXhpc3QgaW4gdGFyZ2V0IHdlIGRlbGV0ZSBpdCBmaXJzdFxuICAgICAgICBkZWxldGUgdGFyZ2V0W3Byb3BOYW1lXTtcbiAgICAgICAgLy8gRGVmaW5lIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNjcmlwdG9yIGZyb20gc291cmNlXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BOYW1lLFxuICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBwcm9wTmFtZSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgQ2hhcnRpc3QuQ2xhc3MgPSB7XG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgY2xvbmVEZWZpbml0aW9uczogY2xvbmVEZWZpbml0aW9uc1xuICB9O1xuXG59KHRoaXMgfHwgZ2xvYmFsLCBDaGFydGlzdCkpO1xuOy8qKlxuICogQmFzZSBmb3IgYWxsIGNoYXJ0IHR5cGVzLiBUaGUgbWV0aG9kcyBpbiBDaGFydGlzdC5CYXNlIGFyZSBpbmhlcml0ZWQgdG8gYWxsIGNoYXJ0IHR5cGVzLlxuICpcbiAqIEBtb2R1bGUgQ2hhcnRpc3QuQmFzZVxuICovXG4vKiBnbG9iYWwgQ2hhcnRpc3QgKi9cbihmdW5jdGlvbihnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuXG4gIC8vIFRPRE86IEN1cnJlbnRseSB3ZSBuZWVkIHRvIHJlLWRyYXcgdGhlIGNoYXJ0IG9uIHdpbmRvdyByZXNpemUuIFRoaXMgaXMgdXN1YWxseSB2ZXJ5IGJhZCBhbmQgd2lsbCBhZmZlY3QgcGVyZm9ybWFuY2UuXG4gIC8vIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHdlIGNhbid0IHdvcmsgd2l0aCByZWxhdGl2ZSBjb29yZGluYXRlcyB3aGVuIGRyYXdpbmcgdGhlIGNoYXJ0IGJlY2F1c2UgU1ZHIFBhdGggZG9lcyBub3RcbiAgLy8gd29yayB3aXRoIHJlbGF0aXZlIHBvc2l0aW9ucyB5ZXQuIFdlIG5lZWQgdG8gY2hlY2sgaWYgd2UgY2FuIGRvIGEgdmlld0JveCBoYWNrIHRvIHN3aXRjaCB0byBwZXJjZW50YWdlLlxuICAvLyBTZWUgaHR0cDovL21vemlsbGEuNjUwNi5uNy5uYWJibGUuY29tL1NwZWN5ZmluZy1wYXRocy13aXRoLXBlcmNlbnRhZ2VzLXVuaXQtdGQyNDc0NzQuaHRtbFxuICAvLyBVcGRhdGU6IGNhbiBiZSBkb25lIHVzaW5nIHRoZSBhYm92ZSBtZXRob2QgdGVzdGVkIGhlcmU6IGh0dHA6Ly9jb2RlcGVuLmlvL2dpb25rdW56L3Blbi9LRHZMalxuICAvLyBUaGUgcHJvYmxlbSBpcyB3aXRoIHRoZSBsYWJlbCBvZmZzZXRzIHRoYXQgY2FuJ3QgYmUgY29udmVydGVkIGludG8gcGVyY2VudGFnZSBhbmQgYWZmZWN0aW5nIHRoZSBjaGFydCBjb250YWluZXJcbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNoYXJ0IHdoaWNoIGN1cnJlbnRseSBkb2VzIGEgZnVsbCByZWNvbnN0cnVjdGlvbiBvZiB0aGUgU1ZHIERPTVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW2RhdGFdIE9wdGlvbmFsIGRhdGEgeW91J2QgbGlrZSB0byBzZXQgZm9yIHRoZSBjaGFydCBiZWZvcmUgaXQgd2lsbCB1cGRhdGUuIElmIG5vdCBzcGVjaWZpZWQgdGhlIHVwZGF0ZSBtZXRob2Qgd2lsbCB1c2UgdGhlIGRhdGEgdGhhdCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgd2l0aCB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9uYWwgb3B0aW9ucyB5b3UnZCBsaWtlIHRvIGFkZCB0byB0aGUgcHJldmlvdXMgb3B0aW9ucyBmb3IgdGhlIGNoYXJ0IGJlZm9yZSBpdCB3aWxsIHVwZGF0ZS4gSWYgbm90IHNwZWNpZmllZCB0aGUgdXBkYXRlIG1ldGhvZCB3aWxsIHVzZSB0aGUgb3B0aW9ucyB0aGF0IGhhdmUgYmVlbiBhbHJlYWR5IGNvbmZpZ3VyZWQgd2l0aCB0aGUgY2hhcnQuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW292ZXJyaWRlXSBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3NlZCBvcHRpb25zIHdpbGwgYmUgdXNlZCB0byBleHRlbmQgdGhlIG9wdGlvbnMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBhbHJlYWR5LiBPdGhlcndpc2UgdGhlIGNoYXJ0IGRlZmF1bHQgb3B0aW9ucyB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2VcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkJhc2VcbiAgICovXG4gIGZ1bmN0aW9uIHVwZGF0ZShkYXRhLCBvcHRpb25zLCBvdmVycmlkZSkge1xuICAgIGlmKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGEgfHwge307XG4gICAgICB0aGlzLmRhdGEubGFiZWxzID0gdGhpcy5kYXRhLmxhYmVscyB8fCBbXTtcbiAgICAgIHRoaXMuZGF0YS5zZXJpZXMgPSB0aGlzLmRhdGEuc2VyaWVzIHx8IFtdO1xuICAgICAgLy8gRXZlbnQgZm9yIGRhdGEgdHJhbnNmb3JtYXRpb24gdGhhdCBhbGxvd3MgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBiZWZvcmUgaXQgZ2V0cyByZW5kZXJlZCBpbiB0aGUgY2hhcnRzXG4gICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdkYXRhJywge1xuICAgICAgICB0eXBlOiAndXBkYXRlJyxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBDaGFydGlzdC5leHRlbmQoe30sIG92ZXJyaWRlID8gdGhpcy5vcHRpb25zIDogdGhpcy5kZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIGNoYXJ0aXN0IHdhcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCB3ZSBqdXN0IHNldCB0aGUgb3B0aW9ucyBhbmQgbGVhdmUgdGhlIHJlc3QgdG8gdGhlIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBPdGhlcndpc2Ugd2UgcmUtY3JlYXRlIHRoZSBvcHRpb25zUHJvdmlkZXIgYXQgdGhpcyBwb2ludFxuICAgICAgaWYoIXRoaXMuaW5pdGlhbGl6ZVRpbWVvdXRJZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnNQcm92aWRlci5yZW1vdmVNZWRpYVF1ZXJ5TGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMub3B0aW9uc1Byb3ZpZGVyID0gQ2hhcnRpc3Qub3B0aW9uc1Byb3ZpZGVyKHRoaXMub3B0aW9ucywgdGhpcy5yZXNwb25zaXZlT3B0aW9ucywgdGhpcy5ldmVudEVtaXR0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9ubHkgcmUtY3JlYXRlZCB0aGUgY2hhcnQgaWYgaXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYoIXRoaXMuaW5pdGlhbGl6ZVRpbWVvdXRJZCkge1xuICAgICAgdGhpcy5jcmVhdGVDaGFydCh0aGlzLm9wdGlvbnNQcm92aWRlci5nZXRDdXJyZW50T3B0aW9ucygpKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIGNoYXJ0IG9iamVjdCB0byBjaGFpbiB1cCBjYWxsc1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb24gdGhlIEFQSSBvYmplY3Qgb2YgZWFjaCBjaGFydCBhbmQgd2lsbCB1bi1yZWdpc3RlciBhbGwgZXZlbnQgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZCB0byBvdGhlciBjb21wb25lbnRzLiBUaGlzIGN1cnJlbnRseSBpbmNsdWRlcyBhIHdpbmRvdy5yZXNpemUgbGlzdGVuZXIgYXMgd2VsbCBhcyBtZWRpYSBxdWVyeSBsaXN0ZW5lcnMgaWYgYW55IHJlc3BvbnNpdmUgb3B0aW9ucyBoYXZlIGJlZW4gcHJvdmlkZWQuIFVzZSB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGRlc3Ryb3kgYW5kIHJlY3JlYXRlIENoYXJ0aXN0IGNoYXJ0cyBkeW5hbWljYWxseS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkJhc2VcbiAgICovXG4gIGZ1bmN0aW9uIGRldGFjaCgpIHtcbiAgICAvLyBPbmx5IGRldGFjaCBpZiBpbml0aWFsaXphdGlvbiBhbHJlYWR5IG9jY3VycmVkIG9uIHRoaXMgY2hhcnQuIElmIHRoaXMgY2hhcnQgc3RpbGwgaGFzbid0IGluaXRpYWxpemVkICh0aGVyZWZvcmVcbiAgICAvLyB0aGUgaW5pdGlhbGl6YXRpb25UaW1lb3V0SWQgaXMgc3RpbGwgYSB2YWxpZCB0aW1lb3V0IHJlZmVyZW5jZSwgd2Ugd2lsbCBjbGVhciB0aGUgdGltZW91dFxuICAgIGlmKCF0aGlzLmluaXRpYWxpemVUaW1lb3V0SWQpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2l6ZUxpc3RlbmVyKTtcbiAgICAgIHRoaXMub3B0aW9uc1Byb3ZpZGVyLnJlbW92ZU1lZGlhUXVlcnlMaXN0ZW5lcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmluaXRpYWxpemVUaW1lb3V0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGV2ZW50IGhhbmRsZXJzLiBUaGUgaGFuZGxlciBjYWxsYmFja3MgYXJlIHN5bmNocm9ub3VzIGFuZCB3aWxsIHJ1biBpbiB0aGUgbWFpbiB0aHJlYWQgcmF0aGVyIHRoYW4gdGhlIGV2ZW50IGxvb3AuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5CYXNlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBOYW1lIG9mIHRoZSBldmVudC4gQ2hlY2sgdGhlIGV4YW1wbGVzIGZvciBzdXBwb3J0ZWQgZXZlbnRzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhbiBldmVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIHdhcyBlbWl0dGVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSBhIGRhdGEgYXJndW1lbnQgd2hpY2ggY29udGFpbnMgZXZlbnQgZGF0YS4gU2VlIHRoZSBleGFtcGxlIGZvciBtb3JlIGRldGFpbHMuXG4gICAqL1xuICBmdW5jdGlvbiBvbihldmVudCwgaGFuZGxlcikge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLmFkZEV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gdW4tcmVnaXN0ZXIgZXZlbnQgaGFuZGxlcnMuIElmIHRoZSBoYW5kbGVyIGZ1bmN0aW9uIHBhcmFtZXRlciBpcyBvbWl0dGVkIGFsbCBoYW5kbGVycyBmb3IgdGhlIGdpdmVuIGV2ZW50IHdpbGwgYmUgdW4tcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkJhc2VcbiAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50IE5hbWUgb2YgdGhlIGV2ZW50IGZvciB3aGljaCBhIGhhbmRsZXIgc2hvdWxkIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2hhbmRsZXJdIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgdGhhdCB3YXMgcHJldmlvdXNseSB1c2VkIHRvIHJlZ2lzdGVyIGEgbmV3IGV2ZW50IGhhbmRsZXIuIFRoaXMgaGFuZGxlciB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlciBsaXN0LiBJZiB0aGlzIHBhcmFtZXRlciBpcyBvbWl0dGVkIHRoZW4gYWxsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgZ2l2ZW4gZXZlbnQgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC5cbiAgICovXG4gIGZ1bmN0aW9uIG9mZihldmVudCwgaGFuZGxlcikge1xuICAgIHRoaXMuZXZlbnRFbWl0dGVyLnJlbW92ZUV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIC8vIEFkZCB3aW5kb3cgcmVzaXplIGxpc3RlbmVyIHRoYXQgcmUtY3JlYXRlcyB0aGUgY2hhcnRcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVMaXN0ZW5lcik7XG5cbiAgICAvLyBPYnRhaW4gY3VycmVudCBvcHRpb25zIGJhc2VkIG9uIG1hdGNoaW5nIG1lZGlhIHF1ZXJpZXMgKGlmIHJlc3BvbnNpdmUgb3B0aW9ucyBhcmUgZ2l2ZW4pXG4gICAgLy8gVGhpcyB3aWxsIGFsc28gcmVnaXN0ZXIgYSBsaXN0ZW5lciB0aGF0IGlzIHJlLWNyZWF0aW5nIHRoZSBjaGFydCBiYXNlZCBvbiBtZWRpYSBjaGFuZ2VzXG4gICAgdGhpcy5vcHRpb25zUHJvdmlkZXIgPSBDaGFydGlzdC5vcHRpb25zUHJvdmlkZXIodGhpcy5vcHRpb25zLCB0aGlzLnJlc3BvbnNpdmVPcHRpb25zLCB0aGlzLmV2ZW50RW1pdHRlcik7XG4gICAgLy8gUmVnaXN0ZXIgb3B0aW9ucyBjaGFuZ2UgbGlzdGVuZXIgdGhhdCB3aWxsIHRyaWdnZXIgYSBjaGFydCB1cGRhdGVcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5hZGRFdmVudEhhbmRsZXIoJ29wdGlvbnNDaGFuZ2VkJywgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAvLyBCZWZvcmUgdGhlIGZpcnN0IGNoYXJ0IGNyZWF0aW9uIHdlIG5lZWQgdG8gcmVnaXN0ZXIgdXMgd2l0aCBhbGwgcGx1Z2lucyB0aGF0IGFyZSBjb25maWd1cmVkXG4gICAgLy8gSW5pdGlhbGl6ZSBhbGwgcmVsZXZhbnQgcGx1Z2lucyB3aXRoIG91ciBjaGFydCBvYmplY3QgYW5kIHRoZSBwbHVnaW4gb3B0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ1xuICAgIGlmKHRoaXMub3B0aW9ucy5wbHVnaW5zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMucGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uKHBsdWdpbikge1xuICAgICAgICBpZihwbHVnaW4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgIHBsdWdpblswXSh0aGlzLCBwbHVnaW5bMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBsdWdpbih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAvLyBFdmVudCBmb3IgZGF0YSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGFsbG93cyB0byBtYW5pcHVsYXRlIHRoZSBkYXRhIGJlZm9yZSBpdCBnZXRzIHJlbmRlcmVkIGluIHRoZSBjaGFydHNcbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdkYXRhJywge1xuICAgICAgdHlwZTogJ2luaXRpYWwnLFxuICAgICAgZGF0YTogdGhpcy5kYXRhXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGZpcnN0IGNoYXJ0XG4gICAgdGhpcy5jcmVhdGVDaGFydCh0aGlzLm9wdGlvbnNQcm92aWRlci5nZXRDdXJyZW50T3B0aW9ucygpKTtcblxuICAgIC8vIEFzIGNoYXJ0IGlzIGluaXRpYWxpemVkIGZyb20gdGhlIGV2ZW50IGxvb3Agbm93IHdlIGNhbiByZXNldCBvdXIgdGltZW91dCByZWZlcmVuY2VcbiAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBpZiB0aGUgY2hhcnQgZ2V0cyBpbml0aWFsaXplZCBvbiB0aGUgc2FtZSBlbGVtZW50IHR3aWNlXG4gICAgdGhpcy5pbml0aWFsaXplVGltZW91dElkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIG9mIGNoYXJ0IGJhc2UgY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gZGVmYXVsdE9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHBhcmFtIHJlc3BvbnNpdmVPcHRpb25zXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgZnVuY3Rpb24gQmFzZShxdWVyeSwgZGF0YSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMsIHJlc3BvbnNpdmVPcHRpb25zKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBDaGFydGlzdC5xdWVyeVNlbGVjdG9yKHF1ZXJ5KTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIHRoaXMuZGF0YS5sYWJlbHMgPSB0aGlzLmRhdGEubGFiZWxzIHx8IFtdO1xuICAgIHRoaXMuZGF0YS5zZXJpZXMgPSB0aGlzLmRhdGEuc2VyaWVzIHx8IFtdO1xuICAgIHRoaXMuZGVmYXVsdE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucmVzcG9uc2l2ZU9wdGlvbnMgPSByZXNwb25zaXZlT3B0aW9ucztcbiAgICB0aGlzLmV2ZW50RW1pdHRlciA9IENoYXJ0aXN0LkV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuc3VwcG9ydHNGb3JlaWduT2JqZWN0ID0gQ2hhcnRpc3QuU3ZnLmlzU3VwcG9ydGVkKCdFeHRlbnNpYmlsaXR5Jyk7XG4gICAgdGhpcy5zdXBwb3J0c0FuaW1hdGlvbnMgPSBDaGFydGlzdC5TdmcuaXNTdXBwb3J0ZWQoJ0FuaW1hdGlvbkV2ZW50c0F0dHJpYnV0ZScpO1xuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiByZXNpemVMaXN0ZW5lcigpe1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9LmJpbmQodGhpcyk7XG5cbiAgICBpZih0aGlzLmNvbnRhaW5lcikge1xuICAgICAgLy8gSWYgY2hhcnRpc3Qgd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW4gdGhpcyBjb250YWluZXIgd2UgYXJlIGRldGFjaGluZyBhbGwgZXZlbnQgbGlzdGVuZXJzIGZpcnN0XG4gICAgICBpZih0aGlzLmNvbnRhaW5lci5fX2NoYXJ0aXN0X18pIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuX19jaGFydGlzdF9fLmRldGFjaCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRhaW5lci5fX2NoYXJ0aXN0X18gPSB0aGlzO1xuICAgIH1cblxuICAgIC8vIFVzaW5nIGV2ZW50IGxvb3AgZm9yIGZpcnN0IGRyYXcgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byByZWdpc3RlciBldmVudCBsaXN0ZW5lcnMgaW4gdGhlIHNhbWUgY2FsbCBzdGFjayB3aGVyZVxuICAgIC8vIHRoZSBjaGFydCB3YXMgY3JlYXRlZC5cbiAgICB0aGlzLmluaXRpYWxpemVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGluaXRpYWxpemUuYmluZCh0aGlzKSwgMCk7XG4gIH1cblxuICAvLyBDcmVhdGluZyB0aGUgY2hhcnQgYmFzZSBjbGFzc1xuICBDaGFydGlzdC5CYXNlID0gQ2hhcnRpc3QuQ2xhc3MuZXh0ZW5kKHtcbiAgICBjb25zdHJ1Y3RvcjogQmFzZSxcbiAgICBvcHRpb25zUHJvdmlkZXI6IHVuZGVmaW5lZCxcbiAgICBjb250YWluZXI6IHVuZGVmaW5lZCxcbiAgICBzdmc6IHVuZGVmaW5lZCxcbiAgICBldmVudEVtaXR0ZXI6IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVDaGFydDogZnVuY3Rpb24oKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgY2hhcnQgdHlwZSBjYW5cXCd0IGJlIGluc3RhbnRpYXRlZCEnKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIGRldGFjaDogZGV0YWNoLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICB2ZXJzaW9uOiBDaGFydGlzdC52ZXJzaW9uLFxuICAgIHN1cHBvcnRzRm9yZWlnbk9iamVjdDogZmFsc2VcbiAgfSk7XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBDaGFydGlzdCBTVkcgbW9kdWxlIGZvciBzaW1wbGUgU1ZHIERPTSBhYnN0cmFjdGlvblxuICpcbiAqIEBtb2R1bGUgQ2hhcnRpc3QuU3ZnXG4gKi9cbi8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uKGdsb2JhbFJvb3QsIENoYXJ0aXN0KSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIC8qKlxuICAgKiBDaGFydGlzdC5TdmcgY3JlYXRlcyBhIG5ldyBTVkcgb2JqZWN0IHdyYXBwZXIgd2l0aCBhIHN0YXJ0aW5nIGVsZW1lbnQuIFlvdSBjYW4gdXNlIHRoZSB3cmFwcGVyIHRvIGZsdWVudGx5IGNyZWF0ZSBzdWItZWxlbWVudHMgYW5kIG1vZGlmeSB0aGVtLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1N0cmluZ3xFbGVtZW50fSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBTVkcgZWxlbWVudCB0byBjcmVhdGUgb3IgYW4gU1ZHIGRvbSBlbGVtZW50IHdoaWNoIHNob3VsZCBiZSB3cmFwcGVkIGludG8gQ2hhcnRpc3QuU3ZnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhdHRyaWJ1dGVzIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIGFkZGVkIGFzIGF0dHJpYnV0ZXMgdG8gdGhlIFNWRyBlbGVtZW50IHRoYXQgaXMgY3JlYXRlZC4gQXR0cmlidXRlcyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBub3QgYmUgYWRkZWQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBjbGFzc05hbWUgVGhpcyBjbGFzcyBvciBjbGFzcyBsaXN0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIFNWRyBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQgVGhlIHBhcmVudCBTVkcgd3JhcHBlciBvYmplY3Qgd2hlcmUgdGhpcyBuZXdseSBjcmVhdGVkIHdyYXBwZXIgYW5kIGl0J3MgZWxlbWVudCB3aWxsIGJlIGF0dGFjaGVkIHRvIGFzIGNoaWxkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5zZXJ0Rmlyc3QgSWYgdGhpcyBwYXJhbSBpcyBzZXQgdG8gdHJ1ZSBpbiBjb25qdW5jdGlvbiB3aXRoIGEgcGFyZW50IGVsZW1lbnQgdGhlIG5ld2x5IGNyZWF0ZWQgZWxlbWVudCB3aWxsIGJlIGFkZGVkIGFzIGZpcnN0IGNoaWxkIGVsZW1lbnQgaW4gdGhlIHBhcmVudCBlbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBTdmcobmFtZSwgYXR0cmlidXRlcywgY2xhc3NOYW1lLCBwYXJlbnQsIGluc2VydEZpcnN0KSB7XG4gICAgLy8gSWYgU3ZnIGlzIGdldHRpbmcgY2FsbGVkIHdpdGggYW4gU1ZHIGVsZW1lbnQgd2UganVzdCByZXR1cm4gdGhlIHdyYXBwZXJcbiAgICBpZihuYW1lIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgdGhpcy5fbm9kZSA9IG5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX25vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoQ2hhcnRpc3QubmFtZXNwYWNlcy5zdmcsIG5hbWUpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIGFuIFNWRyBlbGVtZW50IGNyZWF0ZWQgdGhlbiBjdXN0b20gbmFtZXNwYWNlXG4gICAgICBpZihuYW1lID09PSAnc3ZnJykge1xuICAgICAgICB0aGlzLmF0dHIoe1xuICAgICAgICAgICd4bWxuczpjdCc6IENoYXJ0aXN0Lm5hbWVzcGFjZXMuY3RcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoYXR0cmlidXRlcykge1xuICAgICAgdGhpcy5hdHRyKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIGlmKGNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5hZGRDbGFzcyhjbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmKHBhcmVudCkge1xuICAgICAgaWYgKGluc2VydEZpcnN0ICYmIHBhcmVudC5fbm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIHBhcmVudC5fbm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fbm9kZSwgcGFyZW50Ll9ub2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50Ll9ub2RlLmFwcGVuZENoaWxkKHRoaXMuX25vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYXR0cmlidXRlcyBvbiB0aGUgY3VycmVudCBTVkcgZWxlbWVudCBvZiB0aGUgd3JhcHBlciB5b3UncmUgY3VycmVudGx5IHdvcmtpbmcgb24uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmdcbiAgICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBhdHRyaWJ1dGVzIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIGFkZGVkIGFzIGF0dHJpYnV0ZXMgdG8gdGhlIFNWRyBlbGVtZW50IHRoYXQgaXMgY3JlYXRlZC4gQXR0cmlidXRlcyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBub3QgYmUgYWRkZWQuIElmIHRoaXMgcGFyYW1ldGVyIGlzIGEgU3RyaW5nIHRoZW4gdGhlIGZ1bmN0aW9uIGlzIHVzZWQgYXMgYSBnZXR0ZXIgYW5kIHdpbGwgcmV0dXJuIHRoZSBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbbnNdIElmIHNwZWNpZmllZCwgdGhlIGF0dHJpYnV0ZSB3aWxsIGJlIG9idGFpbmVkIHVzaW5nIGdldEF0dHJpYnV0ZU5zLiBJbiBvcmRlciB0byB3cml0ZSBuYW1lcHNhY2VkIGF0dHJpYnV0ZXMgeW91IGNhbiB1c2UgdGhlIG5hbWVzcGFjZTphdHRyaWJ1dGUgbm90YXRpb24gd2l0aGluIHRoZSBhdHRyaWJ1dGVzIG9iamVjdC5cbiAgICogQHJldHVybiB7T2JqZWN0fFN0cmluZ30gVGhlIGN1cnJlbnQgd3JhcHBlciBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZCBzbyBpdCBjYW4gYmUgdXNlZCBmb3IgY2hhaW5pbmcgb3IgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpZiB1c2VkIGFzIGdldHRlciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGF0dHIoYXR0cmlidXRlcywgbnMpIHtcbiAgICBpZih0eXBlb2YgYXR0cmlidXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmKG5zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlLmdldEF0dHJpYnV0ZU5TKG5zLCBhdHRyaWJ1dGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyB1bmRlZmluZWQgd2UgY2FuIHNraXAgdGhpcyBvbmVcbiAgICAgIGlmKGF0dHJpYnV0ZXNba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleS5pbmRleE9mKCc6JykgIT09IC0xKSB7XG4gICAgICAgIHZhciBuYW1lc3BhY2VkQXR0cmlidXRlID0ga2V5LnNwbGl0KCc6Jyk7XG4gICAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlTlMoQ2hhcnRpc3QubmFtZXNwYWNlc1tuYW1lc3BhY2VkQXR0cmlidXRlWzBdXSwga2V5LCBhdHRyaWJ1dGVzW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyaWJ1dGVzW2tleV0pO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgU1ZHIGVsZW1lbnQgd2hvc2Ugd3JhcHBlciBvYmplY3Qgd2lsbCBiZSBzZWxlY3RlZCBmb3IgZnVydGhlciBvcGVyYXRpb25zLiBUaGlzIHdheSB5b3UgY2FuIGFsc28gY3JlYXRlIG5lc3RlZCBncm91cHMgZWFzaWx5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBTVkcgZWxlbWVudCB0aGF0IHNob3VsZCBiZSBjcmVhdGVkIGFzIGNoaWxkIGVsZW1lbnQgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50IHdyYXBwZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IFthdHRyaWJ1dGVzXSBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhdHRyaWJ1dGVzIHRvIHRoZSBTVkcgZWxlbWVudCB0aGF0IGlzIGNyZWF0ZWQuIEF0dHJpYnV0ZXMgd2l0aCB1bmRlZmluZWQgdmFsdWVzIHdpbGwgbm90IGJlIGFkZGVkLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2NsYXNzTmFtZV0gVGhpcyBjbGFzcyBvciBjbGFzcyBsaXN0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIFNWRyBlbGVtZW50XG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW2luc2VydEZpcnN0XSBJZiB0aGlzIHBhcmFtIGlzIHNldCB0byB0cnVlIGluIGNvbmp1bmN0aW9uIHdpdGggYSBwYXJlbnQgZWxlbWVudCB0aGUgbmV3bHkgY3JlYXRlZCBlbGVtZW50IHdpbGwgYmUgYWRkZWQgYXMgZmlyc3QgY2hpbGQgZWxlbWVudCBpbiB0aGUgcGFyZW50IGVsZW1lbnRcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnfSBSZXR1cm5zIGEgQ2hhcnRpc3QuU3ZnIHdyYXBwZXIgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBjb250YWluaW5nIFNWRyBkYXRhXG4gICAqL1xuICBmdW5jdGlvbiBlbGVtKG5hbWUsIGF0dHJpYnV0ZXMsIGNsYXNzTmFtZSwgaW5zZXJ0Rmlyc3QpIHtcbiAgICByZXR1cm4gbmV3IENoYXJ0aXN0LlN2ZyhuYW1lLCBhdHRyaWJ1dGVzLCBjbGFzc05hbWUsIHRoaXMsIGluc2VydEZpcnN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXJlbnQgQ2hhcnRpc3QuU1ZHIHdyYXBwZXIgb2JqZWN0XG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmdcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnfSBSZXR1cm5zIGEgQ2hhcnRpc3QuU3ZnIHdyYXBwZXIgYXJvdW5kIHRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgY3VycmVudCBub2RlLiBJZiB0aGUgcGFyZW50IG5vZGUgaXMgbm90IGV4aXN0aW5nIG9yIGl0J3Mgbm90IGFuIFNWRyBub2RlIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBudWxsLlxuICAgKi9cbiAgZnVuY3Rpb24gcGFyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9ub2RlLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50ID8gbmV3IENoYXJ0aXN0LlN2Zyh0aGlzLl9ub2RlLnBhcmVudE5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgQ2hhcnRpc3QuU3ZnIHdyYXBwZXIgYXJvdW5kIHRoZSByb290IFNWRyBlbGVtZW50IG9mIHRoZSBjdXJyZW50IHRyZWUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmdcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnfSBUaGUgcm9vdCBTVkcgZWxlbWVudCB3cmFwcGVkIGluIGEgQ2hhcnRpc3QuU3ZnIGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHJvb3QoKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLl9ub2RlO1xuICAgIHdoaWxlKG5vZGUubm9kZU5hbWUgIT09ICdzdmcnKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENoYXJ0aXN0LlN2Zyhub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBmaXJzdCBjaGlsZCBTVkcgZWxlbWVudCBvZiB0aGUgY3VycmVudCBlbGVtZW50IHRoYXQgbWF0Y2hlcyBhIENTUyBzZWxlY3Rvci4gVGhlIHJldHVybmVkIG9iamVjdCBpcyBhIENoYXJ0aXN0LlN2ZyB3cmFwcGVyLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvciBBIENTUyBzZWxlY3RvciB0aGF0IGlzIHVzZWQgdG8gcXVlcnkgZm9yIGNoaWxkIFNWRyBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5Tdmd9IFRoZSBTVkcgd3JhcHBlciBmb3IgdGhlIGVsZW1lbnQgZm91bmQgb3IgbnVsbCBpZiBubyBlbGVtZW50IHdhcyBmb3VuZFxuICAgKi9cbiAgZnVuY3Rpb24gcXVlcnlTZWxlY3RvcihzZWxlY3Rvcikge1xuICAgIHZhciBmb3VuZE5vZGUgPSB0aGlzLl9ub2RlLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgIHJldHVybiBmb3VuZE5vZGUgPyBuZXcgQ2hhcnRpc3QuU3ZnKGZvdW5kTm9kZSkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGFsbCBjaGlsZCBTVkcgZWxlbWVudHMgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCB0aGF0IG1hdGNoIGEgQ1NTIHNlbGVjdG9yLiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGEgQ2hhcnRpc3QuU3ZnLkxpc3Qgd3JhcHBlci5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3IgQSBDU1Mgc2VsZWN0b3IgdGhhdCBpcyB1c2VkIHRvIHF1ZXJ5IGZvciBjaGlsZCBTVkcgZWxlbWVudHNcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnLkxpc3R9IFRoZSBTVkcgd3JhcHBlciBsaXN0IGZvciB0aGUgZWxlbWVudCBmb3VuZCBvciBudWxsIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kXG4gICAqL1xuICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSB7XG4gICAgdmFyIGZvdW5kTm9kZXMgPSB0aGlzLl9ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICAgIHJldHVybiBmb3VuZE5vZGVzLmxlbmd0aCA/IG5ldyBDaGFydGlzdC5TdmcuTGlzdChmb3VuZE5vZGVzKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdW5kZXJseWluZyBTVkcgbm9kZSBmb3IgdGhlIGN1cnJlbnQgZWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcmV0dXJucyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGU7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIGZvcmVpZ25PYmplY3QgKHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9TVkcvRWxlbWVudC9mb3JlaWduT2JqZWN0KSB0aGF0IGFsbG93cyB0byBlbWJlZCBIVE1MIGNvbnRlbnQgaW50byBhIFNWRyBncmFwaGljLiBXaXRoIHRoZSBoZWxwIG9mIGZvcmVpZ25PYmplY3RzIHlvdSBjYW4gZW5hYmxlIHRoZSB1c2FnZSBvZiByZWd1bGFyIEhUTUwgZWxlbWVudHMgaW5zaWRlIG9mIFNWRyB3aGVyZSB0aGV5IGFyZSBzdWJqZWN0IGZvciBTVkcgcG9zaXRpb25pbmcgYW5kIHRyYW5zZm9ybWF0aW9uIGJ1dCB0aGUgQnJvd3NlciB3aWxsIHVzZSB0aGUgSFRNTCByZW5kZXJpbmcgY2FwYWJpbGl0aWVzIGZvciB0aGUgY29udGFpbmluZyBET00uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmdcbiAgICogQHBhcmFtIHtOb2RlfFN0cmluZ30gY29udGVudCBUaGUgRE9NIE5vZGUsIG9yIEhUTUwgc3RyaW5nIHRoYXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBET00gTm9kZSwgdGhhdCBpcyB0aGVuIHBsYWNlZCBpbnRvIGFuZCB3cmFwcGVkIGJ5IHRoZSBmb3JlaWduT2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbYXR0cmlidXRlc10gQW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgYWRkZWQgYXMgYXR0cmlidXRlcyB0byB0aGUgZm9yZWlnbk9iamVjdCBlbGVtZW50IHRoYXQgaXMgY3JlYXRlZC4gQXR0cmlidXRlcyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMgd2lsbCBub3QgYmUgYWRkZWQuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbY2xhc3NOYW1lXSBUaGlzIGNsYXNzIG9yIGNsYXNzIGxpc3Qgd2lsbCBiZSBhZGRlZCB0byB0aGUgU1ZHIGVsZW1lbnRcbiAgICogQHBhcmFtIHtCb29sZWFufSBbaW5zZXJ0Rmlyc3RdIFNwZWNpZmllcyBpZiB0aGUgZm9yZWlnbk9iamVjdCBzaG91bGQgYmUgaW5zZXJ0ZWQgYXMgZmlyc3QgY2hpbGRcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnfSBOZXcgd3JhcHBlciBvYmplY3QgdGhhdCB3cmFwcyB0aGUgZm9yZWlnbk9iamVjdCBlbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBmb3JlaWduT2JqZWN0KGNvbnRlbnQsIGF0dHJpYnV0ZXMsIGNsYXNzTmFtZSwgaW5zZXJ0Rmlyc3QpIHtcbiAgICAvLyBJZiBjb250ZW50IGlzIHN0cmluZyB0aGVuIHdlIGNvbnZlcnQgaXQgdG8gRE9NXG4gICAgLy8gVE9ETzogSGFuZGxlIGNhc2Ugd2hlcmUgY29udGVudCBpcyBub3QgYSBzdHJpbmcgbm9yIGEgRE9NIE5vZGVcbiAgICBpZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBjb250ZW50O1xuICAgICAgY29udGVudCA9IGNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgIH1cblxuICAgIC8vIEFkZGluZyBuYW1lc3BhY2UgdG8gY29udGVudCBlbGVtZW50XG4gICAgY29udGVudC5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgQ2hhcnRpc3QubmFtZXNwYWNlcy54bWxucyk7XG5cbiAgICAvLyBDcmVhdGluZyB0aGUgZm9yZWlnbk9iamVjdCB3aXRob3V0IHJlcXVpcmVkIGV4dGVuc2lvbiBhdHRyaWJ1dGUgKGFzIGRlc2NyaWJlZCBoZXJlXG4gICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2V4dGVuZC5odG1sI0ZvcmVpZ25PYmplY3RFbGVtZW50KVxuICAgIHZhciBmbk9iaiA9IHRoaXMuZWxlbSgnZm9yZWlnbk9iamVjdCcsIGF0dHJpYnV0ZXMsIGNsYXNzTmFtZSwgaW5zZXJ0Rmlyc3QpO1xuXG4gICAgLy8gQWRkIGNvbnRlbnQgdG8gZm9yZWlnbk9iamVjdEVsZW1lbnRcbiAgICBmbk9iai5fbm9kZS5hcHBlbmRDaGlsZChjb250ZW50KTtcblxuICAgIHJldHVybiBmbk9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgbmV3IHRleHQgZWxlbWVudCB0byB0aGUgY3VycmVudCBDaGFydGlzdC5Tdmcgd3JhcHBlci5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge1N0cmluZ30gdCBUaGUgdGV4dCB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgdGV4dCBlbGVtZW50IHRoYXQgaXMgY3JlYXRlZFxuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5Tdmd9IFRoZSBzYW1lIHdyYXBwZXIgb2JqZWN0IHRoYXQgd2FzIHVzZWQgdG8gYWRkIHRoZSBuZXdseSBjcmVhdGVkIGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHRleHQodCkge1xuICAgIHRoaXMuX25vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgY2xlYXIgYWxsIGNoaWxkIG5vZGVzIG9mIHRoZSBjdXJyZW50IHdyYXBwZXIgb2JqZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Z30gVGhlIHNhbWUgd3JhcHBlciBvYmplY3QgdGhhdCBnb3QgZW1wdGllZFxuICAgKi9cbiAgZnVuY3Rpb24gZW1wdHkoKSB7XG4gICAgd2hpbGUgKHRoaXMuX25vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5fbm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9ub2RlLmZpcnN0Q2hpbGQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgY2F1c2UgdGhlIGN1cnJlbnQgd3JhcHBlciB0byByZW1vdmUgaXRzZWxmIGZyb20gaXRzIHBhcmVudCB3cmFwcGVyLiBVc2UgdGhpcyBtZXRob2QgaWYgeW91J2QgbGlrZSB0byBnZXQgcmlkIG9mIGFuIGVsZW1lbnQgaW4gYSBnaXZlbiBET00gc3RydWN0dXJlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Z30gVGhlIHBhcmVudCB3cmFwcGVyIG9iamVjdCBvZiB0aGUgZWxlbWVudCB0aGF0IGdvdCByZW1vdmVkXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgdGhpcy5fbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX25vZGUpO1xuICAgIHJldHVybiB0aGlzLnBhcmVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVwbGFjZSB0aGUgZWxlbWVudCB3aXRoIGEgbmV3IGVsZW1lbnQgdGhhdCBjYW4gYmUgY3JlYXRlZCBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IERPTS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge0NoYXJ0aXN0LlN2Z30gbmV3RWxlbWVudCBUaGUgbmV3IENoYXJ0aXN0LlN2ZyBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcmVwbGFjZSB0aGUgY3VycmVudCB3cmFwcGVyIG9iamVjdFxuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5Tdmd9IFRoZSB3cmFwcGVyIG9mIHRoZSBuZXcgZWxlbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZShuZXdFbGVtZW50KSB7XG4gICAgdGhpcy5fbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdFbGVtZW50Ll9ub2RlLCB0aGlzLl9ub2RlKTtcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGFwcGVuZCBhbiBlbGVtZW50IHRvIHRoZSBjdXJyZW50IGVsZW1lbnQgYXMgYSBjaGlsZC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge0NoYXJ0aXN0LlN2Z30gZWxlbWVudCBUaGUgQ2hhcnRpc3QuU3ZnIGVsZW1lbnQgdGhhdCBzaG91bGQgYmUgYWRkZWQgYXMgYSBjaGlsZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtpbnNlcnRGaXJzdF0gU3BlY2lmaWVzIGlmIHRoZSBlbGVtZW50IHNob3VsZCBiZSBpbnNlcnRlZCBhcyBmaXJzdCBjaGlsZFxuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5Tdmd9IFRoZSB3cmFwcGVyIG9mIHRoZSBhcHBlbmRlZCBvYmplY3RcbiAgICovXG4gIGZ1bmN0aW9uIGFwcGVuZChlbGVtZW50LCBpbnNlcnRGaXJzdCkge1xuICAgIGlmKGluc2VydEZpcnN0ICYmIHRoaXMuX25vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5fbm9kZS5pbnNlcnRCZWZvcmUoZWxlbWVudC5fbm9kZSwgdGhpcy5fbm9kZS5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbm9kZS5hcHBlbmRDaGlsZChlbGVtZW50Ll9ub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNsYXNzIG5hbWVzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IHdyYXBwZXIgZWxlbWVudC4gVGhpcyBtZXRob2QgY2FuIG5vdCBiZSBjaGFpbmVkIGZ1cnRoZXIuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmdcbiAgICogQHJldHVybiB7QXJyYXl9IEEgbGlzdCBvZiBjbGFzc2VzIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZXJlIGFyZSBubyBjbGFzc2VzIG9uIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIGNsYXNzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpID8gdGhpcy5fbm9kZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykudHJpbSgpLnNwbGl0KC9cXHMrLykgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9uZSBvciBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzZXMgdG8gdGhlIGN1cnJlbnQgZWxlbWVudCBhbmQgZW5zdXJlcyB0aGUgY2xhc3NlcyBhcmUgb25seSBleGlzdGluZyBvbmNlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lcyBBIHdoaXRlIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzIG5hbWVzXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Z30gVGhlIHdyYXBwZXIgb2YgdGhlIGN1cnJlbnQgZWxlbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gYWRkQ2xhc3MobmFtZXMpIHtcbiAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLFxuICAgICAgdGhpcy5jbGFzc2VzKHRoaXMuX25vZGUpXG4gICAgICAgIC5jb25jYXQobmFtZXMudHJpbSgpLnNwbGl0KC9cXHMrLykpXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oZWxlbSwgcG9zLCBzZWxmKSB7XG4gICAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZihlbGVtKSA9PT0gcG9zO1xuICAgICAgICB9KS5qb2luKCcgJylcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBvbmUgb3IgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIGN1cnJlbnQgZWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZXMgQSB3aGl0ZSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzcyBuYW1lc1xuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5Tdmd9IFRoZSB3cmFwcGVyIG9mIHRoZSBjdXJyZW50IGVsZW1lbnRcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5hbWVzKSB7XG4gICAgdmFyIHJlbW92ZWRDbGFzc2VzID0gbmFtZXMudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCB0aGlzLmNsYXNzZXModGhpcy5fbm9kZSkuZmlsdGVyKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiByZW1vdmVkQ2xhc3Nlcy5pbmRleE9mKG5hbWUpID09PSAtMTtcbiAgICB9KS5qb2luKCcgJykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgY2xhc3NlcyBmcm9tIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmdcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnfSBUaGUgd3JhcHBlciBvZiB0aGUgY3VycmVudCBlbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVBbGxDbGFzc2VzKCkge1xuICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsICcnKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IGhlaWdodCB1c2luZyBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YFxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEByZXR1cm4ge051bWJlcn0gVGhlIGVsZW1lbnRzIGhlaWdodCBpbiBwaXhlbHNcbiAgICovXG4gIGZ1bmN0aW9uIGhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVsZW1lbnQgd2lkdGggdXNpbmcgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGBcbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkNvcmVcbiAgICogQHJldHVybiB7TnVtYmVyfSBUaGUgZWxlbWVudHMgd2lkdGggaW4gcGl4ZWxzXG4gICAqL1xuICBmdW5jdGlvbiB3aWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0ZSBmdW5jdGlvbiBsZXRzIHlvdSBhbmltYXRlIHRoZSBjdXJyZW50IGVsZW1lbnQgd2l0aCBTTUlMIGFuaW1hdGlvbnMuIFlvdSBjYW4gYWRkIGFuaW1hdGlvbnMgZm9yIG11bHRpcGxlIGF0dHJpYnV0ZXMgYXQgdGhlIHNhbWUgdGltZSBieSB1c2luZyBhbiBhbmltYXRpb24gZGVmaW5pdGlvbiBvYmplY3QuIFRoaXMgb2JqZWN0IHNob3VsZCBjb250YWluIFNNSUwgYW5pbWF0aW9uIGF0dHJpYnV0ZXMuIFBsZWFzZSByZWZlciB0byBodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcvYW5pbWF0ZS5odG1sIGZvciBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gYWJvdXQgdGhlIGF2YWlsYWJsZSBhbmltYXRpb24gYXR0cmlidXRlcy4gQWRkaXRpb25hbGx5IGFuIGVhc2luZyBwcm9wZXJ0eSBjYW4gYmUgcGFzc2VkIGluIHRoZSBhbmltYXRpb24gZGVmaW5pdGlvbiBvYmplY3QuIFRoaXMgY2FuIGJlIGEgc3RyaW5nIHdpdGggYSBuYW1lIG9mIGFuIGVhc2luZyBmdW5jdGlvbiBpbiBgQ2hhcnRpc3QuU3ZnLkVhc2luZ2Agb3IgYW4gYXJyYXkgd2l0aCBmb3VyIG51bWJlcnMgc3BlY2lmeWluZyBhIGN1YmljIELDqXppZXIgY3VydmUuXG4gICAqICoqQW4gYW5pbWF0aW9ucyBvYmplY3QgY291bGQgbG9vayBsaWtlIHRoaXM6KipcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBlbGVtZW50LmFuaW1hdGUoe1xuICAgKiAgIG9wYWNpdHk6IHtcbiAgICogICAgIGR1cjogMTAwMCxcbiAgICogICAgIGZyb206IDAsXG4gICAqICAgICB0bzogMVxuICAgKiAgIH0sXG4gICAqICAgeDE6IHtcbiAgICogICAgIGR1cjogJzEwMDBtcycsXG4gICAqICAgICBmcm9tOiAxMDAsXG4gICAqICAgICB0bzogMjAwLFxuICAgKiAgICAgZWFzaW5nOiAnZWFzZU91dFF1YXJ0J1xuICAgKiAgIH0sXG4gICAqICAgeTE6IHtcbiAgICogICAgIGR1cjogJzJzJyxcbiAgICogICAgIGZyb206IDAsXG4gICAqICAgICB0bzogMTAwXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqICoqQXV0b21hdGljIHVuaXQgY29udmVyc2lvbioqXG4gICAqIEZvciB0aGUgYGR1cmAgYW5kIHRoZSBgYmVnaW5gIGFuaW1hdGUgYXR0cmlidXRlIHlvdSBjYW4gYWxzbyBvbWl0IGEgdW5pdCBieSBwYXNzaW5nIGEgbnVtYmVyLiBUaGUgbnVtYmVyIHdpbGwgYXV0b21hdGljYWxseSBiZSBjb252ZXJ0ZWQgdG8gbWlsbGkgc2Vjb25kcy5cbiAgICogKipHdWlkZWQgbW9kZSoqXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIFNNSUwgYW5pbWF0aW9ucyB3aXRoIG9mZnNldCB1c2luZyB0aGUgYGJlZ2luYCBhdHRyaWJ1dGUgaXMgdGhhdCB0aGUgYXR0cmlidXRlIHdpbGwga2VlcCBpdCdzIG9yaWdpbmFsIHZhbHVlIHVudGlsIHRoZSBhbmltYXRpb24gc3RhcnRzLiBNb3N0bHkgdGhpcyBiZWhhdmlvciBpcyBub3QgZGVzaXJlZCBhcyB5b3UnZCBsaWtlIHRvIGhhdmUgeW91ciBlbGVtZW50IGF0dHJpYnV0ZXMgYWxyZWFkeSBpbml0aWFsaXplZCB3aXRoIHRoZSBhbmltYXRpb24gYGZyb21gIHZhbHVlIGV2ZW4gYmVmb3JlIHRoZSBhbmltYXRpb24gc3RhcnRzLiBBbHNvIGlmIHlvdSBkb24ndCBzcGVjaWZ5IGBmaWxsPVwiZnJlZXplXCJgIG9uIGFuIGFuaW1hdGUgZWxlbWVudCBvciBpZiB5b3UgZGVsZXRlIHRoZSBhbmltYXRpb24gYWZ0ZXIgaXQncyBkb25lICh3aGljaCBpcyBkb25lIGluIGd1aWRlZCBtb2RlKSB0aGUgYXR0cmlidXRlIHdpbGwgc3dpdGNoIGJhY2sgdG8gdGhlIGluaXRpYWwgdmFsdWUuIFRoaXMgYmVoYXZpb3IgaXMgYWxzbyBub3QgZGVzaXJlZCB3aGVuIHBlcmZvcm1pbmcgc2ltcGxlIG9uZS10aW1lIGFuaW1hdGlvbnMuIEZvciBvbmUtdGltZSBhbmltYXRpb25zIHlvdSdkIHdhbnQgdG8gdHJpZ2dlciBhbmltYXRpb25zIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50IGJlZ2luIHRpbWUuIFRoYXQncyB3aHkgaW4gZ3VpZGVkIG1vZGUgQ2hhcnRpc3QuU3ZnIHdpbGwgYWxzbyB1c2UgdGhlIGBiZWdpbmAgcHJvcGVydHkgdG8gc2NoZWR1bGUgYSB0aW1lb3V0IGFuZCBtYW51YWxseSBzdGFydCB0aGUgYW5pbWF0aW9uIGFmdGVyIHRoZSB0aW1lb3V0LiBJZiB5b3UncmUgdXNpbmcgbXVsdGlwbGUgU01JTCBkZWZpbml0aW9uIG9iamVjdHMgZm9yIGFuIGF0dHJpYnV0ZSAoaW4gYW4gYXJyYXkpLCBndWlkZWQgbW9kZSB3aWxsIGJlIGRpc2FibGVkIGZvciB0aGlzIGF0dHJpYnV0ZSwgZXZlbiBpZiB5b3UgZXhwbGljaXRseSBlbmFibGVkIGl0LlxuICAgKiBJZiBndWlkZWQgbW9kZSBpcyBlbmFibGVkIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3IgaXMgYWRkZWQ6XG4gICAqIC0gQmVmb3JlIHRoZSBhbmltYXRpb24gc3RhcnRzIChldmVuIHdoZW4gZGVsYXllZCB3aXRoIGBiZWdpbmApIHRoZSBhbmltYXRlZCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQgYWxyZWFkeSB0byB0aGUgYGZyb21gIHZhbHVlIG9mIHRoZSBhbmltYXRpb25cbiAgICogLSBgYmVnaW5gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBpbmRlZmluaXRlYCBzbyBpdCBjYW4gYmUgc3RhcnRlZCBtYW51YWxseSB3aXRob3V0IHJlbHlpbmcgb24gZG9jdW1lbnQgYmVnaW4gdGltZSAoY3JlYXRpb24pXG4gICAqIC0gVGhlIGFuaW1hdGUgZWxlbWVudCB3aWxsIGJlIGZvcmNlZCB0byB1c2UgYGZpbGw9XCJmcmVlemVcImBcbiAgICogLSBUaGUgYW5pbWF0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIHdpdGggYGJlZ2luRWxlbWVudCgpYCBpbiBhIHRpbWVvdXQgd2hlcmUgYGJlZ2luYCBvZiB0aGUgZGVmaW5pdGlvbiBvYmplY3QgaXMgaW50ZXJwcmV0ZWQgaW4gbWlsbGkgc2Vjb25kcy4gSWYgbm8gYGJlZ2luYCB3YXMgc3BlY2lmaWVkIHRoZSB0aW1lb3V0IGlzIHRyaWdnZXJlZCBpbW1lZGlhdGVseS5cbiAgICogLSBBZnRlciB0aGUgYW5pbWF0aW9uIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZSB3aWxsIGJlIHNldCB0byB0aGUgYHRvYCB2YWx1ZSBvZiB0aGUgYW5pbWF0aW9uXG4gICAqIC0gVGhlIGFuaW1hdGUgZWxlbWVudCBpcyBkZWxldGVkIGZyb20gdGhlIERPTVxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhbmltYXRpb25zIEFuIGFuaW1hdGlvbnMgb2JqZWN0IHdoZXJlIHRoZSBwcm9wZXJ0eSBrZXlzIGFyZSB0aGUgYXR0cmlidXRlcyB5b3UnZCBsaWtlIHRvIGFuaW1hdGUuIFRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBvYmplY3RzIGFnYWluIHRoYXQgY29udGFpbiB0aGUgU01JTCBhbmltYXRpb24gYXR0cmlidXRlcyAodXN1YWxseSBiZWdpbiwgZHVyLCBmcm9tLCBhbmQgdG8pLiBUaGUgcHJvcGVydHkgYmVnaW4gYW5kIGR1ciBpcyBhdXRvIGNvbnZlcnRlZCAoc2VlIEF1dG9tYXRpYyB1bml0IGNvbnZlcnNpb24pLiBZb3UgY2FuIGFsc28gc2NoZWR1bGUgbXVsdGlwbGUgYW5pbWF0aW9ucyBmb3IgdGhlIHNhbWUgYXR0cmlidXRlIGJ5IHBhc3NpbmcgYW4gQXJyYXkgb2YgU01JTCBkZWZpbml0aW9uIG9iamVjdHMuIEF0dHJpYnV0ZXMgdGhhdCBjb250YWluIGFuIGFycmF5IG9mIFNNSUwgZGVmaW5pdGlvbiBvYmplY3RzIHdpbGwgbm90IGJlIGV4ZWN1dGVkIGluIGd1aWRlZCBtb2RlLlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGd1aWRlZCBTcGVjaWZ5IGlmIGd1aWRlZCBtb2RlIHNob3VsZCBiZSBhY3RpdmF0ZWQgZm9yIHRoaXMgYW5pbWF0aW9uIChzZWUgR3VpZGVkIG1vZGUpLiBJZiBub3Qgb3RoZXJ3aXNlIHNwZWNpZmllZCwgZ3VpZGVkIG1vZGUgd2lsbCBiZSBhY3RpdmF0ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBldmVudEVtaXR0ZXIgSWYgc3BlY2lmaWVkLCB0aGlzIGV2ZW50IGVtaXR0ZXIgd2lsbCBiZSBub3RpZmllZCB3aGVuIGFuIGFuaW1hdGlvbiBzdGFydHMgb3IgZW5kcy5cbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnfSBUaGUgY3VycmVudCBlbGVtZW50IHdoZXJlIHRoZSBhbmltYXRpb24gd2FzIGFkZGVkXG4gICAqL1xuICBmdW5jdGlvbiBhbmltYXRlKGFuaW1hdGlvbnMsIGd1aWRlZCwgZXZlbnRFbWl0dGVyKSB7XG4gICAgaWYoZ3VpZGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGd1aWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoYW5pbWF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiBjcmVhdGVBbmltYXRlRm9yQXR0cmlidXRlcyhhdHRyaWJ1dGUpIHtcblxuICAgICAgZnVuY3Rpb24gY3JlYXRlQW5pbWF0ZShhbmltYXRpb25EZWZpbml0aW9uLCBndWlkZWQpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZVByb3BlcnRpZXMgPSB7fSxcbiAgICAgICAgICBhbmltYXRlLFxuICAgICAgICAgIHRpbWVvdXQsXG4gICAgICAgICAgZWFzaW5nO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGFuIGVhc2luZyBpcyBzcGVjaWZpZWQgaW4gdGhlIGRlZmluaXRpb24gb2JqZWN0IGFuZCBkZWxldGUgaXQgZnJvbSB0aGUgb2JqZWN0IGFzIGl0IHdpbGwgbm90XG4gICAgICAgIC8vIGJlIHBhcnQgb2YgdGhlIGFuaW1hdGUgZWxlbWVudCBhdHRyaWJ1dGVzLlxuICAgICAgICBpZihhbmltYXRpb25EZWZpbml0aW9uLmVhc2luZykge1xuICAgICAgICAgIC8vIElmIGFscmVhZHkgYW4gZWFzaW5nIELDqXppZXIgY3VydmUgYXJyYXkgd2UgdGFrZSBpdCBvciB3ZSBsb29rdXAgYSBlYXNpbmcgYXJyYXkgaW4gdGhlIEVhc2luZyBvYmplY3RcbiAgICAgICAgICBlYXNpbmcgPSBhbmltYXRpb25EZWZpbml0aW9uLmVhc2luZyBpbnN0YW5jZW9mIEFycmF5ID9cbiAgICAgICAgICAgIGFuaW1hdGlvbkRlZmluaXRpb24uZWFzaW5nIDpcbiAgICAgICAgICAgIENoYXJ0aXN0LlN2Zy5FYXNpbmdbYW5pbWF0aW9uRGVmaW5pdGlvbi5lYXNpbmddO1xuICAgICAgICAgIGRlbGV0ZSBhbmltYXRpb25EZWZpbml0aW9uLmVhc2luZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG51bWVyaWMgZHVyIG9yIGJlZ2luIHdhcyBwcm92aWRlZCB3ZSBhc3N1bWUgbWlsbGkgc2Vjb25kc1xuICAgICAgICBhbmltYXRpb25EZWZpbml0aW9uLmJlZ2luID0gQ2hhcnRpc3QuZW5zdXJlVW5pdChhbmltYXRpb25EZWZpbml0aW9uLmJlZ2luLCAnbXMnKTtcbiAgICAgICAgYW5pbWF0aW9uRGVmaW5pdGlvbi5kdXIgPSBDaGFydGlzdC5lbnN1cmVVbml0KGFuaW1hdGlvbkRlZmluaXRpb24uZHVyLCAnbXMnKTtcblxuICAgICAgICBpZihlYXNpbmcpIHtcbiAgICAgICAgICBhbmltYXRpb25EZWZpbml0aW9uLmNhbGNNb2RlID0gJ3NwbGluZSc7XG4gICAgICAgICAgYW5pbWF0aW9uRGVmaW5pdGlvbi5rZXlTcGxpbmVzID0gZWFzaW5nLmpvaW4oJyAnKTtcbiAgICAgICAgICBhbmltYXRpb25EZWZpbml0aW9uLmtleVRpbWVzID0gJzA7MSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGRpbmcgXCJmaWxsOiBmcmVlemVcIiBpZiB3ZSBhcmUgaW4gZ3VpZGVkIG1vZGUgYW5kIHNldCBpbml0aWFsIGF0dHJpYnV0ZSB2YWx1ZXNcbiAgICAgICAgaWYoZ3VpZGVkKSB7XG4gICAgICAgICAgYW5pbWF0aW9uRGVmaW5pdGlvbi5maWxsID0gJ2ZyZWV6ZSc7XG4gICAgICAgICAgLy8gQW5pbWF0ZWQgcHJvcGVydHkgb24gb3VyIGVsZW1lbnQgc2hvdWxkIGFscmVhZHkgYmUgc2V0IHRvIHRoZSBhbmltYXRpb24gZnJvbSB2YWx1ZSBpbiBndWlkZWQgbW9kZVxuICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXNbYXR0cmlidXRlXSA9IGFuaW1hdGlvbkRlZmluaXRpb24uZnJvbTtcbiAgICAgICAgICB0aGlzLmF0dHIoYXR0cmlidXRlUHJvcGVydGllcyk7XG5cbiAgICAgICAgICAvLyBJbiBndWlkZWQgbW9kZSB3ZSBhbHNvIHNldCBiZWdpbiB0byBpbmRlZmluaXRlIHNvIHdlIGNhbiB0cmlnZ2VyIHRoZSBzdGFydCBtYW51YWxseSBhbmQgcHV0IHRoZSBiZWdpblxuICAgICAgICAgIC8vIHdoaWNoIG5lZWRzIHRvIGJlIGluIG1zIGFzaWRlXG4gICAgICAgICAgdGltZW91dCA9IENoYXJ0aXN0LnF1YW50aXR5KGFuaW1hdGlvbkRlZmluaXRpb24uYmVnaW4gfHwgMCkudmFsdWU7XG4gICAgICAgICAgYW5pbWF0aW9uRGVmaW5pdGlvbi5iZWdpbiA9ICdpbmRlZmluaXRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGFuaW1hdGUgPSB0aGlzLmVsZW0oJ2FuaW1hdGUnLCBDaGFydGlzdC5leHRlbmQoe1xuICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IGF0dHJpYnV0ZVxuICAgICAgICB9LCBhbmltYXRpb25EZWZpbml0aW9uKSk7XG5cbiAgICAgICAgaWYoZ3VpZGVkKSB7XG4gICAgICAgICAgLy8gSWYgZ3VpZGVkIHdlIHRha2UgdGhlIHZhbHVlIHRoYXQgd2FzIHB1dCBhc2lkZSBpbiB0aW1lb3V0IGFuZCB0cmlnZ2VyIHRoZSBhbmltYXRpb24gbWFudWFsbHkgd2l0aCBhIHRpbWVvdXRcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgLy8gSWYgYmVnaW5FbGVtZW50IGZhaWxzIHdlIHNldCB0aGUgYW5pbWF0ZWQgYXR0cmlidXRlIHRvIHRoZSBlbmQgcG9zaXRpb24gYW5kIHJlbW92ZSB0aGUgYW5pbWF0ZSBlbGVtZW50XG4gICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgaWYgdGhlIFNNSUwgRWxlbWVudFRpbWVDb250cm9sIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkIG9yIGFueSBvdGhlciBwcm9ibGVtcyBvY2N1cmVkIGluXG4gICAgICAgICAgICAvLyB0aGUgYnJvd3Nlci4gKEN1cnJlbnRseSBGRiAzNCBkb2VzIG5vdCBzdXBwb3J0IGFuaW1hdGUgZWxlbWVudHMgaW4gZm9yZWlnbk9iamVjdHMpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhbmltYXRlLl9ub2RlLmJlZ2luRWxlbWVudCgpO1xuICAgICAgICAgICAgfSBjYXRjaChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2V0IGFuaW1hdGVkIGF0dHJpYnV0ZSB0byBjdXJyZW50IGFuaW1hdGVkIHZhbHVlXG4gICAgICAgICAgICAgIGF0dHJpYnV0ZVByb3BlcnRpZXNbYXR0cmlidXRlXSA9IGFuaW1hdGlvbkRlZmluaXRpb24udG87XG4gICAgICAgICAgICAgIHRoaXMuYXR0cihhdHRyaWJ1dGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBhbmltYXRlIGVsZW1lbnQgYXMgaXQncyBubyBsb25nZXIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgYW5pbWF0ZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LmJpbmQodGhpcyksIHRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoZXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgYW5pbWF0ZS5fbm9kZS5hZGRFdmVudExpc3RlbmVyKCdiZWdpbkV2ZW50JywgZnVuY3Rpb24gaGFuZGxlQmVnaW5FdmVudCgpIHtcbiAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KCdhbmltYXRpb25CZWdpbicsIHtcbiAgICAgICAgICAgICAgZWxlbWVudDogdGhpcyxcbiAgICAgICAgICAgICAgYW5pbWF0ZTogYW5pbWF0ZS5fbm9kZSxcbiAgICAgICAgICAgICAgcGFyYW1zOiBhbmltYXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgYW5pbWF0ZS5fbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlbmRFdmVudCcsIGZ1bmN0aW9uIGhhbmRsZUVuZEV2ZW50KCkge1xuICAgICAgICAgIGlmKGV2ZW50RW1pdHRlcikge1xuICAgICAgICAgICAgZXZlbnRFbWl0dGVyLmVtaXQoJ2FuaW1hdGlvbkVuZCcsIHtcbiAgICAgICAgICAgICAgZWxlbWVudDogdGhpcyxcbiAgICAgICAgICAgICAgYW5pbWF0ZTogYW5pbWF0ZS5fbm9kZSxcbiAgICAgICAgICAgICAgcGFyYW1zOiBhbmltYXRpb25EZWZpbml0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihndWlkZWQpIHtcbiAgICAgICAgICAgIC8vIFNldCBhbmltYXRlZCBhdHRyaWJ1dGUgdG8gY3VycmVudCBhbmltYXRlZCB2YWx1ZVxuICAgICAgICAgICAgYXR0cmlidXRlUHJvcGVydGllc1thdHRyaWJ1dGVdID0gYW5pbWF0aW9uRGVmaW5pdGlvbi50bztcbiAgICAgICAgICAgIHRoaXMuYXR0cihhdHRyaWJ1dGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgYW5pbWF0ZSBlbGVtZW50IGFzIGl0J3Mgbm8gbG9uZ2VyIHJlcXVpcmVkXG4gICAgICAgICAgICBhbmltYXRlLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgY3VycmVudCBhdHRyaWJ1dGUgaXMgYW4gYXJyYXkgb2YgZGVmaW5pdGlvbiBvYmplY3RzIHdlIGNyZWF0ZSBhbiBhbmltYXRlIGZvciBlYWNoIGFuZCBkaXNhYmxlIGd1aWRlZCBtb2RlXG4gICAgICBpZihhbmltYXRpb25zW2F0dHJpYnV0ZV0gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICBhbmltYXRpb25zW2F0dHJpYnV0ZV0uZm9yRWFjaChmdW5jdGlvbihhbmltYXRpb25EZWZpbml0aW9uKSB7XG4gICAgICAgICAgY3JlYXRlQW5pbWF0ZS5iaW5kKHRoaXMpKGFuaW1hdGlvbkRlZmluaXRpb24sIGZhbHNlKTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWF0ZUFuaW1hdGUuYmluZCh0aGlzKShhbmltYXRpb25zW2F0dHJpYnV0ZV0sIGd1aWRlZCk7XG4gICAgICB9XG5cbiAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBDaGFydGlzdC5TdmcgPSBDaGFydGlzdC5DbGFzcy5leHRlbmQoe1xuICAgIGNvbnN0cnVjdG9yOiBTdmcsXG4gICAgYXR0cjogYXR0cixcbiAgICBlbGVtOiBlbGVtLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHJvb3Q6IHJvb3QsXG4gICAgcXVlcnlTZWxlY3RvcjogcXVlcnlTZWxlY3RvcixcbiAgICBxdWVyeVNlbGVjdG9yQWxsOiBxdWVyeVNlbGVjdG9yQWxsLFxuICAgIGdldE5vZGU6IGdldE5vZGUsXG4gICAgZm9yZWlnbk9iamVjdDogZm9yZWlnbk9iamVjdCxcbiAgICB0ZXh0OiB0ZXh0LFxuICAgIGVtcHR5OiBlbXB0eSxcbiAgICByZW1vdmU6IHJlbW92ZSxcbiAgICByZXBsYWNlOiByZXBsYWNlLFxuICAgIGFwcGVuZDogYXBwZW5kLFxuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgYWRkQ2xhc3M6IGFkZENsYXNzLFxuICAgIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcyxcbiAgICByZW1vdmVBbGxDbGFzc2VzOiByZW1vdmVBbGxDbGFzc2VzLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBhbmltYXRlOiBhbmltYXRlXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgZm9yIHN1cHBvcnQgb2YgYSBnaXZlbiBTVkcgZmVhdHVyZSBsaWtlIEV4dGVuc2liaWxpdHksIFNWRy1hbmltYXRpb24gb3IgdGhlIGxpa2UuIENoZWNrIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUgZm9yIGEgZGV0YWlsZWQgbGlzdC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge1N0cmluZ30gZmVhdHVyZSBUaGUgU1ZHIDEuMSBmZWF0dXJlIHRoYXQgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIHN1cHBvcnQuXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IFRydWUgb2YgZmFsc2UgaWYgdGhlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIG9yIG5vdFxuICAgKi9cbiAgQ2hhcnRpc3QuU3ZnLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24oZmVhdHVyZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCdodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlIycgKyBmZWF0dXJlLCAnMS4xJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoaXMgT2JqZWN0IGNvbnRhaW5zIHNvbWUgc3RhbmRhcmQgZWFzaW5nIGN1YmljIGJlemllciBjdXJ2ZXMuIFRoZW4gY2FuIGJlIHVzZWQgd2l0aCB0aGVpciBuYW1lIGluIHRoZSBgQ2hhcnRpc3QuU3ZnLmFuaW1hdGVgLiBZb3UgY2FuIGFsc28gZXh0ZW5kIHRoZSBsaXN0IGFuZCB1c2UgeW91ciBvd24gbmFtZSBpbiB0aGUgYGFuaW1hdGVgIGZ1bmN0aW9uLiBDbGljayB0aGUgc2hvdyBjb2RlIGJ1dHRvbiB0byBzZWUgdGhlIGF2YWlsYWJsZSBiZXppZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnXG4gICAqL1xuICB2YXIgZWFzaW5nQ3ViaWNCZXppZXJzID0ge1xuICAgIGVhc2VJblNpbmU6IFswLjQ3LCAwLCAwLjc0NSwgMC43MTVdLFxuICAgIGVhc2VPdXRTaW5lOiBbMC4zOSwgMC41NzUsIDAuNTY1LCAxXSxcbiAgICBlYXNlSW5PdXRTaW5lOiBbMC40NDUsIDAuMDUsIDAuNTUsIDAuOTVdLFxuICAgIGVhc2VJblF1YWQ6IFswLjU1LCAwLjA4NSwgMC42OCwgMC41M10sXG4gICAgZWFzZU91dFF1YWQ6IFswLjI1LCAwLjQ2LCAwLjQ1LCAwLjk0XSxcbiAgICBlYXNlSW5PdXRRdWFkOiBbMC40NTUsIDAuMDMsIDAuNTE1LCAwLjk1NV0sXG4gICAgZWFzZUluQ3ViaWM6IFswLjU1LCAwLjA1NSwgMC42NzUsIDAuMTldLFxuICAgIGVhc2VPdXRDdWJpYzogWzAuMjE1LCAwLjYxLCAwLjM1NSwgMV0sXG4gICAgZWFzZUluT3V0Q3ViaWM6IFswLjY0NSwgMC4wNDUsIDAuMzU1LCAxXSxcbiAgICBlYXNlSW5RdWFydDogWzAuODk1LCAwLjAzLCAwLjY4NSwgMC4yMl0sXG4gICAgZWFzZU91dFF1YXJ0OiBbMC4xNjUsIDAuODQsIDAuNDQsIDFdLFxuICAgIGVhc2VJbk91dFF1YXJ0OiBbMC43NywgMCwgMC4xNzUsIDFdLFxuICAgIGVhc2VJblF1aW50OiBbMC43NTUsIDAuMDUsIDAuODU1LCAwLjA2XSxcbiAgICBlYXNlT3V0UXVpbnQ6IFswLjIzLCAxLCAwLjMyLCAxXSxcbiAgICBlYXNlSW5PdXRRdWludDogWzAuODYsIDAsIDAuMDcsIDFdLFxuICAgIGVhc2VJbkV4cG86IFswLjk1LCAwLjA1LCAwLjc5NSwgMC4wMzVdLFxuICAgIGVhc2VPdXRFeHBvOiBbMC4xOSwgMSwgMC4yMiwgMV0sXG4gICAgZWFzZUluT3V0RXhwbzogWzEsIDAsIDAsIDFdLFxuICAgIGVhc2VJbkNpcmM6IFswLjYsIDAuMDQsIDAuOTgsIDAuMzM1XSxcbiAgICBlYXNlT3V0Q2lyYzogWzAuMDc1LCAwLjgyLCAwLjE2NSwgMV0sXG4gICAgZWFzZUluT3V0Q2lyYzogWzAuNzg1LCAwLjEzNSwgMC4xNSwgMC44Nl0sXG4gICAgZWFzZUluQmFjazogWzAuNiwgLTAuMjgsIDAuNzM1LCAwLjA0NV0sXG4gICAgZWFzZU91dEJhY2s6IFswLjE3NSwgMC44ODUsIDAuMzIsIDEuMjc1XSxcbiAgICBlYXNlSW5PdXRCYWNrOiBbMC42OCwgLTAuNTUsIDAuMjY1LCAxLjU1XVxuICB9O1xuXG4gIENoYXJ0aXN0LlN2Zy5FYXNpbmcgPSBlYXNpbmdDdWJpY0JlemllcnM7XG5cbiAgLyoqXG4gICAqIFRoaXMgaGVscGVyIGNsYXNzIGlzIHRvIHdyYXAgbXVsdGlwbGUgYENoYXJ0aXN0LlN2Z2AgZWxlbWVudHMgaW50byBhIGxpc3Qgd2hlcmUgeW91IGNhbiBjYWxsIHRoZSBgQ2hhcnRpc3QuU3ZnYCBmdW5jdGlvbnMgb24gYWxsIGVsZW1lbnRzIGluIHRoZSBsaXN0IHdpdGggb25lIGNhbGwuIFRoaXMgaXMgaGVscGZ1bCB3aGVuIHlvdSdkIGxpa2UgdG8gcGVyZm9ybSBjYWxscyB3aXRoIGBDaGFydGlzdC5TdmdgIG9uIG11bHRpcGxlIGVsZW1lbnRzLlxuICAgKiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGlzIGFsc28gcmV0dXJuZWQgYnkgYENoYXJ0aXN0LlN2Zy5xdWVyeVNlbGVjdG9yQWxsYC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Z1xuICAgKiBAcGFyYW0ge0FycmF5PE5vZGU+fE5vZGVMaXN0fSBub2RlTGlzdCBBbiBBcnJheSBvZiBTVkcgRE9NIG5vZGVzIG9yIGEgU1ZHIERPTSBOb2RlTGlzdCAoYXMgcmV0dXJuZWQgYnkgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbClcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBmdW5jdGlvbiBTdmdMaXN0KG5vZGVMaXN0KSB7XG4gICAgdmFyIGxpc3QgPSB0aGlzO1xuXG4gICAgdGhpcy5zdmdFbGVtZW50cyA9IFtdO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5zdmdFbGVtZW50cy5wdXNoKG5ldyBDaGFydGlzdC5Tdmcobm9kZUxpc3RbaV0pKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZGVsZWdhdGlvbiBtZXRob2RzIGZvciBDaGFydGlzdC5TdmdcbiAgICBPYmplY3Qua2V5cyhDaGFydGlzdC5TdmcucHJvdG90eXBlKS5maWx0ZXIoZnVuY3Rpb24ocHJvdG90eXBlUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBbJ2NvbnN0cnVjdG9yJyxcbiAgICAgICAgICAncGFyZW50JyxcbiAgICAgICAgICAncXVlcnlTZWxlY3RvcicsXG4gICAgICAgICAgJ3F1ZXJ5U2VsZWN0b3JBbGwnLFxuICAgICAgICAgICdyZXBsYWNlJyxcbiAgICAgICAgICAnYXBwZW5kJyxcbiAgICAgICAgICAnY2xhc3NlcycsXG4gICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgJ3dpZHRoJ10uaW5kZXhPZihwcm90b3R5cGVQcm9wZXJ0eSkgPT09IC0xO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24ocHJvdG90eXBlUHJvcGVydHkpIHtcbiAgICAgIGxpc3RbcHJvdG90eXBlUHJvcGVydHldID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgICAgbGlzdC5zdmdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICBDaGFydGlzdC5TdmcucHJvdG90eXBlW3Byb3RvdHlwZVByb3BlcnR5XS5hcHBseShlbGVtZW50LCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIENoYXJ0aXN0LlN2Zy5MaXN0ID0gQ2hhcnRpc3QuQ2xhc3MuZXh0ZW5kKHtcbiAgICBjb25zdHJ1Y3RvcjogU3ZnTGlzdFxuICB9KTtcbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBDaGFydGlzdCBTVkcgcGF0aCBtb2R1bGUgZm9yIFNWRyBwYXRoIGRlc2NyaXB0aW9uIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24uXG4gKlxuICogQG1vZHVsZSBDaGFydGlzdC5TdmcuUGF0aFxuICovXG4vKiBnbG9iYWwgQ2hhcnRpc3QgKi9cbihmdW5jdGlvbihnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5zIHRoZSBkZXNjcmlwdG9ycyBvZiBzdXBwb3J0ZWQgZWxlbWVudCB0eXBlcyBpbiBhIFNWRyBwYXRoLiBDdXJyZW50bHkgb25seSBtb3ZlLCBsaW5lIGFuZCBjdXJ2ZSBhcmUgc3VwcG9ydGVkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG4gIHZhciBlbGVtZW50RGVzY3JpcHRpb25zID0ge1xuICAgIG06IFsneCcsICd5J10sXG4gICAgbDogWyd4JywgJ3knXSxcbiAgICBjOiBbJ3gxJywgJ3kxJywgJ3gyJywgJ3kyJywgJ3gnLCAneSddLFxuICAgIGE6IFsncngnLCAncnknLCAneEFyJywgJ2xBZicsICdzZicsICd4JywgJ3knXVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IG9wdGlvbnMgZm9yIG5ld2x5IGNyZWF0ZWQgU1ZHIHBhdGggb2JqZWN0cy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Zy5QYXRoXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgLy8gVGhlIGFjY3VyYWN5IGluIGRpZ2l0IGNvdW50IGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LiBUaGlzIHdpbGwgYmUgdXNlZCB0byByb3VuZCBudW1iZXJzIGluIHRoZSBTVkcgcGF0aC4gSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIGZhbHNlIHRoZW4gbm8gcm91bmRpbmcgd2lsbCBiZSBwZXJmb3JtZWQuXG4gICAgYWNjdXJhY3k6IDNcbiAgfTtcblxuICBmdW5jdGlvbiBlbGVtZW50KGNvbW1hbmQsIHBhcmFtcywgcGF0aEVsZW1lbnRzLCBwb3MsIHJlbGF0aXZlLCBkYXRhKSB7XG4gICAgdmFyIHBhdGhFbGVtZW50ID0gQ2hhcnRpc3QuZXh0ZW5kKHtcbiAgICAgIGNvbW1hbmQ6IHJlbGF0aXZlID8gY29tbWFuZC50b0xvd2VyQ2FzZSgpIDogY29tbWFuZC50b1VwcGVyQ2FzZSgpXG4gICAgfSwgcGFyYW1zLCBkYXRhID8geyBkYXRhOiBkYXRhIH0gOiB7fSApO1xuXG4gICAgcGF0aEVsZW1lbnRzLnNwbGljZShwb3MsIDAsIHBhdGhFbGVtZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvckVhY2hQYXJhbShwYXRoRWxlbWVudHMsIGNiKSB7XG4gICAgcGF0aEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24ocGF0aEVsZW1lbnQsIHBhdGhFbGVtZW50SW5kZXgpIHtcbiAgICAgIGVsZW1lbnREZXNjcmlwdGlvbnNbcGF0aEVsZW1lbnQuY29tbWFuZC50b0xvd2VyQ2FzZSgpXS5mb3JFYWNoKGZ1bmN0aW9uKHBhcmFtTmFtZSwgcGFyYW1JbmRleCkge1xuICAgICAgICBjYihwYXRoRWxlbWVudCwgcGFyYW1OYW1lLCBwYXRoRWxlbWVudEluZGV4LCBwYXJhbUluZGV4LCBwYXRoRWxlbWVudHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBjb25zdHJ1Y3QgYSBuZXcgcGF0aCBvYmplY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmcuUGF0aFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNsb3NlIElmIHNldCB0byB0cnVlIHRoZW4gdGhpcyBwYXRoIHdpbGwgYmUgY2xvc2VkIHdoZW4gc3RyaW5naWZpZWQgKHdpdGggYSBaIGF0IHRoZSBlbmQpXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0IHRoYXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9iamVjdHMuIFNlZSBkZWZhdWx0IG9wdGlvbnMgZm9yIG1vcmUgZGV0YWlscy5cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBmdW5jdGlvbiBTdmdQYXRoKGNsb3NlLCBvcHRpb25zKSB7XG4gICAgdGhpcy5wYXRoRWxlbWVudHMgPSBbXTtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy5jbG9zZSA9IGNsb3NlO1xuICAgIHRoaXMub3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgY3VycmVudCBwb3NpdGlvbiAoY3Vyc29yKSBpbnNpZGUgb2YgdGhlIHBhdGguIFlvdSBjYW4gbW92ZSBhcm91bmQgdGhlIGN1cnNvciBmcmVlbHkgYnV0IGxpbWl0ZWQgdG8gMCBvciB0aGUgY291bnQgb2YgZXhpc3RpbmcgZWxlbWVudHMuIEFsbCBtb2RpZmljYXRpb25zIHdpdGggZWxlbWVudCBmdW5jdGlvbnMgd2lsbCBpbnNlcnQgbmV3IGVsZW1lbnRzIGF0IHRoZSBwb3NpdGlvbiBvZiB0aGlzIGN1cnNvci5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Zy5QYXRoXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zXSBJZiBhIG51bWJlciBpcyBwYXNzZWQgdGhlbiB0aGUgY3Vyc29yIGlzIHNldCB0byB0aGlzIHBvc2l0aW9uIGluIHRoZSBwYXRoIGVsZW1lbnQgYXJyYXkuXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofE51bWJlcn0gSWYgdGhlIHBvc2l0aW9uIHBhcmFtZXRlciB3YXMgcGFzc2VkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBwYXRoIG9iamVjdCBmb3IgZWFzeSBjYWxsIGNoYWluaW5nLiBJZiBubyBwb3NpdGlvbiBwYXJhbWV0ZXIgd2FzIHBhc3NlZCB0aGVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIHJldHVybmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gcG9zaXRpb24ocG9zKSB7XG4gICAgaWYocG9zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucG9zID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5wYXRoRWxlbWVudHMubGVuZ3RoLCBwb3MpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3M7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudHMgZnJvbSB0aGUgcGF0aCBzdGFydGluZyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Zy5QYXRoXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgcGF0aCBlbGVtZW50cyB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofSBUaGUgY3VycmVudCBwYXRoIG9iamVjdCBmb3IgZWFzeSBjYWxsIGNoYWluaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlKGNvdW50KSB7XG4gICAgdGhpcy5wYXRoRWxlbWVudHMuc3BsaWNlKHRoaXMucG9zLCBjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gYWRkIGEgbmV3IG1vdmUgU1ZHIHBhdGggZWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Zy5QYXRoXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4IFRoZSB4IGNvb3JkaW5hdGUgZm9yIHRoZSBtb3ZlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB5IFRoZSB5IGNvb3JkaW5hdGUgZm9yIHRoZSBtb3ZlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JlbGF0aXZlXSBJZiBzZXQgdG8gdHJ1ZSB0aGUgbW92ZSBlbGVtZW50IHdpbGwgYmUgY3JlYXRlZCB3aXRoIHJlbGF0aXZlIGNvb3JkaW5hdGVzIChsb3dlcmNhc2UgbGV0dGVyKVxuICAgKiBAcGFyYW0geyp9IFtkYXRhXSBBbnkgZGF0YSB0aGF0IHNob3VsZCBiZSBzdG9yZWQgd2l0aCB0aGUgZWxlbWVudCBvYmplY3QgdGhhdCB3aWxsIGJlIGFjY2Vzc2libGUgaW4gcGF0aEVsZW1lbnRcbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnLlBhdGh9IFRoZSBjdXJyZW50IHBhdGggb2JqZWN0IGZvciBlYXN5IGNhbGwgY2hhaW5pbmcuXG4gICAqL1xuICBmdW5jdGlvbiBtb3ZlKHgsIHksIHJlbGF0aXZlLCBkYXRhKSB7XG4gICAgZWxlbWVudCgnTScsIHtcbiAgICAgIHg6ICt4LFxuICAgICAgeTogK3lcbiAgICB9LCB0aGlzLnBhdGhFbGVtZW50cywgdGhpcy5wb3MrKywgcmVsYXRpdmUsIGRhdGEpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGFkZCBhIG5ldyBsaW5lIFNWRyBwYXRoIGVsZW1lbnQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmcuUGF0aFxuICAgKiBAcGFyYW0ge051bWJlcn0geCBUaGUgeCBjb29yZGluYXRlIGZvciB0aGUgbGluZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge051bWJlcn0geSBUaGUgeSBjb29yZGluYXRlIGZvciB0aGUgbGluZSBlbGVtZW50LlxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtyZWxhdGl2ZV0gSWYgc2V0IHRvIHRydWUgdGhlIGxpbmUgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCByZWxhdGl2ZSBjb29yZGluYXRlcyAobG93ZXJjYXNlIGxldHRlcilcbiAgICogQHBhcmFtIHsqfSBbZGF0YV0gQW55IGRhdGEgdGhhdCBzaG91bGQgYmUgc3RvcmVkIHdpdGggdGhlIGVsZW1lbnQgb2JqZWN0IHRoYXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHBhdGhFbGVtZW50XG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofSBUaGUgY3VycmVudCBwYXRoIG9iamVjdCBmb3IgZWFzeSBjYWxsIGNoYWluaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gbGluZSh4LCB5LCByZWxhdGl2ZSwgZGF0YSkge1xuICAgIGVsZW1lbnQoJ0wnLCB7XG4gICAgICB4OiAreCxcbiAgICAgIHk6ICt5XG4gICAgfSwgdGhpcy5wYXRoRWxlbWVudHMsIHRoaXMucG9zKyssIHJlbGF0aXZlLCBkYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBhZGQgYSBuZXcgY3VydmUgU1ZHIHBhdGggZWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LlN2Zy5QYXRoXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4MSBUaGUgeCBjb29yZGluYXRlIGZvciB0aGUgZmlyc3QgY29udHJvbCBwb2ludCBvZiB0aGUgYmV6aWVyIGN1cnZlLlxuICAgKiBAcGFyYW0ge051bWJlcn0geTEgVGhlIHkgY29vcmRpbmF0ZSBmb3IgdGhlIGZpcnN0IGNvbnRyb2wgcG9pbnQgb2YgdGhlIGJlemllciBjdXJ2ZS5cbiAgICogQHBhcmFtIHtOdW1iZXJ9IHgyIFRoZSB4IGNvb3JkaW5hdGUgZm9yIHRoZSBzZWNvbmQgY29udHJvbCBwb2ludCBvZiB0aGUgYmV6aWVyIGN1cnZlLlxuICAgKiBAcGFyYW0ge051bWJlcn0geTIgVGhlIHkgY29vcmRpbmF0ZSBmb3IgdGhlIHNlY29uZCBjb250cm9sIHBvaW50IG9mIHRoZSBiZXppZXIgY3VydmUuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4IFRoZSB4IGNvb3JkaW5hdGUgZm9yIHRoZSB0YXJnZXQgcG9pbnQgb2YgdGhlIGN1cnZlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB5IFRoZSB5IGNvb3JkaW5hdGUgZm9yIHRoZSB0YXJnZXQgcG9pbnQgb2YgdGhlIGN1cnZlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JlbGF0aXZlXSBJZiBzZXQgdG8gdHJ1ZSB0aGUgY3VydmUgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCByZWxhdGl2ZSBjb29yZGluYXRlcyAobG93ZXJjYXNlIGxldHRlcilcbiAgICogQHBhcmFtIHsqfSBbZGF0YV0gQW55IGRhdGEgdGhhdCBzaG91bGQgYmUgc3RvcmVkIHdpdGggdGhlIGVsZW1lbnQgb2JqZWN0IHRoYXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHBhdGhFbGVtZW50XG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofSBUaGUgY3VycmVudCBwYXRoIG9iamVjdCBmb3IgZWFzeSBjYWxsIGNoYWluaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gY3VydmUoeDEsIHkxLCB4MiwgeTIsIHgsIHksIHJlbGF0aXZlLCBkYXRhKSB7XG4gICAgZWxlbWVudCgnQycsIHtcbiAgICAgIHgxOiAreDEsXG4gICAgICB5MTogK3kxLFxuICAgICAgeDI6ICt4MixcbiAgICAgIHkyOiAreTIsXG4gICAgICB4OiAreCxcbiAgICAgIHk6ICt5XG4gICAgfSwgdGhpcy5wYXRoRWxlbWVudHMsIHRoaXMucG9zKyssIHJlbGF0aXZlLCBkYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBhZGQgYSBuZXcgbm9uLWJlemllciBjdXJ2ZSBTVkcgcGF0aCBlbGVtZW50LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHJ4IFRoZSByYWRpdXMgdG8gYmUgdXNlZCBmb3IgdGhlIHgtYXhpcyBvZiB0aGUgYXJjLlxuICAgKiBAcGFyYW0ge051bWJlcn0gcnkgVGhlIHJhZGl1cyB0byBiZSB1c2VkIGZvciB0aGUgeS1heGlzIG9mIHRoZSBhcmMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4QXIgRGVmaW5lcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIGFyY1xuICAgKiBAcGFyYW0ge051bWJlcn0gbEFmIExhcmdlIGFyYyBmbGFnXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBzZiBTd2VlcCBmbGFnXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB4IFRoZSB4IGNvb3JkaW5hdGUgZm9yIHRoZSB0YXJnZXQgcG9pbnQgb2YgdGhlIGN1cnZlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB5IFRoZSB5IGNvb3JkaW5hdGUgZm9yIHRoZSB0YXJnZXQgcG9pbnQgb2YgdGhlIGN1cnZlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3JlbGF0aXZlXSBJZiBzZXQgdG8gdHJ1ZSB0aGUgY3VydmUgZWxlbWVudCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCByZWxhdGl2ZSBjb29yZGluYXRlcyAobG93ZXJjYXNlIGxldHRlcilcbiAgICogQHBhcmFtIHsqfSBbZGF0YV0gQW55IGRhdGEgdGhhdCBzaG91bGQgYmUgc3RvcmVkIHdpdGggdGhlIGVsZW1lbnQgb2JqZWN0IHRoYXQgd2lsbCBiZSBhY2Nlc3NpYmxlIGluIHBhdGhFbGVtZW50XG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofSBUaGUgY3VycmVudCBwYXRoIG9iamVjdCBmb3IgZWFzeSBjYWxsIGNoYWluaW5nLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJjKHJ4LCByeSwgeEFyLCBsQWYsIHNmLCB4LCB5LCByZWxhdGl2ZSwgZGF0YSkge1xuICAgIGVsZW1lbnQoJ0EnLCB7XG4gICAgICByeDogK3J4LFxuICAgICAgcnk6ICtyeSxcbiAgICAgIHhBcjogK3hBcixcbiAgICAgIGxBZjogK2xBZixcbiAgICAgIHNmOiArc2YsXG4gICAgICB4OiAreCxcbiAgICAgIHk6ICt5XG4gICAgfSwgdGhpcy5wYXRoRWxlbWVudHMsIHRoaXMucG9zKyssIHJlbGF0aXZlLCBkYXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYW4gU1ZHIHBhdGggc2VlbiBpbiB0aGUgZCBhdHRyaWJ1dGUgb2YgcGF0aCBlbGVtZW50cywgYW5kIGluc2VydHMgdGhlIHBhcnNlZCBlbGVtZW50cyBpbnRvIHRoZSBleGlzdGluZyBwYXRoIG9iamVjdCBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uIEFueSBjbG9zaW5nIHBhdGggaW5kaWNhdG9ycyAoWiBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoKSB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIHBhcnNlciBhcyB0aGlzIGlzIHByb3ZpZGVkIGJ5IHRoZSBjbG9zZSBvcHRpb24gaW4gdGhlIG9wdGlvbnMgb2YgdGhlIHBhdGggb2JqZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhdGggQW55IFNWRyBwYXRoIHRoYXQgY29udGFpbnMgbW92ZSAobSksIGxpbmUgKGwpIG9yIGN1cnZlIChjKSBjb21wb25lbnRzLlxuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5TdmcuUGF0aH0gVGhlIGN1cnJlbnQgcGF0aCBvYmplY3QgZm9yIGVhc3kgY2FsbCBjaGFpbmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlKHBhdGgpIHtcbiAgICAvLyBQYXJzaW5nIHRoZSBTVkcgcGF0aCBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBhcnJheXMgW1snTScsICcxMCcsICcxMCddLCBbJ0wnLCAnMTAwJywgJzEwMCddXVxuICAgIHZhciBjaHVua3MgPSBwYXRoLnJlcGxhY2UoLyhbQS1aYS16XSkoWzAtOV0pL2csICckMSAkMicpXG4gICAgICAucmVwbGFjZSgvKFswLTldKShbQS1aYS16XSkvZywgJyQxICQyJylcbiAgICAgIC5zcGxpdCgvW1xccyxdKy8pXG4gICAgICAucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgZWxlbWVudCkge1xuICAgICAgICBpZihlbGVtZW50Lm1hdGNoKC9bQS1aYS16XS8pKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwgW10pO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIGNsb3NlZCBwYXRoIHdlIHJlbW92ZSB0aGUgWiBhdCB0aGUgZW5kIGJlY2F1c2UgdGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjbG9zZSBvcHRpb25cbiAgICBpZihjaHVua3NbY2h1bmtzLmxlbmd0aCAtIDFdWzBdLnRvVXBwZXJDYXNlKCkgPT09ICdaJykge1xuICAgICAgY2h1bmtzLnBvcCgpO1xuICAgIH1cblxuICAgIC8vIFVzaW5nIHN2Z1BhdGhFbGVtZW50RGVzY3JpcHRpb25zIHRvIG1hcCByYXcgcGF0aCBhcnJheXMgaW50byBvYmplY3RzIHRoYXQgY29udGFpbiB0aGUgY29tbWFuZCBhbmQgdGhlIHBhcmFtZXRlcnNcbiAgICAvLyBGb3IgZXhhbXBsZSB7Y29tbWFuZDogJ00nLCB4OiAnMTAnLCB5OiAnMTAnfVxuICAgIHZhciBlbGVtZW50cyA9IGNodW5rcy5tYXAoZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgdmFyIGNvbW1hbmQgPSBjaHVuay5zaGlmdCgpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uID0gZWxlbWVudERlc2NyaXB0aW9uc1tjb21tYW5kLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIHJldHVybiBDaGFydGlzdC5leHRlbmQoe1xuICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmRcbiAgICAgICAgfSwgZGVzY3JpcHRpb24ucmVkdWNlKGZ1bmN0aW9uKHJlc3VsdCwgcGFyYW1OYW1lLCBpbmRleCkge1xuICAgICAgICAgIHJlc3VsdFtwYXJhbU5hbWVdID0gK2NodW5rW2luZGV4XTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCB7fSkpO1xuICAgICAgfSk7XG5cbiAgICAvLyBQcmVwYXJpbmcgYSBzcGxpY2UgY2FsbCB3aXRoIHRoZSBlbGVtZW50cyBhcnJheSBhcyB2YXIgYXJnIHBhcmFtcyBhbmQgaW5zZXJ0IHRoZSBwYXJzZWQgZWxlbWVudHMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb25cbiAgICB2YXIgc3BsaWNlQXJncyA9IFt0aGlzLnBvcywgMF07XG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoc3BsaWNlQXJncywgZWxlbWVudHMpO1xuICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkodGhpcy5wYXRoRWxlbWVudHMsIHNwbGljZUFyZ3MpO1xuICAgIC8vIEluY3JlYXNlIHRoZSBpbnRlcm5hbCBwb3NpdGlvbiBieSB0aGUgZWxlbWVudCBjb3VudFxuICAgIHRoaXMucG9zICs9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0byBjdXJyZW50IFNWRyBwYXRoIG9iamVjdCBpbnRvIGEgZmluYWwgU1ZHIHN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBkIGF0dHJpYnV0ZSBvZiBTVkcgcGF0aCBlbGVtZW50cy4gSXQgdXNlcyB0aGUgYWNjdXJhY3kgb3B0aW9uIHRvIHJvdW5kIGJpZyBkZWNpbWFscy4gSWYgdGhlIGNsb3NlIHBhcmFtZXRlciB3YXMgc2V0IGluIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIHBhdGggb2JqZWN0IHRoZW4gYSBwYXRoIGNsb3NpbmcgWiB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBvdXRwdXQgc3RyaW5nLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHJldHVybiB7U3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5naWZ5KCkge1xuICAgIHZhciBhY2N1cmFjeU11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgdGhpcy5vcHRpb25zLmFjY3VyYWN5KTtcblxuICAgIHJldHVybiB0aGlzLnBhdGhFbGVtZW50cy5yZWR1Y2UoZnVuY3Rpb24ocGF0aCwgcGF0aEVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IGVsZW1lbnREZXNjcmlwdGlvbnNbcGF0aEVsZW1lbnQuY29tbWFuZC50b0xvd2VyQ2FzZSgpXS5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5hY2N1cmFjeSA/XG4gICAgICAgICAgICAoTWF0aC5yb3VuZChwYXRoRWxlbWVudFtwYXJhbU5hbWVdICogYWNjdXJhY3lNdWx0aXBsaWVyKSAvIGFjY3VyYWN5TXVsdGlwbGllcikgOlxuICAgICAgICAgICAgcGF0aEVsZW1lbnRbcGFyYW1OYW1lXTtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICByZXR1cm4gcGF0aCArIHBhdGhFbGVtZW50LmNvbW1hbmQgKyBwYXJhbXMuam9pbignLCcpO1xuICAgICAgfS5iaW5kKHRoaXMpLCAnJykgKyAodGhpcy5jbG9zZSA/ICdaJyA6ICcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FsZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IFNWRyBwYXRoIG9iamVjdC4gVGhlcmUgaXMgYW4gaW5kaXZpZHVhbCBwYXJhbWV0ZXIgZm9yIGVhY2ggY29vcmRpbmF0ZS4gU2NhbGluZyB3aWxsIGFsc28gYmUgZG9uZSBmb3IgY29udHJvbCBwb2ludHMgb2YgY3VydmVzLCBhZmZlY3RpbmcgdGhlIGdpdmVuIGNvb3JkaW5hdGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5TdmcuUGF0aFxuICAgKiBAcGFyYW0ge051bWJlcn0geCBUaGUgbnVtYmVyIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBzY2FsZSB0aGUgeCwgeDEgYW5kIHgyIG9mIGFsbCBwYXRoIGVsZW1lbnRzLlxuICAgKiBAcGFyYW0ge051bWJlcn0geSBUaGUgbnVtYmVyIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBzY2FsZSB0aGUgeSwgeTEgYW5kIHkyIG9mIGFsbCBwYXRoIGVsZW1lbnRzLlxuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5TdmcuUGF0aH0gVGhlIGN1cnJlbnQgcGF0aCBvYmplY3QgZm9yIGVhc3kgY2FsbCBjaGFpbmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIHNjYWxlKHgsIHkpIHtcbiAgICBmb3JFYWNoUGFyYW0odGhpcy5wYXRoRWxlbWVudHMsIGZ1bmN0aW9uKHBhdGhFbGVtZW50LCBwYXJhbU5hbWUpIHtcbiAgICAgIHBhdGhFbGVtZW50W3BhcmFtTmFtZV0gKj0gcGFyYW1OYW1lWzBdID09PSAneCcgPyB4IDogeTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIGFsbCBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBTVkcgcGF0aCBvYmplY3QuIFRoZSB0cmFuc2xhdGlvbiBpcyByZWxhdGl2ZSBhbmQgdGhlcmUgaXMgYW4gaW5kaXZpZHVhbCBwYXJhbWV0ZXIgZm9yIGVhY2ggY29vcmRpbmF0ZS4gVHJhbnNsYXRpb24gd2lsbCBhbHNvIGJlIGRvbmUgZm9yIGNvbnRyb2wgcG9pbnRzIG9mIGN1cnZlcywgYWZmZWN0aW5nIHRoZSBnaXZlbiBjb29yZGluYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHggVGhlIG51bWJlciB3aGljaCB3aWxsIGJlIHVzZWQgdG8gdHJhbnNsYXRlIHRoZSB4LCB4MSBhbmQgeDIgb2YgYWxsIHBhdGggZWxlbWVudHMuXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB5IFRoZSBudW1iZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHRyYW5zbGF0ZSB0aGUgeSwgeTEgYW5kIHkyIG9mIGFsbCBwYXRoIGVsZW1lbnRzLlxuICAgKiBAcmV0dXJuIHtDaGFydGlzdC5TdmcuUGF0aH0gVGhlIGN1cnJlbnQgcGF0aCBvYmplY3QgZm9yIGVhc3kgY2FsbCBjaGFpbmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4LCB5KSB7XG4gICAgZm9yRWFjaFBhcmFtKHRoaXMucGF0aEVsZW1lbnRzLCBmdW5jdGlvbihwYXRoRWxlbWVudCwgcGFyYW1OYW1lKSB7XG4gICAgICBwYXRoRWxlbWVudFtwYXJhbU5hbWVdICs9IHBhcmFtTmFtZVswXSA9PT0gJ3gnID8geCA6IHk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJ1biBvdmVyIGFsbCBleGlzdGluZyBwYXRoIGVsZW1lbnRzIGFuZCB0aGVuIGxvb3Agb3ZlciB0aGVpciBhdHRyaWJ1dGVzLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHBhdGggZWxlbWVudCBhdHRyaWJ1dGUgdGhhdCBleGlzdHMgaW4gdGhlIGN1cnJlbnQgcGF0aC5cbiAgICogVGhlIG1ldGhvZCBzaWduYXR1cmUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGxvb2tzIGxpa2UgdGhpczpcbiAgICogYGBgamF2YXNjcmlwdFxuICAgKiBmdW5jdGlvbihwYXRoRWxlbWVudCwgcGFyYW1OYW1lLCBwYXRoRWxlbWVudEluZGV4LCBwYXJhbUluZGV4LCBwYXRoRWxlbWVudHMpXG4gICAqIGBgYFxuICAgKiBJZiBzb21ldGhpbmcgZWxzZSB0aGFuIHVuZGVmaW5lZCBpcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkIHRvIHJlcGxhY2UgdGhlIG9sZCB2YWx1ZS4gVGhpcyBhbGxvd3MgeW91IHRvIGJ1aWxkIGN1c3RvbSB0cmFuc2Zvcm1hdGlvbnMgb2YgcGF0aCBvYmplY3RzIHRoYXQgY2FuJ3QgYmUgYWNoaWV2ZWQgdXNpbmcgdGhlIGJhc2ljIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9ucyBzY2FsZSBhbmQgdHJhbnNsYXRlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtRm5jIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIHRyYW5zZm9ybWF0aW9uLiBDaGVjayB0aGUgc2lnbmF0dXJlIGluIHRoZSBmdW5jdGlvbiBkZXNjcmlwdGlvbi5cbiAgICogQHJldHVybiB7Q2hhcnRpc3QuU3ZnLlBhdGh9IFRoZSBjdXJyZW50IHBhdGggb2JqZWN0IGZvciBlYXN5IGNhbGwgY2hhaW5pbmcuXG4gICAqL1xuICBmdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtRm5jKSB7XG4gICAgZm9yRWFjaFBhcmFtKHRoaXMucGF0aEVsZW1lbnRzLCBmdW5jdGlvbihwYXRoRWxlbWVudCwgcGFyYW1OYW1lLCBwYXRoRWxlbWVudEluZGV4LCBwYXJhbUluZGV4LCBwYXRoRWxlbWVudHMpIHtcbiAgICAgIHZhciB0cmFuc2Zvcm1lZCA9IHRyYW5zZm9ybUZuYyhwYXRoRWxlbWVudCwgcGFyYW1OYW1lLCBwYXRoRWxlbWVudEluZGV4LCBwYXJhbUluZGV4LCBwYXRoRWxlbWVudHMpO1xuICAgICAgaWYodHJhbnNmb3JtZWQgfHwgdHJhbnNmb3JtZWQgPT09IDApIHtcbiAgICAgICAgcGF0aEVsZW1lbnRbcGFyYW1OYW1lXSA9IHRyYW5zZm9ybWVkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2xvbmVzIGEgd2hvbGUgcGF0aCBvYmplY3Qgd2l0aCBhbGwgaXRzIHByb3BlcnRpZXMuIFRoaXMgaXMgYSBkZWVwIGNsb25lIGFuZCBwYXRoIGVsZW1lbnQgb2JqZWN0cyB3aWxsIGFsc28gYmUgY2xvbmVkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtCb29sZWFufSBbY2xvc2VdIE9wdGlvbmFsIG9wdGlvbiB0byBzZXQgdGhlIG5ldyBjbG9uZWQgcGF0aCB0byBjbG9zZWQuIElmIG5vdCBzcGVjaWZpZWQgb3IgZmFsc2UsIHRoZSBvcmlnaW5hbCBwYXRoIGNsb3NlIG9wdGlvbiB3aWxsIGJlIHVzZWQuXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofVxuICAgKi9cbiAgZnVuY3Rpb24gY2xvbmUoY2xvc2UpIHtcbiAgICB2YXIgYyA9IG5ldyBDaGFydGlzdC5TdmcuUGF0aChjbG9zZSB8fCB0aGlzLmNsb3NlKTtcbiAgICBjLnBvcyA9IHRoaXMucG9zO1xuICAgIGMucGF0aEVsZW1lbnRzID0gdGhpcy5wYXRoRWxlbWVudHMuc2xpY2UoKS5tYXAoZnVuY3Rpb24gY2xvbmVFbGVtZW50cyhwYXRoRWxlbWVudCkge1xuICAgICAgcmV0dXJuIENoYXJ0aXN0LmV4dGVuZCh7fSwgcGF0aEVsZW1lbnQpO1xuICAgIH0pO1xuICAgIGMub3B0aW9ucyA9IENoYXJ0aXN0LmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zKTtcbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdCBhIFN2Zy5QYXRoIG9iamVjdCBieSBhIHNwZWNpZmljIGNvbW1hbmQgaW4gdGhlIHBhdGggY2hhaW4uIFRoZSBwYXRoIGNoYWluIHdpbGwgYmUgc3BsaXQgYW5kIGFuIGFycmF5IG9mIG5ld2x5IGNyZWF0ZWQgcGF0aHMgb2JqZWN0cyB3aWxsIGJlIHJldHVybmVkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UnZCBsaWtlIHRvIHNwbGl0IGFuIFNWRyBwYXRoIGJ5IGl0J3MgbW92ZSBjb21tYW5kcywgZm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIGlzb2xhdGUgY2h1bmtzIG9mIGRyYXdpbmdzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNvbW1hbmQgVGhlIGNvbW1hbmQgeW91J2QgbGlrZSB0byB1c2UgdG8gc3BsaXQgdGhlIHBhdGhcbiAgICogQHJldHVybiB7QXJyYXk8Q2hhcnRpc3QuU3ZnLlBhdGg+fVxuICAgKi9cbiAgZnVuY3Rpb24gc3BsaXRCeUNvbW1hbmQoY29tbWFuZCkge1xuICAgIHZhciBzcGxpdCA9IFtcbiAgICAgIG5ldyBDaGFydGlzdC5TdmcuUGF0aCgpXG4gICAgXTtcblxuICAgIHRoaXMucGF0aEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24ocGF0aEVsZW1lbnQpIHtcbiAgICAgIGlmKHBhdGhFbGVtZW50LmNvbW1hbmQgPT09IGNvbW1hbmQudG9VcHBlckNhc2UoKSAmJiBzcGxpdFtzcGxpdC5sZW5ndGggLSAxXS5wYXRoRWxlbWVudHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHNwbGl0LnB1c2gobmV3IENoYXJ0aXN0LlN2Zy5QYXRoKCkpO1xuICAgICAgfVxuXG4gICAgICBzcGxpdFtzcGxpdC5sZW5ndGggLSAxXS5wYXRoRWxlbWVudHMucHVzaChwYXRoRWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3BsaXQ7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzdGF0aWMgZnVuY3Rpb24gb24gYENoYXJ0aXN0LlN2Zy5QYXRoYCBpcyBqb2luaW5nIG11bHRpcGxlIHBhdGhzIHRvZ2V0aGVyIGludG8gb25lIHBhdGhzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuU3ZnLlBhdGhcbiAgICogQHBhcmFtIHtBcnJheTxDaGFydGlzdC5TdmcuUGF0aD59IHBhdGhzIEEgbGlzdCBvZiBwYXRocyB0byBiZSBqb2luZWQgdG9nZXRoZXIuIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xvc2UgSWYgdGhlIG5ld2x5IGNyZWF0ZWQgcGF0aCBzaG91bGQgYmUgYSBjbG9zZWQgcGF0aFxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBQYXRoIG9wdGlvbnMgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHBhdGguXG4gICAqIEByZXR1cm4ge0NoYXJ0aXN0LlN2Zy5QYXRofVxuICAgKi9cblxuICBmdW5jdGlvbiBqb2luKHBhdGhzLCBjbG9zZSwgb3B0aW9ucykge1xuICAgIHZhciBqb2luZWRQYXRoID0gbmV3IENoYXJ0aXN0LlN2Zy5QYXRoKGNsb3NlLCBvcHRpb25zKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYXRoID0gcGF0aHNbaV07XG4gICAgICBmb3IodmFyIGogPSAwOyBqIDwgcGF0aC5wYXRoRWxlbWVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgam9pbmVkUGF0aC5wYXRoRWxlbWVudHMucHVzaChwYXRoLnBhdGhFbGVtZW50c1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqb2luZWRQYXRoO1xuICB9XG5cbiAgQ2hhcnRpc3QuU3ZnLlBhdGggPSBDaGFydGlzdC5DbGFzcy5leHRlbmQoe1xuICAgIGNvbnN0cnVjdG9yOiBTdmdQYXRoLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICByZW1vdmU6IHJlbW92ZSxcbiAgICBtb3ZlOiBtb3ZlLFxuICAgIGxpbmU6IGxpbmUsXG4gICAgY3VydmU6IGN1cnZlLFxuICAgIGFyYzogYXJjLFxuICAgIHNjYWxlOiBzY2FsZSxcbiAgICB0cmFuc2xhdGU6IHRyYW5zbGF0ZSxcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybSxcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnksXG4gICAgY2xvbmU6IGNsb25lLFxuICAgIHNwbGl0QnlDb21tYW5kOiBzcGxpdEJ5Q29tbWFuZFxuICB9KTtcblxuICBDaGFydGlzdC5TdmcuUGF0aC5lbGVtZW50RGVzY3JpcHRpb25zID0gZWxlbWVudERlc2NyaXB0aW9ucztcbiAgQ2hhcnRpc3QuU3ZnLlBhdGguam9pbiA9IGpvaW47XG59KHRoaXMgfHwgZ2xvYmFsLCBDaGFydGlzdCkpO1xuOy8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uIChnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIHZhciBheGlzVW5pdHMgPSB7XG4gICAgeDoge1xuICAgICAgcG9zOiAneCcsXG4gICAgICBsZW46ICd3aWR0aCcsXG4gICAgICBkaXI6ICdob3Jpem9udGFsJyxcbiAgICAgIHJlY3RTdGFydDogJ3gxJyxcbiAgICAgIHJlY3RFbmQ6ICd4MicsXG4gICAgICByZWN0T2Zmc2V0OiAneTInXG4gICAgfSxcbiAgICB5OiB7XG4gICAgICBwb3M6ICd5JyxcbiAgICAgIGxlbjogJ2hlaWdodCcsXG4gICAgICBkaXI6ICd2ZXJ0aWNhbCcsXG4gICAgICByZWN0U3RhcnQ6ICd5MicsXG4gICAgICByZWN0RW5kOiAneTEnLFxuICAgICAgcmVjdE9mZnNldDogJ3gxJ1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBBeGlzKHVuaXRzLCBjaGFydFJlY3QsIHRpY2tzLCBvcHRpb25zKSB7XG4gICAgdGhpcy51bml0cyA9IHVuaXRzO1xuICAgIHRoaXMuY291bnRlclVuaXRzID0gdW5pdHMgPT09IGF4aXNVbml0cy54ID8gYXhpc1VuaXRzLnkgOiBheGlzVW5pdHMueDtcbiAgICB0aGlzLmNoYXJ0UmVjdCA9IGNoYXJ0UmVjdDtcbiAgICB0aGlzLmF4aXNMZW5ndGggPSBjaGFydFJlY3RbdW5pdHMucmVjdEVuZF0gLSBjaGFydFJlY3RbdW5pdHMucmVjdFN0YXJ0XTtcbiAgICB0aGlzLmdyaWRPZmZzZXQgPSBjaGFydFJlY3RbdW5pdHMucmVjdE9mZnNldF07XG4gICAgdGhpcy50aWNrcyA9IHRpY2tzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVHcmlkQW5kTGFiZWxzKGdyaWRHcm91cCwgbGFiZWxHcm91cCwgdXNlRm9yZWlnbk9iamVjdCwgY2hhcnRPcHRpb25zLCBldmVudEVtaXR0ZXIpIHtcbiAgICB2YXIgYXhpc09wdGlvbnMgPSBjaGFydE9wdGlvbnNbJ2F4aXMnICsgdGhpcy51bml0cy5wb3MudG9VcHBlckNhc2UoKV07XG4gICAgdmFyIHByb2plY3RlZFZhbHVlcyA9IHRoaXMudGlja3MubWFwKHRoaXMucHJvamVjdFZhbHVlLmJpbmQodGhpcykpO1xuICAgIHZhciBsYWJlbFZhbHVlcyA9IHRoaXMudGlja3MubWFwKGF4aXNPcHRpb25zLmxhYmVsSW50ZXJwb2xhdGlvbkZuYyk7XG5cbiAgICBwcm9qZWN0ZWRWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbihwcm9qZWN0ZWRWYWx1ZSwgaW5kZXgpIHtcbiAgICAgIHZhciBsYWJlbE9mZnNldCA9IHtcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMFxuICAgICAgfTtcblxuICAgICAgLy8gVE9ETzogRmluZCBiZXR0ZXIgc29sdXRpb24gZm9yIHNvbHZpbmcgdGhpcyBwcm9ibGVtXG4gICAgICAvLyBDYWxjdWxhdGUgaG93IG11Y2ggc3BhY2Ugd2UgaGF2ZSBhdmFpbGFibGUgZm9yIHRoZSBsYWJlbFxuICAgICAgdmFyIGxhYmVsTGVuZ3RoO1xuICAgICAgaWYocHJvamVjdGVkVmFsdWVzW2luZGV4ICsgMV0pIHtcbiAgICAgICAgLy8gSWYgd2Ugc3RpbGwgaGF2ZSBvbmUgbGFiZWwgYWhlYWQsIHdlIGNhbiBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRvIHRoZSBuZXh0IHRpY2sgLyBsYWJlbFxuICAgICAgICBsYWJlbExlbmd0aCA9IHByb2plY3RlZFZhbHVlc1tpbmRleCArIDFdIC0gcHJvamVjdGVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgbGFiZWwgYWhlYWQgYW5kIHdlIGhhdmUgb25seSB0d28gbGFiZWxzIGluIHRvdGFsLCB3ZSBqdXN0IHRha2UgdGhlIHJlbWFpbmluZyBkaXN0YW5jZSB0b1xuICAgICAgICAvLyBvbiB0aGUgd2hvbGUgYXhpcyBsZW5ndGguIFdlIGxpbWl0IHRoYXQgdG8gYSBtaW5pbXVtIG9mIDMwIHBpeGVsLCBzbyB0aGF0IGxhYmVscyBjbG9zZSB0byB0aGUgYm9yZGVyIHdpbGxcbiAgICAgICAgLy8gc3RpbGwgYmUgdmlzaWJsZSBpbnNpZGUgb2YgdGhlIGNoYXJ0IHBhZGRpbmcuXG4gICAgICAgIGxhYmVsTGVuZ3RoID0gTWF0aC5tYXgodGhpcy5heGlzTGVuZ3RoIC0gcHJvamVjdGVkVmFsdWUsIDMwKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBncmlkIGxpbmVzIGFuZCBsYWJlbHMgd2hlcmUgaW50ZXJwb2xhdGVkIGxhYmVsIHZhbHVlcyBhcmUgZmFsc2V5IChleGVjcHQgZm9yIDApXG4gICAgICBpZihDaGFydGlzdC5pc0ZhbHNleUJ1dFplcm8obGFiZWxWYWx1ZXNbaW5kZXhdKSAmJiBsYWJlbFZhbHVlc1tpbmRleF0gIT09ICcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVHJhbnNmb3JtIHRvIGdsb2JhbCBjb29yZGluYXRlcyB1c2luZyB0aGUgY2hhcnRSZWN0XG4gICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gc2V0IHRoZSBsYWJlbCBvZmZzZXQgZm9yIHRoZSBjcmVhdGVMYWJlbCBmdW5jdGlvblxuICAgICAgaWYodGhpcy51bml0cy5wb3MgPT09ICd4Jykge1xuICAgICAgICBwcm9qZWN0ZWRWYWx1ZSA9IHRoaXMuY2hhcnRSZWN0LngxICsgcHJvamVjdGVkVmFsdWU7XG4gICAgICAgIGxhYmVsT2Zmc2V0LnggPSBjaGFydE9wdGlvbnMuYXhpc1gubGFiZWxPZmZzZXQueDtcblxuICAgICAgICAvLyBJZiB0aGUgbGFiZWxzIHNob3VsZCBiZSBwb3NpdGlvbmVkIGluIHN0YXJ0IHBvc2l0aW9uICh0b3Agc2lkZSBmb3IgdmVydGljYWwgYXhpcykgd2UgbmVlZCB0byBzZXQgYVxuICAgICAgICAvLyBkaWZmZXJlbnQgb2Zmc2V0IGFzIGZvciBwb3NpdGlvbmVkIHdpdGggZW5kIChib3R0b20pXG4gICAgICAgIGlmKGNoYXJ0T3B0aW9ucy5heGlzWC5wb3NpdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGxhYmVsT2Zmc2V0LnkgPSB0aGlzLmNoYXJ0UmVjdC5wYWRkaW5nLnRvcCArIGNoYXJ0T3B0aW9ucy5heGlzWC5sYWJlbE9mZnNldC55ICsgKHVzZUZvcmVpZ25PYmplY3QgPyA1IDogMjApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhYmVsT2Zmc2V0LnkgPSB0aGlzLmNoYXJ0UmVjdC55MSArIGNoYXJ0T3B0aW9ucy5heGlzWC5sYWJlbE9mZnNldC55ICsgKHVzZUZvcmVpZ25PYmplY3QgPyA1IDogMjApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9qZWN0ZWRWYWx1ZSA9IHRoaXMuY2hhcnRSZWN0LnkxIC0gcHJvamVjdGVkVmFsdWU7XG4gICAgICAgIGxhYmVsT2Zmc2V0LnkgPSBjaGFydE9wdGlvbnMuYXhpc1kubGFiZWxPZmZzZXQueSAtICh1c2VGb3JlaWduT2JqZWN0ID8gbGFiZWxMZW5ndGggOiAwKTtcblxuICAgICAgICAvLyBJZiB0aGUgbGFiZWxzIHNob3VsZCBiZSBwb3NpdGlvbmVkIGluIHN0YXJ0IHBvc2l0aW9uIChsZWZ0IHNpZGUgZm9yIGhvcml6b250YWwgYXhpcykgd2UgbmVlZCB0byBzZXQgYVxuICAgICAgICAvLyBkaWZmZXJlbnQgb2Zmc2V0IGFzIGZvciBwb3NpdGlvbmVkIHdpdGggZW5kIChyaWdodCBzaWRlKVxuICAgICAgICBpZihjaGFydE9wdGlvbnMuYXhpc1kucG9zaXRpb24gPT09ICdzdGFydCcpIHtcbiAgICAgICAgICBsYWJlbE9mZnNldC54ID0gdXNlRm9yZWlnbk9iamVjdCA/IHRoaXMuY2hhcnRSZWN0LnBhZGRpbmcubGVmdCArIGNoYXJ0T3B0aW9ucy5heGlzWS5sYWJlbE9mZnNldC54IDogdGhpcy5jaGFydFJlY3QueDEgLSAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYWJlbE9mZnNldC54ID0gdGhpcy5jaGFydFJlY3QueDIgKyBjaGFydE9wdGlvbnMuYXhpc1kubGFiZWxPZmZzZXQueCArIDEwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmKGF4aXNPcHRpb25zLnNob3dHcmlkKSB7XG4gICAgICAgIENoYXJ0aXN0LmNyZWF0ZUdyaWQocHJvamVjdGVkVmFsdWUsIGluZGV4LCB0aGlzLCB0aGlzLmdyaWRPZmZzZXQsIHRoaXMuY2hhcnRSZWN0W3RoaXMuY291bnRlclVuaXRzLmxlbl0oKSwgZ3JpZEdyb3VwLCBbXG4gICAgICAgICAgY2hhcnRPcHRpb25zLmNsYXNzTmFtZXMuZ3JpZCxcbiAgICAgICAgICBjaGFydE9wdGlvbnMuY2xhc3NOYW1lc1t0aGlzLnVuaXRzLmRpcl1cbiAgICAgICAgXSwgZXZlbnRFbWl0dGVyKTtcbiAgICAgIH1cblxuICAgICAgaWYoYXhpc09wdGlvbnMuc2hvd0xhYmVsKSB7XG4gICAgICAgIENoYXJ0aXN0LmNyZWF0ZUxhYmVsKHByb2plY3RlZFZhbHVlLCBsYWJlbExlbmd0aCwgaW5kZXgsIGxhYmVsVmFsdWVzLCB0aGlzLCBheGlzT3B0aW9ucy5vZmZzZXQsIGxhYmVsT2Zmc2V0LCBsYWJlbEdyb3VwLCBbXG4gICAgICAgICAgY2hhcnRPcHRpb25zLmNsYXNzTmFtZXMubGFiZWwsXG4gICAgICAgICAgY2hhcnRPcHRpb25zLmNsYXNzTmFtZXNbdGhpcy51bml0cy5kaXJdLFxuICAgICAgICAgIChheGlzT3B0aW9ucy5wb3NpdGlvbiA9PT0gJ3N0YXJ0JyA/IGNoYXJ0T3B0aW9ucy5jbGFzc05hbWVzW2F4aXNPcHRpb25zLnBvc2l0aW9uXSA6IGNoYXJ0T3B0aW9ucy5jbGFzc05hbWVzWydlbmQnXSlcbiAgICAgICAgXSwgdXNlRm9yZWlnbk9iamVjdCwgZXZlbnRFbWl0dGVyKTtcbiAgICAgIH1cbiAgICB9LmJpbmQodGhpcykpO1xuICB9XG5cbiAgQ2hhcnRpc3QuQXhpcyA9IENoYXJ0aXN0LkNsYXNzLmV4dGVuZCh7XG4gICAgY29uc3RydWN0b3I6IEF4aXMsXG4gICAgY3JlYXRlR3JpZEFuZExhYmVsczogY3JlYXRlR3JpZEFuZExhYmVscyxcbiAgICBwcm9qZWN0VmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIGF4aXMgY2FuXFwndCBiZSBpbnN0YW50aWF0ZWQhJyk7XG4gICAgfVxuICB9KTtcblxuICBDaGFydGlzdC5BeGlzLnVuaXRzID0gYXhpc1VuaXRzO1xuXG59KHRoaXMgfHwgZ2xvYmFsLCBDaGFydGlzdCkpO1xuOy8qKlxuICogVGhlIGF1dG8gc2NhbGUgYXhpcyB1c2VzIHN0YW5kYXJkIGxpbmVhciBzY2FsZSBwcm9qZWN0aW9uIG9mIHZhbHVlcyBhbG9uZyBhbiBheGlzLiBJdCB1c2VzIG9yZGVyIG9mIG1hZ25pdHVkZSB0byBmaW5kIGEgc2NhbGUgYXV0b21hdGljYWxseSBhbmQgZXZhbHVhdGVzIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gb3JkZXIgdG8gZmluZCB0aGUgcGVyZmVjdCBhbW91bnQgb2YgdGlja3MgZm9yIHlvdXIgY2hhcnQuXG4gKiAqKk9wdGlvbnMqKlxuICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSB1c2VkIGJ5IHRoaXMgYXhpcyBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBheGlzIG9wdGlvbnMgb3V0bGluZWQgaW4gdGhlIGF4aXMgY29uZmlndXJhdGlvbiBvZiB0aGUgY2hhcnQgZGVmYXVsdCBzZXR0aW5ncy5cbiAqIGBgYGphdmFzY3JpcHRcbiAqIHZhciBvcHRpb25zID0ge1xuICogICAvLyBJZiBoaWdoIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBheGlzIHdpbGwgZGlzcGxheSB2YWx1ZXMgZXhwbGljaXRseSB1cCB0byB0aGlzIHZhbHVlIGFuZCB0aGUgY29tcHV0ZWQgbWF4aW11bSBmcm9tIHRoZSBkYXRhIGlzIGlnbm9yZWRcbiAqICAgaGlnaDogMTAwLFxuICogICAvLyBJZiBsb3cgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGF4aXMgd2lsbCBkaXNwbGF5IHZhbHVlcyBleHBsaWNpdGx5IGRvd24gdG8gdGhpcyB2YWx1ZSBhbmQgdGhlIGNvbXB1dGVkIG1pbmltdW0gZnJvbSB0aGUgZGF0YSBpcyBpZ25vcmVkXG4gKiAgIGxvdzogMCxcbiAqICAgLy8gVGhpcyBvcHRpb24gd2lsbCBiZSB1c2VkIHdoZW4gZmluZGluZyB0aGUgcmlnaHQgc2NhbGUgZGl2aXNpb24gc2V0dGluZ3MuIFRoZSBhbW91bnQgb2YgdGlja3Mgb24gdGhlIHNjYWxlIHdpbGwgYmUgZGV0ZXJtaW5lZCBzbyB0aGF0IGFzIG1hbnkgdGlja3MgYXMgcG9zc2libGUgd2lsbCBiZSBkaXNwbGF5ZWQsIHdoaWxlIG5vdCB2aW9sYXRpbmcgdGhpcyBtaW5pbXVtIHJlcXVpcmVkIHNwYWNlIChpbiBwaXhlbCkuXG4gKiAgIHNjYWxlTWluU3BhY2U6IDIwLFxuICogICAvLyBDYW4gYmUgc2V0IHRvIHRydWUgb3IgZmFsc2UuIElmIHNldCB0byB0cnVlLCB0aGUgc2NhbGUgd2lsbCBiZSBnZW5lcmF0ZWQgd2l0aCB3aG9sZSBudW1iZXJzIG9ubHkuXG4gKiAgIG9ubHlJbnRlZ2VyOiB0cnVlLFxuICogICAvLyBUaGUgcmVmZXJlbmNlIHZhbHVlIGNhbiBiZSB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgdmFsdWUgd2lsbCBhbHdheXMgYmUgb24gdGhlIGNoYXJ0LiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIG9uIGJpcG9sYXIgY2hhcnRzIHdoZXJlIHRoZSBiaXBvbGFyIGNlbnRlciBhbHdheXMgbmVlZHMgdG8gYmUgcGFydCBvZiB0aGUgY2hhcnQuXG4gKiAgIHJlZmVyZW5jZVZhbHVlOiA1XG4gKiB9O1xuICogYGBgXG4gKlxuICogQG1vZHVsZSBDaGFydGlzdC5BdXRvU2NhbGVBeGlzXG4gKi9cbi8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uIChnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIGZ1bmN0aW9uIEF1dG9TY2FsZUF4aXMoYXhpc1VuaXQsIGRhdGEsIGNoYXJ0UmVjdCwgb3B0aW9ucykge1xuICAgIC8vIFVzdWFsbHkgd2UgY2FsY3VsYXRlIGhpZ2hMb3cgYmFzZWQgb24gdGhlIGRhdGEgYnV0IHRoaXMgY2FuIGJlIG92ZXJyaWRlbiBieSBhIGhpZ2hMb3cgb2JqZWN0IGluIHRoZSBvcHRpb25zXG4gICAgdmFyIGhpZ2hMb3cgPSBvcHRpb25zLmhpZ2hMb3cgfHwgQ2hhcnRpc3QuZ2V0SGlnaExvdyhkYXRhLCBvcHRpb25zLCBheGlzVW5pdC5wb3MpO1xuICAgIHRoaXMuYm91bmRzID0gQ2hhcnRpc3QuZ2V0Qm91bmRzKGNoYXJ0UmVjdFtheGlzVW5pdC5yZWN0RW5kXSAtIGNoYXJ0UmVjdFtheGlzVW5pdC5yZWN0U3RhcnRdLCBoaWdoTG93LCBvcHRpb25zLnNjYWxlTWluU3BhY2UgfHwgMjAsIG9wdGlvbnMub25seUludGVnZXIpO1xuICAgIHRoaXMucmFuZ2UgPSB7XG4gICAgICBtaW46IHRoaXMuYm91bmRzLm1pbixcbiAgICAgIG1heDogdGhpcy5ib3VuZHMubWF4XG4gICAgfTtcblxuICAgIENoYXJ0aXN0LkF1dG9TY2FsZUF4aXMuc3VwZXIuY29uc3RydWN0b3IuY2FsbCh0aGlzLFxuICAgICAgYXhpc1VuaXQsXG4gICAgICBjaGFydFJlY3QsXG4gICAgICB0aGlzLmJvdW5kcy52YWx1ZXMsXG4gICAgICBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2plY3RWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmF4aXNMZW5ndGggKiAoK0NoYXJ0aXN0LmdldE11bHRpVmFsdWUodmFsdWUsIHRoaXMudW5pdHMucG9zKSAtIHRoaXMuYm91bmRzLm1pbikgLyB0aGlzLmJvdW5kcy5yYW5nZTtcbiAgfVxuXG4gIENoYXJ0aXN0LkF1dG9TY2FsZUF4aXMgPSBDaGFydGlzdC5BeGlzLmV4dGVuZCh7XG4gICAgY29uc3RydWN0b3I6IEF1dG9TY2FsZUF4aXMsXG4gICAgcHJvamVjdFZhbHVlOiBwcm9qZWN0VmFsdWVcbiAgfSk7XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBUaGUgZml4ZWQgc2NhbGUgYXhpcyB1c2VzIHN0YW5kYXJkIGxpbmVhciBwcm9qZWN0aW9uIG9mIHZhbHVlcyBhbG9uZyBhbiBheGlzLiBJdCBtYWtlcyB1c2Ugb2YgYSBkaXZpc29yIG9wdGlvbiB0byBkaXZpZGUgdGhlIHJhbmdlIHByb3ZpZGVkIGZyb20gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUgb3IgdGhlIG9wdGlvbnMgaGlnaCBhbmQgbG93IHRoYXQgd2lsbCBvdmVycmlkZSB0aGUgY29tcHV0ZWQgbWluaW11bSBhbmQgbWF4aW11bS5cbiAqICoqT3B0aW9ucyoqXG4gKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVzZWQgYnkgdGhpcyBheGlzIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGF4aXMgb3B0aW9ucyBvdXRsaW5lZCBpbiB0aGUgYXhpcyBjb25maWd1cmF0aW9uIG9mIHRoZSBjaGFydCBkZWZhdWx0IHNldHRpbmdzLlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIG9wdGlvbnMgPSB7XG4gKiAgIC8vIElmIGhpZ2ggaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGF4aXMgd2lsbCBkaXNwbGF5IHZhbHVlcyBleHBsaWNpdGx5IHVwIHRvIHRoaXMgdmFsdWUgYW5kIHRoZSBjb21wdXRlZCBtYXhpbXVtIGZyb20gdGhlIGRhdGEgaXMgaWdub3JlZFxuICogICBoaWdoOiAxMDAsXG4gKiAgIC8vIElmIGxvdyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgYXhpcyB3aWxsIGRpc3BsYXkgdmFsdWVzIGV4cGxpY2l0bHkgZG93biB0byB0aGlzIHZhbHVlIGFuZCB0aGUgY29tcHV0ZWQgbWluaW11bSBmcm9tIHRoZSBkYXRhIGlzIGlnbm9yZWRcbiAqICAgbG93OiAwLFxuICogICAvLyBJZiBzcGVjaWZpZWQgdGhlbiB0aGUgdmFsdWUgcmFuZ2UgZGV0ZXJtaW5lZCBmcm9tIG1pbmltdW0gdG8gbWF4aW11bSAob3IgbG93IGFuZCBoaWdoKSB3aWxsIGJlIGRpdmlkZWQgYnkgdGhpcyBudW1iZXIgYW5kIHRpY2tzIHdpbGwgYmUgZ2VuZXJhdGVkIGF0IHRob3NlIGRpdmlzaW9uIHBvaW50cy4gVGhlIGRlZmF1bHQgZGl2aXNvciBpcyAxLlxuICogICBkaXZpc29yOiA0LFxuICogICAvLyBJZiB0aWNrcyBpcyBleHBsaWNpdGx5IHNldCwgdGhlbiB0aGUgYXhpcyB3aWxsIG5vdCBjb21wdXRlIHRoZSB0aWNrcyB3aXRoIHRoZSBkaXZpc29yLCBidXQgZGlyZWN0bHkgdXNlIHRoZSBkYXRhIGluIHRpY2tzIHRvIGRldGVybWluZSBhdCB3aGF0IHBvaW50cyBvbiB0aGUgYXhpcyBhIHRpY2sgbmVlZCB0byBiZSBnZW5lcmF0ZWQuXG4gKiAgIHRpY2tzOiBbMSwgMTAsIDIwLCAzMF1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlIENoYXJ0aXN0LkZpeGVkU2NhbGVBeGlzXG4gKi9cbi8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uIChnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIGZ1bmN0aW9uIEZpeGVkU2NhbGVBeGlzKGF4aXNVbml0LCBkYXRhLCBjaGFydFJlY3QsIG9wdGlvbnMpIHtcbiAgICB2YXIgaGlnaExvdyA9IG9wdGlvbnMuaGlnaExvdyB8fCBDaGFydGlzdC5nZXRIaWdoTG93KGRhdGEsIG9wdGlvbnMsIGF4aXNVbml0LnBvcyk7XG4gICAgdGhpcy5kaXZpc29yID0gb3B0aW9ucy5kaXZpc29yIHx8IDE7XG4gICAgdGhpcy50aWNrcyA9IG9wdGlvbnMudGlja3MgfHwgQ2hhcnRpc3QudGltZXModGhpcy5kaXZpc29yKS5tYXAoZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gaGlnaExvdy5sb3cgKyAoaGlnaExvdy5oaWdoIC0gaGlnaExvdy5sb3cpIC8gdGhpcy5kaXZpc29yICogaW5kZXg7XG4gICAgfS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnRpY2tzLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH0pO1xuICAgIHRoaXMucmFuZ2UgPSB7XG4gICAgICBtaW46IGhpZ2hMb3cubG93LFxuICAgICAgbWF4OiBoaWdoTG93LmhpZ2hcbiAgICB9O1xuXG4gICAgQ2hhcnRpc3QuRml4ZWRTY2FsZUF4aXMuc3VwZXIuY29uc3RydWN0b3IuY2FsbCh0aGlzLFxuICAgICAgYXhpc1VuaXQsXG4gICAgICBjaGFydFJlY3QsXG4gICAgICB0aGlzLnRpY2tzLFxuICAgICAgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnN0ZXBMZW5ndGggPSB0aGlzLmF4aXNMZW5ndGggLyB0aGlzLmRpdmlzb3I7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9qZWN0VmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5heGlzTGVuZ3RoICogKCtDaGFydGlzdC5nZXRNdWx0aVZhbHVlKHZhbHVlLCB0aGlzLnVuaXRzLnBvcykgLSB0aGlzLnJhbmdlLm1pbikgLyAodGhpcy5yYW5nZS5tYXggLSB0aGlzLnJhbmdlLm1pbik7XG4gIH1cblxuICBDaGFydGlzdC5GaXhlZFNjYWxlQXhpcyA9IENoYXJ0aXN0LkF4aXMuZXh0ZW5kKHtcbiAgICBjb25zdHJ1Y3RvcjogRml4ZWRTY2FsZUF4aXMsXG4gICAgcHJvamVjdFZhbHVlOiBwcm9qZWN0VmFsdWVcbiAgfSk7XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBUaGUgc3RlcCBheGlzIGZvciBzdGVwIGJhc2VkIGNoYXJ0cyBsaWtlIGJhciBjaGFydCBvciBzdGVwIGJhc2VkIGxpbmUgY2hhcnRzLiBJdCB1c2VzIGEgZml4ZWQgYW1vdW50IG9mIHRpY2tzIHRoYXQgd2lsbCBiZSBlcXVhbGx5IGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgd2hvbGUgYXhpcyBsZW5ndGguIFRoZSBwcm9qZWN0aW9uIGlzIGRvbmUgdXNpbmcgdGhlIGluZGV4IG9mIHRoZSBkYXRhIHZhbHVlIHJhdGhlciB0aGFuIHRoZSB2YWx1ZSBpdHNlbGYgYW5kIHRoZXJlZm9yZSBpdCdzIG9ubHkgdXNlZnVsIGZvciBkaXN0cmlidXRpb24gcHVycG9zZS5cbiAqICoqT3B0aW9ucyoqXG4gKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHVzZWQgYnkgdGhpcyBheGlzIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGF4aXMgb3B0aW9ucyBvdXRsaW5lZCBpbiB0aGUgYXhpcyBjb25maWd1cmF0aW9uIG9mIHRoZSBjaGFydCBkZWZhdWx0IHNldHRpbmdzLlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIG9wdGlvbnMgPSB7XG4gKiAgIC8vIFRpY2tzIHRvIGJlIHVzZWQgdG8gZGlzdHJpYnV0ZSBhY3Jvc3MgdGhlIGF4aXMgbGVuZ3RoLiBBcyB0aGlzIGF4aXMgdHlwZSByZWxpZXMgb24gdGhlIGluZGV4IG9mIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgdmFsdWUsIGFyYml0cmFyeSBkYXRhIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyBjYW4gYmUgdXNlZCBhcyB0aWNrcy5cbiAqICAgdGlja3M6IFsnT25lJywgJ1R3bycsICdUaHJlZSddLFxuICogICAvLyBJZiBzZXQgdG8gdHJ1ZSB0aGUgZnVsbCB3aWR0aCB3aWxsIGJlIHVzZWQgdG8gZGlzdHJpYnV0ZSB0aGUgdmFsdWVzIHdoZXJlIHRoZSBsYXN0IHZhbHVlIHdpbGwgYmUgYXQgdGhlIG1heGltdW0gb2YgdGhlIGF4aXMgbGVuZ3RoLiBJZiBmYWxzZSB0aGUgc3BhY2VzIGJldHdlZW4gdGhlIHRpY2tzIHdpbGwgYmUgZXZlbmx5IGRpc3RyaWJ1dGVkIGluc3RlYWQuXG4gKiAgIHN0cmV0Y2g6IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlIENoYXJ0aXN0LlN0ZXBBeGlzXG4gKi9cbi8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uIChnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIGZ1bmN0aW9uIFN0ZXBBeGlzKGF4aXNVbml0LCBkYXRhLCBjaGFydFJlY3QsIG9wdGlvbnMpIHtcbiAgICBDaGFydGlzdC5TdGVwQXhpcy5zdXBlci5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsXG4gICAgICBheGlzVW5pdCxcbiAgICAgIGNoYXJ0UmVjdCxcbiAgICAgIG9wdGlvbnMudGlja3MsXG4gICAgICBvcHRpb25zKTtcblxuICAgIHZhciBjYWxjID0gTWF0aC5tYXgoMSwgb3B0aW9ucy50aWNrcy5sZW5ndGggLSAob3B0aW9ucy5zdHJldGNoID8gMSA6IDApKTtcbiAgICB0aGlzLnN0ZXBMZW5ndGggPSB0aGlzLmF4aXNMZW5ndGggLyBjYWxjO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvamVjdFZhbHVlKHZhbHVlLCBpbmRleCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBMZW5ndGggKiBpbmRleDtcbiAgfVxuXG4gIENoYXJ0aXN0LlN0ZXBBeGlzID0gQ2hhcnRpc3QuQXhpcy5leHRlbmQoe1xuICAgIGNvbnN0cnVjdG9yOiBTdGVwQXhpcyxcbiAgICBwcm9qZWN0VmFsdWU6IHByb2plY3RWYWx1ZVxuICB9KTtcblxufSh0aGlzIHx8IGdsb2JhbCwgQ2hhcnRpc3QpKTtcbjsvKipcbiAqIFRoZSBDaGFydGlzdCBsaW5lIGNoYXJ0IGNhbiBiZSB1c2VkIHRvIGRyYXcgTGluZSBvciBTY2F0dGVyIGNoYXJ0cy4gSWYgdXNlZCBpbiB0aGUgYnJvd3NlciB5b3UgY2FuIGFjY2VzcyB0aGUgZ2xvYmFsIGBDaGFydGlzdGAgbmFtZXNwYWNlIHdoZXJlIHlvdSBmaW5kIHRoZSBgTGluZWAgZnVuY3Rpb24gYXMgYSBtYWluIGVudHJ5IHBvaW50LlxuICpcbiAqIEZvciBleGFtcGxlcyBvbiBob3cgdG8gdXNlIHRoZSBsaW5lIGNoYXJ0IHBsZWFzZSBjaGVjayB0aGUgZXhhbXBsZXMgb2YgdGhlIGBDaGFydGlzdC5MaW5lYCBtZXRob2QuXG4gKlxuICogQG1vZHVsZSBDaGFydGlzdC5MaW5lXG4gKi9cbi8qIGdsb2JhbCBDaGFydGlzdCAqL1xuKGZ1bmN0aW9uKGdsb2JhbFJvb3QsIENoYXJ0aXN0KXtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciB3aW5kb3cgPSBnbG9iYWxSb290LndpbmRvdztcbiAgdmFyIGRvY3VtZW50ID0gZ2xvYmFsUm9vdC5kb2N1bWVudDtcblxuICAvKipcbiAgICogRGVmYXVsdCBvcHRpb25zIGluIGxpbmUgY2hhcnRzLiBFeHBhbmQgdGhlIGNvZGUgdmlldyB0byBzZWUgYSBkZXRhaWxlZCBsaXN0IG9mIG9wdGlvbnMgd2l0aCBjb21tZW50cy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkxpbmVcbiAgICovXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBPcHRpb25zIGZvciBYLUF4aXNcbiAgICBheGlzWDoge1xuICAgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgbGFiZWxzIHRvIHRoZSBjaGFydCBhcmVhXG4gICAgICBvZmZzZXQ6IDMwLFxuICAgICAgLy8gUG9zaXRpb24gd2hlcmUgbGFiZWxzIGFyZSBwbGFjZWQuIENhbiBiZSBzZXQgdG8gYHN0YXJ0YCBvciBgZW5kYCB3aGVyZSBgc3RhcnRgIGlzIGVxdWl2YWxlbnQgdG8gbGVmdCBvciB0b3Agb24gdmVydGljYWwgYXhpcyBhbmQgYGVuZGAgaXMgZXF1aXZhbGVudCB0byByaWdodCBvciBib3R0b20gb24gaG9yaXpvbnRhbCBheGlzLlxuICAgICAgcG9zaXRpb246ICdlbmQnLFxuICAgICAgLy8gQWxsb3dzIHlvdSB0byBjb3JyZWN0IGxhYmVsIHBvc2l0aW9uaW5nIG9uIHRoaXMgYXhpcyBieSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSB4IGFuZCB5IG9mZnNldC5cbiAgICAgIGxhYmVsT2Zmc2V0OiB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0sXG4gICAgICAvLyBJZiBsYWJlbHMgc2hvdWxkIGJlIHNob3duIG9yIG5vdFxuICAgICAgc2hvd0xhYmVsOiB0cnVlLFxuICAgICAgLy8gSWYgdGhlIGF4aXMgZ3JpZCBzaG91bGQgYmUgZHJhd24gb3Igbm90XG4gICAgICBzaG93R3JpZDogdHJ1ZSxcbiAgICAgIC8vIEludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCB0aGUgdmFsdWUgZnJvbSB0aGUgYXhpcyBsYWJlbFxuICAgICAgbGFiZWxJbnRlcnBvbGF0aW9uRm5jOiBDaGFydGlzdC5ub29wLFxuICAgICAgLy8gU2V0IHRoZSBheGlzIHR5cGUgdG8gYmUgdXNlZCB0byBwcm9qZWN0IHZhbHVlcyBvbiB0aGlzIGF4aXMuIElmIG5vdCBkZWZpbmVkLCBDaGFydGlzdC5TdGVwQXhpcyB3aWxsIGJlIHVzZWQgZm9yIHRoZSBYLUF4aXMsIHdoZXJlIHRoZSB0aWNrcyBvcHRpb24gd2lsbCBiZSBzZXQgdG8gdGhlIGxhYmVscyBpbiB0aGUgZGF0YSBhbmQgdGhlIHN0cmV0Y2ggb3B0aW9uIHdpbGwgYmUgc2V0IHRvIHRoZSBnbG9iYWwgZnVsbFdpZHRoIG9wdGlvbi4gVGhpcyB0eXBlIGNhbiBiZSBjaGFuZ2VkIHRvIGFueSBheGlzIGNvbnN0cnVjdG9yIGF2YWlsYWJsZSAoZS5nLiBDaGFydGlzdC5GaXhlZFNjYWxlQXhpcyksIHdoZXJlIGFsbCBheGlzIG9wdGlvbnMgc2hvdWxkIGJlIHByZXNlbnQgaGVyZS5cbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgLy8gT3B0aW9ucyBmb3IgWS1BeGlzXG4gICAgYXhpc1k6IHtcbiAgICAgIC8vIFRoZSBvZmZzZXQgb2YgdGhlIGxhYmVscyB0byB0aGUgY2hhcnQgYXJlYVxuICAgICAgb2Zmc2V0OiA0MCxcbiAgICAgIC8vIFBvc2l0aW9uIHdoZXJlIGxhYmVscyBhcmUgcGxhY2VkLiBDYW4gYmUgc2V0IHRvIGBzdGFydGAgb3IgYGVuZGAgd2hlcmUgYHN0YXJ0YCBpcyBlcXVpdmFsZW50IHRvIGxlZnQgb3IgdG9wIG9uIHZlcnRpY2FsIGF4aXMgYW5kIGBlbmRgIGlzIGVxdWl2YWxlbnQgdG8gcmlnaHQgb3IgYm90dG9tIG9uIGhvcml6b250YWwgYXhpcy5cbiAgICAgIHBvc2l0aW9uOiAnc3RhcnQnLFxuICAgICAgLy8gQWxsb3dzIHlvdSB0byBjb3JyZWN0IGxhYmVsIHBvc2l0aW9uaW5nIG9uIHRoaXMgYXhpcyBieSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSB4IGFuZCB5IG9mZnNldC5cbiAgICAgIGxhYmVsT2Zmc2V0OiB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0sXG4gICAgICAvLyBJZiBsYWJlbHMgc2hvdWxkIGJlIHNob3duIG9yIG5vdFxuICAgICAgc2hvd0xhYmVsOiB0cnVlLFxuICAgICAgLy8gSWYgdGhlIGF4aXMgZ3JpZCBzaG91bGQgYmUgZHJhd24gb3Igbm90XG4gICAgICBzaG93R3JpZDogdHJ1ZSxcbiAgICAgIC8vIEludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCB0aGUgdmFsdWUgZnJvbSB0aGUgYXhpcyBsYWJlbFxuICAgICAgbGFiZWxJbnRlcnBvbGF0aW9uRm5jOiBDaGFydGlzdC5ub29wLFxuICAgICAgLy8gU2V0IHRoZSBheGlzIHR5cGUgdG8gYmUgdXNlZCB0byBwcm9qZWN0IHZhbHVlcyBvbiB0aGlzIGF4aXMuIElmIG5vdCBkZWZpbmVkLCBDaGFydGlzdC5BdXRvU2NhbGVBeGlzIHdpbGwgYmUgdXNlZCBmb3IgdGhlIFktQXhpcywgd2hlcmUgdGhlIGhpZ2ggYW5kIGxvdyBvcHRpb25zIHdpbGwgYmUgc2V0IHRvIHRoZSBnbG9iYWwgaGlnaCBhbmQgbG93IG9wdGlvbnMuIFRoaXMgdHlwZSBjYW4gYmUgY2hhbmdlZCB0byBhbnkgYXhpcyBjb25zdHJ1Y3RvciBhdmFpbGFibGUgKGUuZy4gQ2hhcnRpc3QuRml4ZWRTY2FsZUF4aXMpLCB3aGVyZSBhbGwgYXhpcyBvcHRpb25zIHNob3VsZCBiZSBwcmVzZW50IGhlcmUuXG4gICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgbWluaW11bSBoZWlnaHQgaW4gcGl4ZWwgb2YgdGhlIHNjYWxlIHN0ZXBzXG4gICAgICBzY2FsZU1pblNwYWNlOiAyMCxcbiAgICAgIC8vIFVzZSBvbmx5IGludGVnZXIgdmFsdWVzICh3aG9sZSBudW1iZXJzKSBmb3IgdGhlIHNjYWxlIHN0ZXBzXG4gICAgICBvbmx5SW50ZWdlcjogZmFsc2VcbiAgICB9LFxuICAgIC8vIFNwZWNpZnkgYSBmaXhlZCB3aWR0aCBmb3IgdGhlIGNoYXJ0IGFzIGEgc3RyaW5nIChpLmUuICcxMDBweCcgb3IgJzUwJScpXG4gICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAvLyBTcGVjaWZ5IGEgZml4ZWQgaGVpZ2h0IGZvciB0aGUgY2hhcnQgYXMgYSBzdHJpbmcgKGkuZS4gJzEwMHB4JyBvciAnNTAlJylcbiAgICBoZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAvLyBJZiB0aGUgbGluZSBzaG91bGQgYmUgZHJhd24gb3Igbm90XG4gICAgc2hvd0xpbmU6IHRydWUsXG4gICAgLy8gSWYgZG90cyBzaG91bGQgYmUgZHJhd24gb3Igbm90XG4gICAgc2hvd1BvaW50OiB0cnVlLFxuICAgIC8vIElmIHRoZSBsaW5lIGNoYXJ0IHNob3VsZCBkcmF3IGFuIGFyZWFcbiAgICBzaG93QXJlYTogZmFsc2UsXG4gICAgLy8gVGhlIGJhc2UgZm9yIHRoZSBhcmVhIGNoYXJ0IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNsb3NlIHRoZSBhcmVhIHNoYXBlIChpcyBub3JtYWxseSAwKVxuICAgIGFyZWFCYXNlOiAwLFxuICAgIC8vIFNwZWNpZnkgaWYgdGhlIGxpbmVzIHNob3VsZCBiZSBzbW9vdGhlZC4gVGhpcyB2YWx1ZSBjYW4gYmUgdHJ1ZSBvciBmYWxzZSB3aGVyZSB0cnVlIHdpbGwgcmVzdWx0IGluIHNtb290aGluZyB1c2luZyB0aGUgZGVmYXVsdCBzbW9vdGhpbmcgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLmNhcmRpbmFsIGFuZCBmYWxzZSByZXN1bHRzIGluIENoYXJ0aXN0LkludGVycG9sYXRpb24ubm9uZS4gWW91IGNhbiBhbHNvIGNob29zZSBvdGhlciBzbW9vdGhpbmcgLyBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIENoYXJ0aXN0LkludGVycG9sYXRpb24gbW9kdWxlLCBvciB3cml0ZSB5b3VyIG93biBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uLiBDaGVjayB0aGUgZXhhbXBsZXMgZm9yIGEgYnJpZWYgZGVzY3JpcHRpb24uXG4gICAgbGluZVNtb290aDogdHJ1ZSxcbiAgICAvLyBJZiB0aGUgbGluZSBjaGFydCBzaG91bGQgYWRkIGEgYmFja2dyb3VuZCBmaWxsIHRvIHRoZSAuY3QtZ3JpZHMgZ3JvdXAuXG4gICAgc2hvd0dyaWRCYWNrZ3JvdW5kOiBmYWxzZSxcbiAgICAvLyBPdmVycmlkaW5nIHRoZSBuYXR1cmFsIGxvdyBvZiB0aGUgY2hhcnQgYWxsb3dzIHlvdSB0byB6b29tIGluIG9yIGxpbWl0IHRoZSBjaGFydHMgbG93ZXN0IGRpc3BsYXllZCB2YWx1ZVxuICAgIGxvdzogdW5kZWZpbmVkLFxuICAgIC8vIE92ZXJyaWRpbmcgdGhlIG5hdHVyYWwgaGlnaCBvZiB0aGUgY2hhcnQgYWxsb3dzIHlvdSB0byB6b29tIGluIG9yIGxpbWl0IHRoZSBjaGFydHMgaGlnaGVzdCBkaXNwbGF5ZWQgdmFsdWVcbiAgICBoaWdoOiB1bmRlZmluZWQsXG4gICAgLy8gUGFkZGluZyBvZiB0aGUgY2hhcnQgZHJhd2luZyBhcmVhIHRvIHRoZSBjb250YWluZXIgZWxlbWVudCBhbmQgbGFiZWxzIGFzIGEgbnVtYmVyIG9yIHBhZGRpbmcgb2JqZWN0IHt0b3A6IDUsIHJpZ2h0OiA1LCBib3R0b206IDUsIGxlZnQ6IDV9XG4gICAgY2hhcnRQYWRkaW5nOiB7XG4gICAgICB0b3A6IDE1LFxuICAgICAgcmlnaHQ6IDE1LFxuICAgICAgYm90dG9tOiA1LFxuICAgICAgbGVmdDogMTBcbiAgICB9LFxuICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBsYXN0IGdyaWQgbGluZSBvbiB0aGUgeC1heGlzIGlzIG5vdCBkcmF3biBhbmQgdGhlIGNoYXJ0IGVsZW1lbnRzIHdpbGwgZXhwYW5kIHRvIHRoZSBmdWxsIGF2YWlsYWJsZSB3aWR0aCBvZiB0aGUgY2hhcnQuIEZvciB0aGUgbGFzdCBsYWJlbCB0byBiZSBkcmF3biBjb3JyZWN0bHkgeW91IG1pZ2h0IG5lZWQgdG8gYWRkIGNoYXJ0IHBhZGRpbmcgb3Igb2Zmc2V0IHRoZSBsYXN0IGxhYmVsIHdpdGggYSBkcmF3IGV2ZW50IGhhbmRsZXIuXG4gICAgZnVsbFdpZHRoOiBmYWxzZSxcbiAgICAvLyBJZiB0cnVlIHRoZSB3aG9sZSBkYXRhIGlzIHJldmVyc2VkIGluY2x1ZGluZyBsYWJlbHMsIHRoZSBzZXJpZXMgb3JkZXIgYXMgd2VsbCBhcyB0aGUgd2hvbGUgc2VyaWVzIGRhdGEgYXJyYXlzLlxuICAgIHJldmVyc2VEYXRhOiBmYWxzZSxcbiAgICAvLyBPdmVycmlkZSB0aGUgY2xhc3MgbmFtZXMgdGhhdCBnZXQgdXNlZCB0byBnZW5lcmF0ZSB0aGUgU1ZHIHN0cnVjdHVyZSBvZiB0aGUgY2hhcnRcbiAgICBjbGFzc05hbWVzOiB7XG4gICAgICBjaGFydDogJ2N0LWNoYXJ0LWxpbmUnLFxuICAgICAgbGFiZWw6ICdjdC1sYWJlbCcsXG4gICAgICBsYWJlbEdyb3VwOiAnY3QtbGFiZWxzJyxcbiAgICAgIHNlcmllczogJ2N0LXNlcmllcycsXG4gICAgICBsaW5lOiAnY3QtbGluZScsXG4gICAgICBwb2ludDogJ2N0LXBvaW50JyxcbiAgICAgIGFyZWE6ICdjdC1hcmVhJyxcbiAgICAgIGdyaWQ6ICdjdC1ncmlkJyxcbiAgICAgIGdyaWRHcm91cDogJ2N0LWdyaWRzJyxcbiAgICAgIGdyaWRCYWNrZ3JvdW5kOiAnY3QtZ3JpZC1iYWNrZ3JvdW5kJyxcbiAgICAgIHZlcnRpY2FsOiAnY3QtdmVydGljYWwnLFxuICAgICAgaG9yaXpvbnRhbDogJ2N0LWhvcml6b250YWwnLFxuICAgICAgc3RhcnQ6ICdjdC1zdGFydCcsXG4gICAgICBlbmQ6ICdjdC1lbmQnXG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNoYXJ0XG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVDaGFydChvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSBDaGFydGlzdC5ub3JtYWxpemVEYXRhKHRoaXMuZGF0YSwgb3B0aW9ucy5yZXZlcnNlRGF0YSwgdHJ1ZSk7XG5cbiAgICAvLyBDcmVhdGUgbmV3IHN2ZyBvYmplY3RcbiAgICB0aGlzLnN2ZyA9IENoYXJ0aXN0LmNyZWF0ZVN2Zyh0aGlzLmNvbnRhaW5lciwgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQsIG9wdGlvbnMuY2xhc3NOYW1lcy5jaGFydCk7XG4gICAgLy8gQ3JlYXRlIGdyb3VwcyBmb3IgbGFiZWxzLCBncmlkIGFuZCBzZXJpZXNcbiAgICB2YXIgZ3JpZEdyb3VwID0gdGhpcy5zdmcuZWxlbSgnZycpLmFkZENsYXNzKG9wdGlvbnMuY2xhc3NOYW1lcy5ncmlkR3JvdXApO1xuICAgIHZhciBzZXJpZXNHcm91cCA9IHRoaXMuc3ZnLmVsZW0oJ2cnKTtcbiAgICB2YXIgbGFiZWxHcm91cCA9IHRoaXMuc3ZnLmVsZW0oJ2cnKS5hZGRDbGFzcyhvcHRpb25zLmNsYXNzTmFtZXMubGFiZWxHcm91cCk7XG5cbiAgICB2YXIgY2hhcnRSZWN0ID0gQ2hhcnRpc3QuY3JlYXRlQ2hhcnRSZWN0KHRoaXMuc3ZnLCBvcHRpb25zLCBkZWZhdWx0T3B0aW9ucy5wYWRkaW5nKTtcbiAgICB2YXIgYXhpc1gsIGF4aXNZO1xuXG4gICAgaWYob3B0aW9ucy5heGlzWC50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGF4aXNYID0gbmV3IENoYXJ0aXN0LlN0ZXBBeGlzKENoYXJ0aXN0LkF4aXMudW5pdHMueCwgZGF0YS5ub3JtYWxpemVkLnNlcmllcywgY2hhcnRSZWN0LCBDaGFydGlzdC5leHRlbmQoe30sIG9wdGlvbnMuYXhpc1gsIHtcbiAgICAgICAgdGlja3M6IGRhdGEubm9ybWFsaXplZC5sYWJlbHMsXG4gICAgICAgIHN0cmV0Y2g6IG9wdGlvbnMuZnVsbFdpZHRoXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF4aXNYID0gb3B0aW9ucy5heGlzWC50eXBlLmNhbGwoQ2hhcnRpc3QsIENoYXJ0aXN0LkF4aXMudW5pdHMueCwgZGF0YS5ub3JtYWxpemVkLnNlcmllcywgY2hhcnRSZWN0LCBvcHRpb25zLmF4aXNYKTtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLmF4aXNZLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYXhpc1kgPSBuZXcgQ2hhcnRpc3QuQXV0b1NjYWxlQXhpcyhDaGFydGlzdC5BeGlzLnVuaXRzLnksIGRhdGEubm9ybWFsaXplZC5zZXJpZXMsIGNoYXJ0UmVjdCwgQ2hhcnRpc3QuZXh0ZW5kKHt9LCBvcHRpb25zLmF4aXNZLCB7XG4gICAgICAgIGhpZ2g6IENoYXJ0aXN0LmlzTnVtZXJpYyhvcHRpb25zLmhpZ2gpID8gb3B0aW9ucy5oaWdoIDogb3B0aW9ucy5heGlzWS5oaWdoLFxuICAgICAgICBsb3c6IENoYXJ0aXN0LmlzTnVtZXJpYyhvcHRpb25zLmxvdykgPyBvcHRpb25zLmxvdyA6IG9wdGlvbnMuYXhpc1kubG93XG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF4aXNZID0gb3B0aW9ucy5heGlzWS50eXBlLmNhbGwoQ2hhcnRpc3QsIENoYXJ0aXN0LkF4aXMudW5pdHMueSwgZGF0YS5ub3JtYWxpemVkLnNlcmllcywgY2hhcnRSZWN0LCBvcHRpb25zLmF4aXNZKTtcbiAgICB9XG5cbiAgICBheGlzWC5jcmVhdGVHcmlkQW5kTGFiZWxzKGdyaWRHcm91cCwgbGFiZWxHcm91cCwgdGhpcy5zdXBwb3J0c0ZvcmVpZ25PYmplY3QsIG9wdGlvbnMsIHRoaXMuZXZlbnRFbWl0dGVyKTtcbiAgICBheGlzWS5jcmVhdGVHcmlkQW5kTGFiZWxzKGdyaWRHcm91cCwgbGFiZWxHcm91cCwgdGhpcy5zdXBwb3J0c0ZvcmVpZ25PYmplY3QsIG9wdGlvbnMsIHRoaXMuZXZlbnRFbWl0dGVyKTtcblxuICAgIGlmIChvcHRpb25zLnNob3dHcmlkQmFja2dyb3VuZCkge1xuICAgICAgQ2hhcnRpc3QuY3JlYXRlR3JpZEJhY2tncm91bmQoZ3JpZEdyb3VwLCBjaGFydFJlY3QsIG9wdGlvbnMuY2xhc3NOYW1lcy5ncmlkQmFja2dyb3VuZCwgdGhpcy5ldmVudEVtaXR0ZXIpO1xuICAgIH1cblxuICAgIC8vIERyYXcgdGhlIHNlcmllc1xuICAgIGRhdGEucmF3LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcywgc2VyaWVzSW5kZXgpIHtcbiAgICAgIHZhciBzZXJpZXNFbGVtZW50ID0gc2VyaWVzR3JvdXAuZWxlbSgnZycpO1xuXG4gICAgICAvLyBXcml0ZSBhdHRyaWJ1dGVzIHRvIHNlcmllcyBncm91cCBlbGVtZW50LiBJZiBzZXJpZXMgbmFtZSBvciBtZXRhIGlzIHVuZGVmaW5lZCB0aGUgYXR0cmlidXRlcyB3aWxsIG5vdCBiZSB3cml0dGVuXG4gICAgICBzZXJpZXNFbGVtZW50LmF0dHIoe1xuICAgICAgICAnY3Q6c2VyaWVzLW5hbWUnOiBzZXJpZXMubmFtZSxcbiAgICAgICAgJ2N0Om1ldGEnOiBDaGFydGlzdC5zZXJpYWxpemUoc2VyaWVzLm1ldGEpXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlIHNlcmllcyBjbGFzcyBmcm9tIHNlcmllcyBkYXRhIG9yIGlmIG5vdCBzZXQgZ2VuZXJhdGUgb25lXG4gICAgICBzZXJpZXNFbGVtZW50LmFkZENsYXNzKFtcbiAgICAgICAgb3B0aW9ucy5jbGFzc05hbWVzLnNlcmllcyxcbiAgICAgICAgKHNlcmllcy5jbGFzc05hbWUgfHwgb3B0aW9ucy5jbGFzc05hbWVzLnNlcmllcyArICctJyArIENoYXJ0aXN0LmFscGhhTnVtZXJhdGUoc2VyaWVzSW5kZXgpKVxuICAgICAgXS5qb2luKCcgJykpO1xuXG4gICAgICB2YXIgcGF0aENvb3JkaW5hdGVzID0gW10sXG4gICAgICAgIHBhdGhEYXRhID0gW107XG5cbiAgICAgIGRhdGEubm9ybWFsaXplZC5zZXJpZXNbc2VyaWVzSW5kZXhdLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIHZhbHVlSW5kZXgpIHtcbiAgICAgICAgdmFyIHAgPSB7XG4gICAgICAgICAgeDogY2hhcnRSZWN0LngxICsgYXhpc1gucHJvamVjdFZhbHVlKHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzW3Nlcmllc0luZGV4XSksXG4gICAgICAgICAgeTogY2hhcnRSZWN0LnkxIC0gYXhpc1kucHJvamVjdFZhbHVlKHZhbHVlLCB2YWx1ZUluZGV4LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzW3Nlcmllc0luZGV4XSlcbiAgICAgICAgfTtcbiAgICAgICAgcGF0aENvb3JkaW5hdGVzLnB1c2gocC54LCBwLnkpO1xuICAgICAgICBwYXRoRGF0YS5wdXNoKHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgdmFsdWVJbmRleDogdmFsdWVJbmRleCxcbiAgICAgICAgICBtZXRhOiBDaGFydGlzdC5nZXRNZXRhRGF0YShzZXJpZXMsIHZhbHVlSW5kZXgpXG4gICAgICAgIH0pO1xuICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgdmFyIHNlcmllc09wdGlvbnMgPSB7XG4gICAgICAgIGxpbmVTbW9vdGg6IENoYXJ0aXN0LmdldFNlcmllc09wdGlvbihzZXJpZXMsIG9wdGlvbnMsICdsaW5lU21vb3RoJyksXG4gICAgICAgIHNob3dQb2ludDogQ2hhcnRpc3QuZ2V0U2VyaWVzT3B0aW9uKHNlcmllcywgb3B0aW9ucywgJ3Nob3dQb2ludCcpLFxuICAgICAgICBzaG93TGluZTogQ2hhcnRpc3QuZ2V0U2VyaWVzT3B0aW9uKHNlcmllcywgb3B0aW9ucywgJ3Nob3dMaW5lJyksXG4gICAgICAgIHNob3dBcmVhOiBDaGFydGlzdC5nZXRTZXJpZXNPcHRpb24oc2VyaWVzLCBvcHRpb25zLCAnc2hvd0FyZWEnKSxcbiAgICAgICAgYXJlYUJhc2U6IENoYXJ0aXN0LmdldFNlcmllc09wdGlvbihzZXJpZXMsIG9wdGlvbnMsICdhcmVhQmFzZScpXG4gICAgICB9O1xuXG4gICAgICB2YXIgc21vb3RoaW5nID0gdHlwZW9mIHNlcmllc09wdGlvbnMubGluZVNtb290aCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgIHNlcmllc09wdGlvbnMubGluZVNtb290aCA6IChzZXJpZXNPcHRpb25zLmxpbmVTbW9vdGggPyBDaGFydGlzdC5JbnRlcnBvbGF0aW9uLm1vbm90b25lQ3ViaWMoKSA6IENoYXJ0aXN0LkludGVycG9sYXRpb24ubm9uZSgpKTtcbiAgICAgIC8vIEludGVycG9sYXRpbmcgcGF0aCB3aGVyZSBwYXRoRGF0YSB3aWxsIGJlIHVzZWQgdG8gYW5ub3RhdGUgZWFjaCBwYXRoIGVsZW1lbnQgc28gd2UgY2FuIHRyYWNlIGJhY2sgdGhlIG9yaWdpbmFsXG4gICAgICAvLyBpbmRleCwgdmFsdWUgYW5kIG1ldGEgZGF0YVxuICAgICAgdmFyIHBhdGggPSBzbW9vdGhpbmcocGF0aENvb3JkaW5hdGVzLCBwYXRoRGF0YSk7XG5cbiAgICAgIC8vIElmIHdlIHNob3VsZCBzaG93IHBvaW50cyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGVtIG5vdyB0byBhdm9pZCBzZWNvbmRhcnkgbG9vcFxuICAgICAgLy8gUG9pbnRzIGFyZSBkcmF3biBmcm9tIHRoZSBwYXRoRWxlbWVudHMgcmV0dXJuZWQgYnkgdGhlIGludGVycG9sYXRpb24gZnVuY3Rpb25cbiAgICAgIC8vIFNtYWxsIG9mZnNldCBmb3IgRmlyZWZveCB0byByZW5kZXIgc3F1YXJlcyBjb3JyZWN0bHlcbiAgICAgIGlmIChzZXJpZXNPcHRpb25zLnNob3dQb2ludCkge1xuXG4gICAgICAgIHBhdGgucGF0aEVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24ocGF0aEVsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgcG9pbnQgPSBzZXJpZXNFbGVtZW50LmVsZW0oJ2xpbmUnLCB7XG4gICAgICAgICAgICB4MTogcGF0aEVsZW1lbnQueCxcbiAgICAgICAgICAgIHkxOiBwYXRoRWxlbWVudC55LFxuICAgICAgICAgICAgeDI6IHBhdGhFbGVtZW50LnggKyAwLjAxLFxuICAgICAgICAgICAgeTI6IHBhdGhFbGVtZW50LnlcbiAgICAgICAgICB9LCBvcHRpb25zLmNsYXNzTmFtZXMucG9pbnQpLmF0dHIoe1xuICAgICAgICAgICAgJ2N0OnZhbHVlJzogW3BhdGhFbGVtZW50LmRhdGEudmFsdWUueCwgcGF0aEVsZW1lbnQuZGF0YS52YWx1ZS55XS5maWx0ZXIoQ2hhcnRpc3QuaXNOdW1lcmljKS5qb2luKCcsJyksXG4gICAgICAgICAgICAnY3Q6bWV0YSc6IENoYXJ0aXN0LnNlcmlhbGl6ZShwYXRoRWxlbWVudC5kYXRhLm1ldGEpXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdkcmF3Jywge1xuICAgICAgICAgICAgdHlwZTogJ3BvaW50JyxcbiAgICAgICAgICAgIHZhbHVlOiBwYXRoRWxlbWVudC5kYXRhLnZhbHVlLFxuICAgICAgICAgICAgaW5kZXg6IHBhdGhFbGVtZW50LmRhdGEudmFsdWVJbmRleCxcbiAgICAgICAgICAgIG1ldGE6IHBhdGhFbGVtZW50LmRhdGEubWV0YSxcbiAgICAgICAgICAgIHNlcmllczogc2VyaWVzLFxuICAgICAgICAgICAgc2VyaWVzSW5kZXg6IHNlcmllc0luZGV4LFxuICAgICAgICAgICAgYXhpc1g6IGF4aXNYLFxuICAgICAgICAgICAgYXhpc1k6IGF4aXNZLFxuICAgICAgICAgICAgZ3JvdXA6IHNlcmllc0VsZW1lbnQsXG4gICAgICAgICAgICBlbGVtZW50OiBwb2ludCxcbiAgICAgICAgICAgIHg6IHBhdGhFbGVtZW50LngsXG4gICAgICAgICAgICB5OiBwYXRoRWxlbWVudC55XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICB9XG5cbiAgICAgIGlmKHNlcmllc09wdGlvbnMuc2hvd0xpbmUpIHtcbiAgICAgICAgdmFyIGxpbmUgPSBzZXJpZXNFbGVtZW50LmVsZW0oJ3BhdGgnLCB7XG4gICAgICAgICAgZDogcGF0aC5zdHJpbmdpZnkoKVxuICAgICAgICB9LCBvcHRpb25zLmNsYXNzTmFtZXMubGluZSwgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCgnZHJhdycsIHtcbiAgICAgICAgICB0eXBlOiAnbGluZScsXG4gICAgICAgICAgdmFsdWVzOiBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzW3Nlcmllc0luZGV4XSxcbiAgICAgICAgICBwYXRoOiBwYXRoLmNsb25lKCksXG4gICAgICAgICAgY2hhcnRSZWN0OiBjaGFydFJlY3QsXG4gICAgICAgICAgaW5kZXg6IHNlcmllc0luZGV4LFxuICAgICAgICAgIHNlcmllczogc2VyaWVzLFxuICAgICAgICAgIHNlcmllc0luZGV4OiBzZXJpZXNJbmRleCxcbiAgICAgICAgICBzZXJpZXNNZXRhOiBzZXJpZXMubWV0YSxcbiAgICAgICAgICBheGlzWDogYXhpc1gsXG4gICAgICAgICAgYXhpc1k6IGF4aXNZLFxuICAgICAgICAgIGdyb3VwOiBzZXJpZXNFbGVtZW50LFxuICAgICAgICAgIGVsZW1lbnQ6IGxpbmVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFyZWEgY3VycmVudGx5IG9ubHkgd29ya3Mgd2l0aCBheGVzIHRoYXQgc3VwcG9ydCBhIHJhbmdlIVxuICAgICAgaWYoc2VyaWVzT3B0aW9ucy5zaG93QXJlYSAmJiBheGlzWS5yYW5nZSkge1xuICAgICAgICAvLyBJZiBhcmVhQmFzZSBpcyBvdXRzaWRlIHRoZSBjaGFydCBhcmVhICg8IG1pbiBvciA+IG1heCkgd2UgbmVlZCB0byBzZXQgaXQgcmVzcGVjdGl2ZWx5IHNvIHRoYXRcbiAgICAgICAgLy8gdGhlIGFyZWEgaXMgbm90IGRyYXduIG91dHNpZGUgdGhlIGNoYXJ0IGFyZWEuXG4gICAgICAgIHZhciBhcmVhQmFzZSA9IE1hdGgubWF4KE1hdGgubWluKHNlcmllc09wdGlvbnMuYXJlYUJhc2UsIGF4aXNZLnJhbmdlLm1heCksIGF4aXNZLnJhbmdlLm1pbik7XG5cbiAgICAgICAgLy8gV2UgcHJvamVjdCB0aGUgYXJlYUJhc2UgdmFsdWUgaW50byBzY3JlZW4gY29vcmRpbmF0ZXNcbiAgICAgICAgdmFyIGFyZWFCYXNlUHJvamVjdGVkID0gY2hhcnRSZWN0LnkxIC0gYXhpc1kucHJvamVjdFZhbHVlKGFyZWFCYXNlKTtcblxuICAgICAgICAvLyBJbiBvcmRlciB0byBmb3JtIHRoZSBhcmVhIHdlJ2xsIGZpcnN0IHNwbGl0IHRoZSBwYXRoIGJ5IG1vdmUgY29tbWFuZHMgc28gd2UgY2FuIGNodW5rIGl0IHVwIGludG8gc2VnbWVudHNcbiAgICAgICAgcGF0aC5zcGxpdEJ5Q29tbWFuZCgnTScpLmZpbHRlcihmdW5jdGlvbiBvbmx5U29saWRTZWdtZW50cyhwYXRoU2VnbWVudCkge1xuICAgICAgICAgIC8vIFdlIGZpbHRlciBvbmx5IFwic29saWRcIiBzZWdtZW50cyB0aGF0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBwb2ludC4gT3RoZXJ3aXNlIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYW4gYXJlYVxuICAgICAgICAgIHJldHVybiBwYXRoU2VnbWVudC5wYXRoRWxlbWVudHMubGVuZ3RoID4gMTtcbiAgICAgICAgfSkubWFwKGZ1bmN0aW9uIGNvbnZlcnRUb0FyZWEoc29saWRQYXRoU2VnbWVudHMpIHtcbiAgICAgICAgICAvLyBSZWNlaXZpbmcgdGhlIGZpbHRlcmVkIHNvbGlkIHBhdGggc2VnbWVudHMgd2UgY2FuIG5vdyBjb252ZXJ0IHRob3NlIHNlZ21lbnRzIGludG8gZmlsbCBhcmVhc1xuICAgICAgICAgIHZhciBmaXJzdEVsZW1lbnQgPSBzb2xpZFBhdGhTZWdtZW50cy5wYXRoRWxlbWVudHNbMF07XG4gICAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gc29saWRQYXRoU2VnbWVudHMucGF0aEVsZW1lbnRzW3NvbGlkUGF0aFNlZ21lbnRzLnBhdGhFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIC8vIENsb25pbmcgdGhlIHNvbGlkIHBhdGggc2VnbWVudCB3aXRoIGNsb3Npbmcgb3B0aW9uIGFuZCByZW1vdmluZyB0aGUgZmlyc3QgbW92ZSBjb21tYW5kIGZyb20gdGhlIGNsb25lXG4gICAgICAgICAgLy8gV2UgdGhlbiBpbnNlcnQgYSBuZXcgbW92ZSB0aGF0IHNob3VsZCBzdGFydCBhdCB0aGUgYXJlYSBiYXNlIGFuZCBkcmF3IGEgc3RyYWlnaHQgbGluZSB1cCBvciBkb3duXG4gICAgICAgICAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0aCB3ZSBhZGQgYW4gYWRkaXRpb25hbCBzdHJhaWdodCBsaW5lIHRvIHRoZSBwcm9qZWN0ZWQgYXJlYSBiYXNlIHZhbHVlXG4gICAgICAgICAgLy8gQXMgdGhlIGNsb3Npbmcgb3B0aW9uIGlzIHNldCBvdXIgcGF0aCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkXG4gICAgICAgICAgcmV0dXJuIHNvbGlkUGF0aFNlZ21lbnRzLmNsb25lKHRydWUpXG4gICAgICAgICAgICAucG9zaXRpb24oMClcbiAgICAgICAgICAgIC5yZW1vdmUoMSlcbiAgICAgICAgICAgIC5tb3ZlKGZpcnN0RWxlbWVudC54LCBhcmVhQmFzZVByb2plY3RlZClcbiAgICAgICAgICAgIC5saW5lKGZpcnN0RWxlbWVudC54LCBmaXJzdEVsZW1lbnQueSlcbiAgICAgICAgICAgIC5wb3NpdGlvbihzb2xpZFBhdGhTZWdtZW50cy5wYXRoRWxlbWVudHMubGVuZ3RoICsgMSlcbiAgICAgICAgICAgIC5saW5lKGxhc3RFbGVtZW50LngsIGFyZWFCYXNlUHJvamVjdGVkKTtcblxuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIGNyZWF0ZUFyZWEoYXJlYVBhdGgpIHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBvZiBvdXIgbmV3bHkgY3JlYXRlZCBhcmVhIHBhdGhzLCB3ZSdsbCBub3cgY3JlYXRlIHBhdGggZWxlbWVudHMgYnkgc3RyaW5naWZ5aW5nIG91ciBwYXRoIG9iamVjdHNcbiAgICAgICAgICAvLyBhbmQgYWRkaW5nIHRoZSBjcmVhdGVkIERPTSBlbGVtZW50cyB0byB0aGUgY29ycmVjdCBzZXJpZXMgZ3JvdXBcbiAgICAgICAgICB2YXIgYXJlYSA9IHNlcmllc0VsZW1lbnQuZWxlbSgncGF0aCcsIHtcbiAgICAgICAgICAgIGQ6IGFyZWFQYXRoLnN0cmluZ2lmeSgpXG4gICAgICAgICAgfSwgb3B0aW9ucy5jbGFzc05hbWVzLmFyZWEsIHRydWUpO1xuXG4gICAgICAgICAgLy8gRW1pdCBhbiBldmVudCBmb3IgZWFjaCBhcmVhIHRoYXQgd2FzIGRyYXduXG4gICAgICAgICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCgnZHJhdycsIHtcbiAgICAgICAgICAgIHR5cGU6ICdhcmVhJyxcbiAgICAgICAgICAgIHZhbHVlczogZGF0YS5ub3JtYWxpemVkLnNlcmllc1tzZXJpZXNJbmRleF0sXG4gICAgICAgICAgICBwYXRoOiBhcmVhUGF0aC5jbG9uZSgpLFxuICAgICAgICAgICAgc2VyaWVzOiBzZXJpZXMsXG4gICAgICAgICAgICBzZXJpZXNJbmRleDogc2VyaWVzSW5kZXgsXG4gICAgICAgICAgICBheGlzWDogYXhpc1gsXG4gICAgICAgICAgICBheGlzWTogYXhpc1ksXG4gICAgICAgICAgICBjaGFydFJlY3Q6IGNoYXJ0UmVjdCxcbiAgICAgICAgICAgIGluZGV4OiBzZXJpZXNJbmRleCxcbiAgICAgICAgICAgIGdyb3VwOiBzZXJpZXNFbGVtZW50LFxuICAgICAgICAgICAgZWxlbWVudDogYXJlYVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgfVxuICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdjcmVhdGVkJywge1xuICAgICAgYm91bmRzOiBheGlzWS5ib3VuZHMsXG4gICAgICBjaGFydFJlY3Q6IGNoYXJ0UmVjdCxcbiAgICAgIGF4aXNYOiBheGlzWCxcbiAgICAgIGF4aXNZOiBheGlzWSxcbiAgICAgIHN2ZzogdGhpcy5zdmcsXG4gICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIG5ldyBsaW5lIGNoYXJ0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuTGluZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBxdWVyeSBBIHNlbGVjdG9yIHF1ZXJ5IHN0cmluZyBvciBkaXJlY3RseSBhIERPTSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFRoZSBkYXRhIG9iamVjdCB0aGF0IG5lZWRzIHRvIGNvbnNpc3Qgb2YgYSBsYWJlbHMgYW5kIGEgc2VyaWVzIGFycmF5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgb2JqZWN0IHdpdGggb3B0aW9ucyB0aGF0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMuIENoZWNrIHRoZSBleGFtcGxlcyBmb3IgYSBkZXRhaWxlZCBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzcG9uc2l2ZU9wdGlvbnNdIFNwZWNpZnkgYW4gYXJyYXkgb2YgcmVzcG9uc2l2ZSBvcHRpb24gYXJyYXlzIHdoaWNoIGFyZSBhIG1lZGlhIHF1ZXJ5IGFuZCBvcHRpb25zIG9iamVjdCBwYWlyID0+IFtbbWVkaWFRdWVyeVN0cmluZywgb3B0aW9uc09iamVjdF0sW21vcmUuLi5dXVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aGljaCBleHBvc2VzIHRoZSBBUEkgZm9yIHRoZSBjcmVhdGVkIGNoYXJ0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhIHNpbXBsZSBsaW5lIGNoYXJ0XG4gICAqIHZhciBkYXRhID0ge1xuICAgKiAgIC8vIEEgbGFiZWxzIGFycmF5IHRoYXQgY2FuIGNvbnRhaW4gYW55IHNvcnQgb2YgdmFsdWVzXG4gICAqICAgbGFiZWxzOiBbJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknXSxcbiAgICogICAvLyBPdXIgc2VyaWVzIGFycmF5IHRoYXQgY29udGFpbnMgc2VyaWVzIG9iamVjdHMgb3IgaW4gdGhpcyBjYXNlIHNlcmllcyBkYXRhIGFycmF5c1xuICAgKiAgIHNlcmllczogW1xuICAgKiAgICAgWzUsIDIsIDQsIDIsIDBdXG4gICAqICAgXVxuICAgKiB9O1xuICAgKlxuICAgKiAvLyBBcyBvcHRpb25zIHdlIGN1cnJlbnRseSBvbmx5IHNldCBhIHN0YXRpYyBzaXplIG9mIDMwMHgyMDAgcHhcbiAgICogdmFyIG9wdGlvbnMgPSB7XG4gICAqICAgd2lkdGg6ICczMDBweCcsXG4gICAqICAgaGVpZ2h0OiAnMjAwcHgnXG4gICAqIH07XG4gICAqXG4gICAqIC8vIEluIHRoZSBnbG9iYWwgbmFtZSBzcGFjZSBDaGFydGlzdCB3ZSBjYWxsIHRoZSBMaW5lIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgYSBsaW5lIGNoYXJ0LiBBcyBhIGZpcnN0IHBhcmFtZXRlciB3ZSBwYXNzIGluIGEgc2VsZWN0b3Igd2hlcmUgd2Ugd291bGQgbGlrZSB0byBnZXQgb3VyIGNoYXJ0IGNyZWF0ZWQuIFNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIGFjdHVhbCBkYXRhIG9iamVjdCBhbmQgYXMgYSB0aGlyZCBwYXJhbWV0ZXIgd2UgcGFzcyBpbiBvdXIgb3B0aW9uc1xuICAgKiBuZXcgQ2hhcnRpc3QuTGluZSgnLmN0LWNoYXJ0JywgZGF0YSwgb3B0aW9ucyk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFVzZSBzcGVjaWZpYyBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIHdpdGggY29uZmlndXJhdGlvbiBmcm9tIHRoZSBDaGFydGlzdC5JbnRlcnBvbGF0aW9uIG1vZHVsZVxuICAgKlxuICAgKiB2YXIgY2hhcnQgPSBuZXcgQ2hhcnRpc3QuTGluZSgnLmN0LWNoYXJ0Jywge1xuICAgKiAgIGxhYmVsczogWzEsIDIsIDMsIDQsIDVdLFxuICAgKiAgIHNlcmllczogW1xuICAgKiAgICAgWzEsIDEsIDgsIDEsIDddXG4gICAqICAgXVxuICAgKiB9LCB7XG4gICAqICAgbGluZVNtb290aDogQ2hhcnRpc3QuSW50ZXJwb2xhdGlvbi5jYXJkaW5hbCh7XG4gICAqICAgICB0ZW5zaW9uOiAwLjJcbiAgICogICB9KVxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ3JlYXRlIGEgbGluZSBjaGFydCB3aXRoIHJlc3BvbnNpdmUgb3B0aW9uc1xuICAgKlxuICAgKiB2YXIgZGF0YSA9IHtcbiAgICogICAvLyBBIGxhYmVscyBhcnJheSB0aGF0IGNhbiBjb250YWluIGFueSBzb3J0IG9mIHZhbHVlc1xuICAgKiAgIGxhYmVsczogWydNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5J10sXG4gICAqICAgLy8gT3VyIHNlcmllcyBhcnJheSB0aGF0IGNvbnRhaW5zIHNlcmllcyBvYmplY3RzIG9yIGluIHRoaXMgY2FzZSBzZXJpZXMgZGF0YSBhcnJheXNcbiAgICogICBzZXJpZXM6IFtcbiAgICogICAgIFs1LCAyLCA0LCAyLCAwXVxuICAgKiAgIF1cbiAgICogfTtcbiAgICpcbiAgICogLy8gSW4gYWRkaXRpb24gdG8gdGhlIHJlZ3VsYXIgb3B0aW9ucyB3ZSBzcGVjaWZ5IHJlc3BvbnNpdmUgb3B0aW9uIG92ZXJyaWRlcyB0aGF0IHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29uZmlndXRhdGlvbiBiYXNlZCBvbiB0aGUgbWF0Y2hpbmcgbWVkaWEgcXVlcmllcy5cbiAgICogdmFyIHJlc3BvbnNpdmVPcHRpb25zID0gW1xuICAgKiAgIFsnc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NDFweCkgYW5kIChtYXgtd2lkdGg6IDEwMjRweCknLCB7XG4gICAqICAgICBzaG93UG9pbnQ6IGZhbHNlLFxuICAgKiAgICAgYXhpc1g6IHtcbiAgICogICAgICAgbGFiZWxJbnRlcnBvbGF0aW9uRm5jOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgKiAgICAgICAgIC8vIFdpbGwgcmV0dXJuIE1vbiwgVHVlLCBXZWQgZXRjLiBvbiBtZWRpdW0gc2NyZWVuc1xuICAgKiAgICAgICAgIHJldHVybiB2YWx1ZS5zbGljZSgwLCAzKTtcbiAgICogICAgICAgfVxuICAgKiAgICAgfVxuICAgKiAgIH1dLFxuICAgKiAgIFsnc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCknLCB7XG4gICAqICAgICBzaG93TGluZTogZmFsc2UsXG4gICAqICAgICBheGlzWDoge1xuICAgKiAgICAgICBsYWJlbEludGVycG9sYXRpb25GbmM6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgICAgLy8gV2lsbCByZXR1cm4gTSwgVCwgVyBldGMuIG9uIHNtYWxsIHNjcmVlbnNcbiAgICogICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAqICAgICAgIH1cbiAgICogICAgIH1cbiAgICogICB9XVxuICAgKiBdO1xuICAgKlxuICAgKiBuZXcgQ2hhcnRpc3QuTGluZSgnLmN0LWNoYXJ0JywgZGF0YSwgbnVsbCwgcmVzcG9uc2l2ZU9wdGlvbnMpO1xuICAgKlxuICAgKi9cbiAgZnVuY3Rpb24gTGluZShxdWVyeSwgZGF0YSwgb3B0aW9ucywgcmVzcG9uc2l2ZU9wdGlvbnMpIHtcbiAgICBDaGFydGlzdC5MaW5lLnN1cGVyLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YSxcbiAgICAgIGRlZmF1bHRPcHRpb25zLFxuICAgICAgQ2hhcnRpc3QuZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyksXG4gICAgICByZXNwb25zaXZlT3B0aW9ucyk7XG4gIH1cblxuICAvLyBDcmVhdGluZyBsaW5lIGNoYXJ0IHR5cGUgaW4gQ2hhcnRpc3QgbmFtZXNwYWNlXG4gIENoYXJ0aXN0LkxpbmUgPSBDaGFydGlzdC5CYXNlLmV4dGVuZCh7XG4gICAgY29uc3RydWN0b3I6IExpbmUsXG4gICAgY3JlYXRlQ2hhcnQ6IGNyZWF0ZUNoYXJ0XG4gIH0pO1xuXG59KHRoaXMgfHwgZ2xvYmFsLCBDaGFydGlzdCkpO1xuOy8qKlxuICogVGhlIGJhciBjaGFydCBtb2R1bGUgb2YgQ2hhcnRpc3QgdGhhdCBjYW4gYmUgdXNlZCB0byBkcmF3IHVuaXBvbGFyIG9yIGJpcG9sYXIgYmFyIGFuZCBncm91cGVkIGJhciBjaGFydHMuXG4gKlxuICogQG1vZHVsZSBDaGFydGlzdC5CYXJcbiAqL1xuLyogZ2xvYmFsIENoYXJ0aXN0ICovXG4oZnVuY3Rpb24oZ2xvYmFsUm9vdCwgQ2hhcnRpc3Qpe1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IG9wdGlvbnMgaW4gYmFyIGNoYXJ0cy4gRXhwYW5kIHRoZSBjb2RlIHZpZXcgdG8gc2VlIGEgZGV0YWlsZWQgbGlzdCBvZiBvcHRpb25zIHdpdGggY29tbWVudHMuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5CYXJcbiAgICovXG4gIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAvLyBPcHRpb25zIGZvciBYLUF4aXNcbiAgICBheGlzWDoge1xuICAgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgY2hhcnQgZHJhd2luZyBhcmVhIHRvIHRoZSBib3JkZXIgb2YgdGhlIGNvbnRhaW5lclxuICAgICAgb2Zmc2V0OiAzMCxcbiAgICAgIC8vIFBvc2l0aW9uIHdoZXJlIGxhYmVscyBhcmUgcGxhY2VkLiBDYW4gYmUgc2V0IHRvIGBzdGFydGAgb3IgYGVuZGAgd2hlcmUgYHN0YXJ0YCBpcyBlcXVpdmFsZW50IHRvIGxlZnQgb3IgdG9wIG9uIHZlcnRpY2FsIGF4aXMgYW5kIGBlbmRgIGlzIGVxdWl2YWxlbnQgdG8gcmlnaHQgb3IgYm90dG9tIG9uIGhvcml6b250YWwgYXhpcy5cbiAgICAgIHBvc2l0aW9uOiAnZW5kJyxcbiAgICAgIC8vIEFsbG93cyB5b3UgdG8gY29ycmVjdCBsYWJlbCBwb3NpdGlvbmluZyBvbiB0aGlzIGF4aXMgYnkgcG9zaXRpdmUgb3IgbmVnYXRpdmUgeCBhbmQgeSBvZmZzZXQuXG4gICAgICBsYWJlbE9mZnNldDoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgLy8gSWYgbGFiZWxzIHNob3VsZCBiZSBzaG93biBvciBub3RcbiAgICAgIHNob3dMYWJlbDogdHJ1ZSxcbiAgICAgIC8vIElmIHRoZSBheGlzIGdyaWQgc2hvdWxkIGJlIGRyYXduIG9yIG5vdFxuICAgICAgc2hvd0dyaWQ6IHRydWUsXG4gICAgICAvLyBJbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHlvdSB0byBpbnRlcmNlcHQgdGhlIHZhbHVlIGZyb20gdGhlIGF4aXMgbGFiZWxcbiAgICAgIGxhYmVsSW50ZXJwb2xhdGlvbkZuYzogQ2hhcnRpc3Qubm9vcCxcbiAgICAgIC8vIFRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIHdpZHRoIGluIHBpeGVsIG9mIHRoZSBzY2FsZSBzdGVwc1xuICAgICAgc2NhbGVNaW5TcGFjZTogMzAsXG4gICAgICAvLyBVc2Ugb25seSBpbnRlZ2VyIHZhbHVlcyAod2hvbGUgbnVtYmVycykgZm9yIHRoZSBzY2FsZSBzdGVwc1xuICAgICAgb25seUludGVnZXI6IGZhbHNlXG4gICAgfSxcbiAgICAvLyBPcHRpb25zIGZvciBZLUF4aXNcbiAgICBheGlzWToge1xuICAgICAgLy8gVGhlIG9mZnNldCBvZiB0aGUgY2hhcnQgZHJhd2luZyBhcmVhIHRvIHRoZSBib3JkZXIgb2YgdGhlIGNvbnRhaW5lclxuICAgICAgb2Zmc2V0OiA0MCxcbiAgICAgIC8vIFBvc2l0aW9uIHdoZXJlIGxhYmVscyBhcmUgcGxhY2VkLiBDYW4gYmUgc2V0IHRvIGBzdGFydGAgb3IgYGVuZGAgd2hlcmUgYHN0YXJ0YCBpcyBlcXVpdmFsZW50IHRvIGxlZnQgb3IgdG9wIG9uIHZlcnRpY2FsIGF4aXMgYW5kIGBlbmRgIGlzIGVxdWl2YWxlbnQgdG8gcmlnaHQgb3IgYm90dG9tIG9uIGhvcml6b250YWwgYXhpcy5cbiAgICAgIHBvc2l0aW9uOiAnc3RhcnQnLFxuICAgICAgLy8gQWxsb3dzIHlvdSB0byBjb3JyZWN0IGxhYmVsIHBvc2l0aW9uaW5nIG9uIHRoaXMgYXhpcyBieSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSB4IGFuZCB5IG9mZnNldC5cbiAgICAgIGxhYmVsT2Zmc2V0OiB7XG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDBcbiAgICAgIH0sXG4gICAgICAvLyBJZiBsYWJlbHMgc2hvdWxkIGJlIHNob3duIG9yIG5vdFxuICAgICAgc2hvd0xhYmVsOiB0cnVlLFxuICAgICAgLy8gSWYgdGhlIGF4aXMgZ3JpZCBzaG91bGQgYmUgZHJhd24gb3Igbm90XG4gICAgICBzaG93R3JpZDogdHJ1ZSxcbiAgICAgIC8vIEludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBhbGxvd3MgeW91IHRvIGludGVyY2VwdCB0aGUgdmFsdWUgZnJvbSB0aGUgYXhpcyBsYWJlbFxuICAgICAgbGFiZWxJbnRlcnBvbGF0aW9uRm5jOiBDaGFydGlzdC5ub29wLFxuICAgICAgLy8gVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIG1pbmltdW0gaGVpZ2h0IGluIHBpeGVsIG9mIHRoZSBzY2FsZSBzdGVwc1xuICAgICAgc2NhbGVNaW5TcGFjZTogMjAsXG4gICAgICAvLyBVc2Ugb25seSBpbnRlZ2VyIHZhbHVlcyAod2hvbGUgbnVtYmVycykgZm9yIHRoZSBzY2FsZSBzdGVwc1xuICAgICAgb25seUludGVnZXI6IGZhbHNlXG4gICAgfSxcbiAgICAvLyBTcGVjaWZ5IGEgZml4ZWQgd2lkdGggZm9yIHRoZSBjaGFydCBhcyBhIHN0cmluZyAoaS5lLiAnMTAwcHgnIG9yICc1MCUnKVxuICAgIHdpZHRoOiB1bmRlZmluZWQsXG4gICAgLy8gU3BlY2lmeSBhIGZpeGVkIGhlaWdodCBmb3IgdGhlIGNoYXJ0IGFzIGEgc3RyaW5nIChpLmUuICcxMDBweCcgb3IgJzUwJScpXG4gICAgaGVpZ2h0OiB1bmRlZmluZWQsXG4gICAgLy8gT3ZlcnJpZGluZyB0aGUgbmF0dXJhbCBoaWdoIG9mIHRoZSBjaGFydCBhbGxvd3MgeW91IHRvIHpvb20gaW4gb3IgbGltaXQgdGhlIGNoYXJ0cyBoaWdoZXN0IGRpc3BsYXllZCB2YWx1ZVxuICAgIGhpZ2g6IHVuZGVmaW5lZCxcbiAgICAvLyBPdmVycmlkaW5nIHRoZSBuYXR1cmFsIGxvdyBvZiB0aGUgY2hhcnQgYWxsb3dzIHlvdSB0byB6b29tIGluIG9yIGxpbWl0IHRoZSBjaGFydHMgbG93ZXN0IGRpc3BsYXllZCB2YWx1ZVxuICAgIGxvdzogdW5kZWZpbmVkLFxuICAgIC8vIFVubGVzcyBsb3cvaGlnaCBhcmUgZXhwbGljaXRseSBzZXQsIGJhciBjaGFydCB3aWxsIGJlIGNlbnRlcmVkIGF0IHplcm8gYnkgZGVmYXVsdC4gU2V0IHJlZmVyZW5jZVZhbHVlIHRvIG51bGwgdG8gYXV0byBzY2FsZS5cbiAgICByZWZlcmVuY2VWYWx1ZTogMCxcbiAgICAvLyBQYWRkaW5nIG9mIHRoZSBjaGFydCBkcmF3aW5nIGFyZWEgdG8gdGhlIGNvbnRhaW5lciBlbGVtZW50IGFuZCBsYWJlbHMgYXMgYSBudW1iZXIgb3IgcGFkZGluZyBvYmplY3Qge3RvcDogNSwgcmlnaHQ6IDUsIGJvdHRvbTogNSwgbGVmdDogNX1cbiAgICBjaGFydFBhZGRpbmc6IHtcbiAgICAgIHRvcDogMTUsXG4gICAgICByaWdodDogMTUsXG4gICAgICBib3R0b206IDUsXG4gICAgICBsZWZ0OiAxMFxuICAgIH0sXG4gICAgLy8gU3BlY2lmeSB0aGUgZGlzdGFuY2UgaW4gcGl4ZWwgb2YgYmFycyBpbiBhIGdyb3VwXG4gICAgc2VyaWVzQmFyRGlzdGFuY2U6IDE1LFxuICAgIC8vIElmIHNldCB0byB0cnVlIHRoaXMgcHJvcGVydHkgd2lsbCBjYXVzZSB0aGUgc2VyaWVzIGJhcnMgdG8gYmUgc3RhY2tlZC4gQ2hlY2sgdGhlIGBzdGFja01vZGVgIG9wdGlvbiBmb3IgZnVydGhlciBzdGFja2luZyBvcHRpb25zLlxuICAgIHN0YWNrQmFyczogZmFsc2UsXG4gICAgLy8gSWYgc2V0IHRvICdvdmVybGFwJyB0aGlzIHByb3BlcnR5IHdpbGwgZm9yY2UgdGhlIHN0YWNrZWQgYmFycyB0byBkcmF3IGZyb20gdGhlIHplcm8gbGluZS5cbiAgICAvLyBJZiBzZXQgdG8gJ2FjY3VtdWxhdGUnIHRoaXMgcHJvcGVydHkgd2lsbCBmb3JtIGEgdG90YWwgZm9yIGVhY2ggc2VyaWVzIHBvaW50LiBUaGlzIHdpbGwgYWxzbyBpbmZsdWVuY2UgdGhlIHktYXhpcyBhbmQgdGhlIG92ZXJhbGwgYm91bmRzIG9mIHRoZSBjaGFydC4gSW4gc3RhY2tlZCBtb2RlIHRoZSBzZXJpZXNCYXJEaXN0YW5jZSBwcm9wZXJ0eSB3aWxsIGhhdmUgbm8gZWZmZWN0LlxuICAgIHN0YWNrTW9kZTogJ2FjY3VtdWxhdGUnLFxuICAgIC8vIEludmVydHMgdGhlIGF4ZXMgb2YgdGhlIGJhciBjaGFydCBpbiBvcmRlciB0byBkcmF3IGEgaG9yaXpvbnRhbCBiYXIgY2hhcnQuIEJlIGF3YXJlIHRoYXQgeW91IGFsc28gbmVlZCB0byBpbnZlcnQgeW91ciBheGlzIHNldHRpbmdzIGFzIHRoZSBZIEF4aXMgd2lsbCBub3cgZGlzcGxheSB0aGUgbGFiZWxzIGFuZCB0aGUgWCBBeGlzIHRoZSB2YWx1ZXMuXG4gICAgaG9yaXpvbnRhbEJhcnM6IGZhbHNlLFxuICAgIC8vIElmIHNldCB0byB0cnVlIHRoZW4gZWFjaCBiYXIgd2lsbCByZXByZXNlbnQgYSBzZXJpZXMgYW5kIHRoZSBkYXRhIGFycmF5IGlzIGV4cGVjdGVkIHRvIGJlIGEgb25lIGRpbWVuc2lvbmFsIGFycmF5IG9mIGRhdGEgdmFsdWVzIHJhdGhlciB0aGFuIGEgc2VyaWVzIGFycmF5IG9mIHNlcmllcy4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGJhciBjaGFydCBzaG91bGQgcmVwcmVzZW50IGEgcHJvZmlsZSByYXRoZXIgdGhhbiBzb21lIGRhdGEgb3ZlciB0aW1lLlxuICAgIGRpc3RyaWJ1dGVTZXJpZXM6IGZhbHNlLFxuICAgIC8vIElmIHRydWUgdGhlIHdob2xlIGRhdGEgaXMgcmV2ZXJzZWQgaW5jbHVkaW5nIGxhYmVscywgdGhlIHNlcmllcyBvcmRlciBhcyB3ZWxsIGFzIHRoZSB3aG9sZSBzZXJpZXMgZGF0YSBhcnJheXMuXG4gICAgcmV2ZXJzZURhdGE6IGZhbHNlLFxuICAgIC8vIElmIHRoZSBiYXIgY2hhcnQgc2hvdWxkIGFkZCBhIGJhY2tncm91bmQgZmlsbCB0byB0aGUgLmN0LWdyaWRzIGdyb3VwLlxuICAgIHNob3dHcmlkQmFja2dyb3VuZDogZmFsc2UsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNsYXNzIG5hbWVzIHRoYXQgZ2V0IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIFNWRyBzdHJ1Y3R1cmUgb2YgdGhlIGNoYXJ0XG4gICAgY2xhc3NOYW1lczoge1xuICAgICAgY2hhcnQ6ICdjdC1jaGFydC1iYXInLFxuICAgICAgaG9yaXpvbnRhbEJhcnM6ICdjdC1ob3Jpem9udGFsLWJhcnMnLFxuICAgICAgbGFiZWw6ICdjdC1sYWJlbCcsXG4gICAgICBsYWJlbEdyb3VwOiAnY3QtbGFiZWxzJyxcbiAgICAgIHNlcmllczogJ2N0LXNlcmllcycsXG4gICAgICBiYXI6ICdjdC1iYXInLFxuICAgICAgZ3JpZDogJ2N0LWdyaWQnLFxuICAgICAgZ3JpZEdyb3VwOiAnY3QtZ3JpZHMnLFxuICAgICAgZ3JpZEJhY2tncm91bmQ6ICdjdC1ncmlkLWJhY2tncm91bmQnLFxuICAgICAgdmVydGljYWw6ICdjdC12ZXJ0aWNhbCcsXG4gICAgICBob3Jpem9udGFsOiAnY3QtaG9yaXpvbnRhbCcsXG4gICAgICBzdGFydDogJ2N0LXN0YXJ0JyxcbiAgICAgIGVuZDogJ2N0LWVuZCdcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgY2hhcnRcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0KG9wdGlvbnMpIHtcbiAgICB2YXIgZGF0YTtcbiAgICB2YXIgaGlnaExvdztcblxuICAgIGlmKG9wdGlvbnMuZGlzdHJpYnV0ZVNlcmllcykge1xuICAgICAgZGF0YSA9IENoYXJ0aXN0Lm5vcm1hbGl6ZURhdGEodGhpcy5kYXRhLCBvcHRpb25zLnJldmVyc2VEYXRhLCBvcHRpb25zLmhvcml6b250YWxCYXJzID8gJ3gnIDogJ3knKTtcbiAgICAgIGRhdGEubm9ybWFsaXplZC5zZXJpZXMgPSBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLm1hcChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gQ2hhcnRpc3Qubm9ybWFsaXplRGF0YSh0aGlzLmRhdGEsIG9wdGlvbnMucmV2ZXJzZURhdGEsIG9wdGlvbnMuaG9yaXpvbnRhbEJhcnMgPyAneCcgOiAneScpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBuZXcgc3ZnIGVsZW1lbnRcbiAgICB0aGlzLnN2ZyA9IENoYXJ0aXN0LmNyZWF0ZVN2ZyhcbiAgICAgIHRoaXMuY29udGFpbmVyLFxuICAgICAgb3B0aW9ucy53aWR0aCxcbiAgICAgIG9wdGlvbnMuaGVpZ2h0LFxuICAgICAgb3B0aW9ucy5jbGFzc05hbWVzLmNoYXJ0ICsgKG9wdGlvbnMuaG9yaXpvbnRhbEJhcnMgPyAnICcgKyBvcHRpb25zLmNsYXNzTmFtZXMuaG9yaXpvbnRhbEJhcnMgOiAnJylcbiAgICApO1xuXG4gICAgLy8gRHJhd2luZyBncm91cHMgaW4gY29ycmVjdCBvcmRlclxuICAgIHZhciBncmlkR3JvdXAgPSB0aGlzLnN2Zy5lbGVtKCdnJykuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc05hbWVzLmdyaWRHcm91cCk7XG4gICAgdmFyIHNlcmllc0dyb3VwID0gdGhpcy5zdmcuZWxlbSgnZycpO1xuICAgIHZhciBsYWJlbEdyb3VwID0gdGhpcy5zdmcuZWxlbSgnZycpLmFkZENsYXNzKG9wdGlvbnMuY2xhc3NOYW1lcy5sYWJlbEdyb3VwKTtcblxuICAgIGlmKG9wdGlvbnMuc3RhY2tCYXJzICYmIGRhdGEubm9ybWFsaXplZC5zZXJpZXMubGVuZ3RoICE9PSAwKSB7XG5cbiAgICAgIC8vIElmIHN0YWNrZWQgYmFycyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgaGlnaCBsb3cgZnJvbSBzdGFja2VkIHZhbHVlcyBmcm9tIGVhY2ggc2VyaWVzXG4gICAgICB2YXIgc2VyaWFsU3VtcyA9IENoYXJ0aXN0LnNlcmlhbE1hcChkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLCBmdW5jdGlvbiBzZXJpYWxTdW1zKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKS5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pLnJlZHVjZShmdW5jdGlvbihwcmV2LCBjdXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHByZXYueCArIChjdXJyICYmIGN1cnIueCkgfHwgMCxcbiAgICAgICAgICAgIHk6IHByZXYueSArIChjdXJyICYmIGN1cnIueSkgfHwgMFxuICAgICAgICAgIH07XG4gICAgICAgIH0sIHt4OiAwLCB5OiAwfSk7XG4gICAgICB9KTtcblxuICAgICAgaGlnaExvdyA9IENoYXJ0aXN0LmdldEhpZ2hMb3coW3NlcmlhbFN1bXNdLCBvcHRpb25zLCBvcHRpb25zLmhvcml6b250YWxCYXJzID8gJ3gnIDogJ3knKTtcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIGhpZ2hMb3cgPSBDaGFydGlzdC5nZXRIaWdoTG93KGRhdGEubm9ybWFsaXplZC5zZXJpZXMsIG9wdGlvbnMsIG9wdGlvbnMuaG9yaXpvbnRhbEJhcnMgPyAneCcgOiAneScpO1xuICAgIH1cblxuICAgIC8vIE92ZXJyaWRlcyBvZiBoaWdoIC8gbG93IGZyb20gc2V0dGluZ3NcbiAgICBoaWdoTG93LmhpZ2ggPSArb3B0aW9ucy5oaWdoIHx8IChvcHRpb25zLmhpZ2ggPT09IDAgPyAwIDogaGlnaExvdy5oaWdoKTtcbiAgICBoaWdoTG93LmxvdyA9ICtvcHRpb25zLmxvdyB8fCAob3B0aW9ucy5sb3cgPT09IDAgPyAwIDogaGlnaExvdy5sb3cpO1xuXG4gICAgdmFyIGNoYXJ0UmVjdCA9IENoYXJ0aXN0LmNyZWF0ZUNoYXJ0UmVjdCh0aGlzLnN2Zywgb3B0aW9ucywgZGVmYXVsdE9wdGlvbnMucGFkZGluZyk7XG5cbiAgICB2YXIgdmFsdWVBeGlzLFxuICAgICAgbGFiZWxBeGlzVGlja3MsXG4gICAgICBsYWJlbEF4aXMsXG4gICAgICBheGlzWCxcbiAgICAgIGF4aXNZO1xuXG4gICAgLy8gV2UgbmVlZCB0byBzZXQgc3RlcCBjb3VudCBiYXNlZCBvbiBzb21lIG9wdGlvbnMgY29tYmluYXRpb25zXG4gICAgaWYob3B0aW9ucy5kaXN0cmlidXRlU2VyaWVzICYmIG9wdGlvbnMuc3RhY2tCYXJzKSB7XG4gICAgICAvLyBJZiBkaXN0cmlidXRlZCBzZXJpZXMgYXJlIGVuYWJsZWQgYW5kIGJhcnMgbmVlZCB0byBiZSBzdGFja2VkLCB3ZSdsbCBvbmx5IGhhdmUgb25lIGJhciBhbmQgdGhlcmVmb3JlIHNob3VsZFxuICAgICAgLy8gdXNlIG9ubHkgdGhlIGZpcnN0IGxhYmVsIGZvciB0aGUgc3RlcCBheGlzXG4gICAgICBsYWJlbEF4aXNUaWNrcyA9IGRhdGEubm9ybWFsaXplZC5sYWJlbHMuc2xpY2UoMCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGRpc3RyaWJ1dGVkIHNlcmllcyBhcmUgZW5hYmxlZCBidXQgc3RhY2tlZCBiYXJzIGFyZW4ndCwgd2Ugc2hvdWxkIHVzZSB0aGUgc2VyaWVzIGxhYmVsc1xuICAgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgYSByZWd1bGFyIGJhciBjaGFydCB3aXRoIHR3byBkaW1lbnNpb25hbCBzZXJpZXMgZGF0YSwgd2UganVzdCB1c2UgdGhlIGxhYmVscyBhcnJheVxuICAgICAgLy8gYXMgdGhlIGJhcnMgYXJlIG5vcm1hbGl6ZWRcbiAgICAgIGxhYmVsQXhpc1RpY2tzID0gZGF0YS5ub3JtYWxpemVkLmxhYmVscztcbiAgICB9XG5cbiAgICAvLyBTZXQgbGFiZWxBeGlzIGFuZCB2YWx1ZUF4aXMgYmFzZWQgb24gdGhlIGhvcml6b250YWxCYXJzIHNldHRpbmcuIFRoaXMgc2V0dGluZyB3aWxsIGZsaXAgdGhlIGF4ZXMgaWYgbmVjZXNzYXJ5LlxuICAgIGlmKG9wdGlvbnMuaG9yaXpvbnRhbEJhcnMpIHtcbiAgICAgIGlmKG9wdGlvbnMuYXhpc1gudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlQXhpcyA9IGF4aXNYID0gbmV3IENoYXJ0aXN0LkF1dG9TY2FsZUF4aXMoQ2hhcnRpc3QuQXhpcy51bml0cy54LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLCBjaGFydFJlY3QsIENoYXJ0aXN0LmV4dGVuZCh7fSwgb3B0aW9ucy5heGlzWCwge1xuICAgICAgICAgIGhpZ2hMb3c6IGhpZ2hMb3csXG4gICAgICAgICAgcmVmZXJlbmNlVmFsdWU6IDBcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVBeGlzID0gYXhpc1ggPSBvcHRpb25zLmF4aXNYLnR5cGUuY2FsbChDaGFydGlzdCwgQ2hhcnRpc3QuQXhpcy51bml0cy54LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLCBjaGFydFJlY3QsIENoYXJ0aXN0LmV4dGVuZCh7fSwgb3B0aW9ucy5heGlzWCwge1xuICAgICAgICAgIGhpZ2hMb3c6IGhpZ2hMb3csXG4gICAgICAgICAgcmVmZXJlbmNlVmFsdWU6IDBcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZihvcHRpb25zLmF4aXNZLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsYWJlbEF4aXMgPSBheGlzWSA9IG5ldyBDaGFydGlzdC5TdGVwQXhpcyhDaGFydGlzdC5BeGlzLnVuaXRzLnksIGRhdGEubm9ybWFsaXplZC5zZXJpZXMsIGNoYXJ0UmVjdCwge1xuICAgICAgICAgIHRpY2tzOiBsYWJlbEF4aXNUaWNrc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhYmVsQXhpcyA9IGF4aXNZID0gb3B0aW9ucy5heGlzWS50eXBlLmNhbGwoQ2hhcnRpc3QsIENoYXJ0aXN0LkF4aXMudW5pdHMueSwgZGF0YS5ub3JtYWxpemVkLnNlcmllcywgY2hhcnRSZWN0LCBvcHRpb25zLmF4aXNZKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYob3B0aW9ucy5heGlzWC50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGFiZWxBeGlzID0gYXhpc1ggPSBuZXcgQ2hhcnRpc3QuU3RlcEF4aXMoQ2hhcnRpc3QuQXhpcy51bml0cy54LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLCBjaGFydFJlY3QsIHtcbiAgICAgICAgICB0aWNrczogbGFiZWxBeGlzVGlja3NcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsYWJlbEF4aXMgPSBheGlzWCA9IG9wdGlvbnMuYXhpc1gudHlwZS5jYWxsKENoYXJ0aXN0LCBDaGFydGlzdC5BeGlzLnVuaXRzLngsIGRhdGEubm9ybWFsaXplZC5zZXJpZXMsIGNoYXJ0UmVjdCwgb3B0aW9ucy5heGlzWCk7XG4gICAgICB9XG5cbiAgICAgIGlmKG9wdGlvbnMuYXhpc1kudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlQXhpcyA9IGF4aXNZID0gbmV3IENoYXJ0aXN0LkF1dG9TY2FsZUF4aXMoQ2hhcnRpc3QuQXhpcy51bml0cy55LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLCBjaGFydFJlY3QsIENoYXJ0aXN0LmV4dGVuZCh7fSwgb3B0aW9ucy5heGlzWSwge1xuICAgICAgICAgIGhpZ2hMb3c6IGhpZ2hMb3csXG4gICAgICAgICAgcmVmZXJlbmNlVmFsdWU6IDBcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVBeGlzID0gYXhpc1kgPSBvcHRpb25zLmF4aXNZLnR5cGUuY2FsbChDaGFydGlzdCwgQ2hhcnRpc3QuQXhpcy51bml0cy55LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLCBjaGFydFJlY3QsIENoYXJ0aXN0LmV4dGVuZCh7fSwgb3B0aW9ucy5heGlzWSwge1xuICAgICAgICAgIGhpZ2hMb3c6IGhpZ2hMb3csXG4gICAgICAgICAgcmVmZXJlbmNlVmFsdWU6IDBcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFByb2plY3RlZCAwIHBvaW50XG4gICAgdmFyIHplcm9Qb2ludCA9IG9wdGlvbnMuaG9yaXpvbnRhbEJhcnMgPyAoY2hhcnRSZWN0LngxICsgdmFsdWVBeGlzLnByb2plY3RWYWx1ZSgwKSkgOiAoY2hhcnRSZWN0LnkxIC0gdmFsdWVBeGlzLnByb2plY3RWYWx1ZSgwKSk7XG4gICAgLy8gVXNlZCB0byB0cmFjayB0aGUgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIHN0YWNrZWQgYmFyc1xuICAgIHZhciBzdGFja2VkQmFyVmFsdWVzID0gW107XG5cbiAgICBsYWJlbEF4aXMuY3JlYXRlR3JpZEFuZExhYmVscyhncmlkR3JvdXAsIGxhYmVsR3JvdXAsIHRoaXMuc3VwcG9ydHNGb3JlaWduT2JqZWN0LCBvcHRpb25zLCB0aGlzLmV2ZW50RW1pdHRlcik7XG4gICAgdmFsdWVBeGlzLmNyZWF0ZUdyaWRBbmRMYWJlbHMoZ3JpZEdyb3VwLCBsYWJlbEdyb3VwLCB0aGlzLnN1cHBvcnRzRm9yZWlnbk9iamVjdCwgb3B0aW9ucywgdGhpcy5ldmVudEVtaXR0ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc2hvd0dyaWRCYWNrZ3JvdW5kKSB7XG4gICAgICBDaGFydGlzdC5jcmVhdGVHcmlkQmFja2dyb3VuZChncmlkR3JvdXAsIGNoYXJ0UmVjdCwgb3B0aW9ucy5jbGFzc05hbWVzLmdyaWRCYWNrZ3JvdW5kLCB0aGlzLmV2ZW50RW1pdHRlcik7XG4gICAgfVxuXG4gICAgLy8gRHJhdyB0aGUgc2VyaWVzXG4gICAgZGF0YS5yYXcuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzLCBzZXJpZXNJbmRleCkge1xuICAgICAgLy8gQ2FsY3VsYXRpbmcgYmktcG9sYXIgdmFsdWUgb2YgaW5kZXggZm9yIHNlcmllc09mZnNldC4gRm9yIGkgPSAwLi40IGJpUG9sIHdpbGwgYmUgLTEuNSwgLTAuNSwgMC41LCAxLjUgZXRjLlxuICAgICAgdmFyIGJpUG9sID0gc2VyaWVzSW5kZXggLSAoZGF0YS5yYXcuc2VyaWVzLmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgIC8vIEhhbGYgb2YgdGhlIHBlcmlvZCB3aWR0aCBiZXR3ZWVuIHZlcnRpY2FsIGdyaWQgbGluZXMgdXNlZCB0byBwb3NpdGlvbiBiYXJzXG4gICAgICB2YXIgcGVyaW9kSGFsZkxlbmd0aDtcbiAgICAgIC8vIEN1cnJlbnQgc2VyaWVzIFNWRyBlbGVtZW50XG4gICAgICB2YXIgc2VyaWVzRWxlbWVudDtcblxuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgcGVyaW9kSGFsZkxlbmd0aCBiYXNlZCBvbiBzb21lIG9wdGlvbnMgY29tYmluYXRpb25zXG4gICAgICBpZihvcHRpb25zLmRpc3RyaWJ1dGVTZXJpZXMgJiYgIW9wdGlvbnMuc3RhY2tCYXJzKSB7XG4gICAgICAgIC8vIElmIGRpc3RyaWJ1dGVkIHNlcmllcyBhcmUgZW5hYmxlZCBidXQgc3RhY2tlZCBiYXJzIGFyZW4ndCwgd2UgbmVlZCB0byB1c2UgdGhlIGxlbmd0aCBvZiB0aGUgbm9ybWFpemVkRGF0YSBhcnJheVxuICAgICAgICAvLyB3aGljaCBpcyB0aGUgc2VyaWVzIGNvdW50IGFuZCBkaXZpZGUgYnkgMlxuICAgICAgICBwZXJpb2RIYWxmTGVuZ3RoID0gbGFiZWxBeGlzLmF4aXNMZW5ndGggLyBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLmxlbmd0aCAvIDI7XG4gICAgICB9IGVsc2UgaWYob3B0aW9ucy5kaXN0cmlidXRlU2VyaWVzICYmIG9wdGlvbnMuc3RhY2tCYXJzKSB7XG4gICAgICAgIC8vIElmIGRpc3RyaWJ1dGVkIHNlcmllcyBhbmQgc3RhY2tlZCBiYXJzIGFyZSBlbmFibGVkIHdlJ2xsIG9ubHkgZ2V0IG9uZSBiYXIgc28gd2Ugc2hvdWxkIGp1c3QgZGl2aWRlIHRoZSBheGlzXG4gICAgICAgIC8vIGxlbmd0aCBieSAyXG4gICAgICAgIHBlcmlvZEhhbGZMZW5ndGggPSBsYWJlbEF4aXMuYXhpc0xlbmd0aCAvIDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPbiByZWd1bGFyIGJhciBjaGFydHMgd2Ugc2hvdWxkIGp1c3QgdXNlIHRoZSBzZXJpZXMgbGVuZ3RoXG4gICAgICAgIHBlcmlvZEhhbGZMZW5ndGggPSBsYWJlbEF4aXMuYXhpc0xlbmd0aCAvIGRhdGEubm9ybWFsaXplZC5zZXJpZXNbc2VyaWVzSW5kZXhdLmxlbmd0aCAvIDI7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZGluZyB0aGUgc2VyaWVzIGdyb3VwIHRvIHRoZSBzZXJpZXMgZWxlbWVudFxuICAgICAgc2VyaWVzRWxlbWVudCA9IHNlcmllc0dyb3VwLmVsZW0oJ2cnKTtcblxuICAgICAgLy8gV3JpdGUgYXR0cmlidXRlcyB0byBzZXJpZXMgZ3JvdXAgZWxlbWVudC4gSWYgc2VyaWVzIG5hbWUgb3IgbWV0YSBpcyB1bmRlZmluZWQgdGhlIGF0dHJpYnV0ZXMgd2lsbCBub3QgYmUgd3JpdHRlblxuICAgICAgc2VyaWVzRWxlbWVudC5hdHRyKHtcbiAgICAgICAgJ2N0OnNlcmllcy1uYW1lJzogc2VyaWVzLm5hbWUsXG4gICAgICAgICdjdDptZXRhJzogQ2hhcnRpc3Quc2VyaWFsaXplKHNlcmllcy5tZXRhKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFVzZSBzZXJpZXMgY2xhc3MgZnJvbSBzZXJpZXMgZGF0YSBvciBpZiBub3Qgc2V0IGdlbmVyYXRlIG9uZVxuICAgICAgc2VyaWVzRWxlbWVudC5hZGRDbGFzcyhbXG4gICAgICAgIG9wdGlvbnMuY2xhc3NOYW1lcy5zZXJpZXMsXG4gICAgICAgIChzZXJpZXMuY2xhc3NOYW1lIHx8IG9wdGlvbnMuY2xhc3NOYW1lcy5zZXJpZXMgKyAnLScgKyBDaGFydGlzdC5hbHBoYU51bWVyYXRlKHNlcmllc0luZGV4KSlcbiAgICAgIF0uam9pbignICcpKTtcblxuICAgICAgZGF0YS5ub3JtYWxpemVkLnNlcmllc1tzZXJpZXNJbmRleF0uZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgdmFsdWVJbmRleCkge1xuICAgICAgICB2YXIgcHJvamVjdGVkLFxuICAgICAgICAgIGJhcixcbiAgICAgICAgICBwcmV2aW91c1N0YWNrLFxuICAgICAgICAgIGxhYmVsQXhpc1ZhbHVlSW5kZXg7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgbGFiZWxBeGlzVmFsdWVJbmRleCBiYXNlZCBvbiBzb21lIG9wdGlvbnMgY29tYmluYXRpb25zXG4gICAgICAgIGlmKG9wdGlvbnMuZGlzdHJpYnV0ZVNlcmllcyAmJiAhb3B0aW9ucy5zdGFja0JhcnMpIHtcbiAgICAgICAgICAvLyBJZiBkaXN0cmlidXRlZCBzZXJpZXMgYXJlIGVuYWJsZWQgYnV0IHN0YWNrZWQgYmFycyBhcmVuJ3QsIHdlIGNhbiB1c2UgdGhlIHNlcmllc0luZGV4IGZvciBsYXRlciBwcm9qZWN0aW9uXG4gICAgICAgICAgLy8gb24gdGhlIHN0ZXAgYXhpcyBmb3IgbGFiZWwgcG9zaXRpb25pbmdcbiAgICAgICAgICBsYWJlbEF4aXNWYWx1ZUluZGV4ID0gc2VyaWVzSW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZihvcHRpb25zLmRpc3RyaWJ1dGVTZXJpZXMgJiYgb3B0aW9ucy5zdGFja0JhcnMpIHtcbiAgICAgICAgICAvLyBJZiBkaXN0cmlidXRlZCBzZXJpZXMgYW5kIHN0YWNrZWQgYmFycyBhcmUgZW5hYmxlZCwgd2Ugd2lsbCBvbmx5IGdldCBvbmUgYmFyIGFuZCB0aGVyZWZvcmUgYWx3YXlzIHVzZVxuICAgICAgICAgIC8vIDAgZm9yIHByb2plY3Rpb24gb24gdGhlIGxhYmVsIHN0ZXAgYXhpc1xuICAgICAgICAgIGxhYmVsQXhpc1ZhbHVlSW5kZXggPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE9uIHJlZ3VsYXIgYmFyIGNoYXJ0cyB3ZSBqdXN0IHVzZSB0aGUgdmFsdWUgaW5kZXggdG8gcHJvamVjdCBvbiB0aGUgbGFiZWwgc3RlcCBheGlzXG4gICAgICAgICAgbGFiZWxBeGlzVmFsdWVJbmRleCA9IHZhbHVlSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIHRyYW5zZm9ybSBjb29yZGluYXRlcyBkaWZmZXJlbnRseSBiYXNlZCBvbiB0aGUgY2hhcnQgbGF5b3V0XG4gICAgICAgIGlmKG9wdGlvbnMuaG9yaXpvbnRhbEJhcnMpIHtcbiAgICAgICAgICBwcm9qZWN0ZWQgPSB7XG4gICAgICAgICAgICB4OiBjaGFydFJlY3QueDEgKyB2YWx1ZUF4aXMucHJvamVjdFZhbHVlKHZhbHVlICYmIHZhbHVlLnggPyB2YWx1ZS54IDogMCwgdmFsdWVJbmRleCwgZGF0YS5ub3JtYWxpemVkLnNlcmllc1tzZXJpZXNJbmRleF0pLFxuICAgICAgICAgICAgeTogY2hhcnRSZWN0LnkxIC0gbGFiZWxBeGlzLnByb2plY3RWYWx1ZSh2YWx1ZSAmJiB2YWx1ZS55ID8gdmFsdWUueSA6IDAsIGxhYmVsQXhpc1ZhbHVlSW5kZXgsIGRhdGEubm9ybWFsaXplZC5zZXJpZXNbc2VyaWVzSW5kZXhdKVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvamVjdGVkID0ge1xuICAgICAgICAgICAgeDogY2hhcnRSZWN0LngxICsgbGFiZWxBeGlzLnByb2plY3RWYWx1ZSh2YWx1ZSAmJiB2YWx1ZS54ID8gdmFsdWUueCA6IDAsIGxhYmVsQXhpc1ZhbHVlSW5kZXgsIGRhdGEubm9ybWFsaXplZC5zZXJpZXNbc2VyaWVzSW5kZXhdKSxcbiAgICAgICAgICAgIHk6IGNoYXJ0UmVjdC55MSAtIHZhbHVlQXhpcy5wcm9qZWN0VmFsdWUodmFsdWUgJiYgdmFsdWUueSA/IHZhbHVlLnkgOiAwLCB2YWx1ZUluZGV4LCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzW3Nlcmllc0luZGV4XSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgbGFiZWwgYXhpcyBpcyBhIHN0ZXAgYmFzZWQgYXhpcyB3ZSB3aWxsIG9mZnNldCB0aGUgYmFyIGludG8gdGhlIG1pZGRsZSBvZiBiZXR3ZWVuIHR3byBzdGVwcyB1c2luZ1xuICAgICAgICAvLyB0aGUgcGVyaW9kSGFsZkxlbmd0aCB2YWx1ZS4gQWxzbyB3ZSBkbyBhcnJhbmdlIHRoZSBkaWZmZXJlbnQgc2VyaWVzIHNvIHRoYXQgdGhleSBhbGlnbiB1cCB0byBlYWNoIG90aGVyIHVzaW5nXG4gICAgICAgIC8vIHRoZSBzZXJpZXNCYXJEaXN0YW5jZS4gSWYgd2UgZG9uJ3QgaGF2ZSBhIHN0ZXAgYXhpcywgdGhlIGJhciBwb3NpdGlvbnMgY2FuIGJlIGNob3NlbiBmcmVlbHkgc28gd2Ugc2hvdWxkIG5vdFxuICAgICAgICAvLyBhZGQgYW55IGF1dG9tYXRlZCBwb3NpdGlvbmluZy5cbiAgICAgICAgaWYobGFiZWxBeGlzIGluc3RhbmNlb2YgQ2hhcnRpc3QuU3RlcEF4aXMpIHtcbiAgICAgICAgICAvLyBPZmZzZXQgdG8gY2VudGVyIGJhciBiZXR3ZWVuIGdyaWQgbGluZXMsIGJ1dCBvbmx5IGlmIHRoZSBzdGVwIGF4aXMgaXMgbm90IHN0cmV0Y2hlZFxuICAgICAgICAgIGlmKCFsYWJlbEF4aXMub3B0aW9ucy5zdHJldGNoKSB7XG4gICAgICAgICAgICBwcm9qZWN0ZWRbbGFiZWxBeGlzLnVuaXRzLnBvc10gKz0gcGVyaW9kSGFsZkxlbmd0aCAqIChvcHRpb25zLmhvcml6b250YWxCYXJzID8gLTEgOiAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVXNpbmcgYmktcG9sYXIgb2Zmc2V0IGZvciBtdWx0aXBsZSBzZXJpZXMgaWYgbm8gc3RhY2tlZCBiYXJzIG9yIHNlcmllcyBkaXN0cmlidXRpb24gaXMgdXNlZFxuICAgICAgICAgIHByb2plY3RlZFtsYWJlbEF4aXMudW5pdHMucG9zXSArPSAob3B0aW9ucy5zdGFja0JhcnMgfHwgb3B0aW9ucy5kaXN0cmlidXRlU2VyaWVzKSA/IDAgOiBiaVBvbCAqIG9wdGlvbnMuc2VyaWVzQmFyRGlzdGFuY2UgKiAob3B0aW9ucy5ob3Jpem9udGFsQmFycyA/IC0xIDogMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbnRlciB2YWx1ZSBpbiBzdGFja2VkIGJhciB2YWx1ZXMgdXNlZCB0byByZW1lbWJlciBwcmV2aW91cyBzY3JlZW4gdmFsdWUgZm9yIHN0YWNraW5nIHVwIGJhcnNcbiAgICAgICAgcHJldmlvdXNTdGFjayA9IHN0YWNrZWRCYXJWYWx1ZXNbdmFsdWVJbmRleF0gfHwgemVyb1BvaW50O1xuICAgICAgICBzdGFja2VkQmFyVmFsdWVzW3ZhbHVlSW5kZXhdID0gcHJldmlvdXNTdGFjayAtICh6ZXJvUG9pbnQgLSBwcm9qZWN0ZWRbbGFiZWxBeGlzLmNvdW50ZXJVbml0cy5wb3NdKTtcblxuICAgICAgICAvLyBTa2lwIGlmIHZhbHVlIGlzIHVuZGVmaW5lZFxuICAgICAgICBpZih2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBvc2l0aW9ucyA9IHt9O1xuICAgICAgICBwb3NpdGlvbnNbbGFiZWxBeGlzLnVuaXRzLnBvcyArICcxJ10gPSBwcm9qZWN0ZWRbbGFiZWxBeGlzLnVuaXRzLnBvc107XG4gICAgICAgIHBvc2l0aW9uc1tsYWJlbEF4aXMudW5pdHMucG9zICsgJzInXSA9IHByb2plY3RlZFtsYWJlbEF4aXMudW5pdHMucG9zXTtcblxuICAgICAgICBpZihvcHRpb25zLnN0YWNrQmFycyAmJiAob3B0aW9ucy5zdGFja01vZGUgPT09ICdhY2N1bXVsYXRlJyB8fCAhb3B0aW9ucy5zdGFja01vZGUpKSB7XG4gICAgICAgICAgLy8gU3RhY2sgbW9kZTogYWNjdW11bGF0ZSAoZGVmYXVsdClcbiAgICAgICAgICAvLyBJZiBiYXJzIGFyZSBzdGFja2VkIHdlIHVzZSB0aGUgc3RhY2tlZEJhclZhbHVlcyByZWZlcmVuY2UgYW5kIG90aGVyd2lzZSBiYXNlIGFsbCBiYXJzIG9mZiB0aGUgemVybyBsaW5lXG4gICAgICAgICAgLy8gV2Ugd2FudCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgc28gdGhlIGV4cGVjdGVkIGZhbGxiYWNrIHdpdGhvdXQgdGhlICdzdGFja01vZGUnIG9wdGlvblxuICAgICAgICAgIC8vIHRvIGJlIHRoZSBvcmlnaW5hbCBiZWhhdmlvdXIgKGFjY3VtdWxhdGUpXG4gICAgICAgICAgcG9zaXRpb25zW2xhYmVsQXhpcy5jb3VudGVyVW5pdHMucG9zICsgJzEnXSA9IHByZXZpb3VzU3RhY2s7XG4gICAgICAgICAgcG9zaXRpb25zW2xhYmVsQXhpcy5jb3VudGVyVW5pdHMucG9zICsgJzInXSA9IHN0YWNrZWRCYXJWYWx1ZXNbdmFsdWVJbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRHJhdyBmcm9tIHRoZSB6ZXJvIGxpbmUgbm9ybWFsbHlcbiAgICAgICAgICAvLyBUaGlzIGlzIGFsc28gdGhlIHNhbWUgY29kZSBmb3IgU3RhY2sgbW9kZTogb3ZlcmxhcFxuICAgICAgICAgIHBvc2l0aW9uc1tsYWJlbEF4aXMuY291bnRlclVuaXRzLnBvcyArICcxJ10gPSB6ZXJvUG9pbnQ7XG4gICAgICAgICAgcG9zaXRpb25zW2xhYmVsQXhpcy5jb3VudGVyVW5pdHMucG9zICsgJzInXSA9IHByb2plY3RlZFtsYWJlbEF4aXMuY291bnRlclVuaXRzLnBvc107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1pdCB4IGFuZCB5IHNvIHRoYXQgdGhleSBhcmUgd2l0aGluIHRoZSBjaGFydCByZWN0XG4gICAgICAgIHBvc2l0aW9ucy54MSA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9ucy54MSwgY2hhcnRSZWN0LngxKSwgY2hhcnRSZWN0LngyKTtcbiAgICAgICAgcG9zaXRpb25zLngyID0gTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb25zLngyLCBjaGFydFJlY3QueDEpLCBjaGFydFJlY3QueDIpO1xuICAgICAgICBwb3NpdGlvbnMueTEgPSBNYXRoLm1pbihNYXRoLm1heChwb3NpdGlvbnMueTEsIGNoYXJ0UmVjdC55MiksIGNoYXJ0UmVjdC55MSk7XG4gICAgICAgIHBvc2l0aW9ucy55MiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9ucy55MiwgY2hhcnRSZWN0LnkyKSwgY2hhcnRSZWN0LnkxKTtcblxuICAgICAgICB2YXIgbWV0YURhdGEgPSBDaGFydGlzdC5nZXRNZXRhRGF0YShzZXJpZXMsIHZhbHVlSW5kZXgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBiYXIgZWxlbWVudFxuICAgICAgICBiYXIgPSBzZXJpZXNFbGVtZW50LmVsZW0oJ2xpbmUnLCBwb3NpdGlvbnMsIG9wdGlvbnMuY2xhc3NOYW1lcy5iYXIpLmF0dHIoe1xuICAgICAgICAgICdjdDp2YWx1ZSc6IFt2YWx1ZS54LCB2YWx1ZS55XS5maWx0ZXIoQ2hhcnRpc3QuaXNOdW1lcmljKS5qb2luKCcsJyksXG4gICAgICAgICAgJ2N0Om1ldGEnOiBDaGFydGlzdC5zZXJpYWxpemUobWV0YURhdGEpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZXZlbnRFbWl0dGVyLmVtaXQoJ2RyYXcnLCBDaGFydGlzdC5leHRlbmQoe1xuICAgICAgICAgIHR5cGU6ICdiYXInLFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBpbmRleDogdmFsdWVJbmRleCxcbiAgICAgICAgICBtZXRhOiBtZXRhRGF0YSxcbiAgICAgICAgICBzZXJpZXM6IHNlcmllcyxcbiAgICAgICAgICBzZXJpZXNJbmRleDogc2VyaWVzSW5kZXgsXG4gICAgICAgICAgYXhpc1g6IGF4aXNYLFxuICAgICAgICAgIGF4aXNZOiBheGlzWSxcbiAgICAgICAgICBjaGFydFJlY3Q6IGNoYXJ0UmVjdCxcbiAgICAgICAgICBncm91cDogc2VyaWVzRWxlbWVudCxcbiAgICAgICAgICBlbGVtZW50OiBiYXJcbiAgICAgICAgfSwgcG9zaXRpb25zKSk7XG4gICAgICB9LmJpbmQodGhpcykpO1xuICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdjcmVhdGVkJywge1xuICAgICAgYm91bmRzOiB2YWx1ZUF4aXMuYm91bmRzLFxuICAgICAgY2hhcnRSZWN0OiBjaGFydFJlY3QsXG4gICAgICBheGlzWDogYXhpc1gsXG4gICAgICBheGlzWTogYXhpc1ksXG4gICAgICBzdmc6IHRoaXMuc3ZnLFxuICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgYmFyIGNoYXJ0IGFuZCByZXR1cm5zIEFQSSBvYmplY3QgdGhhdCB5b3UgY2FuIHVzZSBmb3IgbGF0ZXIgY2hhbmdlcy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENoYXJ0aXN0LkJhclxuICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBxdWVyeSBBIHNlbGVjdG9yIHF1ZXJ5IHN0cmluZyBvciBkaXJlY3RseSBhIERPTSBlbGVtZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFRoZSBkYXRhIG9iamVjdCB0aGF0IG5lZWRzIHRvIGNvbnNpc3Qgb2YgYSBsYWJlbHMgYW5kIGEgc2VyaWVzIGFycmF5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIG9wdGlvbnMgb2JqZWN0IHdpdGggb3B0aW9ucyB0aGF0IG92ZXJyaWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMuIENoZWNrIHRoZSBleGFtcGxlcyBmb3IgYSBkZXRhaWxlZCBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBbcmVzcG9uc2l2ZU9wdGlvbnNdIFNwZWNpZnkgYW4gYXJyYXkgb2YgcmVzcG9uc2l2ZSBvcHRpb24gYXJyYXlzIHdoaWNoIGFyZSBhIG1lZGlhIHF1ZXJ5IGFuZCBvcHRpb25zIG9iamVjdCBwYWlyID0+IFtbbWVkaWFRdWVyeVN0cmluZywgb3B0aW9uc09iamVjdF0sW21vcmUuLi5dXVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEFuIG9iamVjdCB3aGljaCBleHBvc2VzIHRoZSBBUEkgZm9yIHRoZSBjcmVhdGVkIGNoYXJ0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhIHNpbXBsZSBiYXIgY2hhcnRcbiAgICogdmFyIGRhdGEgPSB7XG4gICAqICAgbGFiZWxzOiBbJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknXSxcbiAgICogICBzZXJpZXM6IFtcbiAgICogICAgIFs1LCAyLCA0LCAyLCAwXVxuICAgKiAgIF1cbiAgICogfTtcbiAgICpcbiAgICogLy8gSW4gdGhlIGdsb2JhbCBuYW1lIHNwYWNlIENoYXJ0aXN0IHdlIGNhbGwgdGhlIEJhciBmdW5jdGlvbiB0byBpbml0aWFsaXplIGEgYmFyIGNoYXJ0LiBBcyBhIGZpcnN0IHBhcmFtZXRlciB3ZSBwYXNzIGluIGEgc2VsZWN0b3Igd2hlcmUgd2Ugd291bGQgbGlrZSB0byBnZXQgb3VyIGNoYXJ0IGNyZWF0ZWQgYW5kIGFzIGEgc2Vjb25kIHBhcmFtZXRlciB3ZSBwYXNzIG91ciBkYXRhIG9iamVjdC5cbiAgICogbmV3IENoYXJ0aXN0LkJhcignLmN0LWNoYXJ0JywgZGF0YSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgYmlwb2xhciBncm91cGVkIGJhciBjaGFydCB3aGVyZSB0aGUgYm91bmRhcmllcyBhcmUgbGltaXR0ZWQgdG8gLTEwIGFuZCAxMFxuICAgKiBuZXcgQ2hhcnRpc3QuQmFyKCcuY3QtY2hhcnQnLCB7XG4gICAqICAgbGFiZWxzOiBbMSwgMiwgMywgNCwgNSwgNiwgN10sXG4gICAqICAgc2VyaWVzOiBbXG4gICAqICAgICBbMSwgMywgMiwgLTUsIC0zLCAxLCAtNl0sXG4gICAqICAgICBbLTUsIC0yLCAtNCwgLTEsIDIsIC0zLCAxXVxuICAgKiAgIF1cbiAgICogfSwge1xuICAgKiAgIHNlcmllc0JhckRpc3RhbmNlOiAxMixcbiAgICogICBsb3c6IC0xMCxcbiAgICogICBoaWdoOiAxMFxuICAgKiB9KTtcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIEJhcihxdWVyeSwgZGF0YSwgb3B0aW9ucywgcmVzcG9uc2l2ZU9wdGlvbnMpIHtcbiAgICBDaGFydGlzdC5CYXIuc3VwZXIuY29uc3RydWN0b3IuY2FsbCh0aGlzLFxuICAgICAgcXVlcnksXG4gICAgICBkYXRhLFxuICAgICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgICBDaGFydGlzdC5leHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKSxcbiAgICAgIHJlc3BvbnNpdmVPcHRpb25zKTtcbiAgfVxuXG4gIC8vIENyZWF0aW5nIGJhciBjaGFydCB0eXBlIGluIENoYXJ0aXN0IG5hbWVzcGFjZVxuICBDaGFydGlzdC5CYXIgPSBDaGFydGlzdC5CYXNlLmV4dGVuZCh7XG4gICAgY29uc3RydWN0b3I6IEJhcixcbiAgICBjcmVhdGVDaGFydDogY3JlYXRlQ2hhcnRcbiAgfSk7XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG47LyoqXG4gKiBUaGUgcGllIGNoYXJ0IG1vZHVsZSBvZiBDaGFydGlzdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRyYXcgcGllLCBkb251dCBvciBnYXVnZSBjaGFydHNcbiAqXG4gKiBAbW9kdWxlIENoYXJ0aXN0LlBpZVxuICovXG4vKiBnbG9iYWwgQ2hhcnRpc3QgKi9cbihmdW5jdGlvbihnbG9iYWxSb290LCBDaGFydGlzdCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIHdpbmRvdyA9IGdsb2JhbFJvb3Qud2luZG93O1xuICB2YXIgZG9jdW1lbnQgPSBnbG9iYWxSb290LmRvY3VtZW50O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IG9wdGlvbnMgaW4gbGluZSBjaGFydHMuIEV4cGFuZCB0aGUgY29kZSB2aWV3IHRvIHNlZSBhIGRldGFpbGVkIGxpc3Qgb2Ygb3B0aW9ucyB3aXRoIGNvbW1lbnRzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ2hhcnRpc3QuUGllXG4gICAqL1xuICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgLy8gU3BlY2lmeSBhIGZpeGVkIHdpZHRoIGZvciB0aGUgY2hhcnQgYXMgYSBzdHJpbmcgKGkuZS4gJzEwMHB4JyBvciAnNTAlJylcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIC8vIFNwZWNpZnkgYSBmaXhlZCBoZWlnaHQgZm9yIHRoZSBjaGFydCBhcyBhIHN0cmluZyAoaS5lLiAnMTAwcHgnIG9yICc1MCUnKVxuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgIC8vIFBhZGRpbmcgb2YgdGhlIGNoYXJ0IGRyYXdpbmcgYXJlYSB0byB0aGUgY29udGFpbmVyIGVsZW1lbnQgYW5kIGxhYmVscyBhcyBhIG51bWJlciBvciBwYWRkaW5nIG9iamVjdCB7dG9wOiA1LCByaWdodDogNSwgYm90dG9tOiA1LCBsZWZ0OiA1fVxuICAgIGNoYXJ0UGFkZGluZzogNSxcbiAgICAvLyBPdmVycmlkZSB0aGUgY2xhc3MgbmFtZXMgdGhhdCBhcmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgU1ZHIHN0cnVjdHVyZSBvZiB0aGUgY2hhcnRcbiAgICBjbGFzc05hbWVzOiB7XG4gICAgICBjaGFydFBpZTogJ2N0LWNoYXJ0LXBpZScsXG4gICAgICBjaGFydERvbnV0OiAnY3QtY2hhcnQtZG9udXQnLFxuICAgICAgc2VyaWVzOiAnY3Qtc2VyaWVzJyxcbiAgICAgIHNsaWNlUGllOiAnY3Qtc2xpY2UtcGllJyxcbiAgICAgIHNsaWNlRG9udXQ6ICdjdC1zbGljZS1kb251dCcsXG4gICAgICBzbGljZURvbnV0U29saWQ6ICdjdC1zbGljZS1kb251dC1zb2xpZCcsXG4gICAgICBsYWJlbDogJ2N0LWxhYmVsJ1xuICAgIH0sXG4gICAgLy8gVGhlIHN0YXJ0IGFuZ2xlIG9mIHRoZSBwaWUgY2hhcnQgaW4gZGVncmVlcyB3aGVyZSAwIHBvaW50cyBub3J0aC4gQSBoaWdoZXIgdmFsdWUgb2Zmc2V0cyB0aGUgc3RhcnQgYW5nbGUgY2xvY2t3aXNlLlxuICAgIHN0YXJ0QW5nbGU6IDAsXG4gICAgLy8gQW4gb3B0aW9uYWwgdG90YWwgeW91IGNhbiBzcGVjaWZ5LiBCeSBzcGVjaWZ5aW5nIGEgdG90YWwgdmFsdWUsIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiB0aGUgc2VyaWVzIG11c3QgYmUgdGhpcyB0b3RhbCBpbiBvcmRlciB0byBkcmF3IGEgZnVsbCBwaWUuIFlvdSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIHRvIGRyYXcgb25seSBwYXJ0cyBvZiBhIHBpZSBvciBnYXVnZSBjaGFydHMuXG4gICAgdG90YWw6IHVuZGVmaW5lZCxcbiAgICAvLyBJZiBzcGVjaWZpZWQgdGhlIGRvbnV0IENTUyBjbGFzc2VzIHdpbGwgYmUgdXNlZCBhbmQgc3Ryb2tlcyB3aWxsIGJlIGRyYXduIGluc3RlYWQgb2YgcGllIHNsaWNlcy5cbiAgICBkb251dDogZmFsc2UsXG4gICAgLy8gSWYgc3BlY2lmaWVkIHRoZSBkb251dCBzZWdtZW50cyB3aWxsIGJlIGRyYXduIGFzIHNoYXBlcyBpbnN0ZWFkIG9mIHN0cm9rZXMuXG4gICAgZG9udXRTb2xpZDogZmFsc2UsXG4gICAgLy8gU3BlY2lmeSB0aGUgZG9udXQgc3Ryb2tlIHdpZHRoLCBjdXJyZW50bHkgZG9uZSBpbiBqYXZhc2NyaXB0IGZvciBjb252ZW5pZW5jZS4gTWF5IG1vdmUgdG8gQ1NTIHN0eWxlcyBpbiB0aGUgZnV0dXJlLlxuICAgIC8vIFRoaXMgb3B0aW9uIGNhbiBiZSBzZXQgYXMgbnVtYmVyIG9yIHN0cmluZyB0byBzcGVjaWZ5IGEgcmVsYXRpdmUgd2lkdGggKGkuZS4gMTAwIG9yICczMCUnKS5cbiAgICBkb251dFdpZHRoOiA2MCxcbiAgICAvLyBJZiBhIGxhYmVsIHNob3VsZCBiZSBzaG93biBvciBub3RcbiAgICBzaG93TGFiZWw6IHRydWUsXG4gICAgLy8gTGFiZWwgcG9zaXRpb24gb2Zmc2V0IGZyb20gdGhlIHN0YW5kYXJkIHBvc2l0aW9uIHdoaWNoIGlzIGhhbGYgZGlzdGFuY2Ugb2YgdGhlIHJhZGl1cy4gVGhpcyB2YWx1ZSBjYW4gYmUgZWl0aGVyIHBvc2l0aXZlIG9yIG5lZ2F0aXZlLiBQb3NpdGl2ZSB2YWx1ZXMgd2lsbCBwb3NpdGlvbiB0aGUgbGFiZWwgYXdheSBmcm9tIHRoZSBjZW50ZXIuXG4gICAgbGFiZWxPZmZzZXQ6IDAsXG4gICAgLy8gVGhpcyBvcHRpb24gY2FuIGJlIHNldCB0byAnaW5zaWRlJywgJ291dHNpZGUnIG9yICdjZW50ZXInLiBQb3NpdGlvbmVkIHdpdGggJ2luc2lkZScgdGhlIGxhYmVscyB3aWxsIGJlIHBsYWNlZCBvbiBoYWxmIHRoZSBkaXN0YW5jZSBvZiB0aGUgcmFkaXVzIHRvIHRoZSBib3JkZXIgb2YgdGhlIFBpZSBieSByZXNwZWN0aW5nIHRoZSAnbGFiZWxPZmZzZXQnLiBUaGUgJ291dHNpZGUnIG9wdGlvbiB3aWxsIHBsYWNlIHRoZSBsYWJlbHMgYXQgdGhlIGJvcmRlciBvZiB0aGUgcGllIGFuZCAnY2VudGVyJyB3aWxsIHBsYWNlIHRoZSBsYWJlbHMgaW4gdGhlIGFic29sdXRlIGNlbnRlciBwb2ludCBvZiB0aGUgY2hhcnQuIFRoZSAnY2VudGVyJyBvcHRpb24gb25seSBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSAnbGFiZWxPZmZzZXQnIG9wdGlvbi5cbiAgICBsYWJlbFBvc2l0aW9uOiAnaW5zaWRlJyxcbiAgICAvLyBBbiBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbGFiZWwgdmFsdWVcbiAgICBsYWJlbEludGVycG9sYXRpb25GbmM6IENoYXJ0aXN0Lm5vb3AsXG4gICAgLy8gTGFiZWwgZGlyZWN0aW9uIGNhbiBiZSAnbmV1dHJhbCcsICdleHBsb2RlJyBvciAnaW1wbG9kZScuIFRoZSBsYWJlbHMgYW5jaG9yIHdpbGwgYmUgcG9zaXRpb25lZCBiYXNlZCBvbiB0aG9zZSBzZXR0aW5ncyBhcyB3ZWxsIGFzIHRoZSBmYWN0IGlmIHRoZSBsYWJlbHMgYXJlIG9uIHRoZSByaWdodCBvciBsZWZ0IHNpZGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgY2hhcnQuIFVzdWFsbHkgZXhwbG9kZSBpcyB1c2VmdWwgd2hlbiBsYWJlbHMgYXJlIHBvc2l0aW9uZWQgZmFyIGF3YXkgZnJvbSB0aGUgY2VudGVyLlxuICAgIGxhYmVsRGlyZWN0aW9uOiAnbmV1dHJhbCcsXG4gICAgLy8gSWYgdHJ1ZSB0aGUgd2hvbGUgZGF0YSBpcyByZXZlcnNlZCBpbmNsdWRpbmcgbGFiZWxzLCB0aGUgc2VyaWVzIG9yZGVyIGFzIHdlbGwgYXMgdGhlIHdob2xlIHNlcmllcyBkYXRhIGFycmF5cy5cbiAgICByZXZlcnNlRGF0YTogZmFsc2UsXG4gICAgLy8gSWYgdHJ1ZSBlbXB0eSB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkIHRvIGF2b2lkIGRyYXdpbmcgdW5uY2Vzc2FyeSBzbGljZXMgYW5kIGxhYmVsc1xuICAgIGlnbm9yZUVtcHR5VmFsdWVzOiBmYWxzZVxuICB9O1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIFNWRyBhbmNob3IgcG9zaXRpb24gYmFzZWQgb24gZGlyZWN0aW9uIGFuZCBjZW50ZXIgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBwYXJhbSBjZW50ZXJcbiAgICogQHBhcmFtIGxhYmVsXG4gICAqIEBwYXJhbSBkaXJlY3Rpb25cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gZGV0ZXJtaW5lQW5jaG9yUG9zaXRpb24oY2VudGVyLCBsYWJlbCwgZGlyZWN0aW9uKSB7XG4gICAgdmFyIHRvVGhlUmlnaHQgPSBsYWJlbC54ID4gY2VudGVyLng7XG5cbiAgICBpZih0b1RoZVJpZ2h0ICYmIGRpcmVjdGlvbiA9PT0gJ2V4cGxvZGUnIHx8XG4gICAgICAhdG9UaGVSaWdodCAmJiBkaXJlY3Rpb24gPT09ICdpbXBsb2RlJykge1xuICAgICAgcmV0dXJuICdzdGFydCc7XG4gICAgfSBlbHNlIGlmKHRvVGhlUmlnaHQgJiYgZGlyZWN0aW9uID09PSAnaW1wbG9kZScgfHxcbiAgICAgICF0b1RoZVJpZ2h0ICYmIGRpcmVjdGlvbiA9PT0gJ2V4cGxvZGUnKSB7XG4gICAgICByZXR1cm4gJ2VuZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnbWlkZGxlJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcGllIGNoYXJ0XG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBmdW5jdGlvbiBjcmVhdGVDaGFydChvcHRpb25zKSB7XG4gICAgdmFyIGRhdGEgPSBDaGFydGlzdC5ub3JtYWxpemVEYXRhKHRoaXMuZGF0YSk7XG4gICAgdmFyIHNlcmllc0dyb3VwcyA9IFtdLFxuICAgICAgbGFiZWxzR3JvdXAsXG4gICAgICBjaGFydFJlY3QsXG4gICAgICByYWRpdXMsXG4gICAgICBsYWJlbFJhZGl1cyxcbiAgICAgIHRvdGFsRGF0YVN1bSxcbiAgICAgIHN0YXJ0QW5nbGUgPSBvcHRpb25zLnN0YXJ0QW5nbGU7XG5cbiAgICAvLyBDcmVhdGUgU1ZHLmpzIGRyYXdcbiAgICB0aGlzLnN2ZyA9IENoYXJ0aXN0LmNyZWF0ZVN2Zyh0aGlzLmNvbnRhaW5lciwgb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQsb3B0aW9ucy5kb251dCA/IG9wdGlvbnMuY2xhc3NOYW1lcy5jaGFydERvbnV0IDogb3B0aW9ucy5jbGFzc05hbWVzLmNoYXJ0UGllKTtcbiAgICAvLyBDYWxjdWxhdGUgY2hhcnRpbmcgcmVjdFxuICAgIGNoYXJ0UmVjdCA9IENoYXJ0aXN0LmNyZWF0ZUNoYXJ0UmVjdCh0aGlzLnN2Zywgb3B0aW9ucywgZGVmYXVsdE9wdGlvbnMucGFkZGluZyk7XG4gICAgLy8gR2V0IGJpZ2dlc3QgY2lyY2xlIHJhZGl1cyBwb3NzaWJsZSB3aXRoaW4gY2hhcnRSZWN0XG4gICAgcmFkaXVzID0gTWF0aC5taW4oY2hhcnRSZWN0LndpZHRoKCkgLyAyLCBjaGFydFJlY3QuaGVpZ2h0KCkgLyAyKTtcbiAgICAvLyBDYWxjdWxhdGUgdG90YWwgb2YgYWxsIHNlcmllcyB0byBnZXQgcmVmZXJlbmNlIHZhbHVlIG9yIHVzZSB0b3RhbCByZWZlcmVuY2UgZnJvbSBvcHRpb25hbCBvcHRpb25zXG4gICAgdG90YWxEYXRhU3VtID0gb3B0aW9ucy50b3RhbCB8fCBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzLnJlZHVjZShmdW5jdGlvbihwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUpIHtcbiAgICAgIHJldHVybiBwcmV2aW91c1ZhbHVlICsgY3VycmVudFZhbHVlO1xuICAgIH0sIDApO1xuXG4gICAgdmFyIGRvbnV0V2lkdGggPSBDaGFydGlzdC5xdWFudGl0eShvcHRpb25zLmRvbnV0V2lkdGgpO1xuICAgIGlmIChkb251dFdpZHRoLnVuaXQgPT09ICclJykge1xuICAgICAgZG9udXRXaWR0aC52YWx1ZSAqPSByYWRpdXMgLyAxMDA7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIGRvbnV0IGNoYXJ0IHdlIG5lZWQgdG8gYWRqdXN0IG91ciByYWRpdXMgdG8gZW5hYmxlIHN0cm9rZXMgdG8gYmUgZHJhd24gaW5zaWRlXG4gICAgLy8gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBwb3NzaWJsZSB3aXRoIHRoZSBjdXJyZW50IFNWRyBTcGVjXG4gICAgLy8gU2VlIHRoaXMgcHJvcG9zYWwgZm9yIG1vcmUgZGV0YWlsczogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LXN2Zy8yMDAzT2N0LzAwMDAuaHRtbFxuICAgIHJhZGl1cyAtPSBvcHRpb25zLmRvbnV0ICYmICFvcHRpb25zLmRvbnV0U29saWQgPyBkb251dFdpZHRoLnZhbHVlIC8gMiAgOiAwO1xuXG4gICAgLy8gSWYgbGFiZWxQb3NpdGlvbiBpcyBzZXQgdG8gYG91dHNpZGVgIG9yIGEgZG9udXQgY2hhcnQgaXMgZHJhd24gdGhlbiB0aGUgbGFiZWwgcG9zaXRpb24gaXMgYXQgdGhlIHJhZGl1cyxcbiAgICAvLyBpZiByZWd1bGFyIHBpZSBjaGFydCBpdCdzIGhhbGYgb2YgdGhlIHJhZGl1c1xuICAgIGlmKG9wdGlvbnMubGFiZWxQb3NpdGlvbiA9PT0gJ291dHNpZGUnIHx8IG9wdGlvbnMuZG9udXQgJiYgIW9wdGlvbnMuZG9udXRTb2xpZCkge1xuICAgICAgbGFiZWxSYWRpdXMgPSByYWRpdXM7XG4gICAgfSBlbHNlIGlmKG9wdGlvbnMubGFiZWxQb3NpdGlvbiA9PT0gJ2NlbnRlcicpIHtcbiAgICAgIC8vIElmIGxhYmVsUG9zaXRpb24gaXMgY2VudGVyIHdlIHN0YXJ0IHdpdGggMCBhbmQgd2lsbCBsYXRlciB3YWl0IGZvciB0aGUgbGFiZWxPZmZzZXRcbiAgICAgIGxhYmVsUmFkaXVzID0gMDtcbiAgICB9IGVsc2UgaWYob3B0aW9ucy5kb251dFNvbGlkKSB7XG4gICAgICBsYWJlbFJhZGl1cyA9IHJhZGl1cyAtIGRvbnV0V2lkdGgudmFsdWUgLyAyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IG9wdGlvbiBpcyAnaW5zaWRlJyB3aGVyZSB3ZSB1c2UgaGFsZiB0aGUgcmFkaXVzIHNvIHRoZSBsYWJlbCB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgY2VudGVyIG9mIHRoZSBwaWVcbiAgICAgIC8vIHNsaWNlXG4gICAgICBsYWJlbFJhZGl1cyA9IHJhZGl1cyAvIDI7XG4gICAgfVxuICAgIC8vIEFkZCB0aGUgb2Zmc2V0IHRvIHRoZSBsYWJlbFJhZGl1cyB3aGVyZSBhIG5lZ2F0aXZlIG9mZnNldCBtZWFucyBjbG9zZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgY2hhcnRcbiAgICBsYWJlbFJhZGl1cyArPSBvcHRpb25zLmxhYmVsT2Zmc2V0O1xuXG4gICAgLy8gQ2FsY3VsYXRlIGVuZCBhbmdsZSBiYXNlZCBvbiB0b3RhbCBzdW0gYW5kIGN1cnJlbnQgZGF0YSB2YWx1ZSBhbmQgb2Zmc2V0IHdpdGggcGFkZGluZ1xuICAgIHZhciBjZW50ZXIgPSB7XG4gICAgICB4OiBjaGFydFJlY3QueDEgKyBjaGFydFJlY3Qud2lkdGgoKSAvIDIsXG4gICAgICB5OiBjaGFydFJlY3QueTIgKyBjaGFydFJlY3QuaGVpZ2h0KCkgLyAyXG4gICAgfTtcblxuICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIG9ubHkgb25lIG5vbi16ZXJvIHZhbHVlIGluIHRoZSBzZXJpZXMgYXJyYXkuXG4gICAgdmFyIGhhc1NpbmdsZVZhbEluU2VyaWVzID0gZGF0YS5yYXcuc2VyaWVzLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyB2YWwudmFsdWUgIT09IDAgOiB2YWwgIT09IDA7XG4gICAgfSkubGVuZ3RoID09PSAxO1xuXG4gICAgLy8gQ3JlYXRpbmcgdGhlIHNlcmllcyBncm91cHNcbiAgICBkYXRhLnJhdy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMsIGluZGV4KSB7XG4gICAgICBzZXJpZXNHcm91cHNbaW5kZXhdID0gdGhpcy5zdmcuZWxlbSgnZycsIG51bGwsIG51bGwpO1xuICAgIH0uYmluZCh0aGlzKSk7XG4gICAgLy9pZiB3ZSBuZWVkIHRvIHNob3cgbGFiZWxzIHdlIGNyZWF0ZSB0aGUgbGFiZWwgZ3JvdXAgbm93XG4gICAgaWYob3B0aW9ucy5zaG93TGFiZWwpIHtcbiAgICAgIGxhYmVsc0dyb3VwID0gdGhpcy5zdmcuZWxlbSgnZycsIG51bGwsIG51bGwpO1xuICAgIH1cblxuICAgIC8vIERyYXcgdGhlIHNlcmllc1xuICAgIC8vIGluaXRpYWxpemUgc2VyaWVzIGdyb3Vwc1xuICAgIGRhdGEucmF3LnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcywgaW5kZXgpIHtcbiAgICAgIC8vIElmIGN1cnJlbnQgdmFsdWUgaXMgemVybyBhbmQgd2UgYXJlIGlnbm9yaW5nIGVtcHR5IHZhbHVlcyB0aGVuIHNraXAgdG8gbmV4dCB2YWx1ZVxuICAgICAgaWYgKGRhdGEubm9ybWFsaXplZC5zZXJpZXNbaW5kZXhdID09PSAwICYmIG9wdGlvbnMuaWdub3JlRW1wdHlWYWx1ZXMpIHJldHVybjtcblxuICAgICAgLy8gSWYgdGhlIHNlcmllcyBpcyBhbiBvYmplY3QgYW5kIGNvbnRhaW5zIGEgbmFtZSBvciBtZXRhIGRhdGEgd2UgYWRkIGEgY3VzdG9tIGF0dHJpYnV0ZVxuICAgICAgc2VyaWVzR3JvdXBzW2luZGV4XS5hdHRyKHtcbiAgICAgICAgJ2N0OnNlcmllcy1uYW1lJzogc2VyaWVzLm5hbWVcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVc2Ugc2VyaWVzIGNsYXNzIGZyb20gc2VyaWVzIGRhdGEgb3IgaWYgbm90IHNldCBnZW5lcmF0ZSBvbmVcbiAgICAgIHNlcmllc0dyb3Vwc1tpbmRleF0uYWRkQ2xhc3MoW1xuICAgICAgICBvcHRpb25zLmNsYXNzTmFtZXMuc2VyaWVzLFxuICAgICAgICAoc2VyaWVzLmNsYXNzTmFtZSB8fCBvcHRpb25zLmNsYXNzTmFtZXMuc2VyaWVzICsgJy0nICsgQ2hhcnRpc3QuYWxwaGFOdW1lcmF0ZShpbmRleCkpXG4gICAgICBdLmpvaW4oJyAnKSk7XG5cbiAgICAgIC8vIElmIHRoZSB3aG9sZSBkYXRhc2V0IGlzIDAgZW5kQW5nbGUgc2hvdWxkIGJlIHplcm8uIENhbid0IGRpdmlkZSBieSAwLlxuICAgICAgdmFyIGVuZEFuZ2xlID0gKHRvdGFsRGF0YVN1bSA+IDAgPyBzdGFydEFuZ2xlICsgZGF0YS5ub3JtYWxpemVkLnNlcmllc1tpbmRleF0gLyB0b3RhbERhdGFTdW0gKiAzNjAgOiAwKTtcblxuICAgICAgLy8gVXNlIHNsaWdodCBvZmZzZXQgc28gdGhlcmUgYXJlIG5vIHRyYW5zcGFyZW50IGhhaXJsaW5lIGlzc3Vlc1xuICAgICAgdmFyIG92ZXJsYXBwaWdTdGFydEFuZ2xlID0gTWF0aC5tYXgoMCwgc3RhcnRBbmdsZSAtIChpbmRleCA9PT0gMCB8fCBoYXNTaW5nbGVWYWxJblNlcmllcyA/IDAgOiAwLjIpKTtcblxuICAgICAgLy8gSWYgd2UgbmVlZCB0byBkcmF3IHRoZSBhcmMgZm9yIGFsbCAzNjAgZGVncmVlcyB3ZSBuZWVkIHRvIGFkZCBhIGhhY2sgd2hlcmUgd2UgY2xvc2UgdGhlIGNpcmNsZVxuICAgICAgLy8gd2l0aCBaIGFuZCB1c2UgMzU5Ljk5IGRlZ3JlZXNcbiAgICAgIGlmKGVuZEFuZ2xlIC0gb3ZlcmxhcHBpZ1N0YXJ0QW5nbGUgPj0gMzU5Ljk5KSB7XG4gICAgICAgIGVuZEFuZ2xlID0gb3ZlcmxhcHBpZ1N0YXJ0QW5nbGUgKyAzNTkuOTk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydCA9IENoYXJ0aXN0LnBvbGFyVG9DYXJ0ZXNpYW4oY2VudGVyLngsIGNlbnRlci55LCByYWRpdXMsIG92ZXJsYXBwaWdTdGFydEFuZ2xlKSxcbiAgICAgICAgZW5kID0gQ2hhcnRpc3QucG9sYXJUb0NhcnRlc2lhbihjZW50ZXIueCwgY2VudGVyLnksIHJhZGl1cywgZW5kQW5nbGUpO1xuXG4gICAgICB2YXIgaW5uZXJTdGFydCxcbiAgICAgICAgaW5uZXJFbmQsXG4gICAgICAgIGRvbnV0U29saWRSYWRpdXM7XG5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXRoIGVsZW1lbnQgZm9yIHRoZSBwaWUgY2hhcnQuIElmIHRoaXMgaXNuJ3QgYSBkb251dCBjaGFydCB3ZSBzaG91bGQgY2xvc2UgdGhlIHBhdGggZm9yIGEgY29ycmVjdCBzdHJva2VcbiAgICAgIHZhciBwYXRoID0gbmV3IENoYXJ0aXN0LlN2Zy5QYXRoKCFvcHRpb25zLmRvbnV0IHx8IG9wdGlvbnMuZG9udXRTb2xpZClcbiAgICAgICAgLm1vdmUoZW5kLngsIGVuZC55KVxuICAgICAgICAuYXJjKHJhZGl1cywgcmFkaXVzLCAwLCBlbmRBbmdsZSAtIHN0YXJ0QW5nbGUgPiAxODAsIDAsIHN0YXJ0LngsIHN0YXJ0LnkpO1xuXG4gICAgICAvLyBJZiByZWd1bGFyIHBpZSBjaGFydCAobm8gZG9udXQpIHdlIGFkZCBhIGxpbmUgdG8gdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIGZvciBjb21wbGV0aW5nIHRoZSBwaWVcbiAgICAgIGlmKCFvcHRpb25zLmRvbnV0KSB7XG4gICAgICAgIHBhdGgubGluZShjZW50ZXIueCwgY2VudGVyLnkpO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmRvbnV0U29saWQpIHtcbiAgICAgICAgZG9udXRTb2xpZFJhZGl1cyA9IHJhZGl1cyAtIGRvbnV0V2lkdGgudmFsdWU7XG4gICAgICAgIGlubmVyU3RhcnQgPSBDaGFydGlzdC5wb2xhclRvQ2FydGVzaWFuKGNlbnRlci54LCBjZW50ZXIueSwgZG9udXRTb2xpZFJhZGl1cywgc3RhcnRBbmdsZSAtIChpbmRleCA9PT0gMCB8fCBoYXNTaW5nbGVWYWxJblNlcmllcyA/IDAgOiAwLjIpKTtcbiAgICAgICAgaW5uZXJFbmQgPSBDaGFydGlzdC5wb2xhclRvQ2FydGVzaWFuKGNlbnRlci54LCBjZW50ZXIueSwgZG9udXRTb2xpZFJhZGl1cywgZW5kQW5nbGUpO1xuICAgICAgICBwYXRoLmxpbmUoaW5uZXJTdGFydC54LCBpbm5lclN0YXJ0LnkpO1xuICAgICAgICBwYXRoLmFyYyhkb251dFNvbGlkUmFkaXVzLCBkb251dFNvbGlkUmFkaXVzLCAwLCBlbmRBbmdsZSAtIHN0YXJ0QW5nbGUgID4gMTgwLCAxLCBpbm5lckVuZC54LCBpbm5lckVuZC55KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBTVkcgcGF0aFxuICAgICAgLy8gSWYgdGhpcyBpcyBhIGRvbnV0IGNoYXJ0IHdlIGFkZCB0aGUgZG9udXQgY2xhc3MsIG90aGVyd2lzZSBqdXN0IGEgcmVndWxhciBzbGljZVxuICAgICAgdmFyIHBhdGhDbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZXMuc2xpY2VQaWU7XG4gICAgICBpZiAob3B0aW9ucy5kb251dCkge1xuICAgICAgICBwYXRoQ2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzc05hbWVzLnNsaWNlRG9udXQ7XG4gICAgICAgIGlmIChvcHRpb25zLmRvbnV0U29saWQpIHtcbiAgICAgICAgICBwYXRoQ2xhc3NOYW1lID0gb3B0aW9ucy5jbGFzc05hbWVzLnNsaWNlRG9udXRTb2xpZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHBhdGhFbGVtZW50ID0gc2VyaWVzR3JvdXBzW2luZGV4XS5lbGVtKCdwYXRoJywge1xuICAgICAgICBkOiBwYXRoLnN0cmluZ2lmeSgpXG4gICAgICB9LCBwYXRoQ2xhc3NOYW1lKTtcblxuICAgICAgLy8gQWRkaW5nIHRoZSBwaWUgc2VyaWVzIHZhbHVlIHRvIHRoZSBwYXRoXG4gICAgICBwYXRoRWxlbWVudC5hdHRyKHtcbiAgICAgICAgJ2N0OnZhbHVlJzogZGF0YS5ub3JtYWxpemVkLnNlcmllc1tpbmRleF0sXG4gICAgICAgICdjdDptZXRhJzogQ2hhcnRpc3Quc2VyaWFsaXplKHNlcmllcy5tZXRhKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgYSBkb251dCwgd2UgYWRkIHRoZSBzdHJva2Utd2lkdGggYXMgc3R5bGUgYXR0cmlidXRlXG4gICAgICBpZihvcHRpb25zLmRvbnV0ICYmICFvcHRpb25zLmRvbnV0U29saWQpIHtcbiAgICAgICAgcGF0aEVsZW1lbnQuX25vZGUuc3R5bGUuc3Ryb2tlV2lkdGggPSBkb251dFdpZHRoLnZhbHVlICsgJ3B4JztcbiAgICAgIH1cblxuICAgICAgLy8gRmlyZSBvZmYgZHJhdyBldmVudFxuICAgICAgdGhpcy5ldmVudEVtaXR0ZXIuZW1pdCgnZHJhdycsIHtcbiAgICAgICAgdHlwZTogJ3NsaWNlJyxcbiAgICAgICAgdmFsdWU6IGRhdGEubm9ybWFsaXplZC5zZXJpZXNbaW5kZXhdLFxuICAgICAgICB0b3RhbERhdGFTdW06IHRvdGFsRGF0YVN1bSxcbiAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICBtZXRhOiBzZXJpZXMubWV0YSxcbiAgICAgICAgc2VyaWVzOiBzZXJpZXMsXG4gICAgICAgIGdyb3VwOiBzZXJpZXNHcm91cHNbaW5kZXhdLFxuICAgICAgICBlbGVtZW50OiBwYXRoRWxlbWVudCxcbiAgICAgICAgcGF0aDogcGF0aC5jbG9uZSgpLFxuICAgICAgICBjZW50ZXI6IGNlbnRlcixcbiAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgIHN0YXJ0QW5nbGU6IHN0YXJ0QW5nbGUsXG4gICAgICAgIGVuZEFuZ2xlOiBlbmRBbmdsZVxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHdlIG5lZWQgdG8gc2hvdyBsYWJlbHMgd2UgbmVlZCB0byBhZGQgdGhlIGxhYmVsIGZvciB0aGlzIHNsaWNlIG5vd1xuICAgICAgaWYob3B0aW9ucy5zaG93TGFiZWwpIHtcbiAgICAgICAgdmFyIGxhYmVsUG9zaXRpb247XG4gICAgICAgIGlmKGRhdGEucmF3LnNlcmllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG9ubHkgMSBzZXJpZXMsIHdlIGNhbiBwb3NpdGlvbiB0aGUgbGFiZWwgaW4gdGhlIGNlbnRlciBvZiB0aGUgcGllXG4gICAgICAgICAgbGFiZWxQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHg6IGNlbnRlci54LFxuICAgICAgICAgICAgeTogY2VudGVyLnlcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFBvc2l0aW9uIGF0IHRoZSBsYWJlbFJhZGl1cyBkaXN0YW5jZSBmcm9tIGNlbnRlciBhbmQgYmV0d2VlbiBzdGFydCBhbmQgZW5kIGFuZ2xlXG4gICAgICAgICAgbGFiZWxQb3NpdGlvbiA9IENoYXJ0aXN0LnBvbGFyVG9DYXJ0ZXNpYW4oXG4gICAgICAgICAgICBjZW50ZXIueCxcbiAgICAgICAgICAgIGNlbnRlci55LFxuICAgICAgICAgICAgbGFiZWxSYWRpdXMsXG4gICAgICAgICAgICBzdGFydEFuZ2xlICsgKGVuZEFuZ2xlIC0gc3RhcnRBbmdsZSkgLyAyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByYXdWYWx1ZTtcbiAgICAgICAgaWYoZGF0YS5ub3JtYWxpemVkLmxhYmVscyAmJiAhQ2hhcnRpc3QuaXNGYWxzZXlCdXRaZXJvKGRhdGEubm9ybWFsaXplZC5sYWJlbHNbaW5kZXhdKSkge1xuICAgICAgICAgIHJhd1ZhbHVlID0gZGF0YS5ub3JtYWxpemVkLmxhYmVsc1tpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmF3VmFsdWUgPSBkYXRhLm5vcm1hbGl6ZWQuc2VyaWVzW2luZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbnRlcnBvbGF0ZWRWYWx1ZSA9IG9wdGlvbnMubGFiZWxJbnRlcnBvbGF0aW9uRm5jKHJhd1ZhbHVlLCBpbmRleCk7XG5cbiAgICAgICAgaWYoaW50ZXJwb2xhdGVkVmFsdWUgfHwgaW50ZXJwb2xhdGVkVmFsdWUgPT09IDApIHtcbiAgICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gbGFiZWxzR3JvdXAuZWxlbSgndGV4dCcsIHtcbiAgICAgICAgICAgIGR4OiBsYWJlbFBvc2l0aW9uLngsXG4gICAgICAgICAgICBkeTogbGFiZWxQb3NpdGlvbi55LFxuICAgICAgICAgICAgJ3RleHQtYW5jaG9yJzogZGV0ZXJtaW5lQW5jaG9yUG9zaXRpb24oY2VudGVyLCBsYWJlbFBvc2l0aW9uLCBvcHRpb25zLmxhYmVsRGlyZWN0aW9uKVxuICAgICAgICAgIH0sIG9wdGlvbnMuY2xhc3NOYW1lcy5sYWJlbCkudGV4dCgnJyArIGludGVycG9sYXRlZFZhbHVlKTtcblxuICAgICAgICAgIC8vIEZpcmUgb2ZmIGRyYXcgZXZlbnRcbiAgICAgICAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdkcmF3Jywge1xuICAgICAgICAgICAgdHlwZTogJ2xhYmVsJyxcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGdyb3VwOiBsYWJlbHNHcm91cCxcbiAgICAgICAgICAgIGVsZW1lbnQ6IGxhYmVsRWxlbWVudCxcbiAgICAgICAgICAgIHRleHQ6ICcnICsgaW50ZXJwb2xhdGVkVmFsdWUsXG4gICAgICAgICAgICB4OiBsYWJlbFBvc2l0aW9uLngsXG4gICAgICAgICAgICB5OiBsYWJlbFBvc2l0aW9uLnlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZXQgbmV4dCBzdGFydEFuZ2xlIHRvIGN1cnJlbnQgZW5kQW5nbGUuXG4gICAgICAvLyAoZXhjZXB0IGZvciBsYXN0IHNsaWNlKVxuICAgICAgc3RhcnRBbmdsZSA9IGVuZEFuZ2xlO1xuICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KCdjcmVhdGVkJywge1xuICAgICAgY2hhcnRSZWN0OiBjaGFydFJlY3QsXG4gICAgICBzdmc6IHRoaXMuc3ZnLFxuICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgcGllIGNoYXJ0IGFuZCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZHJhdyB0aGUgY2hhcnQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDaGFydGlzdC5QaWVcbiAgICogQHBhcmFtIHtTdHJpbmd8Tm9kZX0gcXVlcnkgQSBzZWxlY3RvciBxdWVyeSBzdHJpbmcgb3IgZGlyZWN0bHkgYSBET00gZWxlbWVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSBUaGUgZGF0YSBvYmplY3QgaW4gdGhlIHBpZSBjaGFydCBuZWVkcyB0byBoYXZlIGEgc2VyaWVzIHByb3BlcnR5IHdpdGggYSBvbmUgZGltZW5zaW9uYWwgZGF0YSBhcnJheS4gVGhlIHZhbHVlcyB3aWxsIGJlIG5vcm1hbGl6ZWQgYWdhaW5zdCBlYWNoIG90aGVyIGFuZCBkb24ndCBuZWNlc3NhcmlseSBuZWVkIHRvIGJlIGluIHBlcmNlbnRhZ2UuIFRoZSBzZXJpZXMgcHJvcGVydHkgY2FuIGFsc28gYmUgYW4gYXJyYXkgb2YgdmFsdWUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gYSB2YWx1ZSBwcm9wZXJ0eSBhbmQgYSBjbGFzc05hbWUgcHJvcGVydHkgdG8gb3ZlcnJpZGUgdGhlIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgc2VyaWVzIGdyb3VwLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBvcHRpb25zIG9iamVjdCB3aXRoIG9wdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgZGVmYXVsdCBvcHRpb25zLiBDaGVjayB0aGUgZXhhbXBsZXMgZm9yIGEgZGV0YWlsZWQgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheX0gW3Jlc3BvbnNpdmVPcHRpb25zXSBTcGVjaWZ5IGFuIGFycmF5IG9mIHJlc3BvbnNpdmUgb3B0aW9uIGFycmF5cyB3aGljaCBhcmUgYSBtZWRpYSBxdWVyeSBhbmQgb3B0aW9ucyBvYmplY3QgcGFpciA9PiBbW21lZGlhUXVlcnlTdHJpbmcsIG9wdGlvbnNPYmplY3RdLFttb3JlLi4uXV1cbiAgICogQHJldHVybiB7T2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHZlcnNpb24gYW5kIGFuIHVwZGF0ZSBtZXRob2QgdG8gbWFudWFsbHkgcmVkcmF3IHRoZSBjaGFydFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBTaW1wbGUgcGllIGNoYXJ0IGV4YW1wbGUgd2l0aCBmb3VyIHNlcmllc1xuICAgKiBuZXcgQ2hhcnRpc3QuUGllKCcuY3QtY2hhcnQnLCB7XG4gICAqICAgc2VyaWVzOiBbMTAsIDIsIDQsIDNdXG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBEcmF3aW5nIGEgZG9udXQgY2hhcnRcbiAgICogbmV3IENoYXJ0aXN0LlBpZSgnLmN0LWNoYXJ0Jywge1xuICAgKiAgIHNlcmllczogWzEwLCAyLCA0LCAzXVxuICAgKiB9LCB7XG4gICAqICAgZG9udXQ6IHRydWVcbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFVzaW5nIGRvbnV0LCBzdGFydEFuZ2xlIGFuZCB0b3RhbCB0byBkcmF3IGEgZ2F1Z2UgY2hhcnRcbiAgICogbmV3IENoYXJ0aXN0LlBpZSgnLmN0LWNoYXJ0Jywge1xuICAgKiAgIHNlcmllczogWzIwLCAxMCwgMzAsIDQwXVxuICAgKiB9LCB7XG4gICAqICAgZG9udXQ6IHRydWUsXG4gICAqICAgZG9udXRXaWR0aDogMjAsXG4gICAqICAgc3RhcnRBbmdsZTogMjcwLFxuICAgKiAgIHRvdGFsOiAyMDBcbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIERyYXdpbmcgYSBwaWUgY2hhcnQgd2l0aCBwYWRkaW5nIGFuZCBsYWJlbHMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgcGllXG4gICAqIG5ldyBDaGFydGlzdC5QaWUoJy5jdC1jaGFydCcsIHtcbiAgICogICBzZXJpZXM6IFsyMCwgMTAsIDMwLCA0MF1cbiAgICogfSwge1xuICAgKiAgIGNoYXJ0UGFkZGluZzogMzAsXG4gICAqICAgbGFiZWxPZmZzZXQ6IDUwLFxuICAgKiAgIGxhYmVsRGlyZWN0aW9uOiAnZXhwbG9kZSdcbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIE92ZXJyaWRpbmcgdGhlIGNsYXNzIG5hbWVzIGZvciBpbmRpdmlkdWFsIHNlcmllcyBhcyB3ZWxsIGFzIGEgbmFtZSBhbmQgbWV0YSBkYXRhLlxuICAgKiAvLyBUaGUgbmFtZSB3aWxsIGJlIHdyaXR0ZW4gYXMgY3Q6c2VyaWVzLW5hbWUgYXR0cmlidXRlIGFuZCB0aGUgbWV0YSBkYXRhIHdpbGwgYmUgc2VyaWFsaXplZCBhbmQgd3JpdHRlblxuICAgKiAvLyB0byBhIGN0Om1ldGEgYXR0cmlidXRlLlxuICAgKiBuZXcgQ2hhcnRpc3QuUGllKCcuY3QtY2hhcnQnLCB7XG4gICAqICAgc2VyaWVzOiBbe1xuICAgKiAgICAgdmFsdWU6IDIwLFxuICAgKiAgICAgbmFtZTogJ1NlcmllcyAxJyxcbiAgICogICAgIGNsYXNzTmFtZTogJ215LWN1c3RvbS1jbGFzcy1vbmUnLFxuICAgKiAgICAgbWV0YTogJ01ldGEgT25lJ1xuICAgKiAgIH0sIHtcbiAgICogICAgIHZhbHVlOiAxMCxcbiAgICogICAgIG5hbWU6ICdTZXJpZXMgMicsXG4gICAqICAgICBjbGFzc05hbWU6ICdteS1jdXN0b20tY2xhc3MtdHdvJyxcbiAgICogICAgIG1ldGE6ICdNZXRhIFR3bydcbiAgICogICB9LCB7XG4gICAqICAgICB2YWx1ZTogNzAsXG4gICAqICAgICBuYW1lOiAnU2VyaWVzIDMnLFxuICAgKiAgICAgY2xhc3NOYW1lOiAnbXktY3VzdG9tLWNsYXNzLXRocmVlJyxcbiAgICogICAgIG1ldGE6ICdNZXRhIFRocmVlJ1xuICAgKiAgIH1dXG4gICAqIH0pO1xuICAgKi9cbiAgZnVuY3Rpb24gUGllKHF1ZXJ5LCBkYXRhLCBvcHRpb25zLCByZXNwb25zaXZlT3B0aW9ucykge1xuICAgIENoYXJ0aXN0LlBpZS5zdXBlci5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGEsXG4gICAgICBkZWZhdWx0T3B0aW9ucyxcbiAgICAgIENoYXJ0aXN0LmV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpLFxuICAgICAgcmVzcG9uc2l2ZU9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQ3JlYXRpbmcgcGllIGNoYXJ0IHR5cGUgaW4gQ2hhcnRpc3QgbmFtZXNwYWNlXG4gIENoYXJ0aXN0LlBpZSA9IENoYXJ0aXN0LkJhc2UuZXh0ZW5kKHtcbiAgICBjb25zdHJ1Y3RvcjogUGllLFxuICAgIGNyZWF0ZUNoYXJ0OiBjcmVhdGVDaGFydCxcbiAgICBkZXRlcm1pbmVBbmNob3JQb3NpdGlvbjogZGV0ZXJtaW5lQW5jaG9yUG9zaXRpb25cbiAgfSk7XG5cbn0odGhpcyB8fCBnbG9iYWwsIENoYXJ0aXN0KSk7XG5cbnJldHVybiBDaGFydGlzdDtcblxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/chartist/dist/chartist.js\n"); @@ -209,8 +207,6 @@ eval("// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distribute \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, top-level-this-exports */ -/*! CommonJS bailout: this is used directly at 14:2-6 */ -/*! CommonJS bailout: module.exports is used directly at 11:65-79 */ /***/ (function(module) { eval("// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n true ? module.exports = factory() :\n 0;\n}(this, (function () { 'use strict';\n\n // Kludges for bugs and behavior differences that can't be feature\n // detected are enabled based on userAgent etc sniffing.\n var userAgent = navigator.userAgent;\n var platform = navigator.platform;\n\n var gecko = /gecko\\/\\d/i.test(userAgent);\n var ie_upto10 = /MSIE \\d/.test(userAgent);\n var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n var edge = /Edge\\/(\\d+)/.exec(userAgent);\n var ie = ie_upto10 || ie_11up || edge;\n var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n var webkit = !edge && /WebKit\\//.test(userAgent);\n var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n var chrome = !edge && /Chrome\\//.test(userAgent);\n var presto = /Opera\\//.test(userAgent);\n var safari = /Apple Computer/.test(navigator.vendor);\n var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n var phantom = /PhantomJS/.test(userAgent);\n\n var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n var android = /Android/.test(userAgent);\n // This is woefully incomplete. Suggestions for alternative methods welcome.\n var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n var mac = ios || /Mac/.test(platform);\n var chromeOS = /\\bCrOS\\b/.test(userAgent);\n var windows = /win/i.test(platform);\n\n var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n if (presto_version) { presto_version = Number(presto_version[1]); }\n if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n var captureRightClick = gecko || (ie && ie_version >= 9);\n\n function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n var rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n };\n\n function removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n }\n\n function removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n }\n\n function elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n }\n // wrapper for elt, which removes the elt from the accessibility tree\n function eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n }\n\n var range;\n if (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n }; }\n else { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n }; }\n\n function contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n }\n\n function activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n }\n\n function addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n }\n function joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n }\n\n var selectInput = function(node) { node.select(); };\n if (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n else if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n function bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n }\n\n function copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n }\n\n // Counts the column offset in a string, taking tabs into account.\n // Used mostly to find indentation.\n function countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n }\n\n var Delayed = function() {\n this.id = null;\n this.f = null;\n this.time = 0;\n this.handler = bind(this.onTimeout, this);\n };\n Delayed.prototype.onTimeout = function (self) {\n self.id = 0;\n if (self.time <= +new Date) {\n self.f();\n } else {\n setTimeout(self.handler, self.time - +new Date);\n }\n };\n Delayed.prototype.set = function (ms, f) {\n this.f = f;\n var time = +new Date + ms;\n if (!this.id || time < this.time) {\n clearTimeout(this.id);\n this.id = setTimeout(this.handler, ms);\n this.time = time;\n }\n };\n\n function indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n }\n\n // Number of pixels added to scroller and sizer to hide scrollbar\n var scrollerGap = 50;\n\n // Returned or thrown by various protocols to signal 'I'm not\n // handling this'.\n var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n // Reused option objects for setSelection & friends\n var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n // The inverse of countColumn -- find the offset that corresponds to\n // a particular column.\n function findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n }\n\n var spaceStrs = [\"\"];\n function spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n }\n\n function lst(arr) { return arr[arr.length-1] }\n\n function map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n }\n\n function insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n }\n\n function nothing() {}\n\n function createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n }\n\n var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n function isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n }\n function isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n }\n\n function isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n }\n\n // Extending unicode characters. A series of a non-extending char +\n // any number of extending chars is treated as a single unit as far\n // as editing and measuring is concerned. This is not fully correct,\n // since some scripts/fonts/browsers also treat other configurations\n // of code points as a group.\n var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n function skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n }\n\n // Returns the value from the range [`from`; `to`] that satisfies\n // `pred` and is closest to `from`. Assumes that at least `to`\n // satisfies `pred`. Supports `from` being greater than `to`.\n function findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n }\n\n // BIDI HELPERS\n\n function iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n }\n\n var bidiOther = null;\n function getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n }\n\n // Bidirectional ordering algorithm\n // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n // that this (partially) implements.\n\n // One-char codes used for character types:\n // L (L): Left-to-Right\n // R (R): Right-to-Left\n // r (AL): Right-to-Left Arabic\n // 1 (EN): European Number\n // + (ES): European Number Separator\n // % (ET): European Number Terminator\n // n (AN): Arabic Number\n // , (CS): Common Number Separator\n // m (NSM): Non-Spacing Mark\n // b (BN): Boundary Neutral\n // s (B): Paragraph Separator\n // t (S): Segment Separator\n // w (WS): Whitespace\n // N (ON): Other Neutrals\n\n // Returns null if characters are ordered as they appear\n // (left-to-right), or an array of sections ({from, to, level}\n // objects) in the order in which they occur visually.\n var bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n at += isRTL;\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n })();\n\n // Get the bidi ordering for the given line (and cache it). Returns\n // false for lines that are fully left-to-right, and an array of\n // BidiSpan objects otherwise.\n function getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n }\n\n // EVENT HANDLING\n\n // Lightweight event framework. on/off also work on DOM nodes,\n // registering native DOM handlers.\n\n var noHandlers = [];\n\n var on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers || (emitter._handlers = {});\n map[type] = (map[type] || noHandlers).concat(f);\n }\n };\n\n function getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n }\n\n function off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map = emitter._handlers, arr = map && map[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n }\n\n function signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n }\n\n // The DOM events that CodeMirror handles can be overridden by\n // registering a (non-DOM) handler on the editor for the event name,\n // and preventDefault-ing the event in that handler.\n function signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n }\n\n function signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n }\n\n function hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n }\n\n // Add on and off methods to a constructor's prototype, to make\n // registering events on such objects more convenient.\n function eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n }\n\n // Due to the fact that we still support jurassic IE versions, some\n // compatibility wrappers are needed.\n\n function e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n }\n function e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n }\n function e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n }\n function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n function e_target(e) {return e.target || e.srcElement}\n function e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n }\n\n // Detect drag-and-drop\n var dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n }();\n\n var zwspSupported;\n function zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n }\n\n // Feature-detect IE's crummy client rect reporting for bidi text\n var badBidiRects;\n function hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n }\n\n // See if \"\".split is the broken IE version, if so, provide an\n // alternative way to split lines.\n var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n var hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n } : function (te) {\n var range;\n try {range = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range || range.parentElement() != te) { return false }\n return range.compareEndPoints(\"StartToEnd\", range) != 0\n };\n\n var hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n })();\n\n var badZoomedRects = null;\n function hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n }\n\n // Known modes, by name and by MIME\n var modes = {}, mimeModes = {};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n function defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n }\n\n function defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n }\n\n // Given a MIME type, a {name, ...options} config object, or a name\n // string, return a mode config object.\n function resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n }\n\n // Given a mode spec (anything that resolveMode accepts), find and\n // initialize an actual mode object.\n function getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n }\n\n // This can be used to attach properties to mode objects from\n // outside the actual mode definition.\n var modeExtensions = {};\n function extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n }\n\n function copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n }\n\n // Given a mode and a state (for that mode), find the inner mode and\n // state at the position that the state refers to.\n function innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n }\n\n function startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n }\n\n // STRING STREAM\n\n // Fed to the mode parsers, provides helper functions to make\n // parsers more succinct.\n\n var StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n };\n\n StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n StringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n };\n StringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n };\n StringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n };\n StringStream.prototype.eatSpace = function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n return this.pos > start\n };\n StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n StringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n };\n StringStream.prototype.backUp = function (n) {this.pos -= n;};\n StringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n };\n StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n };\n StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n StringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n };\n StringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n };\n StringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n };\n\n // Find the line object corresponding to the given line number.\n function getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n }\n\n // Get the part of a document between two positions, as an array of\n // strings.\n function getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n }\n // Get the lines between from and to, as array of strings.\n function getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n }\n\n // Update the height of a line, propagating the height change\n // upwards to parent nodes.\n function updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n }\n\n // Given a line object, find its line number by walking up through\n // its parent links.\n function lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n }\n\n // Find the line at the given vertical position, using the height\n // information in the document tree.\n function lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n }\n\n function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n function lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n }\n\n // A Pos instance represents a position within the text.\n function Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n }\n\n // Compare two positions, return 0 if they are the same, a negative\n // number when a is less, and a positive number otherwise.\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n function copyPos(x) {return Pos(x.line, x.ch)}\n function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n // Most of the external API clips given positions to make sure they\n // actually exist within the document.\n function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n function clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n }\n function clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n }\n function clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n }\n\n var SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n };\n\n var Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n };\n\n Context.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n };\n\n Context.prototype.baseToken = function (n) {\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n };\n\n Context.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n };\n\n Context.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n };\n\n Context.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n };\n\n\n // Compute a style array (an array starting with a mode generation\n // -- for invalidation -- followed by pairs of end positions and\n // style strings), which is used to highlight the tokens on the\n // line.\n function highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n }\n\n function getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n }\n\n function getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n }\n\n // Lightweight form of highlight -- proceed over this line and\n // update state, but don't save a style array. Used for lines that\n // aren't currently visible.\n function processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n }\n\n function callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n }\n\n function readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n }\n\n var Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n };\n\n // Utility for getTokenAt and getLineTokens\n function takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n }\n\n function extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n }\n\n // Run the given mode's parser over a line, calling f for each token.\n function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n }\n\n // Finds the line to start with when starting a parse. Tries to\n // find a line with a stateAfter, so that it can start with a\n // valid state. If that fails, it returns the line with the\n // smallest indentation, which tends to need the least context to\n // parse correctly.\n function findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n }\n\n function retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n }\n\n // Optimize some code when these features are not used.\n var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n function seeReadOnlySpans() {\n sawReadOnlySpans = true;\n }\n\n function seeCollapsedSpans() {\n sawCollapsedSpans = true;\n }\n\n // TEXTMARKER SPANS\n\n function MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n }\n\n // Search an array of spans for a span matching the given marker.\n function getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n }\n // Remove a span from an array, returning undefined if no spans are\n // left (we don't store arrays for lines without spans).\n function removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n }\n // Add a span to a line.\n function addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n }\n\n // Used for the algorithm that adjusts markers for a change in the\n // document. These functions cut an array of spans at a given\n // character position, returning an array of remaining chunks (or\n // undefined if nothing remains).\n function markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n }\n function markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n }\n\n // Given a change object, compute the new set of marker spans that\n // cover the line in which the change took place. Removes spans\n // entirely within the change, reconnects spans belonging to the\n // same marker that appear on both sides of the change, and cuts off\n // spans partially within the change. Returns an array of span\n // arrays with one element for each line in (after) the change.\n function stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n }\n\n // Remove spans that are empty and don't have a clearWhenEmpty\n // option of false.\n function clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n }\n\n // Used to 'clip' out readOnly ranges when making a change.\n function removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n }\n\n // Connect or disconnect spans from a line.\n function detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n }\n function attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n }\n\n // Helpers used when computing which overlapping collapsed span\n // counts as the larger one.\n function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n // Returns a number indicating which of two overlapping collapsed\n // spans is larger (and thus includes the other). Falls back to\n // comparing ids when the spans cover exactly the same range.\n function compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n }\n\n // Find out whether a line ends or starts in a collapsed span. If\n // so, return the marker for that span.\n function collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n }\n function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n function collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n }\n\n // Test whether there exists a collapsed span that partially\n // overlaps (covers the start or end, but not both) of a new span.\n // Such overlap is not allowed.\n function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n var line = getLine(doc, lineNo);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n }\n\n // A visual line is a line as drawn on the screen. Folding, for\n // example, can cause multiple logical lines to appear on the same\n // visual line. This finds the start of the visual line that the\n // given line is part of (usually that is the line itself).\n function visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n }\n\n function visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n }\n\n // Returns an array of logical lines that continue the visual line\n // started by the argument, or undefined if there are no such lines.\n function visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n }\n\n // Get the line number of the start of the visual line that the\n // given line number is part of.\n function visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n }\n\n // Get the line number of the start of the next visual line after\n // the given line.\n function visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n }\n\n // Compute whether a line is hidden. Lines count as hidden when they\n // are part of a visual line that starts with another line, or when\n // they are entirely covered by collapsed, non-widget span.\n function lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n }\n function lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n }\n\n // Find the height above the given line.\n function heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n }\n\n // Compute the character length of a line, taking into account\n // collapsed ranges (see markText) that might hide parts, and join\n // other lines onto it.\n function lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n }\n\n // Find the longest line in the document.\n function findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n }\n\n // LINE DATA STRUCTURE\n\n // Line objects. These hold state related to a line, including\n // highlighting info (the styles array).\n var Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n };\n\n Line.prototype.lineNo = function () { return lineNo(this) };\n eventMixin(Line);\n\n // Change the content (text, markers) of a line. Automatically\n // invalidates cached information and tries to re-estimate the\n // line's height.\n function updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n }\n\n // Detach a line from the document tree and its markers.\n function cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n }\n\n // Convert a style as returned by a mode (either null, or a string\n // containing one or more styles) to a CSS style. This is cached,\n // and also looks for line-wide styles.\n var styleToClassCache = {}, styleToClassCacheWithMode = {};\n function interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n }\n\n // Render the DOM representation of the text of a line. Also builds\n // up a 'line map', which points at the DOM nodes that represent\n // specific stretches of text, and is used by the measuring code.\n // The returned object contains the DOM node, this map, and\n // information about line-wide styles that were set by the mode.\n function buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n }\n\n function defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n }\n\n // Build up the DOM representation for a single token, and add it to\n // the line map. Takes care to render special characters separately.\n function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css || attributes) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (attributes) {\n for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n { token.setAttribute(attr, attributes[attr]); } }\n }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n }\n\n // Change some spaces to NBSP to prevent the browser from collapsing\n // trailing spaces at the end of a line when rendering text (issue #1362).\n function splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n }\n\n // Work around nonsense dimensions being reported for stretches of\n // right-to-left text.\n function buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, css, attributes) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n }\n\n function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n }\n\n // Outputs a number of spans to make up a line, taking highlighting\n // and marked text into account.\n function insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n attributes = null;\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n // support for the old title property\n // https://github.com/codemirror/CodeMirror/pull/5673\n if (m.title) { (attributes || (attributes = {})).title = m.title; }\n if (m.attributes) {\n for (var attr in m.attributes)\n { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n }\n\n\n // These objects are used to represent the visible (currently drawn)\n // part of the document. A LineView may correspond to multiple\n // logical lines, if those are connected by collapsed ranges.\n function LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n }\n\n // Create a range of LineView objects for the given lines.\n function buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n }\n\n var operationGroup = null;\n\n function pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n }\n\n function fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n }\n\n function finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n }\n\n var orphanDelayedCallbacks = null;\n\n // Often, we want to signal events at a point where we are in the\n // middle of some work, but don't want the handler to start calling\n // other methods on the editor, which might be in an inconsistent\n // state or simply not expect any other events to happen.\n // signalLater looks whether there are any handlers, and schedules\n // them to be executed when the last operation ends, or, if no\n // operation is active, when a timeout fires.\n function signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n }\n\n function fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n }\n\n // When an aspect of a line changes, a string is added to\n // lineView.changes. This updates the relevant part of the line's\n // DOM structure.\n function updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n }\n\n // Lines with gutter elements, widgets or a background class need to\n // be wrapped, and have the extra elements added to the wrapper div\n function ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n }\n\n function updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n }\n\n // Wrapper around buildLineContent which will reuse the structure\n // in display.externalMeasured when possible.\n function getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n }\n\n // Redraw the line's text. Interacts with the background and text\n // classes because the mode may output tokens that influence these\n // classes.\n function updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n }\n\n function updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n }\n\n function updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n }\n\n function updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n var isWidget = classTest(\"CodeMirror-linewidget\");\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n }\n\n // Build a line's DOM representation from scratch\n function buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n }\n\n // A lineView may contain multiple logical lines (when merged by\n // collapsed spans). The widgets for all of them need to be drawn.\n function insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n }\n\n function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n }\n\n function positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n }\n\n function widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n }\n\n // Return true when the given mouse event happened in a widget\n function eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n }\n\n // POSITION MEASUREMENT\n\n function paddingTop(display) {return display.lineSpace.offsetTop}\n function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n function paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n }\n\n function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n function displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n }\n function displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n }\n\n // Ensure the lineView.wrapping.heights array is populated. This is\n // an array of bottom offsets for the lines that make up a drawn\n // line. When lineWrapping is on, there might be more than one\n // height.\n function ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n }\n\n // Find a line map (mapping character offsets to text nodes) and a\n // measurement cache for the given line number. (A line view might\n // contain multiple lines when collapsed ranges are present.)\n function mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n }\n\n // Render a line into the hidden node display.externalMeasured. Used\n // when measurement is needed for a line that's not in the viewport.\n function updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n }\n\n // Get a {top, bottom, left, right} box (in line-local coordinates)\n // for a given character.\n function measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n }\n\n // Find a line view that corresponds to the given line number.\n function findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n }\n\n // Measurement can be split in two steps, the set-up work that\n // applies to the whole line, and the measurement of the actual\n // character. Functions like coordsChar, that need to do a lot of\n // measurements in a row, can thus ensure that the set-up work is\n // only done once.\n function prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n }\n\n // Given a prepared measurement object, measures the position of an\n // actual character (or fetches it from the cache).\n function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n }\n\n var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n function nodeAndOffsetInLineMap(map, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map.length; i += 3) {\n mStart = map[i];\n mEnd = map[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n node = map[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n node = map[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n }\n\n function getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n }\n\n function measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n }\n\n // Work around problem with bounding client rects on ranges being\n // returned incorrectly when zoomed on IE10 and below.\n function maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n }\n\n function clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n }\n\n function clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n }\n\n function clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n }\n\n function pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n }\n function pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n }\n\n function widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n }\n\n // Converts a {top, bottom, left, right} box from line-local\n // coordinates into another coordinate system. Context may be one of\n // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n // or \"page\".\n function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n }\n\n // Coverts a box from \"div\" coords to another coordinate system.\n // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n function fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n }\n\n function charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n }\n\n // Returns a box for a given cursor position, which may have an\n // 'other' property containing the position of the secondary cursor\n // on a bidi boundary.\n // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n // and after `char - 1` in writing order of `char - 1`\n // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n // and before `char` in writing order of `char`\n // Examples (upper-case letters are RTL, lower-case are LTR):\n // Pos(0, 1, ...)\n // before after\n // ab a|b a|b\n // aB a|B aB|\n // Ab |Ab A|b\n // AB B|A B|A\n // Every position after the last character on a line is considered to stick\n // to the last character on the line.\n function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n }\n\n // Used to cheaply estimate the coordinates for a position. Used for\n // intermediate scroll updates.\n function estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n }\n\n // Positions returned by coordsChar contain some extra information.\n // xRel is the relative x position of the input coordinates compared\n // to the found position (so xRel > 0 means the coordinates are to\n // the right of the character position, for example). When outside\n // is true, that means the coordinates lie outside the line's\n // vertical range.\n function PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = outside; }\n return pos\n }\n\n // Compute the character position closest to the given coordinates.\n // Input must be lineSpace-local (\"div\" coordinate system).\n function coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n }\n\n function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n }\n\n function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n }\n\n // Returns true if the given side of a box is after the given\n // coordinates, in top-to-bottom, left-to-right order.\n function boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n }\n\n function coordsCharInner(cm, lineObj, lineNo, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight; box.bottom += widgetHeight;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n }\n\n function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n }\n\n function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n }\n\n var measureText;\n // Compute the default text height.\n function textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n }\n\n // Compute the default character width.\n function charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n }\n\n // Do a bulk-read of the DOM positions and sizes needed to draw the\n // view, so that we don't interleave reading and writing to the DOM.\n function getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n var id = cm.display.gutterSpecs[i].className;\n left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[id] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n }\n\n // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n // but using getBoundingClientRect to get a sub-pixel-accurate\n // result.\n function compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n }\n\n // Returns a function that estimates the height of a line, to use as\n // first approximation until the line becomes visible (and is thus\n // properly measurable).\n function estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n }\n\n function estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n }\n\n // Given a mouse event, find the corresponding position. If liberal\n // is false, it checks whether a gutter or scrollbar was clicked,\n // and returns null if it was. forRect is used by rectangular\n // selections, and tries to estimate a character position even for\n // coordinates beyond the right of the text.\n function posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e$1) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n }\n\n // Find the view element corresponding to a given line. Return null\n // when the line isn't visible.\n function findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n }\n\n // Updates the display.view data structure for a given change to the\n // document. From and to are in pre-change coordinates. Lendiff is\n // the amount of lines added or subtracted by the change. This is\n // used for changes that span multiple lines, or change the way\n // lines are divided into visual lines. regLineChange (below)\n // registers single-line changes.\n function regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n }\n\n // Register a change to a single line. Type must be one of \"text\",\n // \"gutter\", \"class\", \"widget\"\n function regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n }\n\n // Clear the view.\n function resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n }\n\n function viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n }\n\n // Force the view to cover a given range, adding empty view element\n // or clipping off existing ones as needed.\n function adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n }\n\n // Count the number of lines in the view whose DOM representation is\n // out of date (or nonexistent).\n function countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n }\n\n function updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n }\n\n function prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range = doc.sel.ranges[i];\n if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n var collapsed = range.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range, selFragment); }\n }\n return result\n }\n\n // Draws a cursor for the given range\n function drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n }\n\n function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n // Draws the given range as a highlighted selection\n function drawSelectionRange(cm, range, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range.from(), sTo = range.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n }\n\n // Cursor-blinking\n function restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () {\n if (!cm.hasFocus()) { onBlur(cm); }\n display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n }, cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n }\n\n function ensureFocus(cm) {\n if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n }\n\n function delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n } }, 100);\n }\n\n function onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n }\n function onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n }\n\n // Read the actual heights of the rendered lines, and update their\n // stored heights to match.\n function updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], wrapping = cm.options.lineWrapping;\n var height = (void 0), width = 0;\n if (cur.hidden) { continue }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n // Check that lines don't extend past the right of the current\n // editor width\n if (!wrapping && cur.text.firstChild)\n { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n }\n var diff = cur.line.height - height;\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n if (width > cm.display.sizerWidth) {\n var chWidth = Math.ceil(width / charWidth(cm.display));\n if (chWidth > cm.display.maxLineLength) {\n cm.display.maxLineLength = chWidth;\n cm.display.maxLine = cur.line;\n cm.display.maxLineChanged = true;\n }\n }\n }\n }\n\n // Read and store the height of line widgets associated with the\n // given line.\n function updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n }\n\n // Compute the lines that are visible in a given viewport (defaults\n // the the current scroll position). viewport may contain top,\n // height, and ensure (see op.scrollToPos) properties.\n function visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n }\n\n // SCROLLING THINGS INTO VIEW\n\n // If an editor sits on the top or bottom of the window, partially\n // scrolled out of view, this ensures that the cursor is visible.\n function maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n }\n\n // Scroll a given position into view (immediately), verifying that\n // it actually became visible (as line heights are accurately\n // measured, the position of something may 'drift' during drawing).\n function scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n }\n\n // Scroll a given set of coordinates into view (immediately).\n function scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n }\n\n // Calculate a new scroll position needed to scroll the given\n // rectangle into view. Returns an object with scrollTop and\n // scrollLeft properties. When these are undefined, the\n // vertical/horizontal position does not need to be adjusted.\n function calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n }\n\n // Store a relative adjustment to the scroll position in the current\n // operation (to be applied when the operation finishes).\n function addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n }\n\n // Make sure that at the end of the operation the current cursor is\n // shown.\n function ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n }\n\n function scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n }\n\n function scrollToRange(cm, range) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range;\n }\n\n // When an operation has its scrollToPos property set, and another\n // scroll action is applied before the end of the operation, this\n // 'simulates' scrolling that position into view in a cheap way, so\n // that the effect of intermediate scroll commands is not ignored.\n function resolveScrollToPos(cm) {\n var range = cm.curOp.scrollToPos;\n if (range) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n scrollToCoordsRange(cm, from, to, range.margin);\n }\n }\n\n function scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n }\n\n // Sync the scrollable area and scrollbars, ensure the viewport\n // covers the visible area.\n function updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n }\n\n function setScrollTop(cm, val, forceScroll) {\n val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n }\n\n // Sync scroller and scrollbar, ensure the gutter elements are\n // aligned.\n function setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n }\n\n // SCROLLBARS\n\n // Prepare DOM reads needed to update the scrollbars. Done in one\n // shot to minimize update/measure roundtrips.\n function measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n }\n\n var NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n };\n\n NativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n };\n\n NativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n };\n\n NativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n };\n\n NativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n };\n\n NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n };\n\n NativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n };\n\n var NullScrollbars = function () {};\n\n NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n NullScrollbars.prototype.setScrollLeft = function () {};\n NullScrollbars.prototype.setScrollTop = function () {};\n NullScrollbars.prototype.clear = function () {};\n\n function updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n }\n\n // Re-synchronize the fake scrollbars with the actual size of the\n // content.\n function updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n }\n\n var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n function initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n // Operations are used to wrap a series of changes to the editor\n // state in such a way that each change won't have to update the\n // cursor and display (which would be awkward, slow, and\n // error-prone). Instead, display updates are batched and then all\n // combined and executed at once.\n\n var nextOpId = 0;\n // Start a new operation.\n function startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: 0, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n pushOperation(cm.curOp);\n }\n\n // Finish an operation, updating the display and signalling delayed events\n function endOperation(cm) {\n var op = cm.curOp;\n if (op) { finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n }); }\n }\n\n // The DOM updates done when an operation finishes are batched so\n // that the minimum number of relayouts are required.\n function endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n }\n\n function endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n }\n\n function endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n }\n\n function endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n }\n\n function endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n }\n\n function endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n }\n\n // Run the given function in an operation\n function runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n }\n // Wraps a function in an operation. Returns the wrapped function.\n function operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n }\n // Used to add methods to editor and doc instances, wrapping them in\n // operations.\n function methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n }\n function docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n }\n\n // HIGHLIGHT WORKER\n\n function startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n }\n\n function highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n }\n\n // DISPLAY DRAWING\n\n var DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n };\n\n DisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n };\n DisplayUpdate.prototype.finish = function () {\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this.events[i]); }\n };\n\n function maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n }\n\n function selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n }\n\n function restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), range = document.createRange();\n range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n }\n\n // Does the actual updating of the line display. Bails out\n // (returning false) when there is nothing to be done and forced is\n // false.\n function updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n }\n\n function postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n } else if (first) {\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n }\n\n function updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n }\n\n // Sync the actual display DOM structure with display.view, removing\n // nodes for lines that are no longer in view, and creating the ones\n // that are not there yet, and updating the ones that are out of\n // date.\n function patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n }\n\n function updateGutterSpace(display) {\n var width = display.gutters.offsetWidth;\n display.sizer.style.marginLeft = width + \"px\";\n }\n\n function setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n }\n\n // Re-align line numbers and gutter marks to compensate for\n // horizontal scrolling.\n function alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n }\n\n // Used to ensure that the line number gutter is still the right\n // size for the current document size. Returns true when an update\n // is needed.\n function maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm.display);\n return true\n }\n return false\n }\n\n function getGutters(gutters, lineNumbers) {\n var result = [], sawLineNumbers = false;\n for (var i = 0; i < gutters.length; i++) {\n var name = gutters[i], style = null;\n if (typeof name != \"string\") { style = name.style; name = name.className; }\n if (name == \"CodeMirror-linenumbers\") {\n if (!lineNumbers) { continue }\n else { sawLineNumbers = true; }\n }\n result.push({className: name, style: style});\n }\n if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n return result\n }\n\n // Rebuild the gutter elements, ensure the margin to the left of the\n // code matches their width.\n function renderGutters(display) {\n var gutters = display.gutters, specs = display.gutterSpecs;\n removeChildren(gutters);\n display.lineGutter = null;\n for (var i = 0; i < specs.length; ++i) {\n var ref = specs[i];\n var className = ref.className;\n var style = ref.style;\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n if (style) { gElt.style.cssText = style; }\n if (className == \"CodeMirror-linenumbers\") {\n display.lineGutter = gElt;\n gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = specs.length ? \"\" : \"none\";\n updateGutterSpace(display);\n }\n\n function updateGutters(cm) {\n renderGutters(cm.display);\n regChange(cm);\n alignHorizontally(cm);\n }\n\n // The display handles the DOM integration, both for input reading\n // and content drawing. It holds references to DOM nodes and\n // display-related state.\n\n function Display(place, doc, input, options) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n renderGutters(d);\n\n input.init(d);\n }\n\n // Since the delta values reported on mouse wheel events are\n // unstandardized between browsers and even browser versions, and\n // generally horribly unpredictable, this code starts by measuring\n // the scroll effect that the first few mouse wheel events have,\n // and, from that, detects the way it can convert deltas to pixel\n // offsets afterwards.\n //\n // The reason we want to know the amount a wheel event will scroll\n // is that it gives us a chance to update the display before the\n // actual scrolling happens, reducing flickering.\n\n var wheelSamples = 0, wheelPixelsPerUnit = null;\n // Fill in a browser-detected starting value on browsers where we\n // know one. These don't have to be accurate -- the result of them\n // being wrong would just be a slight flicker on the first wheel\n // scroll (if it is large enough).\n if (ie) { wheelPixelsPerUnit = -.53; }\n else if (gecko) { wheelPixelsPerUnit = 15; }\n else if (chrome) { wheelPixelsPerUnit = -.7; }\n else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n function wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n }\n function wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n }\n\n function onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n }\n\n // Selection objects are immutable. A new one is created every time\n // the selection changes. A selection is one or more non-overlapping\n // (and non-touching) ranges, sorted, and an integer that indicates\n // which one is the primary selection (the one that's scrolled into\n // view, that getCursor returns, etc).\n var Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n };\n\n Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n Selection.prototype.equals = function (other) {\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n };\n\n Selection.prototype.deepCopy = function () {\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n };\n\n Selection.prototype.somethingSelected = function () {\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this.ranges[i].empty()) { return true } }\n return false\n };\n\n Selection.prototype.contains = function (pos, end) {\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n };\n\n var Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n };\n\n Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n // Take an unsorted, potentially overlapping set of ranges, and\n // build a selection out of it. 'Consumes' ranges array (modifying\n // it).\n function normalizeSelection(cm, ranges, primIndex) {\n var mayTouch = cm && cm.options.selectionsMayTouch;\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n var diff = cmp(prev.to(), cur.from());\n if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n }\n\n function simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n }\n\n // Compute the position of the end of a change (its 'to' property\n // refers to the pre-change end).\n function changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n }\n\n // Adjust a position to refer to the post-change position of the\n // same text, or the end of the change if the change covers it.\n function adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n }\n\n function computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n }\n\n function offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n }\n\n // Used by replaceSelections to allow moving the selection to the\n // start or around the replaced test. Hint may be \"start\" or \"around\".\n function computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n }\n\n // Used to get the editor into a consistent state again when options change.\n\n function loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n }\n\n function resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n }\n\n // DOCUMENT DATA STRUCTURE\n\n // By default, updates that start and end at the beginning of a line\n // are treated specially, in order to make the association of line\n // widgets and marker elements with the text behave more intuitive.\n function isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n }\n\n // Perform a change on the document data structure.\n function updateDoc(doc, change, markedSpans, estimateHeight) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n }\n\n // Call f for all linked documents.\n function linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n }\n\n // Attach a document to an editor.\n function attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n }\n\n function setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n }\n\n function directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n }\n\n function History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n }\n\n // Create a history change event from an updateDoc-style change\n // object.\n function historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n }\n\n // Pop all selection events off the end of a history array. Stop at\n // a change event.\n function clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n }\n\n // Find the top change event in the history. Pop off selection\n // events that are in the way.\n function lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n }\n\n // Register a change in the history. Merges changes that are within\n // a single operation, or are close together with an origin that\n // allows merging (starting with \"+\") into a single event.\n function addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n }\n\n function selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n }\n\n // Called whenever the selection changes, sets the new selection as\n // the pending selection in the history, and pushes the old pending\n // selection into the 'done' array when it was significantly\n // different (in number of selected ranges, emptiness, or time).\n function addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n }\n\n function pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n }\n\n // Used to store marked span information in the history.\n function attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n }\n\n // When un/re-doing restores text containing marked spans, those\n // that have been explicitly cleared should not be restored.\n function removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n }\n\n // Retrieve and filter the old marked spans stored in a change event.\n function getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n }\n\n // Used for un/re-doing changes from the history. Combines the\n // result of computing the existing spans with the set of spans that\n // existed in the history (so that deleting around a span and then\n // undoing brings back the span).\n function mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n }\n\n // Used both to provide a JSON-safe object in .getHistory, and, when\n // detaching a document, to split the history in two\n function copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n }\n\n // The 'scroll' parameter given to many of these indicated whether\n // the new cursor position should be scrolled into view after\n // modifying the selection.\n\n // If shift is held or the extend flag is set, extends a range to\n // include a given position (and optionally a second position).\n // Otherwise, simply returns the range between the given positions.\n // Used for cursor motion and such.\n function extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n }\n\n // Extend the primary selection range, discard the rest.\n function extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n }\n\n // Extend all selections (pos is an array of selections with length\n // equal the number of selections)\n function extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n }\n\n // Updates a single range in the selection.\n function replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n }\n\n // Reset the selection to a single range.\n function setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n }\n\n // Give beforeSelectionChange handlers a change to influence a\n // selection update.\n function filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n }\n\n function setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n }\n\n // Set a new selection.\n function setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n }\n\n function setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n { ensureCursorVisible(doc.cm); }\n }\n\n function setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = 1;\n doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n }\n\n // Verify that the selection does not partially select any atomic\n // marked ranges.\n function reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n }\n\n // Return a selection that does not partially select any atomic\n // ranges.\n function skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n }\n\n function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n\n // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n // is with selectLeft/Right\n var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? preventCursorRight : preventCursorLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? preventCursorLeft : preventCursorRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n }\n\n // Ensure a given position is not inside an atomic range.\n function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n }\n\n function movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n }\n\n function selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n }\n\n // UPDATING\n\n // Allow \"beforeChange\" event handlers to influence a change\n function filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) {\n if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n return null\n }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n }\n\n // Apply a change to a document, and add it to the document's\n // history, and propagating it to all linked documents.\n function makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n }\n\n function makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n }\n\n // Revert a change stored in a document's history.\n function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n }\n\n // Sub-views need their line numbers shifted when text is added\n // above or below them in the parent document.\n function shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n }\n\n // More lower-level change function, handling only a single document\n // (not linked ones).\n function makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n { doc.cantEdit = false; }\n }\n\n // Handle the interaction of a change to a document with the editor\n // that this document is part of.\n function makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n }\n\n function replaceRange(doc, code, from, to, origin) {\n var assign;\n\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n }\n\n // Rebasing/resetting history to deal with externally-sourced changes\n\n function rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n }\n\n // Tries to rebase an array of history events given a change in the\n // document. If the change touches the same lines as the event, the\n // event, and everything 'behind' it, is discarded. If the change is\n // before the event, the event's positions are updated. Uses a\n // copy-on-write scheme for the positions, to avoid having to\n // reallocate them all on every rebase, but also avoid problems with\n // shared position objects being unsafely updated.\n function rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n }\n\n function rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n }\n\n // Utility for applying a change to a line by handle or number,\n // returning the number and optionally registering the line as\n // changed.\n function changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n }\n\n // The document is represented as a BTree consisting of leaves, with\n // chunk of lines in them, and branches, with up to ten leaves or\n // other branch nodes below them. The top node is always a branch\n // node, and is the document object itself (meaning it has\n // additional methods and properties).\n //\n // All nodes have parent links. The tree is used both to go from\n // line numbers to line objects, and to go from objects to numbers.\n // It also indexes by height, and is used to convert between height\n // and line object, and to find the total height of the document.\n //\n // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n function LeafChunk(lines) {\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this;\n height += lines[i].height;\n }\n this.height = height;\n }\n\n LeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this.lines[i];\n this.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n for (var e = at + n; at < e; ++at)\n { if (op(this.lines[at])) { return true } }\n }\n };\n\n function BranchChunk(children) {\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n }\n\n BranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this.height -= oldHeight - child.height;\n if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this.children.splice(++i, 0, leaf);\n leaf.parent = this;\n }\n child.lines = child.lines.slice(0, remaining);\n this.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n for (var i = 0; i < this.children.length; ++i) {\n var child = this.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n };\n\n // Line widgets are block elements displayed above or below a line.\n\n var LineWidget = function(doc, node, options) {\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n };\n\n LineWidget.prototype.clear = function () {\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n };\n\n LineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n };\n eventMixin(LineWidget);\n\n function adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n }\n\n function addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n }\n\n // TEXTMARKERS\n\n // Created with markText and setBookmark methods. A TextMarker is a\n // handle that can be used to clear or find a marked position in the\n // document. Line objects hold arrays (markedSpans) containing\n // {from, to, marker} object pointing to such marker objects, and\n // indicating that such a marker is present on that line. Multiple\n // lines may point to the same marker when it spans across lines.\n // The spans will have null for their from/to properties when the\n // marker continues beyond the start/end of the line. Markers have\n // links back to the lines they currently touch.\n\n // Collapsed markers have unique ids, in order to be able to order\n // them, which is needed for uniquely determining an outer marker\n // when they overlap (they may nest, but not partially overlap).\n var nextMarkerId = 0;\n\n var TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n };\n\n // Clear the marker.\n TextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n };\n\n // Find the position of the marker in the document. Returns a {from,\n // to} object by default. Side can be passed to get a specific side\n // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n // Pos objects returned contain a line object, rather than a line\n // number (used to prevent looking up the same line twice).\n TextMarker.prototype.find = function (side, lineObj) {\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n };\n\n // Signals that the marker's widget changed, and surrounding layout\n // should be recomputed.\n TextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n };\n\n TextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n };\n\n TextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp\n ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n };\n eventMixin(TextMarker);\n\n // Create a marker, wire it up to the right lines, and\n function markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n marker.attributes || marker.title)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n }\n\n // SHARED TEXTMARKERS\n\n // A shared marker spans multiple linked documents. It is\n // implemented as a meta-marker-object controlling multiple normal\n // markers.\n var SharedTextMarker = function(markers, primary) {\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this; }\n };\n\n SharedTextMarker.prototype.clear = function () {\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this.markers[i].clear(); }\n signalLater(this, \"clear\");\n };\n\n SharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n };\n eventMixin(SharedTextMarker);\n\n function markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n }\n\n function findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n }\n\n function copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n }\n\n function detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n }\n\n var nextDocId = 0;\n var Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n };\n\n Doc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range.head; }\n else if (start == \"anchor\") { pos = range.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n else { pos = range.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this, ranges[i].anchor),\n clipPos(this, ranges[i].head)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(this.cm, out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {\n var this$1 = this;\n\n this.history = new History(this.history.maxGeneration);\n linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n },\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n span.from == null && lineNo != from.line ||\n span.from != null && lineNo == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo;\n });\n return clipPos(this, Pos(lineNo, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n if (other instanceof CodeMirror) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this.linked[i];\n if (link.doc != other) { continue }\n this.linked.splice(i, 1);\n other.unlinkDoc(this);\n detachSharedMarkers(findSharedMarkers(this));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n });\n\n // Public alias.\n Doc.prototype.eachLine = Doc.prototype.iter;\n\n // Kludge to work around strange IE behavior where it'll sometimes\n // re-fire a series of drag-related events right after the drop (#1551)\n var lastDrop = 0;\n\n function onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var markAsReadAndPasteIfAllFilesAreRead = function () {\n if (++read == n) {\n operation(cm, function () {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(\n text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n })();\n }\n };\n var readTextFromFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n var reader = new FileReader;\n reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n reader.onload = function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n markAsReadAndPasteIfAllFilesAreRead();\n return\n }\n text[i] = content;\n markAsReadAndPasteIfAllFilesAreRead();\n };\n reader.readAsText(file);\n };\n for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e$1){}\n }\n }\n\n function onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n }\n\n function onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n }\n\n function clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n }\n\n // These must be handled carefully, because naively registering a\n // handler for each editor will cause the editors to never be\n // garbage collected.\n\n function forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { editors.push(cm); }\n }\n if (editors.length) { editors[0].operation(function () {\n for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n }); }\n }\n\n var globalsRegistered = false;\n function ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n }\n function registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n }\n // Called when the window resizes\n function onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n }\n\n var keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n };\n\n // Number keys\n for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n // Alphabetic keys\n for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n // Function keys\n for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n var keyMap = {};\n\n keyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n };\n // Note that the save and find-related commands aren't defined by\n // default. User code or addons can define them. Unknown commands\n // are simply ignored.\n keyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n };\n // Very basic readline/emacs-style bindings, which are standard on Mac.\n keyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n };\n keyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n };\n keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n // KEYMAP DISPATCH\n\n function normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n }\n\n // This is a kludge to keep keymaps mostly working as raw objects\n // (backwards compatibility) while at the same time support features\n // like normalization and multi-stroke key bindings. It compiles a\n // new normalized keymap, and then updates the old object to reflect\n // this.\n function normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n }\n\n function lookupKey(key, map, handle, context) {\n map = getKeyMap(map);\n var found = map.call ? map.call(key, context) : map[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map.fallthrough) {\n if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map.fallthrough, handle, context) }\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n }\n\n // Modifier key presses don't count as 'real' key presses for the\n // purpose of keymap fallthrough.\n function isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n }\n\n function addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n }\n\n // Look up the name of a key as indicated by an event object.\n function keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n }\n\n function getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n }\n\n // Helper for deleting text near the selection(s), used to implement\n // backspace, delete, and similar functionality.\n function deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n }\n\n function moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n }\n\n function moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n }\n\n function endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n if (cm.doc.direction == \"rtl\") { dir = -dir; }\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n }\n\n function moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n }\n\n // Commands are parameter-less actions that can be performed on an\n // editor, mostly used for keybindings.\n var commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n };\n\n\n function lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n }\n function lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n }\n function lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n }\n\n // Run a handler that was bound to a key.\n function doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n }\n\n function lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n }\n\n // Note that, despite the name, this function is also used to check\n // for bound mouse clicks.\n\n var stopSeq = new Delayed;\n\n function dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n }\n\n function dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n }\n\n // Handle a key from the keydown event.\n function handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n }\n\n // Handle a key from the keypress event\n function handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n }\n\n var lastStoppedKey = null;\n function onKeyDown(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n { document.execCommand(\"cut\"); }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n }\n\n function showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n }\n\n function onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n }\n\n function onKeyPress(e) {\n var cm = this;\n if (e.target && e.target != cm.display.input.getField()) { return }\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n }\n\n var DOUBLECLICK_DELAY = 400;\n\n var PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n };\n\n PastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n };\n\n var lastClick, lastDoubleClick;\n function clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n }\n\n // A mouse down can be a single click, double click, triple click,\n // start of selection drag, start of text drag, new cursor\n // (ctrl-click), rectangle drag (alt-drag), or xwin\n // middle-click-paste. Or it might be a click on something we should\n // not interfere with, such as a scrollbar or widget.\n function onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { cm.display.input.onContextMenu(e); }\n else { delayBlurEvent(cm); }\n }\n }\n\n function handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n }\n\n function configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n }\n\n function leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n }\n\n // Start a text drag. When it ends, see if any dragging actually\n // happen, and treat as a click if it didn't.\n function leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if ((webkit && !safari) || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n delayBlurEvent(cm);\n setTimeout(function () { return display.input.focus(); }, 20);\n }\n\n function rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n }\n\n // Normal selection, as opposed to text dragging.\n function leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n else\n { ourRange = range; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range.anchor, anchor) > 0) {\n head = range.head;\n anchor = minPos(oldRange.from(), range.anchor);\n } else {\n head = range.anchor;\n anchor = maxPos(oldRange.to(), range.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n // If e is null or undefined we interpret this as someone trying\n // to explicitly cancel the selection rather than the user\n // letting go of the mouse button.\n if (e) {\n e_preventDefault(e);\n display.input.focus();\n }\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n }\n\n // Used when mouse-selecting to adjust the anchor to the proper side\n // of a bidi jump depending on the visual position of the head.\n function bidiSimplify(cm, range) {\n var anchor = range.anchor;\n var head = range.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n var order = getOrder(anchorLine);\n if (!order) { return range }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n }\n\n\n // Determines whether an event happened in the gutter, and fires the\n // handlers for the corresponding event.\n function gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e$1) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.display.gutterSpecs[i];\n signal(cm, type, cm, line, gutter.className, e);\n return e_defaultPrevented(e)\n }\n }\n }\n\n function clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n }\n\n // CONTEXT MENU HANDLING\n\n // To make the context menu work, we need to briefly unhide the\n // textarea (making it as unobtrusive as possible) to let the\n // right-click take effect on it.\n function onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n }\n\n function contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n }\n\n function themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n }\n\n var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n var defaults = {};\n var optionHandlers = {};\n\n function defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200c\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n updateGutters(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm, val) {\n cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n updateGutters(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm, val) {\n cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n updateGutters(cm);\n }, true);\n option(\"firstLineNumber\", 1, updateGutters, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n option(\"selectionsMayTouch\", false);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n\n option(\"screenReaderLabel\", null, function (cm, val) {\n val = (val === '') ? null : val;\n cm.display.input.screenReaderLabelChanged(val);\n });\n\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n option(\"phrases\", null);\n }\n\n function dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n }\n\n function wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n }\n\n // A CodeMirror instance represents an editor. This is the object\n // that user code is usually dealing with.\n\n function CodeMirror(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input, options);\n display.wrapper.CodeMirror = this;\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(function () {\n if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n }, 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n }\n\n // The default configuration options.\n CodeMirror.defaults = defaults;\n // Functions to run when options are changed.\n CodeMirror.optionHandlers = optionHandlers;\n\n // Attach the necessary event handlers when initializing the editor\n function registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n on(d.input.getField(), \"contextmenu\", function (e) {\n if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n });\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n }\n\n var initHooks = [];\n CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n // Indent the given line. The how parameter can be \"smart\",\n // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n // (typically set to true for forced single-line indents), empty\n // lines are not indented, and places where the mode returns Pass\n // are left alone.\n function indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n }\n\n // This will be set to a {lineWise: bool, text: [string]} object, so\n // that, when pasting, we know what kind of selections the copied\n // text was made out of.\n var lastCopied = null;\n\n function setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n }\n\n function applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var recent = +new Date - 200;\n var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput = cm.curOp.updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range = sel.ranges[i$1];\n var from = range.from(), to = range.to();\n if (range.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n { from = to = Pos(from.line, 0); }\n }\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n }\n\n function handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n }\n\n function triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range = sel.ranges[i];\n if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n var mode = cm.getModeAt(range.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n { indented = indentLine(cm, range.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n }\n }\n\n function copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n }\n\n function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n }\n\n function hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n }\n\n // The publicly visible API. Note that methodOp(f) means\n // 'wrap f in an operation, performed on its `this` parameter'.\n\n // This is not the complete set of editor methods. Most of the\n // methods defined on the Doc type are also injected into\n // CodeMirror.prototype, for backwards compatibility and\n // convenience.\n\n function addEditorMethods(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n },\n removeKeyMap: function(map) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map || maps[i].name == map) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this.state.modeGen++;\n regChange(this);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (!range.empty()) {\n var from = range.from(), to = range.to();\n var start = Math.max(end, from.line);\n end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this, j, how); }\n var newRanges = this.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range.head.line > end) {\n indentLine(this, range.head.line, how, true);\n end = range.head.line;\n if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range = this.doc.sel.primary();\n if (start == null) { pos = range.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range.from() : range.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range) {\n if (this$1.display.shift || this$1.doc.extend || range.empty())\n { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range.from() : range.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range) {\n var other = findPosH(doc, range.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range) {\n if (collapse)\n { return dir < 0 ? range.from() : range.to() }\n var headPos = cursorCoords(this$1, range.head, \"div\");\n if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range, margin) {\n if (range == null) {\n range = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range == \"number\") {\n range = {from: Pos(range, 0), to: null};\n } else if (range.from == null) {\n range = {from: range, to: null};\n }\n if (!range.to) { range.to = range.from; }\n range.margin = margin || 0;\n\n if (range.from.line != null) {\n scrollToRange(this, range);\n } else {\n scrollToCoordsRange(this, range.from, range.to, range.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo = this.display.viewFrom;\n this.doc.iter(lineNo, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n ++lineNo;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this.display);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n // Cancel the current text selection if any (#5821)\n if (this.state.selectingText) { this.state.selectingText(); }\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n phrase: function(phraseText) {\n var phrases = this.options.phrases;\n return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n },\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n }\n\n // Used for horizontal relative motion. Dir is -1 or 1 (left or\n // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n // doesn't cross line boundaries), \"word\" (across next word), or\n // \"group\" (to the start of next group of word or\n // non-word-non-whitespace chars). The visually param controls\n // whether, in right-to-left text, direction 1 means to move towards\n // the next index in the string, or towards the character to the right\n // of the current position. The resulting position will have a\n // hitSide=true property if it reached the end of the document.\n function findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n function findNextLine() {\n var l = pos.line + lineDir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (unit == \"codepoint\") {\n var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));\n if (isNaN(ch)) { next = null; }\n else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),\n -dir); }\n } else if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\" || unit == \"codepoint\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n }\n\n // For relative vertical movement. Dir may be -1 or 1. Unit can be\n // \"page\" or \"line\". The resulting position will have a hitSide=true\n // property if it reached the end of the document.\n function findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n }\n\n // CONTENTEDITABLE INPUT STYLE\n\n var ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n };\n\n ContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n function belongsToInput(e) {\n for (var t = e.target; t; t = t.parentNode) {\n if (t == div) { return true }\n if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n }\n return false\n }\n\n on(div, \"paste\", function (e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n };\n\n ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.div.setAttribute('aria-label', label);\n } else {\n this.div.removeAttribute('aria-label');\n }\n };\n\n ContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = document.activeElement == this.div;\n return result\n };\n\n ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n };\n\n ContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n };\n\n ContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n };\n\n ContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n };\n\n ContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n };\n\n ContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n };\n\n ContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n };\n\n ContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor() || document.activeElement != this.div)\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n };\n ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n ContentEditableInput.prototype.getField = function () { return this.div };\n\n ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n ContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor())\n { this.pollSelection(); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n };\n\n ContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n };\n\n ContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n };\n\n ContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n };\n\n ContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n };\n ContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n };\n ContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n };\n\n ContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n };\n\n ContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n };\n\n ContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n };\n\n ContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n };\n\n ContentEditableInput.prototype.onContextMenu = function () {};\n ContentEditableInput.prototype.resetPosition = function () {};\n\n ContentEditableInput.prototype.needsContentAttribute = true;\n\n function posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n }\n\n function isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n }\n\n function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n function domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range = found[0].find(0)))\n { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n }\n\n function domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n }\n\n function locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map.length; j += 3) {\n var curNode = map[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n }\n\n // TEXTAREA INPUT STYLE\n\n var TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n };\n\n TextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = +new Date;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n if (!te.dispatchEvent) {\n cm.state.pasteIncoming = +new Date;\n input.focus();\n return\n }\n\n // Pass the `paste` event to the textarea so it's handled by its event listener.\n var event = new Event(\"paste\");\n event.clipboardData = e.clipboardData;\n te.dispatchEvent(event);\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n };\n\n TextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n };\n\n TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n // Label for screenreaders, accessibility\n if(label) {\n this.textarea.setAttribute('aria-label', label);\n } else {\n this.textarea.removeAttribute('aria-label');\n }\n };\n\n TextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n };\n\n TextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n };\n\n // Reset the input to correspond to the selection (or to be empty,\n // when not typing and nothing is selected)\n TextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n };\n\n TextareaInput.prototype.getField = function () { return this.textarea };\n\n TextareaInput.prototype.supportsTouch = function () { return false };\n\n TextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n };\n\n TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n TextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n };\n\n TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n // Poll for input changes, using the normal rate of polling. This\n // runs as long as the editor is focused.\n TextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n };\n\n // When an event has just come in that is likely to add or change\n // something in the input textarea, we poll faster, to ensure that\n // the change appears on the screen quickly.\n TextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n };\n\n // Read input from the textarea, and update the document to match.\n // When something is selected, it is present in the textarea, and\n // selected (unless it is huge, in which case a placeholder is\n // used). When nothing is selected, the cursor sits after previously\n // seen text (can be empty), which is stored in prevInput (we must\n // not reset the textarea when typing, because that breaks IME).\n TextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n };\n\n TextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n };\n\n TextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n };\n\n TextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n if (input.contextMenuPending) { input.contextMenuPending(); }\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n input.wrapper.style.cssText = \"position: static\";\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = rehide;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n if (input.contextMenuPending != rehide) { return }\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n };\n\n TextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n this.textarea.readOnly = !!val;\n };\n\n TextareaInput.prototype.setUneditable = function () {};\n\n TextareaInput.prototype.needsContentAttribute = false;\n\n function fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n }\n\n function addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n }\n\n // EDITOR CONSTRUCTOR\n\n defineOptions(CodeMirror);\n\n addEditorMethods(CodeMirror);\n\n // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\n eventMixin(Doc);\n CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n // Extra arguments are stored as the mode's dependencies, which is\n // used by (legacy) mechanisms like loadmode.js to automatically\n // load a mode. (Preferred mechanism is the require/define calls.)\n CodeMirror.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n defineMode.apply(this, arguments);\n };\n\n CodeMirror.defineMIME = defineMIME;\n\n // Minimal default mode.\n CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n // EXTENSIONS\n\n CodeMirror.defineExtension = function (name, func) {\n CodeMirror.prototype[name] = func;\n };\n CodeMirror.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n };\n\n CodeMirror.fromTextArea = fromTextArea;\n\n addLegacyProps(CodeMirror);\n\n CodeMirror.version = \"5.58.2\";\n\n return CodeMirror;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuanM/NTZiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFLEtBQTREO0FBQzlELEVBQUUsQ0FDd0Q7QUFDMUQsQ0FBQyxxQkFBcUI7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0MsR0FBRztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw0Q0FBNEM7QUFDbkUsK0NBQStDLGdCQUFnQixlQUFlO0FBQzlFO0FBQ0E7QUFDQTs7QUFFQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5Q0FBeUMsV0FBVztBQUNwRCxPQUFPLDZCQUE2QjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLHlCQUF5QjtBQUM3QyxnQkFBZ0IseUJBQXlCO0FBQ3pDLHFDQUFxQyxpREFBaUQ7QUFDdEYsdUJBQXVCLGdCQUFnQixvQkFBb0IsT0FBTywyQkFBMkIsRUFBRTtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLFFBQVE7QUFDUjtBQUNBLFNBQVMsc0NBQXNDO0FBQy9DLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLE9BQU8sMEJBQTBCO0FBQ2pDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsaUNBQWlDLG9CQUFvQjtBQUNyRCw0QkFBNEI7QUFDNUIsS0FB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Iiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29kZU1pcnJvciwgY29weXJpZ2h0IChjKSBieSBNYXJpam4gSGF2ZXJiZWtlIGFuZCBvdGhlcnNcbi8vIERpc3RyaWJ1dGVkIHVuZGVyIGFuIE1JVCBsaWNlbnNlOiBodHRwczovL2NvZGVtaXJyb3IubmV0L0xJQ0VOU0VcblxuLy8gVGhpcyBpcyBDb2RlTWlycm9yIChodHRwczovL2NvZGVtaXJyb3IubmV0KSwgYSBjb2RlIGVkaXRvclxuLy8gaW1wbGVtZW50ZWQgaW4gSmF2YVNjcmlwdCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIncyBET00uXG4vL1xuLy8gWW91IGNhbiBmaW5kIHNvbWUgdGVjaG5pY2FsIGJhY2tncm91bmQgZm9yIHNvbWUgb2YgdGhlIGNvZGUgYmVsb3dcbi8vIGF0IGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvYmxvZy8jY20taW50ZXJuYWxzIC5cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Db2RlTWlycm9yID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEtsdWRnZXMgZm9yIGJ1Z3MgYW5kIGJlaGF2aW9yIGRpZmZlcmVuY2VzIHRoYXQgY2FuJ3QgYmUgZmVhdHVyZVxuICAvLyBkZXRlY3RlZCBhcmUgZW5hYmxlZCBiYXNlZCBvbiB1c2VyQWdlbnQgZXRjIHNuaWZmaW5nLlxuICB2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgdmFyIHBsYXRmb3JtID0gbmF2aWdhdG9yLnBsYXRmb3JtO1xuXG4gIHZhciBnZWNrbyA9IC9nZWNrb1xcL1xcZC9pLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIGllX3VwdG8xMCA9IC9NU0lFIFxcZC8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgaWVfMTF1cCA9IC9UcmlkZW50XFwvKD86WzctOV18XFxkezIsfSlcXC4uKnJ2OihcXGQrKS8uZXhlYyh1c2VyQWdlbnQpO1xuICB2YXIgZWRnZSA9IC9FZGdlXFwvKFxcZCspLy5leGVjKHVzZXJBZ2VudCk7XG4gIHZhciBpZSA9IGllX3VwdG8xMCB8fCBpZV8xMXVwIHx8IGVkZ2U7XG4gIHZhciBpZV92ZXJzaW9uID0gaWUgJiYgKGllX3VwdG8xMCA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCA2IDogKyhlZGdlIHx8IGllXzExdXApWzFdKTtcbiAgdmFyIHdlYmtpdCA9ICFlZGdlICYmIC9XZWJLaXRcXC8vLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIHF0d2Via2l0ID0gd2Via2l0ICYmIC9RdFxcL1xcZCtcXC5cXGQrLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBjaHJvbWUgPSAhZWRnZSAmJiAvQ2hyb21lXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBwcmVzdG8gPSAvT3BlcmFcXC8vLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIHNhZmFyaSA9IC9BcHBsZSBDb21wdXRlci8udGVzdChuYXZpZ2F0b3IudmVuZG9yKTtcbiAgdmFyIG1hY19nZU1vdW50YWluTGlvbiA9IC9NYWMgT1MgWCAxXFxkXFxEKFs4LTldfFxcZFxcZClcXEQvLnRlc3QodXNlckFnZW50KTtcbiAgdmFyIHBoYW50b20gPSAvUGhhbnRvbUpTLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiAgdmFyIGlvcyA9ICFlZGdlICYmIC9BcHBsZVdlYktpdC8udGVzdCh1c2VyQWdlbnQpICYmIC9Nb2JpbGVcXC9cXHcrLy50ZXN0KHVzZXJBZ2VudCk7XG4gIHZhciBhbmRyb2lkID0gL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KTtcbiAgLy8gVGhpcyBpcyB3b2VmdWxseSBpbmNvbXBsZXRlLiBTdWdnZXN0aW9ucyBmb3IgYWx0ZXJuYXRpdmUgbWV0aG9kcyB3ZWxjb21lLlxuICB2YXIgbW9iaWxlID0gaW9zIHx8IGFuZHJvaWQgfHwgL3dlYk9TfEJsYWNrQmVycnl8T3BlcmEgTWluaXxPcGVyYSBNb2JpfElFTW9iaWxlL2kudGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgbWFjID0gaW9zIHx8IC9NYWMvLnRlc3QocGxhdGZvcm0pO1xuICB2YXIgY2hyb21lT1MgPSAvXFxiQ3JPU1xcYi8udGVzdCh1c2VyQWdlbnQpO1xuICB2YXIgd2luZG93cyA9IC93aW4vaS50ZXN0KHBsYXRmb3JtKTtcblxuICB2YXIgcHJlc3RvX3ZlcnNpb24gPSBwcmVzdG8gJiYgdXNlckFnZW50Lm1hdGNoKC9WZXJzaW9uXFwvKFxcZCpcXC5cXGQqKS8pO1xuICBpZiAocHJlc3RvX3ZlcnNpb24pIHsgcHJlc3RvX3ZlcnNpb24gPSBOdW1iZXIocHJlc3RvX3ZlcnNpb25bMV0pOyB9XG4gIGlmIChwcmVzdG9fdmVyc2lvbiAmJiBwcmVzdG9fdmVyc2lvbiA+PSAxNSkgeyBwcmVzdG8gPSBmYWxzZTsgd2Via2l0ID0gdHJ1ZTsgfVxuICAvLyBTb21lIGJyb3dzZXJzIHVzZSB0aGUgd3JvbmcgZXZlbnQgcHJvcGVydGllcyB0byBzaWduYWwgY21kL2N0cmwgb24gT1MgWFxuICB2YXIgZmxpcEN0cmxDbWQgPSBtYWMgJiYgKHF0d2Via2l0IHx8IHByZXN0byAmJiAocHJlc3RvX3ZlcnNpb24gPT0gbnVsbCB8fCBwcmVzdG9fdmVyc2lvbiA8IDEyLjExKSk7XG4gIHZhciBjYXB0dXJlUmlnaHRDbGljayA9IGdlY2tvIHx8IChpZSAmJiBpZV92ZXJzaW9uID49IDkpO1xuXG4gIGZ1bmN0aW9uIGNsYXNzVGVzdChjbHMpIHsgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNscyArIFwiKD86JHxcXFxccylcXFxccypcIikgfVxuXG4gIHZhciBybUNsYXNzID0gZnVuY3Rpb24obm9kZSwgY2xzKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBub2RlLmNsYXNzTmFtZTtcbiAgICB2YXIgbWF0Y2ggPSBjbGFzc1Rlc3QoY2xzKS5leGVjKGN1cnJlbnQpO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgdmFyIGFmdGVyID0gY3VycmVudC5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICBub2RlLmNsYXNzTmFtZSA9IGN1cnJlbnQuc2xpY2UoMCwgbWF0Y2guaW5kZXgpICsgKGFmdGVyID8gbWF0Y2hbMV0gKyBhZnRlciA6IFwiXCIpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbihlKSB7XG4gICAgZm9yICh2YXIgY291bnQgPSBlLmNoaWxkTm9kZXMubGVuZ3RoOyBjb3VudCA+IDA7IC0tY291bnQpXG4gICAgICB7IGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTsgfVxuICAgIHJldHVybiBlXG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDaGlsZHJlbkFuZEFkZChwYXJlbnQsIGUpIHtcbiAgICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGFyZW50KS5hcHBlbmRDaGlsZChlKVxuICB9XG5cbiAgZnVuY3Rpb24gZWx0KHRhZywgY29udGVudCwgY2xhc3NOYW1lLCBzdHlsZSkge1xuICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgIGlmIChjbGFzc05hbWUpIHsgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7IH1cbiAgICBpZiAoc3R5bGUpIHsgZS5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7IH1cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIikgeyBlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTsgfVxuICAgIGVsc2UgaWYgKGNvbnRlbnQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250ZW50Lmxlbmd0aDsgKytpKSB7IGUuYXBwZW5kQ2hpbGQoY29udGVudFtpXSk7IH0gfVxuICAgIHJldHVybiBlXG4gIH1cbiAgLy8gd3JhcHBlciBmb3IgZWx0LCB3aGljaCByZW1vdmVzIHRoZSBlbHQgZnJvbSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlXG4gIGZ1bmN0aW9uIGVsdFAodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKSB7XG4gICAgdmFyIGUgPSBlbHQodGFnLCBjb250ZW50LCBjbGFzc05hbWUsIHN0eWxlKTtcbiAgICBlLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG4gICAgcmV0dXJuIGVcbiAgfVxuXG4gIHZhciByYW5nZTtcbiAgaWYgKGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7IHJhbmdlID0gZnVuY3Rpb24obm9kZSwgc3RhcnQsIGVuZCwgZW5kTm9kZSkge1xuICAgIHZhciByID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByLnNldEVuZChlbmROb2RlIHx8IG5vZGUsIGVuZCk7XG4gICAgci5zZXRTdGFydChub2RlLCBzdGFydCk7XG4gICAgcmV0dXJuIHJcbiAgfTsgfVxuICBlbHNlIHsgcmFuZ2UgPSBmdW5jdGlvbihub2RlLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBkb2N1bWVudC5ib2R5LmNyZWF0ZVRleHRSYW5nZSgpO1xuICAgIHRyeSB7IHIubW92ZVRvRWxlbWVudFRleHQobm9kZS5wYXJlbnROb2RlKTsgfVxuICAgIGNhdGNoKGUpIHsgcmV0dXJuIHIgfVxuICAgIHIuY29sbGFwc2UodHJ1ZSk7XG4gICAgci5tb3ZlRW5kKFwiY2hhcmFjdGVyXCIsIGVuZCk7XG4gICAgci5tb3ZlU3RhcnQoXCJjaGFyYWN0ZXJcIiwgc3RhcnQpO1xuICAgIHJldHVybiByXG4gIH07IH1cblxuICBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkLm5vZGVUeXBlID09IDMpIC8vIEFuZHJvaWQgYnJvd3NlciBhbHdheXMgcmV0dXJucyBmYWxzZSB3aGVuIGNoaWxkIGlzIGEgdGV4dG5vZGVcbiAgICAgIHsgY2hpbGQgPSBjaGlsZC5wYXJlbnROb2RlOyB9XG4gICAgaWYgKHBhcmVudC5jb250YWlucylcbiAgICAgIHsgcmV0dXJuIHBhcmVudC5jb250YWlucyhjaGlsZCkgfVxuICAgIGRvIHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxMSkgeyBjaGlsZCA9IGNoaWxkLmhvc3Q7IH1cbiAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnQpIHsgcmV0dXJuIHRydWUgfVxuICAgIH0gd2hpbGUgKGNoaWxkID0gY2hpbGQucGFyZW50Tm9kZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFjdGl2ZUVsdCgpIHtcbiAgICAvLyBJRSBhbmQgRWRnZSBtYXkgdGhyb3cgYW4gXCJVbnNwZWNpZmllZCBFcnJvclwiIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuXG4gICAgLy8gSUUgPCAxMCB3aWxsIHRocm93IHdoZW4gYWNjZXNzZWQgd2hpbGUgdGhlIHBhZ2UgaXMgbG9hZGluZyBvciBpbiBhbiBpZnJhbWUuXG4gICAgLy8gSUUgPiA5IGFuZCBFZGdlIHdpbGwgdGhyb3cgd2hlbiBhY2Nlc3NlZCBpbiBhbiBpZnJhbWUgaWYgZG9jdW1lbnQuYm9keSBpcyB1bmF2YWlsYWJsZS5cbiAgICB2YXIgYWN0aXZlRWxlbWVudDtcbiAgICB0cnkge1xuICAgICAgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYm9keSB8fCBudWxsO1xuICAgIH1cbiAgICB3aGlsZSAoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QgJiYgYWN0aXZlRWxlbWVudC5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpXG4gICAgICB7IGFjdGl2ZUVsZW1lbnQgPSBhY3RpdmVFbGVtZW50LnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDsgfVxuICAgIHJldHVybiBhY3RpdmVFbGVtZW50XG4gIH1cblxuICBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbHMpIHtcbiAgICB2YXIgY3VycmVudCA9IG5vZGUuY2xhc3NOYW1lO1xuICAgIGlmICghY2xhc3NUZXN0KGNscykudGVzdChjdXJyZW50KSkgeyBub2RlLmNsYXNzTmFtZSArPSAoY3VycmVudCA/IFwiIFwiIDogXCJcIikgKyBjbHM7IH1cbiAgfVxuICBmdW5jdGlvbiBqb2luQ2xhc3NlcyhhLCBiKSB7XG4gICAgdmFyIGFzID0gYS5zcGxpdChcIiBcIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgaWYgKGFzW2ldICYmICFjbGFzc1Rlc3QoYXNbaV0pLnRlc3QoYikpIHsgYiArPSBcIiBcIiArIGFzW2ldOyB9IH1cbiAgICByZXR1cm4gYlxuICB9XG5cbiAgdmFyIHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdCgpOyB9O1xuICBpZiAoaW9zKSAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi5cbiAgICB7IHNlbGVjdElucHV0ID0gZnVuY3Rpb24obm9kZSkgeyBub2RlLnNlbGVjdGlvblN0YXJ0ID0gMDsgbm9kZS5zZWxlY3Rpb25FbmQgPSBub2RlLnZhbHVlLmxlbmd0aDsgfTsgfVxuICBlbHNlIGlmIChpZSkgLy8gU3VwcHJlc3MgbXlzdGVyaW91cyBJRTEwIGVycm9yc1xuICAgIHsgc2VsZWN0SW5wdXQgPSBmdW5jdGlvbihub2RlKSB7IHRyeSB7IG5vZGUuc2VsZWN0KCk7IH0gY2F0Y2goX2UpIHt9IH07IH1cblxuICBmdW5jdGlvbiBiaW5kKGYpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyl9XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5T2JqKG9iaiwgdGFyZ2V0LCBvdmVyd3JpdGUpIHtcbiAgICBpZiAoIXRhcmdldCkgeyB0YXJnZXQgPSB7fTsgfVxuICAgIGZvciAodmFyIHByb3AgaW4gb2JqKVxuICAgICAgeyBpZiAob2JqLmhhc093blByb3BlcnR5KHByb3ApICYmIChvdmVyd3JpdGUgIT09IGZhbHNlIHx8ICF0YXJnZXQuaGFzT3duUHJvcGVydHkocHJvcCkpKVxuICAgICAgICB7IHRhcmdldFtwcm9wXSA9IG9ialtwcm9wXTsgfSB9XG4gICAgcmV0dXJuIHRhcmdldFxuICB9XG5cbiAgLy8gQ291bnRzIHRoZSBjb2x1bW4gb2Zmc2V0IGluIGEgc3RyaW5nLCB0YWtpbmcgdGFicyBpbnRvIGFjY291bnQuXG4gIC8vIFVzZWQgbW9zdGx5IHRvIGZpbmQgaW5kZW50YXRpb24uXG4gIGZ1bmN0aW9uIGNvdW50Q29sdW1uKHN0cmluZywgZW5kLCB0YWJTaXplLCBzdGFydEluZGV4LCBzdGFydFZhbHVlKSB7XG4gICAgaWYgKGVuZCA9PSBudWxsKSB7XG4gICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxcc1xcdTAwYTBdLyk7XG4gICAgICBpZiAoZW5kID09IC0xKSB7IGVuZCA9IHN0cmluZy5sZW5ndGg7IH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMCwgbiA9IHN0YXJ0VmFsdWUgfHwgMDs7KSB7XG4gICAgICB2YXIgbmV4dFRhYiA9IHN0cmluZy5pbmRleE9mKFwiXFx0XCIsIGkpO1xuICAgICAgaWYgKG5leHRUYWIgPCAwIHx8IG5leHRUYWIgPj0gZW5kKVxuICAgICAgICB7IHJldHVybiBuICsgKGVuZCAtIGkpIH1cbiAgICAgIG4gKz0gbmV4dFRhYiAtIGk7XG4gICAgICBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpO1xuICAgICAgaSA9IG5leHRUYWIgKyAxO1xuICAgIH1cbiAgfVxuXG4gIHZhciBEZWxheWVkID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pZCA9IG51bGw7XG4gICAgdGhpcy5mID0gbnVsbDtcbiAgICB0aGlzLnRpbWUgPSAwO1xuICAgIHRoaXMuaGFuZGxlciA9IGJpbmQodGhpcy5vblRpbWVvdXQsIHRoaXMpO1xuICB9O1xuICBEZWxheWVkLnByb3RvdHlwZS5vblRpbWVvdXQgPSBmdW5jdGlvbiAoc2VsZikge1xuICAgIHNlbGYuaWQgPSAwO1xuICAgIGlmIChzZWxmLnRpbWUgPD0gK25ldyBEYXRlKSB7XG4gICAgICBzZWxmLmYoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dChzZWxmLmhhbmRsZXIsIHNlbGYudGltZSAtICtuZXcgRGF0ZSk7XG4gICAgfVxuICB9O1xuICBEZWxheWVkLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobXMsIGYpIHtcbiAgICB0aGlzLmYgPSBmO1xuICAgIHZhciB0aW1lID0gK25ldyBEYXRlICsgbXM7XG4gICAgaWYgKCF0aGlzLmlkIHx8IHRpbWUgPCB0aGlzLnRpbWUpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmlkKTtcbiAgICAgIHRoaXMuaWQgPSBzZXRUaW1lb3V0KHRoaXMuaGFuZGxlciwgbXMpO1xuICAgICAgdGhpcy50aW1lID0gdGltZTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgZWx0KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKGFycmF5W2ldID09IGVsdCkgeyByZXR1cm4gaSB9IH1cbiAgICByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE51bWJlciBvZiBwaXhlbHMgYWRkZWQgdG8gc2Nyb2xsZXIgYW5kIHNpemVyIHRvIGhpZGUgc2Nyb2xsYmFyXG4gIHZhciBzY3JvbGxlckdhcCA9IDUwO1xuXG4gIC8vIFJldHVybmVkIG9yIHRocm93biBieSB2YXJpb3VzIHByb3RvY29scyB0byBzaWduYWwgJ0knbSBub3RcbiAgLy8gaGFuZGxpbmcgdGhpcycuXG4gIHZhciBQYXNzID0ge3RvU3RyaW5nOiBmdW5jdGlvbigpe3JldHVybiBcIkNvZGVNaXJyb3IuUGFzc1wifX07XG5cbiAgLy8gUmV1c2VkIG9wdGlvbiBvYmplY3RzIGZvciBzZXRTZWxlY3Rpb24gJiBmcmllbmRzXG4gIHZhciBzZWxfZG9udFNjcm9sbCA9IHtzY3JvbGw6IGZhbHNlfSwgc2VsX21vdXNlID0ge29yaWdpbjogXCIqbW91c2VcIn0sIHNlbF9tb3ZlID0ge29yaWdpbjogXCIrbW92ZVwifTtcblxuICAvLyBUaGUgaW52ZXJzZSBvZiBjb3VudENvbHVtbiAtLSBmaW5kIHRoZSBvZmZzZXQgdGhhdCBjb3JyZXNwb25kcyB0b1xuICAvLyBhIHBhcnRpY3VsYXIgY29sdW1uLlxuICBmdW5jdGlvbiBmaW5kQ29sdW1uKHN0cmluZywgZ29hbCwgdGFiU2l6ZSkge1xuICAgIGZvciAodmFyIHBvcyA9IDAsIGNvbCA9IDA7Oykge1xuICAgICAgdmFyIG5leHRUYWIgPSBzdHJpbmcuaW5kZXhPZihcIlxcdFwiLCBwb3MpO1xuICAgICAgaWYgKG5leHRUYWIgPT0gLTEpIHsgbmV4dFRhYiA9IHN0cmluZy5sZW5ndGg7IH1cbiAgICAgIHZhciBza2lwcGVkID0gbmV4dFRhYiAtIHBvcztcbiAgICAgIGlmIChuZXh0VGFiID09IHN0cmluZy5sZW5ndGggfHwgY29sICsgc2tpcHBlZCA+PSBnb2FsKVxuICAgICAgICB7IHJldHVybiBwb3MgKyBNYXRoLm1pbihza2lwcGVkLCBnb2FsIC0gY29sKSB9XG4gICAgICBjb2wgKz0gbmV4dFRhYiAtIHBvcztcbiAgICAgIGNvbCArPSB0YWJTaXplIC0gKGNvbCAlIHRhYlNpemUpO1xuICAgICAgcG9zID0gbmV4dFRhYiArIDE7XG4gICAgICBpZiAoY29sID49IGdvYWwpIHsgcmV0dXJuIHBvcyB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHNwYWNlU3RycyA9IFtcIlwiXTtcbiAgZnVuY3Rpb24gc3BhY2VTdHIobikge1xuICAgIHdoaWxlIChzcGFjZVN0cnMubGVuZ3RoIDw9IG4pXG4gICAgICB7IHNwYWNlU3Rycy5wdXNoKGxzdChzcGFjZVN0cnMpICsgXCIgXCIpOyB9XG4gICAgcmV0dXJuIHNwYWNlU3Ryc1tuXVxuICB9XG5cbiAgZnVuY3Rpb24gbHN0KGFycikgeyByZXR1cm4gYXJyW2Fyci5sZW5ndGgtMV0gfVxuXG4gIGZ1bmN0aW9uIG1hcChhcnJheSwgZikge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7IG91dFtpXSA9IGYoYXJyYXlbaV0sIGkpOyB9XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0U29ydGVkKGFycmF5LCB2YWx1ZSwgc2NvcmUpIHtcbiAgICB2YXIgcG9zID0gMCwgcHJpb3JpdHkgPSBzY29yZSh2YWx1ZSk7XG4gICAgd2hpbGUgKHBvcyA8IGFycmF5Lmxlbmd0aCAmJiBzY29yZShhcnJheVtwb3NdKSA8PSBwcmlvcml0eSkgeyBwb3MrKzsgfVxuICAgIGFycmF5LnNwbGljZShwb3MsIDAsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdGhpbmcoKSB7fVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iaihiYXNlLCBwcm9wcykge1xuICAgIHZhciBpbnN0O1xuICAgIGlmIChPYmplY3QuY3JlYXRlKSB7XG4gICAgICBpbnN0ID0gT2JqZWN0LmNyZWF0ZShiYXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm90aGluZy5wcm90b3R5cGUgPSBiYXNlO1xuICAgICAgaW5zdCA9IG5ldyBub3RoaW5nKCk7XG4gICAgfVxuICAgIGlmIChwcm9wcykgeyBjb3B5T2JqKHByb3BzLCBpbnN0KTsgfVxuICAgIHJldHVybiBpbnN0XG4gIH1cblxuICB2YXIgbm9uQVNDSUlTaW5nbGVDYXNlV29yZENoYXIgPSAvW1xcdTAwZGZcXHUwNTg3XFx1MDU5MC1cXHUwNWY0XFx1MDYwMC1cXHUwNmZmXFx1MzA0MC1cXHUzMDlmXFx1MzBhMC1cXHUzMGZmXFx1MzQwMC1cXHU0ZGI1XFx1NGUwMC1cXHU5ZmNjXFx1YWMwMC1cXHVkN2FmXS87XG4gIGZ1bmN0aW9uIGlzV29yZENoYXJCYXNpYyhjaCkge1xuICAgIHJldHVybiAvXFx3Ly50ZXN0KGNoKSB8fCBjaCA+IFwiXFx4ODBcIiAmJlxuICAgICAgKGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKSB8fCBub25BU0NJSVNpbmdsZUNhc2VXb3JkQ2hhci50ZXN0KGNoKSlcbiAgfVxuICBmdW5jdGlvbiBpc1dvcmRDaGFyKGNoLCBoZWxwZXIpIHtcbiAgICBpZiAoIWhlbHBlcikgeyByZXR1cm4gaXNXb3JkQ2hhckJhc2ljKGNoKSB9XG4gICAgaWYgKGhlbHBlci5zb3VyY2UuaW5kZXhPZihcIlxcXFx3XCIpID4gLTEgJiYgaXNXb3JkQ2hhckJhc2ljKGNoKSkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgcmV0dXJuIGhlbHBlci50ZXN0KGNoKVxuICB9XG5cbiAgZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgICBmb3IgKHZhciBuIGluIG9iaikgeyBpZiAob2JqLmhhc093blByb3BlcnR5KG4pICYmIG9ialtuXSkgeyByZXR1cm4gZmFsc2UgfSB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIEV4dGVuZGluZyB1bmljb2RlIGNoYXJhY3RlcnMuIEEgc2VyaWVzIG9mIGEgbm9uLWV4dGVuZGluZyBjaGFyICtcbiAgLy8gYW55IG51bWJlciBvZiBleHRlbmRpbmcgY2hhcnMgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSB1bml0IGFzIGZhclxuICAvLyBhcyBlZGl0aW5nIGFuZCBtZWFzdXJpbmcgaXMgY29uY2VybmVkLiBUaGlzIGlzIG5vdCBmdWxseSBjb3JyZWN0LFxuICAvLyBzaW5jZSBzb21lIHNjcmlwdHMvZm9udHMvYnJvd3NlcnMgYWxzbyB0cmVhdCBvdGhlciBjb25maWd1cmF0aW9uc1xuICAvLyBvZiBjb2RlIHBvaW50cyBhcyBhIGdyb3VwLlxuICB2YXIgZXh0ZW5kaW5nQ2hhcnMgPSAvW1xcdTAzMDAtXFx1MDM2ZlxcdTA0ODMtXFx1MDQ4OVxcdTA1OTEtXFx1MDViZFxcdTA1YmZcXHUwNWMxXFx1MDVjMlxcdTA1YzRcXHUwNWM1XFx1MDVjN1xcdTA2MTAtXFx1MDYxYVxcdTA2NGItXFx1MDY1ZVxcdTA2NzBcXHUwNmQ2LVxcdTA2ZGNcXHUwNmRlLVxcdTA2ZTRcXHUwNmU3XFx1MDZlOFxcdTA2ZWEtXFx1MDZlZFxcdTA3MTFcXHUwNzMwLVxcdTA3NGFcXHUwN2E2LVxcdTA3YjBcXHUwN2ViLVxcdTA3ZjNcXHUwODE2LVxcdTA4MTlcXHUwODFiLVxcdTA4MjNcXHUwODI1LVxcdTA4MjdcXHUwODI5LVxcdTA4MmRcXHUwOTAwLVxcdTA5MDJcXHUwOTNjXFx1MDk0MS1cXHUwOTQ4XFx1MDk0ZFxcdTA5NTEtXFx1MDk1NVxcdTA5NjJcXHUwOTYzXFx1MDk4MVxcdTA5YmNcXHUwOWJlXFx1MDljMS1cXHUwOWM0XFx1MDljZFxcdTA5ZDdcXHUwOWUyXFx1MDllM1xcdTBhMDFcXHUwYTAyXFx1MGEzY1xcdTBhNDFcXHUwYTQyXFx1MGE0N1xcdTBhNDhcXHUwYTRiLVxcdTBhNGRcXHUwYTUxXFx1MGE3MFxcdTBhNzFcXHUwYTc1XFx1MGE4MVxcdTBhODJcXHUwYWJjXFx1MGFjMS1cXHUwYWM1XFx1MGFjN1xcdTBhYzhcXHUwYWNkXFx1MGFlMlxcdTBhZTNcXHUwYjAxXFx1MGIzY1xcdTBiM2VcXHUwYjNmXFx1MGI0MS1cXHUwYjQ0XFx1MGI0ZFxcdTBiNTZcXHUwYjU3XFx1MGI2MlxcdTBiNjNcXHUwYjgyXFx1MGJiZVxcdTBiYzBcXHUwYmNkXFx1MGJkN1xcdTBjM2UtXFx1MGM0MFxcdTBjNDYtXFx1MGM0OFxcdTBjNGEtXFx1MGM0ZFxcdTBjNTVcXHUwYzU2XFx1MGM2MlxcdTBjNjNcXHUwY2JjXFx1MGNiZlxcdTBjYzJcXHUwY2M2XFx1MGNjY1xcdTBjY2RcXHUwY2Q1XFx1MGNkNlxcdTBjZTJcXHUwY2UzXFx1MGQzZVxcdTBkNDEtXFx1MGQ0NFxcdTBkNGRcXHUwZDU3XFx1MGQ2MlxcdTBkNjNcXHUwZGNhXFx1MGRjZlxcdTBkZDItXFx1MGRkNFxcdTBkZDZcXHUwZGRmXFx1MGUzMVxcdTBlMzQtXFx1MGUzYVxcdTBlNDctXFx1MGU0ZVxcdTBlYjFcXHUwZWI0LVxcdTBlYjlcXHUwZWJiXFx1MGViY1xcdTBlYzgtXFx1MGVjZFxcdTBmMThcXHUwZjE5XFx1MGYzNVxcdTBmMzdcXHUwZjM5XFx1MGY3MS1cXHUwZjdlXFx1MGY4MC1cXHUwZjg0XFx1MGY4NlxcdTBmODdcXHUwZjkwLVxcdTBmOTdcXHUwZjk5LVxcdTBmYmNcXHUwZmM2XFx1MTAyZC1cXHUxMDMwXFx1MTAzMi1cXHUxMDM3XFx1MTAzOVxcdTEwM2FcXHUxMDNkXFx1MTAzZVxcdTEwNThcXHUxMDU5XFx1MTA1ZS1cXHUxMDYwXFx1MTA3MS1cXHUxMDc0XFx1MTA4MlxcdTEwODVcXHUxMDg2XFx1MTA4ZFxcdTEwOWRcXHUxMzVmXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3YjctXFx1MTdiZFxcdTE3YzZcXHUxN2M5LVxcdTE3ZDNcXHUxN2RkXFx1MTgwYi1cXHUxODBkXFx1MThhOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjdcXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzYlxcdTFhMTdcXHUxYTE4XFx1MWE1NlxcdTFhNTgtXFx1MWE1ZVxcdTFhNjBcXHUxYTYyXFx1MWE2NS1cXHUxYTZjXFx1MWE3My1cXHUxYTdjXFx1MWE3ZlxcdTFiMDAtXFx1MWIwM1xcdTFiMzRcXHUxYjM2LVxcdTFiM2FcXHUxYjNjXFx1MWI0MlxcdTFiNmItXFx1MWI3M1xcdTFiODBcXHUxYjgxXFx1MWJhMi1cXHUxYmE1XFx1MWJhOFxcdTFiYTlcXHUxYzJjLVxcdTFjMzNcXHUxYzM2XFx1MWMzN1xcdTFjZDAtXFx1MWNkMlxcdTFjZDQtXFx1MWNlMFxcdTFjZTItXFx1MWNlOFxcdTFjZWRcXHUxZGMwLVxcdTFkZTZcXHUxZGZkLVxcdTFkZmZcXHUyMDBjXFx1MjAwZFxcdTIwZDAtXFx1MjBmMFxcdTJjZWYtXFx1MmNmMVxcdTJkZTAtXFx1MmRmZlxcdTMwMmEtXFx1MzAyZlxcdTMwOTlcXHUzMDlhXFx1YTY2Zi1cXHVhNjcyXFx1YTY3Y1xcdWE2N2RcXHVhNmYwXFx1YTZmMVxcdWE4MDJcXHVhODA2XFx1YTgwYlxcdWE4MjVcXHVhODI2XFx1YThjNFxcdWE4ZTAtXFx1YThmMVxcdWE5MjYtXFx1YTkyZFxcdWE5NDctXFx1YTk1MVxcdWE5ODAtXFx1YTk4MlxcdWE5YjNcXHVhOWI2LVxcdWE5YjlcXHVhOWJjXFx1YWEyOS1cXHVhYTJlXFx1YWEzMVxcdWFhMzJcXHVhYTM1XFx1YWEzNlxcdWFhNDNcXHVhYTRjXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWJlNVxcdWFiZThcXHVhYmVkXFx1ZGMwMC1cXHVkZmZmXFx1ZmIxZVxcdWZlMDAtXFx1ZmUwZlxcdWZlMjAtXFx1ZmUyNlxcdWZmOWVcXHVmZjlmXS87XG4gIGZ1bmN0aW9uIGlzRXh0ZW5kaW5nQ2hhcihjaCkgeyByZXR1cm4gY2guY2hhckNvZGVBdCgwKSA+PSA3NjggJiYgZXh0ZW5kaW5nQ2hhcnMudGVzdChjaCkgfVxuXG4gIC8vIFJldHVybnMgYSBudW1iZXIgZnJvbSB0aGUgcmFuZ2UgW2AwYDsgYHN0ci5sZW5ndGhgXSB1bmxlc3MgYHBvc2AgaXMgb3V0c2lkZSB0aGF0IHJhbmdlLlxuICBmdW5jdGlvbiBza2lwRXh0ZW5kaW5nQ2hhcnMoc3RyLCBwb3MsIGRpcikge1xuICAgIHdoaWxlICgoZGlyIDwgMCA/IHBvcyA+IDAgOiBwb3MgPCBzdHIubGVuZ3RoKSAmJiBpc0V4dGVuZGluZ0NoYXIoc3RyLmNoYXJBdChwb3MpKSkgeyBwb3MgKz0gZGlyOyB9XG4gICAgcmV0dXJuIHBvc1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgdmFsdWUgZnJvbSB0aGUgcmFuZ2UgW2Bmcm9tYDsgYHRvYF0gdGhhdCBzYXRpc2ZpZXNcbiAgLy8gYHByZWRgIGFuZCBpcyBjbG9zZXN0IHRvIGBmcm9tYC4gQXNzdW1lcyB0aGF0IGF0IGxlYXN0IGB0b2BcbiAgLy8gc2F0aXNmaWVzIGBwcmVkYC4gU3VwcG9ydHMgYGZyb21gIGJlaW5nIGdyZWF0ZXIgdGhhbiBgdG9gLlxuICBmdW5jdGlvbiBmaW5kRmlyc3QocHJlZCwgZnJvbSwgdG8pIHtcbiAgICAvLyBBdCBhbnkgcG9pbnQgd2UgYXJlIGNlcnRhaW4gYHRvYCBzYXRpc2ZpZXMgYHByZWRgLCBkb24ndCBrbm93XG4gICAgLy8gd2hldGhlciBgZnJvbWAgZG9lcy5cbiAgICB2YXIgZGlyID0gZnJvbSA+IHRvID8gLTEgOiAxO1xuICAgIGZvciAoOzspIHtcbiAgICAgIGlmIChmcm9tID09IHRvKSB7IHJldHVybiBmcm9tIH1cbiAgICAgIHZhciBtaWRGID0gKGZyb20gKyB0bykgLyAyLCBtaWQgPSBkaXIgPCAwID8gTWF0aC5jZWlsKG1pZEYpIDogTWF0aC5mbG9vcihtaWRGKTtcbiAgICAgIGlmIChtaWQgPT0gZnJvbSkgeyByZXR1cm4gcHJlZChtaWQpID8gZnJvbSA6IHRvIH1cbiAgICAgIGlmIChwcmVkKG1pZCkpIHsgdG8gPSBtaWQ7IH1cbiAgICAgIGVsc2UgeyBmcm9tID0gbWlkICsgZGlyOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gQklESSBIRUxQRVJTXG5cbiAgZnVuY3Rpb24gaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbSwgdG8sIGYpIHtcbiAgICBpZiAoIW9yZGVyKSB7IHJldHVybiBmKGZyb20sIHRvLCBcImx0clwiLCAwKSB9XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHBhcnQgPSBvcmRlcltpXTtcbiAgICAgIGlmIChwYXJ0LmZyb20gPCB0byAmJiBwYXJ0LnRvID4gZnJvbSB8fCBmcm9tID09IHRvICYmIHBhcnQudG8gPT0gZnJvbSkge1xuICAgICAgICBmKE1hdGgubWF4KHBhcnQuZnJvbSwgZnJvbSksIE1hdGgubWluKHBhcnQudG8sIHRvKSwgcGFydC5sZXZlbCA9PSAxID8gXCJydGxcIiA6IFwibHRyXCIsIGkpO1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIHsgZihmcm9tLCB0bywgXCJsdHJcIik7IH1cbiAgfVxuXG4gIHZhciBiaWRpT3RoZXIgPSBudWxsO1xuICBmdW5jdGlvbiBnZXRCaWRpUGFydEF0KG9yZGVyLCBjaCwgc3RpY2t5KSB7XG4gICAgdmFyIGZvdW5kO1xuICAgIGJpZGlPdGhlciA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGN1ciA9IG9yZGVyW2ldO1xuICAgICAgaWYgKGN1ci5mcm9tIDwgY2ggJiYgY3VyLnRvID4gY2gpIHsgcmV0dXJuIGkgfVxuICAgICAgaWYgKGN1ci50byA9PSBjaCkge1xuICAgICAgICBpZiAoY3VyLmZyb20gIT0gY3VyLnRvICYmIHN0aWNreSA9PSBcImJlZm9yZVwiKSB7IGZvdW5kID0gaTsgfVxuICAgICAgICBlbHNlIHsgYmlkaU90aGVyID0gaTsgfVxuICAgICAgfVxuICAgICAgaWYgKGN1ci5mcm9tID09IGNoKSB7XG4gICAgICAgIGlmIChjdXIuZnJvbSAhPSBjdXIudG8gJiYgc3RpY2t5ICE9IFwiYmVmb3JlXCIpIHsgZm91bmQgPSBpOyB9XG4gICAgICAgIGVsc2UgeyBiaWRpT3RoZXIgPSBpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3VuZCAhPSBudWxsID8gZm91bmQgOiBiaWRpT3RoZXJcbiAgfVxuXG4gIC8vIEJpZGlyZWN0aW9uYWwgb3JkZXJpbmcgYWxnb3JpdGhtXG4gIC8vIFNlZSBodHRwOi8vdW5pY29kZS5vcmcvcmVwb3J0cy90cjkvdHI5LTEzLmh0bWwgZm9yIHRoZSBhbGdvcml0aG1cbiAgLy8gdGhhdCB0aGlzIChwYXJ0aWFsbHkpIGltcGxlbWVudHMuXG5cbiAgLy8gT25lLWNoYXIgY29kZXMgdXNlZCBmb3IgY2hhcmFjdGVyIHR5cGVzOlxuICAvLyBMIChMKTogICBMZWZ0LXRvLVJpZ2h0XG4gIC8vIFIgKFIpOiAgIFJpZ2h0LXRvLUxlZnRcbiAgLy8gciAoQUwpOiAgUmlnaHQtdG8tTGVmdCBBcmFiaWNcbiAgLy8gMSAoRU4pOiAgRXVyb3BlYW4gTnVtYmVyXG4gIC8vICsgKEVTKTogIEV1cm9wZWFuIE51bWJlciBTZXBhcmF0b3JcbiAgLy8gJSAoRVQpOiAgRXVyb3BlYW4gTnVtYmVyIFRlcm1pbmF0b3JcbiAgLy8gbiAoQU4pOiAgQXJhYmljIE51bWJlclxuICAvLyAsIChDUyk6ICBDb21tb24gTnVtYmVyIFNlcGFyYXRvclxuICAvLyBtIChOU00pOiBOb24tU3BhY2luZyBNYXJrXG4gIC8vIGIgKEJOKTogIEJvdW5kYXJ5IE5ldXRyYWxcbiAgLy8gcyAoQik6ICAgUGFyYWdyYXBoIFNlcGFyYXRvclxuICAvLyB0IChTKTogICBTZWdtZW50IFNlcGFyYXRvclxuICAvLyB3IChXUyk6ICBXaGl0ZXNwYWNlXG4gIC8vIE4gKE9OKTogIE90aGVyIE5ldXRyYWxzXG5cbiAgLy8gUmV0dXJucyBudWxsIGlmIGNoYXJhY3RlcnMgYXJlIG9yZGVyZWQgYXMgdGhleSBhcHBlYXJcbiAgLy8gKGxlZnQtdG8tcmlnaHQpLCBvciBhbiBhcnJheSBvZiBzZWN0aW9ucyAoe2Zyb20sIHRvLCBsZXZlbH1cbiAgLy8gb2JqZWN0cykgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgb2NjdXIgdmlzdWFsbHkuXG4gIHZhciBiaWRpT3JkZXJpbmcgPSAoZnVuY3Rpb24oKSB7XG4gICAgLy8gQ2hhcmFjdGVyIHR5cGVzIGZvciBjb2RlcG9pbnRzIDAgdG8gMHhmZlxuICAgIHZhciBsb3dUeXBlcyA9IFwiYmJiYmJiYmJidHN0d3NiYmJiYmJiYmJiYmJiYnNzc3R3Tk4lJSVOTk5OTk4sTixOMTExMTExMTExMU5OTk5OTk5MTExMTExMTExMTExMTExMTExMTExMTExMTE5OTk5OTkxMTExMTExMTExMTExMTExMTExMTExMTExMTk5OTmJiYmJiYnNiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYixOJSUlJU5OTk5MTk5OTk4lJTExTkxOTk4xTE5OTk5OTExMTExMTExMTExMTExMTExMTExMTExOTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE5cIjtcbiAgICAvLyBDaGFyYWN0ZXIgdHlwZXMgZm9yIGNvZGVwb2ludHMgMHg2MDAgdG8gMHg2ZjlcbiAgICB2YXIgYXJhYmljVHlwZXMgPSBcIm5ubm5ubk5OciUlcixyTk5tbW1tbW1tbW1tbXJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycm1tbW1tbW1tbW1tbW1tbW1tbW1tbW5ubm5ubm5ubm4lbm5ycnJtcnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJtbW1tbW1tbk5tbW1tbW1ycm1tTm1tbW1ycjExMTExMTExMTFcIjtcbiAgICBmdW5jdGlvbiBjaGFyVHlwZShjb2RlKSB7XG4gICAgICBpZiAoY29kZSA8PSAweGY3KSB7IHJldHVybiBsb3dUeXBlcy5jaGFyQXQoY29kZSkgfVxuICAgICAgZWxzZSBpZiAoMHg1OTAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NWY0KSB7IHJldHVybiBcIlJcIiB9XG4gICAgICBlbHNlIGlmICgweDYwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg2ZjkpIHsgcmV0dXJuIGFyYWJpY1R5cGVzLmNoYXJBdChjb2RlIC0gMHg2MDApIH1cbiAgICAgIGVsc2UgaWYgKDB4NmVlIDw9IGNvZGUgJiYgY29kZSA8PSAweDhhYykgeyByZXR1cm4gXCJyXCIgfVxuICAgICAgZWxzZSBpZiAoMHgyMDAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDIwMGIpIHsgcmV0dXJuIFwid1wiIH1cbiAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMHgyMDBjKSB7IHJldHVybiBcImJcIiB9XG4gICAgICBlbHNlIHsgcmV0dXJuIFwiTFwiIH1cbiAgICB9XG5cbiAgICB2YXIgYmlkaVJFID0gL1tcXHUwNTkwLVxcdTA1ZjRcXHUwNjAwLVxcdTA2ZmZcXHUwNzAwLVxcdTA4YWNdLztcbiAgICB2YXIgaXNOZXV0cmFsID0gL1tzdHdOXS8sIGlzU3Ryb25nID0gL1tMUnJdLywgY291bnRzQXNMZWZ0ID0gL1tMYjFuXS8sIGNvdW50c0FzTnVtID0gL1sxbl0vO1xuXG4gICAgZnVuY3Rpb24gQmlkaVNwYW4obGV2ZWwsIGZyb20sIHRvKSB7XG4gICAgICB0aGlzLmxldmVsID0gbGV2ZWw7XG4gICAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0ciwgZGlyZWN0aW9uKSB7XG4gICAgICB2YXIgb3V0ZXJUeXBlID0gZGlyZWN0aW9uID09IFwibHRyXCIgPyBcIkxcIiA6IFwiUlwiO1xuXG4gICAgICBpZiAoc3RyLmxlbmd0aCA9PSAwIHx8IGRpcmVjdGlvbiA9PSBcImx0clwiICYmICFiaWRpUkUudGVzdChzdHIpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICB2YXIgbGVuID0gc3RyLmxlbmd0aCwgdHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHsgdHlwZXMucHVzaChjaGFyVHlwZShzdHIuY2hhckNvZGVBdChpKSkpOyB9XG5cbiAgICAgIC8vIFcxLiBFeGFtaW5lIGVhY2ggbm9uLXNwYWNpbmcgbWFyayAoTlNNKSBpbiB0aGUgbGV2ZWwgcnVuLCBhbmRcbiAgICAgIC8vIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgTlNNIHRvIHRoZSB0eXBlIG9mIHRoZSBwcmV2aW91c1xuICAgICAgLy8gY2hhcmFjdGVyLiBJZiB0aGUgTlNNIGlzIGF0IHRoZSBzdGFydCBvZiB0aGUgbGV2ZWwgcnVuLCBpdCB3aWxsXG4gICAgICAvLyBnZXQgdGhlIHR5cGUgb2Ygc29yLlxuICAgICAgZm9yICh2YXIgaSQxID0gMCwgcHJldiA9IG91dGVyVHlwZTsgaSQxIDwgbGVuOyArK2kkMSkge1xuICAgICAgICB2YXIgdHlwZSA9IHR5cGVzW2kkMV07XG4gICAgICAgIGlmICh0eXBlID09IFwibVwiKSB7IHR5cGVzW2kkMV0gPSBwcmV2OyB9XG4gICAgICAgIGVsc2UgeyBwcmV2ID0gdHlwZTsgfVxuICAgICAgfVxuXG4gICAgICAvLyBXMi4gU2VhcmNoIGJhY2t3YXJkcyBmcm9tIGVhY2ggaW5zdGFuY2Ugb2YgYSBFdXJvcGVhbiBudW1iZXJcbiAgICAgIC8vIHVudGlsIHRoZSBmaXJzdCBzdHJvbmcgdHlwZSAoUiwgTCwgQUwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuXG4gICAgICAvLyBBTCBpcyBmb3VuZCwgY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVhbiBudW1iZXIgdG8gQXJhYmljXG4gICAgICAvLyBudW1iZXIuXG4gICAgICAvLyBXMy4gQ2hhbmdlIGFsbCBBTHMgdG8gUi5cbiAgICAgIGZvciAodmFyIGkkMiA9IDAsIGN1ciA9IG91dGVyVHlwZTsgaSQyIDwgbGVuOyArK2kkMikge1xuICAgICAgICB2YXIgdHlwZSQxID0gdHlwZXNbaSQyXTtcbiAgICAgICAgaWYgKHR5cGUkMSA9PSBcIjFcIiAmJiBjdXIgPT0gXCJyXCIpIHsgdHlwZXNbaSQyXSA9IFwiblwiOyB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3Ryb25nLnRlc3QodHlwZSQxKSkgeyBjdXIgPSB0eXBlJDE7IGlmICh0eXBlJDEgPT0gXCJyXCIpIHsgdHlwZXNbaSQyXSA9IFwiUlwiOyB9IH1cbiAgICAgIH1cblxuICAgICAgLy8gVzQuIEEgc2luZ2xlIEV1cm9wZWFuIHNlcGFyYXRvciBiZXR3ZWVuIHR3byBFdXJvcGVhbiBudW1iZXJzXG4gICAgICAvLyBjaGFuZ2VzIHRvIGEgRXVyb3BlYW4gbnVtYmVyLiBBIHNpbmdsZSBjb21tb24gc2VwYXJhdG9yIGJldHdlZW5cbiAgICAgIC8vIHR3byBudW1iZXJzIG9mIHRoZSBzYW1lIHR5cGUgY2hhbmdlcyB0byB0aGF0IHR5cGUuXG4gICAgICBmb3IgKHZhciBpJDMgPSAxLCBwcmV2JDEgPSB0eXBlc1swXTsgaSQzIDwgbGVuIC0gMTsgKytpJDMpIHtcbiAgICAgICAgdmFyIHR5cGUkMiA9IHR5cGVzW2kkM107XG4gICAgICAgIGlmICh0eXBlJDIgPT0gXCIrXCIgJiYgcHJldiQxID09IFwiMVwiICYmIHR5cGVzW2kkMysxXSA9PSBcIjFcIikgeyB0eXBlc1tpJDNdID0gXCIxXCI7IH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSQyID09IFwiLFwiICYmIHByZXYkMSA9PSB0eXBlc1tpJDMrMV0gJiZcbiAgICAgICAgICAgICAgICAgKHByZXYkMSA9PSBcIjFcIiB8fCBwcmV2JDEgPT0gXCJuXCIpKSB7IHR5cGVzW2kkM10gPSBwcmV2JDE7IH1cbiAgICAgICAgcHJldiQxID0gdHlwZSQyO1xuICAgICAgfVxuXG4gICAgICAvLyBXNS4gQSBzZXF1ZW5jZSBvZiBFdXJvcGVhbiB0ZXJtaW5hdG9ycyBhZGphY2VudCB0byBFdXJvcGVhblxuICAgICAgLy8gbnVtYmVycyBjaGFuZ2VzIHRvIGFsbCBFdXJvcGVhbiBudW1iZXJzLlxuICAgICAgLy8gVzYuIE90aGVyd2lzZSwgc2VwYXJhdG9ycyBhbmQgdGVybWluYXRvcnMgY2hhbmdlIHRvIE90aGVyXG4gICAgICAvLyBOZXV0cmFsLlxuICAgICAgZm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgbGVuOyArK2kkNCkge1xuICAgICAgICB2YXIgdHlwZSQzID0gdHlwZXNbaSQ0XTtcbiAgICAgICAgaWYgKHR5cGUkMyA9PSBcIixcIikgeyB0eXBlc1tpJDRdID0gXCJOXCI7IH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSQzID09IFwiJVwiKSB7XG4gICAgICAgICAgdmFyIGVuZCA9ICh2b2lkIDApO1xuICAgICAgICAgIGZvciAoZW5kID0gaSQ0ICsgMTsgZW5kIDwgbGVuICYmIHR5cGVzW2VuZF0gPT0gXCIlXCI7ICsrZW5kKSB7fVxuICAgICAgICAgIHZhciByZXBsYWNlID0gKGkkNCAmJiB0eXBlc1tpJDQtMV0gPT0gXCIhXCIpIHx8IChlbmQgPCBsZW4gJiYgdHlwZXNbZW5kXSA9PSBcIjFcIikgPyBcIjFcIiA6IFwiTlwiO1xuICAgICAgICAgIGZvciAodmFyIGogPSBpJDQ7IGogPCBlbmQ7ICsraikgeyB0eXBlc1tqXSA9IHJlcGxhY2U7IH1cbiAgICAgICAgICBpJDQgPSBlbmQgLSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFc3LiBTZWFyY2ggYmFja3dhcmRzIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlclxuICAgICAgLy8gdW50aWwgdGhlIGZpcnN0IHN0cm9uZyB0eXBlIChSLCBMLCBvciBzb3IpIGlzIGZvdW5kLiBJZiBhbiBMIGlzXG4gICAgICAvLyBmb3VuZCwgdGhlbiBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBMLlxuICAgICAgZm9yICh2YXIgaSQ1ID0gMCwgY3VyJDEgPSBvdXRlclR5cGU7IGkkNSA8IGxlbjsgKytpJDUpIHtcbiAgICAgICAgdmFyIHR5cGUkNCA9IHR5cGVzW2kkNV07XG4gICAgICAgIGlmIChjdXIkMSA9PSBcIkxcIiAmJiB0eXBlJDQgPT0gXCIxXCIpIHsgdHlwZXNbaSQ1XSA9IFwiTFwiOyB9XG4gICAgICAgIGVsc2UgaWYgKGlzU3Ryb25nLnRlc3QodHlwZSQ0KSkgeyBjdXIkMSA9IHR5cGUkNDsgfVxuICAgICAgfVxuXG4gICAgICAvLyBOMS4gQSBzZXF1ZW5jZSBvZiBuZXV0cmFscyB0YWtlcyB0aGUgZGlyZWN0aW9uIG9mIHRoZVxuICAgICAgLy8gc3Vycm91bmRpbmcgc3Ryb25nIHRleHQgaWYgdGhlIHRleHQgb24gYm90aCBzaWRlcyBoYXMgdGhlIHNhbWVcbiAgICAgIC8vIGRpcmVjdGlvbi4gRXVyb3BlYW4gYW5kIEFyYWJpYyBudW1iZXJzIGFjdCBhcyBpZiB0aGV5IHdlcmUgUiBpblxuICAgICAgLy8gdGVybXMgb2YgdGhlaXIgaW5mbHVlbmNlIG9uIG5ldXRyYWxzLiBTdGFydC1vZi1sZXZlbC1ydW4gKHNvcilcbiAgICAgIC8vIGFuZCBlbmQtb2YtbGV2ZWwtcnVuIChlb3IpIGFyZSB1c2VkIGF0IGxldmVsIHJ1biBib3VuZGFyaWVzLlxuICAgICAgLy8gTjIuIEFueSByZW1haW5pbmcgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbi5cbiAgICAgIGZvciAodmFyIGkkNiA9IDA7IGkkNiA8IGxlbjsgKytpJDYpIHtcbiAgICAgICAgaWYgKGlzTmV1dHJhbC50ZXN0KHR5cGVzW2kkNl0pKSB7XG4gICAgICAgICAgdmFyIGVuZCQxID0gKHZvaWQgMCk7XG4gICAgICAgICAgZm9yIChlbmQkMSA9IGkkNiArIDE7IGVuZCQxIDwgbGVuICYmIGlzTmV1dHJhbC50ZXN0KHR5cGVzW2VuZCQxXSk7ICsrZW5kJDEpIHt9XG4gICAgICAgICAgdmFyIGJlZm9yZSA9IChpJDYgPyB0eXBlc1tpJDYtMV0gOiBvdXRlclR5cGUpID09IFwiTFwiO1xuICAgICAgICAgIHZhciBhZnRlciA9IChlbmQkMSA8IGxlbiA/IHR5cGVzW2VuZCQxXSA6IG91dGVyVHlwZSkgPT0gXCJMXCI7XG4gICAgICAgICAgdmFyIHJlcGxhY2UkMSA9IGJlZm9yZSA9PSBhZnRlciA/IChiZWZvcmUgPyBcIkxcIiA6IFwiUlwiKSA6IG91dGVyVHlwZTtcbiAgICAgICAgICBmb3IgKHZhciBqJDEgPSBpJDY7IGokMSA8IGVuZCQxOyArK2okMSkgeyB0eXBlc1tqJDFdID0gcmVwbGFjZSQxOyB9XG4gICAgICAgICAgaSQ2ID0gZW5kJDEgLSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhlcmUgd2UgZGVwYXJ0IGZyb20gdGhlIGRvY3VtZW50ZWQgYWxnb3JpdGhtLCBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgLy8gYnVpbGRpbmcgdXAgYW4gYWN0dWFsIGxldmVscyBhcnJheS4gU2luY2UgdGhlcmUgYXJlIG9ubHkgdGhyZWVcbiAgICAgIC8vIGxldmVscyAoMCwgMSwgMikgaW4gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBkb2Vzbid0IHRha2VcbiAgICAgIC8vIGV4cGxpY2l0IGVtYmVkZGluZyBpbnRvIGFjY291bnQsIHdlIGNhbiBidWlsZCB1cCB0aGUgb3JkZXIgb25cbiAgICAgIC8vIHRoZSBmbHksIHdpdGhvdXQgZm9sbG93aW5nIHRoZSBsZXZlbC1iYXNlZCBhbGdvcml0aG0uXG4gICAgICB2YXIgb3JkZXIgPSBbXSwgbTtcbiAgICAgIGZvciAodmFyIGkkNyA9IDA7IGkkNyA8IGxlbjspIHtcbiAgICAgICAgaWYgKGNvdW50c0FzTGVmdC50ZXN0KHR5cGVzW2kkN10pKSB7XG4gICAgICAgICAgdmFyIHN0YXJ0ID0gaSQ3O1xuICAgICAgICAgIGZvciAoKytpJDc7IGkkNyA8IGxlbiAmJiBjb3VudHNBc0xlZnQudGVzdCh0eXBlc1tpJDddKTsgKytpJDcpIHt9XG4gICAgICAgICAgb3JkZXIucHVzaChuZXcgQmlkaVNwYW4oMCwgc3RhcnQsIGkkNykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwb3MgPSBpJDcsIGF0ID0gb3JkZXIubGVuZ3RoLCBpc1JUTCA9IGRpcmVjdGlvbiA9PSBcInJ0bFwiID8gMSA6IDA7XG4gICAgICAgICAgZm9yICgrK2kkNzsgaSQ3IDwgbGVuICYmIHR5cGVzW2kkN10gIT0gXCJMXCI7ICsraSQ3KSB7fVxuICAgICAgICAgIGZvciAodmFyIGokMiA9IHBvczsgaiQyIDwgaSQ3Oykge1xuICAgICAgICAgICAgaWYgKGNvdW50c0FzTnVtLnRlc3QodHlwZXNbaiQyXSkpIHtcbiAgICAgICAgICAgICAgaWYgKHBvcyA8IGokMikgeyBvcmRlci5zcGxpY2UoYXQsIDAsIG5ldyBCaWRpU3BhbigxLCBwb3MsIGokMikpOyBhdCArPSBpc1JUTDsgfVxuICAgICAgICAgICAgICB2YXIgbnN0YXJ0ID0gaiQyO1xuICAgICAgICAgICAgICBmb3IgKCsraiQyOyBqJDIgPCBpJDcgJiYgY291bnRzQXNOdW0udGVzdCh0eXBlc1tqJDJdKTsgKytqJDIpIHt9XG4gICAgICAgICAgICAgIG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDIsIG5zdGFydCwgaiQyKSk7XG4gICAgICAgICAgICAgIGF0ICs9IGlzUlRMO1xuICAgICAgICAgICAgICBwb3MgPSBqJDI7XG4gICAgICAgICAgICB9IGVsc2UgeyArK2okMjsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG9zIDwgaSQ3KSB7IG9yZGVyLnNwbGljZShhdCwgMCwgbmV3IEJpZGlTcGFuKDEsIHBvcywgaSQ3KSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImx0clwiKSB7XG4gICAgICAgIGlmIChvcmRlclswXS5sZXZlbCA9PSAxICYmIChtID0gc3RyLm1hdGNoKC9eXFxzKy8pKSkge1xuICAgICAgICAgIG9yZGVyWzBdLmZyb20gPSBtWzBdLmxlbmd0aDtcbiAgICAgICAgICBvcmRlci51bnNoaWZ0KG5ldyBCaWRpU3BhbigwLCAwLCBtWzBdLmxlbmd0aCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsc3Qob3JkZXIpLmxldmVsID09IDEgJiYgKG0gPSBzdHIubWF0Y2goL1xccyskLykpKSB7XG4gICAgICAgICAgbHN0KG9yZGVyKS50byAtPSBtWzBdLmxlbmd0aDtcbiAgICAgICAgICBvcmRlci5wdXNoKG5ldyBCaWRpU3BhbigwLCBsZW4gLSBtWzBdLmxlbmd0aCwgbGVuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBcInJ0bFwiID8gb3JkZXIucmV2ZXJzZSgpIDogb3JkZXJcbiAgICB9XG4gIH0pKCk7XG5cbiAgLy8gR2V0IHRoZSBiaWRpIG9yZGVyaW5nIGZvciB0aGUgZ2l2ZW4gbGluZSAoYW5kIGNhY2hlIGl0KS4gUmV0dXJuc1xuICAvLyBmYWxzZSBmb3IgbGluZXMgdGhhdCBhcmUgZnVsbHkgbGVmdC10by1yaWdodCwgYW5kIGFuIGFycmF5IG9mXG4gIC8vIEJpZGlTcGFuIG9iamVjdHMgb3RoZXJ3aXNlLlxuICBmdW5jdGlvbiBnZXRPcmRlcihsaW5lLCBkaXJlY3Rpb24pIHtcbiAgICB2YXIgb3JkZXIgPSBsaW5lLm9yZGVyO1xuICAgIGlmIChvcmRlciA9PSBudWxsKSB7IG9yZGVyID0gbGluZS5vcmRlciA9IGJpZGlPcmRlcmluZyhsaW5lLnRleHQsIGRpcmVjdGlvbik7IH1cbiAgICByZXR1cm4gb3JkZXJcbiAgfVxuXG4gIC8vIEVWRU5UIEhBTkRMSU5HXG5cbiAgLy8gTGlnaHR3ZWlnaHQgZXZlbnQgZnJhbWV3b3JrLiBvbi9vZmYgYWxzbyB3b3JrIG9uIERPTSBub2RlcyxcbiAgLy8gcmVnaXN0ZXJpbmcgbmF0aXZlIERPTSBoYW5kbGVycy5cblxuICB2YXIgbm9IYW5kbGVycyA9IFtdO1xuXG4gIHZhciBvbiA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUsIGYpIHtcbiAgICBpZiAoZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZiwgZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZW1pdHRlci5hdHRhY2hFdmVudCkge1xuICAgICAgZW1pdHRlci5hdHRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBmKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hcCA9IGVtaXR0ZXIuX2hhbmRsZXJzIHx8IChlbWl0dGVyLl9oYW5kbGVycyA9IHt9KTtcbiAgICAgIG1hcFt0eXBlXSA9IChtYXBbdHlwZV0gfHwgbm9IYW5kbGVycykuY29uY2F0KGYpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBnZXRIYW5kbGVycyhlbWl0dGVyLCB0eXBlKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIuX2hhbmRsZXJzICYmIGVtaXR0ZXIuX2hhbmRsZXJzW3R5cGVdIHx8IG5vSGFuZGxlcnNcbiAgfVxuXG4gIGZ1bmN0aW9uIG9mZihlbWl0dGVyLCB0eXBlLCBmKSB7XG4gICAgaWYgKGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGVtaXR0ZXIuZGV0YWNoRXZlbnQpIHtcbiAgICAgIGVtaXR0ZXIuZGV0YWNoRXZlbnQoXCJvblwiICsgdHlwZSwgZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXAgPSBlbWl0dGVyLl9oYW5kbGVycywgYXJyID0gbWFwICYmIG1hcFt0eXBlXTtcbiAgICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhPZihhcnIsIGYpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSlcbiAgICAgICAgICB7IG1hcFt0eXBlXSA9IGFyci5zbGljZSgwLCBpbmRleCkuY29uY2F0KGFyci5zbGljZShpbmRleCArIDEpKTsgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbChlbWl0dGVyLCB0eXBlIC8qLCB2YWx1ZXMuLi4qLykge1xuICAgIHZhciBoYW5kbGVycyA9IGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpO1xuICAgIGlmICghaGFuZGxlcnMubGVuZ3RoKSB7IHJldHVybiB9XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGFuZGxlcnMubGVuZ3RoOyArK2kpIHsgaGFuZGxlcnNbaV0uYXBwbHkobnVsbCwgYXJncyk7IH1cbiAgfVxuXG4gIC8vIFRoZSBET00gZXZlbnRzIHRoYXQgQ29kZU1pcnJvciBoYW5kbGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5XG4gIC8vIHJlZ2lzdGVyaW5nIGEgKG5vbi1ET00pIGhhbmRsZXIgb24gdGhlIGVkaXRvciBmb3IgdGhlIGV2ZW50IG5hbWUsXG4gIC8vIGFuZCBwcmV2ZW50RGVmYXVsdC1pbmcgdGhlIGV2ZW50IGluIHRoYXQgaGFuZGxlci5cbiAgZnVuY3Rpb24gc2lnbmFsRE9NRXZlbnQoY20sIGUsIG92ZXJyaWRlKSB7XG4gICAgaWYgKHR5cGVvZiBlID09IFwic3RyaW5nXCIpXG4gICAgICB7IGUgPSB7dHlwZTogZSwgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9fTsgfVxuICAgIHNpZ25hbChjbSwgb3ZlcnJpZGUgfHwgZS50eXBlLCBjbSwgZSk7XG4gICAgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKSB8fCBlLmNvZGVtaXJyb3JJZ25vcmVcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ25hbEN1cnNvckFjdGl2aXR5KGNtKSB7XG4gICAgdmFyIGFyciA9IGNtLl9oYW5kbGVycyAmJiBjbS5faGFuZGxlcnMuY3Vyc29yQWN0aXZpdHk7XG4gICAgaWYgKCFhcnIpIHsgcmV0dXJuIH1cbiAgICB2YXIgc2V0ID0gY20uY3VyT3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycyB8fCAoY20uY3VyT3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVycyA9IFtdKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkgeyBpZiAoaW5kZXhPZihzZXQsIGFycltpXSkgPT0gLTEpXG4gICAgICB7IHNldC5wdXNoKGFycltpXSk7IH0gfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFzSGFuZGxlcihlbWl0dGVyLCB0eXBlKSB7XG4gICAgcmV0dXJuIGdldEhhbmRsZXJzKGVtaXR0ZXIsIHR5cGUpLmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8vIEFkZCBvbiBhbmQgb2ZmIG1ldGhvZHMgdG8gYSBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSwgdG8gbWFrZVxuICAvLyByZWdpc3RlcmluZyBldmVudHMgb24gc3VjaCBvYmplY3RzIG1vcmUgY29udmVuaWVudC5cbiAgZnVuY3Rpb24gZXZlbnRNaXhpbihjdG9yKSB7XG4gICAgY3Rvci5wcm90b3R5cGUub24gPSBmdW5jdGlvbih0eXBlLCBmKSB7b24odGhpcywgdHlwZSwgZik7fTtcbiAgICBjdG9yLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbih0eXBlLCBmKSB7b2ZmKHRoaXMsIHR5cGUsIGYpO307XG4gIH1cblxuICAvLyBEdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBzdGlsbCBzdXBwb3J0IGp1cmFzc2ljIElFIHZlcnNpb25zLCBzb21lXG4gIC8vIGNvbXBhdGliaWxpdHkgd3JhcHBlcnMgYXJlIG5lZWRlZC5cblxuICBmdW5jdGlvbiBlX3ByZXZlbnREZWZhdWx0KGUpIHtcbiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgeyBlLnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICBlbHNlIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gIH1cbiAgZnVuY3Rpb24gZV9zdG9wUHJvcGFnYXRpb24oZSkge1xuICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgeyBlLnN0b3BQcm9wYWdhdGlvbigpOyB9XG4gICAgZWxzZSB7IGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsgfVxuICB9XG4gIGZ1bmN0aW9uIGVfZGVmYXVsdFByZXZlbnRlZChlKSB7XG4gICAgcmV0dXJuIGUuZGVmYXVsdFByZXZlbnRlZCAhPSBudWxsID8gZS5kZWZhdWx0UHJldmVudGVkIDogZS5yZXR1cm5WYWx1ZSA9PSBmYWxzZVxuICB9XG4gIGZ1bmN0aW9uIGVfc3RvcChlKSB7ZV9wcmV2ZW50RGVmYXVsdChlKTsgZV9zdG9wUHJvcGFnYXRpb24oZSk7fVxuXG4gIGZ1bmN0aW9uIGVfdGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50fVxuICBmdW5jdGlvbiBlX2J1dHRvbihlKSB7XG4gICAgdmFyIGIgPSBlLndoaWNoO1xuICAgIGlmIChiID09IG51bGwpIHtcbiAgICAgIGlmIChlLmJ1dHRvbiAmIDEpIHsgYiA9IDE7IH1cbiAgICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgMikgeyBiID0gMzsgfVxuICAgICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSB7IGIgPSAyOyB9XG4gICAgfVxuICAgIGlmIChtYWMgJiYgZS5jdHJsS2V5ICYmIGIgPT0gMSkgeyBiID0gMzsgfVxuICAgIHJldHVybiBiXG4gIH1cblxuICAvLyBEZXRlY3QgZHJhZy1hbmQtZHJvcFxuICB2YXIgZHJhZ0FuZERyb3AgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1cHBvcnQgaW4gSUU2LTgsIGJ1dCBJXG4gICAgLy8gY291bGRuJ3QgZ2V0IGl0IHRvIHdvcmsgeWV0LlxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHZhciBkaXYgPSBlbHQoJ2RpdicpO1xuICAgIHJldHVybiBcImRyYWdnYWJsZVwiIGluIGRpdiB8fCBcImRyYWdEcm9wXCIgaW4gZGl2XG4gIH0oKTtcblxuICB2YXIgendzcFN1cHBvcnRlZDtcbiAgZnVuY3Rpb24gemVyb1dpZHRoRWxlbWVudChtZWFzdXJlKSB7XG4gICAgaWYgKHp3c3BTdXBwb3J0ZWQgPT0gbnVsbCkge1xuICAgICAgdmFyIHRlc3QgPSBlbHQoXCJzcGFuXCIsIFwiXFx1MjAwYlwiKTtcbiAgICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGVsdChcInNwYW5cIiwgW3Rlc3QsIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwieFwiKV0pKTtcbiAgICAgIGlmIChtZWFzdXJlLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0ICE9IDApXG4gICAgICAgIHsgendzcFN1cHBvcnRlZCA9IHRlc3Qub2Zmc2V0V2lkdGggPD0gMSAmJiB0ZXN0Lm9mZnNldEhlaWdodCA+IDIgJiYgIShpZSAmJiBpZV92ZXJzaW9uIDwgOCk7IH1cbiAgICB9XG4gICAgdmFyIG5vZGUgPSB6d3NwU3VwcG9ydGVkID8gZWx0KFwic3BhblwiLCBcIlxcdTIwMGJcIikgOlxuICAgICAgZWx0KFwic3BhblwiLCBcIlxcdTAwYTBcIiwgbnVsbCwgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxcHg7IG1hcmdpbi1yaWdodDogLTFweFwiKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShcImNtLXRleHRcIiwgXCJcIik7XG4gICAgcmV0dXJuIG5vZGVcbiAgfVxuXG4gIC8vIEZlYXR1cmUtZGV0ZWN0IElFJ3MgY3J1bW15IGNsaWVudCByZWN0IHJlcG9ydGluZyBmb3IgYmlkaSB0ZXh0XG4gIHZhciBiYWRCaWRpUmVjdHM7XG4gIGZ1bmN0aW9uIGhhc0JhZEJpZGlSZWN0cyhtZWFzdXJlKSB7XG4gICAgaWYgKGJhZEJpZGlSZWN0cyAhPSBudWxsKSB7IHJldHVybiBiYWRCaWRpUmVjdHMgfVxuICAgIHZhciB0eHQgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChtZWFzdXJlLCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIkFcXHUwNjJlQVwiKSk7XG4gICAgdmFyIHIwID0gcmFuZ2UodHh0LCAwLCAxKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB2YXIgcjEgPSByYW5nZSh0eHQsIDEsIDIpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJlbW92ZUNoaWxkcmVuKG1lYXN1cmUpO1xuICAgIGlmICghcjAgfHwgcjAubGVmdCA9PSByMC5yaWdodCkgeyByZXR1cm4gZmFsc2UgfSAvLyBTYWZhcmkgcmV0dXJucyBudWxsIGluIHNvbWUgY2FzZXMgKCMyNzgwKVxuICAgIHJldHVybiBiYWRCaWRpUmVjdHMgPSAocjEucmlnaHQgLSByMC5yaWdodCA8IDMpXG4gIH1cblxuICAvLyBTZWUgaWYgXCJcIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuXG4gIC8vIGFsdGVybmF0aXZlIHdheSB0byBzcGxpdCBsaW5lcy5cbiAgdmFyIHNwbGl0TGluZXNBdXRvID0gXCJcXG5cXG5iXCIuc3BsaXQoL1xcbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHZhciBwb3MgPSAwLCByZXN1bHQgPSBbXSwgbCA9IHN0cmluZy5sZW5ndGg7XG4gICAgd2hpbGUgKHBvcyA8PSBsKSB7XG4gICAgICB2YXIgbmwgPSBzdHJpbmcuaW5kZXhPZihcIlxcblwiLCBwb3MpO1xuICAgICAgaWYgKG5sID09IC0xKSB7IG5sID0gc3RyaW5nLmxlbmd0aDsgfVxuICAgICAgdmFyIGxpbmUgPSBzdHJpbmcuc2xpY2UocG9zLCBzdHJpbmcuY2hhckF0KG5sIC0gMSkgPT0gXCJcXHJcIiA/IG5sIC0gMSA6IG5sKTtcbiAgICAgIHZhciBydCA9IGxpbmUuaW5kZXhPZihcIlxcclwiKTtcbiAgICAgIGlmIChydCAhPSAtMSkge1xuICAgICAgICByZXN1bHQucHVzaChsaW5lLnNsaWNlKDAsIHJ0KSk7XG4gICAgICAgIHBvcyArPSBydCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChsaW5lKTtcbiAgICAgICAgcG9zID0gbmwgKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiBzdHJpbmcuc3BsaXQoL1xcclxcbj98XFxuLyk7IH07XG5cbiAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBmdW5jdGlvbiAodGUpIHtcbiAgICB0cnkgeyByZXR1cm4gdGUuc2VsZWN0aW9uU3RhcnQgIT0gdGUuc2VsZWN0aW9uRW5kIH1cbiAgICBjYXRjaChlKSB7IHJldHVybiBmYWxzZSB9XG4gIH0gOiBmdW5jdGlvbiAodGUpIHtcbiAgICB2YXIgcmFuZ2U7XG4gICAgdHJ5IHtyYW5nZSA9IHRlLm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fVxuICAgIGNhdGNoKGUpIHt9XG4gICAgaWYgKCFyYW5nZSB8fCByYW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICByZXR1cm4gcmFuZ2UuY29tcGFyZUVuZFBvaW50cyhcIlN0YXJ0VG9FbmRcIiwgcmFuZ2UpICE9IDBcbiAgfTtcblxuICB2YXIgaGFzQ29weUV2ZW50ID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9IGVsdChcImRpdlwiKTtcbiAgICBpZiAoXCJvbmNvcHlcIiBpbiBlKSB7IHJldHVybiB0cnVlIH1cbiAgICBlLnNldEF0dHJpYnV0ZShcIm9uY29weVwiLCBcInJldHVybjtcIik7XG4gICAgcmV0dXJuIHR5cGVvZiBlLm9uY29weSA9PSBcImZ1bmN0aW9uXCJcbiAgfSkoKTtcblxuICB2YXIgYmFkWm9vbWVkUmVjdHMgPSBudWxsO1xuICBmdW5jdGlvbiBoYXNCYWRab29tZWRSZWN0cyhtZWFzdXJlKSB7XG4gICAgaWYgKGJhZFpvb21lZFJlY3RzICE9IG51bGwpIHsgcmV0dXJuIGJhZFpvb21lZFJlY3RzIH1cbiAgICB2YXIgbm9kZSA9IHJlbW92ZUNoaWxkcmVuQW5kQWRkKG1lYXN1cmUsIGVsdChcInNwYW5cIiwgXCJ4XCIpKTtcbiAgICB2YXIgbm9ybWFsID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB2YXIgZnJvbVJhbmdlID0gcmFuZ2Uobm9kZSwgMCwgMSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIGJhZFpvb21lZFJlY3RzID0gTWF0aC5hYnMobm9ybWFsLmxlZnQgLSBmcm9tUmFuZ2UubGVmdCkgPiAxXG4gIH1cblxuICAvLyBLbm93biBtb2RlcywgYnkgbmFtZSBhbmQgYnkgTUlNRVxuICB2YXIgbW9kZXMgPSB7fSwgbWltZU1vZGVzID0ge307XG5cbiAgLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzXG4gIC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHlcbiAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pXG4gIGZ1bmN0aW9uIGRlZmluZU1vZGUobmFtZSwgbW9kZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMilcbiAgICAgIHsgbW9kZS5kZXBlbmRlbmNpZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOyB9XG4gICAgbW9kZXNbbmFtZV0gPSBtb2RlO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmaW5lTUlNRShtaW1lLCBzcGVjKSB7XG4gICAgbWltZU1vZGVzW21pbWVdID0gc3BlYztcbiAgfVxuXG4gIC8vIEdpdmVuIGEgTUlNRSB0eXBlLCBhIHtuYW1lLCAuLi5vcHRpb25zfSBjb25maWcgb2JqZWN0LCBvciBhIG5hbWVcbiAgLy8gc3RyaW5nLCByZXR1cm4gYSBtb2RlIGNvbmZpZyBvYmplY3QuXG4gIGZ1bmN0aW9uIHJlc29sdmVNb2RlKHNwZWMpIHtcbiAgICBpZiAodHlwZW9mIHNwZWMgPT0gXCJzdHJpbmdcIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYykpIHtcbiAgICAgIHNwZWMgPSBtaW1lTW9kZXNbc3BlY107XG4gICAgfSBlbHNlIGlmIChzcGVjICYmIHR5cGVvZiBzcGVjLm5hbWUgPT0gXCJzdHJpbmdcIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkge1xuICAgICAgdmFyIGZvdW5kID0gbWltZU1vZGVzW3NwZWMubmFtZV07XG4gICAgICBpZiAodHlwZW9mIGZvdW5kID09IFwic3RyaW5nXCIpIHsgZm91bmQgPSB7bmFtZTogZm91bmR9OyB9XG4gICAgICBzcGVjID0gY3JlYXRlT2JqKGZvdW5kLCBzcGVjKTtcbiAgICAgIHNwZWMubmFtZSA9IGZvdW5kLm5hbWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIC9eW1xcd1xcLV0rXFwvW1xcd1xcLV0rXFwreG1sJC8udGVzdChzcGVjKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVNb2RlKFwiYXBwbGljYXRpb24veG1sXCIpXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSBcInN0cmluZ1wiICYmIC9eW1xcd1xcLV0rXFwvW1xcd1xcLV0rXFwranNvbiQvLnRlc3Qoc3BlYykpIHtcbiAgICAgIHJldHVybiByZXNvbHZlTW9kZShcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIpIHsgcmV0dXJuIHtuYW1lOiBzcGVjfSB9XG4gICAgZWxzZSB7IHJldHVybiBzcGVjIHx8IHtuYW1lOiBcIm51bGxcIn0gfVxuICB9XG5cbiAgLy8gR2l2ZW4gYSBtb2RlIHNwZWMgKGFueXRoaW5nIHRoYXQgcmVzb2x2ZU1vZGUgYWNjZXB0cyksIGZpbmQgYW5kXG4gIC8vIGluaXRpYWxpemUgYW4gYWN0dWFsIG1vZGUgb2JqZWN0LlxuICBmdW5jdGlvbiBnZXRNb2RlKG9wdGlvbnMsIHNwZWMpIHtcbiAgICBzcGVjID0gcmVzb2x2ZU1vZGUoc3BlYyk7XG4gICAgdmFyIG1mYWN0b3J5ID0gbW9kZXNbc3BlYy5uYW1lXTtcbiAgICBpZiAoIW1mYWN0b3J5KSB7IHJldHVybiBnZXRNb2RlKG9wdGlvbnMsIFwidGV4dC9wbGFpblwiKSB9XG4gICAgdmFyIG1vZGVPYmogPSBtZmFjdG9yeShvcHRpb25zLCBzcGVjKTtcbiAgICBpZiAobW9kZUV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkoc3BlYy5uYW1lKSkge1xuICAgICAgdmFyIGV4dHMgPSBtb2RlRXh0ZW5zaW9uc1tzcGVjLm5hbWVdO1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiBleHRzKSB7XG4gICAgICAgIGlmICghZXh0cy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgeyBjb250aW51ZSB9XG4gICAgICAgIGlmIChtb2RlT2JqLmhhc093blByb3BlcnR5KHByb3ApKSB7IG1vZGVPYmpbXCJfXCIgKyBwcm9wXSA9IG1vZGVPYmpbcHJvcF07IH1cbiAgICAgICAgbW9kZU9ialtwcm9wXSA9IGV4dHNbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICAgIG1vZGVPYmoubmFtZSA9IHNwZWMubmFtZTtcbiAgICBpZiAoc3BlYy5oZWxwZXJUeXBlKSB7IG1vZGVPYmouaGVscGVyVHlwZSA9IHNwZWMuaGVscGVyVHlwZTsgfVxuICAgIGlmIChzcGVjLm1vZGVQcm9wcykgeyBmb3IgKHZhciBwcm9wJDEgaW4gc3BlYy5tb2RlUHJvcHMpXG4gICAgICB7IG1vZGVPYmpbcHJvcCQxXSA9IHNwZWMubW9kZVByb3BzW3Byb3AkMV07IH0gfVxuXG4gICAgcmV0dXJuIG1vZGVPYmpcbiAgfVxuXG4gIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gYXR0YWNoIHByb3BlcnRpZXMgdG8gbW9kZSBvYmplY3RzIGZyb21cbiAgLy8gb3V0c2lkZSB0aGUgYWN0dWFsIG1vZGUgZGVmaW5pdGlvbi5cbiAgdmFyIG1vZGVFeHRlbnNpb25zID0ge307XG4gIGZ1bmN0aW9uIGV4dGVuZE1vZGUobW9kZSwgcHJvcGVydGllcykge1xuICAgIHZhciBleHRzID0gbW9kZUV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkobW9kZSkgPyBtb2RlRXh0ZW5zaW9uc1ttb2RlXSA6IChtb2RlRXh0ZW5zaW9uc1ttb2RlXSA9IHt9KTtcbiAgICBjb3B5T2JqKHByb3BlcnRpZXMsIGV4dHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29weVN0YXRlKG1vZGUsIHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlID09PSB0cnVlKSB7IHJldHVybiBzdGF0ZSB9XG4gICAgaWYgKG1vZGUuY29weVN0YXRlKSB7IHJldHVybiBtb2RlLmNvcHlTdGF0ZShzdGF0ZSkgfVxuICAgIHZhciBuc3RhdGUgPSB7fTtcbiAgICBmb3IgKHZhciBuIGluIHN0YXRlKSB7XG4gICAgICB2YXIgdmFsID0gc3RhdGVbbl07XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgQXJyYXkpIHsgdmFsID0gdmFsLmNvbmNhdChbXSk7IH1cbiAgICAgIG5zdGF0ZVtuXSA9IHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIG5zdGF0ZVxuICB9XG5cbiAgLy8gR2l2ZW4gYSBtb2RlIGFuZCBhIHN0YXRlIChmb3IgdGhhdCBtb2RlKSwgZmluZCB0aGUgaW5uZXIgbW9kZSBhbmRcbiAgLy8gc3RhdGUgYXQgdGhlIHBvc2l0aW9uIHRoYXQgdGhlIHN0YXRlIHJlZmVycyB0by5cbiAgZnVuY3Rpb24gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKSB7XG4gICAgdmFyIGluZm87XG4gICAgd2hpbGUgKG1vZGUuaW5uZXJNb2RlKSB7XG4gICAgICBpbmZvID0gbW9kZS5pbm5lck1vZGUoc3RhdGUpO1xuICAgICAgaWYgKCFpbmZvIHx8IGluZm8ubW9kZSA9PSBtb2RlKSB7IGJyZWFrIH1cbiAgICAgIHN0YXRlID0gaW5mby5zdGF0ZTtcbiAgICAgIG1vZGUgPSBpbmZvLm1vZGU7XG4gICAgfVxuICAgIHJldHVybiBpbmZvIHx8IHttb2RlOiBtb2RlLCBzdGF0ZTogc3RhdGV9XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFN0YXRlKG1vZGUsIGExLCBhMikge1xuICAgIHJldHVybiBtb2RlLnN0YXJ0U3RhdGUgPyBtb2RlLnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWVcbiAgfVxuXG4gIC8vIFNUUklORyBTVFJFQU1cblxuICAvLyBGZWQgdG8gdGhlIG1vZGUgcGFyc2VycywgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyB0byBtYWtlXG4gIC8vIHBhcnNlcnMgbW9yZSBzdWNjaW5jdC5cblxuICB2YXIgU3RyaW5nU3RyZWFtID0gZnVuY3Rpb24oc3RyaW5nLCB0YWJTaXplLCBsaW5lT3JhY2xlKSB7XG4gICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0ID0gMDtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLnRhYlNpemUgPSB0YWJTaXplIHx8IDg7XG4gICAgdGhpcy5sYXN0Q29sdW1uUG9zID0gdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSAwO1xuICAgIHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgICB0aGlzLmxpbmVPcmFjbGUgPSBsaW5lT3JhY2xlO1xuICB9O1xuXG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZW9sID0gZnVuY3Rpb24gKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGh9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLnNvbCA9IGZ1bmN0aW9uICgpIHtyZXR1cm4gdGhpcy5wb3MgPT0gdGhpcy5saW5lU3RhcnR9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLnBlZWsgPSBmdW5jdGlvbiAoKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdW5kZWZpbmVkfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aClcbiAgICAgIHsgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKSB9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZWF0ID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTtcbiAgICB2YXIgb2s7XG4gICAgaWYgKHR5cGVvZiBtYXRjaCA9PSBcInN0cmluZ1wiKSB7IG9rID0gY2ggPT0gbWF0Y2g7IH1cbiAgICBlbHNlIHsgb2sgPSBjaCAmJiAobWF0Y2gudGVzdCA/IG1hdGNoLnRlc3QoY2gpIDogbWF0Y2goY2gpKTsgfVxuICAgIGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaH1cbiAgfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5lYXRXaGlsZSA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgIHdoaWxlICh0aGlzLmVhdChtYXRjaCkpe31cbiAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydFxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFNwYWNlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICAgIHdoaWxlICgvW1xcc1xcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpKSB7ICsrdGhpcy5wb3M7IH1cbiAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydFxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLnNraXBUb0VuZCA9IGZ1bmN0aW9uICgpIHt0aGlzLnBvcyA9IHRoaXMuc3RyaW5nLmxlbmd0aDt9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLnNraXBUbyA9IGZ1bmN0aW9uIChjaCkge1xuICAgIHZhciBmb3VuZCA9IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKTtcbiAgICBpZiAoZm91bmQgPiAtMSkge3RoaXMucG9zID0gZm91bmQ7IHJldHVybiB0cnVlfVxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmJhY2tVcCA9IGZ1bmN0aW9uIChuKSB7dGhpcy5wb3MgLT0gbjt9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmNvbHVtbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5sYXN0Q29sdW1uUG9zIDwgdGhpcy5zdGFydCkge1xuICAgICAgdGhpcy5sYXN0Q29sdW1uVmFsdWUgPSBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFydCwgdGhpcy50YWJTaXplLCB0aGlzLmxhc3RDb2x1bW5Qb3MsIHRoaXMubGFzdENvbHVtblZhbHVlKTtcbiAgICAgIHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxhc3RDb2x1bW5WYWx1ZSAtICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApXG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUuaW5kZW50YXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCBudWxsLCB0aGlzLnRhYlNpemUpIC1cbiAgICAgICh0aGlzLmxpbmVTdGFydCA/IGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLmxpbmVTdGFydCwgdGhpcy50YWJTaXplKSA6IDApXG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiAocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vuc2l0aXZlKSB7XG4gICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhciBjYXNlZCA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZSA/IHN0ci50b0xvd2VyQ2FzZSgpIDogc3RyOyB9O1xuICAgICAgdmFyIHN1YnN0ciA9IHRoaXMuc3RyaW5nLnN1YnN0cih0aGlzLnBvcywgcGF0dGVybi5sZW5ndGgpO1xuICAgICAgaWYgKGNhc2VkKHN1YnN0cikgPT0gY2FzZWQocGF0dGVybikpIHtcbiAgICAgICAgaWYgKGNvbnN1bWUgIT09IGZhbHNlKSB7IHRoaXMucG9zICs9IHBhdHRlcm4ubGVuZ3RoOyB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTtcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCA+IDApIHsgcmV0dXJuIG51bGwgfVxuICAgICAgaWYgKG1hdGNoICYmIGNvbnN1bWUgIT09IGZhbHNlKSB7IHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsgfVxuICAgICAgcmV0dXJuIG1hdGNoXG4gICAgfVxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpfTtcbiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5oaWRlRmlyc3RDaGFycyA9IGZ1bmN0aW9uIChuLCBpbm5lcikge1xuICAgIHRoaXMubGluZVN0YXJ0ICs9IG47XG4gICAgdHJ5IHsgcmV0dXJuIGlubmVyKCkgfVxuICAgIGZpbmFsbHkgeyB0aGlzLmxpbmVTdGFydCAtPSBuOyB9XG4gIH07XG4gIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUubG9va0FoZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICB2YXIgb3JhY2xlID0gdGhpcy5saW5lT3JhY2xlO1xuICAgIHJldHVybiBvcmFjbGUgJiYgb3JhY2xlLmxvb2tBaGVhZChuKVxuICB9O1xuICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlLmJhc2VUb2tlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb3JhY2xlID0gdGhpcy5saW5lT3JhY2xlO1xuICAgIHJldHVybiBvcmFjbGUgJiYgb3JhY2xlLmJhc2VUb2tlbih0aGlzLnBvcylcbiAgfTtcblxuICAvLyBGaW5kIHRoZSBsaW5lIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci5cbiAgZnVuY3Rpb24gZ2V0TGluZShkb2MsIG4pIHtcbiAgICBuIC09IGRvYy5maXJzdDtcbiAgICBpZiAobiA8IDAgfHwgbiA+PSBkb2Muc2l6ZSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBsaW5lIFwiICsgKG4gKyBkb2MuZmlyc3QpICsgXCIgaW4gdGhlIGRvY3VtZW50LlwiKSB9XG4gICAgdmFyIGNodW5rID0gZG9jO1xuICAgIHdoaWxlICghY2h1bmsubGluZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOzsgKytpKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgICBpZiAobiA8IHN6KSB7IGNodW5rID0gY2hpbGQ7IGJyZWFrIH1cbiAgICAgICAgbiAtPSBzejtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNodW5rLmxpbmVzW25dXG4gIH1cblxuICAvLyBHZXQgdGhlIHBhcnQgb2YgYSBkb2N1bWVudCBiZXR3ZWVuIHR3byBwb3NpdGlvbnMsIGFzIGFuIGFycmF5IG9mXG4gIC8vIHN0cmluZ3MuXG4gIGZ1bmN0aW9uIGdldEJldHdlZW4oZG9jLCBzdGFydCwgZW5kKSB7XG4gICAgdmFyIG91dCA9IFtdLCBuID0gc3RhcnQubGluZTtcbiAgICBkb2MuaXRlcihzdGFydC5saW5lLCBlbmQubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICB2YXIgdGV4dCA9IGxpbmUudGV4dDtcbiAgICAgIGlmIChuID09IGVuZC5saW5lKSB7IHRleHQgPSB0ZXh0LnNsaWNlKDAsIGVuZC5jaCk7IH1cbiAgICAgIGlmIChuID09IHN0YXJ0LmxpbmUpIHsgdGV4dCA9IHRleHQuc2xpY2Uoc3RhcnQuY2gpOyB9XG4gICAgICBvdXQucHVzaCh0ZXh0KTtcbiAgICAgICsrbjtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0XG4gIH1cbiAgLy8gR2V0IHRoZSBsaW5lcyBiZXR3ZWVuIGZyb20gYW5kIHRvLCBhcyBhcnJheSBvZiBzdHJpbmdzLlxuICBmdW5jdGlvbiBnZXRMaW5lcyhkb2MsIGZyb20sIHRvKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbiAobGluZSkgeyBvdXQucHVzaChsaW5lLnRleHQpOyB9KTsgLy8gaXRlciBhYm9ydHMgd2hlbiBjYWxsYmFjayByZXR1cm5zIHRydXRoeSB2YWx1ZVxuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgaGVpZ2h0IG9mIGEgbGluZSwgcHJvcGFnYXRpbmcgdGhlIGhlaWdodCBjaGFuZ2VcbiAgLy8gdXB3YXJkcyB0byBwYXJlbnQgbm9kZXMuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7XG4gICAgdmFyIGRpZmYgPSBoZWlnaHQgLSBsaW5lLmhlaWdodDtcbiAgICBpZiAoZGlmZikgeyBmb3IgKHZhciBuID0gbGluZTsgbjsgbiA9IG4ucGFyZW50KSB7IG4uaGVpZ2h0ICs9IGRpZmY7IH0gfVxuICB9XG5cbiAgLy8gR2l2ZW4gYSBsaW5lIG9iamVjdCwgZmluZCBpdHMgbGluZSBudW1iZXIgYnkgd2Fsa2luZyB1cCB0aHJvdWdoXG4gIC8vIGl0cyBwYXJlbnQgbGlua3MuXG4gIGZ1bmN0aW9uIGxpbmVObyhsaW5lKSB7XG4gICAgaWYgKGxpbmUucGFyZW50ID09IG51bGwpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjdXIgPSBsaW5lLnBhcmVudCwgbm8gPSBpbmRleE9mKGN1ci5saW5lcywgbGluZSk7XG4gICAgZm9yICh2YXIgY2h1bmsgPSBjdXIucGFyZW50OyBjaHVuazsgY3VyID0gY2h1bmssIGNodW5rID0gY2h1bmsucGFyZW50KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkge1xuICAgICAgICBpZiAoY2h1bmsuY2hpbGRyZW5baV0gPT0gY3VyKSB7IGJyZWFrIH1cbiAgICAgICAgbm8gKz0gY2h1bmsuY2hpbGRyZW5baV0uY2h1bmtTaXplKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBubyArIGN1ci5maXJzdFxuICB9XG5cbiAgLy8gRmluZCB0aGUgbGluZSBhdCB0aGUgZ2l2ZW4gdmVydGljYWwgcG9zaXRpb24sIHVzaW5nIHRoZSBoZWlnaHRcbiAgLy8gaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IHRyZWUuXG4gIGZ1bmN0aW9uIGxpbmVBdEhlaWdodChjaHVuaywgaCkge1xuICAgIHZhciBuID0gY2h1bmsuZmlyc3Q7XG4gICAgb3V0ZXI6IGRvIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gY2h1bmsuY2hpbGRyZW5baSQxXSwgY2ggPSBjaGlsZC5oZWlnaHQ7XG4gICAgICAgIGlmIChoIDwgY2gpIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXIgfVxuICAgICAgICBoIC09IGNoO1xuICAgICAgICBuICs9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5cbiAgICB9IHdoaWxlICghY2h1bmsubGluZXMpXG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgY2h1bmsubGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBsaW5lID0gY2h1bmsubGluZXNbaV0sIGxoID0gbGluZS5oZWlnaHQ7XG4gICAgICBpZiAoaCA8IGxoKSB7IGJyZWFrIH1cbiAgICAgIGggLT0gbGg7XG4gICAgfVxuICAgIHJldHVybiBuICsgaVxuICB9XG5cbiAgZnVuY3Rpb24gaXNMaW5lKGRvYywgbCkge3JldHVybiBsID49IGRvYy5maXJzdCAmJiBsIDwgZG9jLmZpcnN0ICsgZG9jLnNpemV9XG5cbiAgZnVuY3Rpb24gbGluZU51bWJlckZvcihvcHRpb25zLCBpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhvcHRpb25zLmxpbmVOdW1iZXJGb3JtYXR0ZXIoaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyKSlcbiAgfVxuXG4gIC8vIEEgUG9zIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQuXG4gIGZ1bmN0aW9uIFBvcyhsaW5lLCBjaCwgc3RpY2t5KSB7XG4gICAgaWYgKCBzdGlja3kgPT09IHZvaWQgMCApIHN0aWNreSA9IG51bGw7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9zKSkgeyByZXR1cm4gbmV3IFBvcyhsaW5lLCBjaCwgc3RpY2t5KSB9XG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICB0aGlzLmNoID0gY2g7XG4gICAgdGhpcy5zdGlja3kgPSBzdGlja3k7XG4gIH1cblxuICAvLyBDb21wYXJlIHR3byBwb3NpdGlvbnMsIHJldHVybiAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lLCBhIG5lZ2F0aXZlXG4gIC8vIG51bWJlciB3aGVuIGEgaXMgbGVzcywgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIG90aGVyd2lzZS5cbiAgZnVuY3Rpb24gY21wKGEsIGIpIHsgcmV0dXJuIGEubGluZSAtIGIubGluZSB8fCBhLmNoIC0gYi5jaCB9XG5cbiAgZnVuY3Rpb24gZXF1YWxDdXJzb3JQb3MoYSwgYikgeyByZXR1cm4gYS5zdGlja3kgPT0gYi5zdGlja3kgJiYgY21wKGEsIGIpID09IDAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlQb3MoeCkge3JldHVybiBQb3MoeC5saW5lLCB4LmNoKX1cbiAgZnVuY3Rpb24gbWF4UG9zKGEsIGIpIHsgcmV0dXJuIGNtcChhLCBiKSA8IDAgPyBiIDogYSB9XG4gIGZ1bmN0aW9uIG1pblBvcyhhLCBiKSB7IHJldHVybiBjbXAoYSwgYikgPCAwID8gYSA6IGIgfVxuXG4gIC8vIE1vc3Qgb2YgdGhlIGV4dGVybmFsIEFQSSBjbGlwcyBnaXZlbiBwb3NpdGlvbnMgdG8gbWFrZSBzdXJlIHRoZXlcbiAgLy8gYWN0dWFsbHkgZXhpc3Qgd2l0aGluIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gY2xpcExpbmUoZG9jLCBuKSB7cmV0dXJuIE1hdGgubWF4KGRvYy5maXJzdCwgTWF0aC5taW4obiwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSl9XG4gIGZ1bmN0aW9uIGNsaXBQb3MoZG9jLCBwb3MpIHtcbiAgICBpZiAocG9zLmxpbmUgPCBkb2MuZmlyc3QpIHsgcmV0dXJuIFBvcyhkb2MuZmlyc3QsIDApIH1cbiAgICB2YXIgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTtcbiAgICBpZiAocG9zLmxpbmUgPiBsYXN0KSB7IHJldHVybiBQb3MobGFzdCwgZ2V0TGluZShkb2MsIGxhc3QpLnRleHQubGVuZ3RoKSB9XG4gICAgcmV0dXJuIGNsaXBUb0xlbihwb3MsIGdldExpbmUoZG9jLCBwb3MubGluZSkudGV4dC5sZW5ndGgpXG4gIH1cbiAgZnVuY3Rpb24gY2xpcFRvTGVuKHBvcywgbGluZWxlbikge1xuICAgIHZhciBjaCA9IHBvcy5jaDtcbiAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4pIHsgcmV0dXJuIFBvcyhwb3MubGluZSwgbGluZWxlbikgfVxuICAgIGVsc2UgaWYgKGNoIDwgMCkgeyByZXR1cm4gUG9zKHBvcy5saW5lLCAwKSB9XG4gICAgZWxzZSB7IHJldHVybiBwb3MgfVxuICB9XG4gIGZ1bmN0aW9uIGNsaXBQb3NBcnJheShkb2MsIGFycmF5KSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsgb3V0W2ldID0gY2xpcFBvcyhkb2MsIGFycmF5W2ldKTsgfVxuICAgIHJldHVybiBvdXRcbiAgfVxuXG4gIHZhciBTYXZlZENvbnRleHQgPSBmdW5jdGlvbihzdGF0ZSwgbG9va0FoZWFkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubG9va0FoZWFkID0gbG9va0FoZWFkO1xuICB9O1xuXG4gIHZhciBDb250ZXh0ID0gZnVuY3Rpb24oZG9jLCBzdGF0ZSwgbGluZSwgbG9va0FoZWFkKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIHRoaXMubGluZSA9IGxpbmU7XG4gICAgdGhpcy5tYXhMb29rQWhlYWQgPSBsb29rQWhlYWQgfHwgMDtcbiAgICB0aGlzLmJhc2VUb2tlbnMgPSBudWxsO1xuICAgIHRoaXMuYmFzZVRva2VuUG9zID0gMTtcbiAgfTtcblxuICBDb250ZXh0LnByb3RvdHlwZS5sb29rQWhlYWQgPSBmdW5jdGlvbiAobikge1xuICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZSh0aGlzLmxpbmUgKyBuKTtcbiAgICBpZiAobGluZSAhPSBudWxsICYmIG4gPiB0aGlzLm1heExvb2tBaGVhZCkgeyB0aGlzLm1heExvb2tBaGVhZCA9IG47IH1cbiAgICByZXR1cm4gbGluZVxuICB9O1xuXG4gIENvbnRleHQucHJvdG90eXBlLmJhc2VUb2tlbiA9IGZ1bmN0aW9uIChuKSB7XG4gICAgaWYgKCF0aGlzLmJhc2VUb2tlbnMpIHsgcmV0dXJuIG51bGwgfVxuICAgIHdoaWxlICh0aGlzLmJhc2VUb2tlbnNbdGhpcy5iYXNlVG9rZW5Qb3NdIDw9IG4pXG4gICAgICB7IHRoaXMuYmFzZVRva2VuUG9zICs9IDI7IH1cbiAgICB2YXIgdHlwZSA9IHRoaXMuYmFzZVRva2Vuc1t0aGlzLmJhc2VUb2tlblBvcyArIDFdO1xuICAgIHJldHVybiB7dHlwZTogdHlwZSAmJiB0eXBlLnJlcGxhY2UoLyggfF4pb3ZlcmxheSAuKi8sIFwiXCIpLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5iYXNlVG9rZW5zW3RoaXMuYmFzZVRva2VuUG9zXSAtIG59XG4gIH07XG5cbiAgQ29udGV4dC5wcm90b3R5cGUubmV4dExpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5saW5lKys7XG4gICAgaWYgKHRoaXMubWF4TG9va0FoZWFkID4gMCkgeyB0aGlzLm1heExvb2tBaGVhZC0tOyB9XG4gIH07XG5cbiAgQ29udGV4dC5mcm9tU2F2ZWQgPSBmdW5jdGlvbiAoZG9jLCBzYXZlZCwgbGluZSkge1xuICAgIGlmIChzYXZlZCBpbnN0YW5jZW9mIFNhdmVkQ29udGV4dClcbiAgICAgIHsgcmV0dXJuIG5ldyBDb250ZXh0KGRvYywgY29weVN0YXRlKGRvYy5tb2RlLCBzYXZlZC5zdGF0ZSksIGxpbmUsIHNhdmVkLmxvb2tBaGVhZCkgfVxuICAgIGVsc2VcbiAgICAgIHsgcmV0dXJuIG5ldyBDb250ZXh0KGRvYywgY29weVN0YXRlKGRvYy5tb2RlLCBzYXZlZCksIGxpbmUpIH1cbiAgfTtcblxuICBDb250ZXh0LnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24gKGNvcHkpIHtcbiAgICB2YXIgc3RhdGUgPSBjb3B5ICE9PSBmYWxzZSA/IGNvcHlTdGF0ZSh0aGlzLmRvYy5tb2RlLCB0aGlzLnN0YXRlKSA6IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIHRoaXMubWF4TG9va0FoZWFkID4gMCA/IG5ldyBTYXZlZENvbnRleHQoc3RhdGUsIHRoaXMubWF4TG9va0FoZWFkKSA6IHN0YXRlXG4gIH07XG5cblxuICAvLyBDb21wdXRlIGEgc3R5bGUgYXJyYXkgKGFuIGFycmF5IHN0YXJ0aW5nIHdpdGggYSBtb2RlIGdlbmVyYXRpb25cbiAgLy8gLS0gZm9yIGludmFsaWRhdGlvbiAtLSBmb2xsb3dlZCBieSBwYWlycyBvZiBlbmQgcG9zaXRpb25zIGFuZFxuICAvLyBzdHlsZSBzdHJpbmdzKSwgd2hpY2ggaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIHRva2VucyBvbiB0aGVcbiAgLy8gbGluZS5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCwgZm9yY2VUb0VuZCkge1xuICAgIC8vIEEgc3R5bGVzIGFycmF5IGFsd2F5cyBzdGFydHMgd2l0aCBhIG51bWJlciBpZGVudGlmeWluZyB0aGVcbiAgICAvLyBtb2RlL292ZXJsYXlzIHRoYXQgaXQgaXMgYmFzZWQgb24gKGZvciBlYXN5IGludmFsaWRhdGlvbikuXG4gICAgdmFyIHN0ID0gW2NtLnN0YXRlLm1vZGVHZW5dLCBsaW5lQ2xhc3NlcyA9IHt9O1xuICAgIC8vIENvbXB1dGUgdGhlIGJhc2UgYXJyYXkgb2Ygc3R5bGVzXG4gICAgcnVuTW9kZShjbSwgbGluZS50ZXh0LCBjbS5kb2MubW9kZSwgY29udGV4dCwgZnVuY3Rpb24gKGVuZCwgc3R5bGUpIHsgcmV0dXJuIHN0LnB1c2goZW5kLCBzdHlsZSk7IH0sXG4gICAgICAgICAgICBsaW5lQ2xhc3NlcywgZm9yY2VUb0VuZCk7XG4gICAgdmFyIHN0YXRlID0gY29udGV4dC5zdGF0ZTtcblxuICAgIC8vIFJ1biBvdmVybGF5cywgYWRqdXN0IHN0eWxlIGFycmF5LlxuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBvICkge1xuICAgICAgY29udGV4dC5iYXNlVG9rZW5zID0gc3Q7XG4gICAgICB2YXIgb3ZlcmxheSA9IGNtLnN0YXRlLm92ZXJsYXlzW29dLCBpID0gMSwgYXQgPSAwO1xuICAgICAgY29udGV4dC5zdGF0ZSA9IHRydWU7XG4gICAgICBydW5Nb2RlKGNtLCBsaW5lLnRleHQsIG92ZXJsYXkubW9kZSwgY29udGV4dCwgZnVuY3Rpb24gKGVuZCwgc3R5bGUpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaTtcbiAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3MgYSB0b2tlbiBlbmQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIGFuZCB0aGF0IGkgcG9pbnRzIGF0IGl0XG4gICAgICAgIHdoaWxlIChhdCA8IGVuZCkge1xuICAgICAgICAgIHZhciBpX2VuZCA9IHN0W2ldO1xuICAgICAgICAgIGlmIChpX2VuZCA+IGVuZClcbiAgICAgICAgICAgIHsgc3Quc3BsaWNlKGksIDEsIGVuZCwgc3RbaSsxXSwgaV9lbmQpOyB9XG4gICAgICAgICAgaSArPSAyO1xuICAgICAgICAgIGF0ID0gTWF0aC5taW4oZW5kLCBpX2VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdHlsZSkgeyByZXR1cm4gfVxuICAgICAgICBpZiAob3ZlcmxheS5vcGFxdWUpIHtcbiAgICAgICAgICBzdC5zcGxpY2Uoc3RhcnQsIGkgLSBzdGFydCwgZW5kLCBcIm92ZXJsYXkgXCIgKyBzdHlsZSk7XG4gICAgICAgICAgaSA9IHN0YXJ0ICsgMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBpOyBzdGFydCArPSAyKSB7XG4gICAgICAgICAgICB2YXIgY3VyID0gc3Rbc3RhcnQrMV07XG4gICAgICAgICAgICBzdFtzdGFydCsxXSA9IChjdXIgPyBjdXIgKyBcIiBcIiA6IFwiXCIpICsgXCJvdmVybGF5IFwiICsgc3R5bGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCBsaW5lQ2xhc3Nlcyk7XG4gICAgICBjb250ZXh0LnN0YXRlID0gc3RhdGU7XG4gICAgICBjb250ZXh0LmJhc2VUb2tlbnMgPSBudWxsO1xuICAgICAgY29udGV4dC5iYXNlVG9rZW5Qb3MgPSAxO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBvID0gMDsgbyA8IGNtLnN0YXRlLm92ZXJsYXlzLmxlbmd0aDsgKytvKSBsb29wKCBvICk7XG5cbiAgICByZXR1cm4ge3N0eWxlczogc3QsIGNsYXNzZXM6IGxpbmVDbGFzc2VzLmJnQ2xhc3MgfHwgbGluZUNsYXNzZXMudGV4dENsYXNzID8gbGluZUNsYXNzZXMgOiBudWxsfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGluZVN0eWxlcyhjbSwgbGluZSwgdXBkYXRlRnJvbnRpZXIpIHtcbiAgICBpZiAoIWxpbmUuc3R5bGVzIHx8IGxpbmUuc3R5bGVzWzBdICE9IGNtLnN0YXRlLm1vZGVHZW4pIHtcbiAgICAgIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgbGluZU5vKGxpbmUpKTtcbiAgICAgIHZhciByZXNldFN0YXRlID0gbGluZS50ZXh0Lmxlbmd0aCA+IGNtLm9wdGlvbnMubWF4SGlnaGxpZ2h0TGVuZ3RoICYmIGNvcHlTdGF0ZShjbS5kb2MubW9kZSwgY29udGV4dC5zdGF0ZSk7XG4gICAgICB2YXIgcmVzdWx0ID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCk7XG4gICAgICBpZiAocmVzZXRTdGF0ZSkgeyBjb250ZXh0LnN0YXRlID0gcmVzZXRTdGF0ZTsgfVxuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29udGV4dC5zYXZlKCFyZXNldFN0YXRlKTtcbiAgICAgIGxpbmUuc3R5bGVzID0gcmVzdWx0LnN0eWxlcztcbiAgICAgIGlmIChyZXN1bHQuY2xhc3NlcykgeyBsaW5lLnN0eWxlQ2xhc3NlcyA9IHJlc3VsdC5jbGFzc2VzOyB9XG4gICAgICBlbHNlIGlmIChsaW5lLnN0eWxlQ2xhc3NlcykgeyBsaW5lLnN0eWxlQ2xhc3NlcyA9IG51bGw7IH1cbiAgICAgIGlmICh1cGRhdGVGcm9udGllciA9PT0gY20uZG9jLmhpZ2hsaWdodEZyb250aWVyKVxuICAgICAgICB7IGNtLmRvYy5tb2RlRnJvbnRpZXIgPSBNYXRoLm1heChjbS5kb2MubW9kZUZyb250aWVyLCArK2NtLmRvYy5oaWdobGlnaHRGcm9udGllcik7IH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmUuc3R5bGVzXG4gIH1cblxuICBmdW5jdGlvbiBnZXRDb250ZXh0QmVmb3JlKGNtLCBuLCBwcmVjaXNlKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKCFkb2MubW9kZS5zdGFydFN0YXRlKSB7IHJldHVybiBuZXcgQ29udGV4dChkb2MsIHRydWUsIG4pIH1cbiAgICB2YXIgc3RhcnQgPSBmaW5kU3RhcnRMaW5lKGNtLCBuLCBwcmVjaXNlKTtcbiAgICB2YXIgc2F2ZWQgPSBzdGFydCA+IGRvYy5maXJzdCAmJiBnZXRMaW5lKGRvYywgc3RhcnQgLSAxKS5zdGF0ZUFmdGVyO1xuICAgIHZhciBjb250ZXh0ID0gc2F2ZWQgPyBDb250ZXh0LmZyb21TYXZlZChkb2MsIHNhdmVkLCBzdGFydCkgOiBuZXcgQ29udGV4dChkb2MsIHN0YXJ0U3RhdGUoZG9jLm1vZGUpLCBzdGFydCk7XG5cbiAgICBkb2MuaXRlcihzdGFydCwgbiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHByb2Nlc3NMaW5lKGNtLCBsaW5lLnRleHQsIGNvbnRleHQpO1xuICAgICAgdmFyIHBvcyA9IGNvbnRleHQubGluZTtcbiAgICAgIGxpbmUuc3RhdGVBZnRlciA9IHBvcyA9PSBuIC0gMSB8fCBwb3MgJSA1ID09IDAgfHwgcG9zID49IGRpc3BsYXkudmlld0Zyb20gJiYgcG9zIDwgZGlzcGxheS52aWV3VG8gPyBjb250ZXh0LnNhdmUoKSA6IG51bGw7XG4gICAgICBjb250ZXh0Lm5leHRMaW5lKCk7XG4gICAgfSk7XG4gICAgaWYgKHByZWNpc2UpIHsgZG9jLm1vZGVGcm9udGllciA9IGNvbnRleHQubGluZTsgfVxuICAgIHJldHVybiBjb250ZXh0XG4gIH1cblxuICAvLyBMaWdodHdlaWdodCBmb3JtIG9mIGhpZ2hsaWdodCAtLSBwcm9jZWVkIG92ZXIgdGhpcyBsaW5lIGFuZFxuICAvLyB1cGRhdGUgc3RhdGUsIGJ1dCBkb24ndCBzYXZlIGEgc3R5bGUgYXJyYXkuIFVzZWQgZm9yIGxpbmVzIHRoYXRcbiAgLy8gYXJlbid0IGN1cnJlbnRseSB2aXNpYmxlLlxuICBmdW5jdGlvbiBwcm9jZXNzTGluZShjbSwgdGV4dCwgY29udGV4dCwgc3RhcnRBdCkge1xuICAgIHZhciBtb2RlID0gY20uZG9jLm1vZGU7XG4gICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGV4dCwgY20ub3B0aW9ucy50YWJTaXplLCBjb250ZXh0KTtcbiAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zID0gc3RhcnRBdCB8fCAwO1xuICAgIGlmICh0ZXh0ID09IFwiXCIpIHsgY2FsbEJsYW5rTGluZShtb2RlLCBjb250ZXh0LnN0YXRlKTsgfVxuICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7XG4gICAgICByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBjb250ZXh0LnN0YXRlKTtcbiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FsbEJsYW5rTGluZShtb2RlLCBzdGF0ZSkge1xuICAgIGlmIChtb2RlLmJsYW5rTGluZSkgeyByZXR1cm4gbW9kZS5ibGFua0xpbmUoc3RhdGUpIH1cbiAgICBpZiAoIW1vZGUuaW5uZXJNb2RlKSB7IHJldHVybiB9XG4gICAgdmFyIGlubmVyID0gaW5uZXJNb2RlKG1vZGUsIHN0YXRlKTtcbiAgICBpZiAoaW5uZXIubW9kZS5ibGFua0xpbmUpIHsgcmV0dXJuIGlubmVyLm1vZGUuYmxhbmtMaW5lKGlubmVyLnN0YXRlKSB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBzdGF0ZSwgaW5uZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgIGlmIChpbm5lcikgeyBpbm5lclswXSA9IGlubmVyTW9kZShtb2RlLCBzdGF0ZSkubW9kZTsgfVxuICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTtcbiAgICAgIGlmIChzdHJlYW0ucG9zID4gc3RyZWFtLnN0YXJ0KSB7IHJldHVybiBzdHlsZSB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIk1vZGUgXCIgKyBtb2RlLm5hbWUgKyBcIiBmYWlsZWQgdG8gYWR2YW5jZSBzdHJlYW0uXCIpXG4gIH1cblxuICB2YXIgVG9rZW4gPSBmdW5jdGlvbihzdHJlYW0sIHR5cGUsIHN0YXRlKSB7XG4gICAgdGhpcy5zdGFydCA9IHN0cmVhbS5zdGFydDsgdGhpcy5lbmQgPSBzdHJlYW0ucG9zO1xuICAgIHRoaXMuc3RyaW5nID0gc3RyZWFtLmN1cnJlbnQoKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlIHx8IG51bGw7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9O1xuXG4gIC8vIFV0aWxpdHkgZm9yIGdldFRva2VuQXQgYW5kIGdldExpbmVUb2tlbnNcbiAgZnVuY3Rpb24gdGFrZVRva2VuKGNtLCBwb3MsIHByZWNpc2UsIGFzQXJyYXkpIHtcbiAgICB2YXIgZG9jID0gY20uZG9jLCBtb2RlID0gZG9jLm1vZGUsIHN0eWxlO1xuICAgIHBvcyA9IGNsaXBQb3MoZG9jLCBwb3MpO1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKSwgY29udGV4dCA9IGdldENvbnRleHRCZWZvcmUoY20sIHBvcy5saW5lLCBwcmVjaXNlKTtcbiAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbShsaW5lLnRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSwgY29udGV4dCksIHRva2VucztcbiAgICBpZiAoYXNBcnJheSkgeyB0b2tlbnMgPSBbXTsgfVxuICAgIHdoaWxlICgoYXNBcnJheSB8fCBzdHJlYW0ucG9zIDwgcG9zLmNoKSAmJiAhc3RyZWFtLmVvbCgpKSB7XG4gICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zO1xuICAgICAgc3R5bGUgPSByZWFkVG9rZW4obW9kZSwgc3RyZWFtLCBjb250ZXh0LnN0YXRlKTtcbiAgICAgIGlmIChhc0FycmF5KSB7IHRva2Vucy5wdXNoKG5ldyBUb2tlbihzdHJlYW0sIHN0eWxlLCBjb3B5U3RhdGUoZG9jLm1vZGUsIGNvbnRleHQuc3RhdGUpKSk7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFzQXJyYXkgPyB0b2tlbnMgOiBuZXcgVG9rZW4oc3RyZWFtLCBzdHlsZSwgY29udGV4dC5zdGF0ZSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dHJhY3RMaW5lQ2xhc3Nlcyh0eXBlLCBvdXRwdXQpIHtcbiAgICBpZiAodHlwZSkgeyBmb3IgKDs7KSB7XG4gICAgICB2YXIgbGluZUNsYXNzID0gdHlwZS5tYXRjaCgvKD86XnxcXHMrKWxpbmUtKGJhY2tncm91bmQtKT8oXFxTKykvKTtcbiAgICAgIGlmICghbGluZUNsYXNzKSB7IGJyZWFrIH1cbiAgICAgIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGxpbmVDbGFzcy5pbmRleCkgKyB0eXBlLnNsaWNlKGxpbmVDbGFzcy5pbmRleCArIGxpbmVDbGFzc1swXS5sZW5ndGgpO1xuICAgICAgdmFyIHByb3AgPSBsaW5lQ2xhc3NbMV0gPyBcImJnQ2xhc3NcIiA6IFwidGV4dENsYXNzXCI7XG4gICAgICBpZiAob3V0cHV0W3Byb3BdID09IG51bGwpXG4gICAgICAgIHsgb3V0cHV0W3Byb3BdID0gbGluZUNsYXNzWzJdOyB9XG4gICAgICBlbHNlIGlmICghKG5ldyBSZWdFeHAoXCIoPzpefFxcXFxzKVwiICsgbGluZUNsYXNzWzJdICsgXCIoPzokfFxcXFxzKVwiKSkudGVzdChvdXRwdXRbcHJvcF0pKVxuICAgICAgICB7IG91dHB1dFtwcm9wXSArPSBcIiBcIiArIGxpbmVDbGFzc1syXTsgfVxuICAgIH0gfVxuICAgIHJldHVybiB0eXBlXG4gIH1cblxuICAvLyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIGNhbGxpbmcgZiBmb3IgZWFjaCB0b2tlbi5cbiAgZnVuY3Rpb24gcnVuTW9kZShjbSwgdGV4dCwgbW9kZSwgY29udGV4dCwgZiwgbGluZUNsYXNzZXMsIGZvcmNlVG9FbmQpIHtcbiAgICB2YXIgZmxhdHRlblNwYW5zID0gbW9kZS5mbGF0dGVuU3BhbnM7XG4gICAgaWYgKGZsYXR0ZW5TcGFucyA9PSBudWxsKSB7IGZsYXR0ZW5TcGFucyA9IGNtLm9wdGlvbnMuZmxhdHRlblNwYW5zOyB9XG4gICAgdmFyIGN1clN0YXJ0ID0gMCwgY3VyU3R5bGUgPSBudWxsO1xuICAgIHZhciBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHRleHQsIGNtLm9wdGlvbnMudGFiU2l6ZSwgY29udGV4dCksIHN0eWxlO1xuICAgIHZhciBpbm5lciA9IGNtLm9wdGlvbnMuYWRkTW9kZUNsYXNzICYmIFtudWxsXTtcbiAgICBpZiAodGV4dCA9PSBcIlwiKSB7IGV4dHJhY3RMaW5lQ2xhc3NlcyhjYWxsQmxhbmtMaW5lKG1vZGUsIGNvbnRleHQuc3RhdGUpLCBsaW5lQ2xhc3Nlcyk7IH1cbiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuICAgICAgaWYgKHN0cmVhbS5wb3MgPiBjbS5vcHRpb25zLm1heEhpZ2hsaWdodExlbmd0aCkge1xuICAgICAgICBmbGF0dGVuU3BhbnMgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZvcmNlVG9FbmQpIHsgcHJvY2Vzc0xpbmUoY20sIHRleHQsIGNvbnRleHQsIHN0cmVhbS5wb3MpOyB9XG4gICAgICAgIHN0cmVhbS5wb3MgPSB0ZXh0Lmxlbmd0aDtcbiAgICAgICAgc3R5bGUgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSBleHRyYWN0TGluZUNsYXNzZXMocmVhZFRva2VuKG1vZGUsIHN0cmVhbSwgY29udGV4dC5zdGF0ZSwgaW5uZXIpLCBsaW5lQ2xhc3Nlcyk7XG4gICAgICB9XG4gICAgICBpZiAoaW5uZXIpIHtcbiAgICAgICAgdmFyIG1OYW1lID0gaW5uZXJbMF0ubmFtZTtcbiAgICAgICAgaWYgKG1OYW1lKSB7IHN0eWxlID0gXCJtLVwiICsgKHN0eWxlID8gbU5hbWUgKyBcIiBcIiArIHN0eWxlIDogbU5hbWUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoIWZsYXR0ZW5TcGFucyB8fCBjdXJTdHlsZSAhPSBzdHlsZSkge1xuICAgICAgICB3aGlsZSAoY3VyU3RhcnQgPCBzdHJlYW0uc3RhcnQpIHtcbiAgICAgICAgICBjdXJTdGFydCA9IE1hdGgubWluKHN0cmVhbS5zdGFydCwgY3VyU3RhcnQgKyA1MDAwKTtcbiAgICAgICAgICBmKGN1clN0YXJ0LCBjdXJTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VyU3R5bGUgPSBzdHlsZTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7XG4gICAgfVxuICAgIHdoaWxlIChjdXJTdGFydCA8IHN0cmVhbS5wb3MpIHtcbiAgICAgIC8vIFdlYmtpdCBzZWVtcyB0byByZWZ1c2UgdG8gcmVuZGVyIHRleHQgbm9kZXMgbG9uZ2VyIHRoYW4gNTc0NDRcbiAgICAgIC8vIGNoYXJhY3RlcnMsIGFuZCByZXR1cm5zIGluYWNjdXJhdGUgbWVhc3VyZW1lbnRzIGluIG5vZGVzXG4gICAgICAvLyBzdGFydGluZyBhcm91bmQgNTAwMCBjaGFycy5cbiAgICAgIHZhciBwb3MgPSBNYXRoLm1pbihzdHJlYW0ucG9zLCBjdXJTdGFydCArIDUwMDApO1xuICAgICAgZihwb3MsIGN1clN0eWxlKTtcbiAgICAgIGN1clN0YXJ0ID0gcG9zO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmRzIHRoZSBsaW5lIHRvIHN0YXJ0IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0b1xuICAvLyBmaW5kIGEgbGluZSB3aXRoIGEgc3RhdGVBZnRlciwgc28gdGhhdCBpdCBjYW4gc3RhcnQgd2l0aCBhXG4gIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlXG4gIC8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFzdCBjb250ZXh0IHRvXG4gIC8vIHBhcnNlIGNvcnJlY3RseS5cbiAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShjbSwgbiwgcHJlY2lzZSkge1xuICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmUsIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgbGltID0gcHJlY2lzZSA/IC0xIDogbiAtIChjbS5kb2MubW9kZS5pbm5lck1vZGUgPyAxMDAwIDogMTAwKTtcbiAgICBmb3IgKHZhciBzZWFyY2ggPSBuOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7XG4gICAgICBpZiAoc2VhcmNoIDw9IGRvYy5maXJzdCkgeyByZXR1cm4gZG9jLmZpcnN0IH1cbiAgICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHNlYXJjaCAtIDEpLCBhZnRlciA9IGxpbmUuc3RhdGVBZnRlcjtcbiAgICAgIGlmIChhZnRlciAmJiAoIXByZWNpc2UgfHwgc2VhcmNoICsgKGFmdGVyIGluc3RhbmNlb2YgU2F2ZWRDb250ZXh0ID8gYWZ0ZXIubG9va0FoZWFkIDogMCkgPD0gZG9jLm1vZGVGcm9udGllcikpXG4gICAgICAgIHsgcmV0dXJuIHNlYXJjaCB9XG4gICAgICB2YXIgaW5kZW50ZWQgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIGNtLm9wdGlvbnMudGFiU2l6ZSk7XG4gICAgICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7XG4gICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxO1xuICAgICAgICBtaW5pbmRlbnQgPSBpbmRlbnRlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1pbmxpbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIHJldHJlYXRGcm9udGllcihkb2MsIG4pIHtcbiAgICBkb2MubW9kZUZyb250aWVyID0gTWF0aC5taW4oZG9jLm1vZGVGcm9udGllciwgbik7XG4gICAgaWYgKGRvYy5oaWdobGlnaHRGcm9udGllciA8IG4gLSAxMCkgeyByZXR1cm4gfVxuICAgIHZhciBzdGFydCA9IGRvYy5maXJzdDtcbiAgICBmb3IgKHZhciBsaW5lID0gbiAtIDE7IGxpbmUgPiBzdGFydDsgbGluZS0tKSB7XG4gICAgICB2YXIgc2F2ZWQgPSBnZXRMaW5lKGRvYywgbGluZSkuc3RhdGVBZnRlcjtcbiAgICAgIC8vIGNoYW5nZSBpcyBvbiAzXG4gICAgICAvLyBzdGF0ZSBvbiBsaW5lIDEgbG9va2VkIGFoZWFkIDIgLS0gc28gc2F3IDNcbiAgICAgIC8vIHRlc3QgMSArIDIgPCAzIHNob3VsZCBjb3ZlciB0aGlzXG4gICAgICBpZiAoc2F2ZWQgJiYgKCEoc2F2ZWQgaW5zdGFuY2VvZiBTYXZlZENvbnRleHQpIHx8IGxpbmUgKyBzYXZlZC5sb29rQWhlYWQgPCBuKSkge1xuICAgICAgICBzdGFydCA9IGxpbmUgKyAxO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBNYXRoLm1pbihkb2MuaGlnaGxpZ2h0RnJvbnRpZXIsIHN0YXJ0KTtcbiAgfVxuXG4gIC8vIE9wdGltaXplIHNvbWUgY29kZSB3aGVuIHRoZXNlIGZlYXR1cmVzIGFyZSBub3QgdXNlZC5cbiAgdmFyIHNhd1JlYWRPbmx5U3BhbnMgPSBmYWxzZSwgc2F3Q29sbGFwc2VkU3BhbnMgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBzZWVSZWFkT25seVNwYW5zKCkge1xuICAgIHNhd1JlYWRPbmx5U3BhbnMgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VlQ29sbGFwc2VkU3BhbnMoKSB7XG4gICAgc2F3Q29sbGFwc2VkU3BhbnMgPSB0cnVlO1xuICB9XG5cbiAgLy8gVEVYVE1BUktFUiBTUEFOU1xuXG4gIGZ1bmN0aW9uIE1hcmtlZFNwYW4obWFya2VyLCBmcm9tLCB0bykge1xuICAgIHRoaXMubWFya2VyID0gbWFya2VyO1xuICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bztcbiAgfVxuXG4gIC8vIFNlYXJjaCBhbiBhcnJheSBvZiBzcGFucyBmb3IgYSBzcGFuIG1hdGNoaW5nIHRoZSBnaXZlbiBtYXJrZXIuXG4gIGZ1bmN0aW9uIGdldE1hcmtlZFNwYW5Gb3Ioc3BhbnMsIG1hcmtlcikge1xuICAgIGlmIChzcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgaWYgKHNwYW4ubWFya2VyID09IG1hcmtlcikgeyByZXR1cm4gc3BhbiB9XG4gICAgfSB9XG4gIH1cbiAgLy8gUmVtb3ZlIGEgc3BhbiBmcm9tIGFuIGFycmF5LCByZXR1cm5pbmcgdW5kZWZpbmVkIGlmIG5vIHNwYW5zIGFyZVxuICAvLyBsZWZ0ICh3ZSBkb24ndCBzdG9yZSBhcnJheXMgZm9yIGxpbmVzIHdpdGhvdXQgc3BhbnMpLlxuICBmdW5jdGlvbiByZW1vdmVNYXJrZWRTcGFuKHNwYW5zLCBzcGFuKSB7XG4gICAgdmFyIHI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKHNwYW5zW2ldICE9IHNwYW4pIHsgKHIgfHwgKHIgPSBbXSkpLnB1c2goc3BhbnNbaV0pOyB9IH1cbiAgICByZXR1cm4gclxuICB9XG4gIC8vIEFkZCBhIHNwYW4gdG8gYSBsaW5lLlxuICBmdW5jdGlvbiBhZGRNYXJrZWRTcGFuKGxpbmUsIHNwYW4pIHtcbiAgICBsaW5lLm1hcmtlZFNwYW5zID0gbGluZS5tYXJrZWRTcGFucyA/IGxpbmUubWFya2VkU3BhbnMuY29uY2F0KFtzcGFuXSkgOiBbc3Bhbl07XG4gICAgc3Bhbi5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTtcbiAgfVxuXG4gIC8vIFVzZWQgZm9yIHRoZSBhbGdvcml0aG0gdGhhdCBhZGp1c3RzIG1hcmtlcnMgZm9yIGEgY2hhbmdlIGluIHRoZVxuICAvLyBkb2N1bWVudC4gVGhlc2UgZnVuY3Rpb25zIGN1dCBhbiBhcnJheSBvZiBzcGFucyBhdCBhIGdpdmVuXG4gIC8vIGNoYXJhY3RlciBwb3NpdGlvbiwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIHJlbWFpbmluZyBjaHVua3MgKG9yXG4gIC8vIHVuZGVmaW5lZCBpZiBub3RoaW5nIHJlbWFpbnMpLlxuICBmdW5jdGlvbiBtYXJrZWRTcGFuc0JlZm9yZShvbGQsIHN0YXJ0Q2gsIGlzSW5zZXJ0KSB7XG4gICAgdmFyIG53O1xuICAgIGlmIChvbGQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcGFuID0gb2xkW2ldLCBtYXJrZXIgPSBzcGFuLm1hcmtlcjtcbiAgICAgIHZhciBzdGFydHNCZWZvcmUgPSBzcGFuLmZyb20gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZUxlZnQgPyBzcGFuLmZyb20gPD0gc3RhcnRDaCA6IHNwYW4uZnJvbSA8IHN0YXJ0Q2gpO1xuICAgICAgaWYgKHN0YXJ0c0JlZm9yZSB8fCBzcGFuLmZyb20gPT0gc3RhcnRDaCAmJiBtYXJrZXIudHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgKCFpc0luc2VydCB8fCAhc3Bhbi5tYXJrZXIuaW5zZXJ0TGVmdCkpIHtcbiAgICAgICAgdmFyIGVuZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBzdGFydENoIDogc3Bhbi50byA+IHN0YXJ0Q2gpXG4gICAgICAgIDsobncgfHwgKG53ID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtlciwgc3Bhbi5mcm9tLCBlbmRzQWZ0ZXIgPyBudWxsIDogc3Bhbi50bykpO1xuICAgICAgfVxuICAgIH0gfVxuICAgIHJldHVybiBud1xuICB9XG4gIGZ1bmN0aW9uIG1hcmtlZFNwYW5zQWZ0ZXIob2xkLCBlbmRDaCwgaXNJbnNlcnQpIHtcbiAgICB2YXIgbnc7XG4gICAgaWYgKG9sZCkgeyBmb3IgKHZhciBpID0gMDsgaSA8IG9sZC5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHNwYW4gPSBvbGRbaV0sIG1hcmtlciA9IHNwYW4ubWFya2VyO1xuICAgICAgdmFyIGVuZHNBZnRlciA9IHNwYW4udG8gPT0gbnVsbCB8fCAobWFya2VyLmluY2x1c2l2ZVJpZ2h0ID8gc3Bhbi50byA+PSBlbmRDaCA6IHNwYW4udG8gPiBlbmRDaCk7XG4gICAgICBpZiAoZW5kc0FmdGVyIHx8IHNwYW4uZnJvbSA9PSBlbmRDaCAmJiBtYXJrZXIudHlwZSA9PSBcImJvb2ttYXJrXCIgJiYgKCFpc0luc2VydCB8fCBzcGFuLm1hcmtlci5pbnNlcnRMZWZ0KSkge1xuICAgICAgICB2YXIgc3RhcnRzQmVmb3JlID0gc3Bhbi5mcm9tID09IG51bGwgfHwgKG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gc3Bhbi5mcm9tIDw9IGVuZENoIDogc3Bhbi5mcm9tIDwgZW5kQ2gpXG4gICAgICAgIDsobncgfHwgKG53ID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKG1hcmtlciwgc3RhcnRzQmVmb3JlID8gbnVsbCA6IHNwYW4uZnJvbSAtIGVuZENoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW4udG8gPT0gbnVsbCA/IG51bGwgOiBzcGFuLnRvIC0gZW5kQ2gpKTtcbiAgICAgIH1cbiAgICB9IH1cbiAgICByZXR1cm4gbndcbiAgfVxuXG4gIC8vIEdpdmVuIGEgY2hhbmdlIG9iamVjdCwgY29tcHV0ZSB0aGUgbmV3IHNldCBvZiBtYXJrZXIgc3BhbnMgdGhhdFxuICAvLyBjb3ZlciB0aGUgbGluZSBpbiB3aGljaCB0aGUgY2hhbmdlIHRvb2sgcGxhY2UuIFJlbW92ZXMgc3BhbnNcbiAgLy8gZW50aXJlbHkgd2l0aGluIHRoZSBjaGFuZ2UsIHJlY29ubmVjdHMgc3BhbnMgYmVsb25naW5nIHRvIHRoZVxuICAvLyBzYW1lIG1hcmtlciB0aGF0IGFwcGVhciBvbiBib3RoIHNpZGVzIG9mIHRoZSBjaGFuZ2UsIGFuZCBjdXRzIG9mZlxuICAvLyBzcGFucyBwYXJ0aWFsbHkgd2l0aGluIHRoZSBjaGFuZ2UuIFJldHVybnMgYW4gYXJyYXkgb2Ygc3BhblxuICAvLyBhcnJheXMgd2l0aCBvbmUgZWxlbWVudCBmb3IgZWFjaCBsaW5lIGluIChhZnRlcikgdGhlIGNoYW5nZS5cbiAgZnVuY3Rpb24gc3RyZXRjaFNwYW5zT3ZlckNoYW5nZShkb2MsIGNoYW5nZSkge1xuICAgIGlmIChjaGFuZ2UuZnVsbCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIG9sZEZpcnN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLmZyb20ubGluZSkgJiYgZ2V0TGluZShkb2MsIGNoYW5nZS5mcm9tLmxpbmUpLm1hcmtlZFNwYW5zO1xuICAgIHZhciBvbGRMYXN0ID0gaXNMaW5lKGRvYywgY2hhbmdlLnRvLmxpbmUpICYmIGdldExpbmUoZG9jLCBjaGFuZ2UudG8ubGluZSkubWFya2VkU3BhbnM7XG4gICAgaWYgKCFvbGRGaXJzdCAmJiAhb2xkTGFzdCkgeyByZXR1cm4gbnVsbCB9XG5cbiAgICB2YXIgc3RhcnRDaCA9IGNoYW5nZS5mcm9tLmNoLCBlbmRDaCA9IGNoYW5nZS50by5jaCwgaXNJbnNlcnQgPSBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMDtcbiAgICAvLyBHZXQgdGhlIHNwYW5zIHRoYXQgJ3N0aWNrIG91dCcgb24gYm90aCBzaWRlc1xuICAgIHZhciBmaXJzdCA9IG1hcmtlZFNwYW5zQmVmb3JlKG9sZEZpcnN0LCBzdGFydENoLCBpc0luc2VydCk7XG4gICAgdmFyIGxhc3QgPSBtYXJrZWRTcGFuc0FmdGVyKG9sZExhc3QsIGVuZENoLCBpc0luc2VydCk7XG5cbiAgICAvLyBOZXh0LCBtZXJnZSB0aG9zZSB0d28gZW5kc1xuICAgIHZhciBzYW1lTGluZSA9IGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxLCBvZmZzZXQgPSBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChzYW1lTGluZSA/IHN0YXJ0Q2ggOiAwKTtcbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIC8vIEZpeCB1cCAudG8gcHJvcGVydGllcyBvZiBmaXJzdFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaXJzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgc3BhbiA9IGZpcnN0W2ldO1xuICAgICAgICBpZiAoc3Bhbi50byA9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gZ2V0TWFya2VkU3BhbkZvcihsYXN0LCBzcGFuLm1hcmtlcik7XG4gICAgICAgICAgaWYgKCFmb3VuZCkgeyBzcGFuLnRvID0gc3RhcnRDaDsgfVxuICAgICAgICAgIGVsc2UgaWYgKHNhbWVMaW5lKSB7IHNwYW4udG8gPSBmb3VuZC50byA9PSBudWxsID8gbnVsbCA6IGZvdW5kLnRvICsgb2Zmc2V0OyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIC8vIEZpeCB1cCAuZnJvbSBpbiBsYXN0IChvciBtb3ZlIHRoZW0gaW50byBmaXJzdCBpbiBjYXNlIG9mIHNhbWVMaW5lKVxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgbGFzdC5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgIHZhciBzcGFuJDEgPSBsYXN0W2kkMV07XG4gICAgICAgIGlmIChzcGFuJDEudG8gIT0gbnVsbCkgeyBzcGFuJDEudG8gKz0gb2Zmc2V0OyB9XG4gICAgICAgIGlmIChzcGFuJDEuZnJvbSA9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGZvdW5kJDEgPSBnZXRNYXJrZWRTcGFuRm9yKGZpcnN0LCBzcGFuJDEubWFya2VyKTtcbiAgICAgICAgICBpZiAoIWZvdW5kJDEpIHtcbiAgICAgICAgICAgIHNwYW4kMS5mcm9tID0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKHNhbWVMaW5lKSB7IChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3BhbiQxKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGFuJDEuZnJvbSArPSBvZmZzZXQ7XG4gICAgICAgICAgaWYgKHNhbWVMaW5lKSB7IChmaXJzdCB8fCAoZmlyc3QgPSBbXSkpLnB1c2goc3BhbiQxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB3ZSBkaWRuJ3QgY3JlYXRlIGFueSB6ZXJvLWxlbmd0aCBzcGFuc1xuICAgIGlmIChmaXJzdCkgeyBmaXJzdCA9IGNsZWFyRW1wdHlTcGFucyhmaXJzdCk7IH1cbiAgICBpZiAobGFzdCAmJiBsYXN0ICE9IGZpcnN0KSB7IGxhc3QgPSBjbGVhckVtcHR5U3BhbnMobGFzdCk7IH1cblxuICAgIHZhciBuZXdNYXJrZXJzID0gW2ZpcnN0XTtcbiAgICBpZiAoIXNhbWVMaW5lKSB7XG4gICAgICAvLyBGaWxsIGdhcCB3aXRoIHdob2xlLWxpbmUtc3BhbnNcbiAgICAgIHZhciBnYXAgPSBjaGFuZ2UudGV4dC5sZW5ndGggLSAyLCBnYXBNYXJrZXJzO1xuICAgICAgaWYgKGdhcCA+IDAgJiYgZmlyc3QpXG4gICAgICAgIHsgZm9yICh2YXIgaSQyID0gMDsgaSQyIDwgZmlyc3QubGVuZ3RoOyArK2kkMilcbiAgICAgICAgICB7IGlmIChmaXJzdFtpJDJdLnRvID09IG51bGwpXG4gICAgICAgICAgICB7IChnYXBNYXJrZXJzIHx8IChnYXBNYXJrZXJzID0gW10pKS5wdXNoKG5ldyBNYXJrZWRTcGFuKGZpcnN0W2kkMl0ubWFya2VyLCBudWxsLCBudWxsKSk7IH0gfSB9XG4gICAgICBmb3IgKHZhciBpJDMgPSAwOyBpJDMgPCBnYXA7ICsraSQzKVxuICAgICAgICB7IG5ld01hcmtlcnMucHVzaChnYXBNYXJrZXJzKTsgfVxuICAgICAgbmV3TWFya2Vycy5wdXNoKGxhc3QpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3TWFya2Vyc1xuICB9XG5cbiAgLy8gUmVtb3ZlIHNwYW5zIHRoYXQgYXJlIGVtcHR5IGFuZCBkb24ndCBoYXZlIGEgY2xlYXJXaGVuRW1wdHlcbiAgLy8gb3B0aW9uIG9mIGZhbHNlLlxuICBmdW5jdGlvbiBjbGVhckVtcHR5U3BhbnMoc3BhbnMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgaWYgKHNwYW4uZnJvbSAhPSBudWxsICYmIHNwYW4uZnJvbSA9PSBzcGFuLnRvICYmIHNwYW4ubWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSlcbiAgICAgICAgeyBzcGFucy5zcGxpY2UoaS0tLCAxKTsgfVxuICAgIH1cbiAgICBpZiAoIXNwYW5zLmxlbmd0aCkgeyByZXR1cm4gbnVsbCB9XG4gICAgcmV0dXJuIHNwYW5zXG4gIH1cblxuICAvLyBVc2VkIHRvICdjbGlwJyBvdXQgcmVhZE9ubHkgcmFuZ2VzIHdoZW4gbWFraW5nIGEgY2hhbmdlLlxuICBmdW5jdGlvbiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGZyb20sIHRvKSB7XG4gICAgdmFyIG1hcmtlcnMgPSBudWxsO1xuICAgIGRvYy5pdGVyKGZyb20ubGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZS5tYXJrZWRTcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIG1hcmsgPSBsaW5lLm1hcmtlZFNwYW5zW2ldLm1hcmtlcjtcbiAgICAgICAgaWYgKG1hcmsucmVhZE9ubHkgJiYgKCFtYXJrZXJzIHx8IGluZGV4T2YobWFya2VycywgbWFyaykgPT0gLTEpKVxuICAgICAgICAgIHsgKG1hcmtlcnMgfHwgKG1hcmtlcnMgPSBbXSkpLnB1c2gobWFyayk7IH1cbiAgICAgIH0gfVxuICAgIH0pO1xuICAgIGlmICghbWFya2VycykgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIHBhcnRzID0gW3tmcm9tOiBmcm9tLCB0bzogdG99XTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBtayA9IG1hcmtlcnNbaV0sIG0gPSBtay5maW5kKDApO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJ0cy5sZW5ndGg7ICsraikge1xuICAgICAgICB2YXIgcCA9IHBhcnRzW2pdO1xuICAgICAgICBpZiAoY21wKHAudG8sIG0uZnJvbSkgPCAwIHx8IGNtcChwLmZyb20sIG0udG8pID4gMCkgeyBjb250aW51ZSB9XG4gICAgICAgIHZhciBuZXdQYXJ0cyA9IFtqLCAxXSwgZGZyb20gPSBjbXAocC5mcm9tLCBtLmZyb20pLCBkdG8gPSBjbXAocC50bywgbS50byk7XG4gICAgICAgIGlmIChkZnJvbSA8IDAgfHwgIW1rLmluY2x1c2l2ZUxlZnQgJiYgIWRmcm9tKVxuICAgICAgICAgIHsgbmV3UGFydHMucHVzaCh7ZnJvbTogcC5mcm9tLCB0bzogbS5mcm9tfSk7IH1cbiAgICAgICAgaWYgKGR0byA+IDAgfHwgIW1rLmluY2x1c2l2ZVJpZ2h0ICYmICFkdG8pXG4gICAgICAgICAgeyBuZXdQYXJ0cy5wdXNoKHtmcm9tOiBtLnRvLCB0bzogcC50b30pOyB9XG4gICAgICAgIHBhcnRzLnNwbGljZS5hcHBseShwYXJ0cywgbmV3UGFydHMpO1xuICAgICAgICBqICs9IG5ld1BhcnRzLmxlbmd0aCAtIDM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXJ0c1xuICB9XG5cbiAgLy8gQ29ubmVjdCBvciBkaXNjb25uZWN0IHNwYW5zIGZyb20gYSBsaW5lLlxuICBmdW5jdGlvbiBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKSB7XG4gICAgdmFyIHNwYW5zID0gbGluZS5tYXJrZWRTcGFucztcbiAgICBpZiAoIXNwYW5zKSB7IHJldHVybiB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSlcbiAgICAgIHsgc3BhbnNbaV0ubWFya2VyLmRldGFjaExpbmUobGluZSk7IH1cbiAgICBsaW5lLm1hcmtlZFNwYW5zID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBzcGFucykge1xuICAgIGlmICghc3BhbnMpIHsgcmV0dXJuIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNwYW5zLmxlbmd0aDsgKytpKVxuICAgICAgeyBzcGFuc1tpXS5tYXJrZXIuYXR0YWNoTGluZShsaW5lKTsgfVxuICAgIGxpbmUubWFya2VkU3BhbnMgPSBzcGFucztcbiAgfVxuXG4gIC8vIEhlbHBlcnMgdXNlZCB3aGVuIGNvbXB1dGluZyB3aGljaCBvdmVybGFwcGluZyBjb2xsYXBzZWQgc3BhblxuICAvLyBjb3VudHMgYXMgdGhlIGxhcmdlciBvbmUuXG4gIGZ1bmN0aW9uIGV4dHJhTGVmdChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gLTEgOiAwIH1cbiAgZnVuY3Rpb24gZXh0cmFSaWdodChtYXJrZXIpIHsgcmV0dXJuIG1hcmtlci5pbmNsdXNpdmVSaWdodCA/IDEgOiAwIH1cblxuICAvLyBSZXR1cm5zIGEgbnVtYmVyIGluZGljYXRpbmcgd2hpY2ggb2YgdHdvIG92ZXJsYXBwaW5nIGNvbGxhcHNlZFxuICAvLyBzcGFucyBpcyBsYXJnZXIgKGFuZCB0aHVzIGluY2x1ZGVzIHRoZSBvdGhlcikuIEZhbGxzIGJhY2sgdG9cbiAgLy8gY29tcGFyaW5nIGlkcyB3aGVuIHRoZSBzcGFucyBjb3ZlciBleGFjdGx5IHRoZSBzYW1lIHJhbmdlLlxuICBmdW5jdGlvbiBjb21wYXJlQ29sbGFwc2VkTWFya2VycyhhLCBiKSB7XG4gICAgdmFyIGxlbkRpZmYgPSBhLmxpbmVzLmxlbmd0aCAtIGIubGluZXMubGVuZ3RoO1xuICAgIGlmIChsZW5EaWZmICE9IDApIHsgcmV0dXJuIGxlbkRpZmYgfVxuICAgIHZhciBhUG9zID0gYS5maW5kKCksIGJQb3MgPSBiLmZpbmQoKTtcbiAgICB2YXIgZnJvbUNtcCA9IGNtcChhUG9zLmZyb20sIGJQb3MuZnJvbSkgfHwgZXh0cmFMZWZ0KGEpIC0gZXh0cmFMZWZ0KGIpO1xuICAgIGlmIChmcm9tQ21wKSB7IHJldHVybiAtZnJvbUNtcCB9XG4gICAgdmFyIHRvQ21wID0gY21wKGFQb3MudG8sIGJQb3MudG8pIHx8IGV4dHJhUmlnaHQoYSkgLSBleHRyYVJpZ2h0KGIpO1xuICAgIGlmICh0b0NtcCkgeyByZXR1cm4gdG9DbXAgfVxuICAgIHJldHVybiBiLmlkIC0gYS5pZFxuICB9XG5cbiAgLy8gRmluZCBvdXQgd2hldGhlciBhIGxpbmUgZW5kcyBvciBzdGFydHMgaW4gYSBjb2xsYXBzZWQgc3Bhbi4gSWZcbiAgLy8gc28sIHJldHVybiB0aGUgbWFya2VyIGZvciB0aGF0IHNwYW4uXG4gIGZ1bmN0aW9uIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgc3RhcnQpIHtcbiAgICB2YXIgc3BzID0gc2F3Q29sbGFwc2VkU3BhbnMgJiYgbGluZS5tYXJrZWRTcGFucywgZm91bmQ7XG4gICAgaWYgKHNwcykgeyBmb3IgKHZhciBzcCA9ICh2b2lkIDApLCBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSkge1xuICAgICAgc3AgPSBzcHNbaV07XG4gICAgICBpZiAoc3AubWFya2VyLmNvbGxhcHNlZCAmJiAoc3RhcnQgPyBzcC5mcm9tIDogc3AudG8pID09IG51bGwgJiZcbiAgICAgICAgICAoIWZvdW5kIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGZvdW5kLCBzcC5tYXJrZXIpIDwgMCkpXG4gICAgICAgIHsgZm91bmQgPSBzcC5tYXJrZXI7IH1cbiAgICB9IH1cbiAgICByZXR1cm4gZm91bmRcbiAgfVxuICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXRTdGFydChsaW5lKSB7IHJldHVybiBjb2xsYXBzZWRTcGFuQXRTaWRlKGxpbmUsIHRydWUpIH1cbiAgZnVuY3Rpb24gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpIHsgcmV0dXJuIGNvbGxhcHNlZFNwYW5BdFNpZGUobGluZSwgZmFsc2UpIH1cblxuICBmdW5jdGlvbiBjb2xsYXBzZWRTcGFuQXJvdW5kKGxpbmUsIGNoKSB7XG4gICAgdmFyIHNwcyA9IHNhd0NvbGxhcHNlZFNwYW5zICYmIGxpbmUubWFya2VkU3BhbnMsIGZvdW5kO1xuICAgIGlmIChzcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcCA9IHNwc1tpXTtcbiAgICAgIGlmIChzcC5tYXJrZXIuY29sbGFwc2VkICYmIChzcC5mcm9tID09IG51bGwgfHwgc3AuZnJvbSA8IGNoKSAmJiAoc3AudG8gPT0gbnVsbCB8fCBzcC50byA+IGNoKSAmJlxuICAgICAgICAgICghZm91bmQgfHwgY29tcGFyZUNvbGxhcHNlZE1hcmtlcnMoZm91bmQsIHNwLm1hcmtlcikgPCAwKSkgeyBmb3VuZCA9IHNwLm1hcmtlcjsgfVxuICAgIH0gfVxuICAgIHJldHVybiBmb3VuZFxuICB9XG5cbiAgLy8gVGVzdCB3aGV0aGVyIHRoZXJlIGV4aXN0cyBhIGNvbGxhcHNlZCBzcGFuIHRoYXQgcGFydGlhbGx5XG4gIC8vIG92ZXJsYXBzIChjb3ZlcnMgdGhlIHN0YXJ0IG9yIGVuZCwgYnV0IG5vdCBib3RoKSBvZiBhIG5ldyBzcGFuLlxuICAvLyBTdWNoIG92ZXJsYXAgaXMgbm90IGFsbG93ZWQuXG4gIGZ1bmN0aW9uIGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBsaW5lTm8sIGZyb20sIHRvLCBtYXJrZXIpIHtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBsaW5lTm8pO1xuICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zO1xuICAgIGlmIChzcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcCA9IHNwc1tpXTtcbiAgICAgIGlmICghc3AubWFya2VyLmNvbGxhcHNlZCkgeyBjb250aW51ZSB9XG4gICAgICB2YXIgZm91bmQgPSBzcC5tYXJrZXIuZmluZCgwKTtcbiAgICAgIHZhciBmcm9tQ21wID0gY21wKGZvdW5kLmZyb20sIGZyb20pIHx8IGV4dHJhTGVmdChzcC5tYXJrZXIpIC0gZXh0cmFMZWZ0KG1hcmtlcik7XG4gICAgICB2YXIgdG9DbXAgPSBjbXAoZm91bmQudG8sIHRvKSB8fCBleHRyYVJpZ2h0KHNwLm1hcmtlcikgLSBleHRyYVJpZ2h0KG1hcmtlcik7XG4gICAgICBpZiAoZnJvbUNtcCA+PSAwICYmIHRvQ21wIDw9IDAgfHwgZnJvbUNtcCA8PSAwICYmIHRvQ21wID49IDApIHsgY29udGludWUgfVxuICAgICAgaWYgKGZyb21DbXAgPD0gMCAmJiAoc3AubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIG1hcmtlci5pbmNsdXNpdmVMZWZ0ID8gY21wKGZvdW5kLnRvLCBmcm9tKSA+PSAwIDogY21wKGZvdW5kLnRvLCBmcm9tKSA+IDApIHx8XG4gICAgICAgICAgZnJvbUNtcCA+PSAwICYmIChzcC5tYXJrZXIuaW5jbHVzaXZlUmlnaHQgJiYgbWFya2VyLmluY2x1c2l2ZUxlZnQgPyBjbXAoZm91bmQuZnJvbSwgdG8pIDw9IDAgOiBjbXAoZm91bmQuZnJvbSwgdG8pIDwgMCkpXG4gICAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIH0gfVxuICB9XG5cbiAgLy8gQSB2aXN1YWwgbGluZSBpcyBhIGxpbmUgYXMgZHJhd24gb24gdGhlIHNjcmVlbi4gRm9sZGluZywgZm9yXG4gIC8vIGV4YW1wbGUsIGNhbiBjYXVzZSBtdWx0aXBsZSBsb2dpY2FsIGxpbmVzIHRvIGFwcGVhciBvbiB0aGUgc2FtZVxuICAvLyB2aXN1YWwgbGluZS4gVGhpcyBmaW5kcyB0aGUgc3RhcnQgb2YgdGhlIHZpc3VhbCBsaW5lIHRoYXQgdGhlXG4gIC8vIGdpdmVuIGxpbmUgaXMgcGFydCBvZiAodXN1YWxseSB0aGF0IGlzIHRoZSBsaW5lIGl0c2VsZikuXG4gIGZ1bmN0aW9uIHZpc3VhbExpbmUobGluZSkge1xuICAgIHZhciBtZXJnZWQ7XG4gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdFN0YXJ0KGxpbmUpKVxuICAgICAgeyBsaW5lID0gbWVyZ2VkLmZpbmQoLTEsIHRydWUpLmxpbmU7IH1cbiAgICByZXR1cm4gbGluZVxuICB9XG5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZUVuZChsaW5lKSB7XG4gICAgdmFyIG1lcmdlZDtcbiAgICB3aGlsZSAobWVyZ2VkID0gY29sbGFwc2VkU3BhbkF0RW5kKGxpbmUpKVxuICAgICAgeyBsaW5lID0gbWVyZ2VkLmZpbmQoMSwgdHJ1ZSkubGluZTsgfVxuICAgIHJldHVybiBsaW5lXG4gIH1cblxuICAvLyBSZXR1cm5zIGFuIGFycmF5IG9mIGxvZ2ljYWwgbGluZXMgdGhhdCBjb250aW51ZSB0aGUgdmlzdWFsIGxpbmVcbiAgLy8gc3RhcnRlZCBieSB0aGUgYXJndW1lbnQsIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBsaW5lcy5cbiAgZnVuY3Rpb24gdmlzdWFsTGluZUNvbnRpbnVlZChsaW5lKSB7XG4gICAgdmFyIG1lcmdlZCwgbGluZXM7XG4gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChsaW5lKSkge1xuICAgICAgbGluZSA9IG1lcmdlZC5maW5kKDEsIHRydWUpLmxpbmVcbiAgICAgIDsobGluZXMgfHwgKGxpbmVzID0gW10pKS5wdXNoKGxpbmUpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXNcbiAgfVxuXG4gIC8vIEdldCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSB2aXN1YWwgbGluZSB0aGF0IHRoZVxuICAvLyBnaXZlbiBsaW5lIG51bWJlciBpcyBwYXJ0IG9mLlxuICBmdW5jdGlvbiB2aXN1YWxMaW5lTm8oZG9jLCBsaW5lTikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIGxpbmVOKSwgdmlzID0gdmlzdWFsTGluZShsaW5lKTtcbiAgICBpZiAobGluZSA9PSB2aXMpIHsgcmV0dXJuIGxpbmVOIH1cbiAgICByZXR1cm4gbGluZU5vKHZpcylcbiAgfVxuXG4gIC8vIEdldCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHZpc3VhbCBsaW5lIGFmdGVyXG4gIC8vIHRoZSBnaXZlbiBsaW5lLlxuICBmdW5jdGlvbiB2aXN1YWxMaW5lRW5kTm8oZG9jLCBsaW5lTikge1xuICAgIGlmIChsaW5lTiA+IGRvYy5sYXN0TGluZSgpKSB7IHJldHVybiBsaW5lTiB9XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGRvYywgbGluZU4pLCBtZXJnZWQ7XG4gICAgaWYgKCFsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeyByZXR1cm4gbGluZU4gfVxuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRFbmQobGluZSkpXG4gICAgICB7IGxpbmUgPSBtZXJnZWQuZmluZCgxLCB0cnVlKS5saW5lOyB9XG4gICAgcmV0dXJuIGxpbmVObyhsaW5lKSArIDFcbiAgfVxuXG4gIC8vIENvbXB1dGUgd2hldGhlciBhIGxpbmUgaXMgaGlkZGVuLiBMaW5lcyBjb3VudCBhcyBoaWRkZW4gd2hlbiB0aGV5XG4gIC8vIGFyZSBwYXJ0IG9mIGEgdmlzdWFsIGxpbmUgdGhhdCBzdGFydHMgd2l0aCBhbm90aGVyIGxpbmUsIG9yIHdoZW5cbiAgLy8gdGhleSBhcmUgZW50aXJlbHkgY292ZXJlZCBieSBjb2xsYXBzZWQsIG5vbi13aWRnZXQgc3Bhbi5cbiAgZnVuY3Rpb24gbGluZUlzSGlkZGVuKGRvYywgbGluZSkge1xuICAgIHZhciBzcHMgPSBzYXdDb2xsYXBzZWRTcGFucyAmJiBsaW5lLm1hcmtlZFNwYW5zO1xuICAgIGlmIChzcHMpIHsgZm9yICh2YXIgc3AgPSAodm9pZCAwKSwgaSA9IDA7IGkgPCBzcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHNwID0gc3BzW2ldO1xuICAgICAgaWYgKCFzcC5tYXJrZXIuY29sbGFwc2VkKSB7IGNvbnRpbnVlIH1cbiAgICAgIGlmIChzcC5mcm9tID09IG51bGwpIHsgcmV0dXJuIHRydWUgfVxuICAgICAgaWYgKHNwLm1hcmtlci53aWRnZXROb2RlKSB7IGNvbnRpbnVlIH1cbiAgICAgIGlmIChzcC5mcm9tID09IDAgJiYgc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgJiYgbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpXG4gICAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIH0gfVxuICB9XG4gIGZ1bmN0aW9uIGxpbmVJc0hpZGRlbklubmVyKGRvYywgbGluZSwgc3Bhbikge1xuICAgIGlmIChzcGFuLnRvID09IG51bGwpIHtcbiAgICAgIHZhciBlbmQgPSBzcGFuLm1hcmtlci5maW5kKDEsIHRydWUpO1xuICAgICAgcmV0dXJuIGxpbmVJc0hpZGRlbklubmVyKGRvYywgZW5kLmxpbmUsIGdldE1hcmtlZFNwYW5Gb3IoZW5kLmxpbmUubWFya2VkU3BhbnMsIHNwYW4ubWFya2VyKSlcbiAgICB9XG4gICAgaWYgKHNwYW4ubWFya2VyLmluY2x1c2l2ZVJpZ2h0ICYmIHNwYW4udG8gPT0gbGluZS50ZXh0Lmxlbmd0aClcbiAgICAgIHsgcmV0dXJuIHRydWUgfVxuICAgIGZvciAodmFyIHNwID0gKHZvaWQgMCksIGkgPSAwOyBpIDwgbGluZS5tYXJrZWRTcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgc3AgPSBsaW5lLm1hcmtlZFNwYW5zW2ldO1xuICAgICAgaWYgKHNwLm1hcmtlci5jb2xsYXBzZWQgJiYgIXNwLm1hcmtlci53aWRnZXROb2RlICYmIHNwLmZyb20gPT0gc3Bhbi50byAmJlxuICAgICAgICAgIChzcC50byA9PSBudWxsIHx8IHNwLnRvICE9IHNwYW4uZnJvbSkgJiZcbiAgICAgICAgICAoc3AubWFya2VyLmluY2x1c2l2ZUxlZnQgfHwgc3Bhbi5tYXJrZXIuaW5jbHVzaXZlUmlnaHQpICYmXG4gICAgICAgICAgbGluZUlzSGlkZGVuSW5uZXIoZG9jLCBsaW5lLCBzcCkpIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgdGhlIGhlaWdodCBhYm92ZSB0aGUgZ2l2ZW4gbGluZS5cbiAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGxpbmVPYmopIHtcbiAgICBsaW5lT2JqID0gdmlzdWFsTGluZShsaW5lT2JqKTtcblxuICAgIHZhciBoID0gMCwgY2h1bmsgPSBsaW5lT2JqLnBhcmVudDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldO1xuICAgICAgaWYgKGxpbmUgPT0gbGluZU9iaikgeyBicmVhayB9XG4gICAgICBlbHNlIHsgaCArPSBsaW5lLmhlaWdodDsgfVxuICAgIH1cbiAgICBmb3IgKHZhciBwID0gY2h1bmsucGFyZW50OyBwOyBjaHVuayA9IHAsIHAgPSBjaHVuay5wYXJlbnQpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHAuY2hpbGRyZW4ubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICB2YXIgY3VyID0gcC5jaGlsZHJlbltpJDFdO1xuICAgICAgICBpZiAoY3VyID09IGNodW5rKSB7IGJyZWFrIH1cbiAgICAgICAgZWxzZSB7IGggKz0gY3VyLmhlaWdodDsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaFxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIGxlbmd0aCBvZiBhIGxpbmUsIHRha2luZyBpbnRvIGFjY291bnRcbiAgLy8gY29sbGFwc2VkIHJhbmdlcyAoc2VlIG1hcmtUZXh0KSB0aGF0IG1pZ2h0IGhpZGUgcGFydHMsIGFuZCBqb2luXG4gIC8vIG90aGVyIGxpbmVzIG9udG8gaXQuXG4gIGZ1bmN0aW9uIGxpbmVMZW5ndGgobGluZSkge1xuICAgIGlmIChsaW5lLmhlaWdodCA9PSAwKSB7IHJldHVybiAwIH1cbiAgICB2YXIgbGVuID0gbGluZS50ZXh0Lmxlbmd0aCwgbWVyZ2VkLCBjdXIgPSBsaW5lO1xuICAgIHdoaWxlIChtZXJnZWQgPSBjb2xsYXBzZWRTcGFuQXRTdGFydChjdXIpKSB7XG4gICAgICB2YXIgZm91bmQgPSBtZXJnZWQuZmluZCgwLCB0cnVlKTtcbiAgICAgIGN1ciA9IGZvdW5kLmZyb20ubGluZTtcbiAgICAgIGxlbiArPSBmb3VuZC5mcm9tLmNoIC0gZm91bmQudG8uY2g7XG4gICAgfVxuICAgIGN1ciA9IGxpbmU7XG4gICAgd2hpbGUgKG1lcmdlZCA9IGNvbGxhcHNlZFNwYW5BdEVuZChjdXIpKSB7XG4gICAgICB2YXIgZm91bmQkMSA9IG1lcmdlZC5maW5kKDAsIHRydWUpO1xuICAgICAgbGVuIC09IGN1ci50ZXh0Lmxlbmd0aCAtIGZvdW5kJDEuZnJvbS5jaDtcbiAgICAgIGN1ciA9IGZvdW5kJDEudG8ubGluZTtcbiAgICAgIGxlbiArPSBjdXIudGV4dC5sZW5ndGggLSBmb3VuZCQxLnRvLmNoO1xuICAgIH1cbiAgICByZXR1cm4gbGVuXG4gIH1cblxuICAvLyBGaW5kIHRoZSBsb25nZXN0IGxpbmUgaW4gdGhlIGRvY3VtZW50LlxuICBmdW5jdGlvbiBmaW5kTWF4TGluZShjbSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuICAgIGQubWF4TGluZSA9IGdldExpbmUoZG9jLCBkb2MuZmlyc3QpO1xuICAgIGQubWF4TGluZUxlbmd0aCA9IGxpbmVMZW5ndGgoZC5tYXhMaW5lKTtcbiAgICBkLm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICBkb2MuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSk7XG4gICAgICBpZiAobGVuID4gZC5tYXhMaW5lTGVuZ3RoKSB7XG4gICAgICAgIGQubWF4TGluZUxlbmd0aCA9IGxlbjtcbiAgICAgICAgZC5tYXhMaW5lID0gbGluZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIExJTkUgREFUQSBTVFJVQ1RVUkVcblxuICAvLyBMaW5lIG9iamVjdHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZ1xuICAvLyBoaWdobGlnaHRpbmcgaW5mbyAodGhlIHN0eWxlcyBhcnJheSkuXG4gIHZhciBMaW5lID0gZnVuY3Rpb24odGV4dCwgbWFya2VkU3BhbnMsIGVzdGltYXRlSGVpZ2h0KSB7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICBhdHRhY2hNYXJrZWRTcGFucyh0aGlzLCBtYXJrZWRTcGFucyk7XG4gICAgdGhpcy5oZWlnaHQgPSBlc3RpbWF0ZUhlaWdodCA/IGVzdGltYXRlSGVpZ2h0KHRoaXMpIDogMTtcbiAgfTtcblxuICBMaW5lLnByb3RvdHlwZS5saW5lTm8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBsaW5lTm8odGhpcykgfTtcbiAgZXZlbnRNaXhpbihMaW5lKTtcblxuICAvLyBDaGFuZ2UgdGhlIGNvbnRlbnQgKHRleHQsIG1hcmtlcnMpIG9mIGEgbGluZS4gQXV0b21hdGljYWxseVxuICAvLyBpbnZhbGlkYXRlcyBjYWNoZWQgaW5mb3JtYXRpb24gYW5kIHRyaWVzIHRvIHJlLWVzdGltYXRlIHRoZVxuICAvLyBsaW5lJ3MgaGVpZ2h0LlxuICBmdW5jdGlvbiB1cGRhdGVMaW5lKGxpbmUsIHRleHQsIG1hcmtlZFNwYW5zLCBlc3RpbWF0ZUhlaWdodCkge1xuICAgIGxpbmUudGV4dCA9IHRleHQ7XG4gICAgaWYgKGxpbmUuc3RhdGVBZnRlcikgeyBsaW5lLnN0YXRlQWZ0ZXIgPSBudWxsOyB9XG4gICAgaWYgKGxpbmUuc3R5bGVzKSB7IGxpbmUuc3R5bGVzID0gbnVsbDsgfVxuICAgIGlmIChsaW5lLm9yZGVyICE9IG51bGwpIHsgbGluZS5vcmRlciA9IG51bGw7IH1cbiAgICBkZXRhY2hNYXJrZWRTcGFucyhsaW5lKTtcbiAgICBhdHRhY2hNYXJrZWRTcGFucyhsaW5lLCBtYXJrZWRTcGFucyk7XG4gICAgdmFyIGVzdEhlaWdodCA9IGVzdGltYXRlSGVpZ2h0ID8gZXN0aW1hdGVIZWlnaHQobGluZSkgOiAxO1xuICAgIGlmIChlc3RIZWlnaHQgIT0gbGluZS5oZWlnaHQpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBlc3RIZWlnaHQpOyB9XG4gIH1cblxuICAvLyBEZXRhY2ggYSBsaW5lIGZyb20gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGl0cyBtYXJrZXJzLlxuICBmdW5jdGlvbiBjbGVhblVwTGluZShsaW5lKSB7XG4gICAgbGluZS5wYXJlbnQgPSBudWxsO1xuICAgIGRldGFjaE1hcmtlZFNwYW5zKGxpbmUpO1xuICB9XG5cbiAgLy8gQ29udmVydCBhIHN0eWxlIGFzIHJldHVybmVkIGJ5IGEgbW9kZSAoZWl0aGVyIG51bGwsIG9yIGEgc3RyaW5nXG4gIC8vIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgc3R5bGVzKSB0byBhIENTUyBzdHlsZS4gVGhpcyBpcyBjYWNoZWQsXG4gIC8vIGFuZCBhbHNvIGxvb2tzIGZvciBsaW5lLXdpZGUgc3R5bGVzLlxuICB2YXIgc3R5bGVUb0NsYXNzQ2FjaGUgPSB7fSwgc3R5bGVUb0NsYXNzQ2FjaGVXaXRoTW9kZSA9IHt9O1xuICBmdW5jdGlvbiBpbnRlcnByZXRUb2tlblN0eWxlKHN0eWxlLCBvcHRpb25zKSB7XG4gICAgaWYgKCFzdHlsZSB8fCAvXlxccyokLy50ZXN0KHN0eWxlKSkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIGNhY2hlID0gb3B0aW9ucy5hZGRNb2RlQ2xhc3MgPyBzdHlsZVRvQ2xhc3NDYWNoZVdpdGhNb2RlIDogc3R5bGVUb0NsYXNzQ2FjaGU7XG4gICAgcmV0dXJuIGNhY2hlW3N0eWxlXSB8fFxuICAgICAgKGNhY2hlW3N0eWxlXSA9IHN0eWxlLnJlcGxhY2UoL1xcUysvZywgXCJjbS0kJlwiKSlcbiAgfVxuXG4gIC8vIFJlbmRlciB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0ZXh0IG9mIGEgbGluZS4gQWxzbyBidWlsZHNcbiAgLy8gdXAgYSAnbGluZSBtYXAnLCB3aGljaCBwb2ludHMgYXQgdGhlIERPTSBub2RlcyB0aGF0IHJlcHJlc2VudFxuICAvLyBzcGVjaWZpYyBzdHJldGNoZXMgb2YgdGV4dCwgYW5kIGlzIHVzZWQgYnkgdGhlIG1lYXN1cmluZyBjb2RlLlxuICAvLyBUaGUgcmV0dXJuZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSBET00gbm9kZSwgdGhpcyBtYXAsIGFuZFxuICAvLyBpbmZvcm1hdGlvbiBhYm91dCBsaW5lLXdpZGUgc3R5bGVzIHRoYXQgd2VyZSBzZXQgYnkgdGhlIG1vZGUuXG4gIGZ1bmN0aW9uIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KSB7XG4gICAgLy8gVGhlIHBhZGRpbmctcmlnaHQgZm9yY2VzIHRoZSBlbGVtZW50IHRvIGhhdmUgYSAnYm9yZGVyJywgd2hpY2hcbiAgICAvLyBpcyBuZWVkZWQgb24gV2Via2l0IHRvIGJlIGFibGUgdG8gZ2V0IGxpbmUtbGV2ZWwgYm91bmRpbmdcbiAgICAvLyByZWN0YW5nbGVzIGZvciBpdCAoaW4gbWVhc3VyZUNoYXIpLlxuICAgIHZhciBjb250ZW50ID0gZWx0UChcInNwYW5cIiwgbnVsbCwgbnVsbCwgd2Via2l0ID8gXCJwYWRkaW5nLXJpZ2h0OiAuMXB4XCIgOiBudWxsKTtcbiAgICB2YXIgYnVpbGRlciA9IHtwcmU6IGVsdFAoXCJwcmVcIiwgW2NvbnRlbnRdLCBcIkNvZGVNaXJyb3ItbGluZVwiKSwgY29udGVudDogY29udGVudCxcbiAgICAgICAgICAgICAgICAgICBjb2w6IDAsIHBvczogMCwgY206IGNtLFxuICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgIHNwbGl0U3BhY2VzOiBjbS5nZXRPcHRpb24oXCJsaW5lV3JhcHBpbmdcIil9O1xuICAgIGxpbmVWaWV3Lm1lYXN1cmUgPSB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbG9naWNhbCBsaW5lcyB0aGF0IG1ha2UgdXAgdGhpcyB2aXN1YWwgbGluZS5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAobGluZVZpZXcucmVzdCA/IGxpbmVWaWV3LnJlc3QubGVuZ3RoIDogMCk7IGkrKykge1xuICAgICAgdmFyIGxpbmUgPSBpID8gbGluZVZpZXcucmVzdFtpIC0gMV0gOiBsaW5lVmlldy5saW5lLCBvcmRlciA9ICh2b2lkIDApO1xuICAgICAgYnVpbGRlci5wb3MgPSAwO1xuICAgICAgYnVpbGRlci5hZGRUb2tlbiA9IGJ1aWxkVG9rZW47XG4gICAgICAvLyBPcHRpb25hbGx5IHdpcmUgaW4gc29tZSBoYWNrcyBpbnRvIHRoZSB0b2tlbi1yZW5kZXJpbmdcbiAgICAgIC8vIGFsZ29yaXRobSwgdG8gZGVhbCB3aXRoIGJyb3dzZXIgcXVpcmtzLlxuICAgICAgaWYgKGhhc0JhZEJpZGlSZWN0cyhjbS5kaXNwbGF5Lm1lYXN1cmUpICYmIChvcmRlciA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pKSlcbiAgICAgICAgeyBidWlsZGVyLmFkZFRva2VuID0gYnVpbGRUb2tlbkJhZEJpZGkoYnVpbGRlci5hZGRUb2tlbiwgb3JkZXIpOyB9XG4gICAgICBidWlsZGVyLm1hcCA9IFtdO1xuICAgICAgdmFyIGFsbG93RnJvbnRpZXJVcGRhdGUgPSBsaW5lVmlldyAhPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgJiYgbGluZU5vKGxpbmUpO1xuICAgICAgaW5zZXJ0TGluZUNvbnRlbnQobGluZSwgYnVpbGRlciwgZ2V0TGluZVN0eWxlcyhjbSwgbGluZSwgYWxsb3dGcm9udGllclVwZGF0ZSkpO1xuICAgICAgaWYgKGxpbmUuc3R5bGVDbGFzc2VzKSB7XG4gICAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy5iZ0NsYXNzKVxuICAgICAgICAgIHsgYnVpbGRlci5iZ0NsYXNzID0gam9pbkNsYXNzZXMobGluZS5zdHlsZUNsYXNzZXMuYmdDbGFzcywgYnVpbGRlci5iZ0NsYXNzIHx8IFwiXCIpOyB9XG4gICAgICAgIGlmIChsaW5lLnN0eWxlQ2xhc3Nlcy50ZXh0Q2xhc3MpXG4gICAgICAgICAgeyBidWlsZGVyLnRleHRDbGFzcyA9IGpvaW5DbGFzc2VzKGxpbmUuc3R5bGVDbGFzc2VzLnRleHRDbGFzcywgYnVpbGRlci50ZXh0Q2xhc3MgfHwgXCJcIik7IH1cbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGF0IGxlYXN0IGEgc2luZ2xlIG5vZGUgaXMgcHJlc2VudCwgZm9yIG1lYXN1cmluZy5cbiAgICAgIGlmIChidWlsZGVyLm1hcC5sZW5ndGggPT0gMClcbiAgICAgICAgeyBidWlsZGVyLm1hcC5wdXNoKDAsIDAsIGJ1aWxkZXIuY29udGVudC5hcHBlbmRDaGlsZCh6ZXJvV2lkdGhFbGVtZW50KGNtLmRpc3BsYXkubWVhc3VyZSkpKTsgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgbWFwIGFuZCBhIGNhY2hlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgbG9naWNhbCBsaW5lXG4gICAgICBpZiAoaSA9PSAwKSB7XG4gICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUubWFwID0gYnVpbGRlci5tYXA7XG4gICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUuY2FjaGUgPSB7fTtcbiAgICAgIH0gZWxzZSB7XG4gIChsaW5lVmlldy5tZWFzdXJlLm1hcHMgfHwgKGxpbmVWaWV3Lm1lYXN1cmUubWFwcyA9IFtdKSkucHVzaChidWlsZGVyLm1hcClcbiAgICAgICAgOyhsaW5lVmlldy5tZWFzdXJlLmNhY2hlcyB8fCAobGluZVZpZXcubWVhc3VyZS5jYWNoZXMgPSBbXSkpLnB1c2goe30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlZSBpc3N1ZSAjMjkwMVxuICAgIGlmICh3ZWJraXQpIHtcbiAgICAgIHZhciBsYXN0ID0gYnVpbGRlci5jb250ZW50Lmxhc3RDaGlsZDtcbiAgICAgIGlmICgvXFxiY20tdGFiXFxiLy50ZXN0KGxhc3QuY2xhc3NOYW1lKSB8fCAobGFzdC5xdWVyeVNlbGVjdG9yICYmIGxhc3QucXVlcnlTZWxlY3RvcihcIi5jbS10YWJcIikpKVxuICAgICAgICB7IGJ1aWxkZXIuY29udGVudC5jbGFzc05hbWUgPSBcImNtLXRhYi13cmFwLWhhY2tcIjsgfVxuICAgIH1cblxuICAgIHNpZ25hbChjbSwgXCJyZW5kZXJMaW5lXCIsIGNtLCBsaW5lVmlldy5saW5lLCBidWlsZGVyLnByZSk7XG4gICAgaWYgKGJ1aWxkZXIucHJlLmNsYXNzTmFtZSlcbiAgICAgIHsgYnVpbGRlci50ZXh0Q2xhc3MgPSBqb2luQ2xhc3NlcyhidWlsZGVyLnByZS5jbGFzc05hbWUsIGJ1aWxkZXIudGV4dENsYXNzIHx8IFwiXCIpOyB9XG5cbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFNwZWNpYWxDaGFyUGxhY2Vob2xkZXIoY2gpIHtcbiAgICB2YXIgdG9rZW4gPSBlbHQoXCJzcGFuXCIsIFwiXFx1MjAyMlwiLCBcImNtLWludmFsaWRjaGFyXCIpO1xuICAgIHRva2VuLnRpdGxlID0gXCJcXFxcdVwiICsgY2guY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gICAgdG9rZW4uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0b2tlbi50aXRsZSk7XG4gICAgcmV0dXJuIHRva2VuXG4gIH1cblxuICAvLyBCdWlsZCB1cCB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIGZvciBhIHNpbmdsZSB0b2tlbiwgYW5kIGFkZCBpdCB0b1xuICAvLyB0aGUgbGluZSBtYXAuIFRha2VzIGNhcmUgdG8gcmVuZGVyIHNwZWNpYWwgY2hhcmFjdGVycyBzZXBhcmF0ZWx5LlxuICBmdW5jdGlvbiBidWlsZFRva2VuKGJ1aWxkZXIsIHRleHQsIHN0eWxlLCBzdGFydFN0eWxlLCBlbmRTdHlsZSwgY3NzLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKCF0ZXh0KSB7IHJldHVybiB9XG4gICAgdmFyIGRpc3BsYXlUZXh0ID0gYnVpbGRlci5zcGxpdFNwYWNlcyA/IHNwbGl0U3BhY2VzKHRleHQsIGJ1aWxkZXIudHJhaWxpbmdTcGFjZSkgOiB0ZXh0O1xuICAgIHZhciBzcGVjaWFsID0gYnVpbGRlci5jbS5zdGF0ZS5zcGVjaWFsQ2hhcnMsIG11c3RXcmFwID0gZmFsc2U7XG4gICAgdmFyIGNvbnRlbnQ7XG4gICAgaWYgKCFzcGVjaWFsLnRlc3QodGV4dCkpIHtcbiAgICAgIGJ1aWxkZXIuY29sICs9IHRleHQubGVuZ3RoO1xuICAgICAgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlUZXh0KTtcbiAgICAgIGJ1aWxkZXIubWFwLnB1c2goYnVpbGRlci5wb3MsIGJ1aWxkZXIucG9zICsgdGV4dC5sZW5ndGgsIGNvbnRlbnQpO1xuICAgICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCA5KSB7IG11c3RXcmFwID0gdHJ1ZTsgfVxuICAgICAgYnVpbGRlci5wb3MgKz0gdGV4dC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICB2YXIgcG9zID0gMDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHNwZWNpYWwubGFzdEluZGV4ID0gcG9zO1xuICAgICAgICB2YXIgbSA9IHNwZWNpYWwuZXhlYyh0ZXh0KTtcbiAgICAgICAgdmFyIHNraXBwZWQgPSBtID8gbS5pbmRleCAtIHBvcyA6IHRleHQubGVuZ3RoIC0gcG9zO1xuICAgICAgICBpZiAoc2tpcHBlZCkge1xuICAgICAgICAgIHZhciB0eHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5VGV4dC5zbGljZShwb3MsIHBvcyArIHNraXBwZWQpKTtcbiAgICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIFt0eHRdKSk7IH1cbiAgICAgICAgICBlbHNlIHsgY29udGVudC5hcHBlbmRDaGlsZCh0eHQpOyB9XG4gICAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBza2lwcGVkLCB0eHQpO1xuICAgICAgICAgIGJ1aWxkZXIuY29sICs9IHNraXBwZWQ7XG4gICAgICAgICAgYnVpbGRlci5wb3MgKz0gc2tpcHBlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW0pIHsgYnJlYWsgfVxuICAgICAgICBwb3MgKz0gc2tpcHBlZCArIDE7XG4gICAgICAgIHZhciB0eHQkMSA9ICh2b2lkIDApO1xuICAgICAgICBpZiAobVswXSA9PSBcIlxcdFwiKSB7XG4gICAgICAgICAgdmFyIHRhYlNpemUgPSBidWlsZGVyLmNtLm9wdGlvbnMudGFiU2l6ZSwgdGFiV2lkdGggPSB0YWJTaXplIC0gYnVpbGRlci5jb2wgJSB0YWJTaXplO1xuICAgICAgICAgIHR4dCQxID0gY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIHNwYWNlU3RyKHRhYldpZHRoKSwgXCJjbS10YWJcIikpO1xuICAgICAgICAgIHR4dCQxLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG4gICAgICAgICAgdHh0JDEuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBcIlxcdFwiKTtcbiAgICAgICAgICBidWlsZGVyLmNvbCArPSB0YWJXaWR0aDtcbiAgICAgICAgfSBlbHNlIGlmIChtWzBdID09IFwiXFxyXCIgfHwgbVswXSA9PSBcIlxcblwiKSB7XG4gICAgICAgICAgdHh0JDEgPSBjb250ZW50LmFwcGVuZENoaWxkKGVsdChcInNwYW5cIiwgbVswXSA9PSBcIlxcclwiID8gXCJcXHUyNDBkXCIgOiBcIlxcdTI0MjRcIiwgXCJjbS1pbnZhbGlkY2hhclwiKSk7XG4gICAgICAgICAgdHh0JDEuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBtWzBdKTtcbiAgICAgICAgICBidWlsZGVyLmNvbCArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHR4dCQxID0gYnVpbGRlci5jbS5vcHRpb25zLnNwZWNpYWxDaGFyUGxhY2Vob2xkZXIobVswXSk7XG4gICAgICAgICAgdHh0JDEuc2V0QXR0cmlidXRlKFwiY20tdGV4dFwiLCBtWzBdKTtcbiAgICAgICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgY29udGVudC5hcHBlbmRDaGlsZChlbHQoXCJzcGFuXCIsIFt0eHQkMV0pKTsgfVxuICAgICAgICAgIGVsc2UgeyBjb250ZW50LmFwcGVuZENoaWxkKHR4dCQxKTsgfVxuICAgICAgICAgIGJ1aWxkZXIuY29sICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyAxLCB0eHQkMSk7XG4gICAgICAgIGJ1aWxkZXIucG9zKys7XG4gICAgICB9XG4gICAgfVxuICAgIGJ1aWxkZXIudHJhaWxpbmdTcGFjZSA9IGRpc3BsYXlUZXh0LmNoYXJDb2RlQXQodGV4dC5sZW5ndGggLSAxKSA9PSAzMjtcbiAgICBpZiAoc3R5bGUgfHwgc3RhcnRTdHlsZSB8fCBlbmRTdHlsZSB8fCBtdXN0V3JhcCB8fCBjc3MgfHwgYXR0cmlidXRlcykge1xuICAgICAgdmFyIGZ1bGxTdHlsZSA9IHN0eWxlIHx8IFwiXCI7XG4gICAgICBpZiAoc3RhcnRTdHlsZSkgeyBmdWxsU3R5bGUgKz0gc3RhcnRTdHlsZTsgfVxuICAgICAgaWYgKGVuZFN0eWxlKSB7IGZ1bGxTdHlsZSArPSBlbmRTdHlsZTsgfVxuICAgICAgdmFyIHRva2VuID0gZWx0KFwic3BhblwiLCBbY29udGVudF0sIGZ1bGxTdHlsZSwgY3NzKTtcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cmlidXRlcykgeyBpZiAoYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyKSAmJiBhdHRyICE9IFwic3R5bGVcIiAmJiBhdHRyICE9IFwiY2xhc3NcIilcbiAgICAgICAgICB7IHRva2VuLnNldEF0dHJpYnV0ZShhdHRyLCBhdHRyaWJ1dGVzW2F0dHJdKTsgfSB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHRva2VuKVxuICAgIH1cbiAgICBidWlsZGVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQoY29udGVudCk7XG4gIH1cblxuICAvLyBDaGFuZ2Ugc29tZSBzcGFjZXMgdG8gTkJTUCB0byBwcmV2ZW50IHRoZSBicm93c2VyIGZyb20gY29sbGFwc2luZ1xuICAvLyB0cmFpbGluZyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgd2hlbiByZW5kZXJpbmcgdGV4dCAoaXNzdWUgIzEzNjIpLlxuICBmdW5jdGlvbiBzcGxpdFNwYWNlcyh0ZXh0LCB0cmFpbGluZ0JlZm9yZSkge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDEgJiYgIS8gIC8udGVzdCh0ZXh0KSkgeyByZXR1cm4gdGV4dCB9XG4gICAgdmFyIHNwYWNlQmVmb3JlID0gdHJhaWxpbmdCZWZvcmUsIHJlc3VsdCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgIGlmIChjaCA9PSBcIiBcIiAmJiBzcGFjZUJlZm9yZSAmJiAoaSA9PSB0ZXh0Lmxlbmd0aCAtIDEgfHwgdGV4dC5jaGFyQ29kZUF0KGkgKyAxKSA9PSAzMikpXG4gICAgICAgIHsgY2ggPSBcIlxcdTAwYTBcIjsgfVxuICAgICAgcmVzdWx0ICs9IGNoO1xuICAgICAgc3BhY2VCZWZvcmUgPSBjaCA9PSBcIiBcIjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gV29yayBhcm91bmQgbm9uc2Vuc2UgZGltZW5zaW9ucyBiZWluZyByZXBvcnRlZCBmb3Igc3RyZXRjaGVzIG9mXG4gIC8vIHJpZ2h0LXRvLWxlZnQgdGV4dC5cbiAgZnVuY3Rpb24gYnVpbGRUb2tlbkJhZEJpZGkoaW5uZXIsIG9yZGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIGNzcywgYXR0cmlidXRlcykge1xuICAgICAgc3R5bGUgPSBzdHlsZSA/IHN0eWxlICsgXCIgY20tZm9yY2UtYm9yZGVyXCIgOiBcImNtLWZvcmNlLWJvcmRlclwiO1xuICAgICAgdmFyIHN0YXJ0ID0gYnVpbGRlci5wb3MsIGVuZCA9IHN0YXJ0ICsgdGV4dC5sZW5ndGg7XG4gICAgICBmb3IgKDs7KSB7XG4gICAgICAgIC8vIEZpbmQgdGhlIHBhcnQgdGhhdCBvdmVybGFwcyB3aXRoIHRoZSBzdGFydCBvZiB0aGlzIHRleHRcbiAgICAgICAgdmFyIHBhcnQgPSAodm9pZCAwKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHBhcnQgPSBvcmRlcltpXTtcbiAgICAgICAgICBpZiAocGFydC50byA+IHN0YXJ0ICYmIHBhcnQuZnJvbSA8PSBzdGFydCkgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnQudG8gPj0gZW5kKSB7IHJldHVybiBpbm5lcihidWlsZGVyLCB0ZXh0LCBzdHlsZSwgc3RhcnRTdHlsZSwgZW5kU3R5bGUsIGNzcywgYXR0cmlidXRlcykgfVxuICAgICAgICBpbm5lcihidWlsZGVyLCB0ZXh0LnNsaWNlKDAsIHBhcnQudG8gLSBzdGFydCksIHN0eWxlLCBzdGFydFN0eWxlLCBudWxsLCBjc3MsIGF0dHJpYnV0ZXMpO1xuICAgICAgICBzdGFydFN0eWxlID0gbnVsbDtcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UocGFydC50byAtIHN0YXJ0KTtcbiAgICAgICAgc3RhcnQgPSBwYXJ0LnRvO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ29sbGFwc2VkU3BhbihidWlsZGVyLCBzaXplLCBtYXJrZXIsIGlnbm9yZVdpZGdldCkge1xuICAgIHZhciB3aWRnZXQgPSAhaWdub3JlV2lkZ2V0ICYmIG1hcmtlci53aWRnZXROb2RlO1xuICAgIGlmICh3aWRnZXQpIHsgYnVpbGRlci5tYXAucHVzaChidWlsZGVyLnBvcywgYnVpbGRlci5wb3MgKyBzaXplLCB3aWRnZXQpOyB9XG4gICAgaWYgKCFpZ25vcmVXaWRnZXQgJiYgYnVpbGRlci5jbS5kaXNwbGF5LmlucHV0Lm5lZWRzQ29udGVudEF0dHJpYnV0ZSkge1xuICAgICAgaWYgKCF3aWRnZXQpXG4gICAgICAgIHsgd2lkZ2V0ID0gYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpKTsgfVxuICAgICAgd2lkZ2V0LnNldEF0dHJpYnV0ZShcImNtLW1hcmtlclwiLCBtYXJrZXIuaWQpO1xuICAgIH1cbiAgICBpZiAod2lkZ2V0KSB7XG4gICAgICBidWlsZGVyLmNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZSh3aWRnZXQpO1xuICAgICAgYnVpbGRlci5jb250ZW50LmFwcGVuZENoaWxkKHdpZGdldCk7XG4gICAgfVxuICAgIGJ1aWxkZXIucG9zICs9IHNpemU7XG4gICAgYnVpbGRlci50cmFpbGluZ1NwYWNlID0gZmFsc2U7XG4gIH1cblxuICAvLyBPdXRwdXRzIGEgbnVtYmVyIG9mIHNwYW5zIHRvIG1ha2UgdXAgYSBsaW5lLCB0YWtpbmcgaGlnaGxpZ2h0aW5nXG4gIC8vIGFuZCBtYXJrZWQgdGV4dCBpbnRvIGFjY291bnQuXG4gIGZ1bmN0aW9uIGluc2VydExpbmVDb250ZW50KGxpbmUsIGJ1aWxkZXIsIHN0eWxlcykge1xuICAgIHZhciBzcGFucyA9IGxpbmUubWFya2VkU3BhbnMsIGFsbFRleHQgPSBsaW5lLnRleHQsIGF0ID0gMDtcbiAgICBpZiAoIXNwYW5zKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAxOyBpJDEgPCBzdHlsZXMubGVuZ3RoOyBpJDErPTIpXG4gICAgICAgIHsgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCBhbGxUZXh0LnNsaWNlKGF0LCBhdCA9IHN0eWxlc1tpJDFdKSwgaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZXNbaSQxKzFdLCBidWlsZGVyLmNtLm9wdGlvbnMpKTsgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoLCBwb3MgPSAwLCBpID0gMSwgdGV4dCA9IFwiXCIsIHN0eWxlLCBjc3M7XG4gICAgdmFyIG5leHRDaGFuZ2UgPSAwLCBzcGFuU3R5bGUsIHNwYW5FbmRTdHlsZSwgc3BhblN0YXJ0U3R5bGUsIGNvbGxhcHNlZCwgYXR0cmlidXRlcztcbiAgICBmb3IgKDs7KSB7XG4gICAgICBpZiAobmV4dENoYW5nZSA9PSBwb3MpIHsgLy8gVXBkYXRlIGN1cnJlbnQgbWFya2VyIHNldFxuICAgICAgICBzcGFuU3R5bGUgPSBzcGFuRW5kU3R5bGUgPSBzcGFuU3RhcnRTdHlsZSA9IGNzcyA9IFwiXCI7XG4gICAgICAgIGF0dHJpYnV0ZXMgPSBudWxsO1xuICAgICAgICBjb2xsYXBzZWQgPSBudWxsOyBuZXh0Q2hhbmdlID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBmb3VuZEJvb2ttYXJrcyA9IFtdLCBlbmRTdHlsZXMgPSAodm9pZCAwKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBzcGFucy5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHZhciBzcCA9IHNwYW5zW2pdLCBtID0gc3AubWFya2VyO1xuICAgICAgICAgIGlmIChtLnR5cGUgPT0gXCJib29rbWFya1wiICYmIHNwLmZyb20gPT0gcG9zICYmIG0ud2lkZ2V0Tm9kZSkge1xuICAgICAgICAgICAgZm91bmRCb29rbWFya3MucHVzaChtKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHNwLmZyb20gPD0gcG9zICYmIChzcC50byA9PSBudWxsIHx8IHNwLnRvID4gcG9zIHx8IG0uY29sbGFwc2VkICYmIHNwLnRvID09IHBvcyAmJiBzcC5mcm9tID09IHBvcykpIHtcbiAgICAgICAgICAgIGlmIChzcC50byAhPSBudWxsICYmIHNwLnRvICE9IHBvcyAmJiBuZXh0Q2hhbmdlID4gc3AudG8pIHtcbiAgICAgICAgICAgICAgbmV4dENoYW5nZSA9IHNwLnRvO1xuICAgICAgICAgICAgICBzcGFuRW5kU3R5bGUgPSBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG0uY2xhc3NOYW1lKSB7IHNwYW5TdHlsZSArPSBcIiBcIiArIG0uY2xhc3NOYW1lOyB9XG4gICAgICAgICAgICBpZiAobS5jc3MpIHsgY3NzID0gKGNzcyA/IGNzcyArIFwiO1wiIDogXCJcIikgKyBtLmNzczsgfVxuICAgICAgICAgICAgaWYgKG0uc3RhcnRTdHlsZSAmJiBzcC5mcm9tID09IHBvcykgeyBzcGFuU3RhcnRTdHlsZSArPSBcIiBcIiArIG0uc3RhcnRTdHlsZTsgfVxuICAgICAgICAgICAgaWYgKG0uZW5kU3R5bGUgJiYgc3AudG8gPT0gbmV4dENoYW5nZSkgeyAoZW5kU3R5bGVzIHx8IChlbmRTdHlsZXMgPSBbXSkpLnB1c2gobS5lbmRTdHlsZSwgc3AudG8pOyB9XG4gICAgICAgICAgICAvLyBzdXBwb3J0IGZvciB0aGUgb2xkIHRpdGxlIHByb3BlcnR5XG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vY29kZW1pcnJvci9Db2RlTWlycm9yL3B1bGwvNTY3M1xuICAgICAgICAgICAgaWYgKG0udGl0bGUpIHsgKGF0dHJpYnV0ZXMgfHwgKGF0dHJpYnV0ZXMgPSB7fSkpLnRpdGxlID0gbS50aXRsZTsgfVxuICAgICAgICAgICAgaWYgKG0uYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBmb3IgKHZhciBhdHRyIGluIG0uYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICB7IChhdHRyaWJ1dGVzIHx8IChhdHRyaWJ1dGVzID0ge30pKVthdHRyXSA9IG0uYXR0cmlidXRlc1thdHRyXTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG0uY29sbGFwc2VkICYmICghY29sbGFwc2VkIHx8IGNvbXBhcmVDb2xsYXBzZWRNYXJrZXJzKGNvbGxhcHNlZC5tYXJrZXIsIG0pIDwgMCkpXG4gICAgICAgICAgICAgIHsgY29sbGFwc2VkID0gc3A7IH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHNwLmZyb20gPiBwb3MgJiYgbmV4dENoYW5nZSA+IHNwLmZyb20pIHtcbiAgICAgICAgICAgIG5leHRDaGFuZ2UgPSBzcC5mcm9tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kU3R5bGVzKSB7IGZvciAodmFyIGokMSA9IDA7IGokMSA8IGVuZFN0eWxlcy5sZW5ndGg7IGokMSArPSAyKVxuICAgICAgICAgIHsgaWYgKGVuZFN0eWxlc1tqJDEgKyAxXSA9PSBuZXh0Q2hhbmdlKSB7IHNwYW5FbmRTdHlsZSArPSBcIiBcIiArIGVuZFN0eWxlc1tqJDFdOyB9IH0gfVxuXG4gICAgICAgIGlmICghY29sbGFwc2VkIHx8IGNvbGxhcHNlZC5mcm9tID09IHBvcykgeyBmb3IgKHZhciBqJDIgPSAwOyBqJDIgPCBmb3VuZEJvb2ttYXJrcy5sZW5ndGg7ICsraiQyKVxuICAgICAgICAgIHsgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIDAsIGZvdW5kQm9va21hcmtzW2okMl0pOyB9IH1cbiAgICAgICAgaWYgKGNvbGxhcHNlZCAmJiAoY29sbGFwc2VkLmZyb20gfHwgMCkgPT0gcG9zKSB7XG4gICAgICAgICAgYnVpbGRDb2xsYXBzZWRTcGFuKGJ1aWxkZXIsIChjb2xsYXBzZWQudG8gPT0gbnVsbCA/IGxlbiArIDEgOiBjb2xsYXBzZWQudG8pIC0gcG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQubWFya2VyLCBjb2xsYXBzZWQuZnJvbSA9PSBudWxsKTtcbiAgICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09IG51bGwpIHsgcmV0dXJuIH1cbiAgICAgICAgICBpZiAoY29sbGFwc2VkLnRvID09IHBvcykgeyBjb2xsYXBzZWQgPSBmYWxzZTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocG9zID49IGxlbikgeyBicmVhayB9XG5cbiAgICAgIHZhciB1cHRvID0gTWF0aC5taW4obGVuLCBuZXh0Q2hhbmdlKTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgdmFyIGVuZCA9IHBvcyArIHRleHQubGVuZ3RoO1xuICAgICAgICAgIGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB2YXIgdG9rZW5UZXh0ID0gZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0O1xuICAgICAgICAgICAgYnVpbGRlci5hZGRUb2tlbihidWlsZGVyLCB0b2tlblRleHQsIHN0eWxlID8gc3R5bGUgKyBzcGFuU3R5bGUgOiBzcGFuU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5TdGFydFN0eWxlLCBwb3MgKyB0b2tlblRleHQubGVuZ3RoID09IG5leHRDaGFuZ2UgPyBzcGFuRW5kU3R5bGUgOiBcIlwiLCBjc3MsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZW5kID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWt9XG4gICAgICAgICAgcG9zID0gZW5kO1xuICAgICAgICAgIHNwYW5TdGFydFN0eWxlID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB0ZXh0ID0gYWxsVGV4dC5zbGljZShhdCwgYXQgPSBzdHlsZXNbaSsrXSk7XG4gICAgICAgIHN0eWxlID0gaW50ZXJwcmV0VG9rZW5TdHlsZShzdHlsZXNbaSsrXSwgYnVpbGRlci5jbS5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIC8vIFRoZXNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHRoZSB2aXNpYmxlIChjdXJyZW50bHkgZHJhd24pXG4gIC8vIHBhcnQgb2YgdGhlIGRvY3VtZW50LiBBIExpbmVWaWV3IG1heSBjb3JyZXNwb25kIHRvIG11bHRpcGxlXG4gIC8vIGxvZ2ljYWwgbGluZXMsIGlmIHRob3NlIGFyZSBjb25uZWN0ZWQgYnkgY29sbGFwc2VkIHJhbmdlcy5cbiAgZnVuY3Rpb24gTGluZVZpZXcoZG9jLCBsaW5lLCBsaW5lTikge1xuICAgIC8vIFRoZSBzdGFydGluZyBsaW5lXG4gICAgdGhpcy5saW5lID0gbGluZTtcbiAgICAvLyBDb250aW51aW5nIGxpbmVzLCBpZiBhbnlcbiAgICB0aGlzLnJlc3QgPSB2aXN1YWxMaW5lQ29udGludWVkKGxpbmUpO1xuICAgIC8vIE51bWJlciBvZiBsb2dpY2FsIGxpbmVzIGluIHRoaXMgdmlzdWFsIGxpbmVcbiAgICB0aGlzLnNpemUgPSB0aGlzLnJlc3QgPyBsaW5lTm8obHN0KHRoaXMucmVzdCkpIC0gbGluZU4gKyAxIDogMTtcbiAgICB0aGlzLm5vZGUgPSB0aGlzLnRleHQgPSBudWxsO1xuICAgIHRoaXMuaGlkZGVuID0gbGluZUlzSGlkZGVuKGRvYywgbGluZSk7XG4gIH1cblxuICAvLyBDcmVhdGUgYSByYW5nZSBvZiBMaW5lVmlldyBvYmplY3RzIGZvciB0aGUgZ2l2ZW4gbGluZXMuXG4gIGZ1bmN0aW9uIGJ1aWxkVmlld0FycmF5KGNtLCBmcm9tLCB0bykge1xuICAgIHZhciBhcnJheSA9IFtdLCBuZXh0UG9zO1xuICAgIGZvciAodmFyIHBvcyA9IGZyb207IHBvcyA8IHRvOyBwb3MgPSBuZXh0UG9zKSB7XG4gICAgICB2YXIgdmlldyA9IG5ldyBMaW5lVmlldyhjbS5kb2MsIGdldExpbmUoY20uZG9jLCBwb3MpLCBwb3MpO1xuICAgICAgbmV4dFBvcyA9IHBvcyArIHZpZXcuc2l6ZTtcbiAgICAgIGFycmF5LnB1c2godmlldyk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheVxuICB9XG5cbiAgdmFyIG9wZXJhdGlvbkdyb3VwID0gbnVsbDtcblxuICBmdW5jdGlvbiBwdXNoT3BlcmF0aW9uKG9wKSB7XG4gICAgaWYgKG9wZXJhdGlvbkdyb3VwKSB7XG4gICAgICBvcGVyYXRpb25Hcm91cC5vcHMucHVzaChvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wLm93bnNHcm91cCA9IG9wZXJhdGlvbkdyb3VwID0ge1xuICAgICAgICBvcHM6IFtvcF0sXG4gICAgICAgIGRlbGF5ZWRDYWxsYmFja3M6IFtdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGZpcmVDYWxsYmFja3NGb3JPcHMoZ3JvdXApIHtcbiAgICAvLyBDYWxscyBkZWxheWVkIGNhbGxiYWNrcyBhbmQgY3Vyc29yQWN0aXZpdHkgaGFuZGxlcnMgdW50aWwgbm9cbiAgICAvLyBuZXcgb25lcyBhcHBlYXJcbiAgICB2YXIgY2FsbGJhY2tzID0gZ3JvdXAuZGVsYXllZENhbGxiYWNrcywgaSA9IDA7XG4gICAgZG8ge1xuICAgICAgZm9yICg7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgY2FsbGJhY2tzW2ldLmNhbGwobnVsbCk7IH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXAub3BzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBvcCA9IGdyb3VwLm9wc1tqXTtcbiAgICAgICAgaWYgKG9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMpXG4gICAgICAgICAgeyB3aGlsZSAob3AuY3Vyc29yQWN0aXZpdHlDYWxsZWQgPCBvcC5jdXJzb3JBY3Rpdml0eUhhbmRsZXJzLmxlbmd0aClcbiAgICAgICAgICAgIHsgb3AuY3Vyc29yQWN0aXZpdHlIYW5kbGVyc1tvcC5jdXJzb3JBY3Rpdml0eUNhbGxlZCsrXS5jYWxsKG51bGwsIG9wLmNtKTsgfSB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoaSA8IGNhbGxiYWNrcy5sZW5ndGgpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hPcGVyYXRpb24ob3AsIGVuZENiKSB7XG4gICAgdmFyIGdyb3VwID0gb3Aub3duc0dyb3VwO1xuICAgIGlmICghZ3JvdXApIHsgcmV0dXJuIH1cblxuICAgIHRyeSB7IGZpcmVDYWxsYmFja3NGb3JPcHMoZ3JvdXApOyB9XG4gICAgZmluYWxseSB7XG4gICAgICBvcGVyYXRpb25Hcm91cCA9IG51bGw7XG4gICAgICBlbmRDYihncm91cCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBudWxsO1xuXG4gIC8vIE9mdGVuLCB3ZSB3YW50IHRvIHNpZ25hbCBldmVudHMgYXQgYSBwb2ludCB3aGVyZSB3ZSBhcmUgaW4gdGhlXG4gIC8vIG1pZGRsZSBvZiBzb21lIHdvcmssIGJ1dCBkb24ndCB3YW50IHRoZSBoYW5kbGVyIHRvIHN0YXJ0IGNhbGxpbmdcbiAgLy8gb3RoZXIgbWV0aG9kcyBvbiB0aGUgZWRpdG9yLCB3aGljaCBtaWdodCBiZSBpbiBhbiBpbmNvbnNpc3RlbnRcbiAgLy8gc3RhdGUgb3Igc2ltcGx5IG5vdCBleHBlY3QgYW55IG90aGVyIGV2ZW50cyB0byBoYXBwZW4uXG4gIC8vIHNpZ25hbExhdGVyIGxvb2tzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBoYW5kbGVycywgYW5kIHNjaGVkdWxlc1xuICAvLyB0aGVtIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3Qgb3BlcmF0aW9uIGVuZHMsIG9yLCBpZiBub1xuICAvLyBvcGVyYXRpb24gaXMgYWN0aXZlLCB3aGVuIGEgdGltZW91dCBmaXJlcy5cbiAgZnVuY3Rpb24gc2lnbmFsTGF0ZXIoZW1pdHRlciwgdHlwZSAvKiwgdmFsdWVzLi4uKi8pIHtcbiAgICB2YXIgYXJyID0gZ2V0SGFuZGxlcnMoZW1pdHRlciwgdHlwZSk7XG4gICAgaWYgKCFhcnIubGVuZ3RoKSB7IHJldHVybiB9XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpLCBsaXN0O1xuICAgIGlmIChvcGVyYXRpb25Hcm91cCkge1xuICAgICAgbGlzdCA9IG9wZXJhdGlvbkdyb3VwLmRlbGF5ZWRDYWxsYmFja3M7XG4gICAgfSBlbHNlIGlmIChvcnBoYW5EZWxheWVkQ2FsbGJhY2tzKSB7XG4gICAgICBsaXN0ID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcztcbiAgICB9IGVsc2Uge1xuICAgICAgbGlzdCA9IG9ycGhhbkRlbGF5ZWRDYWxsYmFja3MgPSBbXTtcbiAgICAgIHNldFRpbWVvdXQoZmlyZU9ycGhhbkRlbGF5ZWQsIDApO1xuICAgIH1cbiAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggaSApIHtcbiAgICAgIGxpc3QucHVzaChmdW5jdGlvbiAoKSB7IHJldHVybiBhcnJbaV0uYXBwbHkobnVsbCwgYXJncyk7IH0pO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSlcbiAgICAgIGxvb3AoIGkgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpcmVPcnBoYW5EZWxheWVkKCkge1xuICAgIHZhciBkZWxheWVkID0gb3JwaGFuRGVsYXllZENhbGxiYWNrcztcbiAgICBvcnBoYW5EZWxheWVkQ2FsbGJhY2tzID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGF5ZWQubGVuZ3RoOyArK2kpIHsgZGVsYXllZFtpXSgpOyB9XG4gIH1cblxuICAvLyBXaGVuIGFuIGFzcGVjdCBvZiBhIGxpbmUgY2hhbmdlcywgYSBzdHJpbmcgaXMgYWRkZWQgdG9cbiAgLy8gbGluZVZpZXcuY2hhbmdlcy4gVGhpcyB1cGRhdGVzIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBsaW5lJ3NcbiAgLy8gRE9NIHN0cnVjdHVyZS5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZVZpZXcuY2hhbmdlcy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIHR5cGUgPSBsaW5lVmlldy5jaGFuZ2VzW2pdO1xuICAgICAgaWYgKHR5cGUgPT0gXCJ0ZXh0XCIpIHsgdXBkYXRlTGluZVRleHQoY20sIGxpbmVWaWV3KTsgfVxuICAgICAgZWxzZSBpZiAodHlwZSA9PSBcImd1dHRlclwiKSB7IHVwZGF0ZUxpbmVHdXR0ZXIoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7IH1cbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJjbGFzc1wiKSB7IHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldyk7IH1cbiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gXCJ3aWRnZXRcIikgeyB1cGRhdGVMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpOyB9XG4gICAgfVxuICAgIGxpbmVWaWV3LmNoYW5nZXMgPSBudWxsO1xuICB9XG5cbiAgLy8gTGluZXMgd2l0aCBndXR0ZXIgZWxlbWVudHMsIHdpZGdldHMgb3IgYSBiYWNrZ3JvdW5kIGNsYXNzIG5lZWQgdG9cbiAgLy8gYmUgd3JhcHBlZCwgYW5kIGhhdmUgdGhlIGV4dHJhIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSB3cmFwcGVyIGRpdlxuICBmdW5jdGlvbiBlbnN1cmVMaW5lV3JhcHBlZChsaW5lVmlldykge1xuICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVWaWV3LnRleHQpIHtcbiAgICAgIGxpbmVWaWV3Lm5vZGUgPSBlbHQoXCJkaXZcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogcmVsYXRpdmVcIik7XG4gICAgICBpZiAobGluZVZpZXcudGV4dC5wYXJlbnROb2RlKVxuICAgICAgICB7IGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobGluZVZpZXcubm9kZSwgbGluZVZpZXcudGV4dCk7IH1cbiAgICAgIGxpbmVWaWV3Lm5vZGUuYXBwZW5kQ2hpbGQobGluZVZpZXcudGV4dCk7XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHsgbGluZVZpZXcubm9kZS5zdHlsZS56SW5kZXggPSAyOyB9XG4gICAgfVxuICAgIHJldHVybiBsaW5lVmlldy5ub2RlXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMaW5lQmFja2dyb3VuZChjbSwgbGluZVZpZXcpIHtcbiAgICB2YXIgY2xzID0gbGluZVZpZXcuYmdDbGFzcyA/IGxpbmVWaWV3LmJnQ2xhc3MgKyBcIiBcIiArIChsaW5lVmlldy5saW5lLmJnQ2xhc3MgfHwgXCJcIikgOiBsaW5lVmlldy5saW5lLmJnQ2xhc3M7XG4gICAgaWYgKGNscykgeyBjbHMgKz0gXCIgQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZFwiOyB9XG4gICAgaWYgKGxpbmVWaWV3LmJhY2tncm91bmQpIHtcbiAgICAgIGlmIChjbHMpIHsgbGluZVZpZXcuYmFja2dyb3VuZC5jbGFzc05hbWUgPSBjbHM7IH1cbiAgICAgIGVsc2UgeyBsaW5lVmlldy5iYWNrZ3JvdW5kLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuYmFja2dyb3VuZCk7IGxpbmVWaWV3LmJhY2tncm91bmQgPSBudWxsOyB9XG4gICAgfSBlbHNlIGlmIChjbHMpIHtcbiAgICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgICAgbGluZVZpZXcuYmFja2dyb3VuZCA9IHdyYXAuaW5zZXJ0QmVmb3JlKGVsdChcImRpdlwiLCBudWxsLCBjbHMpLCB3cmFwLmZpcnN0Q2hpbGQpO1xuICAgICAgY20uZGlzcGxheS5pbnB1dC5zZXRVbmVkaXRhYmxlKGxpbmVWaWV3LmJhY2tncm91bmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdyYXBwZXIgYXJvdW5kIGJ1aWxkTGluZUNvbnRlbnQgd2hpY2ggd2lsbCByZXVzZSB0aGUgc3RydWN0dXJlXG4gIC8vIGluIGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCB3aGVuIHBvc3NpYmxlLlxuICBmdW5jdGlvbiBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpIHtcbiAgICB2YXIgZXh0ID0gY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkO1xuICAgIGlmIChleHQgJiYgZXh0LmxpbmUgPT0gbGluZVZpZXcubGluZSkge1xuICAgICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmVkID0gbnVsbDtcbiAgICAgIGxpbmVWaWV3Lm1lYXN1cmUgPSBleHQubWVhc3VyZTtcbiAgICAgIHJldHVybiBleHQuYnVpbHRcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkTGluZUNvbnRlbnQoY20sIGxpbmVWaWV3KVxuICB9XG5cbiAgLy8gUmVkcmF3IHRoZSBsaW5lJ3MgdGV4dC4gSW50ZXJhY3RzIHdpdGggdGhlIGJhY2tncm91bmQgYW5kIHRleHRcbiAgLy8gY2xhc3NlcyBiZWNhdXNlIHRoZSBtb2RlIG1heSBvdXRwdXQgdG9rZW5zIHRoYXQgaW5mbHVlbmNlIHRoZXNlXG4gIC8vIGNsYXNzZXMuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxpbmVUZXh0KGNtLCBsaW5lVmlldykge1xuICAgIHZhciBjbHMgPSBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZTtcbiAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpO1xuICAgIGlmIChsaW5lVmlldy50ZXh0ID09IGxpbmVWaWV3Lm5vZGUpIHsgbGluZVZpZXcubm9kZSA9IGJ1aWx0LnByZTsgfVxuICAgIGxpbmVWaWV3LnRleHQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYnVpbHQucHJlLCBsaW5lVmlldy50ZXh0KTtcbiAgICBsaW5lVmlldy50ZXh0ID0gYnVpbHQucHJlO1xuICAgIGlmIChidWlsdC5iZ0NsYXNzICE9IGxpbmVWaWV3LmJnQ2xhc3MgfHwgYnVpbHQudGV4dENsYXNzICE9IGxpbmVWaWV3LnRleHRDbGFzcykge1xuICAgICAgbGluZVZpZXcuYmdDbGFzcyA9IGJ1aWx0LmJnQ2xhc3M7XG4gICAgICBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0Q2xhc3M7XG4gICAgICB1cGRhdGVMaW5lQ2xhc3NlcyhjbSwgbGluZVZpZXcpO1xuICAgIH0gZWxzZSBpZiAoY2xzKSB7XG4gICAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9IGNscztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMaW5lQ2xhc3NlcyhjbSwgbGluZVZpZXcpIHtcbiAgICB1cGRhdGVMaW5lQmFja2dyb3VuZChjbSwgbGluZVZpZXcpO1xuICAgIGlmIChsaW5lVmlldy5saW5lLndyYXBDbGFzcylcbiAgICAgIHsgZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpLmNsYXNzTmFtZSA9IGxpbmVWaWV3LmxpbmUud3JhcENsYXNzOyB9XG4gICAgZWxzZSBpZiAobGluZVZpZXcubm9kZSAhPSBsaW5lVmlldy50ZXh0KVxuICAgICAgeyBsaW5lVmlldy5ub2RlLmNsYXNzTmFtZSA9IFwiXCI7IH1cbiAgICB2YXIgdGV4dENsYXNzID0gbGluZVZpZXcudGV4dENsYXNzID8gbGluZVZpZXcudGV4dENsYXNzICsgXCIgXCIgKyAobGluZVZpZXcubGluZS50ZXh0Q2xhc3MgfHwgXCJcIikgOiBsaW5lVmlldy5saW5lLnRleHRDbGFzcztcbiAgICBsaW5lVmlldy50ZXh0LmNsYXNzTmFtZSA9IHRleHRDbGFzcyB8fCBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKSB7XG4gICAgaWYgKGxpbmVWaWV3Lmd1dHRlcikge1xuICAgICAgbGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChsaW5lVmlldy5ndXR0ZXIpO1xuICAgICAgbGluZVZpZXcuZ3V0dGVyID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQpIHtcbiAgICAgIGxpbmVWaWV3Lm5vZGUucmVtb3ZlQ2hpbGQobGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCk7XG4gICAgICBsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3MpIHtcbiAgICAgIHZhciB3cmFwID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgICAgbGluZVZpZXcuZ3V0dGVyQmFja2dyb3VuZCA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyLWJhY2tncm91bmQgXCIgKyBsaW5lVmlldy5saW5lLmd1dHRlckNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXCJsZWZ0OiBcIiArIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyID8gZGltcy5maXhlZFBvcyA6IC1kaW1zLmd1dHRlclRvdGFsV2lkdGgpICsgXCJweDsgd2lkdGg6IFwiICsgKGRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyBcInB4XCIpKTtcbiAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShsaW5lVmlldy5ndXR0ZXJCYWNrZ3JvdW5kKTtcbiAgICAgIHdyYXAuaW5zZXJ0QmVmb3JlKGxpbmVWaWV3Lmd1dHRlckJhY2tncm91bmQsIGxpbmVWaWV3LnRleHQpO1xuICAgIH1cbiAgICB2YXIgbWFya2VycyA9IGxpbmVWaWV3LmxpbmUuZ3V0dGVyTWFya2VycztcbiAgICBpZiAoY20ub3B0aW9ucy5saW5lTnVtYmVycyB8fCBtYXJrZXJzKSB7XG4gICAgICB2YXIgd3JhcCQxID0gZW5zdXJlTGluZVdyYXBwZWQobGluZVZpZXcpO1xuICAgICAgdmFyIGd1dHRlcldyYXAgPSBsaW5lVmlldy5ndXR0ZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlci13cmFwcGVyXCIsIChcImxlZnQ6IFwiICsgKGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyBkaW1zLmZpeGVkUG9zIDogLWRpbXMuZ3V0dGVyVG90YWxXaWR0aCkgKyBcInB4XCIpKTtcbiAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShndXR0ZXJXcmFwKTtcbiAgICAgIHdyYXAkMS5pbnNlcnRCZWZvcmUoZ3V0dGVyV3JhcCwgbGluZVZpZXcudGV4dCk7XG4gICAgICBpZiAobGluZVZpZXcubGluZS5ndXR0ZXJDbGFzcylcbiAgICAgICAgeyBndXR0ZXJXcmFwLmNsYXNzTmFtZSArPSBcIiBcIiArIGxpbmVWaWV3LmxpbmUuZ3V0dGVyQ2xhc3M7IH1cbiAgICAgIGlmIChjbS5vcHRpb25zLmxpbmVOdW1iZXJzICYmICghbWFya2VycyB8fCAhbWFya2Vyc1tcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl0pKVxuICAgICAgICB7IGxpbmVWaWV3LmxpbmVOdW1iZXIgPSBndXR0ZXJXcmFwLmFwcGVuZENoaWxkKFxuICAgICAgICAgIGVsdChcImRpdlwiLCBsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSxcbiAgICAgICAgICAgICAgXCJDb2RlTWlycm9yLWxpbmVudW1iZXIgQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIsXG4gICAgICAgICAgICAgIChcImxlZnQ6IFwiICsgKGRpbXMuZ3V0dGVyTGVmdFtcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIl0pICsgXCJweDsgd2lkdGg6IFwiICsgKGNtLmRpc3BsYXkubGluZU51bUlubmVyV2lkdGgpICsgXCJweFwiKSkpOyB9XG4gICAgICBpZiAobWFya2VycykgeyBmb3IgKHZhciBrID0gMDsgayA8IGNtLmRpc3BsYXkuZ3V0dGVyU3BlY3MubGVuZ3RoOyArK2spIHtcbiAgICAgICAgdmFyIGlkID0gY20uZGlzcGxheS5ndXR0ZXJTcGVjc1trXS5jbGFzc05hbWUsIGZvdW5kID0gbWFya2Vycy5oYXNPd25Qcm9wZXJ0eShpZCkgJiYgbWFya2Vyc1tpZF07XG4gICAgICAgIGlmIChmb3VuZClcbiAgICAgICAgICB7IGd1dHRlcldyYXAuYXBwZW5kQ2hpbGQoZWx0KFwiZGl2XCIsIFtmb3VuZF0sIFwiQ29kZU1pcnJvci1ndXR0ZXItZWx0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwibGVmdDogXCIgKyAoZGltcy5ndXR0ZXJMZWZ0W2lkXSkgKyBcInB4OyB3aWR0aDogXCIgKyAoZGltcy5ndXR0ZXJXaWR0aFtpZF0pICsgXCJweFwiKSkpOyB9XG4gICAgICB9IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpIHtcbiAgICBpZiAobGluZVZpZXcuYWxpZ25hYmxlKSB7IGxpbmVWaWV3LmFsaWduYWJsZSA9IG51bGw7IH1cbiAgICB2YXIgaXNXaWRnZXQgPSBjbGFzc1Rlc3QoXCJDb2RlTWlycm9yLWxpbmV3aWRnZXRcIik7XG4gICAgZm9yICh2YXIgbm9kZSA9IGxpbmVWaWV3Lm5vZGUuZmlyc3RDaGlsZCwgbmV4dCA9ICh2b2lkIDApOyBub2RlOyBub2RlID0gbmV4dCkge1xuICAgICAgbmV4dCA9IG5vZGUubmV4dFNpYmxpbmc7XG4gICAgICBpZiAoaXNXaWRnZXQudGVzdChub2RlLmNsYXNzTmFtZSkpIHsgbGluZVZpZXcubm9kZS5yZW1vdmVDaGlsZChub2RlKTsgfVxuICAgIH1cbiAgICBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpO1xuICB9XG5cbiAgLy8gQnVpbGQgYSBsaW5lJ3MgRE9NIHJlcHJlc2VudGF0aW9uIGZyb20gc2NyYXRjaFxuICBmdW5jdGlvbiBidWlsZExpbmVFbGVtZW50KGNtLCBsaW5lVmlldywgbGluZU4sIGRpbXMpIHtcbiAgICB2YXIgYnVpbHQgPSBnZXRMaW5lQ29udGVudChjbSwgbGluZVZpZXcpO1xuICAgIGxpbmVWaWV3LnRleHQgPSBsaW5lVmlldy5ub2RlID0gYnVpbHQucHJlO1xuICAgIGlmIChidWlsdC5iZ0NsYXNzKSB7IGxpbmVWaWV3LmJnQ2xhc3MgPSBidWlsdC5iZ0NsYXNzOyB9XG4gICAgaWYgKGJ1aWx0LnRleHRDbGFzcykgeyBsaW5lVmlldy50ZXh0Q2xhc3MgPSBidWlsdC50ZXh0Q2xhc3M7IH1cblxuICAgIHVwZGF0ZUxpbmVDbGFzc2VzKGNtLCBsaW5lVmlldyk7XG4gICAgdXBkYXRlTGluZUd1dHRlcihjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTtcbiAgICBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpO1xuICAgIHJldHVybiBsaW5lVmlldy5ub2RlXG4gIH1cblxuICAvLyBBIGxpbmVWaWV3IG1heSBjb250YWluIG11bHRpcGxlIGxvZ2ljYWwgbGluZXMgKHdoZW4gbWVyZ2VkIGJ5XG4gIC8vIGNvbGxhcHNlZCBzcGFucykuIFRoZSB3aWRnZXRzIGZvciBhbGwgb2YgdGhlbSBuZWVkIHRvIGJlIGRyYXduLlxuICBmdW5jdGlvbiBpbnNlcnRMaW5lV2lkZ2V0cyhjbSwgbGluZVZpZXcsIGRpbXMpIHtcbiAgICBpbnNlcnRMaW5lV2lkZ2V0c0ZvcihjbSwgbGluZVZpZXcubGluZSwgbGluZVZpZXcsIGRpbXMsIHRydWUpO1xuICAgIGlmIChsaW5lVmlldy5yZXN0KSB7IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKylcbiAgICAgIHsgaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmVWaWV3LnJlc3RbaV0sIGxpbmVWaWV3LCBkaW1zLCBmYWxzZSk7IH0gfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0TGluZVdpZGdldHNGb3IoY20sIGxpbmUsIGxpbmVWaWV3LCBkaW1zLCBhbGxvd0Fib3ZlKSB7XG4gICAgaWYgKCFsaW5lLndpZGdldHMpIHsgcmV0dXJuIH1cbiAgICB2YXIgd3JhcCA9IGVuc3VyZUxpbmVXcmFwcGVkKGxpbmVWaWV3KTtcbiAgICBmb3IgKHZhciBpID0gMCwgd3MgPSBsaW5lLndpZGdldHM7IGkgPCB3cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHdpZGdldCA9IHdzW2ldLCBub2RlID0gZWx0KFwiZGl2XCIsIFt3aWRnZXQubm9kZV0sIFwiQ29kZU1pcnJvci1saW5ld2lkZ2V0XCIgKyAod2lkZ2V0LmNsYXNzTmFtZSA/IFwiIFwiICsgd2lkZ2V0LmNsYXNzTmFtZSA6IFwiXCIpKTtcbiAgICAgIGlmICghd2lkZ2V0LmhhbmRsZU1vdXNlRXZlbnRzKSB7IG5vZGUuc2V0QXR0cmlidXRlKFwiY20taWdub3JlLWV2ZW50c1wiLCBcInRydWVcIik7IH1cbiAgICAgIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKTtcbiAgICAgIGNtLmRpc3BsYXkuaW5wdXQuc2V0VW5lZGl0YWJsZShub2RlKTtcbiAgICAgIGlmIChhbGxvd0Fib3ZlICYmIHdpZGdldC5hYm92ZSlcbiAgICAgICAgeyB3cmFwLmluc2VydEJlZm9yZShub2RlLCBsaW5lVmlldy5ndXR0ZXIgfHwgbGluZVZpZXcudGV4dCk7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyB3cmFwLmFwcGVuZENoaWxkKG5vZGUpOyB9XG4gICAgICBzaWduYWxMYXRlcih3aWRnZXQsIFwicmVkcmF3XCIpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBvc2l0aW9uTGluZVdpZGdldCh3aWRnZXQsIG5vZGUsIGxpbmVWaWV3LCBkaW1zKSB7XG4gICAgaWYgKHdpZGdldC5ub0hTY3JvbGwpIHtcbiAgKGxpbmVWaWV3LmFsaWduYWJsZSB8fCAobGluZVZpZXcuYWxpZ25hYmxlID0gW10pKS5wdXNoKG5vZGUpO1xuICAgICAgdmFyIHdpZHRoID0gZGltcy53cmFwcGVyV2lkdGg7XG4gICAgICBub2RlLnN0eWxlLmxlZnQgPSBkaW1zLmZpeGVkUG9zICsgXCJweFwiO1xuICAgICAgaWYgKCF3aWRnZXQuY292ZXJHdXR0ZXIpIHtcbiAgICAgICAgd2lkdGggLT0gZGltcy5ndXR0ZXJUb3RhbFdpZHRoO1xuICAgICAgICBub2RlLnN0eWxlLnBhZGRpbmdMZWZ0ID0gZGltcy5ndXR0ZXJUb3RhbFdpZHRoICsgXCJweFwiO1xuICAgICAgfVxuICAgICAgbm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgIH1cbiAgICBpZiAod2lkZ2V0LmNvdmVyR3V0dGVyKSB7XG4gICAgICBub2RlLnN0eWxlLnpJbmRleCA9IDU7XG4gICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgaWYgKCF3aWRnZXQubm9IU2Nyb2xsKSB7IG5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IC1kaW1zLmd1dHRlclRvdGFsV2lkdGggKyBcInB4XCI7IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3aWRnZXRIZWlnaHQod2lkZ2V0KSB7XG4gICAgaWYgKHdpZGdldC5oZWlnaHQgIT0gbnVsbCkgeyByZXR1cm4gd2lkZ2V0LmhlaWdodCB9XG4gICAgdmFyIGNtID0gd2lkZ2V0LmRvYy5jbTtcbiAgICBpZiAoIWNtKSB7IHJldHVybiAwIH1cbiAgICBpZiAoIWNvbnRhaW5zKGRvY3VtZW50LmJvZHksIHdpZGdldC5ub2RlKSkge1xuICAgICAgdmFyIHBhcmVudFN0eWxlID0gXCJwb3NpdGlvbjogcmVsYXRpdmU7XCI7XG4gICAgICBpZiAod2lkZ2V0LmNvdmVyR3V0dGVyKVxuICAgICAgICB7IHBhcmVudFN0eWxlICs9IFwibWFyZ2luLWxlZnQ6IC1cIiArIGNtLmRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCArIFwicHg7XCI7IH1cbiAgICAgIGlmICh3aWRnZXQubm9IU2Nyb2xsKVxuICAgICAgICB7IHBhcmVudFN0eWxlICs9IFwid2lkdGg6IFwiICsgY20uZGlzcGxheS53cmFwcGVyLmNsaWVudFdpZHRoICsgXCJweDtcIjsgfVxuICAgICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5tZWFzdXJlLCBlbHQoXCJkaXZcIiwgW3dpZGdldC5ub2RlXSwgbnVsbCwgcGFyZW50U3R5bGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHdpZGdldC5oZWlnaHQgPSB3aWRnZXQubm9kZS5wYXJlbnROb2RlLm9mZnNldEhlaWdodFxuICB9XG5cbiAgLy8gUmV0dXJuIHRydWUgd2hlbiB0aGUgZ2l2ZW4gbW91c2UgZXZlbnQgaGFwcGVuZWQgaW4gYSB3aWRnZXRcbiAgZnVuY3Rpb24gZXZlbnRJbldpZGdldChkaXNwbGF5LCBlKSB7XG4gICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IGRpc3BsYXkud3JhcHBlcjsgbiA9IG4ucGFyZW50Tm9kZSkge1xuICAgICAgaWYgKCFuIHx8IChuLm5vZGVUeXBlID09IDEgJiYgbi5nZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIpID09IFwidHJ1ZVwiKSB8fFxuICAgICAgICAgIChuLnBhcmVudE5vZGUgPT0gZGlzcGxheS5zaXplciAmJiBuICE9IGRpc3BsYXkubW92ZXIpKVxuICAgICAgICB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gIH1cblxuICAvLyBQT1NJVElPTiBNRUFTVVJFTUVOVFxuXG4gIGZ1bmN0aW9uIHBhZGRpbmdUb3AoZGlzcGxheSkge3JldHVybiBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRUb3B9XG4gIGZ1bmN0aW9uIHBhZGRpbmdWZXJ0KGRpc3BsYXkpIHtyZXR1cm4gZGlzcGxheS5tb3Zlci5vZmZzZXRIZWlnaHQgLSBkaXNwbGF5LmxpbmVTcGFjZS5vZmZzZXRIZWlnaHR9XG4gIGZ1bmN0aW9uIHBhZGRpbmdIKGRpc3BsYXkpIHtcbiAgICBpZiAoZGlzcGxheS5jYWNoZWRQYWRkaW5nSCkgeyByZXR1cm4gZGlzcGxheS5jYWNoZWRQYWRkaW5nSCB9XG4gICAgdmFyIGUgPSByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5Lm1lYXN1cmUsIGVsdChcInByZVwiLCBcInhcIiwgXCJDb2RlTWlycm9yLWxpbmUtbGlrZVwiKSk7XG4gICAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKSA6IGUuY3VycmVudFN0eWxlO1xuICAgIHZhciBkYXRhID0ge2xlZnQ6IHBhcnNlSW50KHN0eWxlLnBhZGRpbmdMZWZ0KSwgcmlnaHQ6IHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCl9O1xuICAgIGlmICghaXNOYU4oZGF0YS5sZWZ0KSAmJiAhaXNOYU4oZGF0YS5yaWdodCkpIHsgZGlzcGxheS5jYWNoZWRQYWRkaW5nSCA9IGRhdGE7IH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgZnVuY3Rpb24gc2Nyb2xsR2FwKGNtKSB7IHJldHVybiBzY3JvbGxlckdhcCAtIGNtLmRpc3BsYXkubmF0aXZlQmFyV2lkdGggfVxuICBmdW5jdGlvbiBkaXNwbGF5V2lkdGgoY20pIHtcbiAgICByZXR1cm4gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCAtIHNjcm9sbEdhcChjbSkgLSBjbS5kaXNwbGF5LmJhcldpZHRoXG4gIH1cbiAgZnVuY3Rpb24gZGlzcGxheUhlaWdodChjbSkge1xuICAgIHJldHVybiBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudEhlaWdodCAtIHNjcm9sbEdhcChjbSkgLSBjbS5kaXNwbGF5LmJhckhlaWdodFxuICB9XG5cbiAgLy8gRW5zdXJlIHRoZSBsaW5lVmlldy53cmFwcGluZy5oZWlnaHRzIGFycmF5IGlzIHBvcHVsYXRlZC4gVGhpcyBpc1xuICAvLyBhbiBhcnJheSBvZiBib3R0b20gb2Zmc2V0cyBmb3IgdGhlIGxpbmVzIHRoYXQgbWFrZSB1cCBhIGRyYXduXG4gIC8vIGxpbmUuIFdoZW4gbGluZVdyYXBwaW5nIGlzIG9uLCB0aGVyZSBtaWdodCBiZSBtb3JlIHRoYW4gb25lXG4gIC8vIGhlaWdodC5cbiAgZnVuY3Rpb24gZW5zdXJlTGluZUhlaWdodHMoY20sIGxpbmVWaWV3LCByZWN0KSB7XG4gICAgdmFyIHdyYXBwaW5nID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gICAgdmFyIGN1cldpZHRoID0gd3JhcHBpbmcgJiYgZGlzcGxheVdpZHRoKGNtKTtcbiAgICBpZiAoIWxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyB8fCB3cmFwcGluZyAmJiBsaW5lVmlldy5tZWFzdXJlLndpZHRoICE9IGN1cldpZHRoKSB7XG4gICAgICB2YXIgaGVpZ2h0cyA9IGxpbmVWaWV3Lm1lYXN1cmUuaGVpZ2h0cyA9IFtdO1xuICAgICAgaWYgKHdyYXBwaW5nKSB7XG4gICAgICAgIGxpbmVWaWV3Lm1lYXN1cmUud2lkdGggPSBjdXJXaWR0aDtcbiAgICAgICAgdmFyIHJlY3RzID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLmdldENsaWVudFJlY3RzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgdmFyIGN1ciA9IHJlY3RzW2ldLCBuZXh0ID0gcmVjdHNbaSArIDFdO1xuICAgICAgICAgIGlmIChNYXRoLmFicyhjdXIuYm90dG9tIC0gbmV4dC5ib3R0b20pID4gMilcbiAgICAgICAgICAgIHsgaGVpZ2h0cy5wdXNoKChjdXIuYm90dG9tICsgbmV4dC50b3ApIC8gMiAtIHJlY3QudG9wKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoZWlnaHRzLnB1c2gocmVjdC5ib3R0b20gLSByZWN0LnRvcCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCBhIGxpbmUgbWFwIChtYXBwaW5nIGNoYXJhY3RlciBvZmZzZXRzIHRvIHRleHQgbm9kZXMpIGFuZCBhXG4gIC8vIG1lYXN1cmVtZW50IGNhY2hlIGZvciB0aGUgZ2l2ZW4gbGluZSBudW1iZXIuIChBIGxpbmUgdmlldyBtaWdodFxuICAvLyBjb250YWluIG11bHRpcGxlIGxpbmVzIHdoZW4gY29sbGFwc2VkIHJhbmdlcyBhcmUgcHJlc2VudC4pXG4gIGZ1bmN0aW9uIG1hcEZyb21MaW5lVmlldyhsaW5lVmlldywgbGluZSwgbGluZU4pIHtcbiAgICBpZiAobGluZVZpZXcubGluZSA9PSBsaW5lKVxuICAgICAgeyByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXAsIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlfSB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lVmlldy5yZXN0Lmxlbmd0aDsgaSsrKVxuICAgICAgeyBpZiAobGluZVZpZXcucmVzdFtpXSA9PSBsaW5lKVxuICAgICAgICB7IHJldHVybiB7bWFwOiBsaW5lVmlldy5tZWFzdXJlLm1hcHNbaV0sIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXX0gfSB9XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkkMSsrKVxuICAgICAgeyBpZiAobGluZU5vKGxpbmVWaWV3LnJlc3RbaSQxXSkgPiBsaW5lTilcbiAgICAgICAgeyByZXR1cm4ge21hcDogbGluZVZpZXcubWVhc3VyZS5tYXBzW2kkMV0sIGNhY2hlOiBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpJDFdLCBiZWZvcmU6IHRydWV9IH0gfVxuICB9XG5cbiAgLy8gUmVuZGVyIGEgbGluZSBpbnRvIHRoZSBoaWRkZW4gbm9kZSBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQuIFVzZWRcbiAgLy8gd2hlbiBtZWFzdXJlbWVudCBpcyBuZWVkZWQgZm9yIGEgbGluZSB0aGF0J3Mgbm90IGluIHRoZSB2aWV3cG9ydC5cbiAgZnVuY3Rpb24gdXBkYXRlRXh0ZXJuYWxNZWFzdXJlbWVudChjbSwgbGluZSkge1xuICAgIGxpbmUgPSB2aXN1YWxMaW5lKGxpbmUpO1xuICAgIHZhciBsaW5lTiA9IGxpbmVObyhsaW5lKTtcbiAgICB2YXIgdmlldyA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG5ldyBMaW5lVmlldyhjbS5kb2MsIGxpbmUsIGxpbmVOKTtcbiAgICB2aWV3LmxpbmVOID0gbGluZU47XG4gICAgdmFyIGJ1aWx0ID0gdmlldy5idWlsdCA9IGJ1aWxkTGluZUNvbnRlbnQoY20sIHZpZXcpO1xuICAgIHZpZXcudGV4dCA9IGJ1aWx0LnByZTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChjbS5kaXNwbGF5LmxpbmVNZWFzdXJlLCBidWlsdC5wcmUpO1xuICAgIHJldHVybiB2aWV3XG4gIH1cblxuICAvLyBHZXQgYSB7dG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0fSBib3ggKGluIGxpbmUtbG9jYWwgY29vcmRpbmF0ZXMpXG4gIC8vIGZvciBhIGdpdmVuIGNoYXJhY3Rlci5cbiAgZnVuY3Rpb24gbWVhc3VyZUNoYXIoY20sIGxpbmUsIGNoLCBiaWFzKSB7XG4gICAgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZSksIGNoLCBiaWFzKVxuICB9XG5cbiAgLy8gRmluZCBhIGxpbmUgdmlldyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBsaW5lIG51bWJlci5cbiAgZnVuY3Rpb24gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTikge1xuICAgIGlmIChsaW5lTiA+PSBjbS5kaXNwbGF5LnZpZXdGcm9tICYmIGxpbmVOIDwgY20uZGlzcGxheS52aWV3VG8pXG4gICAgICB7IHJldHVybiBjbS5kaXNwbGF5LnZpZXdbZmluZFZpZXdJbmRleChjbSwgbGluZU4pXSB9XG4gICAgdmFyIGV4dCA9IGNtLmRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtcbiAgICBpZiAoZXh0ICYmIGxpbmVOID49IGV4dC5saW5lTiAmJiBsaW5lTiA8IGV4dC5saW5lTiArIGV4dC5zaXplKVxuICAgICAgeyByZXR1cm4gZXh0IH1cbiAgfVxuXG4gIC8vIE1lYXN1cmVtZW50IGNhbiBiZSBzcGxpdCBpbiB0d28gc3RlcHMsIHRoZSBzZXQtdXAgd29yayB0aGF0XG4gIC8vIGFwcGxpZXMgdG8gdGhlIHdob2xlIGxpbmUsIGFuZCB0aGUgbWVhc3VyZW1lbnQgb2YgdGhlIGFjdHVhbFxuICAvLyBjaGFyYWN0ZXIuIEZ1bmN0aW9ucyBsaWtlIGNvb3Jkc0NoYXIsIHRoYXQgbmVlZCB0byBkbyBhIGxvdCBvZlxuICAvLyBtZWFzdXJlbWVudHMgaW4gYSByb3csIGNhbiB0aHVzIGVuc3VyZSB0aGF0IHRoZSBzZXQtdXAgd29yayBpc1xuICAvLyBvbmx5IGRvbmUgb25jZS5cbiAgZnVuY3Rpb24gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKSB7XG4gICAgdmFyIGxpbmVOID0gbGluZU5vKGxpbmUpO1xuICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7XG4gICAgaWYgKHZpZXcgJiYgIXZpZXcudGV4dCkge1xuICAgICAgdmlldyA9IG51bGw7XG4gICAgfSBlbHNlIGlmICh2aWV3ICYmIHZpZXcuY2hhbmdlcykge1xuICAgICAgdXBkYXRlTGluZUZvckNoYW5nZXMoY20sIHZpZXcsIGxpbmVOLCBnZXREaW1lbnNpb25zKGNtKSk7XG4gICAgICBjbS5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICghdmlldylcbiAgICAgIHsgdmlldyA9IHVwZGF0ZUV4dGVybmFsTWVhc3VyZW1lbnQoY20sIGxpbmUpOyB9XG5cbiAgICB2YXIgaW5mbyA9IG1hcEZyb21MaW5lVmlldyh2aWV3LCBsaW5lLCBsaW5lTik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IGxpbmUsIHZpZXc6IHZpZXcsIHJlY3Q6IG51bGwsXG4gICAgICBtYXA6IGluZm8ubWFwLCBjYWNoZTogaW5mby5jYWNoZSwgYmVmb3JlOiBpbmZvLmJlZm9yZSxcbiAgICAgIGhhc0hlaWdodHM6IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gR2l2ZW4gYSBwcmVwYXJlZCBtZWFzdXJlbWVudCBvYmplY3QsIG1lYXN1cmVzIHRoZSBwb3NpdGlvbiBvZiBhblxuICAvLyBhY3R1YWwgY2hhcmFjdGVyIChvciBmZXRjaGVzIGl0IGZyb20gdGhlIGNhY2hlKS5cbiAgZnVuY3Rpb24gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWQsIGNoLCBiaWFzLCB2YXJIZWlnaHQpIHtcbiAgICBpZiAocHJlcGFyZWQuYmVmb3JlKSB7IGNoID0gLTE7IH1cbiAgICB2YXIga2V5ID0gY2ggKyAoYmlhcyB8fCBcIlwiKSwgZm91bmQ7XG4gICAgaWYgKHByZXBhcmVkLmNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGZvdW5kID0gcHJlcGFyZWQuY2FjaGVba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFwcmVwYXJlZC5yZWN0KVxuICAgICAgICB7IHByZXBhcmVkLnJlY3QgPSBwcmVwYXJlZC52aWV3LnRleHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IH1cbiAgICAgIGlmICghcHJlcGFyZWQuaGFzSGVpZ2h0cykge1xuICAgICAgICBlbnN1cmVMaW5lSGVpZ2h0cyhjbSwgcHJlcGFyZWQudmlldywgcHJlcGFyZWQucmVjdCk7XG4gICAgICAgIHByZXBhcmVkLmhhc0hlaWdodHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZm91bmQgPSBtZWFzdXJlQ2hhcklubmVyKGNtLCBwcmVwYXJlZCwgY2gsIGJpYXMpO1xuICAgICAgaWYgKCFmb3VuZC5ib2d1cykgeyBwcmVwYXJlZC5jYWNoZVtrZXldID0gZm91bmQ7IH1cbiAgICB9XG4gICAgcmV0dXJuIHtsZWZ0OiBmb3VuZC5sZWZ0LCByaWdodDogZm91bmQucmlnaHQsXG4gICAgICAgICAgICB0b3A6IHZhckhlaWdodCA/IGZvdW5kLnJ0b3AgOiBmb3VuZC50b3AsXG4gICAgICAgICAgICBib3R0b206IHZhckhlaWdodCA/IGZvdW5kLnJib3R0b20gOiBmb3VuZC5ib3R0b219XG4gIH1cblxuICB2YXIgbnVsbFJlY3QgPSB7bGVmdDogMCwgcmlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwfTtcblxuICBmdW5jdGlvbiBub2RlQW5kT2Zmc2V0SW5MaW5lTWFwKG1hcCwgY2gsIGJpYXMpIHtcbiAgICB2YXIgbm9kZSwgc3RhcnQsIGVuZCwgY29sbGFwc2UsIG1TdGFydCwgbUVuZDtcbiAgICAvLyBGaXJzdCwgc2VhcmNoIHRoZSBsaW5lIG1hcCBmb3IgdGhlIHRleHQgbm9kZSBjb3JyZXNwb25kaW5nIHRvLFxuICAgIC8vIG9yIGNsb3Nlc3QgdG8sIHRoZSB0YXJnZXQgY2hhcmFjdGVyLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICBtU3RhcnQgPSBtYXBbaV07XG4gICAgICBtRW5kID0gbWFwW2kgKyAxXTtcbiAgICAgIGlmIChjaCA8IG1TdGFydCkge1xuICAgICAgICBzdGFydCA9IDA7IGVuZCA9IDE7XG4gICAgICAgIGNvbGxhcHNlID0gXCJsZWZ0XCI7XG4gICAgICB9IGVsc2UgaWYgKGNoIDwgbUVuZCkge1xuICAgICAgICBzdGFydCA9IGNoIC0gbVN0YXJ0O1xuICAgICAgICBlbmQgPSBzdGFydCArIDE7XG4gICAgICB9IGVsc2UgaWYgKGkgPT0gbWFwLmxlbmd0aCAtIDMgfHwgY2ggPT0gbUVuZCAmJiBtYXBbaSArIDNdID4gY2gpIHtcbiAgICAgICAgZW5kID0gbUVuZCAtIG1TdGFydDtcbiAgICAgICAgc3RhcnQgPSBlbmQgLSAxO1xuICAgICAgICBpZiAoY2ggPj0gbUVuZCkgeyBjb2xsYXBzZSA9IFwicmlnaHRcIjsgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ICE9IG51bGwpIHtcbiAgICAgICAgbm9kZSA9IG1hcFtpICsgMl07XG4gICAgICAgIGlmIChtU3RhcnQgPT0gbUVuZCAmJiBiaWFzID09IChub2RlLmluc2VydExlZnQgPyBcImxlZnRcIiA6IFwicmlnaHRcIikpXG4gICAgICAgICAgeyBjb2xsYXBzZSA9IGJpYXM7IH1cbiAgICAgICAgaWYgKGJpYXMgPT0gXCJsZWZ0XCIgJiYgc3RhcnQgPT0gMClcbiAgICAgICAgICB7IHdoaWxlIChpICYmIG1hcFtpIC0gMl0gPT0gbWFwW2kgLSAzXSAmJiBtYXBbaSAtIDFdLmluc2VydExlZnQpIHtcbiAgICAgICAgICAgIG5vZGUgPSBtYXBbKGkgLT0gMykgKyAyXTtcbiAgICAgICAgICAgIGNvbGxhcHNlID0gXCJsZWZ0XCI7XG4gICAgICAgICAgfSB9XG4gICAgICAgIGlmIChiaWFzID09IFwicmlnaHRcIiAmJiBzdGFydCA9PSBtRW5kIC0gbVN0YXJ0KVxuICAgICAgICAgIHsgd2hpbGUgKGkgPCBtYXAubGVuZ3RoIC0gMyAmJiBtYXBbaSArIDNdID09IG1hcFtpICsgNF0gJiYgIW1hcFtpICsgNV0uaW5zZXJ0TGVmdCkge1xuICAgICAgICAgICAgbm9kZSA9IG1hcFsoaSArPSAzKSArIDJdO1xuICAgICAgICAgICAgY29sbGFwc2UgPSBcInJpZ2h0XCI7XG4gICAgICAgICAgfSB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7bm9kZTogbm9kZSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCwgY29sbGFwc2U6IGNvbGxhcHNlLCBjb3ZlclN0YXJ0OiBtU3RhcnQsIGNvdmVyRW5kOiBtRW5kfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VXNlZnVsUmVjdChyZWN0cywgYmlhcykge1xuICAgIHZhciByZWN0ID0gbnVsbFJlY3Q7XG4gICAgaWYgKGJpYXMgPT0gXCJsZWZ0XCIpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCByZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKChyZWN0ID0gcmVjdHNbaV0pLmxlZnQgIT0gcmVjdC5yaWdodCkgeyBicmVhayB9XG4gICAgfSB9IGVsc2UgeyBmb3IgKHZhciBpJDEgPSByZWN0cy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pIHtcbiAgICAgIGlmICgocmVjdCA9IHJlY3RzW2kkMV0pLmxlZnQgIT0gcmVjdC5yaWdodCkgeyBicmVhayB9XG4gICAgfSB9XG4gICAgcmV0dXJuIHJlY3RcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lYXN1cmVDaGFySW5uZXIoY20sIHByZXBhcmVkLCBjaCwgYmlhcykge1xuICAgIHZhciBwbGFjZSA9IG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAocHJlcGFyZWQubWFwLCBjaCwgYmlhcyk7XG4gICAgdmFyIG5vZGUgPSBwbGFjZS5ub2RlLCBzdGFydCA9IHBsYWNlLnN0YXJ0LCBlbmQgPSBwbGFjZS5lbmQsIGNvbGxhcHNlID0gcGxhY2UuY29sbGFwc2U7XG5cbiAgICB2YXIgcmVjdDtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSAzKSB7IC8vIElmIGl0IGlzIGEgdGV4dCBub2RlLCB1c2UgYSByYW5nZSB0byByZXRyaWV2ZSB0aGUgY29vcmRpbmF0ZXMuXG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCA0OyBpJDErKykgeyAvLyBSZXRyeSBhIG1heGltdW0gb2YgNCB0aW1lcyB3aGVuIG5vbnNlbnNlIHJlY3RhbmdsZXMgYXJlIHJldHVybmVkXG4gICAgICAgIHdoaWxlIChzdGFydCAmJiBpc0V4dGVuZGluZ0NoYXIocHJlcGFyZWQubGluZS50ZXh0LmNoYXJBdChwbGFjZS5jb3ZlclN0YXJ0ICsgc3RhcnQpKSkgeyAtLXN0YXJ0OyB9XG4gICAgICAgIHdoaWxlIChwbGFjZS5jb3ZlclN0YXJ0ICsgZW5kIDwgcGxhY2UuY292ZXJFbmQgJiYgaXNFeHRlbmRpbmdDaGFyKHByZXBhcmVkLmxpbmUudGV4dC5jaGFyQXQocGxhY2UuY292ZXJTdGFydCArIGVuZCkpKSB7ICsrZW5kOyB9XG4gICAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOSAmJiBzdGFydCA9PSAwICYmIGVuZCA9PSBwbGFjZS5jb3ZlckVuZCAtIHBsYWNlLmNvdmVyU3RhcnQpXG4gICAgICAgICAgeyByZWN0ID0gbm9kZS5wYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IHJlY3QgPSBnZXRVc2VmdWxSZWN0KHJhbmdlKG5vZGUsIHN0YXJ0LCBlbmQpLmdldENsaWVudFJlY3RzKCksIGJpYXMpOyB9XG4gICAgICAgIGlmIChyZWN0LmxlZnQgfHwgcmVjdC5yaWdodCB8fCBzdGFydCA9PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQgLSAxO1xuICAgICAgICBjb2xsYXBzZSA9IFwicmlnaHRcIjtcbiAgICAgIH1cbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgMTEpIHsgcmVjdCA9IG1heWJlVXBkYXRlUmVjdEZvclpvb21pbmcoY20uZGlzcGxheS5tZWFzdXJlLCByZWN0KTsgfVxuICAgIH0gZWxzZSB7IC8vIElmIGl0IGlzIGEgd2lkZ2V0LCBzaW1wbHkgZ2V0IHRoZSBib3ggZm9yIHRoZSB3aG9sZSB3aWRnZXQuXG4gICAgICBpZiAoc3RhcnQgPiAwKSB7IGNvbGxhcHNlID0gYmlhcyA9IFwicmlnaHRcIjsgfVxuICAgICAgdmFyIHJlY3RzO1xuICAgICAgaWYgKGNtLm9wdGlvbnMubGluZVdyYXBwaW5nICYmIChyZWN0cyA9IG5vZGUuZ2V0Q2xpZW50UmVjdHMoKSkubGVuZ3RoID4gMSlcbiAgICAgICAgeyByZWN0ID0gcmVjdHNbYmlhcyA9PSBcInJpZ2h0XCIgPyByZWN0cy5sZW5ndGggLSAxIDogMF07IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgfVxuICAgIH1cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkgJiYgIXN0YXJ0ICYmICghcmVjdCB8fCAhcmVjdC5sZWZ0ICYmICFyZWN0LnJpZ2h0KSkge1xuICAgICAgdmFyIHJTcGFuID0gbm9kZS5wYXJlbnROb2RlLmdldENsaWVudFJlY3RzKClbMF07XG4gICAgICBpZiAoclNwYW4pXG4gICAgICAgIHsgcmVjdCA9IHtsZWZ0OiByU3Bhbi5sZWZ0LCByaWdodDogclNwYW4ubGVmdCArIGNoYXJXaWR0aChjbS5kaXNwbGF5KSwgdG9wOiByU3Bhbi50b3AsIGJvdHRvbTogclNwYW4uYm90dG9tfTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJlY3QgPSBudWxsUmVjdDsgfVxuICAgIH1cblxuICAgIHZhciBydG9wID0gcmVjdC50b3AgLSBwcmVwYXJlZC5yZWN0LnRvcCwgcmJvdCA9IHJlY3QuYm90dG9tIC0gcHJlcGFyZWQucmVjdC50b3A7XG4gICAgdmFyIG1pZCA9IChydG9wICsgcmJvdCkgLyAyO1xuICAgIHZhciBoZWlnaHRzID0gcHJlcGFyZWQudmlldy5tZWFzdXJlLmhlaWdodHM7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgaGVpZ2h0cy5sZW5ndGggLSAxOyBpKyspXG4gICAgICB7IGlmIChtaWQgPCBoZWlnaHRzW2ldKSB7IGJyZWFrIH0gfVxuICAgIHZhciB0b3AgPSBpID8gaGVpZ2h0c1tpIC0gMV0gOiAwLCBib3QgPSBoZWlnaHRzW2ldO1xuICAgIHZhciByZXN1bHQgPSB7bGVmdDogKGNvbGxhcHNlID09IFwicmlnaHRcIiA/IHJlY3QucmlnaHQgOiByZWN0LmxlZnQpIC0gcHJlcGFyZWQucmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IChjb2xsYXBzZSA9PSBcImxlZnRcIiA/IHJlY3QubGVmdCA6IHJlY3QucmlnaHQpIC0gcHJlcGFyZWQucmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgdG9wOiB0b3AsIGJvdHRvbTogYm90fTtcbiAgICBpZiAoIXJlY3QubGVmdCAmJiAhcmVjdC5yaWdodCkgeyByZXN1bHQuYm9ndXMgPSB0cnVlOyB9XG4gICAgaWYgKCFjbS5vcHRpb25zLnNpbmdsZUN1cnNvckhlaWdodFBlckxpbmUpIHsgcmVzdWx0LnJ0b3AgPSBydG9wOyByZXN1bHQucmJvdHRvbSA9IHJib3Q7IH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIFdvcmsgYXJvdW5kIHByb2JsZW0gd2l0aCBib3VuZGluZyBjbGllbnQgcmVjdHMgb24gcmFuZ2VzIGJlaW5nXG4gIC8vIHJldHVybmVkIGluY29ycmVjdGx5IHdoZW4gem9vbWVkIG9uIElFMTAgYW5kIGJlbG93LlxuICBmdW5jdGlvbiBtYXliZVVwZGF0ZVJlY3RGb3Jab29taW5nKG1lYXN1cmUsIHJlY3QpIHtcbiAgICBpZiAoIXdpbmRvdy5zY3JlZW4gfHwgc2NyZWVuLmxvZ2ljYWxYRFBJID09IG51bGwgfHxcbiAgICAgICAgc2NyZWVuLmxvZ2ljYWxYRFBJID09IHNjcmVlbi5kZXZpY2VYRFBJIHx8ICFoYXNCYWRab29tZWRSZWN0cyhtZWFzdXJlKSlcbiAgICAgIHsgcmV0dXJuIHJlY3QgfVxuICAgIHZhciBzY2FsZVggPSBzY3JlZW4ubG9naWNhbFhEUEkgLyBzY3JlZW4uZGV2aWNlWERQSTtcbiAgICB2YXIgc2NhbGVZID0gc2NyZWVuLmxvZ2ljYWxZRFBJIC8gc2NyZWVuLmRldmljZVlEUEk7XG4gICAgcmV0dXJuIHtsZWZ0OiByZWN0LmxlZnQgKiBzY2FsZVgsIHJpZ2h0OiByZWN0LnJpZ2h0ICogc2NhbGVYLFxuICAgICAgICAgICAgdG9wOiByZWN0LnRvcCAqIHNjYWxlWSwgYm90dG9tOiByZWN0LmJvdHRvbSAqIHNjYWxlWX1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGVGb3IobGluZVZpZXcpIHtcbiAgICBpZiAobGluZVZpZXcubWVhc3VyZSkge1xuICAgICAgbGluZVZpZXcubWVhc3VyZS5jYWNoZSA9IHt9O1xuICAgICAgbGluZVZpZXcubWVhc3VyZS5oZWlnaHRzID0gbnVsbDtcbiAgICAgIGlmIChsaW5lVmlldy5yZXN0KSB7IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZVZpZXcucmVzdC5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBsaW5lVmlldy5tZWFzdXJlLmNhY2hlc1tpXSA9IHt9OyB9IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlKGNtKSB7XG4gICAgY20uZGlzcGxheS5leHRlcm5hbE1lYXN1cmUgPSBudWxsO1xuICAgIHJlbW92ZUNoaWxkcmVuKGNtLmRpc3BsYXkubGluZU1lYXN1cmUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKVxuICAgICAgeyBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKGNtLmRpc3BsYXkudmlld1tpXSk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ2FjaGVzKGNtKSB7XG4gICAgY2xlYXJMaW5lTWVhc3VyZW1lbnRDYWNoZShjbSk7XG4gICAgY20uZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggPSBjbS5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgPSBjbS5kaXNwbGF5LmNhY2hlZFBhZGRpbmdIID0gbnVsbDtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlOyB9XG4gICAgY20uZGlzcGxheS5saW5lTnVtQ2hhcnMgPSBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFnZVNjcm9sbFgoKSB7XG4gICAgLy8gV29yayBhcm91bmQgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDg5MjA2XG4gICAgLy8gd2hpY2ggY2F1c2VzIHBhZ2VfT2Zmc2V0IGFuZCBib3VuZGluZyBjbGllbnQgcmVjdHMgdG8gdXNlXG4gICAgLy8gZGlmZmVyZW50IHJlZmVyZW5jZSB2aWV3cG9ydHMgYW5kIGludmFsaWRhdGUgb3VyIGNhbGN1bGF0aW9ucy5cbiAgICBpZiAoY2hyb21lICYmIGFuZHJvaWQpIHsgcmV0dXJuIC0oZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5MZWZ0KSkgfVxuICAgIHJldHVybiB3aW5kb3cucGFnZVhPZmZzZXQgfHwgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KS5zY3JvbGxMZWZ0XG4gIH1cbiAgZnVuY3Rpb24gcGFnZVNjcm9sbFkoKSB7XG4gICAgaWYgKGNocm9tZSAmJiBhbmRyb2lkKSB7IHJldHVybiAtKGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5tYXJnaW5Ub3ApKSB9XG4gICAgcmV0dXJuIHdpbmRvdy5wYWdlWU9mZnNldCB8fCAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGRvY3VtZW50LmJvZHkpLnNjcm9sbFRvcFxuICB9XG5cbiAgZnVuY3Rpb24gd2lkZ2V0VG9wSGVpZ2h0KGxpbmVPYmopIHtcbiAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICBpZiAobGluZU9iai53aWRnZXRzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZU9iai53aWRnZXRzLmxlbmd0aDsgKytpKSB7IGlmIChsaW5lT2JqLndpZGdldHNbaV0uYWJvdmUpXG4gICAgICB7IGhlaWdodCArPSB3aWRnZXRIZWlnaHQobGluZU9iai53aWRnZXRzW2ldKTsgfSB9IH1cbiAgICByZXR1cm4gaGVpZ2h0XG4gIH1cblxuICAvLyBDb252ZXJ0cyBhIHt0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHR9IGJveCBmcm9tIGxpbmUtbG9jYWxcbiAgLy8gY29vcmRpbmF0ZXMgaW50byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLiBDb250ZXh0IG1heSBiZSBvbmUgb2ZcbiAgLy8gXCJsaW5lXCIsIFwiZGl2XCIgKGRpc3BsYXkubGluZURpdiksIFwibG9jYWxcIi4vbnVsbCAoZWRpdG9yKSwgXCJ3aW5kb3dcIixcbiAgLy8gb3IgXCJwYWdlXCIuXG4gIGZ1bmN0aW9uIGludG9Db29yZFN5c3RlbShjbSwgbGluZU9iaiwgcmVjdCwgY29udGV4dCwgaW5jbHVkZVdpZGdldHMpIHtcbiAgICBpZiAoIWluY2x1ZGVXaWRnZXRzKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gd2lkZ2V0VG9wSGVpZ2h0KGxpbmVPYmopO1xuICAgICAgcmVjdC50b3AgKz0gaGVpZ2h0OyByZWN0LmJvdHRvbSArPSBoZWlnaHQ7XG4gICAgfVxuICAgIGlmIChjb250ZXh0ID09IFwibGluZVwiKSB7IHJldHVybiByZWN0IH1cbiAgICBpZiAoIWNvbnRleHQpIHsgY29udGV4dCA9IFwibG9jYWxcIjsgfVxuICAgIHZhciB5T2ZmID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopO1xuICAgIGlmIChjb250ZXh0ID09IFwibG9jYWxcIikgeyB5T2ZmICs9IHBhZGRpbmdUb3AoY20uZGlzcGxheSk7IH1cbiAgICBlbHNlIHsgeU9mZiAtPSBjbS5kaXNwbGF5LnZpZXdPZmZzZXQ7IH1cbiAgICBpZiAoY29udGV4dCA9PSBcInBhZ2VcIiB8fCBjb250ZXh0ID09IFwid2luZG93XCIpIHtcbiAgICAgIHZhciBsT2ZmID0gY20uZGlzcGxheS5saW5lU3BhY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB5T2ZmICs9IGxPZmYudG9wICsgKGNvbnRleHQgPT0gXCJ3aW5kb3dcIiA/IDAgOiBwYWdlU2Nyb2xsWSgpKTtcbiAgICAgIHZhciB4T2ZmID0gbE9mZi5sZWZ0ICsgKGNvbnRleHQgPT0gXCJ3aW5kb3dcIiA/IDAgOiBwYWdlU2Nyb2xsWCgpKTtcbiAgICAgIHJlY3QubGVmdCArPSB4T2ZmOyByZWN0LnJpZ2h0ICs9IHhPZmY7XG4gICAgfVxuICAgIHJlY3QudG9wICs9IHlPZmY7IHJlY3QuYm90dG9tICs9IHlPZmY7XG4gICAgcmV0dXJuIHJlY3RcbiAgfVxuXG4gIC8vIENvdmVydHMgYSBib3ggZnJvbSBcImRpdlwiIGNvb3JkcyB0byBhbm90aGVyIGNvb3JkaW5hdGUgc3lzdGVtLlxuICAvLyBDb250ZXh0IG1heSBiZSBcIndpbmRvd1wiLCBcInBhZ2VcIiwgXCJkaXZcIiwgb3IgXCJsb2NhbFwiLi9udWxsLlxuICBmdW5jdGlvbiBmcm9tQ29vcmRTeXN0ZW0oY20sIGNvb3JkcywgY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09IFwiZGl2XCIpIHsgcmV0dXJuIGNvb3JkcyB9XG4gICAgdmFyIGxlZnQgPSBjb29yZHMubGVmdCwgdG9wID0gY29vcmRzLnRvcDtcbiAgICAvLyBGaXJzdCBtb3ZlIGludG8gXCJwYWdlXCIgY29vcmRpbmF0ZSBzeXN0ZW1cbiAgICBpZiAoY29udGV4dCA9PSBcInBhZ2VcIikge1xuICAgICAgbGVmdCAtPSBwYWdlU2Nyb2xsWCgpO1xuICAgICAgdG9wIC09IHBhZ2VTY3JvbGxZKCk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09IFwibG9jYWxcIiB8fCAhY29udGV4dCkge1xuICAgICAgdmFyIGxvY2FsQm94ID0gY20uZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGxlZnQgKz0gbG9jYWxCb3gubGVmdDtcbiAgICAgIHRvcCArPSBsb2NhbEJveC50b3A7XG4gICAgfVxuXG4gICAgdmFyIGxpbmVTcGFjZUJveCA9IGNtLmRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7bGVmdDogbGVmdCAtIGxpbmVTcGFjZUJveC5sZWZ0LCB0b3A6IHRvcCAtIGxpbmVTcGFjZUJveC50b3B9XG4gIH1cblxuICBmdW5jdGlvbiBjaGFyQ29vcmRzKGNtLCBwb3MsIGNvbnRleHQsIGxpbmVPYmosIGJpYXMpIHtcbiAgICBpZiAoIWxpbmVPYmopIHsgbGluZU9iaiA9IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7IH1cbiAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtZWFzdXJlQ2hhcihjbSwgbGluZU9iaiwgcG9zLmNoLCBiaWFzKSwgY29udGV4dClcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib3ggZm9yIGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB3aGljaCBtYXkgaGF2ZSBhblxuICAvLyAnb3RoZXInIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlIHBvc2l0aW9uIG9mIHRoZSBzZWNvbmRhcnkgY3Vyc29yXG4gIC8vIG9uIGEgYmlkaSBib3VuZGFyeS5cbiAgLy8gQSBjdXJzb3IgUG9zKGxpbmUsIGNoYXIsIFwiYmVmb3JlXCIpIGlzIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lIGFzIGBjaGFyIC0gMWBcbiAgLy8gYW5kIGFmdGVyIGBjaGFyIC0gMWAgaW4gd3JpdGluZyBvcmRlciBvZiBgY2hhciAtIDFgXG4gIC8vIEEgY3Vyc29yIFBvcyhsaW5lLCBjaGFyLCBcImFmdGVyXCIpIGlzIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lIGFzIGBjaGFyYFxuICAvLyBhbmQgYmVmb3JlIGBjaGFyYCBpbiB3cml0aW5nIG9yZGVyIG9mIGBjaGFyYFxuICAvLyBFeGFtcGxlcyAodXBwZXItY2FzZSBsZXR0ZXJzIGFyZSBSVEwsIGxvd2VyLWNhc2UgYXJlIExUUik6XG4gIC8vICAgICBQb3MoMCwgMSwgLi4uKVxuICAvLyAgICAgYmVmb3JlICAgYWZ0ZXJcbiAgLy8gYWIgICAgIGF8YiAgICAgYXxiXG4gIC8vIGFCICAgICBhfEIgICAgIGFCfFxuICAvLyBBYiAgICAgfEFiICAgICBBfGJcbiAgLy8gQUIgICAgIEJ8QSAgICAgQnxBXG4gIC8vIEV2ZXJ5IHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvbiBhIGxpbmUgaXMgY29uc2lkZXJlZCB0byBzdGlja1xuICAvLyB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgb24gdGhlIGxpbmUuXG4gIGZ1bmN0aW9uIGN1cnNvckNvb3JkcyhjbSwgcG9zLCBjb250ZXh0LCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUsIHZhckhlaWdodCkge1xuICAgIGxpbmVPYmogPSBsaW5lT2JqIHx8IGdldExpbmUoY20uZG9jLCBwb3MubGluZSk7XG4gICAgaWYgKCFwcmVwYXJlZE1lYXN1cmUpIHsgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsgfVxuICAgIGZ1bmN0aW9uIGdldChjaCwgcmlnaHQpIHtcbiAgICAgIHZhciBtID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcGFyZWRNZWFzdXJlLCBjaCwgcmlnaHQgPyBcInJpZ2h0XCIgOiBcImxlZnRcIiwgdmFySGVpZ2h0KTtcbiAgICAgIGlmIChyaWdodCkgeyBtLmxlZnQgPSBtLnJpZ2h0OyB9IGVsc2UgeyBtLnJpZ2h0ID0gbS5sZWZ0OyB9XG4gICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKGNtLCBsaW5lT2JqLCBtLCBjb250ZXh0KVxuICAgIH1cbiAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lT2JqLCBjbS5kb2MuZGlyZWN0aW9uKSwgY2ggPSBwb3MuY2gsIHN0aWNreSA9IHBvcy5zdGlja3k7XG4gICAgaWYgKGNoID49IGxpbmVPYmoudGV4dC5sZW5ndGgpIHtcbiAgICAgIGNoID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICAgIHN0aWNreSA9IFwiYmVmb3JlXCI7XG4gICAgfSBlbHNlIGlmIChjaCA8PSAwKSB7XG4gICAgICBjaCA9IDA7XG4gICAgICBzdGlja3kgPSBcImFmdGVyXCI7XG4gICAgfVxuICAgIGlmICghb3JkZXIpIHsgcmV0dXJuIGdldChzdGlja3kgPT0gXCJiZWZvcmVcIiA/IGNoIC0gMSA6IGNoLCBzdGlja3kgPT0gXCJiZWZvcmVcIikgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QmlkaShjaCwgcGFydFBvcywgaW52ZXJ0KSB7XG4gICAgICB2YXIgcGFydCA9IG9yZGVyW3BhcnRQb3NdLCByaWdodCA9IHBhcnQubGV2ZWwgPT0gMTtcbiAgICAgIHJldHVybiBnZXQoaW52ZXJ0ID8gY2ggLSAxIDogY2gsIHJpZ2h0ICE9IGludmVydClcbiAgICB9XG4gICAgdmFyIHBhcnRQb3MgPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBjaCwgc3RpY2t5KTtcbiAgICB2YXIgb3RoZXIgPSBiaWRpT3RoZXI7XG4gICAgdmFyIHZhbCA9IGdldEJpZGkoY2gsIHBhcnRQb3MsIHN0aWNreSA9PSBcImJlZm9yZVwiKTtcbiAgICBpZiAob3RoZXIgIT0gbnVsbCkgeyB2YWwub3RoZXIgPSBnZXRCaWRpKGNoLCBvdGhlciwgc3RpY2t5ICE9IFwiYmVmb3JlXCIpOyB9XG4gICAgcmV0dXJuIHZhbFxuICB9XG5cbiAgLy8gVXNlZCB0byBjaGVhcGx5IGVzdGltYXRlIHRoZSBjb29yZGluYXRlcyBmb3IgYSBwb3NpdGlvbi4gVXNlZCBmb3JcbiAgLy8gaW50ZXJtZWRpYXRlIHNjcm9sbCB1cGRhdGVzLlxuICBmdW5jdGlvbiBlc3RpbWF0ZUNvb3JkcyhjbSwgcG9zKSB7XG4gICAgdmFyIGxlZnQgPSAwO1xuICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpO1xuICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgbGVmdCA9IGNoYXJXaWR0aChjbS5kaXNwbGF5KSAqIHBvcy5jaDsgfVxuICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShjbS5kb2MsIHBvcy5saW5lKTtcbiAgICB2YXIgdG9wID0gaGVpZ2h0QXRMaW5lKGxpbmVPYmopICsgcGFkZGluZ1RvcChjbS5kaXNwbGF5KTtcbiAgICByZXR1cm4ge2xlZnQ6IGxlZnQsIHJpZ2h0OiBsZWZ0LCB0b3A6IHRvcCwgYm90dG9tOiB0b3AgKyBsaW5lT2JqLmhlaWdodH1cbiAgfVxuXG4gIC8vIFBvc2l0aW9ucyByZXR1cm5lZCBieSBjb29yZHNDaGFyIGNvbnRhaW4gc29tZSBleHRyYSBpbmZvcm1hdGlvbi5cbiAgLy8geFJlbCBpcyB0aGUgcmVsYXRpdmUgeCBwb3NpdGlvbiBvZiB0aGUgaW5wdXQgY29vcmRpbmF0ZXMgY29tcGFyZWRcbiAgLy8gdG8gdGhlIGZvdW5kIHBvc2l0aW9uIChzbyB4UmVsID4gMCBtZWFucyB0aGUgY29vcmRpbmF0ZXMgYXJlIHRvXG4gIC8vIHRoZSByaWdodCBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uLCBmb3IgZXhhbXBsZSkuIFdoZW4gb3V0c2lkZVxuICAvLyBpcyB0cnVlLCB0aGF0IG1lYW5zIHRoZSBjb29yZGluYXRlcyBsaWUgb3V0c2lkZSB0aGUgbGluZSdzXG4gIC8vIHZlcnRpY2FsIHJhbmdlLlxuICBmdW5jdGlvbiBQb3NXaXRoSW5mbyhsaW5lLCBjaCwgc3RpY2t5LCBvdXRzaWRlLCB4UmVsKSB7XG4gICAgdmFyIHBvcyA9IFBvcyhsaW5lLCBjaCwgc3RpY2t5KTtcbiAgICBwb3MueFJlbCA9IHhSZWw7XG4gICAgaWYgKG91dHNpZGUpIHsgcG9zLm91dHNpZGUgPSBvdXRzaWRlOyB9XG4gICAgcmV0dXJuIHBvc1xuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGNsb3Nlc3QgdG8gdGhlIGdpdmVuIGNvb3JkaW5hdGVzLlxuICAvLyBJbnB1dCBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbCAoXCJkaXZcIiBjb29yZGluYXRlIHN5c3RlbSkuXG4gIGZ1bmN0aW9uIGNvb3Jkc0NoYXIoY20sIHgsIHkpIHtcbiAgICB2YXIgZG9jID0gY20uZG9jO1xuICAgIHkgKz0gY20uZGlzcGxheS52aWV3T2Zmc2V0O1xuICAgIGlmICh5IDwgMCkgeyByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0LCAwLCBudWxsLCAtMSwgLTEpIH1cbiAgICB2YXIgbGluZU4gPSBsaW5lQXRIZWlnaHQoZG9jLCB5KSwgbGFzdCA9IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTtcbiAgICBpZiAobGluZU4gPiBsYXN0KVxuICAgICAgeyByZXR1cm4gUG9zV2l0aEluZm8oZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxLCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgsIG51bGwsIDEsIDEpIH1cbiAgICBpZiAoeCA8IDApIHsgeCA9IDA7IH1cblxuICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmVOKTtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB2YXIgZm91bmQgPSBjb29yZHNDaGFySW5uZXIoY20sIGxpbmVPYmosIGxpbmVOLCB4LCB5KTtcbiAgICAgIHZhciBjb2xsYXBzZWQgPSBjb2xsYXBzZWRTcGFuQXJvdW5kKGxpbmVPYmosIGZvdW5kLmNoICsgKGZvdW5kLnhSZWwgPiAwIHx8IGZvdW5kLm91dHNpZGUgPiAwID8gMSA6IDApKTtcbiAgICAgIGlmICghY29sbGFwc2VkKSB7IHJldHVybiBmb3VuZCB9XG4gICAgICB2YXIgcmFuZ2VFbmQgPSBjb2xsYXBzZWQuZmluZCgxKTtcbiAgICAgIGlmIChyYW5nZUVuZC5saW5lID09IGxpbmVOKSB7IHJldHVybiByYW5nZUVuZCB9XG4gICAgICBsaW5lT2JqID0gZ2V0TGluZShkb2MsIGxpbmVOID0gcmFuZ2VFbmQubGluZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JhcHBlZExpbmVFeHRlbnQoY20sIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgeSkge1xuICAgIHkgLT0gd2lkZ2V0VG9wSGVpZ2h0KGxpbmVPYmopO1xuICAgIHZhciBlbmQgPSBsaW5lT2JqLnRleHQubGVuZ3RoO1xuICAgIHZhciBiZWdpbiA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2ggLSAxKS5ib3R0b20gPD0geTsgfSwgZW5kLCAwKTtcbiAgICBlbmQgPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGNoKSB7IHJldHVybiBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoKS50b3AgPiB5OyB9LCBiZWdpbiwgZW5kKTtcbiAgICByZXR1cm4ge2JlZ2luOiBiZWdpbiwgZW5kOiBlbmR9XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwcGVkTGluZUV4dGVudENoYXIoY20sIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdGFyZ2V0KSB7XG4gICAgaWYgKCFwcmVwYXJlZE1lYXN1cmUpIHsgcHJlcGFyZWRNZWFzdXJlID0gcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lT2JqKTsgfVxuICAgIHZhciB0YXJnZXRUb3AgPSBpbnRvQ29vcmRTeXN0ZW0oY20sIGxpbmVPYmosIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgdGFyZ2V0KSwgXCJsaW5lXCIpLnRvcDtcbiAgICByZXR1cm4gd3JhcHBlZExpbmVFeHRlbnQoY20sIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSwgdGFyZ2V0VG9wKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaWRlIG9mIGEgYm94IGlzIGFmdGVyIHRoZSBnaXZlblxuICAvLyBjb29yZGluYXRlcywgaW4gdG9wLXRvLWJvdHRvbSwgbGVmdC10by1yaWdodCBvcmRlci5cbiAgZnVuY3Rpb24gYm94SXNBZnRlcihib3gsIHgsIHksIGxlZnQpIHtcbiAgICByZXR1cm4gYm94LmJvdHRvbSA8PSB5ID8gZmFsc2UgOiBib3gudG9wID4geSA/IHRydWUgOiAobGVmdCA/IGJveC5sZWZ0IDogYm94LnJpZ2h0KSA+IHhcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3Jkc0NoYXJJbm5lcihjbSwgbGluZU9iaiwgbGluZU5vLCB4LCB5KSB7XG4gICAgLy8gTW92ZSB5IGludG8gbGluZS1sb2NhbCBjb29yZGluYXRlIHNwYWNlXG4gICAgeSAtPSBoZWlnaHRBdExpbmUobGluZU9iaik7XG4gICAgdmFyIHByZXBhcmVkTWVhc3VyZSA9IHByZXBhcmVNZWFzdXJlRm9yTGluZShjbSwgbGluZU9iaik7XG4gICAgLy8gV2hlbiBkaXJlY3RseSBjYWxsaW5nIGBtZWFzdXJlQ2hhclByZXBhcmVkYCwgd2UgaGF2ZSB0byBhZGp1c3RcbiAgICAvLyBmb3IgdGhlIHdpZGdldHMgYXQgdGhpcyBsaW5lLlxuICAgIHZhciB3aWRnZXRIZWlnaHQgPSB3aWRnZXRUb3BIZWlnaHQobGluZU9iaik7XG4gICAgdmFyIGJlZ2luID0gMCwgZW5kID0gbGluZU9iai50ZXh0Lmxlbmd0aCwgbHRyID0gdHJ1ZTtcblxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGNtLmRvYy5kaXJlY3Rpb24pO1xuICAgIC8vIElmIHRoZSBsaW5lIGlzbid0IHBsYWluIGxlZnQtdG8tcmlnaHQgdGV4dCwgZmlyc3QgZmlndXJlIG91dFxuICAgIC8vIHdoaWNoIGJpZGkgc2VjdGlvbiB0aGUgY29vcmRpbmF0ZXMgZmFsbCBpbnRvLlxuICAgIGlmIChvcmRlcikge1xuICAgICAgdmFyIHBhcnQgPSAoY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgPyBjb29yZHNCaWRpUGFydFdyYXBwZWQgOiBjb29yZHNCaWRpUGFydClcbiAgICAgICAgICAgICAgICAgICAoY20sIGxpbmVPYmosIGxpbmVObywgcHJlcGFyZWRNZWFzdXJlLCBvcmRlciwgeCwgeSk7XG4gICAgICBsdHIgPSBwYXJ0LmxldmVsICE9IDE7XG4gICAgICAvLyBUaGUgYXdrd2FyZCAtMSBvZmZzZXRzIGFyZSBuZWVkZWQgYmVjYXVzZSBmaW5kRmlyc3QgKGNhbGxlZFxuICAgICAgLy8gb24gdGhlc2UgYmVsb3cpIHdpbGwgdHJlYXQgaXRzIGZpcnN0IGJvdW5kIGFzIGluY2x1c2l2ZSxcbiAgICAgIC8vIHNlY29uZCBhcyBleGNsdXNpdmUsIGJ1dCB3ZSB3YW50IHRvIGFjdHVhbGx5IGFkZHJlc3MgdGhlXG4gICAgICAvLyBjaGFyYWN0ZXJzIGluIHRoZSBwYXJ0J3MgcmFuZ2VcbiAgICAgIGJlZ2luID0gbHRyID8gcGFydC5mcm9tIDogcGFydC50byAtIDE7XG4gICAgICBlbmQgPSBsdHIgPyBwYXJ0LnRvIDogcGFydC5mcm9tIC0gMTtcbiAgICB9XG5cbiAgICAvLyBBIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgZmlyc3QgY2hhcmFjdGVyIHdob3NlIGJvdW5kaW5nIGJveFxuICAgIC8vIHN0YXJ0cyBhZnRlciB0aGUgY29vcmRpbmF0ZXMuIElmIHdlIHJ1biBhY3Jvc3MgYW55IHdob3NlIGJveCB3cmFwXG4gICAgLy8gdGhlIGNvb3JkaW5hdGVzLCBzdG9yZSB0aGF0LlxuICAgIHZhciBjaEFyb3VuZCA9IG51bGwsIGJveEFyb3VuZCA9IG51bGw7XG4gICAgdmFyIGNoID0gZmluZEZpcnN0KGZ1bmN0aW9uIChjaCkge1xuICAgICAgdmFyIGJveCA9IG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXBhcmVkTWVhc3VyZSwgY2gpO1xuICAgICAgYm94LnRvcCArPSB3aWRnZXRIZWlnaHQ7IGJveC5ib3R0b20gKz0gd2lkZ2V0SGVpZ2h0O1xuICAgICAgaWYgKCFib3hJc0FmdGVyKGJveCwgeCwgeSwgZmFsc2UpKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBpZiAoYm94LnRvcCA8PSB5ICYmIGJveC5sZWZ0IDw9IHgpIHtcbiAgICAgICAgY2hBcm91bmQgPSBjaDtcbiAgICAgICAgYm94QXJvdW5kID0gYm94O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LCBiZWdpbiwgZW5kKTtcblxuICAgIHZhciBiYXNlWCwgc3RpY2t5LCBvdXRzaWRlID0gZmFsc2U7XG4gICAgLy8gSWYgYSBib3ggYXJvdW5kIHRoZSBjb29yZGluYXRlcyB3YXMgZm91bmQsIHVzZSB0aGF0XG4gICAgaWYgKGJveEFyb3VuZCkge1xuICAgICAgLy8gRGlzdGluZ3Vpc2ggY29vcmRpbmF0ZXMgbmVhcmVyIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpZGUgb2YgdGhlIGJveFxuICAgICAgdmFyIGF0TGVmdCA9IHggLSBib3hBcm91bmQubGVmdCA8IGJveEFyb3VuZC5yaWdodCAtIHgsIGF0U3RhcnQgPSBhdExlZnQgPT0gbHRyO1xuICAgICAgY2ggPSBjaEFyb3VuZCArIChhdFN0YXJ0ID8gMCA6IDEpO1xuICAgICAgc3RpY2t5ID0gYXRTdGFydCA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCI7XG4gICAgICBiYXNlWCA9IGF0TGVmdCA/IGJveEFyb3VuZC5sZWZ0IDogYm94QXJvdW5kLnJpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAoQWRqdXN0IGZvciBleHRlbmRlZCBib3VuZCwgaWYgbmVjZXNzYXJ5LilcbiAgICAgIGlmICghbHRyICYmIChjaCA9PSBlbmQgfHwgY2ggPT0gYmVnaW4pKSB7IGNoKys7IH1cbiAgICAgIC8vIFRvIGRldGVybWluZSB3aGljaCBzaWRlIHRvIGFzc29jaWF0ZSB3aXRoLCBnZXQgdGhlIGJveCB0byB0aGVcbiAgICAgIC8vIGxlZnQgb2YgdGhlIGNoYXJhY3RlciBhbmQgY29tcGFyZSBpdCdzIHZlcnRpY2FsIHBvc2l0aW9uIHRvIHRoZVxuICAgICAgLy8gY29vcmRpbmF0ZXNcbiAgICAgIHN0aWNreSA9IGNoID09IDAgPyBcImFmdGVyXCIgOiBjaCA9PSBsaW5lT2JqLnRleHQubGVuZ3RoID8gXCJiZWZvcmVcIiA6XG4gICAgICAgIChtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGNoIC0gKGx0ciA/IDEgOiAwKSkuYm90dG9tICsgd2lkZ2V0SGVpZ2h0IDw9IHkpID09IGx0ciA/XG4gICAgICAgIFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCI7XG4gICAgICAvLyBOb3cgZ2V0IGFjY3VyYXRlIGNvb3JkaW5hdGVzIGZvciB0aGlzIHBsYWNlLCBpbiBvcmRlciB0byBnZXQgYVxuICAgICAgLy8gYmFzZSBYIHBvc2l0aW9uXG4gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBQb3MobGluZU5vLCBjaCwgc3RpY2t5KSwgXCJsaW5lXCIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSk7XG4gICAgICBiYXNlWCA9IGNvb3Jkcy5sZWZ0O1xuICAgICAgb3V0c2lkZSA9IHkgPCBjb29yZHMudG9wID8gLTEgOiB5ID49IGNvb3Jkcy5ib3R0b20gPyAxIDogMDtcbiAgICB9XG5cbiAgICBjaCA9IHNraXBFeHRlbmRpbmdDaGFycyhsaW5lT2JqLnRleHQsIGNoLCAxKTtcbiAgICByZXR1cm4gUG9zV2l0aEluZm8obGluZU5vLCBjaCwgc3RpY2t5LCBvdXRzaWRlLCB4IC0gYmFzZVgpXG4gIH1cblxuICBmdW5jdGlvbiBjb29yZHNCaWRpUGFydChjbSwgbGluZU9iaiwgbGluZU5vLCBwcmVwYXJlZE1lYXN1cmUsIG9yZGVyLCB4LCB5KSB7XG4gICAgLy8gQmlkaSBwYXJ0cyBhcmUgc29ydGVkIGxlZnQtdG8tcmlnaHQsIGFuZCBpbiBhIG5vbi1saW5lLXdyYXBwaW5nXG4gICAgLy8gc2l0dWF0aW9uLCB3ZSBjYW4gdGFrZSB0aGlzIG9yZGVyaW5nIHRvIGNvcnJlc3BvbmQgdG8gdGhlIHZpc3VhbFxuICAgIC8vIG9yZGVyaW5nLiBUaGlzIGZpbmRzIHRoZSBmaXJzdCBwYXJ0IHdob3NlIGVuZCBpcyBhZnRlciB0aGUgZ2l2ZW5cbiAgICAvLyBjb29yZGluYXRlcy5cbiAgICB2YXIgaW5kZXggPSBmaW5kRmlyc3QoZnVuY3Rpb24gKGkpIHtcbiAgICAgIHZhciBwYXJ0ID0gb3JkZXJbaV0sIGx0ciA9IHBhcnQubGV2ZWwgIT0gMTtcbiAgICAgIHJldHVybiBib3hJc0FmdGVyKGN1cnNvckNvb3JkcyhjbSwgUG9zKGxpbmVObywgbHRyID8gcGFydC50byA6IHBhcnQuZnJvbSwgbHRyID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5lXCIsIGxpbmVPYmosIHByZXBhcmVkTWVhc3VyZSksIHgsIHksIHRydWUpXG4gICAgfSwgMCwgb3JkZXIubGVuZ3RoIC0gMSk7XG4gICAgdmFyIHBhcnQgPSBvcmRlcltpbmRleF07XG4gICAgLy8gSWYgdGhpcyBpc24ndCB0aGUgZmlyc3QgcGFydCwgdGhlIHBhcnQncyBzdGFydCBpcyBhbHNvIGFmdGVyXG4gICAgLy8gdGhlIGNvb3JkaW5hdGVzLCBhbmQgdGhlIGNvb3JkaW5hdGVzIGFyZW4ndCBvbiB0aGUgc2FtZSBsaW5lIGFzXG4gICAgLy8gdGhhdCBzdGFydCwgbW92ZSBvbmUgcGFydCBiYWNrLlxuICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgIHZhciBsdHIgPSBwYXJ0LmxldmVsICE9IDE7XG4gICAgICB2YXIgc3RhcnQgPSBjdXJzb3JDb29yZHMoY20sIFBvcyhsaW5lTm8sIGx0ciA/IHBhcnQuZnJvbSA6IHBhcnQudG8sIGx0ciA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZVwiLCBsaW5lT2JqLCBwcmVwYXJlZE1lYXN1cmUpO1xuICAgICAgaWYgKGJveElzQWZ0ZXIoc3RhcnQsIHgsIHksIHRydWUpICYmIHN0YXJ0LnRvcCA+IHkpXG4gICAgICAgIHsgcGFydCA9IG9yZGVyW2luZGV4IC0gMV07IH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcnRcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3Jkc0JpZGlQYXJ0V3JhcHBlZChjbSwgbGluZU9iaiwgX2xpbmVObywgcHJlcGFyZWRNZWFzdXJlLCBvcmRlciwgeCwgeSkge1xuICAgIC8vIEluIGEgd3JhcHBlZCBsaW5lLCBydGwgdGV4dCBvbiB3cmFwcGluZyBib3VuZGFyaWVzIGNhbiBkbyB0aGluZ3NcbiAgICAvLyB0aGF0IGRvbid0IGNvcnJlc3BvbmQgdG8gdGhlIG9yZGVyaW5nIGluIG91ciBgb3JkZXJgIGFycmF5IGF0XG4gICAgLy8gYWxsLCBzbyBhIGJpbmFyeSBzZWFyY2ggZG9lc24ndCB3b3JrLCBhbmQgd2Ugd2FudCB0byByZXR1cm4gYVxuICAgIC8vIHBhcnQgdGhhdCBvbmx5IHNwYW5zIG9uZSBsaW5lIHNvIHRoYXQgdGhlIGJpbmFyeSBzZWFyY2ggaW5cbiAgICAvLyBjb29yZHNDaGFySW5uZXIgaXMgc2FmZS4gQXMgc3VjaCwgd2UgZmlyc3QgZmluZCB0aGUgZXh0ZW50IG9mIHRoZVxuICAgIC8vIHdyYXBwZWQgbGluZSwgYW5kIHRoZW4gZG8gYSBmbGF0IHNlYXJjaCBpbiB3aGljaCB3ZSBkaXNjYXJkIGFueVxuICAgIC8vIHNwYW5zIHRoYXQgYXJlbid0IG9uIHRoZSBsaW5lLlxuICAgIHZhciByZWYgPSB3cmFwcGVkTGluZUV4dGVudChjbSwgbGluZU9iaiwgcHJlcGFyZWRNZWFzdXJlLCB5KTtcbiAgICB2YXIgYmVnaW4gPSByZWYuYmVnaW47XG4gICAgdmFyIGVuZCA9IHJlZi5lbmQ7XG4gICAgaWYgKC9cXHMvLnRlc3QobGluZU9iai50ZXh0LmNoYXJBdChlbmQgLSAxKSkpIHsgZW5kLS07IH1cbiAgICB2YXIgcGFydCA9IG51bGwsIGNsb3Nlc3REaXN0ID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcCA9IG9yZGVyW2ldO1xuICAgICAgaWYgKHAuZnJvbSA+PSBlbmQgfHwgcC50byA8PSBiZWdpbikgeyBjb250aW51ZSB9XG4gICAgICB2YXIgbHRyID0gcC5sZXZlbCAhPSAxO1xuICAgICAgdmFyIGVuZFggPSBtZWFzdXJlQ2hhclByZXBhcmVkKGNtLCBwcmVwYXJlZE1lYXN1cmUsIGx0ciA/IE1hdGgubWluKGVuZCwgcC50bykgLSAxIDogTWF0aC5tYXgoYmVnaW4sIHAuZnJvbSkpLnJpZ2h0O1xuICAgICAgLy8gV2VpZ2ggYWdhaW5zdCBzcGFucyBlbmRpbmcgYmVmb3JlIHRoaXMsIHNvIHRoYXQgdGhleSBhcmUgb25seVxuICAgICAgLy8gcGlja2VkIGlmIG5vdGhpbmcgZW5kcyBhZnRlclxuICAgICAgdmFyIGRpc3QgPSBlbmRYIDwgeCA/IHggLSBlbmRYICsgMWU5IDogZW5kWCAtIHg7XG4gICAgICBpZiAoIXBhcnQgfHwgY2xvc2VzdERpc3QgPiBkaXN0KSB7XG4gICAgICAgIHBhcnQgPSBwO1xuICAgICAgICBjbG9zZXN0RGlzdCA9IGRpc3Q7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcGFydCkgeyBwYXJ0ID0gb3JkZXJbb3JkZXIubGVuZ3RoIC0gMV07IH1cbiAgICAvLyBDbGlwIHRoZSBwYXJ0IHRvIHRoZSB3cmFwcGVkIGxpbmUuXG4gICAgaWYgKHBhcnQuZnJvbSA8IGJlZ2luKSB7IHBhcnQgPSB7ZnJvbTogYmVnaW4sIHRvOiBwYXJ0LnRvLCBsZXZlbDogcGFydC5sZXZlbH07IH1cbiAgICBpZiAocGFydC50byA+IGVuZCkgeyBwYXJ0ID0ge2Zyb206IHBhcnQuZnJvbSwgdG86IGVuZCwgbGV2ZWw6IHBhcnQubGV2ZWx9OyB9XG4gICAgcmV0dXJuIHBhcnRcbiAgfVxuXG4gIHZhciBtZWFzdXJlVGV4dDtcbiAgLy8gQ29tcHV0ZSB0aGUgZGVmYXVsdCB0ZXh0IGhlaWdodC5cbiAgZnVuY3Rpb24gdGV4dEhlaWdodChkaXNwbGF5KSB7XG4gICAgaWYgKGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCAhPSBudWxsKSB7IHJldHVybiBkaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQgfVxuICAgIGlmIChtZWFzdXJlVGV4dCA9PSBudWxsKSB7XG4gICAgICBtZWFzdXJlVGV4dCA9IGVsdChcInByZVwiLCBudWxsLCBcIkNvZGVNaXJyb3ItbGluZS1saWtlXCIpO1xuICAgICAgLy8gTWVhc3VyZSBhIGJ1bmNoIG9mIGxpbmVzLCBmb3IgYnJvd3NlcnMgdGhhdCBjb21wdXRlXG4gICAgICAvLyBmcmFjdGlvbmFsIGhlaWdodHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5OyArK2kpIHtcbiAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpKTtcbiAgICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZWx0KFwiYnJcIikpO1xuICAgICAgfVxuICAgICAgbWVhc3VyZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJ4XCIpKTtcbiAgICB9XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoZGlzcGxheS5tZWFzdXJlLCBtZWFzdXJlVGV4dCk7XG4gICAgdmFyIGhlaWdodCA9IG1lYXN1cmVUZXh0Lm9mZnNldEhlaWdodCAvIDUwO1xuICAgIGlmIChoZWlnaHQgPiAzKSB7IGRpc3BsYXkuY2FjaGVkVGV4dEhlaWdodCA9IGhlaWdodDsgfVxuICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkubWVhc3VyZSk7XG4gICAgcmV0dXJuIGhlaWdodCB8fCAxXG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBkZWZhdWx0IGNoYXJhY3RlciB3aWR0aC5cbiAgZnVuY3Rpb24gY2hhcldpZHRoKGRpc3BsYXkpIHtcbiAgICBpZiAoZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggIT0gbnVsbCkgeyByZXR1cm4gZGlzcGxheS5jYWNoZWRDaGFyV2lkdGggfVxuICAgIHZhciBhbmNob3IgPSBlbHQoXCJzcGFuXCIsIFwieHh4eHh4eHh4eFwiKTtcbiAgICB2YXIgcHJlID0gZWx0KFwicHJlXCIsIFthbmNob3JdLCBcIkNvZGVNaXJyb3ItbGluZS1saWtlXCIpO1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkubWVhc3VyZSwgcHJlKTtcbiAgICB2YXIgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgd2lkdGggPSAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgLyAxMDtcbiAgICBpZiAod2lkdGggPiAyKSB7IGRpc3BsYXkuY2FjaGVkQ2hhcldpZHRoID0gd2lkdGg7IH1cbiAgICByZXR1cm4gd2lkdGggfHwgMTBcbiAgfVxuXG4gIC8vIERvIGEgYnVsay1yZWFkIG9mIHRoZSBET00gcG9zaXRpb25zIGFuZCBzaXplcyBuZWVkZWQgdG8gZHJhdyB0aGVcbiAgLy8gdmlldywgc28gdGhhdCB3ZSBkb24ndCBpbnRlcmxlYXZlIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIERPTS5cbiAgZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhjbSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheSwgbGVmdCA9IHt9LCB3aWR0aCA9IHt9O1xuICAgIHZhciBndXR0ZXJMZWZ0ID0gZC5ndXR0ZXJzLmNsaWVudExlZnQ7XG4gICAgZm9yICh2YXIgbiA9IGQuZ3V0dGVycy5maXJzdENoaWxkLCBpID0gMDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcsICsraSkge1xuICAgICAgdmFyIGlkID0gY20uZGlzcGxheS5ndXR0ZXJTcGVjc1tpXS5jbGFzc05hbWU7XG4gICAgICBsZWZ0W2lkXSA9IG4ub2Zmc2V0TGVmdCArIG4uY2xpZW50TGVmdCArIGd1dHRlckxlZnQ7XG4gICAgICB3aWR0aFtpZF0gPSBuLmNsaWVudFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4ge2ZpeGVkUG9zOiBjb21wZW5zYXRlRm9ySFNjcm9sbChkKSxcbiAgICAgICAgICAgIGd1dHRlclRvdGFsV2lkdGg6IGQuZ3V0dGVycy5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGd1dHRlckxlZnQ6IGxlZnQsXG4gICAgICAgICAgICBndXR0ZXJXaWR0aDogd2lkdGgsXG4gICAgICAgICAgICB3cmFwcGVyV2lkdGg6IGQud3JhcHBlci5jbGllbnRXaWR0aH1cbiAgfVxuXG4gIC8vIENvbXB1dGVzIGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCArIGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCxcbiAgLy8gYnV0IHVzaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCB0byBnZXQgYSBzdWItcGl4ZWwtYWNjdXJhdGVcbiAgLy8gcmVzdWx0LlxuICBmdW5jdGlvbiBjb21wZW5zYXRlRm9ySFNjcm9sbChkaXNwbGF5KSB7XG4gICAgcmV0dXJuIGRpc3BsYXkuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRpc3BsYXkuc2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdFxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZXN0aW1hdGVzIHRoZSBoZWlnaHQgb2YgYSBsaW5lLCB0byB1c2UgYXNcbiAgLy8gZmlyc3QgYXBwcm94aW1hdGlvbiB1bnRpbCB0aGUgbGluZSBiZWNvbWVzIHZpc2libGUgKGFuZCBpcyB0aHVzXG4gIC8vIHByb3Blcmx5IG1lYXN1cmFibGUpLlxuICBmdW5jdGlvbiBlc3RpbWF0ZUhlaWdodChjbSkge1xuICAgIHZhciB0aCA9IHRleHRIZWlnaHQoY20uZGlzcGxheSksIHdyYXBwaW5nID0gY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gICAgdmFyIHBlckxpbmUgPSB3cmFwcGluZyAmJiBNYXRoLm1heCg1LCBjbS5kaXNwbGF5LnNjcm9sbGVyLmNsaWVudFdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpIC0gMyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZUlzSGlkZGVuKGNtLmRvYywgbGluZSkpIHsgcmV0dXJuIDAgfVxuXG4gICAgICB2YXIgd2lkZ2V0c0hlaWdodCA9IDA7XG4gICAgICBpZiAobGluZS53aWRnZXRzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgbGluZS53aWRnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsaW5lLndpZGdldHNbaV0uaGVpZ2h0KSB7IHdpZGdldHNIZWlnaHQgKz0gbGluZS53aWRnZXRzW2ldLmhlaWdodDsgfVxuICAgICAgfSB9XG5cbiAgICAgIGlmICh3cmFwcGluZylcbiAgICAgICAgeyByZXR1cm4gd2lkZ2V0c0hlaWdodCArIChNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDEpICogdGggfVxuICAgICAgZWxzZVxuICAgICAgICB7IHJldHVybiB3aWRnZXRzSGVpZ2h0ICsgdGggfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVzdGltYXRlTGluZUhlaWdodHMoY20pIHtcbiAgICB2YXIgZG9jID0gY20uZG9jLCBlc3QgPSBlc3RpbWF0ZUhlaWdodChjbSk7XG4gICAgZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIHZhciBlc3RIZWlnaHQgPSBlc3QobGluZSk7XG4gICAgICBpZiAoZXN0SGVpZ2h0ICE9IGxpbmUuaGVpZ2h0KSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZXN0SGVpZ2h0KTsgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gR2l2ZW4gYSBtb3VzZSBldmVudCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGlvbi4gSWYgbGliZXJhbFxuICAvLyBpcyBmYWxzZSwgaXQgY2hlY2tzIHdoZXRoZXIgYSBndXR0ZXIgb3Igc2Nyb2xsYmFyIHdhcyBjbGlja2VkLFxuICAvLyBhbmQgcmV0dXJucyBudWxsIGlmIGl0IHdhcy4gZm9yUmVjdCBpcyB1c2VkIGJ5IHJlY3Rhbmd1bGFyXG4gIC8vIHNlbGVjdGlvbnMsIGFuZCB0cmllcyB0byBlc3RpbWF0ZSBhIGNoYXJhY3RlciBwb3NpdGlvbiBldmVuIGZvclxuICAvLyBjb29yZGluYXRlcyBiZXlvbmQgdGhlIHJpZ2h0IG9mIHRoZSB0ZXh0LlxuICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoY20sIGUsIGxpYmVyYWwsIGZvclJlY3QpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKCFsaWJlcmFsICYmIGVfdGFyZ2V0KGUpLmdldEF0dHJpYnV0ZShcImNtLW5vdC1jb250ZW50XCIpID09IFwidHJ1ZVwiKSB7IHJldHVybiBudWxsIH1cblxuICAgIHZhciB4LCB5LCBzcGFjZSA9IGRpc3BsYXkubGluZVNwYWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIC8vIEZhaWxzIHVucHJlZGljdGFibHkgb24gSUVbNjddIHdoZW4gbW91c2UgaXMgZHJhZ2dlZCBhcm91bmQgcXVpY2tseS5cbiAgICB0cnkgeyB4ID0gZS5jbGllbnRYIC0gc3BhY2UubGVmdDsgeSA9IGUuY2xpZW50WSAtIHNwYWNlLnRvcDsgfVxuICAgIGNhdGNoIChlJDEpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBjb29yZHMgPSBjb29yZHNDaGFyKGNtLCB4LCB5KSwgbGluZTtcbiAgICBpZiAoZm9yUmVjdCAmJiBjb29yZHMueFJlbCA+IDAgJiYgKGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgY29vcmRzLmxpbmUpLnRleHQpLmxlbmd0aCA9PSBjb29yZHMuY2gpIHtcbiAgICAgIHZhciBjb2xEaWZmID0gY291bnRDb2x1bW4obGluZSwgbGluZS5sZW5ndGgsIGNtLm9wdGlvbnMudGFiU2l6ZSkgLSBsaW5lLmxlbmd0aDtcbiAgICAgIGNvb3JkcyA9IFBvcyhjb29yZHMubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoeCAtIHBhZGRpbmdIKGNtLmRpc3BsYXkpLmxlZnQpIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKSAtIGNvbERpZmYpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb3Jkc1xuICB9XG5cbiAgLy8gRmluZCB0aGUgdmlldyBlbGVtZW50IGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBsaW5lLiBSZXR1cm4gbnVsbFxuICAvLyB3aGVuIHRoZSBsaW5lIGlzbid0IHZpc2libGUuXG4gIGZ1bmN0aW9uIGZpbmRWaWV3SW5kZXgoY20sIG4pIHtcbiAgICBpZiAobiA+PSBjbS5kaXNwbGF5LnZpZXdUbykgeyByZXR1cm4gbnVsbCB9XG4gICAgbiAtPSBjbS5kaXNwbGF5LnZpZXdGcm9tO1xuICAgIGlmIChuIDwgMCkgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBuIC09IHZpZXdbaV0uc2l6ZTtcbiAgICAgIGlmIChuIDwgMCkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgZGlzcGxheS52aWV3IGRhdGEgc3RydWN0dXJlIGZvciBhIGdpdmVuIGNoYW5nZSB0byB0aGVcbiAgLy8gZG9jdW1lbnQuIEZyb20gYW5kIHRvIGFyZSBpbiBwcmUtY2hhbmdlIGNvb3JkaW5hdGVzLiBMZW5kaWZmIGlzXG4gIC8vIHRoZSBhbW91bnQgb2YgbGluZXMgYWRkZWQgb3Igc3VidHJhY3RlZCBieSB0aGUgY2hhbmdlLiBUaGlzIGlzXG4gIC8vIHVzZWQgZm9yIGNoYW5nZXMgdGhhdCBzcGFuIG11bHRpcGxlIGxpbmVzLCBvciBjaGFuZ2UgdGhlIHdheVxuICAvLyBsaW5lcyBhcmUgZGl2aWRlZCBpbnRvIHZpc3VhbCBsaW5lcy4gcmVnTGluZUNoYW5nZSAoYmVsb3cpXG4gIC8vIHJlZ2lzdGVycyBzaW5nbGUtbGluZSBjaGFuZ2VzLlxuICBmdW5jdGlvbiByZWdDaGFuZ2UoY20sIGZyb20sIHRvLCBsZW5kaWZmKSB7XG4gICAgaWYgKGZyb20gPT0gbnVsbCkgeyBmcm9tID0gY20uZG9jLmZpcnN0OyB9XG4gICAgaWYgKHRvID09IG51bGwpIHsgdG8gPSBjbS5kb2MuZmlyc3QgKyBjbS5kb2Muc2l6ZTsgfVxuICAgIGlmICghbGVuZGlmZikgeyBsZW5kaWZmID0gMDsgfVxuXG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIGlmIChsZW5kaWZmICYmIHRvIDwgZGlzcGxheS52aWV3VG8gJiZcbiAgICAgICAgKGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPT0gbnVsbCB8fCBkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID4gZnJvbSkpXG4gICAgICB7IGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBmcm9tOyB9XG5cbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG5cbiAgICBpZiAoZnJvbSA+PSBkaXNwbGF5LnZpZXdUbykgeyAvLyBDaGFuZ2UgYWZ0ZXJcbiAgICAgIGlmIChzYXdDb2xsYXBzZWRTcGFucyAmJiB2aXN1YWxMaW5lTm8oY20uZG9jLCBmcm9tKSA8IGRpc3BsYXkudmlld1RvKVxuICAgICAgICB7IHJlc2V0VmlldyhjbSk7IH1cbiAgICB9IGVsc2UgaWYgKHRvIDw9IGRpc3BsYXkudmlld0Zyb20pIHsgLy8gQ2hhbmdlIGJlZm9yZVxuICAgICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zICYmIHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvICsgbGVuZGlmZikgPiBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tICs9IGxlbmRpZmY7XG4gICAgICAgIGRpc3BsYXkudmlld1RvICs9IGxlbmRpZmY7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmcm9tIDw9IGRpc3BsYXkudmlld0Zyb20gJiYgdG8gPj0gZGlzcGxheS52aWV3VG8pIHsgLy8gRnVsbCBvdmVybGFwXG4gICAgICByZXNldFZpZXcoY20pO1xuICAgIH0gZWxzZSBpZiAoZnJvbSA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7IC8vIFRvcCBvdmVybGFwXG4gICAgICB2YXIgY3V0ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0KSB7XG4gICAgICAgIGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShjdXQuaW5kZXgpO1xuICAgICAgICBkaXNwbGF5LnZpZXdGcm9tID0gY3V0LmxpbmVOO1xuICAgICAgICBkaXNwbGF5LnZpZXdUbyArPSBsZW5kaWZmO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRvID49IGRpc3BsYXkudmlld1RvKSB7IC8vIEJvdHRvbSBvdmVybGFwXG4gICAgICB2YXIgY3V0JDEgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICBpZiAoY3V0JDEpIHtcbiAgICAgICAgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGN1dCQxLmluZGV4KTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gPSBjdXQkMS5saW5lTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gR2FwIGluIHRoZSBtaWRkbGVcbiAgICAgIHZhciBjdXRUb3AgPSB2aWV3Q3V0dGluZ1BvaW50KGNtLCBmcm9tLCBmcm9tLCAtMSk7XG4gICAgICB2YXIgY3V0Qm90ID0gdmlld0N1dHRpbmdQb2ludChjbSwgdG8sIHRvICsgbGVuZGlmZiwgMSk7XG4gICAgICBpZiAoY3V0VG9wICYmIGN1dEJvdCkge1xuICAgICAgICBkaXNwbGF5LnZpZXcgPSBkaXNwbGF5LnZpZXcuc2xpY2UoMCwgY3V0VG9wLmluZGV4KVxuICAgICAgICAgIC5jb25jYXQoYnVpbGRWaWV3QXJyYXkoY20sIGN1dFRvcC5saW5lTiwgY3V0Qm90LmxpbmVOKSlcbiAgICAgICAgICAuY29uY2F0KGRpc3BsYXkudmlldy5zbGljZShjdXRCb3QuaW5kZXgpKTtcbiAgICAgICAgZGlzcGxheS52aWV3VG8gKz0gbGVuZGlmZjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0VmlldyhjbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGV4dCA9IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZDtcbiAgICBpZiAoZXh0KSB7XG4gICAgICBpZiAodG8gPCBleHQubGluZU4pXG4gICAgICAgIHsgZXh0LmxpbmVOICs9IGxlbmRpZmY7IH1cbiAgICAgIGVsc2UgaWYgKGZyb20gPCBleHQubGluZU4gKyBleHQuc2l6ZSlcbiAgICAgICAgeyBkaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQgPSBudWxsOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVnaXN0ZXIgYSBjaGFuZ2UgdG8gYSBzaW5nbGUgbGluZS4gVHlwZSBtdXN0IGJlIG9uZSBvZiBcInRleHRcIixcbiAgLy8gXCJndXR0ZXJcIiwgXCJjbGFzc1wiLCBcIndpZGdldFwiXG4gIGZ1bmN0aW9uIHJlZ0xpbmVDaGFuZ2UoY20sIGxpbmUsIHR5cGUpIHtcbiAgICBjbS5jdXJPcC52aWV3Q2hhbmdlZCA9IHRydWU7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBleHQgPSBjbS5kaXNwbGF5LmV4dGVybmFsTWVhc3VyZWQ7XG4gICAgaWYgKGV4dCAmJiBsaW5lID49IGV4dC5saW5lTiAmJiBsaW5lIDwgZXh0LmxpbmVOICsgZXh0LnNpemUpXG4gICAgICB7IGRpc3BsYXkuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7IH1cblxuICAgIGlmIChsaW5lIDwgZGlzcGxheS52aWV3RnJvbSB8fCBsaW5lID49IGRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGxpbmVWaWV3ID0gZGlzcGxheS52aWV3W2ZpbmRWaWV3SW5kZXgoY20sIGxpbmUpXTtcbiAgICBpZiAobGluZVZpZXcubm9kZSA9PSBudWxsKSB7IHJldHVybiB9XG4gICAgdmFyIGFyciA9IGxpbmVWaWV3LmNoYW5nZXMgfHwgKGxpbmVWaWV3LmNoYW5nZXMgPSBbXSk7XG4gICAgaWYgKGluZGV4T2YoYXJyLCB0eXBlKSA9PSAtMSkgeyBhcnIucHVzaCh0eXBlKTsgfVxuICB9XG5cbiAgLy8gQ2xlYXIgdGhlIHZpZXcuXG4gIGZ1bmN0aW9uIHJlc2V0VmlldyhjbSkge1xuICAgIGNtLmRpc3BsYXkudmlld0Zyb20gPSBjbS5kaXNwbGF5LnZpZXdUbyA9IGNtLmRvYy5maXJzdDtcbiAgICBjbS5kaXNwbGF5LnZpZXcgPSBbXTtcbiAgICBjbS5kaXNwbGF5LnZpZXdPZmZzZXQgPSAwO1xuICB9XG5cbiAgZnVuY3Rpb24gdmlld0N1dHRpbmdQb2ludChjbSwgb2xkTiwgbmV3TiwgZGlyKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZFZpZXdJbmRleChjbSwgb2xkTiksIGRpZmYsIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXc7XG4gICAgaWYgKCFzYXdDb2xsYXBzZWRTcGFucyB8fCBuZXdOID09IGNtLmRvYy5maXJzdCArIGNtLmRvYy5zaXplKVxuICAgICAgeyByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059IH1cbiAgICB2YXIgbiA9IGNtLmRpc3BsYXkudmlld0Zyb207XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKVxuICAgICAgeyBuICs9IHZpZXdbaV0uc2l6ZTsgfVxuICAgIGlmIChuICE9IG9sZE4pIHtcbiAgICAgIGlmIChkaXIgPiAwKSB7XG4gICAgICAgIGlmIChpbmRleCA9PSB2aWV3Lmxlbmd0aCAtIDEpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBkaWZmID0gKG4gKyB2aWV3W2luZGV4XS5zaXplKSAtIG9sZE47XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWZmID0gbiAtIG9sZE47XG4gICAgICB9XG4gICAgICBvbGROICs9IGRpZmY7IG5ld04gKz0gZGlmZjtcbiAgICB9XG4gICAgd2hpbGUgKHZpc3VhbExpbmVObyhjbS5kb2MsIG5ld04pICE9IG5ld04pIHtcbiAgICAgIGlmIChpbmRleCA9PSAoZGlyIDwgMCA/IDAgOiB2aWV3Lmxlbmd0aCAtIDEpKSB7IHJldHVybiBudWxsIH1cbiAgICAgIG5ld04gKz0gZGlyICogdmlld1tpbmRleCAtIChkaXIgPCAwID8gMSA6IDApXS5zaXplO1xuICAgICAgaW5kZXggKz0gZGlyO1xuICAgIH1cbiAgICByZXR1cm4ge2luZGV4OiBpbmRleCwgbGluZU46IG5ld059XG4gIH1cblxuICAvLyBGb3JjZSB0aGUgdmlldyB0byBjb3ZlciBhIGdpdmVuIHJhbmdlLCBhZGRpbmcgZW1wdHkgdmlldyBlbGVtZW50XG4gIC8vIG9yIGNsaXBwaW5nIG9mZiBleGlzdGluZyBvbmVzIGFzIG5lZWRlZC5cbiAgZnVuY3Rpb24gYWRqdXN0VmlldyhjbSwgZnJvbSwgdG8pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgaWYgKHZpZXcubGVuZ3RoID09IDAgfHwgZnJvbSA+PSBkaXNwbGF5LnZpZXdUbyB8fCB0byA8PSBkaXNwbGF5LnZpZXdGcm9tKSB7XG4gICAgICBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgdG8pO1xuICAgICAgZGlzcGxheS52aWV3RnJvbSA9IGZyb207XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChkaXNwbGF5LnZpZXdGcm9tID4gZnJvbSlcbiAgICAgICAgeyBkaXNwbGF5LnZpZXcgPSBidWlsZFZpZXdBcnJheShjbSwgZnJvbSwgZGlzcGxheS52aWV3RnJvbSkuY29uY2F0KGRpc3BsYXkudmlldyk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld0Zyb20gPCBmcm9tKVxuICAgICAgICB7IGRpc3BsYXkudmlldyA9IGRpc3BsYXkudmlldy5zbGljZShmaW5kVmlld0luZGV4KGNtLCBmcm9tKSk7IH1cbiAgICAgIGRpc3BsYXkudmlld0Zyb20gPSBmcm9tO1xuICAgICAgaWYgKGRpc3BsYXkudmlld1RvIDwgdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LmNvbmNhdChidWlsZFZpZXdBcnJheShjbSwgZGlzcGxheS52aWV3VG8sIHRvKSk7IH1cbiAgICAgIGVsc2UgaWYgKGRpc3BsYXkudmlld1RvID4gdG8pXG4gICAgICAgIHsgZGlzcGxheS52aWV3ID0gZGlzcGxheS52aWV3LnNsaWNlKDAsIGZpbmRWaWV3SW5kZXgoY20sIHRvKSk7IH1cbiAgICB9XG4gICAgZGlzcGxheS52aWV3VG8gPSB0bztcbiAgfVxuXG4gIC8vIENvdW50IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHZpZXcgd2hvc2UgRE9NIHJlcHJlc2VudGF0aW9uIGlzXG4gIC8vIG91dCBvZiBkYXRlIChvciBub25leGlzdGVudCkuXG4gIGZ1bmN0aW9uIGNvdW50RGlydHlWaWV3KGNtKSB7XG4gICAgdmFyIHZpZXcgPSBjbS5kaXNwbGF5LnZpZXcsIGRpcnR5ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07XG4gICAgICBpZiAoIWxpbmVWaWV3LmhpZGRlbiAmJiAoIWxpbmVWaWV3Lm5vZGUgfHwgbGluZVZpZXcuY2hhbmdlcykpIHsgKytkaXJ0eTsgfVxuICAgIH1cbiAgICByZXR1cm4gZGlydHlcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihjbSkge1xuICAgIGNtLmRpc3BsYXkuaW5wdXQuc2hvd1NlbGVjdGlvbihjbS5kaXNwbGF5LmlucHV0LnByZXBhcmVTZWxlY3Rpb24oKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0aW9uKGNtLCBwcmltYXJ5KSB7XG4gICAgaWYgKCBwcmltYXJ5ID09PSB2b2lkIDAgKSBwcmltYXJ5ID0gdHJ1ZTtcblxuICAgIHZhciBkb2MgPSBjbS5kb2MsIHJlc3VsdCA9IHt9O1xuICAgIHZhciBjdXJGcmFnbWVudCA9IHJlc3VsdC5jdXJzb3JzID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBzZWxGcmFnbWVudCA9IHJlc3VsdC5zZWxlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5zZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXByaW1hcnkgJiYgaSA9PSBkb2Muc2VsLnByaW1JbmRleCkgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcmFuZ2UgPSBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIGlmIChyYW5nZS5mcm9tKCkubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCByYW5nZS50bygpLmxpbmUgPCBjbS5kaXNwbGF5LnZpZXdGcm9tKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBjb2xsYXBzZWQgPSByYW5nZS5lbXB0eSgpO1xuICAgICAgaWYgKGNvbGxhcHNlZCB8fCBjbS5vcHRpb25zLnNob3dDdXJzb3JXaGVuU2VsZWN0aW5nKVxuICAgICAgICB7IGRyYXdTZWxlY3Rpb25DdXJzb3IoY20sIHJhbmdlLmhlYWQsIGN1ckZyYWdtZW50KTsgfVxuICAgICAgaWYgKCFjb2xsYXBzZWQpXG4gICAgICAgIHsgZHJhd1NlbGVjdGlvblJhbmdlKGNtLCByYW5nZSwgc2VsRnJhZ21lbnQpOyB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIERyYXdzIGEgY3Vyc29yIGZvciB0aGUgZ2l2ZW4gcmFuZ2VcbiAgZnVuY3Rpb24gZHJhd1NlbGVjdGlvbkN1cnNvcihjbSwgaGVhZCwgb3V0cHV0KSB7XG4gICAgdmFyIHBvcyA9IGN1cnNvckNvb3JkcyhjbSwgaGVhZCwgXCJkaXZcIiwgbnVsbCwgbnVsbCwgIWNtLm9wdGlvbnMuc2luZ2xlQ3Vyc29ySGVpZ2h0UGVyTGluZSk7XG5cbiAgICB2YXIgY3Vyc29yID0gb3V0cHV0LmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBcIlxcdTAwYTBcIiwgXCJDb2RlTWlycm9yLWN1cnNvclwiKSk7XG4gICAgY3Vyc29yLnN0eWxlLmxlZnQgPSBwb3MubGVmdCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUudG9wID0gcG9zLnRvcCArIFwicHhcIjtcbiAgICBjdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoMCwgcG9zLmJvdHRvbSAtIHBvcy50b3ApICogY20ub3B0aW9ucy5jdXJzb3JIZWlnaHQgKyBcInB4XCI7XG5cbiAgICBpZiAocG9zLm90aGVyKSB7XG4gICAgICAvLyBTZWNvbmRhcnkgY3Vyc29yLCBzaG93biB3aGVuIG9uIGEgJ2p1bXAnIGluIGJpLWRpcmVjdGlvbmFsIHRleHRcbiAgICAgIHZhciBvdGhlckN1cnNvciA9IG91dHB1dC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgXCJcXHUwMGEwXCIsIFwiQ29kZU1pcnJvci1jdXJzb3IgQ29kZU1pcnJvci1zZWNvbmRhcnljdXJzb3JcIikpO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS5sZWZ0ID0gcG9zLm90aGVyLmxlZnQgKyBcInB4XCI7XG4gICAgICBvdGhlckN1cnNvci5zdHlsZS50b3AgPSBwb3Mub3RoZXIudG9wICsgXCJweFwiO1xuICAgICAgb3RoZXJDdXJzb3Iuc3R5bGUuaGVpZ2h0ID0gKHBvcy5vdGhlci5ib3R0b20gLSBwb3Mub3RoZXIudG9wKSAqIC44NSArIFwicHhcIjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbXBDb29yZHMoYSwgYikgeyByZXR1cm4gYS50b3AgLSBiLnRvcCB8fCBhLmxlZnQgLSBiLmxlZnQgfVxuXG4gIC8vIERyYXdzIHRoZSBnaXZlbiByYW5nZSBhcyBhIGhpZ2hsaWdodGVkIHNlbGVjdGlvblxuICBmdW5jdGlvbiBkcmF3U2VsZWN0aW9uUmFuZ2UoY20sIHJhbmdlLCBvdXRwdXQpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGRvYyA9IGNtLmRvYztcbiAgICB2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgdmFyIHBhZGRpbmcgPSBwYWRkaW5nSChjbS5kaXNwbGF5KSwgbGVmdFNpZGUgPSBwYWRkaW5nLmxlZnQ7XG4gICAgdmFyIHJpZ2h0U2lkZSA9IE1hdGgubWF4KGRpc3BsYXkuc2l6ZXJXaWR0aCwgZGlzcGxheVdpZHRoKGNtKSAtIGRpc3BsYXkuc2l6ZXIub2Zmc2V0TGVmdCkgLSBwYWRkaW5nLnJpZ2h0O1xuICAgIHZhciBkb2NMVFIgPSBkb2MuZGlyZWN0aW9uID09IFwibHRyXCI7XG5cbiAgICBmdW5jdGlvbiBhZGQobGVmdCwgdG9wLCB3aWR0aCwgYm90dG9tKSB7XG4gICAgICBpZiAodG9wIDwgMCkgeyB0b3AgPSAwOyB9XG4gICAgICB0b3AgPSBNYXRoLnJvdW5kKHRvcCk7XG4gICAgICBib3R0b20gPSBNYXRoLnJvdW5kKGJvdHRvbSk7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNlbGVjdGVkXCIsIChcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogXCIgKyBsZWZ0ICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogXCIgKyB0b3AgKyBcInB4OyB3aWR0aDogXCIgKyAod2lkdGggPT0gbnVsbCA/IHJpZ2h0U2lkZSAtIGxlZnQgOiB3aWR0aCkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIiArIChib3R0b20gLSB0b3ApICsgXCJweFwiKSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRyYXdGb3JMaW5lKGxpbmUsIGZyb21BcmcsIHRvQXJnKSB7XG4gICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUoZG9jLCBsaW5lKTtcbiAgICAgIHZhciBsaW5lTGVuID0gbGluZU9iai50ZXh0Lmxlbmd0aDtcbiAgICAgIHZhciBzdGFydCwgZW5kO1xuICAgICAgZnVuY3Rpb24gY29vcmRzKGNoLCBiaWFzKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29vcmRzKGNtLCBQb3MobGluZSwgY2gpLCBcImRpdlwiLCBsaW5lT2JqLCBiaWFzKVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiB3cmFwWChwb3MsIGRpciwgc2lkZSkge1xuICAgICAgICB2YXIgZXh0ZW50ID0gd3JhcHBlZExpbmVFeHRlbnRDaGFyKGNtLCBsaW5lT2JqLCBudWxsLCBwb3MpO1xuICAgICAgICB2YXIgcHJvcCA9IChkaXIgPT0gXCJsdHJcIikgPT0gKHNpZGUgPT0gXCJhZnRlclwiKSA/IFwibGVmdFwiIDogXCJyaWdodFwiO1xuICAgICAgICB2YXIgY2ggPSBzaWRlID09IFwiYWZ0ZXJcIiA/IGV4dGVudC5iZWdpbiA6IGV4dGVudC5lbmQgLSAoL1xccy8udGVzdChsaW5lT2JqLnRleHQuY2hhckF0KGV4dGVudC5lbmQgLSAxKSkgPyAyIDogMSk7XG4gICAgICAgIHJldHVybiBjb29yZHMoY2gsIHByb3ApW3Byb3BdXG4gICAgICB9XG5cbiAgICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmVPYmosIGRvYy5kaXJlY3Rpb24pO1xuICAgICAgaXRlcmF0ZUJpZGlTZWN0aW9ucyhvcmRlciwgZnJvbUFyZyB8fCAwLCB0b0FyZyA9PSBudWxsID8gbGluZUxlbiA6IHRvQXJnLCBmdW5jdGlvbiAoZnJvbSwgdG8sIGRpciwgaSkge1xuICAgICAgICB2YXIgbHRyID0gZGlyID09IFwibHRyXCI7XG4gICAgICAgIHZhciBmcm9tUG9zID0gY29vcmRzKGZyb20sIGx0ciA/IFwibGVmdFwiIDogXCJyaWdodFwiKTtcbiAgICAgICAgdmFyIHRvUG9zID0gY29vcmRzKHRvIC0gMSwgbHRyID8gXCJyaWdodFwiIDogXCJsZWZ0XCIpO1xuXG4gICAgICAgIHZhciBvcGVuU3RhcnQgPSBmcm9tQXJnID09IG51bGwgJiYgZnJvbSA9PSAwLCBvcGVuRW5kID0gdG9BcmcgPT0gbnVsbCAmJiB0byA9PSBsaW5lTGVuO1xuICAgICAgICB2YXIgZmlyc3QgPSBpID09IDAsIGxhc3QgPSAhb3JkZXIgfHwgaSA9PSBvcmRlci5sZW5ndGggLSAxO1xuICAgICAgICBpZiAodG9Qb3MudG9wIC0gZnJvbVBvcy50b3AgPD0gMykgeyAvLyBTaW5nbGUgbGluZVxuICAgICAgICAgIHZhciBvcGVuTGVmdCA9IChkb2NMVFIgPyBvcGVuU3RhcnQgOiBvcGVuRW5kKSAmJiBmaXJzdDtcbiAgICAgICAgICB2YXIgb3BlblJpZ2h0ID0gKGRvY0xUUiA/IG9wZW5FbmQgOiBvcGVuU3RhcnQpICYmIGxhc3Q7XG4gICAgICAgICAgdmFyIGxlZnQgPSBvcGVuTGVmdCA/IGxlZnRTaWRlIDogKGx0ciA/IGZyb21Qb3MgOiB0b1BvcykubGVmdDtcbiAgICAgICAgICB2YXIgcmlnaHQgPSBvcGVuUmlnaHQgPyByaWdodFNpZGUgOiAobHRyID8gdG9Qb3MgOiBmcm9tUG9zKS5yaWdodDtcbiAgICAgICAgICBhZGQobGVmdCwgZnJvbVBvcy50b3AsIHJpZ2h0IC0gbGVmdCwgZnJvbVBvcy5ib3R0b20pO1xuICAgICAgICB9IGVsc2UgeyAvLyBNdWx0aXBsZSBsaW5lc1xuICAgICAgICAgIHZhciB0b3BMZWZ0LCB0b3BSaWdodCwgYm90TGVmdCwgYm90UmlnaHQ7XG4gICAgICAgICAgaWYgKGx0cikge1xuICAgICAgICAgICAgdG9wTGVmdCA9IGRvY0xUUiAmJiBvcGVuU3RhcnQgJiYgZmlyc3QgPyBsZWZ0U2lkZSA6IGZyb21Qb3MubGVmdDtcbiAgICAgICAgICAgIHRvcFJpZ2h0ID0gZG9jTFRSID8gcmlnaHRTaWRlIDogd3JhcFgoZnJvbSwgZGlyLCBcImJlZm9yZVwiKTtcbiAgICAgICAgICAgIGJvdExlZnQgPSBkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgICBib3RSaWdodCA9IGRvY0xUUiAmJiBvcGVuRW5kICYmIGxhc3QgPyByaWdodFNpZGUgOiB0b1Bvcy5yaWdodDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9wTGVmdCA9ICFkb2NMVFIgPyBsZWZ0U2lkZSA6IHdyYXBYKGZyb20sIGRpciwgXCJiZWZvcmVcIik7XG4gICAgICAgICAgICB0b3BSaWdodCA9ICFkb2NMVFIgJiYgb3BlblN0YXJ0ICYmIGZpcnN0ID8gcmlnaHRTaWRlIDogZnJvbVBvcy5yaWdodDtcbiAgICAgICAgICAgIGJvdExlZnQgPSAhZG9jTFRSICYmIG9wZW5FbmQgJiYgbGFzdCA/IGxlZnRTaWRlIDogdG9Qb3MubGVmdDtcbiAgICAgICAgICAgIGJvdFJpZ2h0ID0gIWRvY0xUUiA/IHJpZ2h0U2lkZSA6IHdyYXBYKHRvLCBkaXIsIFwiYWZ0ZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFkZCh0b3BMZWZ0LCBmcm9tUG9zLnRvcCwgdG9wUmlnaHQgLSB0b3BMZWZ0LCBmcm9tUG9zLmJvdHRvbSk7XG4gICAgICAgICAgaWYgKGZyb21Qb3MuYm90dG9tIDwgdG9Qb3MudG9wKSB7IGFkZChsZWZ0U2lkZSwgZnJvbVBvcy5ib3R0b20sIG51bGwsIHRvUG9zLnRvcCk7IH1cbiAgICAgICAgICBhZGQoYm90TGVmdCwgdG9Qb3MudG9wLCBib3RSaWdodCAtIGJvdExlZnQsIHRvUG9zLmJvdHRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXJ0IHx8IGNtcENvb3Jkcyhmcm9tUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gZnJvbVBvczsgfVxuICAgICAgICBpZiAoY21wQ29vcmRzKHRvUG9zLCBzdGFydCkgPCAwKSB7IHN0YXJ0ID0gdG9Qb3M7IH1cbiAgICAgICAgaWYgKCFlbmQgfHwgY21wQ29vcmRzKGZyb21Qb3MsIGVuZCkgPCAwKSB7IGVuZCA9IGZyb21Qb3M7IH1cbiAgICAgICAgaWYgKGNtcENvb3Jkcyh0b1BvcywgZW5kKSA8IDApIHsgZW5kID0gdG9Qb3M7IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogZW5kfVxuICAgIH1cblxuICAgIHZhciBzRnJvbSA9IHJhbmdlLmZyb20oKSwgc1RvID0gcmFuZ2UudG8oKTtcbiAgICBpZiAoc0Zyb20ubGluZSA9PSBzVG8ubGluZSkge1xuICAgICAgZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNUby5jaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmcm9tTGluZSA9IGdldExpbmUoZG9jLCBzRnJvbS5saW5lKSwgdG9MaW5lID0gZ2V0TGluZShkb2MsIHNUby5saW5lKTtcbiAgICAgIHZhciBzaW5nbGVWTGluZSA9IHZpc3VhbExpbmUoZnJvbUxpbmUpID09IHZpc3VhbExpbmUodG9MaW5lKTtcbiAgICAgIHZhciBsZWZ0RW5kID0gZHJhd0ZvckxpbmUoc0Zyb20ubGluZSwgc0Zyb20uY2gsIHNpbmdsZVZMaW5lID8gZnJvbUxpbmUudGV4dC5sZW5ndGggKyAxIDogbnVsbCkuZW5kO1xuICAgICAgdmFyIHJpZ2h0U3RhcnQgPSBkcmF3Rm9yTGluZShzVG8ubGluZSwgc2luZ2xlVkxpbmUgPyAwIDogbnVsbCwgc1RvLmNoKS5zdGFydDtcbiAgICAgIGlmIChzaW5nbGVWTGluZSkge1xuICAgICAgICBpZiAobGVmdEVuZC50b3AgPCByaWdodFN0YXJ0LnRvcCAtIDIpIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIG51bGwsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgICBhZGQobGVmdFNpZGUsIHJpZ2h0U3RhcnQudG9wLCByaWdodFN0YXJ0LmxlZnQsIHJpZ2h0U3RhcnQuYm90dG9tKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGQobGVmdEVuZC5yaWdodCwgbGVmdEVuZC50b3AsIHJpZ2h0U3RhcnQubGVmdCAtIGxlZnRFbmQucmlnaHQsIGxlZnRFbmQuYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxlZnRFbmQuYm90dG9tIDwgcmlnaHRTdGFydC50b3ApXG4gICAgICAgIHsgYWRkKGxlZnRTaWRlLCBsZWZ0RW5kLmJvdHRvbSwgbnVsbCwgcmlnaHRTdGFydC50b3ApOyB9XG4gICAgfVxuXG4gICAgb3V0cHV0LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgfVxuXG4gIC8vIEN1cnNvci1ibGlua2luZ1xuICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgcmV0dXJuIH1cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgY2xlYXJJbnRlcnZhbChkaXNwbGF5LmJsaW5rZXIpO1xuICAgIHZhciBvbiA9IHRydWU7XG4gICAgZGlzcGxheS5jdXJzb3JEaXYuc3R5bGUudmlzaWJpbGl0eSA9IFwiXCI7XG4gICAgaWYgKGNtLm9wdGlvbnMuY3Vyc29yQmxpbmtSYXRlID4gMClcbiAgICAgIHsgZGlzcGxheS5ibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWNtLmhhc0ZvY3VzKCkpIHsgb25CbHVyKGNtKTsgfVxuICAgICAgICBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gKG9uID0gIW9uKSA/IFwiXCIgOiBcImhpZGRlblwiO1xuICAgICAgfSwgY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUpOyB9XG4gICAgZWxzZSBpZiAoY20ub3B0aW9ucy5jdXJzb3JCbGlua1JhdGUgPCAwKVxuICAgICAgeyBkaXNwbGF5LmN1cnNvckRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5zdXJlRm9jdXMoY20pIHtcbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHsgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpOyBvbkZvY3VzKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVsYXlCbHVyRXZlbnQoY20pIHtcbiAgICBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IHRydWU7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkge1xuICAgICAgY20uc3RhdGUuZGVsYXlpbmdCbHVyRXZlbnQgPSBmYWxzZTtcbiAgICAgIG9uQmx1cihjbSk7XG4gICAgfSB9LCAxMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Gb2N1cyhjbSwgZSkge1xuICAgIGlmIChjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCkgeyBjbS5zdGF0ZS5kZWxheWluZ0JsdXJFdmVudCA9IGZhbHNlOyB9XG5cbiAgICBpZiAoY20ub3B0aW9ucy5yZWFkT25seSA9PSBcIm5vY3Vyc29yXCIpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWNtLnN0YXRlLmZvY3VzZWQpIHtcbiAgICAgIHNpZ25hbChjbSwgXCJmb2N1c1wiLCBjbSwgZSk7XG4gICAgICBjbS5zdGF0ZS5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIGFkZENsYXNzKGNtLmRpc3BsYXkud3JhcHBlciwgXCJDb2RlTWlycm9yLWZvY3VzZWRcIik7XG4gICAgICAvLyBUaGlzIHRlc3QgcHJldmVudHMgdGhpcyBmcm9tIGZpcmluZyB3aGVuIGEgY29udGV4dFxuICAgICAgLy8gbWVudSBpcyBjbG9zZWQgKHNpbmNlIHRoZSBpbnB1dCByZXNldCB3b3VsZCBraWxsIHRoZVxuICAgICAgLy8gc2VsZWN0LWFsbCBkZXRlY3Rpb24gaGFjaylcbiAgICAgIGlmICghY20uY3VyT3AgJiYgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSAhPSBjbS5kb2Muc2VsKSB7XG4gICAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgaWYgKHdlYmtpdCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgfSAvLyBJc3N1ZSAjMTczMFxuICAgICAgfVxuICAgICAgY20uZGlzcGxheS5pbnB1dC5yZWNlaXZlZEZvY3VzKCk7XG4gICAgfVxuICAgIHJlc3RhcnRCbGluayhjbSk7XG4gIH1cbiAgZnVuY3Rpb24gb25CbHVyKGNtLCBlKSB7XG4gICAgaWYgKGNtLnN0YXRlLmRlbGF5aW5nQmx1ckV2ZW50KSB7IHJldHVybiB9XG5cbiAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgc2lnbmFsKGNtLCBcImJsdXJcIiwgY20sIGUpO1xuICAgICAgY20uc3RhdGUuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci1mb2N1c2VkXCIpO1xuICAgIH1cbiAgICBjbGVhckludGVydmFsKGNtLmRpc3BsYXkuYmxpbmtlcik7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGlmICghY20uc3RhdGUuZm9jdXNlZCkgeyBjbS5kaXNwbGF5LnNoaWZ0ID0gZmFsc2U7IH0gfSwgMTUwKTtcbiAgfVxuXG4gIC8vIFJlYWQgdGhlIGFjdHVhbCBoZWlnaHRzIG9mIHRoZSByZW5kZXJlZCBsaW5lcywgYW5kIHVwZGF0ZSB0aGVpclxuICAvLyBzdG9yZWQgaGVpZ2h0cyB0byBtYXRjaC5cbiAgZnVuY3Rpb24gdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgdmFyIHByZXZCb3R0b20gPSBkaXNwbGF5LmxpbmVEaXYub2Zmc2V0VG9wO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheS52aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3VyID0gZGlzcGxheS52aWV3W2ldLCB3cmFwcGluZyA9IGNtLm9wdGlvbnMubGluZVdyYXBwaW5nO1xuICAgICAgdmFyIGhlaWdodCA9ICh2b2lkIDApLCB3aWR0aCA9IDA7XG4gICAgICBpZiAoY3VyLmhpZGRlbikgeyBjb250aW51ZSB9XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDgpIHtcbiAgICAgICAgdmFyIGJvdCA9IGN1ci5ub2RlLm9mZnNldFRvcCArIGN1ci5ub2RlLm9mZnNldEhlaWdodDtcbiAgICAgICAgaGVpZ2h0ID0gYm90IC0gcHJldkJvdHRvbTtcbiAgICAgICAgcHJldkJvdHRvbSA9IGJvdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBib3ggPSBjdXIubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaGVpZ2h0ID0gYm94LmJvdHRvbSAtIGJveC50b3A7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgbGluZXMgZG9uJ3QgZXh0ZW5kIHBhc3QgdGhlIHJpZ2h0IG9mIHRoZSBjdXJyZW50XG4gICAgICAgIC8vIGVkaXRvciB3aWR0aFxuICAgICAgICBpZiAoIXdyYXBwaW5nICYmIGN1ci50ZXh0LmZpcnN0Q2hpbGQpXG4gICAgICAgICAgeyB3aWR0aCA9IGN1ci50ZXh0LmZpcnN0Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgLSBib3gubGVmdCAtIDE7IH1cbiAgICAgIH1cbiAgICAgIHZhciBkaWZmID0gY3VyLmxpbmUuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgaWYgKGRpZmYgPiAuMDA1IHx8IGRpZmYgPCAtLjAwNSkge1xuICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGN1ci5saW5lLCBoZWlnaHQpO1xuICAgICAgICB1cGRhdGVXaWRnZXRIZWlnaHQoY3VyLmxpbmUpO1xuICAgICAgICBpZiAoY3VyLnJlc3QpIHsgZm9yICh2YXIgaiA9IDA7IGogPCBjdXIucmVzdC5sZW5ndGg7IGorKylcbiAgICAgICAgICB7IHVwZGF0ZVdpZGdldEhlaWdodChjdXIucmVzdFtqXSk7IH0gfVxuICAgICAgfVxuICAgICAgaWYgKHdpZHRoID4gY20uZGlzcGxheS5zaXplcldpZHRoKSB7XG4gICAgICAgIHZhciBjaFdpZHRoID0gTWF0aC5jZWlsKHdpZHRoIC8gY2hhcldpZHRoKGNtLmRpc3BsYXkpKTtcbiAgICAgICAgaWYgKGNoV2lkdGggPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBjaFdpZHRoO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZSA9IGN1ci5saW5lO1xuICAgICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVhZCBhbmQgc3RvcmUgdGhlIGhlaWdodCBvZiBsaW5lIHdpZGdldHMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBnaXZlbiBsaW5lLlxuICBmdW5jdGlvbiB1cGRhdGVXaWRnZXRIZWlnaHQobGluZSkge1xuICAgIGlmIChsaW5lLndpZGdldHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLndpZGdldHMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciB3ID0gbGluZS53aWRnZXRzW2ldLCBwYXJlbnQgPSB3Lm5vZGUucGFyZW50Tm9kZTtcbiAgICAgIGlmIChwYXJlbnQpIHsgdy5oZWlnaHQgPSBwYXJlbnQub2Zmc2V0SGVpZ2h0OyB9XG4gICAgfSB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBsaW5lcyB0aGF0IGFyZSB2aXNpYmxlIGluIGEgZ2l2ZW4gdmlld3BvcnQgKGRlZmF1bHRzXG4gIC8vIHRoZSB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24pLiB2aWV3cG9ydCBtYXkgY29udGFpbiB0b3AsXG4gIC8vIGhlaWdodCwgYW5kIGVuc3VyZSAoc2VlIG9wLnNjcm9sbFRvUG9zKSBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoZGlzcGxheSwgZG9jLCB2aWV3cG9ydCkge1xuICAgIHZhciB0b3AgPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC50b3AgIT0gbnVsbCA/IE1hdGgubWF4KDAsIHZpZXdwb3J0LnRvcCkgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB0b3AgPSBNYXRoLmZsb29yKHRvcCAtIHBhZGRpbmdUb3AoZGlzcGxheSkpO1xuICAgIHZhciBib3R0b20gPSB2aWV3cG9ydCAmJiB2aWV3cG9ydC5ib3R0b20gIT0gbnVsbCA/IHZpZXdwb3J0LmJvdHRvbSA6IHRvcCArIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG5cbiAgICB2YXIgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIHRvcCksIHRvID0gbGluZUF0SGVpZ2h0KGRvYywgYm90dG9tKTtcbiAgICAvLyBFbnN1cmUgaXMgYSB7ZnJvbToge2xpbmUsIGNofSwgdG86IHtsaW5lLCBjaH19IG9iamVjdCwgYW5kXG4gICAgLy8gZm9yY2VzIHRob3NlIGxpbmVzIGludG8gdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSkuXG4gICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LmVuc3VyZSkge1xuICAgICAgdmFyIGVuc3VyZUZyb20gPSB2aWV3cG9ydC5lbnN1cmUuZnJvbS5saW5lLCBlbnN1cmVUbyA9IHZpZXdwb3J0LmVuc3VyZS50by5saW5lO1xuICAgICAgaWYgKGVuc3VyZUZyb20gPCBmcm9tKSB7XG4gICAgICAgIGZyb20gPSBlbnN1cmVGcm9tO1xuICAgICAgICB0byA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlRnJvbSkpICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodCk7XG4gICAgICB9IGVsc2UgaWYgKE1hdGgubWluKGVuc3VyZVRvLCBkb2MubGFzdExpbmUoKSkgPj0gdG8pIHtcbiAgICAgICAgZnJvbSA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodEF0TGluZShnZXRMaW5lKGRvYywgZW5zdXJlVG8pKSAtIGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQpO1xuICAgICAgICB0byA9IGVuc3VyZVRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiBNYXRoLm1heCh0bywgZnJvbSArIDEpfVxuICB9XG5cbiAgLy8gU0NST0xMSU5HIFRISU5HUyBJTlRPIFZJRVdcblxuICAvLyBJZiBhbiBlZGl0b3Igc2l0cyBvbiB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgd2luZG93LCBwYXJ0aWFsbHlcbiAgLy8gc2Nyb2xsZWQgb3V0IG9mIHZpZXcsIHRoaXMgZW5zdXJlcyB0aGF0IHRoZSBjdXJzb3IgaXMgdmlzaWJsZS5cbiAgZnVuY3Rpb24gbWF5YmVTY3JvbGxXaW5kb3coY20sIHJlY3QpIHtcbiAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIFwic2Nyb2xsQ3Vyc29ySW50b1ZpZXdcIikpIHsgcmV0dXJuIH1cblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgYm94ID0gZGlzcGxheS5zaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZG9TY3JvbGwgPSBudWxsO1xuICAgIGlmIChyZWN0LnRvcCArIGJveC50b3AgPCAwKSB7IGRvU2Nyb2xsID0gdHJ1ZTsgfVxuICAgIGVsc2UgaWYgKHJlY3QuYm90dG9tICsgYm94LnRvcCA+ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkpIHsgZG9TY3JvbGwgPSBmYWxzZTsgfVxuICAgIGlmIChkb1Njcm9sbCAhPSBudWxsICYmICFwaGFudG9tKSB7XG4gICAgICB2YXIgc2Nyb2xsTm9kZSA9IGVsdChcImRpdlwiLCBcIlxcdTIwMGJcIiwgbnVsbCwgKFwicG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IFwiICsgKHJlY3QudG9wIC0gZGlzcGxheS52aWV3T2Zmc2V0IC0gcGFkZGluZ1RvcChjbS5kaXNwbGF5KSkgKyBcInB4O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiICsgKHJlY3QuYm90dG9tIC0gcmVjdC50b3AgKyBzY3JvbGxHYXAoY20pICsgZGlzcGxheS5iYXJIZWlnaHQpICsgXCJweDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogXCIgKyAocmVjdC5sZWZ0KSArIFwicHg7IHdpZHRoOiBcIiArIChNYXRoLm1heCgyLCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSkgKyBcInB4O1wiKSk7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5hcHBlbmRDaGlsZChzY3JvbGxOb2RlKTtcbiAgICAgIHNjcm9sbE5vZGUuc2Nyb2xsSW50b1ZpZXcoZG9TY3JvbGwpO1xuICAgICAgY20uZGlzcGxheS5saW5lU3BhY2UucmVtb3ZlQ2hpbGQoc2Nyb2xsTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gcG9zaXRpb24gaW50byB2aWV3IChpbW1lZGlhdGVseSksIHZlcmlmeWluZyB0aGF0XG4gIC8vIGl0IGFjdHVhbGx5IGJlY2FtZSB2aXNpYmxlIChhcyBsaW5lIGhlaWdodHMgYXJlIGFjY3VyYXRlbHlcbiAgLy8gbWVhc3VyZWQsIHRoZSBwb3NpdGlvbiBvZiBzb21ldGhpbmcgbWF5ICdkcmlmdCcgZHVyaW5nIGRyYXdpbmcpLlxuICBmdW5jdGlvbiBzY3JvbGxQb3NJbnRvVmlldyhjbSwgcG9zLCBlbmQsIG1hcmdpbikge1xuICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSAwOyB9XG4gICAgdmFyIHJlY3Q7XG4gICAgaWYgKCFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyAmJiBwb3MgPT0gZW5kKSB7XG4gICAgICAvLyBTZXQgcG9zIGFuZCBlbmQgdG8gdGhlIGN1cnNvciBwb3NpdGlvbnMgYXJvdW5kIHRoZSBjaGFyYWN0ZXIgcG9zIHN0aWNrcyB0b1xuICAgICAgLy8gSWYgcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiLCB0aGF0IGlzIGFyb3VuZCBwb3MuY2ggLSAxLCBvdGhlcndpc2UgYXJvdW5kIHBvcy5jaFxuICAgICAgLy8gSWYgcG9zID09IFBvcyhfLCAwLCBcImJlZm9yZVwiKSwgcG9zIGFuZCBlbmQgYXJlIHVuY2hhbmdlZFxuICAgICAgcG9zID0gcG9zLmNoID8gUG9zKHBvcy5saW5lLCBwb3Muc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBwb3MuY2ggLSAxIDogcG9zLmNoLCBcImFmdGVyXCIpIDogcG9zO1xuICAgICAgZW5kID0gcG9zLnN0aWNreSA9PSBcImJlZm9yZVwiID8gUG9zKHBvcy5saW5lLCBwb3MuY2ggKyAxLCBcImJlZm9yZVwiKSA6IHBvcztcbiAgICB9XG4gICAgZm9yICh2YXIgbGltaXQgPSAwOyBsaW1pdCA8IDU7IGxpbWl0KyspIHtcbiAgICAgIHZhciBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKGNtLCBwb3MpO1xuICAgICAgdmFyIGVuZENvb3JkcyA9ICFlbmQgfHwgZW5kID09IHBvcyA/IGNvb3JkcyA6IGN1cnNvckNvb3JkcyhjbSwgZW5kKTtcbiAgICAgIHJlY3QgPSB7bGVmdDogTWF0aC5taW4oY29vcmRzLmxlZnQsIGVuZENvb3Jkcy5sZWZ0KSxcbiAgICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihjb29yZHMudG9wLCBlbmRDb29yZHMudG9wKSAtIG1hcmdpbixcbiAgICAgICAgICAgICAgcmlnaHQ6IE1hdGgubWF4KGNvb3Jkcy5sZWZ0LCBlbmRDb29yZHMubGVmdCksXG4gICAgICAgICAgICAgIGJvdHRvbTogTWF0aC5tYXgoY29vcmRzLmJvdHRvbSwgZW5kQ29vcmRzLmJvdHRvbSkgKyBtYXJnaW59O1xuICAgICAgdmFyIHNjcm9sbFBvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCk7XG4gICAgICB2YXIgc3RhcnRUb3AgPSBjbS5kb2Muc2Nyb2xsVG9wLCBzdGFydExlZnQgPSBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHtcbiAgICAgICAgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGNtLmRvYy5zY3JvbGxUb3AgLSBzdGFydFRvcCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsUG9zLnNjcm9sbExlZnQgIT0gbnVsbCkge1xuICAgICAgICBzZXRTY3JvbGxMZWZ0KGNtLCBzY3JvbGxQb3Muc2Nyb2xsTGVmdCk7XG4gICAgICAgIGlmIChNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHN0YXJ0TGVmdCkgPiAxKSB7IGNoYW5nZWQgPSB0cnVlOyB9XG4gICAgICB9XG4gICAgICBpZiAoIWNoYW5nZWQpIHsgYnJlYWsgfVxuICAgIH1cbiAgICByZXR1cm4gcmVjdFxuICB9XG5cbiAgLy8gU2Nyb2xsIGEgZ2l2ZW4gc2V0IG9mIGNvb3JkaW5hdGVzIGludG8gdmlldyAoaW1tZWRpYXRlbHkpLlxuICBmdW5jdGlvbiBzY3JvbGxJbnRvVmlldyhjbSwgcmVjdCkge1xuICAgIHZhciBzY3JvbGxQb3MgPSBjYWxjdWxhdGVTY3JvbGxQb3MoY20sIHJlY3QpO1xuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsVG9wICE9IG51bGwpIHsgdXBkYXRlU2Nyb2xsVG9wKGNtLCBzY3JvbGxQb3Muc2Nyb2xsVG9wKTsgfVxuICAgIGlmIChzY3JvbGxQb3Muc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHNldFNjcm9sbExlZnQoY20sIHNjcm9sbFBvcy5zY3JvbGxMZWZ0KTsgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGEgbmV3IHNjcm9sbCBwb3NpdGlvbiBuZWVkZWQgdG8gc2Nyb2xsIHRoZSBnaXZlblxuICAvLyByZWN0YW5nbGUgaW50byB2aWV3LiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNjcm9sbFRvcCBhbmRcbiAgLy8gc2Nyb2xsTGVmdCBwcm9wZXJ0aWVzLiBXaGVuIHRoZXNlIGFyZSB1bmRlZmluZWQsIHRoZVxuICAvLyB2ZXJ0aWNhbC9ob3Jpem9udGFsIHBvc2l0aW9uIGRvZXMgbm90IG5lZWQgdG8gYmUgYWRqdXN0ZWQuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwgcmVjdCkge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc25hcE1hcmdpbiA9IHRleHRIZWlnaHQoY20uZGlzcGxheSk7XG4gICAgaWYgKHJlY3QudG9wIDwgMCkgeyByZWN0LnRvcCA9IDA7IH1cbiAgICB2YXIgc2NyZWVudG9wID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsVG9wICE9IG51bGwgPyBjbS5jdXJPcC5zY3JvbGxUb3AgOiBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcDtcbiAgICB2YXIgc2NyZWVuID0gZGlzcGxheUhlaWdodChjbSksIHJlc3VsdCA9IHt9O1xuICAgIGlmIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wID4gc2NyZWVuKSB7IHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBzY3JlZW47IH1cbiAgICB2YXIgZG9jQm90dG9tID0gY20uZG9jLmhlaWdodCArIHBhZGRpbmdWZXJ0KGRpc3BsYXkpO1xuICAgIHZhciBhdFRvcCA9IHJlY3QudG9wIDwgc25hcE1hcmdpbiwgYXRCb3R0b20gPSByZWN0LmJvdHRvbSA+IGRvY0JvdHRvbSAtIHNuYXBNYXJnaW47XG4gICAgaWYgKHJlY3QudG9wIDwgc2NyZWVudG9wKSB7XG4gICAgICByZXN1bHQuc2Nyb2xsVG9wID0gYXRUb3AgPyAwIDogcmVjdC50b3A7XG4gICAgfSBlbHNlIGlmIChyZWN0LmJvdHRvbSA+IHNjcmVlbnRvcCArIHNjcmVlbikge1xuICAgICAgdmFyIG5ld1RvcCA9IE1hdGgubWluKHJlY3QudG9wLCAoYXRCb3R0b20gPyBkb2NCb3R0b20gOiByZWN0LmJvdHRvbSkgLSBzY3JlZW4pO1xuICAgICAgaWYgKG5ld1RvcCAhPSBzY3JlZW50b3ApIHsgcmVzdWx0LnNjcm9sbFRvcCA9IG5ld1RvcDsgfVxuICAgIH1cblxuICAgIHZhciBndXR0ZXJTcGFjZSA9IGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIgPyAwIDogZGlzcGxheS5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIHZhciBzY3JlZW5sZWZ0ID0gY20uY3VyT3AgJiYgY20uY3VyT3Auc2Nyb2xsTGVmdCAhPSBudWxsID8gY20uY3VyT3Auc2Nyb2xsTGVmdCA6IGRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAtIGd1dHRlclNwYWNlO1xuICAgIHZhciBzY3JlZW53ID0gZGlzcGxheVdpZHRoKGNtKSAtIGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aDtcbiAgICB2YXIgdG9vV2lkZSA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQgPiBzY3JlZW53O1xuICAgIGlmICh0b29XaWRlKSB7IHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBzY3JlZW53OyB9XG4gICAgaWYgKHJlY3QubGVmdCA8IDEwKVxuICAgICAgeyByZXN1bHQuc2Nyb2xsTGVmdCA9IDA7IH1cbiAgICBlbHNlIGlmIChyZWN0LmxlZnQgPCBzY3JlZW5sZWZ0KVxuICAgICAgeyByZXN1bHQuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHJlY3QubGVmdCArIGd1dHRlclNwYWNlIC0gKHRvb1dpZGUgPyAwIDogMTApKTsgfVxuICAgIGVsc2UgaWYgKHJlY3QucmlnaHQgPiBzY3JlZW53ICsgc2NyZWVubGVmdCAtIDMpXG4gICAgICB7IHJlc3VsdC5zY3JvbGxMZWZ0ID0gcmVjdC5yaWdodCArICh0b29XaWRlID8gMCA6IDEwKSAtIHNjcmVlbnc7IH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvLyBTdG9yZSBhIHJlbGF0aXZlIGFkanVzdG1lbnQgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbiBpbiB0aGUgY3VycmVudFxuICAvLyBvcGVyYXRpb24gKHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzKS5cbiAgZnVuY3Rpb24gYWRkVG9TY3JvbGxUb3AoY20sIHRvcCkge1xuICAgIGlmICh0b3AgPT0gbnVsbCkgeyByZXR1cm4gfVxuICAgIHJlc29sdmVTY3JvbGxUb1BvcyhjbSk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9wID0gKGNtLmN1ck9wLnNjcm9sbFRvcCA9PSBudWxsID8gY20uZG9jLnNjcm9sbFRvcCA6IGNtLmN1ck9wLnNjcm9sbFRvcCkgKyB0b3A7XG4gIH1cblxuICAvLyBNYWtlIHN1cmUgdGhhdCBhdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb24gdGhlIGN1cnJlbnQgY3Vyc29yIGlzXG4gIC8vIHNob3duLlxuICBmdW5jdGlvbiBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7XG4gICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSB7ZnJvbTogY3VyLCB0bzogY3VyLCBtYXJnaW46IGNtLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2lufTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzKGNtLCB4LCB5KSB7XG4gICAgaWYgKHggIT0gbnVsbCB8fCB5ICE9IG51bGwpIHsgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTsgfVxuICAgIGlmICh4ICE9IG51bGwpIHsgY20uY3VyT3Auc2Nyb2xsTGVmdCA9IHg7IH1cbiAgICBpZiAoeSAhPSBudWxsKSB7IGNtLmN1ck9wLnNjcm9sbFRvcCA9IHk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvUmFuZ2UoY20sIHJhbmdlKSB7XG4gICAgcmVzb2x2ZVNjcm9sbFRvUG9zKGNtKTtcbiAgICBjbS5jdXJPcC5zY3JvbGxUb1BvcyA9IHJhbmdlO1xuICB9XG5cbiAgLy8gV2hlbiBhbiBvcGVyYXRpb24gaGFzIGl0cyBzY3JvbGxUb1BvcyBwcm9wZXJ0eSBzZXQsIGFuZCBhbm90aGVyXG4gIC8vIHNjcm9sbCBhY3Rpb24gaXMgYXBwbGllZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLCB0aGlzXG4gIC8vICdzaW11bGF0ZXMnIHNjcm9sbGluZyB0aGF0IHBvc2l0aW9uIGludG8gdmlldyBpbiBhIGNoZWFwIHdheSwgc29cbiAgLy8gdGhhdCB0aGUgZWZmZWN0IG9mIGludGVybWVkaWF0ZSBzY3JvbGwgY29tbWFuZHMgaXMgbm90IGlnbm9yZWQuXG4gIGZ1bmN0aW9uIHJlc29sdmVTY3JvbGxUb1BvcyhjbSkge1xuICAgIHZhciByYW5nZSA9IGNtLmN1ck9wLnNjcm9sbFRvUG9zO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgY20uY3VyT3Auc2Nyb2xsVG9Qb3MgPSBudWxsO1xuICAgICAgdmFyIGZyb20gPSBlc3RpbWF0ZUNvb3JkcyhjbSwgcmFuZ2UuZnJvbSksIHRvID0gZXN0aW1hdGVDb29yZHMoY20sIHJhbmdlLnRvKTtcbiAgICAgIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCByYW5nZS5tYXJnaW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbFRvQ29vcmRzUmFuZ2UoY20sIGZyb20sIHRvLCBtYXJnaW4pIHtcbiAgICB2YXIgc1BvcyA9IGNhbGN1bGF0ZVNjcm9sbFBvcyhjbSwge1xuICAgICAgbGVmdDogTWF0aC5taW4oZnJvbS5sZWZ0LCB0by5sZWZ0KSxcbiAgICAgIHRvcDogTWF0aC5taW4oZnJvbS50b3AsIHRvLnRvcCkgLSBtYXJnaW4sXG4gICAgICByaWdodDogTWF0aC5tYXgoZnJvbS5yaWdodCwgdG8ucmlnaHQpLFxuICAgICAgYm90dG9tOiBNYXRoLm1heChmcm9tLmJvdHRvbSwgdG8uYm90dG9tKSArIG1hcmdpblxuICAgIH0pO1xuICAgIHNjcm9sbFRvQ29vcmRzKGNtLCBzUG9zLnNjcm9sbExlZnQsIHNQb3Muc2Nyb2xsVG9wKTtcbiAgfVxuXG4gIC8vIFN5bmMgdGhlIHNjcm9sbGFibGUgYXJlYSBhbmQgc2Nyb2xsYmFycywgZW5zdXJlIHRoZSB2aWV3cG9ydFxuICAvLyBjb3ZlcnMgdGhlIHZpc2libGUgYXJlYS5cbiAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsVG9wKGNtLCB2YWwpIHtcbiAgICBpZiAoTWF0aC5hYnMoY20uZG9jLnNjcm9sbFRvcCAtIHZhbCkgPCAyKSB7IHJldHVybiB9XG4gICAgaWYgKCFnZWNrbykgeyB1cGRhdGVEaXNwbGF5U2ltcGxlKGNtLCB7dG9wOiB2YWx9KTsgfVxuICAgIHNldFNjcm9sbFRvcChjbSwgdmFsLCB0cnVlKTtcbiAgICBpZiAoZ2Vja28pIHsgdXBkYXRlRGlzcGxheVNpbXBsZShjbSk7IH1cbiAgICBzdGFydFdvcmtlcihjbSwgMTAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNjcm9sbFRvcChjbSwgdmFsLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gY20uZGlzcGxheS5zY3JvbGxlci5jbGllbnRIZWlnaHQsIHZhbCkpO1xuICAgIGlmIChjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9PSB2YWwgJiYgIWZvcmNlU2Nyb2xsKSB7IHJldHVybiB9XG4gICAgY20uZG9jLnNjcm9sbFRvcCA9IHZhbDtcbiAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsVG9wKHZhbCk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsVG9wICE9IHZhbCkgeyBjbS5kaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHZhbDsgfVxuICB9XG5cbiAgLy8gU3luYyBzY3JvbGxlciBhbmQgc2Nyb2xsYmFyLCBlbnN1cmUgdGhlIGd1dHRlciBlbGVtZW50cyBhcmVcbiAgLy8gYWxpZ25lZC5cbiAgZnVuY3Rpb24gc2V0U2Nyb2xsTGVmdChjbSwgdmFsLCBpc1Njcm9sbGVyLCBmb3JjZVNjcm9sbCkge1xuICAgIHZhbCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHZhbCwgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxXaWR0aCAtIGNtLmRpc3BsYXkuc2Nyb2xsZXIuY2xpZW50V2lkdGgpKTtcbiAgICBpZiAoKGlzU2Nyb2xsZXIgPyB2YWwgPT0gY20uZG9jLnNjcm9sbExlZnQgOiBNYXRoLmFicyhjbS5kb2Muc2Nyb2xsTGVmdCAtIHZhbCkgPCAyKSAmJiAhZm9yY2VTY3JvbGwpIHsgcmV0dXJuIH1cbiAgICBjbS5kb2Muc2Nyb2xsTGVmdCA9IHZhbDtcbiAgICBhbGlnbkhvcml6b250YWxseShjbSk7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCAhPSB2YWwpIHsgY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxMZWZ0ID0gdmFsOyB9XG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbExlZnQodmFsKTtcbiAgfVxuXG4gIC8vIFNDUk9MTEJBUlNcblxuICAvLyBQcmVwYXJlIERPTSByZWFkcyBuZWVkZWQgdG8gdXBkYXRlIHRoZSBzY3JvbGxiYXJzLiBEb25lIGluIG9uZVxuICAvLyBzaG90IHRvIG1pbmltaXplIHVwZGF0ZS9tZWFzdXJlIHJvdW5kdHJpcHMuXG4gIGZ1bmN0aW9uIG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5LCBndXR0ZXJXID0gZC5ndXR0ZXJzLm9mZnNldFdpZHRoO1xuICAgIHZhciBkb2NIID0gTWF0aC5yb3VuZChjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkpO1xuICAgIHJldHVybiB7XG4gICAgICBjbGllbnRIZWlnaHQ6IGQuc2Nyb2xsZXIuY2xpZW50SGVpZ2h0LFxuICAgICAgdmlld0hlaWdodDogZC53cmFwcGVyLmNsaWVudEhlaWdodCxcbiAgICAgIHNjcm9sbFdpZHRoOiBkLnNjcm9sbGVyLnNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aDogZC5zY3JvbGxlci5jbGllbnRXaWR0aCxcbiAgICAgIHZpZXdXaWR0aDogZC53cmFwcGVyLmNsaWVudFdpZHRoLFxuICAgICAgYmFyTGVmdDogY20ub3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlclcgOiAwLFxuICAgICAgZG9jSGVpZ2h0OiBkb2NILFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBkb2NIICsgc2Nyb2xsR2FwKGNtKSArIGQuYmFySGVpZ2h0LFxuICAgICAgbmF0aXZlQmFyV2lkdGg6IGQubmF0aXZlQmFyV2lkdGgsXG4gICAgICBndXR0ZXJXaWR0aDogZ3V0dGVyV1xuICAgIH1cbiAgfVxuXG4gIHZhciBOYXRpdmVTY3JvbGxiYXJzID0gZnVuY3Rpb24ocGxhY2UsIHNjcm9sbCwgY20pIHtcbiAgICB0aGlzLmNtID0gY207XG4gICAgdmFyIHZlcnQgPSB0aGlzLnZlcnQgPSBlbHQoXCJkaXZcIiwgW2VsdChcImRpdlwiLCBudWxsLCBudWxsLCBcIm1pbi13aWR0aDogMXB4XCIpXSwgXCJDb2RlTWlycm9yLXZzY3JvbGxiYXJcIik7XG4gICAgdmFyIGhvcml6ID0gdGhpcy5ob3JpeiA9IGVsdChcImRpdlwiLCBbZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwiaGVpZ2h0OiAxMDAlOyBtaW4taGVpZ2h0OiAxcHhcIildLCBcIkNvZGVNaXJyb3ItaHNjcm9sbGJhclwiKTtcbiAgICB2ZXJ0LnRhYkluZGV4ID0gaG9yaXoudGFiSW5kZXggPSAtMTtcbiAgICBwbGFjZSh2ZXJ0KTsgcGxhY2UoaG9yaXopO1xuXG4gICAgb24odmVydCwgXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHZlcnQuY2xpZW50SGVpZ2h0KSB7IHNjcm9sbCh2ZXJ0LnNjcm9sbFRvcCwgXCJ2ZXJ0aWNhbFwiKTsgfVxuICAgIH0pO1xuICAgIG9uKGhvcml6LCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaG9yaXouY2xpZW50V2lkdGgpIHsgc2Nyb2xsKGhvcml6LnNjcm9sbExlZnQsIFwiaG9yaXpvbnRhbFwiKTsgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5jaGVja2VkWmVyb1dpZHRoID0gZmFsc2U7XG4gICAgLy8gTmVlZCB0byBzZXQgYSBtaW5pbXVtIHdpZHRoIHRvIHNlZSB0aGUgc2Nyb2xsYmFyIG9uIElFNyAoYnV0IG11c3Qgbm90IHNldCBpdCBvbiBJRTgpLlxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyB0aGlzLmhvcml6LnN0eWxlLm1pbkhlaWdodCA9IHRoaXMudmVydC5zdHlsZS5taW5XaWR0aCA9IFwiMThweFwiOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKG1lYXN1cmUpIHtcbiAgICB2YXIgbmVlZHNIID0gbWVhc3VyZS5zY3JvbGxXaWR0aCA+IG1lYXN1cmUuY2xpZW50V2lkdGggKyAxO1xuICAgIHZhciBuZWVkc1YgPSBtZWFzdXJlLnNjcm9sbEhlaWdodCA+IG1lYXN1cmUuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICB2YXIgc1dpZHRoID0gbWVhc3VyZS5uYXRpdmVCYXJXaWR0aDtcblxuICAgIGlmIChuZWVkc1YpIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgdGhpcy52ZXJ0LnN0eWxlLmJvdHRvbSA9IG5lZWRzSCA/IHNXaWR0aCArIFwicHhcIiA6IFwiMFwiO1xuICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gbWVhc3VyZS52aWV3SGVpZ2h0IC0gKG5lZWRzSCA/IHNXaWR0aCA6IDApO1xuICAgICAgLy8gQSBidWcgaW4gSUU4IGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIG5lZ2F0aXZlLCBzbyBndWFyZCBpdC5cbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9XG4gICAgICAgIE1hdGgubWF4KDAsIG1lYXN1cmUuc2Nyb2xsSGVpZ2h0IC0gbWVhc3VyZS5jbGllbnRIZWlnaHQgKyB0b3RhbEhlaWdodCkgKyBcInB4XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmVydC5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgIHRoaXMudmVydC5maXJzdENoaWxkLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgIH1cblxuICAgIGlmIChuZWVkc0gpIHtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUucmlnaHQgPSBuZWVkc1YgPyBzV2lkdGggKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIHRoaXMuaG9yaXouc3R5bGUubGVmdCA9IG1lYXN1cmUuYmFyTGVmdCArIFwicHhcIjtcbiAgICAgIHZhciB0b3RhbFdpZHRoID0gbWVhc3VyZS52aWV3V2lkdGggLSBtZWFzdXJlLmJhckxlZnQgLSAobmVlZHNWID8gc1dpZHRoIDogMCk7XG4gICAgICB0aGlzLmhvcml6LmZpcnN0Q2hpbGQuc3R5bGUud2lkdGggPVxuICAgICAgICBNYXRoLm1heCgwLCBtZWFzdXJlLnNjcm9sbFdpZHRoIC0gbWVhc3VyZS5jbGllbnRXaWR0aCArIHRvdGFsV2lkdGgpICsgXCJweFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhvcml6LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgdGhpcy5ob3Jpei5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gXCIwXCI7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrZWRaZXJvV2lkdGggJiYgbWVhc3VyZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICBpZiAoc1dpZHRoID09IDApIHsgdGhpcy56ZXJvV2lkdGhIYWNrKCk7IH1cbiAgICAgIHRoaXMuY2hlY2tlZFplcm9XaWR0aCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtyaWdodDogbmVlZHNWID8gc1dpZHRoIDogMCwgYm90dG9tOiBuZWVkc0ggPyBzV2lkdGggOiAwfVxuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbiAocG9zKSB7XG4gICAgaWYgKHRoaXMuaG9yaXouc2Nyb2xsTGVmdCAhPSBwb3MpIHsgdGhpcy5ob3Jpei5zY3JvbGxMZWZ0ID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZUhvcml6KSB7IHRoaXMuZW5hYmxlWmVyb1dpZHRoQmFyKHRoaXMuaG9yaXosIHRoaXMuZGlzYWJsZUhvcml6LCBcImhvcml6XCIpOyB9XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKHBvcykge1xuICAgIGlmICh0aGlzLnZlcnQuc2Nyb2xsVG9wICE9IHBvcykgeyB0aGlzLnZlcnQuc2Nyb2xsVG9wID0gcG9zOyB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZVZlcnQpIHsgdGhpcy5lbmFibGVaZXJvV2lkdGhCYXIodGhpcy52ZXJ0LCB0aGlzLmRpc2FibGVWZXJ0LCBcInZlcnRcIik7IH1cbiAgfTtcblxuICBOYXRpdmVTY3JvbGxiYXJzLnByb3RvdHlwZS56ZXJvV2lkdGhIYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB3ID0gbWFjICYmICFtYWNfZ2VNb3VudGFpbkxpb24gPyBcIjEycHhcIiA6IFwiMThweFwiO1xuICAgIHRoaXMuaG9yaXouc3R5bGUuaGVpZ2h0ID0gdGhpcy52ZXJ0LnN0eWxlLndpZHRoID0gdztcbiAgICB0aGlzLmhvcml6LnN0eWxlLnBvaW50ZXJFdmVudHMgPSB0aGlzLnZlcnQuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiO1xuICAgIHRoaXMuZGlzYWJsZUhvcml6ID0gbmV3IERlbGF5ZWQ7XG4gICAgdGhpcy5kaXNhYmxlVmVydCA9IG5ldyBEZWxheWVkO1xuICB9O1xuXG4gIE5hdGl2ZVNjcm9sbGJhcnMucHJvdG90eXBlLmVuYWJsZVplcm9XaWR0aEJhciA9IGZ1bmN0aW9uIChiYXIsIGRlbGF5LCB0eXBlKSB7XG4gICAgYmFyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcbiAgICBmdW5jdGlvbiBtYXliZURpc2FibGUoKSB7XG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGV0aGVyIHRoZSBzY3JvbGxiYXIgaXMgc3RpbGwgdmlzaWJsZSwgd2VcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIGVsZW1lbnQgdW5kZXIgdGhlIHBpeGVsIGluIHRoZSBib3R0b21cbiAgICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgc2Nyb2xsYmFyIGJveCBpcyB0aGUgc2Nyb2xsYmFyIGJveFxuICAgICAgLy8gaXRzZWxmICh3aGVuIHRoZSBiYXIgaXMgc3RpbGwgdmlzaWJsZSkgb3IgaXRzIGZpbGxlciBjaGlsZFxuICAgICAgLy8gKHdoZW4gdGhlIGJhciBpcyBoaWRkZW4pLiBJZiBpdCBpcyBzdGlsbCB2aXNpYmxlLCB3ZSBrZWVwXG4gICAgICAvLyBpdCBlbmFibGVkLCBpZiBpdCdzIGhpZGRlbiwgd2UgZGlzYWJsZSBwb2ludGVyIGV2ZW50cy5cbiAgICAgIHZhciBib3ggPSBiYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgZWx0ID0gdHlwZSA9PSBcInZlcnRcIiA/IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYm94LnJpZ2h0IC0gMSwgKGJveC50b3AgKyBib3guYm90dG9tKSAvIDIpXG4gICAgICAgICAgOiBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KChib3gucmlnaHQgKyBib3gubGVmdCkgLyAyLCBib3guYm90dG9tIC0gMSk7XG4gICAgICBpZiAoZWx0ICE9IGJhcikgeyBiYXIuc3R5bGUucG9pbnRlckV2ZW50cyA9IFwibm9uZVwiOyB9XG4gICAgICBlbHNlIHsgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7IH1cbiAgICB9XG4gICAgZGVsYXkuc2V0KDEwMDAsIG1heWJlRGlzYWJsZSk7XG4gIH07XG5cbiAgTmF0aXZlU2Nyb2xsYmFycy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuaG9yaXoucGFyZW50Tm9kZTtcbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5ob3Jpeik7XG4gICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMudmVydCk7XG4gIH07XG5cbiAgdmFyIE51bGxTY3JvbGxiYXJzID0gZnVuY3Rpb24gKCkge307XG5cbiAgTnVsbFNjcm9sbGJhcnMucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHtib3R0b206IDAsIHJpZ2h0OiAwfSB9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsTGVmdCA9IGZ1bmN0aW9uICgpIHt9O1xuICBOdWxsU2Nyb2xsYmFycy5wcm90b3R5cGUuc2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24gKCkge307XG4gIE51bGxTY3JvbGxiYXJzLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnMoY20sIG1lYXN1cmUpIHtcbiAgICBpZiAoIW1lYXN1cmUpIHsgbWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTsgfVxuICAgIHZhciBzdGFydFdpZHRoID0gY20uZGlzcGxheS5iYXJXaWR0aCwgc3RhcnRIZWlnaHQgPSBjbS5kaXNwbGF5LmJhckhlaWdodDtcbiAgICB1cGRhdGVTY3JvbGxiYXJzSW5uZXIoY20sIG1lYXN1cmUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNCAmJiBzdGFydFdpZHRoICE9IGNtLmRpc3BsYXkuYmFyV2lkdGggfHwgc3RhcnRIZWlnaHQgIT0gY20uZGlzcGxheS5iYXJIZWlnaHQ7IGkrKykge1xuICAgICAgaWYgKHN0YXJ0V2lkdGggIT0gY20uZGlzcGxheS5iYXJXaWR0aCAmJiBjbS5vcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgICAgeyB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7IH1cbiAgICAgIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pKTtcbiAgICAgIHN0YXJ0V2lkdGggPSBjbS5kaXNwbGF5LmJhcldpZHRoOyBzdGFydEhlaWdodCA9IGNtLmRpc3BsYXkuYmFySGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlLXN5bmNocm9uaXplIHRoZSBmYWtlIHNjcm9sbGJhcnMgd2l0aCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlXG4gIC8vIGNvbnRlbnQuXG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbGJhcnNJbm5lcihjbSwgbWVhc3VyZSkge1xuICAgIHZhciBkID0gY20uZGlzcGxheTtcbiAgICB2YXIgc2l6ZXMgPSBkLnNjcm9sbGJhcnMudXBkYXRlKG1lYXN1cmUpO1xuXG4gICAgZC5zaXplci5zdHlsZS5wYWRkaW5nUmlnaHQgPSAoZC5iYXJXaWR0aCA9IHNpemVzLnJpZ2h0KSArIFwicHhcIjtcbiAgICBkLnNpemVyLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAoZC5iYXJIZWlnaHQgPSBzaXplcy5ib3R0b20pICsgXCJweFwiO1xuICAgIGQuaGVpZ2h0Rm9yY2VyLnN0eWxlLmJvcmRlckJvdHRvbSA9IHNpemVzLmJvdHRvbSArIFwicHggc29saWQgdHJhbnNwYXJlbnRcIjtcblxuICAgIGlmIChzaXplcy5yaWdodCAmJiBzaXplcy5ib3R0b20pIHtcbiAgICAgIGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLnNjcm9sbGJhckZpbGxlci5zdHlsZS53aWR0aCA9IHNpemVzLnJpZ2h0ICsgXCJweFwiO1xuICAgIH0gZWxzZSB7IGQuc2Nyb2xsYmFyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9XG4gICAgaWYgKHNpemVzLmJvdHRvbSAmJiBjbS5vcHRpb25zLmNvdmVyR3V0dGVyTmV4dFRvU2Nyb2xsYmFyICYmIGNtLm9wdGlvbnMuZml4ZWRHdXR0ZXIpIHtcbiAgICAgIGQuZ3V0dGVyRmlsbGVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS5oZWlnaHQgPSBzaXplcy5ib3R0b20gKyBcInB4XCI7XG4gICAgICBkLmd1dHRlckZpbGxlci5zdHlsZS53aWR0aCA9IG1lYXN1cmUuZ3V0dGVyV2lkdGggKyBcInB4XCI7XG4gICAgfSBlbHNlIHsgZC5ndXR0ZXJGaWxsZXIuc3R5bGUuZGlzcGxheSA9IFwiXCI7IH1cbiAgfVxuXG4gIHZhciBzY3JvbGxiYXJNb2RlbCA9IHtcIm5hdGl2ZVwiOiBOYXRpdmVTY3JvbGxiYXJzLCBcIm51bGxcIjogTnVsbFNjcm9sbGJhcnN9O1xuXG4gIGZ1bmN0aW9uIGluaXRTY3JvbGxiYXJzKGNtKSB7XG4gICAgaWYgKGNtLmRpc3BsYXkuc2Nyb2xsYmFycykge1xuICAgICAgY20uZGlzcGxheS5zY3JvbGxiYXJzLmNsZWFyKCk7XG4gICAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgICB7IHJtQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuYWRkQ2xhc3MpOyB9XG4gICAgfVxuXG4gICAgY20uZGlzcGxheS5zY3JvbGxiYXJzID0gbmV3IHNjcm9sbGJhck1vZGVsW2NtLm9wdGlvbnMuc2Nyb2xsYmFyU3R5bGVdKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBjbS5kaXNwbGF5LndyYXBwZXIuaW5zZXJ0QmVmb3JlKG5vZGUsIGNtLmRpc3BsYXkuc2Nyb2xsYmFyRmlsbGVyKTtcbiAgICAgIC8vIFByZXZlbnQgY2xpY2tzIGluIHRoZSBzY3JvbGxiYXJzIGZyb20ga2lsbGluZyBmb2N1c1xuICAgICAgb24obm9kZSwgXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY20uc3RhdGUuZm9jdXNlZCkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMCk7IH1cbiAgICAgIH0pO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIik7XG4gICAgfSwgZnVuY3Rpb24gKHBvcywgYXhpcykge1xuICAgICAgaWYgKGF4aXMgPT0gXCJob3Jpem9udGFsXCIpIHsgc2V0U2Nyb2xsTGVmdChjbSwgcG9zKTsgfVxuICAgICAgZWxzZSB7IHVwZGF0ZVNjcm9sbFRvcChjbSwgcG9zKTsgfVxuICAgIH0sIGNtKTtcbiAgICBpZiAoY20uZGlzcGxheS5zY3JvbGxiYXJzLmFkZENsYXNzKVxuICAgICAgeyBhZGRDbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5hZGRDbGFzcyk7IH1cbiAgfVxuXG4gIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBhIHNlcmllcyBvZiBjaGFuZ2VzIHRvIHRoZSBlZGl0b3JcbiAgLy8gc3RhdGUgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZVxuICAvLyBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkIGJlIGF3a3dhcmQsIHNsb3csIGFuZFxuICAvLyBlcnJvci1wcm9uZSkuIEluc3RlYWQsIGRpc3BsYXkgdXBkYXRlcyBhcmUgYmF0Y2hlZCBhbmQgdGhlbiBhbGxcbiAgLy8gY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuXG5cbiAgdmFyIG5leHRPcElkID0gMDtcbiAgLy8gU3RhcnQgYSBuZXcgb3BlcmF0aW9uLlxuICBmdW5jdGlvbiBzdGFydE9wZXJhdGlvbihjbSkge1xuICAgIGNtLmN1ck9wID0ge1xuICAgICAgY206IGNtLFxuICAgICAgdmlld0NoYW5nZWQ6IGZhbHNlLCAgICAgIC8vIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBsaW5lcyBtaWdodCBuZWVkIHRvIGJlIHJlZHJhd25cbiAgICAgIHN0YXJ0SGVpZ2h0OiBjbS5kb2MuaGVpZ2h0LCAvLyBVc2VkIHRvIGRldGVjdCBuZWVkIHRvIHVwZGF0ZSBzY3JvbGxiYXJcbiAgICAgIGZvcmNlVXBkYXRlOiBmYWxzZSwgICAgICAvLyBVc2VkIHRvIGZvcmNlIGEgcmVkcmF3XG4gICAgICB1cGRhdGVJbnB1dDogMCwgICAgICAgLy8gV2hldGhlciB0byByZXNldCB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICAgIHR5cGluZzogZmFsc2UsICAgICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVzZXQgc2hvdWxkIGJlIGNhcmVmdWwgdG8gbGVhdmUgZXhpc3RpbmcgdGV4dCAoZm9yIGNvbXBvc2l0aW5nKVxuICAgICAgY2hhbmdlT2JqczogbnVsbCwgICAgICAgIC8vIEFjY3VtdWxhdGVkIGNoYW5nZXMsIGZvciBmaXJpbmcgY2hhbmdlIGV2ZW50c1xuICAgICAgY3Vyc29yQWN0aXZpdHlIYW5kbGVyczogbnVsbCwgLy8gU2V0IG9mIGhhbmRsZXJzIHRvIGZpcmUgY3Vyc29yQWN0aXZpdHkgb25cbiAgICAgIGN1cnNvckFjdGl2aXR5Q2FsbGVkOiAwLCAvLyBUcmFja3Mgd2hpY2ggY3Vyc29yQWN0aXZpdHkgaGFuZGxlcnMgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5XG4gICAgICBzZWxlY3Rpb25DaGFuZ2VkOiBmYWxzZSwgLy8gV2hldGhlciB0aGUgc2VsZWN0aW9uIG5lZWRzIHRvIGJlIHJlZHJhd25cbiAgICAgIHVwZGF0ZU1heExpbmU6IGZhbHNlLCAgICAvLyBTZXQgd2hlbiB0aGUgd2lkZXN0IGxpbmUgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZCBhbmV3XG4gICAgICBzY3JvbGxMZWZ0OiBudWxsLCBzY3JvbGxUb3A6IG51bGwsIC8vIEludGVybWVkaWF0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCBwdXNoZWQgdG8gRE9NIHlldFxuICAgICAgc2Nyb2xsVG9Qb3M6IG51bGwsICAgICAgIC8vIFVzZWQgdG8gc2Nyb2xsIHRvIGEgc3BlY2lmaWMgcG9zaXRpb25cbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGlkOiArK25leHRPcElkICAgICAgICAgICAvLyBVbmlxdWUgSURcbiAgICB9O1xuICAgIHB1c2hPcGVyYXRpb24oY20uY3VyT3ApO1xuICB9XG5cbiAgLy8gRmluaXNoIGFuIG9wZXJhdGlvbiwgdXBkYXRpbmcgdGhlIGRpc3BsYXkgYW5kIHNpZ25hbGxpbmcgZGVsYXllZCBldmVudHNcbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKGNtKSB7XG4gICAgdmFyIG9wID0gY20uY3VyT3A7XG4gICAgaWYgKG9wKSB7IGZpbmlzaE9wZXJhdGlvbihvcCwgZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLm9wcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBncm91cC5vcHNbaV0uY20uY3VyT3AgPSBudWxsOyB9XG4gICAgICBlbmRPcGVyYXRpb25zKGdyb3VwKTtcbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gVGhlIERPTSB1cGRhdGVzIGRvbmUgd2hlbiBhbiBvcGVyYXRpb24gZmluaXNoZXMgYXJlIGJhdGNoZWQgc29cbiAgLy8gdGhhdCB0aGUgbWluaW11bSBudW1iZXIgb2YgcmVsYXlvdXRzIGFyZSByZXF1aXJlZC5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9ucyhncm91cCkge1xuICAgIHZhciBvcHMgPSBncm91cC5vcHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9SMShvcHNbaV0pOyB9XG4gICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgb3BzLmxlbmd0aDsgaSQxKyspIC8vIFdyaXRlIERPTSAobWF5YmUpXG4gICAgICB7IGVuZE9wZXJhdGlvbl9XMShvcHNbaSQxXSk7IH1cbiAgICBmb3IgKHZhciBpJDIgPSAwOyBpJDIgPCBvcHMubGVuZ3RoOyBpJDIrKykgLy8gUmVhZCBET01cbiAgICAgIHsgZW5kT3BlcmF0aW9uX1IyKG9wc1tpJDJdKTsgfVxuICAgIGZvciAodmFyIGkkMyA9IDA7IGkkMyA8IG9wcy5sZW5ndGg7IGkkMysrKSAvLyBXcml0ZSBET00gKG1heWJlKVxuICAgICAgeyBlbmRPcGVyYXRpb25fVzIob3BzW2kkM10pOyB9XG4gICAgZm9yICh2YXIgaSQ0ID0gMDsgaSQ0IDwgb3BzLmxlbmd0aDsgaSQ0KyspIC8vIFJlYWQgRE9NXG4gICAgICB7IGVuZE9wZXJhdGlvbl9maW5pc2gob3BzW2kkNF0pOyB9XG4gIH1cblxuICBmdW5jdGlvbiBlbmRPcGVyYXRpb25fUjEob3ApIHtcbiAgICB2YXIgY20gPSBvcC5jbSwgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgbWF5YmVDbGlwU2Nyb2xsYmFycyhjbSk7XG4gICAgaWYgKG9wLnVwZGF0ZU1heExpbmUpIHsgZmluZE1heExpbmUoY20pOyB9XG5cbiAgICBvcC5tdXN0VXBkYXRlID0gb3Audmlld0NoYW5nZWQgfHwgb3AuZm9yY2VVcGRhdGUgfHwgb3Auc2Nyb2xsVG9wICE9IG51bGwgfHxcbiAgICAgIG9wLnNjcm9sbFRvUG9zICYmIChvcC5zY3JvbGxUb1Bvcy5mcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgb3Auc2Nyb2xsVG9Qb3MudG8ubGluZSA+PSBkaXNwbGF5LnZpZXdUbykgfHxcbiAgICAgIGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgY20ub3B0aW9ucy5saW5lV3JhcHBpbmc7XG4gICAgb3AudXBkYXRlID0gb3AubXVzdFVwZGF0ZSAmJlxuICAgICAgbmV3IERpc3BsYXlVcGRhdGUoY20sIG9wLm11c3RVcGRhdGUgJiYge3RvcDogb3Auc2Nyb2xsVG9wLCBlbnN1cmU6IG9wLnNjcm9sbFRvUG9zfSwgb3AuZm9yY2VVcGRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX1cxKG9wKSB7XG4gICAgb3AudXBkYXRlZERpc3BsYXkgPSBvcC5tdXN0VXBkYXRlICYmIHVwZGF0ZURpc3BsYXlJZk5lZWRlZChvcC5jbSwgb3AudXBkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9SMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAob3AudXBkYXRlZERpc3BsYXkpIHsgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pOyB9XG5cbiAgICBvcC5iYXJNZWFzdXJlID0gbWVhc3VyZUZvclNjcm9sbGJhcnMoY20pO1xuXG4gICAgLy8gSWYgdGhlIG1heCBsaW5lIGNoYW5nZWQgc2luY2UgaXQgd2FzIGxhc3QgbWVhc3VyZWQsIG1lYXN1cmUgaXQsXG4gICAgLy8gYW5kIGVuc3VyZSB0aGUgZG9jdW1lbnQncyB3aWR0aCBtYXRjaGVzIGl0LlxuICAgIC8vIHVwZGF0ZURpc3BsYXlfVzIgd2lsbCB1c2UgdGhlc2UgcHJvcGVydGllcyB0byBkbyB0aGUgYWN0dWFsIHJlc2l6aW5nXG4gICAgaWYgKGRpc3BsYXkubWF4TGluZUNoYW5nZWQgJiYgIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBvcC5hZGp1c3RXaWR0aFRvID0gbWVhc3VyZUNoYXIoY20sIGRpc3BsYXkubWF4TGluZSwgZGlzcGxheS5tYXhMaW5lLnRleHQubGVuZ3RoKS5sZWZ0ICsgMztcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXJXaWR0aCA9IG9wLmFkanVzdFdpZHRoVG87XG4gICAgICBvcC5iYXJNZWFzdXJlLnNjcm9sbFdpZHRoID1cbiAgICAgICAgTWF0aC5tYXgoZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aCwgZGlzcGxheS5zaXplci5vZmZzZXRMZWZ0ICsgb3AuYWRqdXN0V2lkdGhUbyArIHNjcm9sbEdhcChjbSkgKyBjbS5kaXNwbGF5LmJhcldpZHRoKTtcbiAgICAgIG9wLm1heFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBkaXNwbGF5LnNpemVyLm9mZnNldExlZnQgKyBvcC5hZGp1c3RXaWR0aFRvIC0gZGlzcGxheVdpZHRoKGNtKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnNlbGVjdGlvbkNoYW5nZWQpXG4gICAgICB7IG9wLnByZXBhcmVkU2VsZWN0aW9uID0gZGlzcGxheS5pbnB1dC5wcmVwYXJlU2VsZWN0aW9uKCk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbl9XMihvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtO1xuXG4gICAgaWYgKG9wLmFkanVzdFdpZHRoVG8gIT0gbnVsbCkge1xuICAgICAgY20uZGlzcGxheS5zaXplci5zdHlsZS5taW5XaWR0aCA9IG9wLmFkanVzdFdpZHRoVG8gKyBcInB4XCI7XG4gICAgICBpZiAob3AubWF4U2Nyb2xsTGVmdCA8IGNtLmRvYy5zY3JvbGxMZWZ0KVxuICAgICAgICB7IHNldFNjcm9sbExlZnQoY20sIE1hdGgubWluKGNtLmRpc3BsYXkuc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgb3AubWF4U2Nyb2xsTGVmdCksIHRydWUpOyB9XG4gICAgICBjbS5kaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRha2VGb2N1cyA9IG9wLmZvY3VzICYmIG9wLmZvY3VzID09IGFjdGl2ZUVsdCgpO1xuICAgIGlmIChvcC5wcmVwYXJlZFNlbGVjdGlvbilcbiAgICAgIHsgY20uZGlzcGxheS5pbnB1dC5zaG93U2VsZWN0aW9uKG9wLnByZXBhcmVkU2VsZWN0aW9uLCB0YWtlRm9jdXMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5IHx8IG9wLnN0YXJ0SGVpZ2h0ICE9IGNtLmRvYy5oZWlnaHQpXG4gICAgICB7IHVwZGF0ZVNjcm9sbGJhcnMoY20sIG9wLmJhck1lYXN1cmUpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KVxuICAgICAgeyBzZXREb2N1bWVudEhlaWdodChjbSwgb3AuYmFyTWVhc3VyZSk7IH1cblxuICAgIGlmIChvcC5zZWxlY3Rpb25DaGFuZ2VkKSB7IHJlc3RhcnRCbGluayhjbSk7IH1cblxuICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkICYmIG9wLnVwZGF0ZUlucHV0KVxuICAgICAgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0KG9wLnR5cGluZyk7IH1cbiAgICBpZiAodGFrZUZvY3VzKSB7IGVuc3VyZUZvY3VzKG9wLmNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uX2ZpbmlzaChvcCkge1xuICAgIHZhciBjbSA9IG9wLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuXG4gICAgaWYgKG9wLnVwZGF0ZWREaXNwbGF5KSB7IHBvc3RVcGRhdGVEaXNwbGF5KGNtLCBvcC51cGRhdGUpOyB9XG5cbiAgICAvLyBBYm9ydCBtb3VzZSB3aGVlbCBkZWx0YSBtZWFzdXJlbWVudCwgd2hlbiBzY3JvbGxpbmcgZXhwbGljaXRseVxuICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYICE9IG51bGwgJiYgKG9wLnNjcm9sbFRvcCAhPSBudWxsIHx8IG9wLnNjcm9sbExlZnQgIT0gbnVsbCB8fCBvcC5zY3JvbGxUb1BvcykpXG4gICAgICB7IGRpc3BsYXkud2hlZWxTdGFydFggPSBkaXNwbGF5LndoZWVsU3RhcnRZID0gbnVsbDsgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBzY3JvbGwgcG9zaXRpb24gdG8gdGhlIGFjdHVhbCBET00gc2Nyb2xsZXJcbiAgICBpZiAob3Auc2Nyb2xsVG9wICE9IG51bGwpIHsgc2V0U2Nyb2xsVG9wKGNtLCBvcC5zY3JvbGxUb3AsIG9wLmZvcmNlU2Nyb2xsKTsgfVxuXG4gICAgaWYgKG9wLnNjcm9sbExlZnQgIT0gbnVsbCkgeyBzZXRTY3JvbGxMZWZ0KGNtLCBvcC5zY3JvbGxMZWZ0LCB0cnVlLCB0cnVlKTsgfVxuICAgIC8vIElmIHdlIG5lZWQgdG8gc2Nyb2xsIGEgc3BlY2lmaWMgcG9zaXRpb24gaW50byB2aWV3LCBkbyBzby5cbiAgICBpZiAob3Auc2Nyb2xsVG9Qb3MpIHtcbiAgICAgIHZhciByZWN0ID0gc2Nyb2xsUG9zSW50b1ZpZXcoY20sIGNsaXBQb3MoZG9jLCBvcC5zY3JvbGxUb1Bvcy5mcm9tKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIG9wLnNjcm9sbFRvUG9zLnRvKSwgb3Auc2Nyb2xsVG9Qb3MubWFyZ2luKTtcbiAgICAgIG1heWJlU2Nyb2xsV2luZG93KGNtLCByZWN0KTtcbiAgICB9XG5cbiAgICAvLyBGaXJlIGV2ZW50cyBmb3IgbWFya2VycyB0aGF0IGFyZSBoaWRkZW4vdW5pZGRlbiBieSBlZGl0aW5nIG9yXG4gICAgLy8gdW5kb2luZ1xuICAgIHZhciBoaWRkZW4gPSBvcC5tYXliZUhpZGRlbk1hcmtlcnMsIHVuaGlkZGVuID0gb3AubWF5YmVVbmhpZGRlbk1hcmtlcnM7XG4gICAgaWYgKGhpZGRlbikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlbi5sZW5ndGg7ICsraSlcbiAgICAgIHsgaWYgKCFoaWRkZW5baV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbChoaWRkZW5baV0sIFwiaGlkZVwiKTsgfSB9IH1cbiAgICBpZiAodW5oaWRkZW4pIHsgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgdW5oaWRkZW4ubGVuZ3RoOyArK2kkMSlcbiAgICAgIHsgaWYgKHVuaGlkZGVuW2kkMV0ubGluZXMubGVuZ3RoKSB7IHNpZ25hbCh1bmhpZGRlbltpJDFdLCBcInVuaGlkZVwiKTsgfSB9IH1cblxuICAgIGlmIChkaXNwbGF5LndyYXBwZXIub2Zmc2V0SGVpZ2h0KVxuICAgICAgeyBkb2Muc2Nyb2xsVG9wID0gY20uZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7IH1cblxuICAgIC8vIEZpcmUgY2hhbmdlIGV2ZW50cywgYW5kIGRlbGF5ZWQgZXZlbnQgaGFuZGxlcnNcbiAgICBpZiAob3AuY2hhbmdlT2JqcylcbiAgICAgIHsgc2lnbmFsKGNtLCBcImNoYW5nZXNcIiwgY20sIG9wLmNoYW5nZU9ianMpOyB9XG4gICAgaWYgKG9wLnVwZGF0ZSlcbiAgICAgIHsgb3AudXBkYXRlLmZpbmlzaCgpOyB9XG4gIH1cblxuICAvLyBSdW4gdGhlIGdpdmVuIGZ1bmN0aW9uIGluIGFuIG9wZXJhdGlvblxuICBmdW5jdGlvbiBydW5Jbk9wKGNtLCBmKSB7XG4gICAgaWYgKGNtLmN1ck9wKSB7IHJldHVybiBmKCkgfVxuICAgIHN0YXJ0T3BlcmF0aW9uKGNtKTtcbiAgICB0cnkgeyByZXR1cm4gZigpIH1cbiAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICB9XG4gIC8vIFdyYXBzIGEgZnVuY3Rpb24gaW4gYW4gb3BlcmF0aW9uLiBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLlxuICBmdW5jdGlvbiBvcGVyYXRpb24oY20sIGYpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoY20uY3VyT3ApIHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkoY20sIGFyZ3VtZW50cykgfVxuICAgICAgZmluYWxseSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgICB9XG4gIH1cbiAgLy8gVXNlZCB0byBhZGQgbWV0aG9kcyB0byBlZGl0b3IgYW5kIGRvYyBpbnN0YW5jZXMsIHdyYXBwaW5nIHRoZW0gaW5cbiAgLy8gb3BlcmF0aW9ucy5cbiAgZnVuY3Rpb24gbWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24odGhpcyk7XG4gICAgICB0cnkgeyByZXR1cm4gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbiAgICAgIGZpbmFsbHkgeyBlbmRPcGVyYXRpb24odGhpcyk7IH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZG9jTWV0aG9kT3AoZikge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBjbSA9IHRoaXMuY207XG4gICAgICBpZiAoIWNtIHx8IGNtLmN1ck9wKSB7IHJldHVybiBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfVxuICAgICAgc3RhcnRPcGVyYXRpb24oY20pO1xuICAgICAgdHJ5IHsgcmV0dXJuIGYuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG4gICAgICBmaW5hbGx5IHsgZW5kT3BlcmF0aW9uKGNtKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhJR0hMSUdIVCBXT1JLRVJcblxuICBmdW5jdGlvbiBzdGFydFdvcmtlcihjbSwgdGltZSkge1xuICAgIGlmIChjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPCBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgIHsgY20uc3RhdGUuaGlnaGxpZ2h0LnNldCh0aW1lLCBiaW5kKGhpZ2hsaWdodFdvcmtlciwgY20pKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKGNtKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYztcbiAgICBpZiAoZG9jLmhpZ2hsaWdodEZyb250aWVyID49IGNtLmRpc3BsYXkudmlld1RvKSB7IHJldHVybiB9XG4gICAgdmFyIGVuZCA9ICtuZXcgRGF0ZSArIGNtLm9wdGlvbnMud29ya1RpbWU7XG4gICAgdmFyIGNvbnRleHQgPSBnZXRDb250ZXh0QmVmb3JlKGNtLCBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIpO1xuICAgIHZhciBjaGFuZ2VkTGluZXMgPSBbXTtcblxuICAgIGRvYy5pdGVyKGNvbnRleHQubGluZSwgTWF0aC5taW4oZG9jLmZpcnN0ICsgZG9jLnNpemUsIGNtLmRpc3BsYXkudmlld1RvICsgNTAwKSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChjb250ZXh0LmxpbmUgPj0gY20uZGlzcGxheS52aWV3RnJvbSkgeyAvLyBWaXNpYmxlXG4gICAgICAgIHZhciBvbGRTdHlsZXMgPSBsaW5lLnN0eWxlcztcbiAgICAgICAgdmFyIHJlc2V0U3RhdGUgPSBsaW5lLnRleHQubGVuZ3RoID4gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGggPyBjb3B5U3RhdGUoZG9jLm1vZGUsIGNvbnRleHQuc3RhdGUpIDogbnVsbDtcbiAgICAgICAgdmFyIGhpZ2hsaWdodGVkID0gaGlnaGxpZ2h0TGluZShjbSwgbGluZSwgY29udGV4dCwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZXNldFN0YXRlKSB7IGNvbnRleHQuc3RhdGUgPSByZXNldFN0YXRlOyB9XG4gICAgICAgIGxpbmUuc3R5bGVzID0gaGlnaGxpZ2h0ZWQuc3R5bGVzO1xuICAgICAgICB2YXIgb2xkQ2xzID0gbGluZS5zdHlsZUNsYXNzZXMsIG5ld0NscyA9IGhpZ2hsaWdodGVkLmNsYXNzZXM7XG4gICAgICAgIGlmIChuZXdDbHMpIHsgbGluZS5zdHlsZUNsYXNzZXMgPSBuZXdDbHM7IH1cbiAgICAgICAgZWxzZSBpZiAob2xkQ2xzKSB7IGxpbmUuc3R5bGVDbGFzc2VzID0gbnVsbDsgfVxuICAgICAgICB2YXIgaXNjaGFuZ2UgPSAhb2xkU3R5bGVzIHx8IG9sZFN0eWxlcy5sZW5ndGggIT0gbGluZS5zdHlsZXMubGVuZ3RoIHx8XG4gICAgICAgICAgb2xkQ2xzICE9IG5ld0NscyAmJiAoIW9sZENscyB8fCAhbmV3Q2xzIHx8IG9sZENscy5iZ0NsYXNzICE9IG5ld0Nscy5iZ0NsYXNzIHx8IG9sZENscy50ZXh0Q2xhc3MgIT0gbmV3Q2xzLnRleHRDbGFzcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyAhaXNjaGFuZ2UgJiYgaSA8IG9sZFN0eWxlcy5sZW5ndGg7ICsraSkgeyBpc2NoYW5nZSA9IG9sZFN0eWxlc1tpXSAhPSBsaW5lLnN0eWxlc1tpXTsgfVxuICAgICAgICBpZiAoaXNjaGFuZ2UpIHsgY2hhbmdlZExpbmVzLnB1c2goY29udGV4dC5saW5lKTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LnNhdmUoKTtcbiAgICAgICAgY29udGV4dC5uZXh0TGluZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpbmUudGV4dC5sZW5ndGggPD0gY20ub3B0aW9ucy5tYXhIaWdobGlnaHRMZW5ndGgpXG4gICAgICAgICAgeyBwcm9jZXNzTGluZShjbSwgbGluZS50ZXh0LCBjb250ZXh0KTsgfVxuICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb250ZXh0LmxpbmUgJSA1ID09IDAgPyBjb250ZXh0LnNhdmUoKSA6IG51bGw7XG4gICAgICAgIGNvbnRleHQubmV4dExpbmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICgrbmV3IERhdGUgPiBlbmQpIHtcbiAgICAgICAgc3RhcnRXb3JrZXIoY20sIGNtLm9wdGlvbnMud29ya0RlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBjb250ZXh0LmxpbmU7XG4gICAgZG9jLm1vZGVGcm9udGllciA9IE1hdGgubWF4KGRvYy5tb2RlRnJvbnRpZXIsIGNvbnRleHQubGluZSk7XG4gICAgaWYgKGNoYW5nZWRMaW5lcy5sZW5ndGgpIHsgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkTGluZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgcmVnTGluZUNoYW5nZShjbSwgY2hhbmdlZExpbmVzW2ldLCBcInRleHRcIik7IH1cbiAgICB9KTsgfVxuICB9XG5cbiAgLy8gRElTUExBWSBEUkFXSU5HXG5cbiAgdmFyIERpc3BsYXlVcGRhdGUgPSBmdW5jdGlvbihjbSwgdmlld3BvcnQsIGZvcmNlKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuXG4gICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuICAgIC8vIFN0b3JlIHNvbWUgdmFsdWVzIHRoYXQgd2UnbGwgbmVlZCBsYXRlciAoYnV0IGRvbid0IHdhbnQgdG8gZm9yY2UgYSByZWxheW91dCBmb3IpXG4gICAgdGhpcy52aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGNtLmRvYywgdmlld3BvcnQpO1xuICAgIHRoaXMuZWRpdG9ySXNIaWRkZW4gPSAhZGlzcGxheS53cmFwcGVyLm9mZnNldFdpZHRoO1xuICAgIHRoaXMud3JhcHBlckhlaWdodCA9IGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQ7XG4gICAgdGhpcy53cmFwcGVyV2lkdGggPSBkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGg7XG4gICAgdGhpcy5vbGREaXNwbGF5V2lkdGggPSBkaXNwbGF5V2lkdGgoY20pO1xuICAgIHRoaXMuZm9yY2UgPSBmb3JjZTtcbiAgICB0aGlzLmRpbXMgPSBnZXREaW1lbnNpb25zKGNtKTtcbiAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICB9O1xuXG4gIERpc3BsYXlVcGRhdGUucHJvdG90eXBlLnNpZ25hbCA9IGZ1bmN0aW9uIChlbWl0dGVyLCB0eXBlKSB7XG4gICAgaWYgKGhhc0hhbmRsZXIoZW1pdHRlciwgdHlwZSkpXG4gICAgICB7IHRoaXMuZXZlbnRzLnB1c2goYXJndW1lbnRzKTsgfVxuICB9O1xuICBEaXNwbGF5VXBkYXRlLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmV2ZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIHsgc2lnbmFsLmFwcGx5KG51bGwsIHRoaXMuZXZlbnRzW2ldKTsgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIG1heWJlQ2xpcFNjcm9sbGJhcnMoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKCFkaXNwbGF5LnNjcm9sbGJhcnNDbGlwcGVkICYmIGRpc3BsYXkuc2Nyb2xsZXIub2Zmc2V0V2lkdGgpIHtcbiAgICAgIGRpc3BsYXkubmF0aXZlQmFyV2lkdGggPSBkaXNwbGF5LnNjcm9sbGVyLm9mZnNldFdpZHRoIC0gZGlzcGxheS5zY3JvbGxlci5jbGllbnRXaWR0aDtcbiAgICAgIGRpc3BsYXkuaGVpZ2h0Rm9yY2VyLnN0eWxlLmhlaWdodCA9IHNjcm9sbEdhcChjbSkgKyBcInB4XCI7XG4gICAgICBkaXNwbGF5LnNpemVyLnN0eWxlLm1hcmdpbkJvdHRvbSA9IC1kaXNwbGF5Lm5hdGl2ZUJhcldpZHRoICsgXCJweFwiO1xuICAgICAgZGlzcGxheS5zaXplci5zdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gc2Nyb2xsR2FwKGNtKSArIFwicHhcIjtcbiAgICAgIGRpc3BsYXkuc2Nyb2xsYmFyc0NsaXBwZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvblNuYXBzaG90KGNtKSB7XG4gICAgaWYgKGNtLmhhc0ZvY3VzKCkpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBhY3RpdmUgPSBhY3RpdmVFbHQoKTtcbiAgICBpZiAoIWFjdGl2ZSB8fCAhY29udGFpbnMoY20uZGlzcGxheS5saW5lRGl2LCBhY3RpdmUpKSB7IHJldHVybiBudWxsIH1cbiAgICB2YXIgcmVzdWx0ID0ge2FjdGl2ZUVsdDogYWN0aXZlfTtcbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmIChzZWwuYW5jaG9yTm9kZSAmJiBzZWwuZXh0ZW5kICYmIGNvbnRhaW5zKGNtLmRpc3BsYXkubGluZURpdiwgc2VsLmFuY2hvck5vZGUpKSB7XG4gICAgICAgIHJlc3VsdC5hbmNob3JOb2RlID0gc2VsLmFuY2hvck5vZGU7XG4gICAgICAgIHJlc3VsdC5hbmNob3JPZmZzZXQgPSBzZWwuYW5jaG9yT2Zmc2V0O1xuICAgICAgICByZXN1bHQuZm9jdXNOb2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICAgICAgcmVzdWx0LmZvY3VzT2Zmc2V0ID0gc2VsLmZvY3VzT2Zmc2V0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBmdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHNuYXBzaG90KSB7XG4gICAgaWYgKCFzbmFwc2hvdCB8fCAhc25hcHNob3QuYWN0aXZlRWx0IHx8IHNuYXBzaG90LmFjdGl2ZUVsdCA9PSBhY3RpdmVFbHQoKSkgeyByZXR1cm4gfVxuICAgIHNuYXBzaG90LmFjdGl2ZUVsdC5mb2N1cygpO1xuICAgIGlmICghL14oSU5QVVR8VEVYVEFSRUEpJC8udGVzdChzbmFwc2hvdC5hY3RpdmVFbHQubm9kZU5hbWUpICYmXG4gICAgICAgIHNuYXBzaG90LmFuY2hvck5vZGUgJiYgY29udGFpbnMoZG9jdW1lbnQuYm9keSwgc25hcHNob3QuYW5jaG9yTm9kZSkgJiYgY29udGFpbnMoZG9jdW1lbnQuYm9keSwgc25hcHNob3QuZm9jdXNOb2RlKSkge1xuICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSwgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2V0RW5kKHNuYXBzaG90LmFuY2hvck5vZGUsIHNuYXBzaG90LmFuY2hvck9mZnNldCk7XG4gICAgICByYW5nZS5jb2xsYXBzZShmYWxzZSk7XG4gICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsLmV4dGVuZChzbmFwc2hvdC5mb2N1c05vZGUsIHNuYXBzaG90LmZvY3VzT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICAvLyBEb2VzIHRoZSBhY3R1YWwgdXBkYXRpbmcgb2YgdGhlIGxpbmUgZGlzcGxheS4gQmFpbHMgb3V0XG4gIC8vIChyZXR1cm5pbmcgZmFsc2UpIHdoZW4gdGhlcmUgaXMgbm90aGluZyB0byBiZSBkb25lIGFuZCBmb3JjZWQgaXNcbiAgLy8gZmFsc2UuXG4gIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSB7XG4gICAgdmFyIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBkb2MgPSBjbS5kb2M7XG5cbiAgICBpZiAodXBkYXRlLmVkaXRvcklzSGlkZGVuKSB7XG4gICAgICByZXNldFZpZXcoY20pO1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQmFpbCBvdXQgaWYgdGhlIHZpc2libGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuXG4gICAgaWYgKCF1cGRhdGUuZm9yY2UgJiZcbiAgICAgICAgdXBkYXRlLnZpc2libGUuZnJvbSA+PSBkaXNwbGF5LnZpZXdGcm9tICYmIHVwZGF0ZS52aXNpYmxlLnRvIDw9IGRpc3BsYXkudmlld1RvICYmXG4gICAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+PSBkaXNwbGF5LnZpZXdUbykgJiZcbiAgICAgICAgZGlzcGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmIGNvdW50RGlydHlWaWV3KGNtKSA9PSAwKVxuICAgICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgaWYgKG1heWJlVXBkYXRlTGluZU51bWJlcldpZHRoKGNtKSkge1xuICAgICAgcmVzZXRWaWV3KGNtKTtcbiAgICAgIHVwZGF0ZS5kaW1zID0gZ2V0RGltZW5zaW9ucyhjbSk7XG4gICAgfVxuXG4gICAgLy8gQ29tcHV0ZSBhIHN1aXRhYmxlIG5ldyB2aWV3cG9ydCAoZnJvbSAmIHRvKVxuICAgIHZhciBlbmQgPSBkb2MuZmlyc3QgKyBkb2Muc2l6ZTtcbiAgICB2YXIgZnJvbSA9IE1hdGgubWF4KHVwZGF0ZS52aXNpYmxlLmZyb20gLSBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luLCBkb2MuZmlyc3QpO1xuICAgIHZhciB0byA9IE1hdGgubWluKGVuZCwgdXBkYXRlLnZpc2libGUudG8gKyBjbS5vcHRpb25zLnZpZXdwb3J0TWFyZ2luKTtcbiAgICBpZiAoZGlzcGxheS52aWV3RnJvbSA8IGZyb20gJiYgZnJvbSAtIGRpc3BsYXkudmlld0Zyb20gPCAyMCkgeyBmcm9tID0gTWF0aC5tYXgoZG9jLmZpcnN0LCBkaXNwbGF5LnZpZXdGcm9tKTsgfVxuICAgIGlmIChkaXNwbGF5LnZpZXdUbyA+IHRvICYmIGRpc3BsYXkudmlld1RvIC0gdG8gPCAyMCkgeyB0byA9IE1hdGgubWluKGVuZCwgZGlzcGxheS52aWV3VG8pOyB9XG4gICAgaWYgKHNhd0NvbGxhcHNlZFNwYW5zKSB7XG4gICAgICBmcm9tID0gdmlzdWFsTGluZU5vKGNtLmRvYywgZnJvbSk7XG4gICAgICB0byA9IHZpc3VhbExpbmVFbmRObyhjbS5kb2MsIHRvKTtcbiAgICB9XG5cbiAgICB2YXIgZGlmZmVyZW50ID0gZnJvbSAhPSBkaXNwbGF5LnZpZXdGcm9tIHx8IHRvICE9IGRpc3BsYXkudmlld1RvIHx8XG4gICAgICBkaXNwbGF5Lmxhc3RXcmFwSGVpZ2h0ICE9IHVwZGF0ZS53cmFwcGVySGVpZ2h0IHx8IGRpc3BsYXkubGFzdFdyYXBXaWR0aCAhPSB1cGRhdGUud3JhcHBlcldpZHRoO1xuICAgIGFkanVzdFZpZXcoY20sIGZyb20sIHRvKTtcblxuICAgIGRpc3BsYXkudmlld09mZnNldCA9IGhlaWdodEF0TGluZShnZXRMaW5lKGNtLmRvYywgZGlzcGxheS52aWV3RnJvbSkpO1xuICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb25cbiAgICBjbS5kaXNwbGF5Lm1vdmVyLnN0eWxlLnRvcCA9IGRpc3BsYXkudmlld09mZnNldCArIFwicHhcIjtcblxuICAgIHZhciB0b1VwZGF0ZSA9IGNvdW50RGlydHlWaWV3KGNtKTtcbiAgICBpZiAoIWRpZmZlcmVudCAmJiB0b1VwZGF0ZSA9PSAwICYmICF1cGRhdGUuZm9yY2UgJiYgZGlzcGxheS5yZW5kZXJlZFZpZXcgPT0gZGlzcGxheS52aWV3ICYmXG4gICAgICAgIChkaXNwbGF5LnVwZGF0ZUxpbmVOdW1iZXJzID09IG51bGwgfHwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycyA+PSBkaXNwbGF5LnZpZXdUbykpXG4gICAgICB7IHJldHVybiBmYWxzZSB9XG5cbiAgICAvLyBGb3IgYmlnIGNoYW5nZXMsIHdlIGhpZGUgdGhlIGVuY2xvc2luZyBlbGVtZW50IGR1cmluZyB0aGVcbiAgICAvLyB1cGRhdGUsIHNpbmNlIHRoYXQgc3BlZWRzIHVwIHRoZSBvcGVyYXRpb25zIG9uIG1vc3QgYnJvd3NlcnMuXG4gICAgdmFyIHNlbFNuYXBzaG90ID0gc2VsZWN0aW9uU25hcHNob3QoY20pO1xuICAgIGlmICh0b1VwZGF0ZSA+IDQpIHsgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjsgfVxuICAgIHBhdGNoRGlzcGxheShjbSwgZGlzcGxheS51cGRhdGVMaW5lTnVtYmVycywgdXBkYXRlLmRpbXMpO1xuICAgIGlmICh0b1VwZGF0ZSA+IDQpIHsgZGlzcGxheS5saW5lRGl2LnN0eWxlLmRpc3BsYXkgPSBcIlwiOyB9XG4gICAgZGlzcGxheS5yZW5kZXJlZFZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgLy8gVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGEgd2lkZ2V0IHdpdGggYSBmb2N1c2VkIGVsZW1lbnQgdGhhdCBnb3RcbiAgICAvLyBoaWRkZW4gb3IgdXBkYXRlZCwgaWYgc28gcmUtZm9jdXMgaXQuXG4gICAgcmVzdG9yZVNlbGVjdGlvbihzZWxTbmFwc2hvdCk7XG5cbiAgICAvLyBQcmV2ZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIHNjcm9sbFxuICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQuXG4gICAgcmVtb3ZlQ2hpbGRyZW4oZGlzcGxheS5jdXJzb3JEaXYpO1xuICAgIHJlbW92ZUNoaWxkcmVuKGRpc3BsYXkuc2VsZWN0aW9uRGl2KTtcbiAgICBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUuaGVpZ2h0ID0gZGlzcGxheS5zaXplci5zdHlsZS5taW5IZWlnaHQgPSAwO1xuXG4gICAgaWYgKGRpZmZlcmVudCkge1xuICAgICAgZGlzcGxheS5sYXN0V3JhcEhlaWdodCA9IHVwZGF0ZS53cmFwcGVySGVpZ2h0O1xuICAgICAgZGlzcGxheS5sYXN0V3JhcFdpZHRoID0gdXBkYXRlLndyYXBwZXJXaWR0aDtcbiAgICAgIHN0YXJ0V29ya2VyKGNtLCA0MDApO1xuICAgIH1cblxuICAgIGRpc3BsYXkudXBkYXRlTGluZU51bWJlcnMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvc3RVcGRhdGVEaXNwbGF5KGNtLCB1cGRhdGUpIHtcbiAgICB2YXIgdmlld3BvcnQgPSB1cGRhdGUudmlld3BvcnQ7XG5cbiAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIWZpcnN0IHx8ICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZyB8fCB1cGRhdGUub2xkRGlzcGxheVdpZHRoID09IGRpc3BsYXlXaWR0aChjbSkpIHtcbiAgICAgICAgLy8gQ2xpcCBmb3JjZWQgdmlld3BvcnQgdG8gYWN0dWFsIHNjcm9sbGFibGUgYXJlYS5cbiAgICAgICAgaWYgKHZpZXdwb3J0ICYmIHZpZXdwb3J0LnRvcCAhPSBudWxsKVxuICAgICAgICAgIHsgdmlld3BvcnQgPSB7dG9wOiBNYXRoLm1pbihjbS5kb2MuaGVpZ2h0ICsgcGFkZGluZ1ZlcnQoY20uZGlzcGxheSkgLSBkaXNwbGF5SGVpZ2h0KGNtKSwgdmlld3BvcnQudG9wKX07IH1cbiAgICAgICAgLy8gVXBkYXRlZCBsaW5lIGhlaWdodHMgbWlnaHQgcmVzdWx0IGluIHRoZSBkcmF3biBhcmVhIG5vdFxuICAgICAgICAvLyBhY3R1YWxseSBjb3ZlcmluZyB0aGUgdmlld3BvcnQuIEtlZXAgbG9vcGluZyB1bnRpbCBpdCBkb2VzLlxuICAgICAgICB1cGRhdGUudmlzaWJsZSA9IHZpc2libGVMaW5lcyhjbS5kaXNwbGF5LCBjbS5kb2MsIHZpZXdwb3J0KTtcbiAgICAgICAgaWYgKHVwZGF0ZS52aXNpYmxlLmZyb20gPj0gY20uZGlzcGxheS52aWV3RnJvbSAmJiB1cGRhdGUudmlzaWJsZS50byA8PSBjbS5kaXNwbGF5LnZpZXdUbylcbiAgICAgICAgICB7IGJyZWFrIH1cbiAgICAgIH0gZWxzZSBpZiAoZmlyc3QpIHtcbiAgICAgICAgdXBkYXRlLnZpc2libGUgPSB2aXNpYmxlTGluZXMoY20uZGlzcGxheSwgY20uZG9jLCB2aWV3cG9ydCk7XG4gICAgICB9XG4gICAgICBpZiAoIXVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkgeyBicmVhayB9XG4gICAgICB1cGRhdGVIZWlnaHRzSW5WaWV3cG9ydChjbSk7XG4gICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTtcbiAgICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHVwZGF0ZS5mb3JjZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHVwZGF0ZS5zaWduYWwoY20sIFwidXBkYXRlXCIsIGNtKTtcbiAgICBpZiAoY20uZGlzcGxheS52aWV3RnJvbSAhPSBjbS5kaXNwbGF5LnJlcG9ydGVkVmlld0Zyb20gfHwgY20uZGlzcGxheS52aWV3VG8gIT0gY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbykge1xuICAgICAgdXBkYXRlLnNpZ25hbChjbSwgXCJ2aWV3cG9ydENoYW5nZVwiLCBjbSwgY20uZGlzcGxheS52aWV3RnJvbSwgY20uZGlzcGxheS52aWV3VG8pO1xuICAgICAgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdGcm9tID0gY20uZGlzcGxheS52aWV3RnJvbTsgY20uZGlzcGxheS5yZXBvcnRlZFZpZXdUbyA9IGNtLmRpc3BsYXkudmlld1RvO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXlTaW1wbGUoY20sIHZpZXdwb3J0KSB7XG4gICAgdmFyIHVwZGF0ZSA9IG5ldyBEaXNwbGF5VXBkYXRlKGNtLCB2aWV3cG9ydCk7XG4gICAgaWYgKHVwZGF0ZURpc3BsYXlJZk5lZWRlZChjbSwgdXBkYXRlKSkge1xuICAgICAgdXBkYXRlSGVpZ2h0c0luVmlld3BvcnQoY20pO1xuICAgICAgcG9zdFVwZGF0ZURpc3BsYXkoY20sIHVwZGF0ZSk7XG4gICAgICB2YXIgYmFyTWVhc3VyZSA9IG1lYXN1cmVGb3JTY3JvbGxiYXJzKGNtKTtcbiAgICAgIHVwZGF0ZVNlbGVjdGlvbihjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHNldERvY3VtZW50SGVpZ2h0KGNtLCBiYXJNZWFzdXJlKTtcbiAgICAgIHVwZGF0ZS5maW5pc2goKTtcbiAgICB9XG4gIH1cblxuICAvLyBTeW5jIHRoZSBhY3R1YWwgZGlzcGxheSBET00gc3RydWN0dXJlIHdpdGggZGlzcGxheS52aWV3LCByZW1vdmluZ1xuICAvLyBub2RlcyBmb3IgbGluZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHZpZXcsIGFuZCBjcmVhdGluZyB0aGUgb25lc1xuICAvLyB0aGF0IGFyZSBub3QgdGhlcmUgeWV0LCBhbmQgdXBkYXRpbmcgdGhlIG9uZXMgdGhhdCBhcmUgb3V0IG9mXG4gIC8vIGRhdGUuXG4gIGZ1bmN0aW9uIHBhdGNoRGlzcGxheShjbSwgdXBkYXRlTnVtYmVyc0Zyb20sIGRpbXMpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIGxpbmVOdW1iZXJzID0gY20ub3B0aW9ucy5saW5lTnVtYmVycztcbiAgICB2YXIgY29udGFpbmVyID0gZGlzcGxheS5saW5lRGl2LCBjdXIgPSBjb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgIGZ1bmN0aW9uIHJtKG5vZGUpIHtcbiAgICAgIHZhciBuZXh0ID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIC8vIFdvcmtzIGFyb3VuZCBhIHRocm93LXNjcm9sbCBidWcgaW4gT1MgWCBXZWJraXRcbiAgICAgIGlmICh3ZWJraXQgJiYgbWFjICYmIGNtLmRpc3BsYXkuY3VycmVudFdoZWVsVGFyZ2V0ID09IG5vZGUpXG4gICAgICAgIHsgbm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7IH1cbiAgICAgIHJldHVybiBuZXh0XG4gICAgfVxuXG4gICAgdmFyIHZpZXcgPSBkaXNwbGF5LnZpZXcsIGxpbmVOID0gZGlzcGxheS52aWV3RnJvbTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIGVsZW1lbnRzIGluIHRoZSB2aWV3LCBzeW5jaW5nIGN1ciAodGhlIERPTSBub2Rlc1xuICAgIC8vIGluIGRpc3BsYXkubGluZURpdikgd2l0aCB0aGUgdmlldyBhcyB3ZSBnby5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IHZpZXdbaV07XG4gICAgICBpZiAobGluZVZpZXcuaGlkZGVuKSA7IGVsc2UgaWYgKCFsaW5lVmlldy5ub2RlIHx8IGxpbmVWaWV3Lm5vZGUucGFyZW50Tm9kZSAhPSBjb250YWluZXIpIHsgLy8gTm90IGRyYXduIHlldFxuICAgICAgICB2YXIgbm9kZSA9IGJ1aWxkTGluZUVsZW1lbnQoY20sIGxpbmVWaWV3LCBsaW5lTiwgZGltcyk7XG4gICAgICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUobm9kZSwgY3VyKTtcbiAgICAgIH0gZWxzZSB7IC8vIEFscmVhZHkgZHJhd25cbiAgICAgICAgd2hpbGUgKGN1ciAhPSBsaW5lVmlldy5ub2RlKSB7IGN1ciA9IHJtKGN1cik7IH1cbiAgICAgICAgdmFyIHVwZGF0ZU51bWJlciA9IGxpbmVOdW1iZXJzICYmIHVwZGF0ZU51bWJlcnNGcm9tICE9IG51bGwgJiZcbiAgICAgICAgICB1cGRhdGVOdW1iZXJzRnJvbSA8PSBsaW5lTiAmJiBsaW5lVmlldy5saW5lTnVtYmVyO1xuICAgICAgICBpZiAobGluZVZpZXcuY2hhbmdlcykge1xuICAgICAgICAgIGlmIChpbmRleE9mKGxpbmVWaWV3LmNoYW5nZXMsIFwiZ3V0dGVyXCIpID4gLTEpIHsgdXBkYXRlTnVtYmVyID0gZmFsc2U7IH1cbiAgICAgICAgICB1cGRhdGVMaW5lRm9yQ2hhbmdlcyhjbSwgbGluZVZpZXcsIGxpbmVOLCBkaW1zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlTnVtYmVyKSB7XG4gICAgICAgICAgcmVtb3ZlQ2hpbGRyZW4obGluZVZpZXcubGluZU51bWJlcik7XG4gICAgICAgICAgbGluZVZpZXcubGluZU51bWJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lTnVtYmVyRm9yKGNtLm9wdGlvbnMsIGxpbmVOKSkpO1xuICAgICAgICB9XG4gICAgICAgIGN1ciA9IGxpbmVWaWV3Lm5vZGUubmV4dFNpYmxpbmc7XG4gICAgICB9XG4gICAgICBsaW5lTiArPSBsaW5lVmlldy5zaXplO1xuICAgIH1cbiAgICB3aGlsZSAoY3VyKSB7IGN1ciA9IHJtKGN1cik7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlclNwYWNlKGRpc3BsYXkpIHtcbiAgICB2YXIgd2lkdGggPSBkaXNwbGF5Lmd1dHRlcnMub2Zmc2V0V2lkdGg7XG4gICAgZGlzcGxheS5zaXplci5zdHlsZS5tYXJnaW5MZWZ0ID0gd2lkdGggKyBcInB4XCI7XG4gIH1cblxuICBmdW5jdGlvbiBzZXREb2N1bWVudEhlaWdodChjbSwgbWVhc3VyZSkge1xuICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluSGVpZ2h0ID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBcInB4XCI7XG4gICAgY20uZGlzcGxheS5oZWlnaHRGb3JjZXIuc3R5bGUudG9wID0gbWVhc3VyZS5kb2NIZWlnaHQgKyBcInB4XCI7XG4gICAgY20uZGlzcGxheS5ndXR0ZXJzLnN0eWxlLmhlaWdodCA9IChtZWFzdXJlLmRvY0hlaWdodCArIGNtLmRpc3BsYXkuYmFySGVpZ2h0ICsgc2Nyb2xsR2FwKGNtKSkgKyBcInB4XCI7XG4gIH1cblxuICAvLyBSZS1hbGlnbiBsaW5lIG51bWJlcnMgYW5kIGd1dHRlciBtYXJrcyB0byBjb21wZW5zYXRlIGZvclxuICAvLyBob3Jpem9udGFsIHNjcm9sbGluZy5cbiAgZnVuY3Rpb24gYWxpZ25Ib3Jpem9udGFsbHkoY20pIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIHZpZXcgPSBkaXNwbGF5LnZpZXc7XG4gICAgaWYgKCFkaXNwbGF5LmFsaWduV2lkZ2V0cyAmJiAoIWRpc3BsYXkuZ3V0dGVycy5maXJzdENoaWxkIHx8ICFjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSkgeyByZXR1cm4gfVxuICAgIHZhciBjb21wID0gY29tcGVuc2F0ZUZvckhTY3JvbGwoZGlzcGxheSkgLSBkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbExlZnQgKyBjbS5kb2Muc2Nyb2xsTGVmdDtcbiAgICB2YXIgZ3V0dGVyVyA9IGRpc3BsYXkuZ3V0dGVycy5vZmZzZXRXaWR0aCwgbGVmdCA9IGNvbXAgKyBcInB4XCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7IGlmICghdmlld1tpXS5oaWRkZW4pIHtcbiAgICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKSB7XG4gICAgICAgIGlmICh2aWV3W2ldLmd1dHRlcilcbiAgICAgICAgICB7IHZpZXdbaV0uZ3V0dGVyLnN0eWxlLmxlZnQgPSBsZWZ0OyB9XG4gICAgICAgIGlmICh2aWV3W2ldLmd1dHRlckJhY2tncm91bmQpXG4gICAgICAgICAgeyB2aWV3W2ldLmd1dHRlckJhY2tncm91bmQuc3R5bGUubGVmdCA9IGxlZnQ7IH1cbiAgICAgIH1cbiAgICAgIHZhciBhbGlnbiA9IHZpZXdbaV0uYWxpZ25hYmxlO1xuICAgICAgaWYgKGFsaWduKSB7IGZvciAodmFyIGogPSAwOyBqIDwgYWxpZ24ubGVuZ3RoOyBqKyspXG4gICAgICAgIHsgYWxpZ25bal0uc3R5bGUubGVmdCA9IGxlZnQ7IH0gfVxuICAgIH0gfVxuICAgIGlmIChjbS5vcHRpb25zLmZpeGVkR3V0dGVyKVxuICAgICAgeyBkaXNwbGF5Lmd1dHRlcnMuc3R5bGUubGVmdCA9IChjb21wICsgZ3V0dGVyVykgKyBcInB4XCI7IH1cbiAgfVxuXG4gIC8vIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxpbmUgbnVtYmVyIGd1dHRlciBpcyBzdGlsbCB0aGUgcmlnaHRcbiAgLy8gc2l6ZSBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQgc2l6ZS4gUmV0dXJucyB0cnVlIHdoZW4gYW4gdXBkYXRlXG4gIC8vIGlzIG5lZWRlZC5cbiAgZnVuY3Rpb24gbWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgoY20pIHtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZU51bWJlcnMpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB2YXIgZG9jID0gY20uZG9jLCBsYXN0ID0gbGluZU51bWJlckZvcihjbS5vcHRpb25zLCBkb2MuZmlyc3QgKyBkb2Muc2l6ZSAtIDEpLCBkaXNwbGF5ID0gY20uZGlzcGxheTtcbiAgICBpZiAobGFzdC5sZW5ndGggIT0gZGlzcGxheS5saW5lTnVtQ2hhcnMpIHtcbiAgICAgIHZhciB0ZXN0ID0gZGlzcGxheS5tZWFzdXJlLmFwcGVuZENoaWxkKGVsdChcImRpdlwiLCBbZWx0KFwiZGl2XCIsIGxhc3QpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkNvZGVNaXJyb3ItbGluZW51bWJlciBDb2RlTWlycm9yLWd1dHRlci1lbHRcIikpO1xuICAgICAgdmFyIGlubmVyVyA9IHRlc3QuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCwgcGFkZGluZyA9IHRlc3Qub2Zmc2V0V2lkdGggLSBpbm5lclc7XG4gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBcIlwiO1xuICAgICAgZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA9IE1hdGgubWF4KGlubmVyVywgZGlzcGxheS5saW5lR3V0dGVyLm9mZnNldFdpZHRoIC0gcGFkZGluZykgKyAxO1xuICAgICAgZGlzcGxheS5saW5lTnVtV2lkdGggPSBkaXNwbGF5LmxpbmVOdW1Jbm5lcldpZHRoICsgcGFkZGluZztcbiAgICAgIGRpc3BsYXkubGluZU51bUNoYXJzID0gZGlzcGxheS5saW5lTnVtSW5uZXJXaWR0aCA/IGxhc3QubGVuZ3RoIDogLTE7XG4gICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIuc3R5bGUud2lkdGggPSBkaXNwbGF5LmxpbmVOdW1XaWR0aCArIFwicHhcIjtcbiAgICAgIHVwZGF0ZUd1dHRlclNwYWNlKGNtLmRpc3BsYXkpO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBnZXRHdXR0ZXJzKGd1dHRlcnMsIGxpbmVOdW1iZXJzKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdLCBzYXdMaW5lTnVtYmVycyA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3V0dGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBndXR0ZXJzW2ldLCBzdHlsZSA9IG51bGw7XG4gICAgICBpZiAodHlwZW9mIG5hbWUgIT0gXCJzdHJpbmdcIikgeyBzdHlsZSA9IG5hbWUuc3R5bGU7IG5hbWUgPSBuYW1lLmNsYXNzTmFtZTsgfVxuICAgICAgaWYgKG5hbWUgPT0gXCJDb2RlTWlycm9yLWxpbmVudW1iZXJzXCIpIHtcbiAgICAgICAgaWYgKCFsaW5lTnVtYmVycykgeyBjb250aW51ZSB9XG4gICAgICAgIGVsc2UgeyBzYXdMaW5lTnVtYmVycyA9IHRydWU7IH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHtjbGFzc05hbWU6IG5hbWUsIHN0eWxlOiBzdHlsZX0pO1xuICAgIH1cbiAgICBpZiAobGluZU51bWJlcnMgJiYgIXNhd0xpbmVOdW1iZXJzKSB7IHJlc3VsdC5wdXNoKHtjbGFzc05hbWU6IFwiQ29kZU1pcnJvci1saW5lbnVtYmVyc1wiLCBzdHlsZTogbnVsbH0pOyB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLy8gUmVidWlsZCB0aGUgZ3V0dGVyIGVsZW1lbnRzLCBlbnN1cmUgdGhlIG1hcmdpbiB0byB0aGUgbGVmdCBvZiB0aGVcbiAgLy8gY29kZSBtYXRjaGVzIHRoZWlyIHdpZHRoLlxuICBmdW5jdGlvbiByZW5kZXJHdXR0ZXJzKGRpc3BsYXkpIHtcbiAgICB2YXIgZ3V0dGVycyA9IGRpc3BsYXkuZ3V0dGVycywgc3BlY3MgPSBkaXNwbGF5Lmd1dHRlclNwZWNzO1xuICAgIHJlbW92ZUNoaWxkcmVuKGd1dHRlcnMpO1xuICAgIGRpc3BsYXkubGluZUd1dHRlciA9IG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjcy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIHJlZiA9IHNwZWNzW2ldO1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHJlZi5jbGFzc05hbWU7XG4gICAgICB2YXIgc3R5bGUgPSByZWYuc3R5bGU7XG4gICAgICB2YXIgZ0VsdCA9IGd1dHRlcnMuYXBwZW5kQ2hpbGQoZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1ndXR0ZXIgXCIgKyBjbGFzc05hbWUpKTtcbiAgICAgIGlmIChzdHlsZSkgeyBnRWx0LnN0eWxlLmNzc1RleHQgPSBzdHlsZTsgfVxuICAgICAgaWYgKGNsYXNzTmFtZSA9PSBcIkNvZGVNaXJyb3ItbGluZW51bWJlcnNcIikge1xuICAgICAgICBkaXNwbGF5LmxpbmVHdXR0ZXIgPSBnRWx0O1xuICAgICAgICBnRWx0LnN0eWxlLndpZHRoID0gKGRpc3BsYXkubGluZU51bVdpZHRoIHx8IDEpICsgXCJweFwiO1xuICAgICAgfVxuICAgIH1cbiAgICBndXR0ZXJzLnN0eWxlLmRpc3BsYXkgPSBzcGVjcy5sZW5ndGggPyBcIlwiIDogXCJub25lXCI7XG4gICAgdXBkYXRlR3V0dGVyU3BhY2UoZGlzcGxheSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXJzKGNtKSB7XG4gICAgcmVuZGVyR3V0dGVycyhjbS5kaXNwbGF5KTtcbiAgICByZWdDaGFuZ2UoY20pO1xuICAgIGFsaWduSG9yaXpvbnRhbGx5KGNtKTtcbiAgfVxuXG4gIC8vIFRoZSBkaXNwbGF5IGhhbmRsZXMgdGhlIERPTSBpbnRlZ3JhdGlvbiwgYm90aCBmb3IgaW5wdXQgcmVhZGluZ1xuICAvLyBhbmQgY29udGVudCBkcmF3aW5nLiBJdCBob2xkcyByZWZlcmVuY2VzIHRvIERPTSBub2RlcyBhbmRcbiAgLy8gZGlzcGxheS1yZWxhdGVkIHN0YXRlLlxuXG4gIGZ1bmN0aW9uIERpc3BsYXkocGxhY2UsIGRvYywgaW5wdXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgZCA9IHRoaXM7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuXG4gICAgLy8gQ292ZXJzIGJvdHRvbS1yaWdodCBzcXVhcmUgd2hlbiBib3RoIHNjcm9sbGJhcnMgYXJlIHByZXNlbnQuXG4gICAgZC5zY3JvbGxiYXJGaWxsZXIgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXJcIik7XG4gICAgZC5zY3JvbGxiYXJGaWxsZXIuc2V0QXR0cmlidXRlKFwiY20tbm90LWNvbnRlbnRcIiwgXCJ0cnVlXCIpO1xuICAgIC8vIENvdmVycyBib3R0b20gb2YgZ3V0dGVyIHdoZW4gY292ZXJHdXR0ZXJOZXh0VG9TY3JvbGxiYXIgaXMgb25cbiAgICAvLyBhbmQgaCBzY3JvbGxiYXIgaXMgcHJlc2VudC5cbiAgICBkLmd1dHRlckZpbGxlciA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlclwiKTtcbiAgICBkLmd1dHRlckZpbGxlci5zZXRBdHRyaWJ1dGUoXCJjbS1ub3QtY29udGVudFwiLCBcInRydWVcIik7XG4gICAgLy8gV2lsbCBjb250YWluIHRoZSBhY3R1YWwgY29kZSwgcG9zaXRpb25lZCB0byBjb3ZlciB0aGUgdmlld3BvcnQuXG4gICAgZC5saW5lRGl2ID0gZWx0UChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY29kZVwiKTtcbiAgICAvLyBFbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlc2UgdG8gcmVwcmVzZW50IHNlbGVjdGlvbiBhbmQgY3Vyc29ycy5cbiAgICBkLnNlbGVjdGlvbkRpdiA9IGVsdChcImRpdlwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiByZWxhdGl2ZTsgei1pbmRleDogMVwiKTtcbiAgICBkLmN1cnNvckRpdiA9IGVsdChcImRpdlwiLCBudWxsLCBcIkNvZGVNaXJyb3ItY3Vyc29yc1wiKTtcbiAgICAvLyBBIHZpc2liaWxpdHk6IGhpZGRlbiBlbGVtZW50IHVzZWQgdG8gZmluZCB0aGUgc2l6ZSBvZiB0aGluZ3MuXG4gICAgZC5tZWFzdXJlID0gZWx0KFwiZGl2XCIsIG51bGwsIFwiQ29kZU1pcnJvci1tZWFzdXJlXCIpO1xuICAgIC8vIFdoZW4gbGluZXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQgYXJlIG1lYXN1cmVkLCB0aGV5IGFyZSBkcmF3biBpbiB0aGlzLlxuICAgIGQubGluZU1lYXN1cmUgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLW1lYXN1cmVcIik7XG4gICAgLy8gV3JhcHMgZXZlcnl0aGluZyB0aGF0IG5lZWRzIHRvIGV4aXN0IGluc2lkZSB0aGUgdmVydGljYWxseS1wYWRkZWQgY29vcmRpbmF0ZSBzeXN0ZW1cbiAgICBkLmxpbmVTcGFjZSA9IGVsdFAoXCJkaXZcIiwgW2QubWVhc3VyZSwgZC5saW5lTWVhc3VyZSwgZC5zZWxlY3Rpb25EaXYsIGQuY3Vyc29yRGl2LCBkLmxpbmVEaXZdLFxuICAgICAgICAgICAgICAgICAgICAgIG51bGwsIFwicG9zaXRpb246IHJlbGF0aXZlOyBvdXRsaW5lOiBub25lXCIpO1xuICAgIHZhciBsaW5lcyA9IGVsdFAoXCJkaXZcIiwgW2QubGluZVNwYWNlXSwgXCJDb2RlTWlycm9yLWxpbmVzXCIpO1xuICAgIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldy5cbiAgICBkLm1vdmVyID0gZWx0KFwiZGl2XCIsIFtsaW5lc10sIG51bGwsIFwicG9zaXRpb246IHJlbGF0aXZlXCIpO1xuICAgIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudCwgYWxsb3dpbmcgc2Nyb2xsaW5nLlxuICAgIGQuc2l6ZXIgPSBlbHQoXCJkaXZcIiwgW2QubW92ZXJdLCBcIkNvZGVNaXJyb3Itc2l6ZXJcIik7XG4gICAgZC5zaXplcldpZHRoID0gbnVsbDtcbiAgICAvLyBCZWhhdmlvciBvZiBlbHRzIHdpdGggb3ZlcmZsb3c6IGF1dG8gYW5kIHBhZGRpbmcgaXNcbiAgICAvLyBpbmNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzLiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoZVxuICAgIC8vIHNjcm9sbGFibGUgYXJlYSBpcyBiaWcgZW5vdWdoLlxuICAgIGQuaGVpZ2h0Rm9yY2VyID0gZWx0KFwiZGl2XCIsIG51bGwsIG51bGwsIFwicG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IFwiICsgc2Nyb2xsZXJHYXAgKyBcInB4OyB3aWR0aDogMXB4O1wiKTtcbiAgICAvLyBXaWxsIGNvbnRhaW4gdGhlIGd1dHRlcnMsIGlmIGFueS5cbiAgICBkLmd1dHRlcnMgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWd1dHRlcnNcIik7XG4gICAgZC5saW5lR3V0dGVyID0gbnVsbDtcbiAgICAvLyBBY3R1YWwgc2Nyb2xsYWJsZSBlbGVtZW50LlxuICAgIGQuc2Nyb2xsZXIgPSBlbHQoXCJkaXZcIiwgW2Quc2l6ZXIsIGQuaGVpZ2h0Rm9yY2VyLCBkLmd1dHRlcnNdLCBcIkNvZGVNaXJyb3Itc2Nyb2xsXCIpO1xuICAgIGQuc2Nyb2xsZXIuc2V0QXR0cmlidXRlKFwidGFiSW5kZXhcIiwgXCItMVwiKTtcbiAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxpdmVzLlxuICAgIGQud3JhcHBlciA9IGVsdChcImRpdlwiLCBbZC5zY3JvbGxiYXJGaWxsZXIsIGQuZ3V0dGVyRmlsbGVyLCBkLnNjcm9sbGVyXSwgXCJDb2RlTWlycm9yXCIpO1xuXG4gICAgLy8gV29yayBhcm91bmQgSUU3IHotaW5kZXggYnVnIChub3QgcGVyZmVjdCwgaGVuY2UgSUU3IG5vdCByZWFsbHkgYmVpbmcgc3VwcG9ydGVkKVxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uIDwgOCkgeyBkLmd1dHRlcnMuc3R5bGUuekluZGV4ID0gLTE7IGQuc2Nyb2xsZXIuc3R5bGUucGFkZGluZ1JpZ2h0ID0gMDsgfVxuICAgIGlmICghd2Via2l0ICYmICEoZ2Vja28gJiYgbW9iaWxlKSkgeyBkLnNjcm9sbGVyLmRyYWdnYWJsZSA9IHRydWU7IH1cblxuICAgIGlmIChwbGFjZSkge1xuICAgICAgaWYgKHBsYWNlLmFwcGVuZENoaWxkKSB7IHBsYWNlLmFwcGVuZENoaWxkKGQud3JhcHBlcik7IH1cbiAgICAgIGVsc2UgeyBwbGFjZShkLndyYXBwZXIpOyB9XG4gICAgfVxuXG4gICAgLy8gQ3VycmVudCByZW5kZXJlZCByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuXG4gICAgZC52aWV3RnJvbSA9IGQudmlld1RvID0gZG9jLmZpcnN0O1xuICAgIGQucmVwb3J0ZWRWaWV3RnJvbSA9IGQucmVwb3J0ZWRWaWV3VG8gPSBkb2MuZmlyc3Q7XG4gICAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbmRlcmVkIGxpbmVzLlxuICAgIGQudmlldyA9IFtdO1xuICAgIGQucmVuZGVyZWRWaWV3ID0gbnVsbDtcbiAgICAvLyBIb2xkcyBpbmZvIGFib3V0IGEgc2luZ2xlIHJlbmRlcmVkIGxpbmUgd2hlbiBpdCB3YXMgcmVuZGVyZWRcbiAgICAvLyBmb3IgbWVhc3VyZW1lbnQsIHdoaWxlIG5vdCBpbiB2aWV3LlxuICAgIGQuZXh0ZXJuYWxNZWFzdXJlZCA9IG51bGw7XG4gICAgLy8gRW1wdHkgc3BhY2UgKGluIHBpeGVscykgYWJvdmUgdGhlIHZpZXdcbiAgICBkLnZpZXdPZmZzZXQgPSAwO1xuICAgIGQubGFzdFdyYXBIZWlnaHQgPSBkLmxhc3RXcmFwV2lkdGggPSAwO1xuICAgIGQudXBkYXRlTGluZU51bWJlcnMgPSBudWxsO1xuXG4gICAgZC5uYXRpdmVCYXJXaWR0aCA9IGQuYmFySGVpZ2h0ID0gZC5iYXJXaWR0aCA9IDA7XG4gICAgZC5zY3JvbGxiYXJzQ2xpcHBlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXNlZCB0byBvbmx5IHJlc2l6ZSB0aGUgbGluZSBudW1iZXIgZ3V0dGVyIHdoZW4gbmVjZXNzYXJ5ICh3aGVuXG4gICAgLy8gdGhlIGFtb3VudCBvZiBsaW5lcyBjcm9zc2VzIGEgYm91bmRhcnkgdGhhdCBtYWtlcyBpdHMgd2lkdGggY2hhbmdlKVxuICAgIGQubGluZU51bVdpZHRoID0gZC5saW5lTnVtSW5uZXJXaWR0aCA9IGQubGluZU51bUNoYXJzID0gbnVsbDtcbiAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIGEgbm9uLWhvcml6b250YWwtc2Nyb2xsaW5nIGxpbmUgd2lkZ2V0IGlzXG4gICAgLy8gYWRkZWQuIEFzIGFuIG9wdGltaXphdGlvbiwgbGluZSB3aWRnZXQgYWxpZ25pbmcgaXMgc2tpcHBlZCB3aGVuXG4gICAgLy8gdGhpcyBpcyBmYWxzZS5cbiAgICBkLmFsaWduV2lkZ2V0cyA9IGZhbHNlO1xuXG4gICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRpbmdIID0gbnVsbDtcblxuICAgIC8vIFRyYWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBzbyB0aGF0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhclxuICAgIC8vIGNhbiBiZSBrZXB0IHN0YXRpYyB3aGVuIHNjcm9sbGluZy5cbiAgICBkLm1heExpbmUgPSBudWxsO1xuICAgIGQubWF4TGluZUxlbmd0aCA9IDA7XG4gICAgZC5tYXhMaW5lQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgLy8gVXNlZCBmb3IgbWVhc3VyaW5nIHdoZWVsIHNjcm9sbGluZyBncmFudWxhcml0eVxuICAgIGQud2hlZWxEWCA9IGQud2hlZWxEWSA9IGQud2hlZWxTdGFydFggPSBkLndoZWVsU3RhcnRZID0gbnVsbDtcblxuICAgIC8vIFRydWUgd2hlbiBzaGlmdCBpcyBoZWxkIGRvd24uXG4gICAgZC5zaGlmdCA9IGZhbHNlO1xuXG4gICAgLy8gVXNlZCB0byB0cmFjayB3aGV0aGVyIGFueXRoaW5nIGhhcHBlbmVkIHNpbmNlIHRoZSBjb250ZXh0IG1lbnVcbiAgICAvLyB3YXMgb3BlbmVkLlxuICAgIGQuc2VsRm9yQ29udGV4dE1lbnUgPSBudWxsO1xuXG4gICAgZC5hY3RpdmVUb3VjaCA9IG51bGw7XG5cbiAgICBkLmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyhvcHRpb25zLmd1dHRlcnMsIG9wdGlvbnMubGluZU51bWJlcnMpO1xuICAgIHJlbmRlckd1dHRlcnMoZCk7XG5cbiAgICBpbnB1dC5pbml0KGQpO1xuICB9XG5cbiAgLy8gU2luY2UgdGhlIGRlbHRhIHZhbHVlcyByZXBvcnRlZCBvbiBtb3VzZSB3aGVlbCBldmVudHMgYXJlXG4gIC8vIHVuc3RhbmRhcmRpemVkIGJldHdlZW4gYnJvd3NlcnMgYW5kIGV2ZW4gYnJvd3NlciB2ZXJzaW9ucywgYW5kXG4gIC8vIGdlbmVyYWxseSBob3JyaWJseSB1bnByZWRpY3RhYmxlLCB0aGlzIGNvZGUgc3RhcnRzIGJ5IG1lYXN1cmluZ1xuICAvLyB0aGUgc2Nyb2xsIGVmZmVjdCB0aGF0IHRoZSBmaXJzdCBmZXcgbW91c2Ugd2hlZWwgZXZlbnRzIGhhdmUsXG4gIC8vIGFuZCwgZnJvbSB0aGF0LCBkZXRlY3RzIHRoZSB3YXkgaXQgY2FuIGNvbnZlcnQgZGVsdGFzIHRvIHBpeGVsXG4gIC8vIG9mZnNldHMgYWZ0ZXJ3YXJkcy5cbiAgLy9cbiAgLy8gVGhlIHJlYXNvbiB3ZSB3YW50IHRvIGtub3cgdGhlIGFtb3VudCBhIHdoZWVsIGV2ZW50IHdpbGwgc2Nyb2xsXG4gIC8vIGlzIHRoYXQgaXQgZ2l2ZXMgdXMgYSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBkaXNwbGF5IGJlZm9yZSB0aGVcbiAgLy8gYWN0dWFsIHNjcm9sbGluZyBoYXBwZW5zLCByZWR1Y2luZyBmbGlja2VyaW5nLlxuXG4gIHZhciB3aGVlbFNhbXBsZXMgPSAwLCB3aGVlbFBpeGVsc1BlclVuaXQgPSBudWxsO1xuICAvLyBGaWxsIGluIGEgYnJvd3Nlci1kZXRlY3RlZCBzdGFydGluZyB2YWx1ZSBvbiBicm93c2VycyB3aGVyZSB3ZVxuICAvLyBrbm93IG9uZS4gVGhlc2UgZG9uJ3QgaGF2ZSB0byBiZSBhY2N1cmF0ZSAtLSB0aGUgcmVzdWx0IG9mIHRoZW1cbiAgLy8gYmVpbmcgd3Jvbmcgd291bGQganVzdCBiZSBhIHNsaWdodCBmbGlja2VyIG9uIHRoZSBmaXJzdCB3aGVlbFxuICAvLyBzY3JvbGwgKGlmIGl0IGlzIGxhcmdlIGVub3VnaCkuXG4gIGlmIChpZSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjUzOyB9XG4gIGVsc2UgaWYgKGdlY2tvKSB7IHdoZWVsUGl4ZWxzUGVyVW5pdCA9IDE1OyB9XG4gIGVsc2UgaWYgKGNocm9tZSkgeyB3aGVlbFBpeGVsc1BlclVuaXQgPSAtLjc7IH1cbiAgZWxzZSBpZiAoc2FmYXJpKSB7IHdoZWVsUGl4ZWxzUGVyVW5pdCA9IC0xLzM7IH1cblxuICBmdW5jdGlvbiB3aGVlbEV2ZW50RGVsdGEoZSkge1xuICAgIHZhciBkeCA9IGUud2hlZWxEZWx0YVgsIGR5ID0gZS53aGVlbERlbHRhWTtcbiAgICBpZiAoZHggPT0gbnVsbCAmJiBlLmRldGFpbCAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIHsgZHggPSBlLmRldGFpbDsgfVxuICAgIGlmIChkeSA9PSBudWxsICYmIGUuZGV0YWlsICYmIGUuYXhpcyA9PSBlLlZFUlRJQ0FMX0FYSVMpIHsgZHkgPSBlLmRldGFpbDsgfVxuICAgIGVsc2UgaWYgKGR5ID09IG51bGwpIHsgZHkgPSBlLndoZWVsRGVsdGE7IH1cbiAgICByZXR1cm4ge3g6IGR4LCB5OiBkeX1cbiAgfVxuICBmdW5jdGlvbiB3aGVlbEV2ZW50UGl4ZWxzKGUpIHtcbiAgICB2YXIgZGVsdGEgPSB3aGVlbEV2ZW50RGVsdGEoZSk7XG4gICAgZGVsdGEueCAqPSB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gICAgZGVsdGEueSAqPSB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gICAgcmV0dXJuIGRlbHRhXG4gIH1cblxuICBmdW5jdGlvbiBvblNjcm9sbFdoZWVsKGNtLCBlKSB7XG4gICAgdmFyIGRlbHRhID0gd2hlZWxFdmVudERlbHRhKGUpLCBkeCA9IGRlbHRhLngsIGR5ID0gZGVsdGEueTtcblxuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgc2Nyb2xsID0gZGlzcGxheS5zY3JvbGxlcjtcbiAgICAvLyBRdWl0IGlmIHRoZXJlJ3Mgbm90aGluZyB0byBzY3JvbGwgaGVyZVxuICAgIHZhciBjYW5TY3JvbGxYID0gc2Nyb2xsLnNjcm9sbFdpZHRoID4gc2Nyb2xsLmNsaWVudFdpZHRoO1xuICAgIHZhciBjYW5TY3JvbGxZID0gc2Nyb2xsLnNjcm9sbEhlaWdodCA+IHNjcm9sbC5jbGllbnRIZWlnaHQ7XG4gICAgaWYgKCEoZHggJiYgY2FuU2Nyb2xsWCB8fCBkeSAmJiBjYW5TY3JvbGxZKSkgeyByZXR1cm4gfVxuXG4gICAgLy8gV2Via2l0IGJyb3dzZXJzIG9uIE9TIFggYWJvcnQgbW9tZW50dW0gc2Nyb2xscyB3aGVuIHRoZSB0YXJnZXRcbiAgICAvLyBvZiB0aGUgc2Nyb2xsIGV2ZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50LlxuICAgIC8vIFRoaXMgaGFjayAoc2VlIHJlbGF0ZWQgY29kZSBpbiBwYXRjaERpc3BsYXkpIG1ha2VzIHN1cmUgdGhlXG4gICAgLy8gZWxlbWVudCBpcyBrZXB0IGFyb3VuZC5cbiAgICBpZiAoZHkgJiYgbWFjICYmIHdlYmtpdCkge1xuICAgICAgb3V0ZXI6IGZvciAodmFyIGN1ciA9IGUudGFyZ2V0LCB2aWV3ID0gZGlzcGxheS52aWV3OyBjdXIgIT0gc2Nyb2xsOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodmlld1tpXS5ub2RlID09IGN1cikge1xuICAgICAgICAgICAgY20uZGlzcGxheS5jdXJyZW50V2hlZWxUYXJnZXQgPSBjdXI7XG4gICAgICAgICAgICBicmVhayBvdXRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9uIHNvbWUgYnJvd3NlcnMsIGhvcml6b250YWwgc2Nyb2xsaW5nIHdpbGwgY2F1c2UgcmVkcmF3cyB0b1xuICAgIC8vIGhhcHBlbiBiZWZvcmUgdGhlIGd1dHRlciBoYXMgYmVlbiByZWFsaWduZWQsIGNhdXNpbmcgaXQgdG9cbiAgICAvLyB3cmlnZ2xlIGFyb3VuZCBpbiBhIG1vc3QgdW5zZWVtbHkgd2F5LiBXaGVuIHdlIGhhdmUgYW5cbiAgICAvLyBlc3RpbWF0ZWQgcGl4ZWxzL2RlbHRhIHZhbHVlLCB3ZSBqdXN0IGhhbmRsZSBob3Jpem9udGFsXG4gICAgLy8gc2Nyb2xsaW5nIGVudGlyZWx5IGhlcmUuIEl0J2xsIGJlIHNsaWdodGx5IG9mZiBmcm9tIG5hdGl2ZSwgYnV0XG4gICAgLy8gYmV0dGVyIHRoYW4gZ2xpdGNoaW5nIG91dC5cbiAgICBpZiAoZHggJiYgIWdlY2tvICYmICFwcmVzdG8gJiYgd2hlZWxQaXhlbHNQZXJVbml0ICE9IG51bGwpIHtcbiAgICAgIGlmIChkeSAmJiBjYW5TY3JvbGxZKVxuICAgICAgICB7IHVwZGF0ZVNjcm9sbFRvcChjbSwgTWF0aC5tYXgoMCwgc2Nyb2xsLnNjcm9sbFRvcCArIGR5ICogd2hlZWxQaXhlbHNQZXJVbml0KSk7IH1cbiAgICAgIHNldFNjcm9sbExlZnQoY20sIE1hdGgubWF4KDAsIHNjcm9sbC5zY3JvbGxMZWZ0ICsgZHggKiB3aGVlbFBpeGVsc1BlclVuaXQpKTtcbiAgICAgIC8vIE9ubHkgcHJldmVudCBkZWZhdWx0IHNjcm9sbGluZyBpZiB2ZXJ0aWNhbCBzY3JvbGxpbmcgaXNcbiAgICAgIC8vIGFjdHVhbGx5IHBvc3NpYmxlLiBPdGhlcndpc2UsIGl0IGNhdXNlcyB2ZXJ0aWNhbCBzY3JvbGxcbiAgICAgIC8vIGppdHRlciBvbiBPU1ggdHJhY2twYWRzIHdoZW4gZGVsdGFYIGlzIHNtYWxsIGFuZCBkZWx0YVlcbiAgICAgIC8vIGlzIGxhcmdlIChpc3N1ZSAjMzU3OSlcbiAgICAgIGlmICghZHkgfHwgKGR5ICYmIGNhblNjcm9sbFkpKVxuICAgICAgICB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgICAgIGRpc3BsYXkud2hlZWxTdGFydFggPSBudWxsOyAvLyBBYm9ydCBtZWFzdXJlbWVudCwgaWYgaW4gcHJvZ3Jlc3NcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vICdQcm9qZWN0JyB0aGUgdmlzaWJsZSB2aWV3cG9ydCB0byBjb3ZlciB0aGUgYXJlYSB0aGF0IGlzIGJlaW5nXG4gICAgLy8gc2Nyb2xsZWQgaW50byB2aWV3IChpZiB3ZSBrbm93IGVub3VnaCB0byBlc3RpbWF0ZSBpdCkuXG4gICAgaWYgKGR5ICYmIHdoZWVsUGl4ZWxzUGVyVW5pdCAhPSBudWxsKSB7XG4gICAgICB2YXIgcGl4ZWxzID0gZHkgKiB3aGVlbFBpeGVsc1BlclVuaXQ7XG4gICAgICB2YXIgdG9wID0gY20uZG9jLnNjcm9sbFRvcCwgYm90ID0gdG9wICsgZGlzcGxheS53cmFwcGVyLmNsaWVudEhlaWdodDtcbiAgICAgIGlmIChwaXhlbHMgPCAwKSB7IHRvcCA9IE1hdGgubWF4KDAsIHRvcCArIHBpeGVscyAtIDUwKTsgfVxuICAgICAgZWxzZSB7IGJvdCA9IE1hdGgubWluKGNtLmRvYy5oZWlnaHQsIGJvdCArIHBpeGVscyArIDUwKTsgfVxuICAgICAgdXBkYXRlRGlzcGxheVNpbXBsZShjbSwge3RvcDogdG9wLCBib3R0b206IGJvdH0pO1xuICAgIH1cblxuICAgIGlmICh3aGVlbFNhbXBsZXMgPCAyMCkge1xuICAgICAgaWYgKGRpc3BsYXkud2hlZWxTdGFydFggPT0gbnVsbCkge1xuICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gc2Nyb2xsLnNjcm9sbExlZnQ7IGRpc3BsYXkud2hlZWxTdGFydFkgPSBzY3JvbGwuc2Nyb2xsVG9wO1xuICAgICAgICBkaXNwbGF5LndoZWVsRFggPSBkeDsgZGlzcGxheS53aGVlbERZID0gZHk7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChkaXNwbGF5LndoZWVsU3RhcnRYID09IG51bGwpIHsgcmV0dXJuIH1cbiAgICAgICAgICB2YXIgbW92ZWRYID0gc2Nyb2xsLnNjcm9sbExlZnQgLSBkaXNwbGF5LndoZWVsU3RhcnRYO1xuICAgICAgICAgIHZhciBtb3ZlZFkgPSBzY3JvbGwuc2Nyb2xsVG9wIC0gZGlzcGxheS53aGVlbFN0YXJ0WTtcbiAgICAgICAgICB2YXIgc2FtcGxlID0gKG1vdmVkWSAmJiBkaXNwbGF5LndoZWVsRFkgJiYgbW92ZWRZIC8gZGlzcGxheS53aGVlbERZKSB8fFxuICAgICAgICAgICAgKG1vdmVkWCAmJiBkaXNwbGF5LndoZWVsRFggJiYgbW92ZWRYIC8gZGlzcGxheS53aGVlbERYKTtcbiAgICAgICAgICBkaXNwbGF5LndoZWVsU3RhcnRYID0gZGlzcGxheS53aGVlbFN0YXJ0WSA9IG51bGw7XG4gICAgICAgICAgaWYgKCFzYW1wbGUpIHsgcmV0dXJuIH1cbiAgICAgICAgICB3aGVlbFBpeGVsc1BlclVuaXQgPSAod2hlZWxQaXhlbHNQZXJVbml0ICogd2hlZWxTYW1wbGVzICsgc2FtcGxlKSAvICh3aGVlbFNhbXBsZXMgKyAxKTtcbiAgICAgICAgICArK3doZWVsU2FtcGxlcztcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXkud2hlZWxEWCArPSBkeDsgZGlzcGxheS53aGVlbERZICs9IGR5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlbGVjdGlvbiBvYmplY3RzIGFyZSBpbW11dGFibGUuIEEgbmV3IG9uZSBpcyBjcmVhdGVkIGV2ZXJ5IHRpbWVcbiAgLy8gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiBBIHNlbGVjdGlvbiBpcyBvbmUgb3IgbW9yZSBub24tb3ZlcmxhcHBpbmdcbiAgLy8gKGFuZCBub24tdG91Y2hpbmcpIHJhbmdlcywgc29ydGVkLCBhbmQgYW4gaW50ZWdlciB0aGF0IGluZGljYXRlc1xuICAvLyB3aGljaCBvbmUgaXMgdGhlIHByaW1hcnkgc2VsZWN0aW9uICh0aGUgb25lIHRoYXQncyBzY3JvbGxlZCBpbnRvXG4gIC8vIHZpZXcsIHRoYXQgZ2V0Q3Vyc29yIHJldHVybnMsIGV0YykuXG4gIHZhciBTZWxlY3Rpb24gPSBmdW5jdGlvbihyYW5nZXMsIHByaW1JbmRleCkge1xuICAgIHRoaXMucmFuZ2VzID0gcmFuZ2VzO1xuICAgIHRoaXMucHJpbUluZGV4ID0gcHJpbUluZGV4O1xuICB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUucHJpbWFyeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucmFuZ2VzW3RoaXMucHJpbUluZGV4XSB9O1xuXG4gIFNlbGVjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKG90aGVyID09IHRoaXMpIHsgcmV0dXJuIHRydWUgfVxuICAgIGlmIChvdGhlci5wcmltSW5kZXggIT0gdGhpcy5wcmltSW5kZXggfHwgb3RoZXIucmFuZ2VzLmxlbmd0aCAhPSB0aGlzLnJhbmdlcy5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaGVyZSA9IHRoaXMucmFuZ2VzW2ldLCB0aGVyZSA9IG90aGVyLnJhbmdlc1tpXTtcbiAgICAgIGlmICghZXF1YWxDdXJzb3JQb3MoaGVyZS5hbmNob3IsIHRoZXJlLmFuY2hvcikgfHwgIWVxdWFsQ3Vyc29yUG9zKGhlcmUuaGVhZCwgdGhlcmUuaGVhZCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfTtcblxuICBTZWxlY3Rpb24ucHJvdG90eXBlLmRlZXBDb3B5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBvdXRbaV0gPSBuZXcgUmFuZ2UoY29weVBvcyh0aGlzLnJhbmdlc1tpXS5hbmNob3IpLCBjb3B5UG9zKHRoaXMucmFuZ2VzW2ldLmhlYWQpKTsgfVxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgdGhpcy5wcmltSW5kZXgpXG4gIH07XG5cbiAgU2VsZWN0aW9uLnByb3RvdHlwZS5zb21ldGhpbmdTZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKVxuICAgICAgeyBpZiAoIXRoaXMucmFuZ2VzW2ldLmVtcHR5KCkpIHsgcmV0dXJuIHRydWUgfSB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH07XG5cbiAgU2VsZWN0aW9uLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uIChwb3MsIGVuZCkge1xuICAgIGlmICghZW5kKSB7IGVuZCA9IHBvczsgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2VzW2ldO1xuICAgICAgaWYgKGNtcChlbmQsIHJhbmdlLmZyb20oKSkgPj0gMCAmJiBjbXAocG9zLCByYW5nZS50bygpKSA8PSAwKVxuICAgICAgICB7IHJldHVybiBpIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH07XG5cbiAgdmFyIFJhbmdlID0gZnVuY3Rpb24oYW5jaG9yLCBoZWFkKSB7XG4gICAgdGhpcy5hbmNob3IgPSBhbmNob3I7IHRoaXMuaGVhZCA9IGhlYWQ7XG4gIH07XG5cbiAgUmFuZ2UucHJvdG90eXBlLmZyb20gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtaW5Qb3ModGhpcy5hbmNob3IsIHRoaXMuaGVhZCkgfTtcbiAgUmFuZ2UucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbWF4UG9zKHRoaXMuYW5jaG9yLCB0aGlzLmhlYWQpIH07XG4gIFJhbmdlLnByb3RvdHlwZS5lbXB0eSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuaGVhZC5saW5lID09IHRoaXMuYW5jaG9yLmxpbmUgJiYgdGhpcy5oZWFkLmNoID09IHRoaXMuYW5jaG9yLmNoIH07XG5cbiAgLy8gVGFrZSBhbiB1bnNvcnRlZCwgcG90ZW50aWFsbHkgb3ZlcmxhcHBpbmcgc2V0IG9mIHJhbmdlcywgYW5kXG4gIC8vIGJ1aWxkIGEgc2VsZWN0aW9uIG91dCBvZiBpdC4gJ0NvbnN1bWVzJyByYW5nZXMgYXJyYXkgKG1vZGlmeWluZ1xuICAvLyBpdCkuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihjbSwgcmFuZ2VzLCBwcmltSW5kZXgpIHtcbiAgICB2YXIgbWF5VG91Y2ggPSBjbSAmJiBjbS5vcHRpb25zLnNlbGVjdGlvbnNNYXlUb3VjaDtcbiAgICB2YXIgcHJpbSA9IHJhbmdlc1twcmltSW5kZXhdO1xuICAgIHJhbmdlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBjbXAoYS5mcm9tKCksIGIuZnJvbSgpKTsgfSk7XG4gICAgcHJpbUluZGV4ID0gaW5kZXhPZihyYW5nZXMsIHByaW0pO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY3VyID0gcmFuZ2VzW2ldLCBwcmV2ID0gcmFuZ2VzW2kgLSAxXTtcbiAgICAgIHZhciBkaWZmID0gY21wKHByZXYudG8oKSwgY3VyLmZyb20oKSk7XG4gICAgICBpZiAobWF5VG91Y2ggJiYgIWN1ci5lbXB0eSgpID8gZGlmZiA+IDAgOiBkaWZmID49IDApIHtcbiAgICAgICAgdmFyIGZyb20gPSBtaW5Qb3MocHJldi5mcm9tKCksIGN1ci5mcm9tKCkpLCB0byA9IG1heFBvcyhwcmV2LnRvKCksIGN1ci50bygpKTtcbiAgICAgICAgdmFyIGludiA9IHByZXYuZW1wdHkoKSA/IGN1ci5mcm9tKCkgPT0gY3VyLmhlYWQgOiBwcmV2LmZyb20oKSA9PSBwcmV2LmhlYWQ7XG4gICAgICAgIGlmIChpIDw9IHByaW1JbmRleCkgeyAtLXByaW1JbmRleDsgfVxuICAgICAgICByYW5nZXMuc3BsaWNlKC0taSwgMiwgbmV3IFJhbmdlKGludiA/IHRvIDogZnJvbSwgaW52ID8gZnJvbSA6IHRvKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHJhbmdlcywgcHJpbUluZGV4KVxuICB9XG5cbiAgZnVuY3Rpb24gc2ltcGxlU2VsZWN0aW9uKGFuY2hvciwgaGVhZCkge1xuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKFtuZXcgUmFuZ2UoYW5jaG9yLCBoZWFkIHx8IGFuY2hvcildLCAwKVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGVuZCBvZiBhIGNoYW5nZSAoaXRzICd0bycgcHJvcGVydHlcbiAgLy8gcmVmZXJzIHRvIHRoZSBwcmUtY2hhbmdlIGVuZCkuXG4gIGZ1bmN0aW9uIGNoYW5nZUVuZChjaGFuZ2UpIHtcbiAgICBpZiAoIWNoYW5nZS50ZXh0KSB7IHJldHVybiBjaGFuZ2UudG8gfVxuICAgIHJldHVybiBQb3MoY2hhbmdlLmZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICBsc3QoY2hhbmdlLnRleHQpLmxlbmd0aCArIChjaGFuZ2UudGV4dC5sZW5ndGggPT0gMSA/IGNoYW5nZS5mcm9tLmNoIDogMCkpXG4gIH1cblxuICAvLyBBZGp1c3QgYSBwb3NpdGlvbiB0byByZWZlciB0byB0aGUgcG9zdC1jaGFuZ2UgcG9zaXRpb24gb2YgdGhlXG4gIC8vIHNhbWUgdGV4dCwgb3IgdGhlIGVuZCBvZiB0aGUgY2hhbmdlIGlmIHRoZSBjaGFuZ2UgY292ZXJzIGl0LlxuICBmdW5jdGlvbiBhZGp1c3RGb3JDaGFuZ2UocG9zLCBjaGFuZ2UpIHtcbiAgICBpZiAoY21wKHBvcywgY2hhbmdlLmZyb20pIDwgMCkgeyByZXR1cm4gcG9zIH1cbiAgICBpZiAoY21wKHBvcywgY2hhbmdlLnRvKSA8PSAwKSB7IHJldHVybiBjaGFuZ2VFbmQoY2hhbmdlKSB9XG5cbiAgICB2YXIgbGluZSA9IHBvcy5saW5lICsgY2hhbmdlLnRleHQubGVuZ3RoIC0gKGNoYW5nZS50by5saW5lIC0gY2hhbmdlLmZyb20ubGluZSkgLSAxLCBjaCA9IHBvcy5jaDtcbiAgICBpZiAocG9zLmxpbmUgPT0gY2hhbmdlLnRvLmxpbmUpIHsgY2ggKz0gY2hhbmdlRW5kKGNoYW5nZSkuY2ggLSBjaGFuZ2UudG8uY2g7IH1cbiAgICByZXR1cm4gUG9zKGxpbmUsIGNoKVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKSB7XG4gICAgdmFyIG91dCA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldO1xuICAgICAgb3V0LnB1c2gobmV3IFJhbmdlKGFkanVzdEZvckNoYW5nZShyYW5nZS5hbmNob3IsIGNoYW5nZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0Rm9yQ2hhbmdlKHJhbmdlLmhlYWQsIGNoYW5nZSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihkb2MuY20sIG91dCwgZG9jLnNlbC5wcmltSW5kZXgpXG4gIH1cblxuICBmdW5jdGlvbiBvZmZzZXRQb3MocG9zLCBvbGQsIG53KSB7XG4gICAgaWYgKHBvcy5saW5lID09IG9sZC5saW5lKVxuICAgICAgeyByZXR1cm4gUG9zKG53LmxpbmUsIHBvcy5jaCAtIG9sZC5jaCArIG53LmNoKSB9XG4gICAgZWxzZVxuICAgICAgeyByZXR1cm4gUG9zKG53LmxpbmUgKyAocG9zLmxpbmUgLSBvbGQubGluZSksIHBvcy5jaCkgfVxuICB9XG5cbiAgLy8gVXNlZCBieSByZXBsYWNlU2VsZWN0aW9ucyB0byBhbGxvdyBtb3ZpbmcgdGhlIHNlbGVjdGlvbiB0byB0aGVcbiAgLy8gc3RhcnQgb3IgYXJvdW5kIHRoZSByZXBsYWNlZCB0ZXN0LiBIaW50IG1heSBiZSBcInN0YXJ0XCIgb3IgXCJhcm91bmRcIi5cbiAgZnVuY3Rpb24gY29tcHV0ZVJlcGxhY2VkU2VsKGRvYywgY2hhbmdlcywgaGludCkge1xuICAgIHZhciBvdXQgPSBbXTtcbiAgICB2YXIgb2xkUHJldiA9IFBvcyhkb2MuZmlyc3QsIDApLCBuZXdQcmV2ID0gb2xkUHJldjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldO1xuICAgICAgdmFyIGZyb20gPSBvZmZzZXRQb3MoY2hhbmdlLmZyb20sIG9sZFByZXYsIG5ld1ByZXYpO1xuICAgICAgdmFyIHRvID0gb2Zmc2V0UG9zKGNoYW5nZUVuZChjaGFuZ2UpLCBvbGRQcmV2LCBuZXdQcmV2KTtcbiAgICAgIG9sZFByZXYgPSBjaGFuZ2UudG87XG4gICAgICBuZXdQcmV2ID0gdG87XG4gICAgICBpZiAoaGludCA9PSBcImFyb3VuZFwiKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2ldLCBpbnYgPSBjbXAocmFuZ2UuaGVhZCwgcmFuZ2UuYW5jaG9yKSA8IDA7XG4gICAgICAgIG91dFtpXSA9IG5ldyBSYW5nZShpbnYgPyB0byA6IGZyb20sIGludiA/IGZyb20gOiB0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRbaV0gPSBuZXcgUmFuZ2UoZnJvbSwgZnJvbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKG91dCwgZG9jLnNlbC5wcmltSW5kZXgpXG4gIH1cblxuICAvLyBVc2VkIHRvIGdldCB0aGUgZWRpdG9yIGludG8gYSBjb25zaXN0ZW50IHN0YXRlIGFnYWluIHdoZW4gb3B0aW9ucyBjaGFuZ2UuXG5cbiAgZnVuY3Rpb24gbG9hZE1vZGUoY20pIHtcbiAgICBjbS5kb2MubW9kZSA9IGdldE1vZGUoY20ub3B0aW9ucywgY20uZG9jLm1vZGVPcHRpb24pO1xuICAgIHJlc2V0TW9kZVN0YXRlKGNtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0TW9kZVN0YXRlKGNtKSB7XG4gICAgY20uZG9jLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgICAgaWYgKGxpbmUuc3R5bGVzKSB7IGxpbmUuc3R5bGVzID0gbnVsbDsgfVxuICAgIH0pO1xuICAgIGNtLmRvYy5tb2RlRnJvbnRpZXIgPSBjbS5kb2MuaGlnaGxpZ2h0RnJvbnRpZXIgPSBjbS5kb2MuZmlyc3Q7XG4gICAgc3RhcnRXb3JrZXIoY20sIDEwMCk7XG4gICAgY20uc3RhdGUubW9kZUdlbisrO1xuICAgIGlmIChjbS5jdXJPcCkgeyByZWdDaGFuZ2UoY20pOyB9XG4gIH1cblxuICAvLyBET0NVTUVOVCBEQVRBIFNUUlVDVFVSRVxuXG4gIC8vIEJ5IGRlZmF1bHQsIHVwZGF0ZXMgdGhhdCBzdGFydCBhbmQgZW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lXG4gIC8vIGFyZSB0cmVhdGVkIHNwZWNpYWxseSwgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24gb2YgbGluZVxuICAvLyB3aWRnZXRzIGFuZCBtYXJrZXIgZWxlbWVudHMgd2l0aCB0aGUgdGV4dCBiZWhhdmUgbW9yZSBpbnR1aXRpdmUuXG4gIGZ1bmN0aW9uIGlzV2hvbGVMaW5lVXBkYXRlKGRvYywgY2hhbmdlKSB7XG4gICAgcmV0dXJuIGNoYW5nZS5mcm9tLmNoID09IDAgJiYgY2hhbmdlLnRvLmNoID09IDAgJiYgbHN0KGNoYW5nZS50ZXh0KSA9PSBcIlwiICYmXG4gICAgICAoIWRvYy5jbSB8fCBkb2MuY20ub3B0aW9ucy53aG9sZUxpbmVVcGRhdGVCZWZvcmUpXG4gIH1cblxuICAvLyBQZXJmb3JtIGEgY2hhbmdlIG9uIHRoZSBkb2N1bWVudCBkYXRhIHN0cnVjdHVyZS5cbiAgZnVuY3Rpb24gdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBtYXJrZWRTcGFucywgZXN0aW1hdGVIZWlnaHQpIHtcbiAgICBmdW5jdGlvbiBzcGFuc0ZvcihuKSB7cmV0dXJuIG1hcmtlZFNwYW5zID8gbWFya2VkU3BhbnNbbl0gOiBudWxsfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZShsaW5lLCB0ZXh0LCBzcGFucykge1xuICAgICAgdXBkYXRlTGluZShsaW5lLCB0ZXh0LCBzcGFucywgZXN0aW1hdGVIZWlnaHQpO1xuICAgICAgc2lnbmFsTGF0ZXIobGluZSwgXCJjaGFuZ2VcIiwgbGluZSwgY2hhbmdlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGluZXNGb3Ioc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpXG4gICAgICAgIHsgcmVzdWx0LnB1c2gobmV3IExpbmUodGV4dFtpXSwgc3BhbnNGb3IoaSksIGVzdGltYXRlSGVpZ2h0KSk7IH1cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB2YXIgZnJvbSA9IGNoYW5nZS5mcm9tLCB0byA9IGNoYW5nZS50bywgdGV4dCA9IGNoYW5nZS50ZXh0O1xuICAgIHZhciBmaXJzdExpbmUgPSBnZXRMaW5lKGRvYywgZnJvbS5saW5lKSwgbGFzdExpbmUgPSBnZXRMaW5lKGRvYywgdG8ubGluZSk7XG4gICAgdmFyIGxhc3RUZXh0ID0gbHN0KHRleHQpLCBsYXN0U3BhbnMgPSBzcGFuc0Zvcih0ZXh0Lmxlbmd0aCAtIDEpLCBubGluZXMgPSB0by5saW5lIC0gZnJvbS5saW5lO1xuXG4gICAgLy8gQWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZVxuICAgIGlmIChjaGFuZ2UuZnVsbCkge1xuICAgICAgZG9jLmluc2VydCgwLCBsaW5lc0ZvcigwLCB0ZXh0Lmxlbmd0aCkpO1xuICAgICAgZG9jLnJlbW92ZSh0ZXh0Lmxlbmd0aCwgZG9jLnNpemUgLSB0ZXh0Lmxlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChpc1dob2xlTGluZVVwZGF0ZShkb2MsIGNoYW5nZSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2VcbiAgICAgIC8vIHN1cmUgbGluZSBvYmplY3RzIG1vdmUgdGhlIHdheSB0aGV5IGFyZSBzdXBwb3NlZCB0by5cbiAgICAgIHZhciBhZGRlZCA9IGxpbmVzRm9yKDAsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RMaW5lLnRleHQsIGxhc3RTcGFucyk7XG4gICAgICBpZiAobmxpbmVzKSB7IGRvYy5yZW1vdmUoZnJvbS5saW5lLCBubGluZXMpOyB9XG4gICAgICBpZiAoYWRkZWQubGVuZ3RoKSB7IGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7IH1cbiAgICB9IGVsc2UgaWYgKGZpcnN0TGluZSA9PSBsYXN0TGluZSkge1xuICAgICAgaWYgKHRleHQubGVuZ3RoID09IDEpIHtcbiAgICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyBsYXN0VGV4dCArIGZpcnN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSwgbGFzdFNwYW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhZGRlZCQxID0gbGluZXNGb3IoMSwgdGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgYWRkZWQkMS5wdXNoKG5ldyBMaW5lKGxhc3RUZXh0ICsgZmlyc3RMaW5lLnRleHQuc2xpY2UodG8uY2gpLCBsYXN0U3BhbnMsIGVzdGltYXRlSGVpZ2h0KSk7XG4gICAgICAgIHVwZGF0ZShmaXJzdExpbmUsIGZpcnN0TGluZS50ZXh0LnNsaWNlKDAsIGZyb20uY2gpICsgdGV4dFswXSwgc3BhbnNGb3IoMCkpO1xuICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkJDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGV4dC5sZW5ndGggPT0gMSkge1xuICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIHNwYW5zRm9yKDApKTtcbiAgICAgIGRvYy5yZW1vdmUoZnJvbS5saW5lICsgMSwgbmxpbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlKGZpcnN0TGluZSwgZmlyc3RMaW5lLnRleHQuc2xpY2UoMCwgZnJvbS5jaCkgKyB0ZXh0WzBdLCBzcGFuc0ZvcigwKSk7XG4gICAgICB1cGRhdGUobGFzdExpbmUsIGxhc3RUZXh0ICsgbGFzdExpbmUudGV4dC5zbGljZSh0by5jaCksIGxhc3RTcGFucyk7XG4gICAgICB2YXIgYWRkZWQkMiA9IGxpbmVzRm9yKDEsIHRleHQubGVuZ3RoIC0gMSk7XG4gICAgICBpZiAobmxpbmVzID4gMSkgeyBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcyAtIDEpOyB9XG4gICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkJDIpO1xuICAgIH1cblxuICAgIHNpZ25hbExhdGVyKGRvYywgXCJjaGFuZ2VcIiwgZG9jLCBjaGFuZ2UpO1xuICB9XG5cbiAgLy8gQ2FsbCBmIGZvciBhbGwgbGlua2VkIGRvY3VtZW50cy5cbiAgZnVuY3Rpb24gbGlua2VkRG9jcyhkb2MsIGYsIHNoYXJlZEhpc3RPbmx5KSB7XG4gICAgZnVuY3Rpb24gcHJvcGFnYXRlKGRvYywgc2tpcCwgc2hhcmVkSGlzdCkge1xuICAgICAgaWYgKGRvYy5saW5rZWQpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWwgPSBkb2MubGlua2VkW2ldO1xuICAgICAgICBpZiAocmVsLmRvYyA9PSBza2lwKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgdmFyIHNoYXJlZCA9IHNoYXJlZEhpc3QgJiYgcmVsLnNoYXJlZEhpc3Q7XG4gICAgICAgIGlmIChzaGFyZWRIaXN0T25seSAmJiAhc2hhcmVkKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgZihyZWwuZG9jLCBzaGFyZWQpO1xuICAgICAgICBwcm9wYWdhdGUocmVsLmRvYywgZG9jLCBzaGFyZWQpO1xuICAgICAgfSB9XG4gICAgfVxuICAgIHByb3BhZ2F0ZShkb2MsIG51bGwsIHRydWUpO1xuICB9XG5cbiAgLy8gQXR0YWNoIGEgZG9jdW1lbnQgdG8gYW4gZWRpdG9yLlxuICBmdW5jdGlvbiBhdHRhY2hEb2MoY20sIGRvYykge1xuICAgIGlmIChkb2MuY20pIHsgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBkb2N1bWVudCBpcyBhbHJlYWR5IGluIHVzZS5cIikgfVxuICAgIGNtLmRvYyA9IGRvYztcbiAgICBkb2MuY20gPSBjbTtcbiAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTtcbiAgICBsb2FkTW9kZShjbSk7XG4gICAgc2V0RGlyZWN0aW9uQ2xhc3MoY20pO1xuICAgIGlmICghY20ub3B0aW9ucy5saW5lV3JhcHBpbmcpIHsgZmluZE1heExpbmUoY20pOyB9XG4gICAgY20ub3B0aW9ucy5tb2RlID0gZG9jLm1vZGVPcHRpb247XG4gICAgcmVnQ2hhbmdlKGNtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldERpcmVjdGlvbkNsYXNzKGNtKSB7XG4gIChjbS5kb2MuZGlyZWN0aW9uID09IFwicnRsXCIgPyBhZGRDbGFzcyA6IHJtQ2xhc3MpKGNtLmRpc3BsYXkubGluZURpdiwgXCJDb2RlTWlycm9yLXJ0bFwiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpcmVjdGlvbkNoYW5nZWQoY20pIHtcbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXREaXJlY3Rpb25DbGFzcyhjbSk7XG4gICAgICByZWdDaGFuZ2UoY20pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gSGlzdG9yeShzdGFydEdlbikge1xuICAgIC8vIEFycmF5cyBvZiBjaGFuZ2UgZXZlbnRzIGFuZCBzZWxlY3Rpb25zLiBEb2luZyBzb21ldGhpbmcgYWRkcyBhblxuICAgIC8vIGV2ZW50IHRvIGRvbmUgYW5kIGNsZWFycyB1bmRvLiBVbmRvaW5nIG1vdmVzIGV2ZW50cyBmcm9tIGRvbmVcbiAgICAvLyB0byB1bmRvbmUsIHJlZG9pbmcgbW92ZXMgdGhlbSBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLlxuICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdO1xuICAgIHRoaXMudW5kb0RlcHRoID0gSW5maW5pdHk7XG4gICAgLy8gVXNlZCB0byB0cmFjayB3aGVuIGNoYW5nZXMgY2FuIGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIHVuZG9cbiAgICAvLyBldmVudFxuICAgIHRoaXMubGFzdE1vZFRpbWUgPSB0aGlzLmxhc3RTZWxUaW1lID0gMDtcbiAgICB0aGlzLmxhc3RPcCA9IHRoaXMubGFzdFNlbE9wID0gbnVsbDtcbiAgICB0aGlzLmxhc3RPcmlnaW4gPSB0aGlzLmxhc3RTZWxPcmlnaW4gPSBudWxsO1xuICAgIC8vIFVzZWQgYnkgdGhlIGlzQ2xlYW4oKSBtZXRob2RcbiAgICB0aGlzLmdlbmVyYXRpb24gPSB0aGlzLm1heEdlbmVyYXRpb24gPSBzdGFydEdlbiB8fCAxO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGEgaGlzdG9yeSBjaGFuZ2UgZXZlbnQgZnJvbSBhbiB1cGRhdGVEb2Mtc3R5bGUgY2hhbmdlXG4gIC8vIG9iamVjdC5cbiAgZnVuY3Rpb24gaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpIHtcbiAgICB2YXIgaGlzdENoYW5nZSA9IHtmcm9tOiBjb3B5UG9zKGNoYW5nZS5mcm9tKSwgdG86IGNoYW5nZUVuZChjaGFuZ2UpLCB0ZXh0OiBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byl9O1xuICAgIGF0dGFjaExvY2FsU3BhbnMoZG9jLCBoaXN0Q2hhbmdlLCBjaGFuZ2UuZnJvbS5saW5lLCBjaGFuZ2UudG8ubGluZSArIDEpO1xuICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jKSB7IHJldHVybiBhdHRhY2hMb2NhbFNwYW5zKGRvYywgaGlzdENoYW5nZSwgY2hhbmdlLmZyb20ubGluZSwgY2hhbmdlLnRvLmxpbmUgKyAxKTsgfSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGhpc3RDaGFuZ2VcbiAgfVxuXG4gIC8vIFBvcCBhbGwgc2VsZWN0aW9uIGV2ZW50cyBvZmYgdGhlIGVuZCBvZiBhIGhpc3RvcnkgYXJyYXkuIFN0b3AgYXRcbiAgLy8gYSBjaGFuZ2UgZXZlbnQuXG4gIGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGFycmF5KSB7XG4gICAgd2hpbGUgKGFycmF5Lmxlbmd0aCkge1xuICAgICAgdmFyIGxhc3QgPSBsc3QoYXJyYXkpO1xuICAgICAgaWYgKGxhc3QucmFuZ2VzKSB7IGFycmF5LnBvcCgpOyB9XG4gICAgICBlbHNlIHsgYnJlYWsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHRvcCBjaGFuZ2UgZXZlbnQgaW4gdGhlIGhpc3RvcnkuIFBvcCBvZmYgc2VsZWN0aW9uXG4gIC8vIGV2ZW50cyB0aGF0IGFyZSBpbiB0aGUgd2F5LlxuICBmdW5jdGlvbiBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgZm9yY2UpIHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIGNsZWFyU2VsZWN0aW9uRXZlbnRzKGhpc3QuZG9uZSk7XG4gICAgICByZXR1cm4gbHN0KGhpc3QuZG9uZSlcbiAgICB9IGVsc2UgaWYgKGhpc3QuZG9uZS5sZW5ndGggJiYgIWxzdChoaXN0LmRvbmUpLnJhbmdlcykge1xuICAgICAgcmV0dXJuIGxzdChoaXN0LmRvbmUpXG4gICAgfSBlbHNlIGlmIChoaXN0LmRvbmUubGVuZ3RoID4gMSAmJiAhaGlzdC5kb25lW2hpc3QuZG9uZS5sZW5ndGggLSAyXS5yYW5nZXMpIHtcbiAgICAgIGhpc3QuZG9uZS5wb3AoKTtcbiAgICAgIHJldHVybiBsc3QoaGlzdC5kb25lKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlZ2lzdGVyIGEgY2hhbmdlIGluIHRoZSBoaXN0b3J5LiBNZXJnZXMgY2hhbmdlcyB0aGF0IGFyZSB3aXRoaW5cbiAgLy8gYSBzaW5nbGUgb3BlcmF0aW9uLCBvciBhcmUgY2xvc2UgdG9nZXRoZXIgd2l0aCBhbiBvcmlnaW4gdGhhdFxuICAvLyBhbGxvd3MgbWVyZ2luZyAoc3RhcnRpbmcgd2l0aCBcIitcIikgaW50byBhIHNpbmdsZSBldmVudC5cbiAgZnVuY3Rpb24gYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgb3BJZCkge1xuICAgIHZhciBoaXN0ID0gZG9jLmhpc3Rvcnk7XG4gICAgaGlzdC51bmRvbmUubGVuZ3RoID0gMDtcbiAgICB2YXIgdGltZSA9ICtuZXcgRGF0ZSwgY3VyO1xuICAgIHZhciBsYXN0O1xuXG4gICAgaWYgKChoaXN0Lmxhc3RPcCA9PSBvcElkIHx8XG4gICAgICAgICBoaXN0Lmxhc3RPcmlnaW4gPT0gY2hhbmdlLm9yaWdpbiAmJiBjaGFuZ2Uub3JpZ2luICYmXG4gICAgICAgICAoKGNoYW5nZS5vcmlnaW4uY2hhckF0KDApID09IFwiK1wiICYmIGhpc3QubGFzdE1vZFRpbWUgPiB0aW1lIC0gKGRvYy5jbSA/IGRvYy5jbS5vcHRpb25zLmhpc3RvcnlFdmVudERlbGF5IDogNTAwKSkgfHxcbiAgICAgICAgICBjaGFuZ2Uub3JpZ2luLmNoYXJBdCgwKSA9PSBcIipcIikpICYmXG4gICAgICAgIChjdXIgPSBsYXN0Q2hhbmdlRXZlbnQoaGlzdCwgaGlzdC5sYXN0T3AgPT0gb3BJZCkpKSB7XG4gICAgICAvLyBNZXJnZSB0aGlzIGNoYW5nZSBpbnRvIHRoZSBsYXN0IGV2ZW50XG4gICAgICBsYXN0ID0gbHN0KGN1ci5jaGFuZ2VzKTtcbiAgICAgIGlmIChjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCAmJiBjbXAoY2hhbmdlLmZyb20sIGxhc3QudG8pID09IDApIHtcbiAgICAgICAgLy8gT3B0aW1pemVkIGNhc2UgZm9yIHNpbXBsZSBpbnNlcnRpb24gLS0gZG9uJ3Qgd2FudCB0byBhZGRcbiAgICAgICAgLy8gbmV3IGNoYW5nZXNldHMgZm9yIGV2ZXJ5IGNoYXJhY3RlciB0eXBlZFxuICAgICAgICBsYXN0LnRvID0gY2hhbmdlRW5kKGNoYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBZGQgbmV3IHN1Yi1ldmVudFxuICAgICAgICBjdXIuY2hhbmdlcy5wdXNoKGhpc3RvcnlDaGFuZ2VGcm9tQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENhbiBub3QgYmUgbWVyZ2VkLCBzdGFydCBhIG5ldyBldmVudC5cbiAgICAgIHZhciBiZWZvcmUgPSBsc3QoaGlzdC5kb25lKTtcbiAgICAgIGlmICghYmVmb3JlIHx8ICFiZWZvcmUucmFuZ2VzKVxuICAgICAgICB7IHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZG9jLnNlbCwgaGlzdC5kb25lKTsgfVxuICAgICAgY3VyID0ge2NoYW5nZXM6IFtoaXN0b3J5Q2hhbmdlRnJvbUNoYW5nZShkb2MsIGNoYW5nZSldLFxuICAgICAgICAgICAgIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn07XG4gICAgICBoaXN0LmRvbmUucHVzaChjdXIpO1xuICAgICAgd2hpbGUgKGhpc3QuZG9uZS5sZW5ndGggPiBoaXN0LnVuZG9EZXB0aCkge1xuICAgICAgICBoaXN0LmRvbmUuc2hpZnQoKTtcbiAgICAgICAgaWYgKCFoaXN0LmRvbmVbMF0ucmFuZ2VzKSB7IGhpc3QuZG9uZS5zaGlmdCgpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGhpc3QuZG9uZS5wdXNoKHNlbEFmdGVyKTtcbiAgICBoaXN0LmdlbmVyYXRpb24gPSArK2hpc3QubWF4R2VuZXJhdGlvbjtcbiAgICBoaXN0Lmxhc3RNb2RUaW1lID0gaGlzdC5sYXN0U2VsVGltZSA9IHRpbWU7XG4gICAgaGlzdC5sYXN0T3AgPSBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7XG4gICAgaGlzdC5sYXN0T3JpZ2luID0gaGlzdC5sYXN0U2VsT3JpZ2luID0gY2hhbmdlLm9yaWdpbjtcblxuICAgIGlmICghbGFzdCkgeyBzaWduYWwoZG9jLCBcImhpc3RvcnlBZGRlZFwiKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uRXZlbnRDYW5CZU1lcmdlZChkb2MsIG9yaWdpbiwgcHJldiwgc2VsKSB7XG4gICAgdmFyIGNoID0gb3JpZ2luLmNoYXJBdCgwKTtcbiAgICByZXR1cm4gY2ggPT0gXCIqXCIgfHxcbiAgICAgIGNoID09IFwiK1wiICYmXG4gICAgICBwcmV2LnJhbmdlcy5sZW5ndGggPT0gc2VsLnJhbmdlcy5sZW5ndGggJiZcbiAgICAgIHByZXYuc29tZXRoaW5nU2VsZWN0ZWQoKSA9PSBzZWwuc29tZXRoaW5nU2VsZWN0ZWQoKSAmJlxuICAgICAgbmV3IERhdGUgLSBkb2MuaGlzdG9yeS5sYXN0U2VsVGltZSA8PSAoZG9jLmNtID8gZG9jLmNtLm9wdGlvbnMuaGlzdG9yeUV2ZW50RGVsYXkgOiA1MDApXG4gIH1cblxuICAvLyBDYWxsZWQgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLCBzZXRzIHRoZSBuZXcgc2VsZWN0aW9uIGFzXG4gIC8vIHRoZSBwZW5kaW5nIHNlbGVjdGlvbiBpbiB0aGUgaGlzdG9yeSwgYW5kIHB1c2hlcyB0aGUgb2xkIHBlbmRpbmdcbiAgLy8gc2VsZWN0aW9uIGludG8gdGhlICdkb25lJyBhcnJheSB3aGVuIGl0IHdhcyBzaWduaWZpY2FudGx5XG4gIC8vIGRpZmZlcmVudCAoaW4gbnVtYmVyIG9mIHNlbGVjdGVkIHJhbmdlcywgZW1wdGluZXNzLCBvciB0aW1lKS5cbiAgZnVuY3Rpb24gYWRkU2VsZWN0aW9uVG9IaXN0b3J5KGRvYywgc2VsLCBvcElkLCBvcHRpb25zKSB7XG4gICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgb3JpZ2luID0gb3B0aW9ucyAmJiBvcHRpb25zLm9yaWdpbjtcblxuICAgIC8vIEEgbmV3IGV2ZW50IGlzIHN0YXJ0ZWQgd2hlbiB0aGUgcHJldmlvdXMgb3JpZ2luIGRvZXMgbm90IG1hdGNoXG4gICAgLy8gdGhlIGN1cnJlbnQsIG9yIHRoZSBvcmlnaW5zIGRvbid0IGFsbG93IG1hdGNoaW5nLiBPcmlnaW5zXG4gICAgLy8gc3RhcnRpbmcgd2l0aCAqIGFyZSBhbHdheXMgbWVyZ2VkLCB0aG9zZSBzdGFydGluZyB3aXRoICsgYXJlXG4gICAgLy8gbWVyZ2VkIHdoZW4gc2ltaWxhciBhbmQgY2xvc2UgdG9nZXRoZXIgaW4gdGltZS5cbiAgICBpZiAob3BJZCA9PSBoaXN0Lmxhc3RTZWxPcCB8fFxuICAgICAgICAob3JpZ2luICYmIGhpc3QubGFzdFNlbE9yaWdpbiA9PSBvcmlnaW4gJiZcbiAgICAgICAgIChoaXN0Lmxhc3RNb2RUaW1lID09IGhpc3QubGFzdFNlbFRpbWUgJiYgaGlzdC5sYXN0T3JpZ2luID09IG9yaWdpbiB8fFxuICAgICAgICAgIHNlbGVjdGlvbkV2ZW50Q2FuQmVNZXJnZWQoZG9jLCBvcmlnaW4sIGxzdChoaXN0LmRvbmUpLCBzZWwpKSkpXG4gICAgICB7IGhpc3QuZG9uZVtoaXN0LmRvbmUubGVuZ3RoIC0gMV0gPSBzZWw7IH1cbiAgICBlbHNlXG4gICAgICB7IHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBoaXN0LmRvbmUpOyB9XG5cbiAgICBoaXN0Lmxhc3RTZWxUaW1lID0gK25ldyBEYXRlO1xuICAgIGhpc3QubGFzdFNlbE9yaWdpbiA9IG9yaWdpbjtcbiAgICBoaXN0Lmxhc3RTZWxPcCA9IG9wSWQ7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jbGVhclJlZG8gIT09IGZhbHNlKVxuICAgICAgeyBjbGVhclNlbGVjdGlvbkV2ZW50cyhoaXN0LnVuZG9uZSk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsLCBkZXN0KSB7XG4gICAgdmFyIHRvcCA9IGxzdChkZXN0KTtcbiAgICBpZiAoISh0b3AgJiYgdG9wLnJhbmdlcyAmJiB0b3AuZXF1YWxzKHNlbCkpKVxuICAgICAgeyBkZXN0LnB1c2goc2VsKTsgfVxuICB9XG5cbiAgLy8gVXNlZCB0byBzdG9yZSBtYXJrZWQgc3BhbiBpbmZvcm1hdGlvbiBpbiB0aGUgaGlzdG9yeS5cbiAgZnVuY3Rpb24gYXR0YWNoTG9jYWxTcGFucyhkb2MsIGNoYW5nZSwgZnJvbSwgdG8pIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBjaGFuZ2VbXCJzcGFuc19cIiArIGRvYy5pZF0sIG4gPSAwO1xuICAgIGRvYy5pdGVyKE1hdGgubWF4KGRvYy5maXJzdCwgZnJvbSksIE1hdGgubWluKGRvYy5maXJzdCArIGRvYy5zaXplLCB0byksIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAobGluZS5tYXJrZWRTcGFucylcbiAgICAgICAgeyAoZXhpc3RpbmcgfHwgKGV4aXN0aW5nID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdID0ge30pKVtuXSA9IGxpbmUubWFya2VkU3BhbnM7IH1cbiAgICAgICsrbjtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdoZW4gdW4vcmUtZG9pbmcgcmVzdG9yZXMgdGV4dCBjb250YWluaW5nIG1hcmtlZCBzcGFucywgdGhvc2VcbiAgLy8gdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseSBjbGVhcmVkIHNob3VsZCBub3QgYmUgcmVzdG9yZWQuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsZWFyZWRTcGFucyhzcGFucykge1xuICAgIGlmICghc3BhbnMpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBvdXQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgaWYgKHNwYW5zW2ldLm1hcmtlci5leHBsaWNpdGx5Q2xlYXJlZCkgeyBpZiAoIW91dCkgeyBvdXQgPSBzcGFucy5zbGljZSgwLCBpKTsgfSB9XG4gICAgICBlbHNlIGlmIChvdXQpIHsgb3V0LnB1c2goc3BhbnNbaV0pOyB9XG4gICAgfVxuICAgIHJldHVybiAhb3V0ID8gc3BhbnMgOiBvdXQubGVuZ3RoID8gb3V0IDogbnVsbFxuICB9XG5cbiAgLy8gUmV0cmlldmUgYW5kIGZpbHRlciB0aGUgb2xkIG1hcmtlZCBzcGFucyBzdG9yZWQgaW4gYSBjaGFuZ2UgZXZlbnQuXG4gIGZ1bmN0aW9uIGdldE9sZFNwYW5zKGRvYywgY2hhbmdlKSB7XG4gICAgdmFyIGZvdW5kID0gY2hhbmdlW1wic3BhbnNfXCIgKyBkb2MuaWRdO1xuICAgIGlmICghZm91bmQpIHsgcmV0dXJuIG51bGwgfVxuICAgIHZhciBudyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhbmdlLnRleHQubGVuZ3RoOyArK2kpXG4gICAgICB7IG53LnB1c2gocmVtb3ZlQ2xlYXJlZFNwYW5zKGZvdW5kW2ldKSk7IH1cbiAgICByZXR1cm4gbndcbiAgfVxuXG4gIC8vIFVzZWQgZm9yIHVuL3JlLWRvaW5nIGNoYW5nZXMgZnJvbSB0aGUgaGlzdG9yeS4gQ29tYmluZXMgdGhlXG4gIC8vIHJlc3VsdCBvZiBjb21wdXRpbmcgdGhlIGV4aXN0aW5nIHNwYW5zIHdpdGggdGhlIHNldCBvZiBzcGFucyB0aGF0XG4gIC8vIGV4aXN0ZWQgaW4gdGhlIGhpc3RvcnkgKHNvIHRoYXQgZGVsZXRpbmcgYXJvdW5kIGEgc3BhbiBhbmQgdGhlblxuICAvLyB1bmRvaW5nIGJyaW5ncyBiYWNrIHRoZSBzcGFuKS5cbiAgZnVuY3Rpb24gbWVyZ2VPbGRTcGFucyhkb2MsIGNoYW5nZSkge1xuICAgIHZhciBvbGQgPSBnZXRPbGRTcGFucyhkb2MsIGNoYW5nZSk7XG4gICAgdmFyIHN0cmV0Y2hlZCA9IHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpO1xuICAgIGlmICghb2xkKSB7IHJldHVybiBzdHJldGNoZWQgfVxuICAgIGlmICghc3RyZXRjaGVkKSB7IHJldHVybiBvbGQgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvbGQubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBvbGRDdXIgPSBvbGRbaV0sIHN0cmV0Y2hDdXIgPSBzdHJldGNoZWRbaV07XG4gICAgICBpZiAob2xkQ3VyICYmIHN0cmV0Y2hDdXIpIHtcbiAgICAgICAgc3BhbnM6IGZvciAodmFyIGogPSAwOyBqIDwgc3RyZXRjaEN1ci5sZW5ndGg7ICsraikge1xuICAgICAgICAgIHZhciBzcGFuID0gc3RyZXRjaEN1cltqXTtcbiAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IG9sZEN1ci5sZW5ndGg7ICsraylcbiAgICAgICAgICAgIHsgaWYgKG9sZEN1cltrXS5tYXJrZXIgPT0gc3Bhbi5tYXJrZXIpIHsgY29udGludWUgc3BhbnMgfSB9XG4gICAgICAgICAgb2xkQ3VyLnB1c2goc3Bhbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyZXRjaEN1cikge1xuICAgICAgICBvbGRbaV0gPSBzdHJldGNoQ3VyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2xkXG4gIH1cblxuICAvLyBVc2VkIGJvdGggdG8gcHJvdmlkZSBhIEpTT04tc2FmZSBvYmplY3QgaW4gLmdldEhpc3RvcnksIGFuZCwgd2hlblxuICAvLyBkZXRhY2hpbmcgYSBkb2N1bWVudCwgdG8gc3BsaXQgdGhlIGhpc3RvcnkgaW4gdHdvXG4gIGZ1bmN0aW9uIGNvcHlIaXN0b3J5QXJyYXkoZXZlbnRzLCBuZXdHcm91cCwgaW5zdGFudGlhdGVTZWwpIHtcbiAgICB2YXIgY29weSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgZXZlbnQgPSBldmVudHNbaV07XG4gICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7XG4gICAgICAgIGNvcHkucHVzaChpbnN0YW50aWF0ZVNlbCA/IFNlbGVjdGlvbi5wcm90b3R5cGUuZGVlcENvcHkuY2FsbChldmVudCkgOiBldmVudCk7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICB2YXIgY2hhbmdlcyA9IGV2ZW50LmNoYW5nZXMsIG5ld0NoYW5nZXMgPSBbXTtcbiAgICAgIGNvcHkucHVzaCh7Y2hhbmdlczogbmV3Q2hhbmdlc30pO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGFuZ2VzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2pdLCBtID0gKHZvaWQgMCk7XG4gICAgICAgIG5ld0NoYW5nZXMucHVzaCh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2UudG8sIHRleHQ6IGNoYW5nZS50ZXh0fSk7XG4gICAgICAgIGlmIChuZXdHcm91cCkgeyBmb3IgKHZhciBwcm9wIGluIGNoYW5nZSkgeyBpZiAobSA9IHByb3AubWF0Y2goL15zcGFuc18oXFxkKykkLykpIHtcbiAgICAgICAgICBpZiAoaW5kZXhPZihuZXdHcm91cCwgTnVtYmVyKG1bMV0pKSA+IC0xKSB7XG4gICAgICAgICAgICBsc3QobmV3Q2hhbmdlcylbcHJvcF0gPSBjaGFuZ2VbcHJvcF07XG4gICAgICAgICAgICBkZWxldGUgY2hhbmdlW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSB9IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfVxuXG4gIC8vIFRoZSAnc2Nyb2xsJyBwYXJhbWV0ZXIgZ2l2ZW4gdG8gbWFueSBvZiB0aGVzZSBpbmRpY2F0ZWQgd2hldGhlclxuICAvLyB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBzaG91bGQgYmUgc2Nyb2xsZWQgaW50byB2aWV3IGFmdGVyXG4gIC8vIG1vZGlmeWluZyB0aGUgc2VsZWN0aW9uLlxuXG4gIC8vIElmIHNoaWZ0IGlzIGhlbGQgb3IgdGhlIGV4dGVuZCBmbGFnIGlzIHNldCwgZXh0ZW5kcyBhIHJhbmdlIHRvXG4gIC8vIGluY2x1ZGUgYSBnaXZlbiBwb3NpdGlvbiAoYW5kIG9wdGlvbmFsbHkgYSBzZWNvbmQgcG9zaXRpb24pLlxuICAvLyBPdGhlcndpc2UsIHNpbXBseSByZXR1cm5zIHRoZSByYW5nZSBiZXR3ZWVuIHRoZSBnaXZlbiBwb3NpdGlvbnMuXG4gIC8vIFVzZWQgZm9yIGN1cnNvciBtb3Rpb24gYW5kIHN1Y2guXG4gIGZ1bmN0aW9uIGV4dGVuZFJhbmdlKHJhbmdlLCBoZWFkLCBvdGhlciwgZXh0ZW5kKSB7XG4gICAgaWYgKGV4dGVuZCkge1xuICAgICAgdmFyIGFuY2hvciA9IHJhbmdlLmFuY2hvcjtcbiAgICAgIGlmIChvdGhlcikge1xuICAgICAgICB2YXIgcG9zQmVmb3JlID0gY21wKGhlYWQsIGFuY2hvcikgPCAwO1xuICAgICAgICBpZiAocG9zQmVmb3JlICE9IChjbXAob3RoZXIsIGFuY2hvcikgPCAwKSkge1xuICAgICAgICAgIGFuY2hvciA9IGhlYWQ7XG4gICAgICAgICAgaGVhZCA9IG90aGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHBvc0JlZm9yZSAhPSAoY21wKGhlYWQsIG90aGVyKSA8IDApKSB7XG4gICAgICAgICAgaGVhZCA9IG90aGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFJhbmdlKGFuY2hvciwgaGVhZClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZShvdGhlciB8fCBoZWFkLCBoZWFkKVxuICAgIH1cbiAgfVxuXG4gIC8vIEV4dGVuZCB0aGUgcHJpbWFyeSBzZWxlY3Rpb24gcmFuZ2UsIGRpc2NhcmQgdGhlIHJlc3QuXG4gIGZ1bmN0aW9uIGV4dGVuZFNlbGVjdGlvbihkb2MsIGhlYWQsIG90aGVyLCBvcHRpb25zLCBleHRlbmQpIHtcbiAgICBpZiAoZXh0ZW5kID09IG51bGwpIHsgZXh0ZW5kID0gZG9jLmNtICYmIChkb2MuY20uZGlzcGxheS5zaGlmdCB8fCBkb2MuZXh0ZW5kKTsgfVxuICAgIHNldFNlbGVjdGlvbihkb2MsIG5ldyBTZWxlY3Rpb24oW2V4dGVuZFJhbmdlKGRvYy5zZWwucHJpbWFyeSgpLCBoZWFkLCBvdGhlciwgZXh0ZW5kKV0sIDApLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIEV4dGVuZCBhbGwgc2VsZWN0aW9ucyAocG9zIGlzIGFuIGFycmF5IG9mIHNlbGVjdGlvbnMgd2l0aCBsZW5ndGhcbiAgLy8gZXF1YWwgdGhlIG51bWJlciBvZiBzZWxlY3Rpb25zKVxuICBmdW5jdGlvbiBleHRlbmRTZWxlY3Rpb25zKGRvYywgaGVhZHMsIG9wdGlvbnMpIHtcbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIGV4dGVuZCA9IGRvYy5jbSAmJiAoZG9jLmNtLmRpc3BsYXkuc2hpZnQgfHwgZG9jLmV4dGVuZCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgIHsgb3V0W2ldID0gZXh0ZW5kUmFuZ2UoZG9jLnNlbC5yYW5nZXNbaV0sIGhlYWRzW2ldLCBudWxsLCBleHRlbmQpOyB9XG4gICAgdmFyIG5ld1NlbCA9IG5vcm1hbGl6ZVNlbGVjdGlvbihkb2MuY20sIG91dCwgZG9jLnNlbC5wcmltSW5kZXgpO1xuICAgIHNldFNlbGVjdGlvbihkb2MsIG5ld1NlbCwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBVcGRhdGVzIGEgc2luZ2xlIHJhbmdlIGluIHRoZSBzZWxlY3Rpb24uXG4gIGZ1bmN0aW9uIHJlcGxhY2VPbmVTZWxlY3Rpb24oZG9jLCBpLCByYW5nZSwgb3B0aW9ucykge1xuICAgIHZhciByYW5nZXMgPSBkb2Muc2VsLnJhbmdlcy5zbGljZSgwKTtcbiAgICByYW5nZXNbaV0gPSByYW5nZTtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCByYW5nZXMsIGRvYy5zZWwucHJpbUluZGV4KSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBSZXNldCB0aGUgc2VsZWN0aW9uIHRvIGEgc2luZ2xlIHJhbmdlLlxuICBmdW5jdGlvbiBzZXRTaW1wbGVTZWxlY3Rpb24oZG9jLCBhbmNob3IsIGhlYWQsIG9wdGlvbnMpIHtcbiAgICBzZXRTZWxlY3Rpb24oZG9jLCBzaW1wbGVTZWxlY3Rpb24oYW5jaG9yLCBoZWFkKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBHaXZlIGJlZm9yZVNlbGVjdGlvbkNoYW5nZSBoYW5kbGVycyBhIGNoYW5nZSB0byBpbmZsdWVuY2UgYVxuICAvLyBzZWxlY3Rpb24gdXBkYXRlLlxuICBmdW5jdGlvbiBmaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoZG9jLCBzZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgcmFuZ2VzOiBzZWwucmFuZ2VzLFxuICAgICAgdXBkYXRlOiBmdW5jdGlvbihyYW5nZXMpIHtcbiAgICAgICAgdGhpcy5yYW5nZXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyB0aGlzLnJhbmdlc1tpXSA9IG5ldyBSYW5nZShjbGlwUG9zKGRvYywgcmFuZ2VzW2ldLmFuY2hvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBvcyhkb2MsIHJhbmdlc1tpXS5oZWFkKSk7IH1cbiAgICAgIH0sXG4gICAgICBvcmlnaW46IG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW5cbiAgICB9O1xuICAgIHNpZ25hbChkb2MsIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGRvYywgb2JqKTtcbiAgICBpZiAoZG9jLmNtKSB7IHNpZ25hbChkb2MuY20sIFwiYmVmb3JlU2VsZWN0aW9uQ2hhbmdlXCIsIGRvYy5jbSwgb2JqKTsgfVxuICAgIGlmIChvYmoucmFuZ2VzICE9IHNlbC5yYW5nZXMpIHsgcmV0dXJuIG5vcm1hbGl6ZVNlbGVjdGlvbihkb2MuY20sIG9iai5yYW5nZXMsIG9iai5yYW5nZXMubGVuZ3RoIC0gMSkgfVxuICAgIGVsc2UgeyByZXR1cm4gc2VsIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvblJlcGxhY2VIaXN0b3J5KGRvYywgc2VsLCBvcHRpb25zKSB7XG4gICAgdmFyIGRvbmUgPSBkb2MuaGlzdG9yeS5kb25lLCBsYXN0ID0gbHN0KGRvbmUpO1xuICAgIGlmIChsYXN0ICYmIGxhc3QucmFuZ2VzKSB7XG4gICAgICBkb25lW2RvbmUubGVuZ3RoIC0gMV0gPSBzZWw7XG4gICAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBzZWwsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBhIG5ldyBzZWxlY3Rpb24uXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihkb2MsIHNlbCwgb3B0aW9ucykge1xuICAgIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucyk7XG4gICAgYWRkU2VsZWN0aW9uVG9IaXN0b3J5KGRvYywgZG9jLnNlbCwgZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOLCBvcHRpb25zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGlvbk5vVW5kbyhkb2MsIHNlbCwgb3B0aW9ucykge1xuICAgIGlmIChoYXNIYW5kbGVyKGRvYywgXCJiZWZvcmVTZWxlY3Rpb25DaGFuZ2VcIikgfHwgZG9jLmNtICYmIGhhc0hhbmRsZXIoZG9jLmNtLCBcImJlZm9yZVNlbGVjdGlvbkNoYW5nZVwiKSlcbiAgICAgIHsgc2VsID0gZmlsdGVyU2VsZWN0aW9uQ2hhbmdlKGRvYywgc2VsLCBvcHRpb25zKTsgfVxuXG4gICAgdmFyIGJpYXMgPSBvcHRpb25zICYmIG9wdGlvbnMuYmlhcyB8fFxuICAgICAgKGNtcChzZWwucHJpbWFyeSgpLmhlYWQsIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQpIDwgMCA/IC0xIDogMSk7XG4gICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBzZWwsIGJpYXMsIHRydWUpKTtcblxuICAgIGlmICghKG9wdGlvbnMgJiYgb3B0aW9ucy5zY3JvbGwgPT09IGZhbHNlKSAmJiBkb2MuY20pXG4gICAgICB7IGVuc3VyZUN1cnNvclZpc2libGUoZG9jLmNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBzZWwpIHtcbiAgICBpZiAoc2VsLmVxdWFscyhkb2Muc2VsKSkgeyByZXR1cm4gfVxuXG4gICAgZG9jLnNlbCA9IHNlbDtcblxuICAgIGlmIChkb2MuY20pIHtcbiAgICAgIGRvYy5jbS5jdXJPcC51cGRhdGVJbnB1dCA9IDE7XG4gICAgICBkb2MuY20uY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XG4gICAgICBzaWduYWxDdXJzb3JBY3Rpdml0eShkb2MuY20pO1xuICAgIH1cbiAgICBzaWduYWxMYXRlcihkb2MsIFwiY3Vyc29yQWN0aXZpdHlcIiwgZG9jKTtcbiAgfVxuXG4gIC8vIFZlcmlmeSB0aGF0IHRoZSBzZWxlY3Rpb24gZG9lcyBub3QgcGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljXG4gIC8vIG1hcmtlZCByYW5nZXMuXG4gIGZ1bmN0aW9uIHJlQ2hlY2tTZWxlY3Rpb24oZG9jKSB7XG4gICAgc2V0U2VsZWN0aW9uSW5uZXIoZG9jLCBza2lwQXRvbWljSW5TZWxlY3Rpb24oZG9jLCBkb2Muc2VsLCBudWxsLCBmYWxzZSkpO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgc2VsZWN0aW9uIHRoYXQgZG9lcyBub3QgcGFydGlhbGx5IHNlbGVjdCBhbnkgYXRvbWljXG4gIC8vIHJhbmdlcy5cbiAgZnVuY3Rpb24gc2tpcEF0b21pY0luU2VsZWN0aW9uKGRvYywgc2VsLCBiaWFzLCBtYXlDbGVhcikge1xuICAgIHZhciBvdXQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWwucmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldO1xuICAgICAgdmFyIG9sZCA9IHNlbC5yYW5nZXMubGVuZ3RoID09IGRvYy5zZWwucmFuZ2VzLmxlbmd0aCAmJiBkb2Muc2VsLnJhbmdlc1tpXTtcbiAgICAgIHZhciBuZXdBbmNob3IgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuYW5jaG9yLCBvbGQgJiYgb2xkLmFuY2hvciwgYmlhcywgbWF5Q2xlYXIpO1xuICAgICAgdmFyIG5ld0hlYWQgPSBza2lwQXRvbWljKGRvYywgcmFuZ2UuaGVhZCwgb2xkICYmIG9sZC5oZWFkLCBiaWFzLCBtYXlDbGVhcik7XG4gICAgICBpZiAob3V0IHx8IG5ld0FuY2hvciAhPSByYW5nZS5hbmNob3IgfHwgbmV3SGVhZCAhPSByYW5nZS5oZWFkKSB7XG4gICAgICAgIGlmICghb3V0KSB7IG91dCA9IHNlbC5yYW5nZXMuc2xpY2UoMCwgaSk7IH1cbiAgICAgICAgb3V0W2ldID0gbmV3IFJhbmdlKG5ld0FuY2hvciwgbmV3SGVhZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgPyBub3JtYWxpemVTZWxlY3Rpb24oZG9jLmNtLCBvdXQsIHNlbC5wcmltSW5kZXgpIDogc2VsXG4gIH1cblxuICBmdW5jdGlvbiBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgZGlyLCBtYXlDbGVhcikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTtcbiAgICBpZiAobGluZS5tYXJrZWRTcGFucykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUubWFya2VkU3BhbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBzcCA9IGxpbmUubWFya2VkU3BhbnNbaV0sIG0gPSBzcC5tYXJrZXI7XG5cbiAgICAgIC8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgcHJldmVudCB0aGUgY3Vyc29yIGJlaW5nIHBsYWNlZCB0byB0aGUgbGVmdC9yaWdodCBvZiBhbiBhdG9taWMgbWFya2VyXG4gICAgICAvLyBIaXN0b3JpY2FsbHkgdGhpcyB3YXMgZGV0ZXJtaW5lZCB1c2luZyB0aGUgaW5jbHVzaXZlTGVmdC9SaWdodCBvcHRpb24sIGJ1dCB0aGUgbmV3IHdheSB0byBjb250cm9sIGl0XG4gICAgICAvLyBpcyB3aXRoIHNlbGVjdExlZnQvUmlnaHRcbiAgICAgIHZhciBwcmV2ZW50Q3Vyc29yTGVmdCA9IChcInNlbGVjdExlZnRcIiBpbiBtKSA/ICFtLnNlbGVjdExlZnQgOiBtLmluY2x1c2l2ZUxlZnQ7XG4gICAgICB2YXIgcHJldmVudEN1cnNvclJpZ2h0ID0gKFwic2VsZWN0UmlnaHRcIiBpbiBtKSA/ICFtLnNlbGVjdFJpZ2h0IDogbS5pbmNsdXNpdmVSaWdodDtcblxuICAgICAgaWYgKChzcC5mcm9tID09IG51bGwgfHwgKHByZXZlbnRDdXJzb3JMZWZ0ID8gc3AuZnJvbSA8PSBwb3MuY2ggOiBzcC5mcm9tIDwgcG9zLmNoKSkgJiZcbiAgICAgICAgICAoc3AudG8gPT0gbnVsbCB8fCAocHJldmVudEN1cnNvclJpZ2h0ID8gc3AudG8gPj0gcG9zLmNoIDogc3AudG8gPiBwb3MuY2gpKSkge1xuICAgICAgICBpZiAobWF5Q2xlYXIpIHtcbiAgICAgICAgICBzaWduYWwobSwgXCJiZWZvcmVDdXJzb3JFbnRlclwiKTtcbiAgICAgICAgICBpZiAobS5leHBsaWNpdGx5Q2xlYXJlZCkge1xuICAgICAgICAgICAgaWYgKCFsaW5lLm1hcmtlZFNwYW5zKSB7IGJyZWFrIH1cbiAgICAgICAgICAgIGVsc2Ugey0taTsgY29udGludWV9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbS5hdG9taWMpIHsgY29udGludWUgfVxuXG4gICAgICAgIGlmIChvbGRQb3MpIHtcbiAgICAgICAgICB2YXIgbmVhciA9IG0uZmluZChkaXIgPCAwID8gMSA6IC0xKSwgZGlmZiA9ICh2b2lkIDApO1xuICAgICAgICAgIGlmIChkaXIgPCAwID8gcHJldmVudEN1cnNvclJpZ2h0IDogcHJldmVudEN1cnNvckxlZnQpXG4gICAgICAgICAgICB7IG5lYXIgPSBtb3ZlUG9zKGRvYywgbmVhciwgLWRpciwgbmVhciAmJiBuZWFyLmxpbmUgPT0gcG9zLmxpbmUgPyBsaW5lIDogbnVsbCk7IH1cbiAgICAgICAgICBpZiAobmVhciAmJiBuZWFyLmxpbmUgPT0gcG9zLmxpbmUgJiYgKGRpZmYgPSBjbXAobmVhciwgb2xkUG9zKSkgJiYgKGRpciA8IDAgPyBkaWZmIDwgMCA6IGRpZmYgPiAwKSlcbiAgICAgICAgICAgIHsgcmV0dXJuIHNraXBBdG9taWNJbm5lcihkb2MsIG5lYXIsIHBvcywgZGlyLCBtYXlDbGVhcikgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZhciA9IG0uZmluZChkaXIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgaWYgKGRpciA8IDAgPyBwcmV2ZW50Q3Vyc29yTGVmdCA6IHByZXZlbnRDdXJzb3JSaWdodClcbiAgICAgICAgICB7IGZhciA9IG1vdmVQb3MoZG9jLCBmYXIsIGRpciwgZmFyLmxpbmUgPT0gcG9zLmxpbmUgPyBsaW5lIDogbnVsbCk7IH1cbiAgICAgICAgcmV0dXJuIGZhciA/IHNraXBBdG9taWNJbm5lcihkb2MsIGZhciwgcG9zLCBkaXIsIG1heUNsZWFyKSA6IG51bGxcbiAgICAgIH1cbiAgICB9IH1cbiAgICByZXR1cm4gcG9zXG4gIH1cblxuICAvLyBFbnN1cmUgYSBnaXZlbiBwb3NpdGlvbiBpcyBub3QgaW5zaWRlIGFuIGF0b21pYyByYW5nZS5cbiAgZnVuY3Rpb24gc2tpcEF0b21pYyhkb2MsIHBvcywgb2xkUG9zLCBiaWFzLCBtYXlDbGVhcikge1xuICAgIHZhciBkaXIgPSBiaWFzIHx8IDE7XG4gICAgdmFyIGZvdW5kID0gc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgbWF5Q2xlYXIpIHx8XG4gICAgICAgICghbWF5Q2xlYXIgJiYgc2tpcEF0b21pY0lubmVyKGRvYywgcG9zLCBvbGRQb3MsIGRpciwgdHJ1ZSkpIHx8XG4gICAgICAgIHNraXBBdG9taWNJbm5lcihkb2MsIHBvcywgb2xkUG9zLCAtZGlyLCBtYXlDbGVhcikgfHxcbiAgICAgICAgKCFtYXlDbGVhciAmJiBza2lwQXRvbWljSW5uZXIoZG9jLCBwb3MsIG9sZFBvcywgLWRpciwgdHJ1ZSkpO1xuICAgIGlmICghZm91bmQpIHtcbiAgICAgIGRvYy5jYW50RWRpdCA9IHRydWU7XG4gICAgICByZXR1cm4gUG9zKGRvYy5maXJzdCwgMClcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kXG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlUG9zKGRvYywgcG9zLCBkaXIsIGxpbmUpIHtcbiAgICBpZiAoZGlyIDwgMCAmJiBwb3MuY2ggPT0gMCkge1xuICAgICAgaWYgKHBvcy5saW5lID4gZG9jLmZpcnN0KSB7IHJldHVybiBjbGlwUG9zKGRvYywgUG9zKHBvcy5saW5lIC0gMSkpIH1cbiAgICAgIGVsc2UgeyByZXR1cm4gbnVsbCB9XG4gICAgfSBlbHNlIGlmIChkaXIgPiAwICYmIHBvcy5jaCA9PSAobGluZSB8fCBnZXRMaW5lKGRvYywgcG9zLmxpbmUpKS50ZXh0Lmxlbmd0aCkge1xuICAgICAgaWYgKHBvcy5saW5lIDwgZG9jLmZpcnN0ICsgZG9jLnNpemUgLSAxKSB7IHJldHVybiBQb3MocG9zLmxpbmUgKyAxLCAwKSB9XG4gICAgICBlbHNlIHsgcmV0dXJuIG51bGwgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFBvcyhwb3MubGluZSwgcG9zLmNoICsgZGlyKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdEFsbChjbSkge1xuICAgIGNtLnNldFNlbGVjdGlvbihQb3MoY20uZmlyc3RMaW5lKCksIDApLCBQb3MoY20ubGFzdExpbmUoKSksIHNlbF9kb250U2Nyb2xsKTtcbiAgfVxuXG4gIC8vIFVQREFUSU5HXG5cbiAgLy8gQWxsb3cgXCJiZWZvcmVDaGFuZ2VcIiBldmVudCBoYW5kbGVycyB0byBpbmZsdWVuY2UgYSBjaGFuZ2VcbiAgZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKGRvYywgY2hhbmdlLCB1cGRhdGUpIHtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgZnJvbTogY2hhbmdlLmZyb20sXG4gICAgICB0bzogY2hhbmdlLnRvLFxuICAgICAgdGV4dDogY2hhbmdlLnRleHQsXG4gICAgICBvcmlnaW46IGNoYW5nZS5vcmlnaW4sXG4gICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9iai5jYW5jZWxlZCA9IHRydWU7IH1cbiAgICB9O1xuICAgIGlmICh1cGRhdGUpIHsgb2JqLnVwZGF0ZSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgdGV4dCwgb3JpZ2luKSB7XG4gICAgICBpZiAoZnJvbSkgeyBvYmouZnJvbSA9IGNsaXBQb3MoZG9jLCBmcm9tKTsgfVxuICAgICAgaWYgKHRvKSB7IG9iai50byA9IGNsaXBQb3MoZG9jLCB0byk7IH1cbiAgICAgIGlmICh0ZXh0KSB7IG9iai50ZXh0ID0gdGV4dDsgfVxuICAgICAgaWYgKG9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7IG9iai5vcmlnaW4gPSBvcmlnaW47IH1cbiAgICB9OyB9XG4gICAgc2lnbmFsKGRvYywgXCJiZWZvcmVDaGFuZ2VcIiwgZG9jLCBvYmopO1xuICAgIGlmIChkb2MuY20pIHsgc2lnbmFsKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIiwgZG9jLmNtLCBvYmopOyB9XG5cbiAgICBpZiAob2JqLmNhbmNlbGVkKSB7XG4gICAgICBpZiAoZG9jLmNtKSB7IGRvYy5jbS5jdXJPcC51cGRhdGVJbnB1dCA9IDI7IH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiB7ZnJvbTogb2JqLmZyb20sIHRvOiBvYmoudG8sIHRleHQ6IG9iai50ZXh0LCBvcmlnaW46IG9iai5vcmlnaW59XG4gIH1cblxuICAvLyBBcHBseSBhIGNoYW5nZSB0byBhIGRvY3VtZW50LCBhbmQgYWRkIGl0IHRvIHRoZSBkb2N1bWVudCdzXG4gIC8vIGhpc3RvcnksIGFuZCBwcm9wYWdhdGluZyBpdCB0byBhbGwgbGlua2VkIGRvY3VtZW50cy5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZShkb2MsIGNoYW5nZSwgaWdub3JlUmVhZE9ubHkpIHtcbiAgICBpZiAoZG9jLmNtKSB7XG4gICAgICBpZiAoIWRvYy5jbS5jdXJPcCkgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFrZUNoYW5nZSkoZG9jLCBjaGFuZ2UsIGlnbm9yZVJlYWRPbmx5KSB9XG4gICAgICBpZiAoZG9jLmNtLnN0YXRlLnN1cHByZXNzRWRpdHMpIHsgcmV0dXJuIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIikpIHtcbiAgICAgIGNoYW5nZSA9IGZpbHRlckNoYW5nZShkb2MsIGNoYW5nZSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNoYW5nZSkgeyByZXR1cm4gfVxuICAgIH1cblxuICAgIC8vIFBvc3NpYmx5IHNwbGl0IG9yIHN1cHByZXNzIHRoZSB1cGRhdGUgYmFzZWQgb24gdGhlIHByZXNlbmNlXG4gICAgLy8gb2YgcmVhZC1vbmx5IHNwYW5zIGluIGl0cyByYW5nZS5cbiAgICB2YXIgc3BsaXQgPSBzYXdSZWFkT25seVNwYW5zICYmICFpZ25vcmVSZWFkT25seSAmJiByZW1vdmVSZWFkT25seVJhbmdlcyhkb2MsIGNoYW5nZS5mcm9tLCBjaGFuZ2UudG8pO1xuICAgIGlmIChzcGxpdCkge1xuICAgICAgZm9yICh2YXIgaSA9IHNwbGl0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKVxuICAgICAgICB7IG1ha2VDaGFuZ2VJbm5lcihkb2MsIHtmcm9tOiBzcGxpdFtpXS5mcm9tLCB0bzogc3BsaXRbaV0udG8sIHRleHQ6IGkgPyBbXCJcIl0gOiBjaGFuZ2UudGV4dCwgb3JpZ2luOiBjaGFuZ2Uub3JpZ2lufSk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWFrZUNoYW5nZUlubmVyKGRvYywgY2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlQ2hhbmdlSW5uZXIoZG9jLCBjaGFuZ2UpIHtcbiAgICBpZiAoY2hhbmdlLnRleHQubGVuZ3RoID09IDEgJiYgY2hhbmdlLnRleHRbMF0gPT0gXCJcIiAmJiBjbXAoY2hhbmdlLmZyb20sIGNoYW5nZS50bykgPT0gMCkgeyByZXR1cm4gfVxuICAgIHZhciBzZWxBZnRlciA9IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSk7XG4gICAgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywgY2hhbmdlLCBzZWxBZnRlciwgZG9jLmNtID8gZG9jLmNtLmN1ck9wLmlkIDogTmFOKTtcblxuICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIHNlbEFmdGVyLCBzdHJldGNoU3BhbnNPdmVyQ2hhbmdlKGRvYywgY2hhbmdlKSk7XG4gICAgdmFyIHJlYmFzZWQgPSBbXTtcblxuICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jLCBzaGFyZWRIaXN0KSB7XG4gICAgICBpZiAoIXNoYXJlZEhpc3QgJiYgaW5kZXhPZihyZWJhc2VkLCBkb2MuaGlzdG9yeSkgPT0gLTEpIHtcbiAgICAgICAgcmViYXNlSGlzdChkb2MuaGlzdG9yeSwgY2hhbmdlKTtcbiAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTtcbiAgICAgIH1cbiAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIG51bGwsIHN0cmV0Y2hTcGFuc092ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldmVydCBhIGNoYW5nZSBzdG9yZWQgaW4gYSBkb2N1bWVudCdzIGhpc3RvcnkuXG4gIGZ1bmN0aW9uIG1ha2VDaGFuZ2VGcm9tSGlzdG9yeShkb2MsIHR5cGUsIGFsbG93U2VsZWN0aW9uT25seSkge1xuICAgIHZhciBzdXBwcmVzcyA9IGRvYy5jbSAmJiBkb2MuY20uc3RhdGUuc3VwcHJlc3NFZGl0cztcbiAgICBpZiAoc3VwcHJlc3MgJiYgIWFsbG93U2VsZWN0aW9uT25seSkgeyByZXR1cm4gfVxuXG4gICAgdmFyIGhpc3QgPSBkb2MuaGlzdG9yeSwgZXZlbnQsIHNlbEFmdGVyID0gZG9jLnNlbDtcbiAgICB2YXIgc291cmNlID0gdHlwZSA9PSBcInVuZG9cIiA/IGhpc3QuZG9uZSA6IGhpc3QudW5kb25lLCBkZXN0ID0gdHlwZSA9PSBcInVuZG9cIiA/IGhpc3QudW5kb25lIDogaGlzdC5kb25lO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSB1c2VhYmxlIGV2ZW50IChzbyB0aGF0IGN0cmwteiB3b24ndFxuICAgIC8vIG5lZWRsZXNzbHkgY2xlYXIgc2VsZWN0aW9uIGV2ZW50cylcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV2ZW50ID0gc291cmNlW2ldO1xuICAgICAgaWYgKGFsbG93U2VsZWN0aW9uT25seSA/IGV2ZW50LnJhbmdlcyAmJiAhZXZlbnQuZXF1YWxzKGRvYy5zZWwpIDogIWV2ZW50LnJhbmdlcylcbiAgICAgICAgeyBicmVhayB9XG4gICAgfVxuICAgIGlmIChpID09IHNvdXJjZS5sZW5ndGgpIHsgcmV0dXJuIH1cbiAgICBoaXN0Lmxhc3RPcmlnaW4gPSBoaXN0Lmxhc3RTZWxPcmlnaW4gPSBudWxsO1xuXG4gICAgZm9yICg7Oykge1xuICAgICAgZXZlbnQgPSBzb3VyY2UucG9wKCk7XG4gICAgICBpZiAoZXZlbnQucmFuZ2VzKSB7XG4gICAgICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3RvcnkoZXZlbnQsIGRlc3QpO1xuICAgICAgICBpZiAoYWxsb3dTZWxlY3Rpb25Pbmx5ICYmICFldmVudC5lcXVhbHMoZG9jLnNlbCkpIHtcbiAgICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBldmVudCwge2NsZWFyUmVkbzogZmFsc2V9KTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBzZWxBZnRlciA9IGV2ZW50O1xuICAgICAgfSBlbHNlIGlmIChzdXBwcmVzcykge1xuICAgICAgICBzb3VyY2UucHVzaChldmVudCk7XG4gICAgICAgIHJldHVyblxuICAgICAgfSBlbHNlIHsgYnJlYWsgfVxuICAgIH1cblxuICAgIC8vIEJ1aWxkIHVwIGEgcmV2ZXJzZSBjaGFuZ2Ugb2JqZWN0IHRvIGFkZCB0byB0aGUgb3Bwb3NpdGUgaGlzdG9yeVxuICAgIC8vIHN0YWNrIChyZWRvIHdoZW4gdW5kb2luZywgYW5kIHZpY2UgdmVyc2EpLlxuICAgIHZhciBhbnRpQ2hhbmdlcyA9IFtdO1xuICAgIHB1c2hTZWxlY3Rpb25Ub0hpc3Rvcnkoc2VsQWZ0ZXIsIGRlc3QpO1xuICAgIGRlc3QucHVzaCh7Y2hhbmdlczogYW50aUNoYW5nZXMsIGdlbmVyYXRpb246IGhpc3QuZ2VuZXJhdGlvbn0pO1xuICAgIGhpc3QuZ2VuZXJhdGlvbiA9IGV2ZW50LmdlbmVyYXRpb24gfHwgKytoaXN0Lm1heEdlbmVyYXRpb247XG5cbiAgICB2YXIgZmlsdGVyID0gaGFzSGFuZGxlcihkb2MsIFwiYmVmb3JlQ2hhbmdlXCIpIHx8IGRvYy5jbSAmJiBoYXNIYW5kbGVyKGRvYy5jbSwgXCJiZWZvcmVDaGFuZ2VcIik7XG5cbiAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICggaSApIHtcbiAgICAgIHZhciBjaGFuZ2UgPSBldmVudC5jaGFuZ2VzW2ldO1xuICAgICAgY2hhbmdlLm9yaWdpbiA9IHR5cGU7XG4gICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXJDaGFuZ2UoZG9jLCBjaGFuZ2UsIGZhbHNlKSkge1xuICAgICAgICBzb3VyY2UubGVuZ3RoID0gMDtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG5cbiAgICAgIGFudGlDaGFuZ2VzLnB1c2goaGlzdG9yeUNoYW5nZUZyb21DaGFuZ2UoZG9jLCBjaGFuZ2UpKTtcblxuICAgICAgdmFyIGFmdGVyID0gaSA/IGNvbXB1dGVTZWxBZnRlckNoYW5nZShkb2MsIGNoYW5nZSkgOiBsc3Qoc291cmNlKTtcbiAgICAgIG1ha2VDaGFuZ2VTaW5nbGVEb2MoZG9jLCBjaGFuZ2UsIGFmdGVyLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7XG4gICAgICBpZiAoIWkgJiYgZG9jLmNtKSB7IGRvYy5jbS5zY3JvbGxJbnRvVmlldyh7ZnJvbTogY2hhbmdlLmZyb20sIHRvOiBjaGFuZ2VFbmQoY2hhbmdlKX0pOyB9XG4gICAgICB2YXIgcmViYXNlZCA9IFtdO1xuXG4gICAgICAvLyBQcm9wYWdhdGUgdG8gdGhlIGxpbmtlZCBkb2N1bWVudHNcbiAgICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jLCBzaGFyZWRIaXN0KSB7XG4gICAgICAgIGlmICghc2hhcmVkSGlzdCAmJiBpbmRleE9mKHJlYmFzZWQsIGRvYy5oaXN0b3J5KSA9PSAtMSkge1xuICAgICAgICAgIHJlYmFzZUhpc3QoZG9jLmhpc3RvcnksIGNoYW5nZSk7XG4gICAgICAgICAgcmViYXNlZC5wdXNoKGRvYy5oaXN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBudWxsLCBtZXJnZU9sZFNwYW5zKGRvYywgY2hhbmdlKSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSQxID0gZXZlbnQuY2hhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgLS1pJDEpIHtcbiAgICAgIHZhciByZXR1cm5lZCA9IGxvb3AoIGkkMSApO1xuXG4gICAgICBpZiAoIHJldHVybmVkICkgcmV0dXJuIHJldHVybmVkLnY7XG4gICAgfVxuICB9XG5cbiAgLy8gU3ViLXZpZXdzIG5lZWQgdGhlaXIgbGluZSBudW1iZXJzIHNoaWZ0ZWQgd2hlbiB0ZXh0IGlzIGFkZGVkXG4gIC8vIGFib3ZlIG9yIGJlbG93IHRoZW0gaW4gdGhlIHBhcmVudCBkb2N1bWVudC5cbiAgZnVuY3Rpb24gc2hpZnREb2MoZG9jLCBkaXN0YW5jZSkge1xuICAgIGlmIChkaXN0YW5jZSA9PSAwKSB7IHJldHVybiB9XG4gICAgZG9jLmZpcnN0ICs9IGRpc3RhbmNlO1xuICAgIGRvYy5zZWwgPSBuZXcgU2VsZWN0aW9uKG1hcChkb2Muc2VsLnJhbmdlcywgZnVuY3Rpb24gKHJhbmdlKSB7IHJldHVybiBuZXcgUmFuZ2UoXG4gICAgICBQb3MocmFuZ2UuYW5jaG9yLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuYW5jaG9yLmNoKSxcbiAgICAgIFBvcyhyYW5nZS5oZWFkLmxpbmUgKyBkaXN0YW5jZSwgcmFuZ2UuaGVhZC5jaClcbiAgICApOyB9KSwgZG9jLnNlbC5wcmltSW5kZXgpO1xuICAgIGlmIChkb2MuY20pIHtcbiAgICAgIHJlZ0NoYW5nZShkb2MuY20sIGRvYy5maXJzdCwgZG9jLmZpcnN0IC0gZGlzdGFuY2UsIGRpc3RhbmNlKTtcbiAgICAgIGZvciAodmFyIGQgPSBkb2MuY20uZGlzcGxheSwgbCA9IGQudmlld0Zyb207IGwgPCBkLnZpZXdUbzsgbCsrKVxuICAgICAgICB7IHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBsLCBcImd1dHRlclwiKTsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIE1vcmUgbG93ZXItbGV2ZWwgY2hhbmdlIGZ1bmN0aW9uLCBoYW5kbGluZyBvbmx5IGEgc2luZ2xlIGRvY3VtZW50XG4gIC8vIChub3QgbGlua2VkIG9uZXMpLlxuICBmdW5jdGlvbiBtYWtlQ2hhbmdlU2luZ2xlRG9jKGRvYywgY2hhbmdlLCBzZWxBZnRlciwgc3BhbnMpIHtcbiAgICBpZiAoZG9jLmNtICYmICFkb2MuY20uY3VyT3ApXG4gICAgICB7IHJldHVybiBvcGVyYXRpb24oZG9jLmNtLCBtYWtlQ2hhbmdlU2luZ2xlRG9jKShkb2MsIGNoYW5nZSwgc2VsQWZ0ZXIsIHNwYW5zKSB9XG5cbiAgICBpZiAoY2hhbmdlLnRvLmxpbmUgPCBkb2MuZmlyc3QpIHtcbiAgICAgIHNoaWZ0RG9jKGRvYywgY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChjaGFuZ2UudG8ubGluZSAtIGNoYW5nZS5mcm9tLmxpbmUpKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA+IGRvYy5sYXN0TGluZSgpKSB7IHJldHVybiB9XG5cbiAgICAvLyBDbGlwIHRoZSBjaGFuZ2UgdG8gdGhlIHNpemUgb2YgdGhpcyBkb2NcbiAgICBpZiAoY2hhbmdlLmZyb20ubGluZSA8IGRvYy5maXJzdCkge1xuICAgICAgdmFyIHNoaWZ0ID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gMSAtIChkb2MuZmlyc3QgLSBjaGFuZ2UuZnJvbS5saW5lKTtcbiAgICAgIHNoaWZ0RG9jKGRvYywgc2hpZnQpO1xuICAgICAgY2hhbmdlID0ge2Zyb206IFBvcyhkb2MuZmlyc3QsIDApLCB0bzogUG9zKGNoYW5nZS50by5saW5lICsgc2hpZnQsIGNoYW5nZS50by5jaCksXG4gICAgICAgICAgICAgICAgdGV4dDogW2xzdChjaGFuZ2UudGV4dCldLCBvcmlnaW46IGNoYW5nZS5vcmlnaW59O1xuICAgIH1cbiAgICB2YXIgbGFzdCA9IGRvYy5sYXN0TGluZSgpO1xuICAgIGlmIChjaGFuZ2UudG8ubGluZSA+IGxhc3QpIHtcbiAgICAgIGNoYW5nZSA9IHtmcm9tOiBjaGFuZ2UuZnJvbSwgdG86IFBvcyhsYXN0LCBnZXRMaW5lKGRvYywgbGFzdCkudGV4dC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIHRleHQ6IFtjaGFuZ2UudGV4dFswXV0sIG9yaWdpbjogY2hhbmdlLm9yaWdpbn07XG4gICAgfVxuXG4gICAgY2hhbmdlLnJlbW92ZWQgPSBnZXRCZXR3ZWVuKGRvYywgY2hhbmdlLmZyb20sIGNoYW5nZS50byk7XG5cbiAgICBpZiAoIXNlbEFmdGVyKSB7IHNlbEFmdGVyID0gY29tcHV0ZVNlbEFmdGVyQ2hhbmdlKGRvYywgY2hhbmdlKTsgfVxuICAgIGlmIChkb2MuY20pIHsgbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGRvYy5jbSwgY2hhbmdlLCBzcGFucyk7IH1cbiAgICBlbHNlIHsgdXBkYXRlRG9jKGRvYywgY2hhbmdlLCBzcGFucyk7IH1cbiAgICBzZXRTZWxlY3Rpb25Ob1VuZG8oZG9jLCBzZWxBZnRlciwgc2VsX2RvbnRTY3JvbGwpO1xuXG4gICAgaWYgKGRvYy5jYW50RWRpdCAmJiBza2lwQXRvbWljKGRvYywgUG9zKGRvYy5maXJzdExpbmUoKSwgMCkpKVxuICAgICAgeyBkb2MuY2FudEVkaXQgPSBmYWxzZTsgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSBpbnRlcmFjdGlvbiBvZiBhIGNoYW5nZSB0byBhIGRvY3VtZW50IHdpdGggdGhlIGVkaXRvclxuICAvLyB0aGF0IHRoaXMgZG9jdW1lbnQgaXMgcGFydCBvZi5cbiAgZnVuY3Rpb24gbWFrZUNoYW5nZVNpbmdsZURvY0luRWRpdG9yKGNtLCBjaGFuZ2UsIHNwYW5zKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgZGlzcGxheSA9IGNtLmRpc3BsYXksIGZyb20gPSBjaGFuZ2UuZnJvbSwgdG8gPSBjaGFuZ2UudG87XG5cbiAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIGNoZWNrV2lkdGhTdGFydCA9IGZyb20ubGluZTtcbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBjaGVja1dpZHRoU3RhcnQgPSBsaW5lTm8odmlzdWFsTGluZShnZXRMaW5lKGRvYywgZnJvbS5saW5lKSkpO1xuICAgICAgZG9jLml0ZXIoY2hlY2tXaWR0aFN0YXJ0LCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgaWYgKGxpbmUgPT0gZGlzcGxheS5tYXhMaW5lKSB7XG4gICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlbC5jb250YWlucyhjaGFuZ2UuZnJvbSwgY2hhbmdlLnRvKSA+IC0xKVxuICAgICAgeyBzaWduYWxDdXJzb3JBY3Rpdml0eShjbSk7IH1cblxuICAgIHVwZGF0ZURvYyhkb2MsIGNoYW5nZSwgc3BhbnMsIGVzdGltYXRlSGVpZ2h0KGNtKSk7XG5cbiAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7XG4gICAgICBkb2MuaXRlcihjaGVja1dpZHRoU3RhcnQsIGZyb20ubGluZSArIGNoYW5nZS50ZXh0Lmxlbmd0aCwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIGxlbiA9IGxpbmVMZW5ndGgobGluZSk7XG4gICAgICAgIGlmIChsZW4gPiBkaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgICBkaXNwbGF5Lm1heExpbmUgPSBsaW5lO1xuICAgICAgICAgIGRpc3BsYXkubWF4TGluZUxlbmd0aCA9IGxlbjtcbiAgICAgICAgICBkaXNwbGF5Lm1heExpbmVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAocmVjb21wdXRlTWF4TGVuZ3RoKSB7IGNtLmN1ck9wLnVwZGF0ZU1heExpbmUgPSB0cnVlOyB9XG4gICAgfVxuXG4gICAgcmV0cmVhdEZyb250aWVyKGRvYywgZnJvbS5saW5lKTtcbiAgICBzdGFydFdvcmtlcihjbSwgNDAwKTtcblxuICAgIHZhciBsZW5kaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTtcbiAgICAvLyBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbmVzIGNoYW5nZWQsIGZvciB1cGRhdGluZyB0aGUgZGlzcGxheVxuICAgIGlmIChjaGFuZ2UuZnVsbClcbiAgICAgIHsgcmVnQ2hhbmdlKGNtKTsgfVxuICAgIGVsc2UgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGNoYW5nZS50ZXh0Lmxlbmd0aCA9PSAxICYmICFpc1dob2xlTGluZVVwZGF0ZShjbS5kb2MsIGNoYW5nZSkpXG4gICAgICB7IHJlZ0xpbmVDaGFuZ2UoY20sIGZyb20ubGluZSwgXCJ0ZXh0XCIpOyB9XG4gICAgZWxzZVxuICAgICAgeyByZWdDaGFuZ2UoY20sIGZyb20ubGluZSwgdG8ubGluZSArIDEsIGxlbmRpZmYpOyB9XG5cbiAgICB2YXIgY2hhbmdlc0hhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCBcImNoYW5nZXNcIiksIGNoYW5nZUhhbmRsZXIgPSBoYXNIYW5kbGVyKGNtLCBcImNoYW5nZVwiKTtcbiAgICBpZiAoY2hhbmdlSGFuZGxlciB8fCBjaGFuZ2VzSGFuZGxlcikge1xuICAgICAgdmFyIG9iaiA9IHtcbiAgICAgICAgZnJvbTogZnJvbSwgdG86IHRvLFxuICAgICAgICB0ZXh0OiBjaGFuZ2UudGV4dCxcbiAgICAgICAgcmVtb3ZlZDogY2hhbmdlLnJlbW92ZWQsXG4gICAgICAgIG9yaWdpbjogY2hhbmdlLm9yaWdpblxuICAgICAgfTtcbiAgICAgIGlmIChjaGFuZ2VIYW5kbGVyKSB7IHNpZ25hbExhdGVyKGNtLCBcImNoYW5nZVwiLCBjbSwgb2JqKTsgfVxuICAgICAgaWYgKGNoYW5nZXNIYW5kbGVyKSB7IChjbS5jdXJPcC5jaGFuZ2VPYmpzIHx8IChjbS5jdXJPcC5jaGFuZ2VPYmpzID0gW10pKS5wdXNoKG9iaik7IH1cbiAgICB9XG4gICAgY20uZGlzcGxheS5zZWxGb3JDb250ZXh0TWVudSA9IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoZG9jLCBjb2RlLCBmcm9tLCB0bywgb3JpZ2luKSB7XG4gICAgdmFyIGFzc2lnbjtcblxuICAgIGlmICghdG8pIHsgdG8gPSBmcm9tOyB9XG4gICAgaWYgKGNtcCh0bywgZnJvbSkgPCAwKSB7IChhc3NpZ24gPSBbdG8sIGZyb21dLCBmcm9tID0gYXNzaWduWzBdLCB0byA9IGFzc2lnblsxXSk7IH1cbiAgICBpZiAodHlwZW9mIGNvZGUgPT0gXCJzdHJpbmdcIikgeyBjb2RlID0gZG9jLnNwbGl0TGluZXMoY29kZSk7IH1cbiAgICBtYWtlQ2hhbmdlKGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogY29kZSwgb3JpZ2luOiBvcmlnaW59KTtcbiAgfVxuXG4gIC8vIFJlYmFzaW5nL3Jlc2V0dGluZyBoaXN0b3J5IHRvIGRlYWwgd2l0aCBleHRlcm5hbGx5LXNvdXJjZWQgY2hhbmdlc1xuXG4gIGZ1bmN0aW9uIHJlYmFzZUhpc3RTZWxTaW5nbGUocG9zLCBmcm9tLCB0bywgZGlmZikge1xuICAgIGlmICh0byA8IHBvcy5saW5lKSB7XG4gICAgICBwb3MubGluZSArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAoZnJvbSA8IHBvcy5saW5lKSB7XG4gICAgICBwb3MubGluZSA9IGZyb207XG4gICAgICBwb3MuY2ggPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRyaWVzIHRvIHJlYmFzZSBhbiBhcnJheSBvZiBoaXN0b3J5IGV2ZW50cyBnaXZlbiBhIGNoYW5nZSBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIElmIHRoZSBjaGFuZ2UgdG91Y2hlcyB0aGUgc2FtZSBsaW5lcyBhcyB0aGUgZXZlbnQsIHRoZVxuICAvLyBldmVudCwgYW5kIGV2ZXJ5dGhpbmcgJ2JlaGluZCcgaXQsIGlzIGRpc2NhcmRlZC4gSWYgdGhlIGNoYW5nZSBpc1xuICAvLyBiZWZvcmUgdGhlIGV2ZW50LCB0aGUgZXZlbnQncyBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQuIFVzZXMgYVxuICAvLyBjb3B5LW9uLXdyaXRlIHNjaGVtZSBmb3IgdGhlIHBvc2l0aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvXG4gIC8vIHJlYWxsb2NhdGUgdGhlbSBhbGwgb24gZXZlcnkgcmViYXNlLCBidXQgYWxzbyBhdm9pZCBwcm9ibGVtcyB3aXRoXG4gIC8vIHNoYXJlZCBwb3NpdGlvbiBvYmplY3RzIGJlaW5nIHVuc2FmZWx5IHVwZGF0ZWQuXG4gIGZ1bmN0aW9uIHJlYmFzZUhpc3RBcnJheShhcnJheSwgZnJvbSwgdG8sIGRpZmYpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgc3ViID0gYXJyYXlbaV0sIG9rID0gdHJ1ZTtcbiAgICAgIGlmIChzdWIucmFuZ2VzKSB7XG4gICAgICAgIGlmICghc3ViLmNvcGllZCkgeyBzdWIgPSBhcnJheVtpXSA9IHN1Yi5kZWVwQ29weSgpOyBzdWIuY29waWVkID0gdHJ1ZTsgfVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1Yi5yYW5nZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICByZWJhc2VIaXN0U2VsU2luZ2xlKHN1Yi5yYW5nZXNbal0uYW5jaG9yLCBmcm9tLCB0bywgZGlmZik7XG4gICAgICAgICAgcmViYXNlSGlzdFNlbFNpbmdsZShzdWIucmFuZ2VzW2pdLmhlYWQsIGZyb20sIHRvLCBkaWZmKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaiQxID0gMDsgaiQxIDwgc3ViLmNoYW5nZXMubGVuZ3RoOyArK2okMSkge1xuICAgICAgICB2YXIgY3VyID0gc3ViLmNoYW5nZXNbaiQxXTtcbiAgICAgICAgaWYgKHRvIDwgY3VyLmZyb20ubGluZSkge1xuICAgICAgICAgIGN1ci5mcm9tID0gUG9zKGN1ci5mcm9tLmxpbmUgKyBkaWZmLCBjdXIuZnJvbS5jaCk7XG4gICAgICAgICAgY3VyLnRvID0gUG9zKGN1ci50by5saW5lICsgZGlmZiwgY3VyLnRvLmNoKTtcbiAgICAgICAgfSBlbHNlIGlmIChmcm9tIDw9IGN1ci50by5saW5lKSB7XG4gICAgICAgICAgb2sgPSBmYWxzZTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGFycmF5LnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgIGkgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYmFzZUhpc3QoaGlzdCwgY2hhbmdlKSB7XG4gICAgdmFyIGZyb20gPSBjaGFuZ2UuZnJvbS5saW5lLCB0byA9IGNoYW5nZS50by5saW5lLCBkaWZmID0gY2hhbmdlLnRleHQubGVuZ3RoIC0gKHRvIC0gZnJvbSkgLSAxO1xuICAgIHJlYmFzZUhpc3RBcnJheShoaXN0LmRvbmUsIGZyb20sIHRvLCBkaWZmKTtcbiAgICByZWJhc2VIaXN0QXJyYXkoaGlzdC51bmRvbmUsIGZyb20sIHRvLCBkaWZmKTtcbiAgfVxuXG4gIC8vIFV0aWxpdHkgZm9yIGFwcGx5aW5nIGEgY2hhbmdlIHRvIGEgbGluZSBieSBoYW5kbGUgb3IgbnVtYmVyLFxuICAvLyByZXR1cm5pbmcgdGhlIG51bWJlciBhbmQgb3B0aW9uYWxseSByZWdpc3RlcmluZyB0aGUgbGluZSBhc1xuICAvLyBjaGFuZ2VkLlxuICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBjaGFuZ2VUeXBlLCBvcCkge1xuICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZTtcbiAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSBcIm51bWJlclwiKSB7IGxpbmUgPSBnZXRMaW5lKGRvYywgY2xpcExpbmUoZG9jLCBoYW5kbGUpKTsgfVxuICAgIGVsc2UgeyBubyA9IGxpbmVObyhoYW5kbGUpOyB9XG4gICAgaWYgKG5vID09IG51bGwpIHsgcmV0dXJuIG51bGwgfVxuICAgIGlmIChvcChsaW5lLCBubykgJiYgZG9jLmNtKSB7IHJlZ0xpbmVDaGFuZ2UoZG9jLmNtLCBubywgY2hhbmdlVHlwZSk7IH1cbiAgICByZXR1cm4gbGluZVxuICB9XG5cbiAgLy8gVGhlIGRvY3VtZW50IGlzIHJlcHJlc2VudGVkIGFzIGEgQlRyZWUgY29uc2lzdGluZyBvZiBsZWF2ZXMsIHdpdGhcbiAgLy8gY2h1bmsgb2YgbGluZXMgaW4gdGhlbSwgYW5kIGJyYW5jaGVzLCB3aXRoIHVwIHRvIHRlbiBsZWF2ZXMgb3JcbiAgLy8gb3RoZXIgYnJhbmNoIG5vZGVzIGJlbG93IHRoZW0uIFRoZSB0b3Agbm9kZSBpcyBhbHdheXMgYSBicmFuY2hcbiAgLy8gbm9kZSwgYW5kIGlzIHRoZSBkb2N1bWVudCBvYmplY3QgaXRzZWxmIChtZWFuaW5nIGl0IGhhc1xuICAvLyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMpLlxuICAvL1xuICAvLyBBbGwgbm9kZXMgaGF2ZSBwYXJlbnQgbGlua3MuIFRoZSB0cmVlIGlzIHVzZWQgYm90aCB0byBnbyBmcm9tXG4gIC8vIGxpbmUgbnVtYmVycyB0byBsaW5lIG9iamVjdHMsIGFuZCB0byBnbyBmcm9tIG9iamVjdHMgdG8gbnVtYmVycy5cbiAgLy8gSXQgYWxzbyBpbmRleGVzIGJ5IGhlaWdodCwgYW5kIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGhlaWdodFxuICAvLyBhbmQgbGluZSBvYmplY3QsIGFuZCB0byBmaW5kIHRoZSB0b3RhbCBoZWlnaHQgb2YgdGhlIGRvY3VtZW50LlxuICAvL1xuICAvLyBTZWUgYWxzbyBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2Jsb2cvY29kZW1pcnJvci1saW5lLXRyZWUuaHRtbFxuXG4gIGZ1bmN0aW9uIExlYWZDaHVuayhsaW5lcykge1xuICAgIHRoaXMubGluZXMgPSBsaW5lcztcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgdmFyIGhlaWdodCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkge1xuICAgICAgbGluZXNbaV0ucGFyZW50ID0gdGhpcztcbiAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5saW5lcy5sZW5ndGggfSxcblxuICAgIC8vIFJlbW92ZSB0aGUgbiBsaW5lcyBhdCBvZmZzZXQgJ2F0Jy5cbiAgICByZW1vdmVJbm5lcjogZnVuY3Rpb24oYXQsIG4pIHtcbiAgICAgIGZvciAodmFyIGkgPSBhdCwgZSA9IGF0ICsgbjsgaSA8IGU7ICsraSkge1xuICAgICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG4gICAgICAgIHRoaXMuaGVpZ2h0IC09IGxpbmUuaGVpZ2h0O1xuICAgICAgICBjbGVhblVwTGluZShsaW5lKTtcbiAgICAgICAgc2lnbmFsTGF0ZXIobGluZSwgXCJkZWxldGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVzLnNwbGljZShhdCwgbik7XG4gICAgfSxcblxuICAgIC8vIEhlbHBlciB1c2VkIHRvIGNvbGxhcHNlIGEgc21hbGwgYnJhbmNoIGludG8gYSBzaW5nbGUgbGVhZi5cbiAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHtcbiAgICAgIGxpbmVzLnB1c2guYXBwbHkobGluZXMsIHRoaXMubGluZXMpO1xuICAgIH0sXG5cbiAgICAvLyBJbnNlcnQgdGhlIGdpdmVuIGFycmF5IG9mIGxpbmVzIGF0IG9mZnNldCAnYXQnLCBjb3VudCB0aGVtIGFzXG4gICAgLy8gaGF2aW5nIHRoZSBnaXZlbiBoZWlnaHQuXG4gICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7XG4gICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7XG4gICAgICB0aGlzLmxpbmVzID0gdGhpcy5saW5lcy5zbGljZSgwLCBhdCkuY29uY2F0KGxpbmVzKS5jb25jYXQodGhpcy5saW5lcy5zbGljZShhdCkpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgeyBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOyB9XG4gICAgfSxcblxuICAgIC8vIFVzZWQgdG8gaXRlcmF0ZSBvdmVyIGEgcGFydCBvZiB0aGUgdHJlZS5cbiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7XG4gICAgICBmb3IgKHZhciBlID0gYXQgKyBuOyBhdCA8IGU7ICsrYXQpXG4gICAgICAgIHsgaWYgKG9wKHRoaXMubGluZXNbYXRdKSkgeyByZXR1cm4gdHJ1ZSB9IH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4pIHtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdmFyIHNpemUgPSAwLCBoZWlnaHQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldO1xuICAgICAgc2l6ZSArPSBjaC5jaHVua1NpemUoKTsgaGVpZ2h0ICs9IGNoLmhlaWdodDtcbiAgICAgIGNoLnBhcmVudCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB9XG5cbiAgQnJhbmNoQ2h1bmsucHJvdG90eXBlID0ge1xuICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLnNpemUgfSxcblxuICAgIHJlbW92ZUlubmVyOiBmdW5jdGlvbihhdCwgbikge1xuICAgICAgdGhpcy5zaXplIC09IG47XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTtcbiAgICAgICAgaWYgKGF0IDwgc3opIHtcbiAgICAgICAgICB2YXIgcm0gPSBNYXRoLm1pbihuLCBzeiAtIGF0KSwgb2xkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0O1xuICAgICAgICAgIGNoaWxkLnJlbW92ZUlubmVyKGF0LCBybSk7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgLT0gb2xkSGVpZ2h0IC0gY2hpbGQuaGVpZ2h0O1xuICAgICAgICAgIGlmIChzeiA9PSBybSkgeyB0aGlzLmNoaWxkcmVuLnNwbGljZShpLS0sIDEpOyBjaGlsZC5wYXJlbnQgPSBudWxsOyB9XG4gICAgICAgICAgaWYgKChuIC09IHJtKSA9PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgICBhdCA9IDA7XG4gICAgICAgIH0gZWxzZSB7IGF0IC09IHN6OyB9XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIHNtYWxsZXIgdGhhbiAyNSBsaW5lcywgZW5zdXJlIHRoYXQgaXQgaXMgYVxuICAgICAgLy8gc2luZ2xlIGxlYWYgbm9kZS5cbiAgICAgIGlmICh0aGlzLnNpemUgLSBuIDwgMjUgJiZcbiAgICAgICAgICAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAxIHx8ICEodGhpcy5jaGlsZHJlblswXSBpbnN0YW5jZW9mIExlYWZDaHVuaykpKSB7XG4gICAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbGxhcHNlKGxpbmVzKTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVhZkNodW5rKGxpbmVzKV07XG4gICAgICAgIHRoaXMuY2hpbGRyZW5bMF0ucGFyZW50ID0gdGhpcztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsgdGhpcy5jaGlsZHJlbltpXS5jb2xsYXBzZShsaW5lcyk7IH1cbiAgICB9LFxuXG4gICAgaW5zZXJ0SW5uZXI6IGZ1bmN0aW9uKGF0LCBsaW5lcywgaGVpZ2h0KSB7XG4gICAgICB0aGlzLnNpemUgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV0sIHN6ID0gY2hpbGQuY2h1bmtTaXplKCk7XG4gICAgICAgIGlmIChhdCA8PSBzeikge1xuICAgICAgICAgIGNoaWxkLmluc2VydElubmVyKGF0LCBsaW5lcywgaGVpZ2h0KTtcbiAgICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHtcbiAgICAgICAgICAgIC8vIFRvIGF2b2lkIG1lbW9yeSB0aHJhc2hpbmcgd2hlbiBjaGlsZC5saW5lcyBpcyBodWdlIChlLmcuIGZpcnN0IHZpZXcgb2YgYSBsYXJnZSBmaWxlKSwgaXQncyBuZXZlciBzcGxpY2VkLlxuICAgICAgICAgICAgLy8gSW5zdGVhZCwgc21hbGwgc2xpY2VzIGFyZSB0YWtlbi4gVGhleSdyZSB0YWtlbiBpbiBvcmRlciBiZWNhdXNlIHNlcXVlbnRpYWwgbWVtb3J5IGFjY2Vzc2VzIGFyZSBmYXN0ZXN0LlxuICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IGNoaWxkLmxpbmVzLmxlbmd0aCAlIDI1ICsgMjU7XG4gICAgICAgICAgICBmb3IgKHZhciBwb3MgPSByZW1haW5pbmc7IHBvcyA8IGNoaWxkLmxpbmVzLmxlbmd0aDspIHtcbiAgICAgICAgICAgICAgdmFyIGxlYWYgPSBuZXcgTGVhZkNodW5rKGNoaWxkLmxpbmVzLnNsaWNlKHBvcywgcG9zICs9IDI1KSk7XG4gICAgICAgICAgICAgIGNoaWxkLmhlaWdodCAtPSBsZWFmLmhlaWdodDtcbiAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoKytpLCAwLCBsZWFmKTtcbiAgICAgICAgICAgICAgbGVhZi5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hpbGQubGluZXMgPSBjaGlsZC5saW5lcy5zbGljZSgwLCByZW1haW5pbmcpO1xuICAgICAgICAgICAgdGhpcy5tYXliZVNwaWxsKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgYXQgLT0gc3o7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFdoZW4gYSBub2RlIGhhcyBncm93biwgY2hlY2sgd2hldGhlciBpdCBzaG91bGQgYmUgc3BsaXQuXG4gICAgbWF5YmVTcGlsbDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPD0gMTApIHsgcmV0dXJuIH1cbiAgICAgIHZhciBtZSA9IHRoaXM7XG4gICAgICBkbyB7XG4gICAgICAgIHZhciBzcGlsbGVkID0gbWUuY2hpbGRyZW4uc3BsaWNlKG1lLmNoaWxkcmVuLmxlbmd0aCAtIDUsIDUpO1xuICAgICAgICB2YXIgc2libGluZyA9IG5ldyBCcmFuY2hDaHVuayhzcGlsbGVkKTtcbiAgICAgICAgaWYgKCFtZS5wYXJlbnQpIHsgLy8gQmVjb21lIHRoZSBwYXJlbnQgbm9kZVxuICAgICAgICAgIHZhciBjb3B5ID0gbmV3IEJyYW5jaENodW5rKG1lLmNoaWxkcmVuKTtcbiAgICAgICAgICBjb3B5LnBhcmVudCA9IG1lO1xuICAgICAgICAgIG1lLmNoaWxkcmVuID0gW2NvcHksIHNpYmxpbmddO1xuICAgICAgICAgIG1lID0gY29weTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lLnNpemUgLT0gc2libGluZy5zaXplO1xuICAgICAgICAgIG1lLmhlaWdodCAtPSBzaWJsaW5nLmhlaWdodDtcbiAgICAgICAgICB2YXIgbXlJbmRleCA9IGluZGV4T2YobWUucGFyZW50LmNoaWxkcmVuLCBtZSk7XG4gICAgICAgICAgbWUucGFyZW50LmNoaWxkcmVuLnNwbGljZShteUluZGV4ICsgMSwgMCwgc2libGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgc2libGluZy5wYXJlbnQgPSBtZS5wYXJlbnQ7XG4gICAgICB9IHdoaWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMClcbiAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7XG4gICAgfSxcblxuICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpO1xuICAgICAgICBpZiAoYXQgPCBzeikge1xuICAgICAgICAgIHZhciB1c2VkID0gTWF0aC5taW4obiwgc3ogLSBhdCk7XG4gICAgICAgICAgaWYgKGNoaWxkLml0ZXJOKGF0LCB1c2VkLCBvcCkpIHsgcmV0dXJuIHRydWUgfVxuICAgICAgICAgIGlmICgobiAtPSB1c2VkKSA9PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgICBhdCA9IDA7XG4gICAgICAgIH0gZWxzZSB7IGF0IC09IHN6OyB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIExpbmUgd2lkZ2V0cyBhcmUgYmxvY2sgZWxlbWVudHMgZGlzcGxheWVkIGFib3ZlIG9yIGJlbG93IGEgbGluZS5cblxuICB2YXIgTGluZVdpZGdldCA9IGZ1bmN0aW9uKGRvYywgbm9kZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7IGZvciAodmFyIG9wdCBpbiBvcHRpb25zKSB7IGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkpXG4gICAgICB7IHRoaXNbb3B0XSA9IG9wdGlvbnNbb3B0XTsgfSB9IH1cbiAgICB0aGlzLmRvYyA9IGRvYztcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICB9O1xuXG4gIExpbmVXaWRnZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3cyA9IHRoaXMubGluZS53aWRnZXRzLCBsaW5lID0gdGhpcy5saW5lLCBubyA9IGxpbmVObyhsaW5lKTtcbiAgICBpZiAobm8gPT0gbnVsbCB8fCAhd3MpIHsgcmV0dXJuIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdzLmxlbmd0aDsgKytpKSB7IGlmICh3c1tpXSA9PSB0aGlzKSB7IHdzLnNwbGljZShpLS0sIDEpOyB9IH1cbiAgICBpZiAoIXdzLmxlbmd0aCkgeyBsaW5lLndpZGdldHMgPSBudWxsOyB9XG4gICAgdmFyIGhlaWdodCA9IHdpZGdldEhlaWdodCh0aGlzKTtcbiAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIE1hdGgubWF4KDAsIGxpbmUuaGVpZ2h0IC0gaGVpZ2h0KSk7XG4gICAgaWYgKGNtKSB7XG4gICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGFkanVzdFNjcm9sbFdoZW5BYm92ZVZpc2libGUoY20sIGxpbmUsIC1oZWlnaHQpO1xuICAgICAgICByZWdMaW5lQ2hhbmdlKGNtLCBubywgXCJ3aWRnZXRcIik7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRDbGVhcmVkXCIsIGNtLCB0aGlzLCBubyk7XG4gICAgfVxuICB9O1xuXG4gIExpbmVXaWRnZXQucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBvbGRIID0gdGhpcy5oZWlnaHQsIGNtID0gdGhpcy5kb2MuY20sIGxpbmUgPSB0aGlzLmxpbmU7XG4gICAgdGhpcy5oZWlnaHQgPSBudWxsO1xuICAgIHZhciBkaWZmID0gd2lkZ2V0SGVpZ2h0KHRoaXMpIC0gb2xkSDtcbiAgICBpZiAoIWRpZmYpIHsgcmV0dXJuIH1cbiAgICBpZiAoIWxpbmVJc0hpZGRlbih0aGlzLmRvYywgbGluZSkpIHsgdXBkYXRlTGluZUhlaWdodChsaW5lLCBsaW5lLmhlaWdodCArIGRpZmYpOyB9XG4gICAgaWYgKGNtKSB7XG4gICAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZik7XG4gICAgICAgIHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRDaGFuZ2VkXCIsIGNtLCB0aGlzJDEsIGxpbmVObyhsaW5lKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIGV2ZW50TWl4aW4oTGluZVdpZGdldCk7XG5cbiAgZnVuY3Rpb24gYWRqdXN0U2Nyb2xsV2hlbkFib3ZlVmlzaWJsZShjbSwgbGluZSwgZGlmZikge1xuICAgIGlmIChoZWlnaHRBdExpbmUobGluZSkgPCAoKGNtLmN1ck9wICYmIGNtLmN1ck9wLnNjcm9sbFRvcCkgfHwgY20uZG9jLnNjcm9sbFRvcCkpXG4gICAgICB7IGFkZFRvU2Nyb2xsVG9wKGNtLCBkaWZmKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkTGluZVdpZGdldChkb2MsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucykge1xuICAgIHZhciB3aWRnZXQgPSBuZXcgTGluZVdpZGdldChkb2MsIG5vZGUsIG9wdGlvbnMpO1xuICAgIHZhciBjbSA9IGRvYy5jbTtcbiAgICBpZiAoY20gJiYgd2lkZ2V0Lm5vSFNjcm9sbCkgeyBjbS5kaXNwbGF5LmFsaWduV2lkZ2V0cyA9IHRydWU7IH1cbiAgICBjaGFuZ2VMaW5lKGRvYywgaGFuZGxlLCBcIndpZGdldFwiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIHdpZGdldHMgPSBsaW5lLndpZGdldHMgfHwgKGxpbmUud2lkZ2V0cyA9IFtdKTtcbiAgICAgIGlmICh3aWRnZXQuaW5zZXJ0QXQgPT0gbnVsbCkgeyB3aWRnZXRzLnB1c2god2lkZ2V0KTsgfVxuICAgICAgZWxzZSB7IHdpZGdldHMuc3BsaWNlKE1hdGgubWluKHdpZGdldHMubGVuZ3RoIC0gMSwgTWF0aC5tYXgoMCwgd2lkZ2V0Lmluc2VydEF0KSksIDAsIHdpZGdldCk7IH1cbiAgICAgIHdpZGdldC5saW5lID0gbGluZTtcbiAgICAgIGlmIChjbSAmJiAhbGluZUlzSGlkZGVuKGRvYywgbGluZSkpIHtcbiAgICAgICAgdmFyIGFib3ZlVmlzaWJsZSA9IGhlaWdodEF0TGluZShsaW5lKSA8IGRvYy5zY3JvbGxUb3A7XG4gICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyB3aWRnZXRIZWlnaHQod2lkZ2V0KSk7XG4gICAgICAgIGlmIChhYm92ZVZpc2libGUpIHsgYWRkVG9TY3JvbGxUb3AoY20sIHdpZGdldC5oZWlnaHQpOyB9XG4gICAgICAgIGNtLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKGNtKSB7IHNpZ25hbExhdGVyKGNtLCBcImxpbmVXaWRnZXRBZGRlZFwiLCBjbSwgd2lkZ2V0LCB0eXBlb2YgaGFuZGxlID09IFwibnVtYmVyXCIgPyBoYW5kbGUgOiBsaW5lTm8oaGFuZGxlKSk7IH1cbiAgICByZXR1cm4gd2lkZ2V0XG4gIH1cblxuICAvLyBURVhUTUFSS0VSU1xuXG4gIC8vIENyZWF0ZWQgd2l0aCBtYXJrVGV4dCBhbmQgc2V0Qm9va21hcmsgbWV0aG9kcy4gQSBUZXh0TWFya2VyIGlzIGFcbiAgLy8gaGFuZGxlIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xlYXIgb3IgZmluZCBhIG1hcmtlZCBwb3NpdGlvbiBpbiB0aGVcbiAgLy8gZG9jdW1lbnQuIExpbmUgb2JqZWN0cyBob2xkIGFycmF5cyAobWFya2VkU3BhbnMpIGNvbnRhaW5pbmdcbiAgLy8ge2Zyb20sIHRvLCBtYXJrZXJ9IG9iamVjdCBwb2ludGluZyB0byBzdWNoIG1hcmtlciBvYmplY3RzLCBhbmRcbiAgLy8gaW5kaWNhdGluZyB0aGF0IHN1Y2ggYSBtYXJrZXIgaXMgcHJlc2VudCBvbiB0aGF0IGxpbmUuIE11bHRpcGxlXG4gIC8vIGxpbmVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBtYXJrZXIgd2hlbiBpdCBzcGFucyBhY3Jvc3MgbGluZXMuXG4gIC8vIFRoZSBzcGFucyB3aWxsIGhhdmUgbnVsbCBmb3IgdGhlaXIgZnJvbS90byBwcm9wZXJ0aWVzIHdoZW4gdGhlXG4gIC8vIG1hcmtlciBjb250aW51ZXMgYmV5b25kIHRoZSBzdGFydC9lbmQgb2YgdGhlIGxpbmUuIE1hcmtlcnMgaGF2ZVxuICAvLyBsaW5rcyBiYWNrIHRvIHRoZSBsaW5lcyB0aGV5IGN1cnJlbnRseSB0b3VjaC5cblxuICAvLyBDb2xsYXBzZWQgbWFya2VycyBoYXZlIHVuaXF1ZSBpZHMsIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gb3JkZXJcbiAgLy8gdGhlbSwgd2hpY2ggaXMgbmVlZGVkIGZvciB1bmlxdWVseSBkZXRlcm1pbmluZyBhbiBvdXRlciBtYXJrZXJcbiAgLy8gd2hlbiB0aGV5IG92ZXJsYXAgKHRoZXkgbWF5IG5lc3QsIGJ1dCBub3QgcGFydGlhbGx5IG92ZXJsYXApLlxuICB2YXIgbmV4dE1hcmtlcklkID0gMDtcblxuICB2YXIgVGV4dE1hcmtlciA9IGZ1bmN0aW9uKGRvYywgdHlwZSkge1xuICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICAgIHRoaXMuaWQgPSArK25leHRNYXJrZXJJZDtcbiAgfTtcblxuICAvLyBDbGVhciB0aGUgbWFya2VyLlxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgeyByZXR1cm4gfVxuICAgIHZhciBjbSA9IHRoaXMuZG9jLmNtLCB3aXRoT3AgPSBjbSAmJiAhY20uY3VyT3A7XG4gICAgaWYgKHdpdGhPcCkgeyBzdGFydE9wZXJhdGlvbihjbSk7IH1cbiAgICBpZiAoaGFzSGFuZGxlcih0aGlzLCBcImNsZWFyXCIpKSB7XG4gICAgICB2YXIgZm91bmQgPSB0aGlzLmZpbmQoKTtcbiAgICAgIGlmIChmb3VuZCkgeyBzaWduYWxMYXRlcih0aGlzLCBcImNsZWFyXCIsIGZvdW5kLmZyb20sIGZvdW5kLnRvKTsgfVxuICAgIH1cbiAgICB2YXIgbWluID0gbnVsbCwgbWF4ID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzKTtcbiAgICAgIGlmIChjbSAmJiAhdGhpcy5jb2xsYXBzZWQpIHsgcmVnTGluZUNoYW5nZShjbSwgbGluZU5vKGxpbmUpLCBcInRleHRcIik7IH1cbiAgICAgIGVsc2UgaWYgKGNtKSB7XG4gICAgICAgIGlmIChzcGFuLnRvICE9IG51bGwpIHsgbWF4ID0gbGluZU5vKGxpbmUpOyB9XG4gICAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkgeyBtaW4gPSBsaW5lTm8obGluZSk7IH1cbiAgICAgIH1cbiAgICAgIGxpbmUubWFya2VkU3BhbnMgPSByZW1vdmVNYXJrZWRTcGFuKGxpbmUubWFya2VkU3BhbnMsIHNwYW4pO1xuICAgICAgaWYgKHNwYW4uZnJvbSA9PSBudWxsICYmIHRoaXMuY29sbGFwc2VkICYmICFsaW5lSXNIaWRkZW4odGhpcy5kb2MsIGxpbmUpICYmIGNtKVxuICAgICAgICB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgdGV4dEhlaWdodChjbS5kaXNwbGF5KSk7IH1cbiAgICB9XG4gICAgaWYgKGNtICYmIHRoaXMuY29sbGFwc2VkICYmICFjbS5vcHRpb25zLmxpbmVXcmFwcGluZykgeyBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCB0aGlzLmxpbmVzLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKHRoaXMubGluZXNbaSQxXSksIGxlbiA9IGxpbmVMZW5ndGgodmlzdWFsKTtcbiAgICAgIGlmIChsZW4gPiBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGgpIHtcbiAgICAgICAgY20uZGlzcGxheS5tYXhMaW5lID0gdmlzdWFsO1xuICAgICAgICBjbS5kaXNwbGF5Lm1heExpbmVMZW5ndGggPSBsZW47XG4gICAgICAgIGNtLmRpc3BsYXkubWF4TGluZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gfVxuXG4gICAgaWYgKG1pbiAhPSBudWxsICYmIGNtICYmIHRoaXMuY29sbGFwc2VkKSB7IHJlZ0NoYW5nZShjbSwgbWluLCBtYXggKyAxKTsgfVxuICAgIHRoaXMubGluZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmV4cGxpY2l0bHlDbGVhcmVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5hdG9taWMgJiYgdGhpcy5kb2MuY2FudEVkaXQpIHtcbiAgICAgIHRoaXMuZG9jLmNhbnRFZGl0ID0gZmFsc2U7XG4gICAgICBpZiAoY20pIHsgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOyB9XG4gICAgfVxuICAgIGlmIChjbSkgeyBzaWduYWxMYXRlcihjbSwgXCJtYXJrZXJDbGVhcmVkXCIsIGNtLCB0aGlzLCBtaW4sIG1heCk7IH1cbiAgICBpZiAod2l0aE9wKSB7IGVuZE9wZXJhdGlvbihjbSk7IH1cbiAgICBpZiAodGhpcy5wYXJlbnQpIHsgdGhpcy5wYXJlbnQuY2xlYXIoKTsgfVxuICB9O1xuXG4gIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIgaW4gdGhlIGRvY3VtZW50LiBSZXR1cm5zIGEge2Zyb20sXG4gIC8vIHRvfSBvYmplY3QgYnkgZGVmYXVsdC4gU2lkZSBjYW4gYmUgcGFzc2VkIHRvIGdldCBhIHNwZWNpZmljIHNpZGVcbiAgLy8gLS0gMCAoYm90aCksIC0xIChsZWZ0KSwgb3IgMSAocmlnaHQpLiBXaGVuIGxpbmVPYmogaXMgdHJ1ZSwgdGhlXG4gIC8vIFBvcyBvYmplY3RzIHJldHVybmVkIGNvbnRhaW4gYSBsaW5lIG9iamVjdCwgcmF0aGVyIHRoYW4gYSBsaW5lXG4gIC8vIG51bWJlciAodXNlZCB0byBwcmV2ZW50IGxvb2tpbmcgdXAgdGhlIHNhbWUgbGluZSB0d2ljZSkuXG4gIFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoc2lkZSwgbGluZU9iaikge1xuICAgIGlmIChzaWRlID09IG51bGwgJiYgdGhpcy50eXBlID09IFwiYm9va21hcmtcIikgeyBzaWRlID0gMTsgfVxuICAgIHZhciBmcm9tLCB0bztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTtcbiAgICAgIHZhciBzcGFuID0gZ2V0TWFya2VkU3BhbkZvcihsaW5lLm1hcmtlZFNwYW5zLCB0aGlzKTtcbiAgICAgIGlmIChzcGFuLmZyb20gIT0gbnVsbCkge1xuICAgICAgICBmcm9tID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLmZyb20pO1xuICAgICAgICBpZiAoc2lkZSA9PSAtMSkgeyByZXR1cm4gZnJvbSB9XG4gICAgICB9XG4gICAgICBpZiAoc3Bhbi50byAhPSBudWxsKSB7XG4gICAgICAgIHRvID0gUG9zKGxpbmVPYmogPyBsaW5lIDogbGluZU5vKGxpbmUpLCBzcGFuLnRvKTtcbiAgICAgICAgaWYgKHNpZGUgPT0gMSkgeyByZXR1cm4gdG8gfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnJvbSAmJiB7ZnJvbTogZnJvbSwgdG86IHRvfVxuICB9O1xuXG4gIC8vIFNpZ25hbHMgdGhhdCB0aGUgbWFya2VyJ3Mgd2lkZ2V0IGNoYW5nZWQsIGFuZCBzdXJyb3VuZGluZyBsYXlvdXRcbiAgLy8gc2hvdWxkIGJlIHJlY29tcHV0ZWQuXG4gIFRleHRNYXJrZXIucHJvdG90eXBlLmNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBwb3MgPSB0aGlzLmZpbmQoLTEsIHRydWUpLCB3aWRnZXQgPSB0aGlzLCBjbSA9IHRoaXMuZG9jLmNtO1xuICAgIGlmICghcG9zIHx8ICFjbSkgeyByZXR1cm4gfVxuICAgIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUsIGxpbmVOID0gbGluZU5vKHBvcy5saW5lKTtcbiAgICAgIHZhciB2aWV3ID0gZmluZFZpZXdGb3JMaW5lKGNtLCBsaW5lTik7XG4gICAgICBpZiAodmlldykge1xuICAgICAgICBjbGVhckxpbmVNZWFzdXJlbWVudENhY2hlRm9yKHZpZXcpO1xuICAgICAgICBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gY20uY3VyT3AuZm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7XG4gICAgICBpZiAoIWxpbmVJc0hpZGRlbih3aWRnZXQuZG9jLCBsaW5lKSAmJiB3aWRnZXQuaGVpZ2h0ICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG9sZEhlaWdodCA9IHdpZGdldC5oZWlnaHQ7XG4gICAgICAgIHdpZGdldC5oZWlnaHQgPSBudWxsO1xuICAgICAgICB2YXIgZEhlaWdodCA9IHdpZGdldEhlaWdodCh3aWRnZXQpIC0gb2xkSGVpZ2h0O1xuICAgICAgICBpZiAoZEhlaWdodClcbiAgICAgICAgICB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgbGluZS5oZWlnaHQgKyBkSGVpZ2h0KTsgfVxuICAgICAgfVxuICAgICAgc2lnbmFsTGF0ZXIoY20sIFwibWFya2VyQ2hhbmdlZFwiLCBjbSwgdGhpcyQxKTtcbiAgICB9KTtcbiAgfTtcblxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5hdHRhY2hMaW5lID0gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNtKSB7XG4gICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcDtcbiAgICAgIGlmICghb3AubWF5YmVIaWRkZW5NYXJrZXJzIHx8IGluZGV4T2Yob3AubWF5YmVIaWRkZW5NYXJrZXJzLCB0aGlzKSA9PSAtMSlcbiAgICAgICAgeyAob3AubWF5YmVVbmhpZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlVW5oaWRkZW5NYXJrZXJzID0gW10pKS5wdXNoKHRoaXMpOyB9XG4gICAgfVxuICAgIHRoaXMubGluZXMucHVzaChsaW5lKTtcbiAgfTtcblxuICBUZXh0TWFya2VyLnByb3RvdHlwZS5kZXRhY2hMaW5lID0gZnVuY3Rpb24gKGxpbmUpIHtcbiAgICB0aGlzLmxpbmVzLnNwbGljZShpbmRleE9mKHRoaXMubGluZXMsIGxpbmUpLCAxKTtcbiAgICBpZiAoIXRoaXMubGluZXMubGVuZ3RoICYmIHRoaXMuZG9jLmNtKSB7XG4gICAgICB2YXIgb3AgPSB0aGlzLmRvYy5jbS5jdXJPcFxuICAgICAgOyhvcC5tYXliZUhpZGRlbk1hcmtlcnMgfHwgKG9wLm1heWJlSGlkZGVuTWFya2VycyA9IFtdKSkucHVzaCh0aGlzKTtcbiAgICB9XG4gIH07XG4gIGV2ZW50TWl4aW4oVGV4dE1hcmtlcik7XG5cbiAgLy8gQ3JlYXRlIGEgbWFya2VyLCB3aXJlIGl0IHVwIHRvIHRoZSByaWdodCBsaW5lcywgYW5kXG4gIGZ1bmN0aW9uIG1hcmtUZXh0KGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIHtcbiAgICAvLyBTaGFyZWQgbWFya2VycyAoYWNyb3NzIGxpbmtlZCBkb2N1bWVudHMpIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHlcbiAgICAvLyAobWFya1RleHRTaGFyZWQgd2lsbCBjYWxsIG91dCB0byB0aGlzIGFnYWluLCBvbmNlIHBlclxuICAgIC8vIGRvY3VtZW50KS5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCkgeyByZXR1cm4gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkgfVxuICAgIC8vIEVuc3VyZSB3ZSBhcmUgaW4gYW4gb3BlcmF0aW9uLlxuICAgIGlmIChkb2MuY20gJiYgIWRvYy5jbS5jdXJPcCkgeyByZXR1cm4gb3BlcmF0aW9uKGRvYy5jbSwgbWFya1RleHQpKGRvYywgZnJvbSwgdG8sIG9wdGlvbnMsIHR5cGUpIH1cblxuICAgIHZhciBtYXJrZXIgPSBuZXcgVGV4dE1hcmtlcihkb2MsIHR5cGUpLCBkaWZmID0gY21wKGZyb20sIHRvKTtcbiAgICBpZiAob3B0aW9ucykgeyBjb3B5T2JqKG9wdGlvbnMsIG1hcmtlciwgZmFsc2UpOyB9XG4gICAgLy8gRG9uJ3QgY29ubmVjdCBlbXB0eSBtYXJrZXJzIHVubGVzcyBjbGVhcldoZW5FbXB0eSBpcyBmYWxzZVxuICAgIGlmIChkaWZmID4gMCB8fCBkaWZmID09IDAgJiYgbWFya2VyLmNsZWFyV2hlbkVtcHR5ICE9PSBmYWxzZSlcbiAgICAgIHsgcmV0dXJuIG1hcmtlciB9XG4gICAgaWYgKG1hcmtlci5yZXBsYWNlZFdpdGgpIHtcbiAgICAgIC8vIFNob3dpbmcgdXAgYXMgYSB3aWRnZXQgaW1wbGllcyBjb2xsYXBzZWQgKHdpZGdldCByZXBsYWNlcyB0ZXh0KVxuICAgICAgbWFya2VyLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICBtYXJrZXIud2lkZ2V0Tm9kZSA9IGVsdFAoXCJzcGFuXCIsIFttYXJrZXIucmVwbGFjZWRXaXRoXSwgXCJDb2RlTWlycm9yLXdpZGdldFwiKTtcbiAgICAgIGlmICghb3B0aW9ucy5oYW5kbGVNb3VzZUV2ZW50cykgeyBtYXJrZXIud2lkZ2V0Tm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTsgfVxuICAgICAgaWYgKG9wdGlvbnMuaW5zZXJ0TGVmdCkgeyBtYXJrZXIud2lkZ2V0Tm9kZS5pbnNlcnRMZWZ0ID0gdHJ1ZTsgfVxuICAgIH1cbiAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkge1xuICAgICAgaWYgKGNvbmZsaWN0aW5nQ29sbGFwc2VkUmFuZ2UoZG9jLCBmcm9tLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpIHx8XG4gICAgICAgICAgZnJvbS5saW5lICE9IHRvLmxpbmUgJiYgY29uZmxpY3RpbmdDb2xsYXBzZWRSYW5nZShkb2MsIHRvLmxpbmUsIGZyb20sIHRvLCBtYXJrZXIpKVxuICAgICAgICB7IHRocm93IG5ldyBFcnJvcihcIkluc2VydGluZyBjb2xsYXBzZWQgbWFya2VyIHBhcnRpYWxseSBvdmVybGFwcGluZyBhbiBleGlzdGluZyBvbmVcIikgfVxuICAgICAgc2VlQ29sbGFwc2VkU3BhbnMoKTtcbiAgICB9XG5cbiAgICBpZiAobWFya2VyLmFkZFRvSGlzdG9yeSlcbiAgICAgIHsgYWRkQ2hhbmdlVG9IaXN0b3J5KGRvYywge2Zyb206IGZyb20sIHRvOiB0bywgb3JpZ2luOiBcIm1hcmtUZXh0XCJ9LCBkb2Muc2VsLCBOYU4pOyB9XG5cbiAgICB2YXIgY3VyTGluZSA9IGZyb20ubGluZSwgY20gPSBkb2MuY20sIHVwZGF0ZU1heExpbmU7XG4gICAgZG9jLml0ZXIoY3VyTGluZSwgdG8ubGluZSArIDEsIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICBpZiAoY20gJiYgbWFya2VyLmNvbGxhcHNlZCAmJiAhY20ub3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgdmlzdWFsTGluZShsaW5lKSA9PSBjbS5kaXNwbGF5Lm1heExpbmUpXG4gICAgICAgIHsgdXBkYXRlTWF4TGluZSA9IHRydWU7IH1cbiAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkICYmIGN1ckxpbmUgIT0gZnJvbS5saW5lKSB7IHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgMCk7IH1cbiAgICAgIGFkZE1hcmtlZFNwYW4obGluZSwgbmV3IE1hcmtlZFNwYW4obWFya2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMaW5lID09IHRvLmxpbmUgPyB0by5jaCA6IG51bGwpKTtcbiAgICAgICsrY3VyTGluZTtcbiAgICB9KTtcbiAgICAvLyBsaW5lSXNIaWRkZW4gZGVwZW5kcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHNwYW5zLCBzbyBuZWVkcyBhIHNlY29uZCBwYXNzXG4gICAgaWYgKG1hcmtlci5jb2xsYXBzZWQpIHsgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgIGlmIChsaW5lSXNIaWRkZW4oZG9jLCBsaW5lKSkgeyB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIDApOyB9XG4gICAgfSk7IH1cblxuICAgIGlmIChtYXJrZXIuY2xlYXJPbkVudGVyKSB7IG9uKG1hcmtlciwgXCJiZWZvcmVDdXJzb3JFbnRlclwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXJrZXIuY2xlYXIoKTsgfSk7IH1cblxuICAgIGlmIChtYXJrZXIucmVhZE9ubHkpIHtcbiAgICAgIHNlZVJlYWRPbmx5U3BhbnMoKTtcbiAgICAgIGlmIChkb2MuaGlzdG9yeS5kb25lLmxlbmd0aCB8fCBkb2MuaGlzdG9yeS51bmRvbmUubGVuZ3RoKVxuICAgICAgICB7IGRvYy5jbGVhckhpc3RvcnkoKTsgfVxuICAgIH1cbiAgICBpZiAobWFya2VyLmNvbGxhcHNlZCkge1xuICAgICAgbWFya2VyLmlkID0gKytuZXh0TWFya2VySWQ7XG4gICAgICBtYXJrZXIuYXRvbWljID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGNtKSB7XG4gICAgICAvLyBTeW5jIGVkaXRvciBzdGF0ZVxuICAgICAgaWYgKHVwZGF0ZU1heExpbmUpIHsgY20uY3VyT3AudXBkYXRlTWF4TGluZSA9IHRydWU7IH1cbiAgICAgIGlmIChtYXJrZXIuY29sbGFwc2VkKVxuICAgICAgICB7IHJlZ0NoYW5nZShjbSwgZnJvbS5saW5lLCB0by5saW5lICsgMSk7IH1cbiAgICAgIGVsc2UgaWYgKG1hcmtlci5jbGFzc05hbWUgfHwgbWFya2VyLnN0YXJ0U3R5bGUgfHwgbWFya2VyLmVuZFN0eWxlIHx8IG1hcmtlci5jc3MgfHxcbiAgICAgICAgICAgICAgIG1hcmtlci5hdHRyaWJ1dGVzIHx8IG1hcmtlci50aXRsZSlcbiAgICAgICAgeyBmb3IgKHZhciBpID0gZnJvbS5saW5lOyBpIDw9IHRvLmxpbmU7IGkrKykgeyByZWdMaW5lQ2hhbmdlKGNtLCBpLCBcInRleHRcIik7IH0gfVxuICAgICAgaWYgKG1hcmtlci5hdG9taWMpIHsgcmVDaGVja1NlbGVjdGlvbihjbS5kb2MpOyB9XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJtYXJrZXJBZGRlZFwiLCBjbSwgbWFya2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlclxuICB9XG5cbiAgLy8gU0hBUkVEIFRFWFRNQVJLRVJTXG5cbiAgLy8gQSBzaGFyZWQgbWFya2VyIHNwYW5zIG11bHRpcGxlIGxpbmtlZCBkb2N1bWVudHMuIEl0IGlzXG4gIC8vIGltcGxlbWVudGVkIGFzIGEgbWV0YS1tYXJrZXItb2JqZWN0IGNvbnRyb2xsaW5nIG11bHRpcGxlIG5vcm1hbFxuICAvLyBtYXJrZXJzLlxuICB2YXIgU2hhcmVkVGV4dE1hcmtlciA9IGZ1bmN0aW9uKG1hcmtlcnMsIHByaW1hcnkpIHtcbiAgICB0aGlzLm1hcmtlcnMgPSBtYXJrZXJzO1xuICAgIHRoaXMucHJpbWFyeSA9IHByaW1hcnk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgKytpKVxuICAgICAgeyBtYXJrZXJzW2ldLnBhcmVudCA9IHRoaXM7IH1cbiAgfTtcblxuICBTaGFyZWRUZXh0TWFya2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5leHBsaWNpdGx5Q2xlYXJlZCkgeyByZXR1cm4gfVxuICAgIHRoaXMuZXhwbGljaXRseUNsZWFyZWQgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXJrZXJzLmxlbmd0aDsgKytpKVxuICAgICAgeyB0aGlzLm1hcmtlcnNbaV0uY2xlYXIoKTsgfVxuICAgIHNpZ25hbExhdGVyKHRoaXMsIFwiY2xlYXJcIik7XG4gIH07XG5cbiAgU2hhcmVkVGV4dE1hcmtlci5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uIChzaWRlLCBsaW5lT2JqKSB7XG4gICAgcmV0dXJuIHRoaXMucHJpbWFyeS5maW5kKHNpZGUsIGxpbmVPYmopXG4gIH07XG4gIGV2ZW50TWl4aW4oU2hhcmVkVGV4dE1hcmtlcik7XG5cbiAgZnVuY3Rpb24gbWFya1RleHRTaGFyZWQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSkge1xuICAgIG9wdGlvbnMgPSBjb3B5T2JqKG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuc2hhcmVkID0gZmFsc2U7XG4gICAgdmFyIG1hcmtlcnMgPSBbbWFya1RleHQoZG9jLCBmcm9tLCB0bywgb3B0aW9ucywgdHlwZSldLCBwcmltYXJ5ID0gbWFya2Vyc1swXTtcbiAgICB2YXIgd2lkZ2V0ID0gb3B0aW9ucy53aWRnZXROb2RlO1xuICAgIGxpbmtlZERvY3MoZG9jLCBmdW5jdGlvbiAoZG9jKSB7XG4gICAgICBpZiAod2lkZ2V0KSB7IG9wdGlvbnMud2lkZ2V0Tm9kZSA9IHdpZGdldC5jbG9uZU5vZGUodHJ1ZSk7IH1cbiAgICAgIG1hcmtlcnMucHVzaChtYXJrVGV4dChkb2MsIGNsaXBQb3MoZG9jLCBmcm9tKSwgY2xpcFBvcyhkb2MsIHRvKSwgb3B0aW9ucywgdHlwZSkpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MubGlua2VkLmxlbmd0aDsgKytpKVxuICAgICAgICB7IGlmIChkb2MubGlua2VkW2ldLmlzUGFyZW50KSB7IHJldHVybiB9IH1cbiAgICAgIHByaW1hcnkgPSBsc3QobWFya2Vycyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBTaGFyZWRUZXh0TWFya2VyKG1hcmtlcnMsIHByaW1hcnkpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5kU2hhcmVkTWFya2Vycyhkb2MpIHtcbiAgICByZXR1cm4gZG9jLmZpbmRNYXJrcyhQb3MoZG9jLmZpcnN0LCAwKSwgZG9jLmNsaXBQb3MoUG9zKGRvYy5sYXN0TGluZSgpKSksIGZ1bmN0aW9uIChtKSB7IHJldHVybiBtLnBhcmVudDsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvcHlTaGFyZWRNYXJrZXJzKGRvYywgbWFya2Vycykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIHBvcyA9IG1hcmtlci5maW5kKCk7XG4gICAgICB2YXIgbUZyb20gPSBkb2MuY2xpcFBvcyhwb3MuZnJvbSksIG1UbyA9IGRvYy5jbGlwUG9zKHBvcy50byk7XG4gICAgICBpZiAoY21wKG1Gcm9tLCBtVG8pKSB7XG4gICAgICAgIHZhciBzdWJNYXJrID0gbWFya1RleHQoZG9jLCBtRnJvbSwgbVRvLCBtYXJrZXIucHJpbWFyeSwgbWFya2VyLnByaW1hcnkudHlwZSk7XG4gICAgICAgIG1hcmtlci5tYXJrZXJzLnB1c2goc3ViTWFyayk7XG4gICAgICAgIHN1Yk1hcmsucGFyZW50ID0gbWFya2VyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGFjaFNoYXJlZE1hcmtlcnMobWFya2Vycykge1xuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBpICkge1xuICAgICAgdmFyIG1hcmtlciA9IG1hcmtlcnNbaV0sIGxpbmtlZCA9IFttYXJrZXIucHJpbWFyeS5kb2NdO1xuICAgICAgbGlua2VkRG9jcyhtYXJrZXIucHJpbWFyeS5kb2MsIGZ1bmN0aW9uIChkKSB7IHJldHVybiBsaW5rZWQucHVzaChkKTsgfSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcmtlci5tYXJrZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBzdWJNYXJrZXIgPSBtYXJrZXIubWFya2Vyc1tqXTtcbiAgICAgICAgaWYgKGluZGV4T2YobGlua2VkLCBzdWJNYXJrZXIuZG9jKSA9PSAtMSkge1xuICAgICAgICAgIHN1Yk1hcmtlci5wYXJlbnQgPSBudWxsO1xuICAgICAgICAgIG1hcmtlci5tYXJrZXJzLnNwbGljZShqLS0sIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2Vycy5sZW5ndGg7IGkrKykgbG9vcCggaSApO1xuICB9XG5cbiAgdmFyIG5leHREb2NJZCA9IDA7XG4gIHZhciBEb2MgPSBmdW5jdGlvbih0ZXh0LCBtb2RlLCBmaXJzdExpbmUsIGxpbmVTZXAsIGRpcmVjdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEb2MpKSB7IHJldHVybiBuZXcgRG9jKHRleHQsIG1vZGUsIGZpcnN0TGluZSwgbGluZVNlcCwgZGlyZWN0aW9uKSB9XG4gICAgaWYgKGZpcnN0TGluZSA9PSBudWxsKSB7IGZpcnN0TGluZSA9IDA7IH1cblxuICAgIEJyYW5jaENodW5rLmNhbGwodGhpcywgW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKFwiXCIsIG51bGwpXSldKTtcbiAgICB0aGlzLmZpcnN0ID0gZmlyc3RMaW5lO1xuICAgIHRoaXMuc2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxMZWZ0ID0gMDtcbiAgICB0aGlzLmNhbnRFZGl0ID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSAxO1xuICAgIHRoaXMubW9kZUZyb250aWVyID0gdGhpcy5oaWdobGlnaHRGcm9udGllciA9IGZpcnN0TGluZTtcbiAgICB2YXIgc3RhcnQgPSBQb3MoZmlyc3RMaW5lLCAwKTtcbiAgICB0aGlzLnNlbCA9IHNpbXBsZVNlbGVjdGlvbihzdGFydCk7XG4gICAgdGhpcy5oaXN0b3J5ID0gbmV3IEhpc3RvcnkobnVsbCk7XG4gICAgdGhpcy5pZCA9ICsrbmV4dERvY0lkO1xuICAgIHRoaXMubW9kZU9wdGlvbiA9IG1vZGU7XG4gICAgdGhpcy5saW5lU2VwID0gbGluZVNlcDtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IChkaXJlY3Rpb24gPT0gXCJydGxcIikgPyBcInJ0bFwiIDogXCJsdHJcIjtcbiAgICB0aGlzLmV4dGVuZCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiB0ZXh0ID09IFwic3RyaW5nXCIpIHsgdGV4dCA9IHRoaXMuc3BsaXRMaW5lcyh0ZXh0KTsgfVxuICAgIHVwZGF0ZURvYyh0aGlzLCB7ZnJvbTogc3RhcnQsIHRvOiBzdGFydCwgdGV4dDogdGV4dH0pO1xuICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24oc3RhcnQpLCBzZWxfZG9udFNjcm9sbCk7XG4gIH07XG5cbiAgRG9jLnByb3RvdHlwZSA9IGNyZWF0ZU9iaihCcmFuY2hDaHVuay5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3RvcjogRG9jLFxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgZG9jdW1lbnQuIFN1cHBvcnRzIHR3byBmb3JtcyAtLSB3aXRoIG9ubHkgb25lXG4gICAgLy8gYXJndW1lbnQsIGl0IGNhbGxzIHRoYXQgZm9yIGVhY2ggbGluZSBpbiB0aGUgZG9jdW1lbnQuIFdpdGhcbiAgICAvLyB0aHJlZSwgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgcmFuZ2UgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byAod2l0aFxuICAgIC8vIHRoZSBzZWNvbmQgYmVpbmcgbm9uLWluY2x1c2l2ZSkuXG4gICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7XG4gICAgICBpZiAob3ApIHsgdGhpcy5pdGVyTihmcm9tIC0gdGhpcy5maXJzdCwgdG8gLSBmcm9tLCBvcCk7IH1cbiAgICAgIGVsc2UgeyB0aGlzLml0ZXJOKHRoaXMuZmlyc3QsIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUsIGZyb20pOyB9XG4gICAgfSxcblxuICAgIC8vIE5vbi1wdWJsaWMgaW50ZXJmYWNlIGZvciBhZGRpbmcgYW5kIHJlbW92aW5nIGxpbmVzLlxuICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsgfVxuICAgICAgdGhpcy5pbnNlcnRJbm5lcihhdCAtIHRoaXMuZmlyc3QsIGxpbmVzLCBoZWlnaHQpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbikgeyB0aGlzLnJlbW92ZUlubmVyKGF0IC0gdGhpcy5maXJzdCwgbik7IH0sXG5cbiAgICAvLyBGcm9tIGhlcmUsIHRoZSBtZXRob2RzIGFyZSBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiBNb3N0XG4gICAgLy8gYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gQ29kZU1pcnJvciAoZWRpdG9yKSBpbnN0YW5jZXMuXG5cbiAgICBnZXRWYWx1ZTogZnVuY3Rpb24obGluZVNlcCkge1xuICAgICAgdmFyIGxpbmVzID0gZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSk7XG4gICAgICBpZiAobGluZVNlcCA9PT0gZmFsc2UpIHsgcmV0dXJuIGxpbmVzIH1cbiAgICAgIHJldHVybiBsaW5lcy5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpXG4gICAgfSxcbiAgICBzZXRWYWx1ZTogZG9jTWV0aG9kT3AoZnVuY3Rpb24oY29kZSkge1xuICAgICAgdmFyIHRvcCA9IFBvcyh0aGlzLmZpcnN0LCAwKSwgbGFzdCA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxO1xuICAgICAgbWFrZUNoYW5nZSh0aGlzLCB7ZnJvbTogdG9wLCB0bzogUG9zKGxhc3QsIGdldExpbmUodGhpcywgbGFzdCkudGV4dC5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5zcGxpdExpbmVzKGNvZGUpLCBvcmlnaW46IFwic2V0VmFsdWVcIiwgZnVsbDogdHJ1ZX0sIHRydWUpO1xuICAgICAgaWYgKHRoaXMuY20pIHsgc2Nyb2xsVG9Db29yZHModGhpcy5jbSwgMCwgMCk7IH1cbiAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBzaW1wbGVTZWxlY3Rpb24odG9wKSwgc2VsX2RvbnRTY3JvbGwpO1xuICAgIH0pLFxuICAgIHJlcGxhY2VSYW5nZTogZnVuY3Rpb24oY29kZSwgZnJvbSwgdG8sIG9yaWdpbikge1xuICAgICAgZnJvbSA9IGNsaXBQb3ModGhpcywgZnJvbSk7XG4gICAgICB0byA9IHRvID8gY2xpcFBvcyh0aGlzLCB0bykgOiBmcm9tO1xuICAgICAgcmVwbGFjZVJhbmdlKHRoaXMsIGNvZGUsIGZyb20sIHRvLCBvcmlnaW4pO1xuICAgIH0sXG4gICAgZ2V0UmFuZ2U6IGZ1bmN0aW9uKGZyb20sIHRvLCBsaW5lU2VwKSB7XG4gICAgICB2YXIgbGluZXMgPSBnZXRCZXR3ZWVuKHRoaXMsIGNsaXBQb3ModGhpcywgZnJvbSksIGNsaXBQb3ModGhpcywgdG8pKTtcbiAgICAgIGlmIChsaW5lU2VwID09PSBmYWxzZSkgeyByZXR1cm4gbGluZXMgfVxuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSlcbiAgICB9LFxuXG4gICAgZ2V0TGluZTogZnVuY3Rpb24obGluZSkge3ZhciBsID0gdGhpcy5nZXRMaW5lSGFuZGxlKGxpbmUpOyByZXR1cm4gbCAmJiBsLnRleHR9LFxuXG4gICAgZ2V0TGluZUhhbmRsZTogZnVuY3Rpb24obGluZSkge2lmIChpc0xpbmUodGhpcywgbGluZSkpIHsgcmV0dXJuIGdldExpbmUodGhpcywgbGluZSkgfX0sXG4gICAgZ2V0TGluZU51bWJlcjogZnVuY3Rpb24obGluZSkge3JldHVybiBsaW5lTm8obGluZSl9LFxuXG4gICAgZ2V0TGluZUhhbmRsZVZpc3VhbFN0YXJ0OiBmdW5jdGlvbihsaW5lKSB7XG4gICAgICBpZiAodHlwZW9mIGxpbmUgPT0gXCJudW1iZXJcIikgeyBsaW5lID0gZ2V0TGluZSh0aGlzLCBsaW5lKTsgfVxuICAgICAgcmV0dXJuIHZpc3VhbExpbmUobGluZSlcbiAgICB9LFxuXG4gICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zaXplfSxcbiAgICBmaXJzdExpbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpcnN0fSxcbiAgICBsYXN0TGluZTogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmlyc3QgKyB0aGlzLnNpemUgLSAxfSxcblxuICAgIGNsaXBQb3M6IGZ1bmN0aW9uKHBvcykge3JldHVybiBjbGlwUG9zKHRoaXMsIHBvcyl9LFxuXG4gICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkge1xuICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWwucHJpbWFyeSgpLCBwb3M7XG4gICAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA9PSBcImhlYWRcIikgeyBwb3MgPSByYW5nZS5oZWFkOyB9XG4gICAgICBlbHNlIGlmIChzdGFydCA9PSBcImFuY2hvclwiKSB7IHBvcyA9IHJhbmdlLmFuY2hvcjsgfVxuICAgICAgZWxzZSBpZiAoc3RhcnQgPT0gXCJlbmRcIiB8fCBzdGFydCA9PSBcInRvXCIgfHwgc3RhcnQgPT09IGZhbHNlKSB7IHBvcyA9IHJhbmdlLnRvKCk7IH1cbiAgICAgIGVsc2UgeyBwb3MgPSByYW5nZS5mcm9tKCk7IH1cbiAgICAgIHJldHVybiBwb3NcbiAgICB9LFxuICAgIGxpc3RTZWxlY3Rpb25zOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2VsLnJhbmdlcyB9LFxuICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zZWwuc29tZXRoaW5nU2VsZWN0ZWQoKX0sXG5cbiAgICBzZXRDdXJzb3I6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGxpbmUsIGNoLCBvcHRpb25zKSB7XG4gICAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCB0eXBlb2YgbGluZSA9PSBcIm51bWJlclwiID8gUG9zKGxpbmUsIGNoIHx8IDApIDogbGluZSksIG51bGwsIG9wdGlvbnMpO1xuICAgIH0pLFxuICAgIHNldFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgICBzZXRTaW1wbGVTZWxlY3Rpb24odGhpcywgY2xpcFBvcyh0aGlzLCBhbmNob3IpLCBjbGlwUG9zKHRoaXMsIGhlYWQgfHwgYW5jaG9yKSwgb3B0aW9ucyk7XG4gICAgfSksXG4gICAgZXh0ZW5kU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbihoZWFkLCBvdGhlciwgb3B0aW9ucykge1xuICAgICAgZXh0ZW5kU2VsZWN0aW9uKHRoaXMsIGNsaXBQb3ModGhpcywgaGVhZCksIG90aGVyICYmIGNsaXBQb3ModGhpcywgb3RoZXIpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBleHRlbmRTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihoZWFkcywgb3B0aW9ucykge1xuICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBjbGlwUG9zQXJyYXkodGhpcywgaGVhZHMpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBleHRlbmRTZWxlY3Rpb25zQnk6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBoZWFkcyA9IG1hcCh0aGlzLnNlbC5yYW5nZXMsIGYpO1xuICAgICAgZXh0ZW5kU2VsZWN0aW9ucyh0aGlzLCBjbGlwUG9zQXJyYXkodGhpcywgaGVhZHMpLCBvcHRpb25zKTtcbiAgICB9KSxcbiAgICBzZXRTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihyYW5nZXMsIHByaW1hcnksIG9wdGlvbnMpIHtcbiAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCkgeyByZXR1cm4gfVxuICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgIHsgb3V0W2ldID0gbmV3IFJhbmdlKGNsaXBQb3ModGhpcywgcmFuZ2VzW2ldLmFuY2hvciksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUG9zKHRoaXMsIHJhbmdlc1tpXS5oZWFkKSk7IH1cbiAgICAgIGlmIChwcmltYXJ5ID09IG51bGwpIHsgcHJpbWFyeSA9IE1hdGgubWluKHJhbmdlcy5sZW5ndGggLSAxLCB0aGlzLnNlbC5wcmltSW5kZXgpOyB9XG4gICAgICBzZXRTZWxlY3Rpb24odGhpcywgbm9ybWFsaXplU2VsZWN0aW9uKHRoaXMuY20sIG91dCwgcHJpbWFyeSksIG9wdGlvbnMpO1xuICAgIH0pLFxuICAgIGFkZFNlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oYW5jaG9yLCBoZWFkLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKGNsaXBQb3ModGhpcywgYW5jaG9yKSwgY2xpcFBvcyh0aGlzLCBoZWFkIHx8IGFuY2hvcikpKTtcbiAgICAgIHNldFNlbGVjdGlvbih0aGlzLCBub3JtYWxpemVTZWxlY3Rpb24odGhpcy5jbSwgcmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gMSksIG9wdGlvbnMpO1xuICAgIH0pLFxuXG4gICAgZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsaW5lU2VwKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWwucmFuZ2VzLCBsaW5lcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTtcbiAgICAgICAgbGluZXMgPSBsaW5lcyA/IGxpbmVzLmNvbmNhdChzZWwpIDogc2VsO1xuICAgICAgfVxuICAgICAgaWYgKGxpbmVTZXAgPT09IGZhbHNlKSB7IHJldHVybiBsaW5lcyB9XG4gICAgICBlbHNlIHsgcmV0dXJuIGxpbmVzLmpvaW4obGluZVNlcCB8fCB0aGlzLmxpbmVTZXBhcmF0b3IoKSkgfVxuICAgIH0sXG4gICAgZ2V0U2VsZWN0aW9uczogZnVuY3Rpb24obGluZVNlcCkge1xuICAgICAgdmFyIHBhcnRzID0gW10sIHJhbmdlcyA9IHRoaXMuc2VsLnJhbmdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzZWwgPSBnZXRCZXR3ZWVuKHRoaXMsIHJhbmdlc1tpXS5mcm9tKCksIHJhbmdlc1tpXS50bygpKTtcbiAgICAgICAgaWYgKGxpbmVTZXAgIT09IGZhbHNlKSB7IHNlbCA9IHNlbC5qb2luKGxpbmVTZXAgfHwgdGhpcy5saW5lU2VwYXJhdG9yKCkpOyB9XG4gICAgICAgIHBhcnRzW2ldID0gc2VsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnRzXG4gICAgfSxcbiAgICByZXBsYWNlU2VsZWN0aW9uOiBmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7XG4gICAgICB2YXIgZHVwID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2VsLnJhbmdlcy5sZW5ndGg7IGkrKylcbiAgICAgICAgeyBkdXBbaV0gPSBjb2RlOyB9XG4gICAgICB0aGlzLnJlcGxhY2VTZWxlY3Rpb25zKGR1cCwgY29sbGFwc2UsIG9yaWdpbiB8fCBcIitpbnB1dFwiKTtcbiAgICB9LFxuICAgIHJlcGxhY2VTZWxlY3Rpb25zOiBkb2NNZXRob2RPcChmdW5jdGlvbihjb2RlLCBjb2xsYXBzZSwgb3JpZ2luKSB7XG4gICAgICB2YXIgY2hhbmdlcyA9IFtdLCBzZWwgPSB0aGlzLnNlbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsLnJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldO1xuICAgICAgICBjaGFuZ2VzW2ldID0ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCksIHRleHQ6IHRoaXMuc3BsaXRMaW5lcyhjb2RlW2ldKSwgb3JpZ2luOiBvcmlnaW59O1xuICAgICAgfVxuICAgICAgdmFyIG5ld1NlbCA9IGNvbGxhcHNlICYmIGNvbGxhcHNlICE9IFwiZW5kXCIgJiYgY29tcHV0ZVJlcGxhY2VkU2VsKHRoaXMsIGNoYW5nZXMsIGNvbGxhcHNlKTtcbiAgICAgIGZvciAodmFyIGkkMSA9IGNoYW5nZXMubGVuZ3RoIC0gMTsgaSQxID49IDA7IGkkMS0tKVxuICAgICAgICB7IG1ha2VDaGFuZ2UodGhpcywgY2hhbmdlc1tpJDFdKTsgfVxuICAgICAgaWYgKG5ld1NlbCkgeyBzZXRTZWxlY3Rpb25SZXBsYWNlSGlzdG9yeSh0aGlzLCBuZXdTZWwpOyB9XG4gICAgICBlbHNlIGlmICh0aGlzLmNtKSB7IGVuc3VyZUN1cnNvclZpc2libGUodGhpcy5jbSk7IH1cbiAgICB9KSxcbiAgICB1bmRvOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJ1bmRvXCIpO30pLFxuICAgIHJlZG86IGRvY01ldGhvZE9wKGZ1bmN0aW9uKCkge21ha2VDaGFuZ2VGcm9tSGlzdG9yeSh0aGlzLCBcInJlZG9cIik7fSksXG4gICAgdW5kb1NlbGVjdGlvbjogZG9jTWV0aG9kT3AoZnVuY3Rpb24oKSB7bWFrZUNoYW5nZUZyb21IaXN0b3J5KHRoaXMsIFwidW5kb1wiLCB0cnVlKTt9KSxcbiAgICByZWRvU2VsZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbigpIHttYWtlQ2hhbmdlRnJvbUhpc3RvcnkodGhpcywgXCJyZWRvXCIsIHRydWUpO30pLFxuXG4gICAgc2V0RXh0ZW5kaW5nOiBmdW5jdGlvbih2YWwpIHt0aGlzLmV4dGVuZCA9IHZhbDt9LFxuICAgIGdldEV4dGVuZGluZzogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZXh0ZW5kfSxcblxuICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBoaXN0ID0gdGhpcy5oaXN0b3J5LCBkb25lID0gMCwgdW5kb25lID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlzdC5kb25lLmxlbmd0aDsgaSsrKSB7IGlmICghaGlzdC5kb25lW2ldLnJhbmdlcykgeyArK2RvbmU7IH0gfVxuICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgaGlzdC51bmRvbmUubGVuZ3RoOyBpJDErKykgeyBpZiAoIWhpc3QudW5kb25lW2kkMV0ucmFuZ2VzKSB7ICsrdW5kb25lOyB9IH1cbiAgICAgIHJldHVybiB7dW5kbzogZG9uZSwgcmVkbzogdW5kb25lfVxuICAgIH0sXG4gICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7XG4gICAgICBsaW5rZWREb2NzKHRoaXMsIGZ1bmN0aW9uIChkb2MpIHsgcmV0dXJuIGRvYy5oaXN0b3J5ID0gdGhpcyQxLmhpc3Rvcnk7IH0sIHRydWUpO1xuICAgIH0sXG5cbiAgICBtYXJrQ2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jbGVhbkdlbmVyYXRpb24gPSB0aGlzLmNoYW5nZUdlbmVyYXRpb24odHJ1ZSk7XG4gICAgfSxcbiAgICBjaGFuZ2VHZW5lcmF0aW9uOiBmdW5jdGlvbihmb3JjZVNwbGl0KSB7XG4gICAgICBpZiAoZm9yY2VTcGxpdClcbiAgICAgICAgeyB0aGlzLmhpc3RvcnkubGFzdE9wID0gdGhpcy5oaXN0b3J5Lmxhc3RTZWxPcCA9IHRoaXMuaGlzdG9yeS5sYXN0T3JpZ2luID0gbnVsbDsgfVxuICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeS5nZW5lcmF0aW9uXG4gICAgfSxcbiAgICBpc0NsZWFuOiBmdW5jdGlvbiAoZ2VuKSB7XG4gICAgICByZXR1cm4gdGhpcy5oaXN0b3J5LmdlbmVyYXRpb24gPT0gKGdlbiB8fCB0aGlzLmNsZWFuR2VuZXJhdGlvbilcbiAgICB9LFxuXG4gICAgZ2V0SGlzdG9yeTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2RvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LmRvbmUpLFxuICAgICAgICAgICAgICB1bmRvbmU6IGNvcHlIaXN0b3J5QXJyYXkodGhpcy5oaXN0b3J5LnVuZG9uZSl9XG4gICAgfSxcbiAgICBzZXRIaXN0b3J5OiBmdW5jdGlvbihoaXN0RGF0YSkge1xuICAgICAgdmFyIGhpc3QgPSB0aGlzLmhpc3RvcnkgPSBuZXcgSGlzdG9yeSh0aGlzLmhpc3RvcnkubWF4R2VuZXJhdGlvbik7XG4gICAgICBoaXN0LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLmRvbmUuc2xpY2UoMCksIG51bGwsIHRydWUpO1xuICAgICAgaGlzdC51bmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KGhpc3REYXRhLnVuZG9uZS5zbGljZSgwKSwgbnVsbCwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIHNldEd1dHRlck1hcmtlcjogZG9jTWV0aG9kT3AoZnVuY3Rpb24obGluZSwgZ3V0dGVySUQsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBsaW5lLCBcImd1dHRlclwiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgbWFya2VycyA9IGxpbmUuZ3V0dGVyTWFya2VycyB8fCAobGluZS5ndXR0ZXJNYXJrZXJzID0ge30pO1xuICAgICAgICBtYXJrZXJzW2d1dHRlcklEXSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXZhbHVlICYmIGlzRW1wdHkobWFya2VycykpIHsgbGluZS5ndXR0ZXJNYXJrZXJzID0gbnVsbDsgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSlcbiAgICB9KSxcblxuICAgIGNsZWFyR3V0dGVyOiBkb2NNZXRob2RPcChmdW5jdGlvbihndXR0ZXJJRCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICBpZiAobGluZS5ndXR0ZXJNYXJrZXJzICYmIGxpbmUuZ3V0dGVyTWFya2Vyc1tndXR0ZXJJRF0pIHtcbiAgICAgICAgICBjaGFuZ2VMaW5lKHRoaXMkMSwgbGluZSwgXCJndXR0ZXJcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGluZS5ndXR0ZXJNYXJrZXJzW2d1dHRlcklEXSA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShsaW5lLmd1dHRlck1hcmtlcnMpKSB7IGxpbmUuZ3V0dGVyTWFya2VycyA9IG51bGw7IH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pLFxuXG4gICAgbGluZUluZm86IGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHZhciBuO1xuICAgICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKCFpc0xpbmUodGhpcywgbGluZSkpIHsgcmV0dXJuIG51bGwgfVxuICAgICAgICBuID0gbGluZTtcbiAgICAgICAgbGluZSA9IGdldExpbmUodGhpcywgbGluZSk7XG4gICAgICAgIGlmICghbGluZSkgeyByZXR1cm4gbnVsbCB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuID0gbGluZU5vKGxpbmUpO1xuICAgICAgICBpZiAobiA9PSBudWxsKSB7IHJldHVybiBudWxsIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7bGluZTogbiwgaGFuZGxlOiBsaW5lLCB0ZXh0OiBsaW5lLnRleHQsIGd1dHRlck1hcmtlcnM6IGxpbmUuZ3V0dGVyTWFya2VycyxcbiAgICAgICAgICAgICAgdGV4dENsYXNzOiBsaW5lLnRleHRDbGFzcywgYmdDbGFzczogbGluZS5iZ0NsYXNzLCB3cmFwQ2xhc3M6IGxpbmUud3JhcENsYXNzLFxuICAgICAgICAgICAgICB3aWRnZXRzOiBsaW5lLndpZGdldHN9XG4gICAgfSxcblxuICAgIGFkZExpbmVDbGFzczogZG9jTWV0aG9kT3AoZnVuY3Rpb24oaGFuZGxlLCB3aGVyZSwgY2xzKSB7XG4gICAgICByZXR1cm4gY2hhbmdlTGluZSh0aGlzLCBoYW5kbGUsIHdoZXJlID09IFwiZ3V0dGVyXCIgPyBcImd1dHRlclwiIDogXCJjbGFzc1wiLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgcHJvcCA9IHdoZXJlID09IFwidGV4dFwiID8gXCJ0ZXh0Q2xhc3NcIlxuICAgICAgICAgICAgICAgICA6IHdoZXJlID09IFwiYmFja2dyb3VuZFwiID8gXCJiZ0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJDbGFzc1wiIDogXCJ3cmFwQ2xhc3NcIjtcbiAgICAgICAgaWYgKCFsaW5lW3Byb3BdKSB7IGxpbmVbcHJvcF0gPSBjbHM7IH1cbiAgICAgICAgZWxzZSBpZiAoY2xhc3NUZXN0KGNscykudGVzdChsaW5lW3Byb3BdKSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICBlbHNlIHsgbGluZVtwcm9wXSArPSBcIiBcIiArIGNsczsgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSlcbiAgICB9KSxcbiAgICByZW1vdmVMaW5lQ2xhc3M6IGRvY01ldGhvZE9wKGZ1bmN0aW9uKGhhbmRsZSwgd2hlcmUsIGNscykge1xuICAgICAgcmV0dXJuIGNoYW5nZUxpbmUodGhpcywgaGFuZGxlLCB3aGVyZSA9PSBcImd1dHRlclwiID8gXCJndXR0ZXJcIiA6IFwiY2xhc3NcIiwgZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgdmFyIHByb3AgPSB3aGVyZSA9PSBcInRleHRcIiA/IFwidGV4dENsYXNzXCJcbiAgICAgICAgICAgICAgICAgOiB3aGVyZSA9PSBcImJhY2tncm91bmRcIiA/IFwiYmdDbGFzc1wiXG4gICAgICAgICAgICAgICAgIDogd2hlcmUgPT0gXCJndXR0ZXJcIiA/IFwiZ3V0dGVyQ2xhc3NcIiA6IFwid3JhcENsYXNzXCI7XG4gICAgICAgIHZhciBjdXIgPSBsaW5lW3Byb3BdO1xuICAgICAgICBpZiAoIWN1cikgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICBlbHNlIGlmIChjbHMgPT0gbnVsbCkgeyBsaW5lW3Byb3BdID0gbnVsbDsgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgZm91bmQgPSBjdXIubWF0Y2goY2xhc3NUZXN0KGNscykpO1xuICAgICAgICAgIGlmICghZm91bmQpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICB2YXIgZW5kID0gZm91bmQuaW5kZXggKyBmb3VuZFswXS5sZW5ndGg7XG4gICAgICAgICAgbGluZVtwcm9wXSA9IGN1ci5zbGljZSgwLCBmb3VuZC5pbmRleCkgKyAoIWZvdW5kLmluZGV4IHx8IGVuZCA9PSBjdXIubGVuZ3RoID8gXCJcIiA6IFwiIFwiKSArIGN1ci5zbGljZShlbmQpIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSksXG5cbiAgICBhZGRMaW5lV2lkZ2V0OiBkb2NNZXRob2RPcChmdW5jdGlvbihoYW5kbGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhZGRMaW5lV2lkZ2V0KHRoaXMsIGhhbmRsZSwgbm9kZSwgb3B0aW9ucylcbiAgICB9KSxcbiAgICByZW1vdmVMaW5lV2lkZ2V0OiBmdW5jdGlvbih3aWRnZXQpIHsgd2lkZ2V0LmNsZWFyKCk7IH0sXG5cbiAgICBtYXJrVGV4dDogZnVuY3Rpb24oZnJvbSwgdG8sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBjbGlwUG9zKHRoaXMsIGZyb20pLCBjbGlwUG9zKHRoaXMsIHRvKSwgb3B0aW9ucywgb3B0aW9ucyAmJiBvcHRpb25zLnR5cGUgfHwgXCJyYW5nZVwiKVxuICAgIH0sXG4gICAgc2V0Qm9va21hcms6IGZ1bmN0aW9uKHBvcywgb3B0aW9ucykge1xuICAgICAgdmFyIHJlYWxPcHRzID0ge3JlcGxhY2VkV2l0aDogb3B0aW9ucyAmJiAob3B0aW9ucy5ub2RlVHlwZSA9PSBudWxsID8gb3B0aW9ucy53aWRnZXQgOiBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMZWZ0OiBvcHRpb25zICYmIG9wdGlvbnMuaW5zZXJ0TGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICBjbGVhcldoZW5FbXB0eTogZmFsc2UsIHNoYXJlZDogb3B0aW9ucyAmJiBvcHRpb25zLnNoYXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVNb3VzZUV2ZW50czogb3B0aW9ucyAmJiBvcHRpb25zLmhhbmRsZU1vdXNlRXZlbnRzfTtcbiAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTtcbiAgICAgIHJldHVybiBtYXJrVGV4dCh0aGlzLCBwb3MsIHBvcywgcmVhbE9wdHMsIFwiYm9va21hcmtcIilcbiAgICB9LFxuICAgIGZpbmRNYXJrc0F0OiBmdW5jdGlvbihwb3MpIHtcbiAgICAgIHBvcyA9IGNsaXBQb3ModGhpcywgcG9zKTtcbiAgICAgIHZhciBtYXJrZXJzID0gW10sIHNwYW5zID0gZ2V0TGluZSh0aGlzLCBwb3MubGluZSkubWFya2VkU3BhbnM7XG4gICAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgc3BhbiA9IHNwYW5zW2ldO1xuICAgICAgICBpZiAoKHNwYW4uZnJvbSA9PSBudWxsIHx8IHNwYW4uZnJvbSA8PSBwb3MuY2gpICYmXG4gICAgICAgICAgICAoc3Bhbi50byA9PSBudWxsIHx8IHNwYW4udG8gPj0gcG9zLmNoKSlcbiAgICAgICAgICB7IG1hcmtlcnMucHVzaChzcGFuLm1hcmtlci5wYXJlbnQgfHwgc3Bhbi5tYXJrZXIpOyB9XG4gICAgICB9IH1cbiAgICAgIHJldHVybiBtYXJrZXJzXG4gICAgfSxcbiAgICBmaW5kTWFya3M6IGZ1bmN0aW9uKGZyb20sIHRvLCBmaWx0ZXIpIHtcbiAgICAgIGZyb20gPSBjbGlwUG9zKHRoaXMsIGZyb20pOyB0byA9IGNsaXBQb3ModGhpcywgdG8pO1xuICAgICAgdmFyIGZvdW5kID0gW10sIGxpbmVObyA9IGZyb20ubGluZTtcbiAgICAgIHRoaXMuaXRlcihmcm9tLmxpbmUsIHRvLmxpbmUgKyAxLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgc3BhbnMgPSBsaW5lLm1hcmtlZFNwYW5zO1xuICAgICAgICBpZiAoc3BhbnMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBzcGFuID0gc3BhbnNbaV07XG4gICAgICAgICAgaWYgKCEoc3Bhbi50byAhPSBudWxsICYmIGxpbmVObyA9PSBmcm9tLmxpbmUgJiYgZnJvbS5jaCA+PSBzcGFuLnRvIHx8XG4gICAgICAgICAgICAgICAgc3Bhbi5mcm9tID09IG51bGwgJiYgbGluZU5vICE9IGZyb20ubGluZSB8fFxuICAgICAgICAgICAgICAgIHNwYW4uZnJvbSAhPSBudWxsICYmIGxpbmVObyA9PSB0by5saW5lICYmIHNwYW4uZnJvbSA+PSB0by5jaCkgJiZcbiAgICAgICAgICAgICAgKCFmaWx0ZXIgfHwgZmlsdGVyKHNwYW4ubWFya2VyKSkpXG4gICAgICAgICAgICB7IGZvdW5kLnB1c2goc3Bhbi5tYXJrZXIucGFyZW50IHx8IHNwYW4ubWFya2VyKTsgfVxuICAgICAgICB9IH1cbiAgICAgICAgKytsaW5lTm87XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmb3VuZFxuICAgIH0sXG4gICAgZ2V0QWxsTWFya3M6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG1hcmtlcnMgPSBbXTtcbiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgc3BzID0gbGluZS5tYXJrZWRTcGFucztcbiAgICAgICAgaWYgKHNwcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHNwcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICB7IGlmIChzcHNbaV0uZnJvbSAhPSBudWxsKSB7IG1hcmtlcnMucHVzaChzcHNbaV0ubWFya2VyKTsgfSB9IH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1hcmtlcnNcbiAgICB9LFxuXG4gICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHtcbiAgICAgIHZhciBjaCwgbGluZU5vID0gdGhpcy5maXJzdCwgc2VwU2l6ZSA9IHRoaXMubGluZVNlcGFyYXRvcigpLmxlbmd0aDtcbiAgICAgIHRoaXMuaXRlcihmdW5jdGlvbiAobGluZSkge1xuICAgICAgICB2YXIgc3ogPSBsaW5lLnRleHQubGVuZ3RoICsgc2VwU2l6ZTtcbiAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZSB9XG4gICAgICAgIG9mZiAtPSBzejtcbiAgICAgICAgKytsaW5lTm87XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjbGlwUG9zKHRoaXMsIFBvcyhsaW5lTm8sIGNoKSlcbiAgICB9LFxuICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgY29vcmRzID0gY2xpcFBvcyh0aGlzLCBjb29yZHMpO1xuICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNoO1xuICAgICAgaWYgKGNvb3Jkcy5saW5lIDwgdGhpcy5maXJzdCB8fCBjb29yZHMuY2ggPCAwKSB7IHJldHVybiAwIH1cbiAgICAgIHZhciBzZXBTaXplID0gdGhpcy5saW5lU2VwYXJhdG9yKCkubGVuZ3RoO1xuICAgICAgdGhpcy5pdGVyKHRoaXMuZmlyc3QsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgeyAvLyBpdGVyIGFib3J0cyB3aGVuIGNhbGxiYWNrIHJldHVybnMgYSB0cnV0aHkgdmFsdWVcbiAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIHNlcFNpemU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleFxuICAgIH0sXG5cbiAgICBjb3B5OiBmdW5jdGlvbihjb3B5SGlzdG9yeSkge1xuICAgICAgdmFyIGRvYyA9IG5ldyBEb2MoZ2V0TGluZXModGhpcywgdGhpcy5maXJzdCwgdGhpcy5maXJzdCArIHRoaXMuc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVPcHRpb24sIHRoaXMuZmlyc3QsIHRoaXMubGluZVNlcCwgdGhpcy5kaXJlY3Rpb24pO1xuICAgICAgZG9jLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wOyBkb2Muc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDtcbiAgICAgIGRvYy5zZWwgPSB0aGlzLnNlbDtcbiAgICAgIGRvYy5leHRlbmQgPSBmYWxzZTtcbiAgICAgIGlmIChjb3B5SGlzdG9yeSkge1xuICAgICAgICBkb2MuaGlzdG9yeS51bmRvRGVwdGggPSB0aGlzLmhpc3RvcnkudW5kb0RlcHRoO1xuICAgICAgICBkb2Muc2V0SGlzdG9yeSh0aGlzLmdldEhpc3RvcnkoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9jXG4gICAgfSxcblxuICAgIGxpbmtlZERvYzogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgaWYgKCFvcHRpb25zKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgdmFyIGZyb20gPSB0aGlzLmZpcnN0LCB0byA9IHRoaXMuZmlyc3QgKyB0aGlzLnNpemU7XG4gICAgICBpZiAob3B0aW9ucy5mcm9tICE9IG51bGwgJiYgb3B0aW9ucy5mcm9tID4gZnJvbSkgeyBmcm9tID0gb3B0aW9ucy5mcm9tOyB9XG4gICAgICBpZiAob3B0aW9ucy50byAhPSBudWxsICYmIG9wdGlvbnMudG8gPCB0bykgeyB0byA9IG9wdGlvbnMudG87IH1cbiAgICAgIHZhciBjb3B5ID0gbmV3IERvYyhnZXRMaW5lcyh0aGlzLCBmcm9tLCB0byksIG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGVPcHRpb24sIGZyb20sIHRoaXMubGluZVNlcCwgdGhpcy5kaXJlY3Rpb24pO1xuICAgICAgaWYgKG9wdGlvbnMuc2hhcmVkSGlzdCkgeyBjb3B5Lmhpc3RvcnkgPSB0aGlzLmhpc3RvcnlcbiAgICAgIDsgfSh0aGlzLmxpbmtlZCB8fCAodGhpcy5saW5rZWQgPSBbXSkpLnB1c2goe2RvYzogY29weSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fSk7XG4gICAgICBjb3B5LmxpbmtlZCA9IFt7ZG9jOiB0aGlzLCBpc1BhcmVudDogdHJ1ZSwgc2hhcmVkSGlzdDogb3B0aW9ucy5zaGFyZWRIaXN0fV07XG4gICAgICBjb3B5U2hhcmVkTWFya2Vycyhjb3B5LCBmaW5kU2hhcmVkTWFya2Vycyh0aGlzKSk7XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG4gICAgdW5saW5rRG9jOiBmdW5jdGlvbihvdGhlcikge1xuICAgICAgaWYgKG90aGVyIGluc3RhbmNlb2YgQ29kZU1pcnJvcikgeyBvdGhlciA9IG90aGVyLmRvYzsgfVxuICAgICAgaWYgKHRoaXMubGlua2VkKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5rZWQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGxpbmsgPSB0aGlzLmxpbmtlZFtpXTtcbiAgICAgICAgaWYgKGxpbmsuZG9jICE9IG90aGVyKSB7IGNvbnRpbnVlIH1cbiAgICAgICAgdGhpcy5saW5rZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICBvdGhlci51bmxpbmtEb2ModGhpcyk7XG4gICAgICAgIGRldGFjaFNoYXJlZE1hcmtlcnMoZmluZFNoYXJlZE1hcmtlcnModGhpcykpO1xuICAgICAgICBicmVha1xuICAgICAgfSB9XG4gICAgICAvLyBJZiB0aGUgaGlzdG9yaWVzIHdlcmUgc2hhcmVkLCBzcGxpdCB0aGVtIGFnYWluXG4gICAgICBpZiAob3RoZXIuaGlzdG9yeSA9PSB0aGlzLmhpc3RvcnkpIHtcbiAgICAgICAgdmFyIHNwbGl0SWRzID0gW290aGVyLmlkXTtcbiAgICAgICAgbGlua2VkRG9jcyhvdGhlciwgZnVuY3Rpb24gKGRvYykgeyByZXR1cm4gc3BsaXRJZHMucHVzaChkb2MuaWQpOyB9LCB0cnVlKTtcbiAgICAgICAgb3RoZXIuaGlzdG9yeSA9IG5ldyBIaXN0b3J5KG51bGwpO1xuICAgICAgICBvdGhlci5oaXN0b3J5LmRvbmUgPSBjb3B5SGlzdG9yeUFycmF5KHRoaXMuaGlzdG9yeS5kb25lLCBzcGxpdElkcyk7XG4gICAgICAgIG90aGVyLmhpc3RvcnkudW5kb25lID0gY29weUhpc3RvcnlBcnJheSh0aGlzLmhpc3RvcnkudW5kb25lLCBzcGxpdElkcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpdGVyTGlua2VkRG9jczogZnVuY3Rpb24oZikge2xpbmtlZERvY3ModGhpcywgZik7fSxcblxuICAgIGdldE1vZGU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLm1vZGV9LFxuICAgIGdldEVkaXRvcjogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuY219LFxuXG4gICAgc3BsaXRMaW5lczogZnVuY3Rpb24oc3RyKSB7XG4gICAgICBpZiAodGhpcy5saW5lU2VwKSB7IHJldHVybiBzdHIuc3BsaXQodGhpcy5saW5lU2VwKSB9XG4gICAgICByZXR1cm4gc3BsaXRMaW5lc0F1dG8oc3RyKVxuICAgIH0sXG4gICAgbGluZVNlcGFyYXRvcjogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVTZXAgfHwgXCJcXG5cIiB9LFxuXG4gICAgc2V0RGlyZWN0aW9uOiBkb2NNZXRob2RPcChmdW5jdGlvbiAoZGlyKSB7XG4gICAgICBpZiAoZGlyICE9IFwicnRsXCIpIHsgZGlyID0gXCJsdHJcIjsgfVxuICAgICAgaWYgKGRpciA9PSB0aGlzLmRpcmVjdGlvbikgeyByZXR1cm4gfVxuICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXI7XG4gICAgICB0aGlzLml0ZXIoZnVuY3Rpb24gKGxpbmUpIHsgcmV0dXJuIGxpbmUub3JkZXIgPSBudWxsOyB9KTtcbiAgICAgIGlmICh0aGlzLmNtKSB7IGRpcmVjdGlvbkNoYW5nZWQodGhpcy5jbSk7IH1cbiAgICB9KVxuICB9KTtcblxuICAvLyBQdWJsaWMgYWxpYXMuXG4gIERvYy5wcm90b3R5cGUuZWFjaExpbmUgPSBEb2MucHJvdG90eXBlLml0ZXI7XG5cbiAgLy8gS2x1ZGdlIHRvIHdvcmsgYXJvdW5kIHN0cmFuZ2UgSUUgYmVoYXZpb3Igd2hlcmUgaXQnbGwgc29tZXRpbWVzXG4gIC8vIHJlLWZpcmUgYSBzZXJpZXMgb2YgZHJhZy1yZWxhdGVkIGV2ZW50cyByaWdodCBhZnRlciB0aGUgZHJvcCAoIzE1NTEpXG4gIHZhciBsYXN0RHJvcCA9IDA7XG5cbiAgZnVuY3Rpb24gb25Ecm9wKGUpIHtcbiAgICB2YXIgY20gPSB0aGlzO1xuICAgIGNsZWFyRHJhZ0N1cnNvcihjbSk7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpKVxuICAgICAgeyByZXR1cm4gfVxuICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgaWYgKGllKSB7IGxhc3REcm9wID0gK25ldyBEYXRlOyB9XG4gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSwgdHJ1ZSksIGZpbGVzID0gZS5kYXRhVHJhbnNmZXIuZmlsZXM7XG4gICAgaWYgKCFwb3MgfHwgY20uaXNSZWFkT25seSgpKSB7IHJldHVybiB9XG4gICAgLy8gTWlnaHQgYmUgYSBmaWxlIGRyb3AsIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IGV4dHJhY3QgdGhlIHRleHRcbiAgICAvLyBhbmQgaW5zZXJ0IGl0LlxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHtcbiAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwO1xuICAgICAgdmFyIG1hcmtBc1JlYWRBbmRQYXN0ZUlmQWxsRmlsZXNBcmVSZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoKytyZWFkID09IG4pIHtcbiAgICAgICAgICBvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHBvcyA9IGNsaXBQb3MoY20uZG9jLCBwb3MpO1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IHtmcm9tOiBwb3MsIHRvOiBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGNtLmRvYy5zcGxpdExpbmVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5maWx0ZXIoZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQgIT0gbnVsbDsgfSkuam9pbihjbS5kb2MubGluZVNlcGFyYXRvcigpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJwYXN0ZVwifTtcbiAgICAgICAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2UpO1xuICAgICAgICAgICAgc2V0U2VsZWN0aW9uUmVwbGFjZUhpc3RvcnkoY20uZG9jLCBzaW1wbGVTZWxlY3Rpb24oY2xpcFBvcyhjbS5kb2MsIHBvcyksIGNsaXBQb3MoY20uZG9jLCBjaGFuZ2VFbmQoY2hhbmdlKSkpKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIHJlYWRUZXh0RnJvbUZpbGUgPSBmdW5jdGlvbiAoZmlsZSwgaSkge1xuICAgICAgICBpZiAoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMgJiZcbiAgICAgICAgICAgIGluZGV4T2YoY20ub3B0aW9ucy5hbGxvd0Ryb3BGaWxlVHlwZXMsIGZpbGUudHlwZSkgPT0gLTEpIHtcbiAgICAgICAgICBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCgpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcjtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCgpOyB9O1xuICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBjb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICBpZiAoL1tcXHgwMC1cXHgwOFxceDBlLVxceDFmXXsyfS8udGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgbWFya0FzUmVhZEFuZFBhc3RlSWZBbGxGaWxlc0FyZVJlYWQoKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICB0ZXh0W2ldID0gY29udGVudDtcbiAgICAgICAgICBtYXJrQXNSZWFkQW5kUGFzdGVJZkFsbEZpbGVzQXJlUmVhZCgpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgIH07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7IHJlYWRUZXh0RnJvbUZpbGUoZmlsZXNbaV0sIGkpOyB9XG4gICAgfSBlbHNlIHsgLy8gTm9ybWFsIGRyb3BcbiAgICAgIC8vIERvbid0IGRvIGEgcmVwbGFjZSBpZiB0aGUgZHJvcCBoYXBwZW5lZCBpbnNpZGUgb2YgdGhlIHNlbGVjdGVkIHRleHQuXG4gICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmIGNtLmRvYy5zZWwuY29udGFpbnMocG9zKSA+IC0xKSB7XG4gICAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dChlKTtcbiAgICAgICAgLy8gRW5zdXJlIHRoZSBlZGl0b3IgaXMgcmUtZm9jdXNlZFxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMjApO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciB0ZXh0JDEgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKFwiVGV4dFwiKTtcbiAgICAgICAgaWYgKHRleHQkMSkge1xuICAgICAgICAgIHZhciBzZWxlY3RlZDtcbiAgICAgICAgICBpZiAoY20uc3RhdGUuZHJhZ2dpbmdUZXh0ICYmICFjbS5zdGF0ZS5kcmFnZ2luZ1RleHQuY29weSlcbiAgICAgICAgICAgIHsgc2VsZWN0ZWQgPSBjbS5saXN0U2VsZWN0aW9ucygpOyB9XG4gICAgICAgICAgc2V0U2VsZWN0aW9uTm9VbmRvKGNtLmRvYywgc2ltcGxlU2VsZWN0aW9uKHBvcywgcG9zKSk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkKSB7IGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHNlbGVjdGVkLmxlbmd0aDsgKytpJDEpXG4gICAgICAgICAgICB7IHJlcGxhY2VSYW5nZShjbS5kb2MsIFwiXCIsIHNlbGVjdGVkW2kkMV0uYW5jaG9yLCBzZWxlY3RlZFtpJDFdLmhlYWQsIFwiZHJhZ1wiKTsgfSB9XG4gICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbih0ZXh0JDEsIFwiYXJvdW5kXCIsIFwicGFzdGVcIik7XG4gICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXRjaChlJDEpe31cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkRyYWdTdGFydChjbSwgZSkge1xuICAgIGlmIChpZSAmJiAoIWNtLnN0YXRlLmRyYWdnaW5nVGV4dCB8fCArbmV3IERhdGUgLSBsYXN0RHJvcCA8IDEwMCkpIHsgZV9zdG9wKGUpOyByZXR1cm4gfVxuICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkgfHwgZXZlbnRJbldpZGdldChjbS5kaXNwbGF5LCBlKSkgeyByZXR1cm4gfVxuXG4gICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YShcIlRleHRcIiwgY20uZ2V0U2VsZWN0aW9uKCkpO1xuICAgIGUuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBcImNvcHlNb3ZlXCI7XG5cbiAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLlxuICAgIC8vIFJlY2VudCBTYWZhcmkgKH42LjAuMikgaGF2ZSBhIHRlbmRlbmN5IHRvIHNlZ2ZhdWx0IHdoZW4gdGhpcyBoYXBwZW5zLCBzbyB3ZSBkb24ndCBkbyBpdCB0aGVyZS5cbiAgICBpZiAoZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmICFzYWZhcmkpIHtcbiAgICAgIHZhciBpbWcgPSBlbHQoXCJpbWdcIiwgbnVsbCwgbnVsbCwgXCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHRvcDogMDtcIik7XG4gICAgICBpbWcuc3JjID0gXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiO1xuICAgICAgaWYgKHByZXN0bykge1xuICAgICAgICBpbWcud2lkdGggPSBpbWcuaGVpZ2h0ID0gMTtcbiAgICAgICAgY20uZGlzcGxheS53cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XG4gICAgICAgIC8vIEZvcmNlIGEgcmVsYXlvdXQsIG9yIE9wZXJhIHdvbid0IHVzZSBvdXIgaW1hZ2UgZm9yIHNvbWUgb2JzY3VyZSByZWFzb25cbiAgICAgICAgaW1nLl90b3AgPSBpbWcub2Zmc2V0VG9wO1xuICAgICAgfVxuICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7XG4gICAgICBpZiAocHJlc3RvKSB7IGltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGltZyk7IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkRyYWdPdmVyKGNtLCBlKSB7XG4gICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7XG4gICAgaWYgKCFwb3MpIHsgcmV0dXJuIH1cbiAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBkcmF3U2VsZWN0aW9uQ3Vyc29yKGNtLCBwb3MsIGZyYWcpO1xuICAgIGlmICghY20uZGlzcGxheS5kcmFnQ3Vyc29yKSB7XG4gICAgICBjbS5kaXNwbGF5LmRyYWdDdXJzb3IgPSBlbHQoXCJkaXZcIiwgbnVsbCwgXCJDb2RlTWlycm9yLWN1cnNvcnMgQ29kZU1pcnJvci1kcmFnY3Vyc29yc1wiKTtcbiAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLmluc2VydEJlZm9yZShjbS5kaXNwbGF5LmRyYWdDdXJzb3IsIGNtLmRpc3BsYXkuY3Vyc29yRGl2KTtcbiAgICB9XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQoY20uZGlzcGxheS5kcmFnQ3Vyc29yLCBmcmFnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyRHJhZ0N1cnNvcihjbSkge1xuICAgIGlmIChjbS5kaXNwbGF5LmRyYWdDdXJzb3IpIHtcbiAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGNtLmRpc3BsYXkuZHJhZ0N1cnNvcik7XG4gICAgICBjbS5kaXNwbGF5LmRyYWdDdXJzb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCBjYXJlZnVsbHksIGJlY2F1c2UgbmFpdmVseSByZWdpc3RlcmluZyBhXG4gIC8vIGhhbmRsZXIgZm9yIGVhY2ggZWRpdG9yIHdpbGwgY2F1c2UgdGhlIGVkaXRvcnMgdG8gbmV2ZXIgYmVcbiAgLy8gZ2FyYmFnZSBjb2xsZWN0ZWQuXG5cbiAgZnVuY3Rpb24gZm9yRWFjaENvZGVNaXJyb3IoZikge1xuICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSkgeyByZXR1cm4gfVxuICAgIHZhciBieUNsYXNzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIkNvZGVNaXJyb3JcIiksIGVkaXRvcnMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5Q2xhc3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjbSA9IGJ5Q2xhc3NbaV0uQ29kZU1pcnJvcjtcbiAgICAgIGlmIChjbSkgeyBlZGl0b3JzLnB1c2goY20pOyB9XG4gICAgfVxuICAgIGlmIChlZGl0b3JzLmxlbmd0aCkgeyBlZGl0b3JzWzBdLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkaXRvcnMubGVuZ3RoOyBpKyspIHsgZihlZGl0b3JzW2ldKTsgfVxuICAgIH0pOyB9XG4gIH1cblxuICB2YXIgZ2xvYmFsc1JlZ2lzdGVyZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZW5zdXJlR2xvYmFsSGFuZGxlcnMoKSB7XG4gICAgaWYgKGdsb2JhbHNSZWdpc3RlcmVkKSB7IHJldHVybiB9XG4gICAgcmVnaXN0ZXJHbG9iYWxIYW5kbGVycygpO1xuICAgIGdsb2JhbHNSZWdpc3RlcmVkID0gdHJ1ZTtcbiAgfVxuICBmdW5jdGlvbiByZWdpc3Rlckdsb2JhbEhhbmRsZXJzKCkge1xuICAgIC8vIFdoZW4gdGhlIHdpbmRvdyByZXNpemVzLCB3ZSBuZWVkIHRvIHJlZnJlc2ggYWN0aXZlIGVkaXRvcnMuXG4gICAgdmFyIHJlc2l6ZVRpbWVyO1xuICAgIG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHJlc2l6ZVRpbWVyID09IG51bGwpIHsgcmVzaXplVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVzaXplVGltZXIgPSBudWxsO1xuICAgICAgICBmb3JFYWNoQ29kZU1pcnJvcihvblJlc2l6ZSk7XG4gICAgICB9LCAxMDApOyB9XG4gICAgfSk7XG4gICAgLy8gV2hlbiB0aGUgd2luZG93IGxvc2VzIGZvY3VzLCB3ZSB3YW50IHRvIHNob3cgdGhlIGVkaXRvciBhcyBibHVycmVkXG4gICAgb24od2luZG93LCBcImJsdXJcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZm9yRWFjaENvZGVNaXJyb3Iob25CbHVyKTsgfSk7XG4gIH1cbiAgLy8gQ2FsbGVkIHdoZW4gdGhlIHdpbmRvdyByZXNpemVzXG4gIGZ1bmN0aW9uIG9uUmVzaXplKGNtKSB7XG4gICAgdmFyIGQgPSBjbS5kaXNwbGF5O1xuICAgIC8vIE1pZ2h0IGJlIGEgdGV4dCBzY2FsaW5nIG9wZXJhdGlvbiwgY2xlYXIgc2l6ZSBjYWNoZXMuXG4gICAgZC5jYWNoZWRDaGFyV2lkdGggPSBkLmNhY2hlZFRleHRIZWlnaHQgPSBkLmNhY2hlZFBhZGRpbmdIID0gbnVsbDtcbiAgICBkLnNjcm9sbGJhcnNDbGlwcGVkID0gZmFsc2U7XG4gICAgY20uc2V0U2l6ZSgpO1xuICB9XG5cbiAgdmFyIGtleU5hbWVzID0ge1xuICAgIDM6IFwiUGF1c2VcIiwgODogXCJCYWNrc3BhY2VcIiwgOTogXCJUYWJcIiwgMTM6IFwiRW50ZXJcIiwgMTY6IFwiU2hpZnRcIiwgMTc6IFwiQ3RybFwiLCAxODogXCJBbHRcIixcbiAgICAxOTogXCJQYXVzZVwiLCAyMDogXCJDYXBzTG9ja1wiLCAyNzogXCJFc2NcIiwgMzI6IFwiU3BhY2VcIiwgMzM6IFwiUGFnZVVwXCIsIDM0OiBcIlBhZ2VEb3duXCIsIDM1OiBcIkVuZFwiLFxuICAgIDM2OiBcIkhvbWVcIiwgMzc6IFwiTGVmdFwiLCAzODogXCJVcFwiLCAzOTogXCJSaWdodFwiLCA0MDogXCJEb3duXCIsIDQ0OiBcIlByaW50U2NyblwiLCA0NTogXCJJbnNlcnRcIixcbiAgICA0NjogXCJEZWxldGVcIiwgNTk6IFwiO1wiLCA2MTogXCI9XCIsIDkxOiBcIk1vZFwiLCA5MjogXCJNb2RcIiwgOTM6IFwiTW9kXCIsXG4gICAgMTA2OiBcIipcIiwgMTA3OiBcIj1cIiwgMTA5OiBcIi1cIiwgMTEwOiBcIi5cIiwgMTExOiBcIi9cIiwgMTQ1OiBcIlNjcm9sbExvY2tcIixcbiAgICAxNzM6IFwiLVwiLCAxODY6IFwiO1wiLCAxODc6IFwiPVwiLCAxODg6IFwiLFwiLCAxODk6IFwiLVwiLCAxOTA6IFwiLlwiLCAxOTE6IFwiL1wiLCAxOTI6IFwiYFwiLCAyMTk6IFwiW1wiLCAyMjA6IFwiXFxcXFwiLFxuICAgIDIyMTogXCJdXCIsIDIyMjogXCInXCIsIDIyNDogXCJNb2RcIiwgNjMyMzI6IFwiVXBcIiwgNjMyMzM6IFwiRG93blwiLCA2MzIzNDogXCJMZWZ0XCIsIDYzMjM1OiBcIlJpZ2h0XCIsIDYzMjcyOiBcIkRlbGV0ZVwiLFxuICAgIDYzMjczOiBcIkhvbWVcIiwgNjMyNzU6IFwiRW5kXCIsIDYzMjc2OiBcIlBhZ2VVcFwiLCA2MzI3NzogXCJQYWdlRG93blwiLCA2MzMwMjogXCJJbnNlcnRcIlxuICB9O1xuXG4gIC8vIE51bWJlciBrZXlzXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykgeyBrZXlOYW1lc1tpICsgNDhdID0ga2V5TmFtZXNbaSArIDk2XSA9IFN0cmluZyhpKTsgfVxuICAvLyBBbHBoYWJldGljIGtleXNcbiAgZm9yICh2YXIgaSQxID0gNjU7IGkkMSA8PSA5MDsgaSQxKyspIHsga2V5TmFtZXNbaSQxXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSQxKTsgfVxuICAvLyBGdW5jdGlvbiBrZXlzXG4gIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8PSAxMjsgaSQyKyspIHsga2V5TmFtZXNbaSQyICsgMTExXSA9IGtleU5hbWVzW2kkMiArIDYzMjM1XSA9IFwiRlwiICsgaSQyOyB9XG5cbiAgdmFyIGtleU1hcCA9IHt9O1xuXG4gIGtleU1hcC5iYXNpYyA9IHtcbiAgICBcIkxlZnRcIjogXCJnb0NoYXJMZWZ0XCIsIFwiUmlnaHRcIjogXCJnb0NoYXJSaWdodFwiLCBcIlVwXCI6IFwiZ29MaW5lVXBcIiwgXCJEb3duXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiRW5kXCI6IFwiZ29MaW5lRW5kXCIsIFwiSG9tZVwiOiBcImdvTGluZVN0YXJ0U21hcnRcIiwgXCJQYWdlVXBcIjogXCJnb1BhZ2VVcFwiLCBcIlBhZ2VEb3duXCI6IFwiZ29QYWdlRG93blwiLFxuICAgIFwiRGVsZXRlXCI6IFwiZGVsQ2hhckFmdGVyXCIsIFwiQmFja3NwYWNlXCI6IFwiZGVsQ2hhckJlZm9yZVwiLCBcIlNoaWZ0LUJhY2tzcGFjZVwiOiBcImRlbENoYXJCZWZvcmVcIixcbiAgICBcIlRhYlwiOiBcImRlZmF1bHRUYWJcIiwgXCJTaGlmdC1UYWJcIjogXCJpbmRlbnRBdXRvXCIsXG4gICAgXCJFbnRlclwiOiBcIm5ld2xpbmVBbmRJbmRlbnRcIiwgXCJJbnNlcnRcIjogXCJ0b2dnbGVPdmVyd3JpdGVcIixcbiAgICBcIkVzY1wiOiBcInNpbmdsZVNlbGVjdGlvblwiXG4gIH07XG4gIC8vIE5vdGUgdGhhdCB0aGUgc2F2ZSBhbmQgZmluZC1yZWxhdGVkIGNvbW1hbmRzIGFyZW4ndCBkZWZpbmVkIGJ5XG4gIC8vIGRlZmF1bHQuIFVzZXIgY29kZSBvciBhZGRvbnMgY2FuIGRlZmluZSB0aGVtLiBVbmtub3duIGNvbW1hbmRzXG4gIC8vIGFyZSBzaW1wbHkgaWdub3JlZC5cbiAga2V5TWFwLnBjRGVmYXVsdCA9IHtcbiAgICBcIkN0cmwtQVwiOiBcInNlbGVjdEFsbFwiLCBcIkN0cmwtRFwiOiBcImRlbGV0ZUxpbmVcIiwgXCJDdHJsLVpcIjogXCJ1bmRvXCIsIFwiU2hpZnQtQ3RybC1aXCI6IFwicmVkb1wiLCBcIkN0cmwtWVwiOiBcInJlZG9cIixcbiAgICBcIkN0cmwtSG9tZVwiOiBcImdvRG9jU3RhcnRcIiwgXCJDdHJsLUVuZFwiOiBcImdvRG9jRW5kXCIsIFwiQ3RybC1VcFwiOiBcImdvTGluZVVwXCIsIFwiQ3RybC1Eb3duXCI6IFwiZ29MaW5lRG93blwiLFxuICAgIFwiQ3RybC1MZWZ0XCI6IFwiZ29Hcm91cExlZnRcIiwgXCJDdHJsLVJpZ2h0XCI6IFwiZ29Hcm91cFJpZ2h0XCIsIFwiQWx0LUxlZnRcIjogXCJnb0xpbmVTdGFydFwiLCBcIkFsdC1SaWdodFwiOiBcImdvTGluZUVuZFwiLFxuICAgIFwiQ3RybC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLCBcIkN0cmwtRGVsZXRlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkN0cmwtU1wiOiBcInNhdmVcIiwgXCJDdHJsLUZcIjogXCJmaW5kXCIsXG4gICAgXCJDdHJsLUdcIjogXCJmaW5kTmV4dFwiLCBcIlNoaWZ0LUN0cmwtR1wiOiBcImZpbmRQcmV2XCIsIFwiU2hpZnQtQ3RybC1GXCI6IFwicmVwbGFjZVwiLCBcIlNoaWZ0LUN0cmwtUlwiOiBcInJlcGxhY2VBbGxcIixcbiAgICBcIkN0cmwtW1wiOiBcImluZGVudExlc3NcIiwgXCJDdHJsLV1cIjogXCJpbmRlbnRNb3JlXCIsXG4gICAgXCJDdHJsLVVcIjogXCJ1bmRvU2VsZWN0aW9uXCIsIFwiU2hpZnQtQ3RybC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLCBcIkFsdC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLFxuICAgIFwiZmFsbHRocm91Z2hcIjogXCJiYXNpY1wiXG4gIH07XG4gIC8vIFZlcnkgYmFzaWMgcmVhZGxpbmUvZW1hY3Mtc3R5bGUgYmluZGluZ3MsIHdoaWNoIGFyZSBzdGFuZGFyZCBvbiBNYWMuXG4gIGtleU1hcC5lbWFjc3kgPSB7XG4gICAgXCJDdHJsLUZcIjogXCJnb0NoYXJSaWdodFwiLCBcIkN0cmwtQlwiOiBcImdvQ2hhckxlZnRcIiwgXCJDdHJsLVBcIjogXCJnb0xpbmVVcFwiLCBcIkN0cmwtTlwiOiBcImdvTGluZURvd25cIixcbiAgICBcIkFsdC1GXCI6IFwiZ29Xb3JkUmlnaHRcIiwgXCJBbHQtQlwiOiBcImdvV29yZExlZnRcIiwgXCJDdHJsLUFcIjogXCJnb0xpbmVTdGFydFwiLCBcIkN0cmwtRVwiOiBcImdvTGluZUVuZFwiLFxuICAgIFwiQ3RybC1WXCI6IFwiZ29QYWdlRG93blwiLCBcIlNoaWZ0LUN0cmwtVlwiOiBcImdvUGFnZVVwXCIsIFwiQ3RybC1EXCI6IFwiZGVsQ2hhckFmdGVyXCIsIFwiQ3RybC1IXCI6IFwiZGVsQ2hhckJlZm9yZVwiLFxuICAgIFwiQWx0LURcIjogXCJkZWxXb3JkQWZ0ZXJcIiwgXCJBbHQtQmFja3NwYWNlXCI6IFwiZGVsV29yZEJlZm9yZVwiLCBcIkN0cmwtS1wiOiBcImtpbGxMaW5lXCIsIFwiQ3RybC1UXCI6IFwidHJhbnNwb3NlQ2hhcnNcIixcbiAgICBcIkN0cmwtT1wiOiBcIm9wZW5MaW5lXCJcbiAgfTtcbiAga2V5TWFwLm1hY0RlZmF1bHQgPSB7XG4gICAgXCJDbWQtQVwiOiBcInNlbGVjdEFsbFwiLCBcIkNtZC1EXCI6IFwiZGVsZXRlTGluZVwiLCBcIkNtZC1aXCI6IFwidW5kb1wiLCBcIlNoaWZ0LUNtZC1aXCI6IFwicmVkb1wiLCBcIkNtZC1ZXCI6IFwicmVkb1wiLFxuICAgIFwiQ21kLUhvbWVcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ21kLVVwXCI6IFwiZ29Eb2NTdGFydFwiLCBcIkNtZC1FbmRcIjogXCJnb0RvY0VuZFwiLCBcIkNtZC1Eb3duXCI6IFwiZ29Eb2NFbmRcIiwgXCJBbHQtTGVmdFwiOiBcImdvR3JvdXBMZWZ0XCIsXG4gICAgXCJBbHQtUmlnaHRcIjogXCJnb0dyb3VwUmlnaHRcIiwgXCJDbWQtTGVmdFwiOiBcImdvTGluZUxlZnRcIiwgXCJDbWQtUmlnaHRcIjogXCJnb0xpbmVSaWdodFwiLCBcIkFsdC1CYWNrc3BhY2VcIjogXCJkZWxHcm91cEJlZm9yZVwiLFxuICAgIFwiQ3RybC1BbHQtQmFja3NwYWNlXCI6IFwiZGVsR3JvdXBBZnRlclwiLCBcIkFsdC1EZWxldGVcIjogXCJkZWxHcm91cEFmdGVyXCIsIFwiQ21kLVNcIjogXCJzYXZlXCIsIFwiQ21kLUZcIjogXCJmaW5kXCIsXG4gICAgXCJDbWQtR1wiOiBcImZpbmROZXh0XCIsIFwiU2hpZnQtQ21kLUdcIjogXCJmaW5kUHJldlwiLCBcIkNtZC1BbHQtRlwiOiBcInJlcGxhY2VcIiwgXCJTaGlmdC1DbWQtQWx0LUZcIjogXCJyZXBsYWNlQWxsXCIsXG4gICAgXCJDbWQtW1wiOiBcImluZGVudExlc3NcIiwgXCJDbWQtXVwiOiBcImluZGVudE1vcmVcIiwgXCJDbWQtQmFja3NwYWNlXCI6IFwiZGVsV3JhcHBlZExpbmVMZWZ0XCIsIFwiQ21kLURlbGV0ZVwiOiBcImRlbFdyYXBwZWRMaW5lUmlnaHRcIixcbiAgICBcIkNtZC1VXCI6IFwidW5kb1NlbGVjdGlvblwiLCBcIlNoaWZ0LUNtZC1VXCI6IFwicmVkb1NlbGVjdGlvblwiLCBcIkN0cmwtVXBcIjogXCJnb0RvY1N0YXJ0XCIsIFwiQ3RybC1Eb3duXCI6IFwiZ29Eb2NFbmRcIixcbiAgICBcImZhbGx0aHJvdWdoXCI6IFtcImJhc2ljXCIsIFwiZW1hY3N5XCJdXG4gIH07XG4gIGtleU1hcFtcImRlZmF1bHRcIl0gPSBtYWMgPyBrZXlNYXAubWFjRGVmYXVsdCA6IGtleU1hcC5wY0RlZmF1bHQ7XG5cbiAgLy8gS0VZTUFQIERJU1BBVENIXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplS2V5TmFtZShuYW1lKSB7XG4gICAgdmFyIHBhcnRzID0gbmFtZS5zcGxpdCgvLSg/ISQpLyk7XG4gICAgbmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIHZhciBhbHQsIGN0cmwsIHNoaWZ0LCBjbWQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIHZhciBtb2QgPSBwYXJ0c1tpXTtcbiAgICAgIGlmICgvXihjbWR8bWV0YXxtKSQvaS50ZXN0KG1vZCkpIHsgY21kID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoL15hKGx0KT8kL2kudGVzdChtb2QpKSB7IGFsdCA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKC9eKGN8Y3RybHxjb250cm9sKSQvaS50ZXN0KG1vZCkpIHsgY3RybCA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKC9ecyhoaWZ0KT8kL2kudGVzdChtb2QpKSB7IHNoaWZ0ID0gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBtb2RpZmllciBuYW1lOiBcIiArIG1vZCkgfVxuICAgIH1cbiAgICBpZiAoYWx0KSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgICBpZiAoY3RybCkgeyBuYW1lID0gXCJDdHJsLVwiICsgbmFtZTsgfVxuICAgIGlmIChjbWQpIHsgbmFtZSA9IFwiQ21kLVwiICsgbmFtZTsgfVxuICAgIGlmIChzaGlmdCkgeyBuYW1lID0gXCJTaGlmdC1cIiArIG5hbWU7IH1cbiAgICByZXR1cm4gbmFtZVxuICB9XG5cbiAgLy8gVGhpcyBpcyBhIGtsdWRnZSB0byBrZWVwIGtleW1hcHMgbW9zdGx5IHdvcmtpbmcgYXMgcmF3IG9iamVjdHNcbiAgLy8gKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KSB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIHN1cHBvcnQgZmVhdHVyZXNcbiAgLy8gbGlrZSBub3JtYWxpemF0aW9uIGFuZCBtdWx0aS1zdHJva2Uga2V5IGJpbmRpbmdzLiBJdCBjb21waWxlcyBhXG4gIC8vIG5ldyBub3JtYWxpemVkIGtleW1hcCwgYW5kIHRoZW4gdXBkYXRlcyB0aGUgb2xkIG9iamVjdCB0byByZWZsZWN0XG4gIC8vIHRoaXMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleU1hcChrZXltYXApIHtcbiAgICB2YXIgY29weSA9IHt9O1xuICAgIGZvciAodmFyIGtleW5hbWUgaW4ga2V5bWFwKSB7IGlmIChrZXltYXAuaGFzT3duUHJvcGVydHkoa2V5bmFtZSkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGtleW1hcFtrZXluYW1lXTtcbiAgICAgIGlmICgvXihuYW1lfGZhbGx0aHJvdWdofChkZXxhdCl0YWNoKSQvLnRlc3Qoa2V5bmFtZSkpIHsgY29udGludWUgfVxuICAgICAgaWYgKHZhbHVlID09IFwiLi4uXCIpIHsgZGVsZXRlIGtleW1hcFtrZXluYW1lXTsgY29udGludWUgfVxuXG4gICAgICB2YXIga2V5cyA9IG1hcChrZXluYW1lLnNwbGl0KFwiIFwiKSwgbm9ybWFsaXplS2V5TmFtZSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbCA9ICh2b2lkIDApLCBuYW1lID0gKHZvaWQgMCk7XG4gICAgICAgIGlmIChpID09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG5hbWUgPSBrZXlzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIHZhbCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5hbWUgPSBrZXlzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiIFwiKTtcbiAgICAgICAgICB2YWwgPSBcIi4uLlwiO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2ID0gY29weVtuYW1lXTtcbiAgICAgICAgaWYgKCFwcmV2KSB7IGNvcHlbbmFtZV0gPSB2YWw7IH1cbiAgICAgICAgZWxzZSBpZiAocHJldiAhPSB2YWwpIHsgdGhyb3cgbmV3IEVycm9yKFwiSW5jb25zaXN0ZW50IGJpbmRpbmdzIGZvciBcIiArIG5hbWUpIH1cbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBrZXltYXBba2V5bmFtZV07XG4gICAgfSB9XG4gICAgZm9yICh2YXIgcHJvcCBpbiBjb3B5KSB7IGtleW1hcFtwcm9wXSA9IGNvcHlbcHJvcF07IH1cbiAgICByZXR1cm4ga2V5bWFwXG4gIH1cblxuICBmdW5jdGlvbiBsb29rdXBLZXkoa2V5LCBtYXAsIGhhbmRsZSwgY29udGV4dCkge1xuICAgIG1hcCA9IGdldEtleU1hcChtYXApO1xuICAgIHZhciBmb3VuZCA9IG1hcC5jYWxsID8gbWFwLmNhbGwoa2V5LCBjb250ZXh0KSA6IG1hcFtrZXldO1xuICAgIGlmIChmb3VuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIFwibm90aGluZ1wiIH1cbiAgICBpZiAoZm91bmQgPT09IFwiLi4uXCIpIHsgcmV0dXJuIFwibXVsdGlcIiB9XG4gICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgeyByZXR1cm4gXCJoYW5kbGVkXCIgfVxuXG4gICAgaWYgKG1hcC5mYWxsdGhyb3VnaCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtYXAuZmFsbHRocm91Z2gpICE9IFwiW29iamVjdCBBcnJheV1cIilcbiAgICAgICAgeyByZXR1cm4gbG9va3VwS2V5KGtleSwgbWFwLmZhbGx0aHJvdWdoLCBoYW5kbGUsIGNvbnRleHQpIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2hbaV0sIGhhbmRsZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHQpIHsgcmV0dXJuIHJlc3VsdCB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gTW9kaWZpZXIga2V5IHByZXNzZXMgZG9uJ3QgY291bnQgYXMgJ3JlYWwnIGtleSBwcmVzc2VzIGZvciB0aGVcbiAgLy8gcHVycG9zZSBvZiBrZXltYXAgZmFsbHRocm91Z2guXG4gIGZ1bmN0aW9uIGlzTW9kaWZpZXJLZXkodmFsdWUpIHtcbiAgICB2YXIgbmFtZSA9IHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiBrZXlOYW1lc1t2YWx1ZS5rZXlDb2RlXTtcbiAgICByZXR1cm4gbmFtZSA9PSBcIkN0cmxcIiB8fCBuYW1lID09IFwiQWx0XCIgfHwgbmFtZSA9PSBcIlNoaWZ0XCIgfHwgbmFtZSA9PSBcIk1vZFwiXG4gIH1cblxuICBmdW5jdGlvbiBhZGRNb2RpZmllck5hbWVzKG5hbWUsIGV2ZW50LCBub1NoaWZ0KSB7XG4gICAgdmFyIGJhc2UgPSBuYW1lO1xuICAgIGlmIChldmVudC5hbHRLZXkgJiYgYmFzZSAhPSBcIkFsdFwiKSB7IG5hbWUgPSBcIkFsdC1cIiArIG5hbWU7IH1cbiAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQubWV0YUtleSA6IGV2ZW50LmN0cmxLZXkpICYmIGJhc2UgIT0gXCJDdHJsXCIpIHsgbmFtZSA9IFwiQ3RybC1cIiArIG5hbWU7IH1cbiAgICBpZiAoKGZsaXBDdHJsQ21kID8gZXZlbnQuY3RybEtleSA6IGV2ZW50Lm1ldGFLZXkpICYmIGJhc2UgIT0gXCJNb2RcIikgeyBuYW1lID0gXCJDbWQtXCIgKyBuYW1lOyB9XG4gICAgaWYgKCFub1NoaWZ0ICYmIGV2ZW50LnNoaWZ0S2V5ICYmIGJhc2UgIT0gXCJTaGlmdFwiKSB7IG5hbWUgPSBcIlNoaWZ0LVwiICsgbmFtZTsgfVxuICAgIHJldHVybiBuYW1lXG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBuYW1lIG9mIGEga2V5IGFzIGluZGljYXRlZCBieSBhbiBldmVudCBvYmplY3QuXG4gIGZ1bmN0aW9uIGtleU5hbWUoZXZlbnQsIG5vU2hpZnQpIHtcbiAgICBpZiAocHJlc3RvICYmIGV2ZW50LmtleUNvZGUgPT0gMzQgJiYgZXZlbnRbXCJjaGFyXCJdKSB7IHJldHVybiBmYWxzZSB9XG4gICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tldmVudC5rZXlDb2RlXTtcbiAgICBpZiAobmFtZSA9PSBudWxsIHx8IGV2ZW50LmFsdEdyYXBoS2V5KSB7IHJldHVybiBmYWxzZSB9XG4gICAgLy8gQ3RybC1TY3JvbGxMb2NrIGhhcyBrZXlDb2RlIDMsIHNhbWUgYXMgQ3RybC1QYXVzZSxcbiAgICAvLyBzbyB3ZSdsbCB1c2UgZXZlbnQuY29kZSB3aGVuIGF2YWlsYWJsZSAoQ2hyb21lIDQ4KywgRkYgMzgrLCBTYWZhcmkgMTAuMSspXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gMyAmJiBldmVudC5jb2RlKSB7IG5hbWUgPSBldmVudC5jb2RlOyB9XG4gICAgcmV0dXJuIGFkZE1vZGlmaWVyTmFtZXMobmFtZSwgZXZlbnQsIG5vU2hpZnQpXG4gIH1cblxuICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIiA/IGtleU1hcFt2YWxdIDogdmFsXG4gIH1cblxuICAvLyBIZWxwZXIgZm9yIGRlbGV0aW5nIHRleHQgbmVhciB0aGUgc2VsZWN0aW9uKHMpLCB1c2VkIHRvIGltcGxlbWVudFxuICAvLyBiYWNrc3BhY2UsIGRlbGV0ZSwgYW5kIHNpbWlsYXIgZnVuY3Rpb25hbGl0eS5cbiAgZnVuY3Rpb24gZGVsZXRlTmVhclNlbGVjdGlvbihjbSwgY29tcHV0ZSkge1xuICAgIHZhciByYW5nZXMgPSBjbS5kb2Muc2VsLnJhbmdlcywga2lsbCA9IFtdO1xuICAgIC8vIEJ1aWxkIHVwIGEgc2V0IG9mIHJhbmdlcyB0byBraWxsIGZpcnN0LCBtZXJnaW5nIG92ZXJsYXBwaW5nXG4gICAgLy8gcmFuZ2VzLlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9LaWxsID0gY29tcHV0ZShyYW5nZXNbaV0pO1xuICAgICAgd2hpbGUgKGtpbGwubGVuZ3RoICYmIGNtcCh0b0tpbGwuZnJvbSwgbHN0KGtpbGwpLnRvKSA8PSAwKSB7XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGtpbGwucG9wKCk7XG4gICAgICAgIGlmIChjbXAocmVwbGFjZWQuZnJvbSwgdG9LaWxsLmZyb20pIDwgMCkge1xuICAgICAgICAgIHRvS2lsbC5mcm9tID0gcmVwbGFjZWQuZnJvbTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBraWxsLnB1c2godG9LaWxsKTtcbiAgICB9XG4gICAgLy8gTmV4dCwgcmVtb3ZlIHRob3NlIGFjdHVhbCByYW5nZXMuXG4gICAgcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IGtpbGwubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pXG4gICAgICAgIHsgcmVwbGFjZVJhbmdlKGNtLmRvYywgXCJcIiwga2lsbFtpXS5mcm9tLCBraWxsW2ldLnRvLCBcIitkZWxldGVcIik7IH1cbiAgICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgY2gsIGRpcikge1xuICAgIHZhciB0YXJnZXQgPSBza2lwRXh0ZW5kaW5nQ2hhcnMobGluZS50ZXh0LCBjaCArIGRpciwgZGlyKTtcbiAgICByZXR1cm4gdGFyZ2V0IDwgMCB8fCB0YXJnZXQgPiBsaW5lLnRleHQubGVuZ3RoID8gbnVsbCA6IHRhcmdldFxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZUxvZ2ljYWxseShsaW5lLCBzdGFydCwgZGlyKSB7XG4gICAgdmFyIGNoID0gbW92ZUNoYXJMb2dpY2FsbHkobGluZSwgc3RhcnQuY2gsIGRpcik7XG4gICAgcmV0dXJuIGNoID09IG51bGwgPyBudWxsIDogbmV3IFBvcyhzdGFydC5saW5lLCBjaCwgZGlyIDwgMCA/IFwiYWZ0ZXJcIiA6IFwiYmVmb3JlXCIpXG4gIH1cblxuICBmdW5jdGlvbiBlbmRPZkxpbmUodmlzdWFsbHksIGNtLCBsaW5lT2JqLCBsaW5lTm8sIGRpcikge1xuICAgIGlmICh2aXN1YWxseSkge1xuICAgICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIikgeyBkaXIgPSAtZGlyOyB9XG4gICAgICB2YXIgb3JkZXIgPSBnZXRPcmRlcihsaW5lT2JqLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICB2YXIgcGFydCA9IGRpciA8IDAgPyBsc3Qob3JkZXIpIDogb3JkZXJbMF07XG4gICAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSk7XG4gICAgICAgIHZhciBzdGlja3kgPSBtb3ZlSW5TdG9yYWdlT3JkZXIgPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgICAgICB2YXIgY2g7XG4gICAgICAgIC8vIFdpdGggYSB3cmFwcGVkIHJ0bCBjaHVuayAocG9zc2libHkgc3Bhbm5pbmcgbXVsdGlwbGUgYmlkaSBwYXJ0cyksXG4gICAgICAgIC8vIGl0IGNvdWxkIGJlIHRoYXQgdGhlIGxhc3QgYmlkaSBwYXJ0IGlzIG5vdCBvbiB0aGUgbGFzdCB2aXN1YWwgbGluZSxcbiAgICAgICAgLy8gc2luY2UgdmlzdWFsIGxpbmVzIGNvbnRhaW4gY29udGVudCBvcmRlci1jb25zZWN1dGl2ZSBjaHVua3MuXG4gICAgICAgIC8vIFRodXMsIGluIHJ0bCwgd2UgYXJlIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCAoY29udGVudC1vcmRlcikgY2hhcmFjdGVyXG4gICAgICAgIC8vIGluIHRoZSBydGwgY2h1bmsgdGhhdCBpcyBvbiB0aGUgbGFzdCBsaW5lICh0aGF0IGlzLCB0aGUgc2FtZSBsaW5lXG4gICAgICAgIC8vIGFzIHRoZSBsYXN0IChjb250ZW50LW9yZGVyKSBjaGFyYWN0ZXIpLlxuICAgICAgICBpZiAocGFydC5sZXZlbCA+IDAgfHwgY20uZG9jLmRpcmVjdGlvbiA9PSBcInJ0bFwiKSB7XG4gICAgICAgICAgdmFyIHByZXAgPSBwcmVwYXJlTWVhc3VyZUZvckxpbmUoY20sIGxpbmVPYmopO1xuICAgICAgICAgIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggLSAxIDogMDtcbiAgICAgICAgICB2YXIgdGFyZ2V0VG9wID0gbWVhc3VyZUNoYXJQcmVwYXJlZChjbSwgcHJlcCwgY2gpLnRvcDtcbiAgICAgICAgICBjaCA9IGZpbmRGaXJzdChmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIG1lYXN1cmVDaGFyUHJlcGFyZWQoY20sIHByZXAsIGNoKS50b3AgPT0gdGFyZ2V0VG9wOyB9LCAoZGlyIDwgMCkgPT0gKHBhcnQubGV2ZWwgPT0gMSkgPyBwYXJ0LmZyb20gOiBwYXJ0LnRvIC0gMSwgY2gpO1xuICAgICAgICAgIGlmIChzdGlja3kgPT0gXCJiZWZvcmVcIikgeyBjaCA9IG1vdmVDaGFyTG9naWNhbGx5KGxpbmVPYmosIGNoLCAxKTsgfVxuICAgICAgICB9IGVsc2UgeyBjaCA9IGRpciA8IDAgPyBwYXJ0LnRvIDogcGFydC5mcm9tOyB9XG4gICAgICAgIHJldHVybiBuZXcgUG9zKGxpbmVObywgY2gsIHN0aWNreSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQb3MobGluZU5vLCBkaXIgPCAwID8gbGluZU9iai50ZXh0Lmxlbmd0aCA6IDAsIGRpciA8IDAgPyBcImJlZm9yZVwiIDogXCJhZnRlclwiKVxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZVZpc3VhbGx5KGNtLCBsaW5lLCBzdGFydCwgZGlyKSB7XG4gICAgdmFyIGJpZGkgPSBnZXRPcmRlcihsaW5lLCBjbS5kb2MuZGlyZWN0aW9uKTtcbiAgICBpZiAoIWJpZGkpIHsgcmV0dXJuIG1vdmVMb2dpY2FsbHkobGluZSwgc3RhcnQsIGRpcikgfVxuICAgIGlmIChzdGFydC5jaCA+PSBsaW5lLnRleHQubGVuZ3RoKSB7XG4gICAgICBzdGFydC5jaCA9IGxpbmUudGV4dC5sZW5ndGg7XG4gICAgICBzdGFydC5zdGlja3kgPSBcImJlZm9yZVwiO1xuICAgIH0gZWxzZSBpZiAoc3RhcnQuY2ggPD0gMCkge1xuICAgICAgc3RhcnQuY2ggPSAwO1xuICAgICAgc3RhcnQuc3RpY2t5ID0gXCJhZnRlclwiO1xuICAgIH1cbiAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQoYmlkaSwgc3RhcnQuY2gsIHN0YXJ0LnN0aWNreSksIHBhcnQgPSBiaWRpW3BhcnRQb3NdO1xuICAgIGlmIChjbS5kb2MuZGlyZWN0aW9uID09IFwibHRyXCIgJiYgcGFydC5sZXZlbCAlIDIgPT0gMCAmJiAoZGlyID4gMCA/IHBhcnQudG8gPiBzdGFydC5jaCA6IHBhcnQuZnJvbSA8IHN0YXJ0LmNoKSkge1xuICAgICAgLy8gQ2FzZSAxOiBXZSBtb3ZlIHdpdGhpbiBhbiBsdHIgcGFydCBpbiBhbiBsdHIgZWRpdG9yLiBFdmVuIHdpdGggd3JhcHBlZCBsaW5lcyxcbiAgICAgIC8vIG5vdGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVucy5cbiAgICAgIHJldHVybiBtb3ZlTG9naWNhbGx5KGxpbmUsIHN0YXJ0LCBkaXIpXG4gICAgfVxuXG4gICAgdmFyIG12ID0gZnVuY3Rpb24gKHBvcywgZGlyKSB7IHJldHVybiBtb3ZlQ2hhckxvZ2ljYWxseShsaW5lLCBwb3MgaW5zdGFuY2VvZiBQb3MgPyBwb3MuY2ggOiBwb3MsIGRpcik7IH07XG4gICAgdmFyIHByZXA7XG4gICAgdmFyIGdldFdyYXBwZWRMaW5lRXh0ZW50ID0gZnVuY3Rpb24gKGNoKSB7XG4gICAgICBpZiAoIWNtLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IHJldHVybiB7YmVnaW46IDAsIGVuZDogbGluZS50ZXh0Lmxlbmd0aH0gfVxuICAgICAgcHJlcCA9IHByZXAgfHwgcHJlcGFyZU1lYXN1cmVGb3JMaW5lKGNtLCBsaW5lKTtcbiAgICAgIHJldHVybiB3cmFwcGVkTGluZUV4dGVudENoYXIoY20sIGxpbmUsIHByZXAsIGNoKVxuICAgIH07XG4gICAgdmFyIHdyYXBwZWRMaW5lRXh0ZW50ID0gZ2V0V3JhcHBlZExpbmVFeHRlbnQoc3RhcnQuc3RpY2t5ID09IFwiYmVmb3JlXCIgPyBtdihzdGFydCwgLTEpIDogc3RhcnQuY2gpO1xuXG4gICAgaWYgKGNtLmRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIiB8fCBwYXJ0LmxldmVsID09IDEpIHtcbiAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAocGFydC5sZXZlbCA9PSAxKSA9PSAoZGlyIDwgMCk7XG4gICAgICB2YXIgY2ggPSBtdihzdGFydCwgbW92ZUluU3RvcmFnZU9yZGVyID8gMSA6IC0xKTtcbiAgICAgIGlmIChjaCAhPSBudWxsICYmICghbW92ZUluU3RvcmFnZU9yZGVyID8gY2ggPj0gcGFydC5mcm9tICYmIGNoID49IHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDogY2ggPD0gcGFydC50byAmJiBjaCA8PSB3cmFwcGVkTGluZUV4dGVudC5lbmQpKSB7XG4gICAgICAgIC8vIENhc2UgMjogV2UgbW92ZSB3aXRoaW4gYW4gcnRsIHBhcnQgb3IgaW4gYW4gcnRsIGVkaXRvciBvbiB0aGUgc2FtZSB2aXN1YWwgbGluZVxuICAgICAgICB2YXIgc3RpY2t5ID0gbW92ZUluU3RvcmFnZU9yZGVyID8gXCJiZWZvcmVcIiA6IFwiYWZ0ZXJcIjtcbiAgICAgICAgcmV0dXJuIG5ldyBQb3Moc3RhcnQubGluZSwgY2gsIHN0aWNreSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYXNlIDM6IENvdWxkIG5vdCBtb3ZlIHdpdGhpbiB0aGlzIGJpZGkgcGFydCBpbiB0aGlzIHZpc3VhbCBsaW5lLCBzbyBsZWF2ZVxuICAgIC8vIHRoZSBjdXJyZW50IGJpZGkgcGFydFxuXG4gICAgdmFyIHNlYXJjaEluVmlzdWFsTGluZSA9IGZ1bmN0aW9uIChwYXJ0UG9zLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KSB7XG4gICAgICB2YXIgZ2V0UmVzID0gZnVuY3Rpb24gKGNoLCBtb3ZlSW5TdG9yYWdlT3JkZXIpIHsgcmV0dXJuIG1vdmVJblN0b3JhZ2VPcmRlclxuICAgICAgICA/IG5ldyBQb3Moc3RhcnQubGluZSwgbXYoY2gsIDEpLCBcImJlZm9yZVwiKVxuICAgICAgICA6IG5ldyBQb3Moc3RhcnQubGluZSwgY2gsIFwiYWZ0ZXJcIik7IH07XG5cbiAgICAgIGZvciAoOyBwYXJ0UG9zID49IDAgJiYgcGFydFBvcyA8IGJpZGkubGVuZ3RoOyBwYXJ0UG9zICs9IGRpcikge1xuICAgICAgICB2YXIgcGFydCA9IGJpZGlbcGFydFBvc107XG4gICAgICAgIHZhciBtb3ZlSW5TdG9yYWdlT3JkZXIgPSAoZGlyID4gMCkgPT0gKHBhcnQubGV2ZWwgIT0gMSk7XG4gICAgICAgIHZhciBjaCA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDogbXYod3JhcHBlZExpbmVFeHRlbnQuZW5kLCAtMSk7XG4gICAgICAgIGlmIChwYXJ0LmZyb20gPD0gY2ggJiYgY2ggPCBwYXJ0LnRvKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgICBjaCA9IG1vdmVJblN0b3JhZ2VPcmRlciA/IHBhcnQuZnJvbSA6IG12KHBhcnQudG8sIC0xKTtcbiAgICAgICAgaWYgKHdyYXBwZWRMaW5lRXh0ZW50LmJlZ2luIDw9IGNoICYmIGNoIDwgd3JhcHBlZExpbmVFeHRlbnQuZW5kKSB7IHJldHVybiBnZXRSZXMoY2gsIG1vdmVJblN0b3JhZ2VPcmRlcikgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDYXNlIDNhOiBMb29rIGZvciBvdGhlciBiaWRpIHBhcnRzIG9uIHRoZSBzYW1lIHZpc3VhbCBsaW5lXG4gICAgdmFyIHJlcyA9IHNlYXJjaEluVmlzdWFsTGluZShwYXJ0UG9zICsgZGlyLCBkaXIsIHdyYXBwZWRMaW5lRXh0ZW50KTtcbiAgICBpZiAocmVzKSB7IHJldHVybiByZXMgfVxuXG4gICAgLy8gQ2FzZSAzYjogTG9vayBmb3Igb3RoZXIgYmlkaSBwYXJ0cyBvbiB0aGUgbmV4dCB2aXN1YWwgbGluZVxuICAgIHZhciBuZXh0Q2ggPSBkaXIgPiAwID8gd3JhcHBlZExpbmVFeHRlbnQuZW5kIDogbXYod3JhcHBlZExpbmVFeHRlbnQuYmVnaW4sIC0xKTtcbiAgICBpZiAobmV4dENoICE9IG51bGwgJiYgIShkaXIgPiAwICYmIG5leHRDaCA9PSBsaW5lLnRleHQubGVuZ3RoKSkge1xuICAgICAgcmVzID0gc2VhcmNoSW5WaXN1YWxMaW5lKGRpciA+IDAgPyAwIDogYmlkaS5sZW5ndGggLSAxLCBkaXIsIGdldFdyYXBwZWRMaW5lRXh0ZW50KG5leHRDaCkpO1xuICAgICAgaWYgKHJlcykgeyByZXR1cm4gcmVzIH1cbiAgICB9XG5cbiAgICAvLyBDYXNlIDQ6IE5vd2hlcmUgdG8gbW92ZVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDb21tYW5kcyBhcmUgcGFyYW1ldGVyLWxlc3MgYWN0aW9ucyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgb24gYW5cbiAgLy8gZWRpdG9yLCBtb3N0bHkgdXNlZCBmb3Iga2V5YmluZGluZ3MuXG4gIHZhciBjb21tYW5kcyA9IHtcbiAgICBzZWxlY3RBbGw6IHNlbGVjdEFsbCxcbiAgICBzaW5nbGVTZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uc2V0U2VsZWN0aW9uKGNtLmdldEN1cnNvcihcImFuY2hvclwiKSwgY20uZ2V0Q3Vyc29yKFwiaGVhZFwiKSwgc2VsX2RvbnRTY3JvbGwpOyB9LFxuICAgIGtpbGxMaW5lOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgaWYgKHJhbmdlLmVtcHR5KCkpIHtcbiAgICAgICAgdmFyIGxlbiA9IGdldExpbmUoY20uZG9jLCByYW5nZS5oZWFkLmxpbmUpLnRleHQubGVuZ3RoO1xuICAgICAgICBpZiAocmFuZ2UuaGVhZC5jaCA9PSBsZW4gJiYgcmFuZ2UuaGVhZC5saW5lIDwgY20ubGFzdExpbmUoKSlcbiAgICAgICAgICB7IHJldHVybiB7ZnJvbTogcmFuZ2UuaGVhZCwgdG86IFBvcyhyYW5nZS5oZWFkLmxpbmUgKyAxLCAwKX0gfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyByZXR1cm4ge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBQb3MocmFuZ2UuaGVhZC5saW5lLCBsZW4pfSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge2Zyb206IHJhbmdlLmZyb20oKSwgdG86IHJhbmdlLnRvKCl9XG4gICAgICB9XG4gICAgfSk7IH0sXG4gICAgZGVsZXRlTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBkZWxldGVOZWFyU2VsZWN0aW9uKGNtLCBmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuICh7XG4gICAgICBmcm9tOiBQb3MocmFuZ2UuZnJvbSgpLmxpbmUsIDApLFxuICAgICAgdG86IGNsaXBQb3MoY20uZG9jLCBQb3MocmFuZ2UudG8oKS5saW5lICsgMSwgMCkpXG4gICAgfSk7IH0pOyB9LFxuICAgIGRlbExpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gKHtcbiAgICAgIGZyb206IFBvcyhyYW5nZS5mcm9tKCkubGluZSwgMCksIHRvOiByYW5nZS5mcm9tKClcbiAgICB9KTsgfSk7IH0sXG4gICAgZGVsV3JhcHBlZExpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciBsZWZ0UG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIHJldHVybiB7ZnJvbTogbGVmdFBvcywgdG86IHJhbmdlLmZyb20oKX1cbiAgICB9KTsgfSxcbiAgICBkZWxXcmFwcGVkTGluZVJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGRlbGV0ZU5lYXJTZWxlY3Rpb24oY20sIGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHZhciByaWdodFBvcyA9IGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIHJldHVybiB7ZnJvbTogcmFuZ2UuZnJvbSgpLCB0bzogcmlnaHRQb3MgfVxuICAgIH0pOyB9LFxuICAgIHVuZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kbygpOyB9LFxuICAgIHJlZG86IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkbygpOyB9LFxuICAgIHVuZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20udW5kb1NlbGVjdGlvbigpOyB9LFxuICAgIHJlZG9TZWxlY3Rpb246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVkb1NlbGVjdGlvbigpOyB9LFxuICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uKFBvcyhjbS5maXJzdExpbmUoKSwgMCkpOyB9LFxuICAgIGdvRG9jRW5kOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbihQb3MoY20ubGFzdExpbmUoKSkpOyB9LFxuICAgIGdvTGluZVN0YXJ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVTdGFydChjbSwgcmFuZ2UuaGVhZC5saW5lKTsgfSxcbiAgICAgIHtvcmlnaW46IFwiK21vdmVcIiwgYmlhczogMX1cbiAgICApOyB9LFxuICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkgeyByZXR1cm4gbGluZVN0YXJ0U21hcnQoY20sIHJhbmdlLmhlYWQpOyB9LFxuICAgICAge29yaWdpbjogXCIrbW92ZVwiLCBiaWFzOiAxfVxuICAgICk7IH0sXG4gICAgZ29MaW5lRW5kOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHsgcmV0dXJuIGxpbmVFbmQoY20sIHJhbmdlLmhlYWQubGluZSk7IH0sXG4gICAgICB7b3JpZ2luOiBcIittb3ZlXCIsIGJpYXM6IC0xfVxuICAgICk7IH0sXG4gICAgZ29MaW5lUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHRvcCA9IGNtLmN1cnNvckNvb3JkcyhyYW5nZS5oZWFkLCBcImRpdlwiKS50b3AgKyA1O1xuICAgICAgcmV0dXJuIGNtLmNvb3Jkc0NoYXIoe2xlZnQ6IGNtLmRpc3BsYXkubGluZURpdi5vZmZzZXRXaWR0aCArIDEwMCwgdG9wOiB0b3B9LCBcImRpdlwiKVxuICAgIH0sIHNlbF9tb3ZlKTsgfSxcbiAgICBnb0xpbmVMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgIHZhciB0b3AgPSBjbS5jdXJzb3JDb29yZHMocmFuZ2UuaGVhZCwgXCJkaXZcIikudG9wICsgNTtcbiAgICAgIHJldHVybiBjbS5jb29yZHNDaGFyKHtsZWZ0OiAwLCB0b3A6IHRvcH0sIFwiZGl2XCIpXG4gICAgfSwgc2VsX21vdmUpOyB9LFxuICAgIGdvTGluZUxlZnRTbWFydDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5leHRlbmRTZWxlY3Rpb25zQnkoZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgICB2YXIgdG9wID0gY20uY3Vyc29yQ29vcmRzKHJhbmdlLmhlYWQsIFwiZGl2XCIpLnRvcCArIDU7XG4gICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7bGVmdDogMCwgdG9wOiB0b3B9LCBcImRpdlwiKTtcbiAgICAgIGlmIChwb3MuY2ggPCBjbS5nZXRMaW5lKHBvcy5saW5lKS5zZWFyY2goL1xcUy8pKSB7IHJldHVybiBsaW5lU3RhcnRTbWFydChjbSwgcmFuZ2UuaGVhZCkgfVxuICAgICAgcmV0dXJuIHBvc1xuICAgIH0sIHNlbF9tb3ZlKTsgfSxcbiAgICBnb0xpbmVVcDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigtMSwgXCJsaW5lXCIpOyB9LFxuICAgIGdvTGluZURvd246IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZVYoMSwgXCJsaW5lXCIpOyB9LFxuICAgIGdvUGFnZVVwOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVWKC0xLCBcInBhZ2VcIik7IH0sXG4gICAgZ29QYWdlRG93bjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlVigxLCBcInBhZ2VcIik7IH0sXG4gICAgZ29DaGFyTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJjaGFyXCIpOyB9LFxuICAgIGdvQ2hhclJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwiY2hhclwiKTsgfSxcbiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoLTEsIFwiY29sdW1uXCIpOyB9LFxuICAgIGdvQ29sdW1uUmlnaHQ6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ubW92ZUgoMSwgXCJjb2x1bW5cIik7IH0sXG4gICAgZ29Xb3JkTGVmdDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgtMSwgXCJ3b3JkXCIpOyB9LFxuICAgIGdvR3JvdXBSaWdodDogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5tb3ZlSCgxLCBcImdyb3VwXCIpOyB9LFxuICAgIGdvR3JvdXBMZWZ0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKC0xLCBcImdyb3VwXCIpOyB9LFxuICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLm1vdmVIKDEsIFwid29yZFwiKTsgfSxcbiAgICBkZWxDaGFyQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwiY29kZXBvaW50XCIpOyB9LFxuICAgIGRlbENoYXJBZnRlcjogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5kZWxldGVIKDEsIFwiY2hhclwiKTsgfSxcbiAgICBkZWxXb3JkQmVmb3JlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoLTEsIFwid29yZFwiKTsgfSxcbiAgICBkZWxXb3JkQWZ0ZXI6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgxLCBcIndvcmRcIik7IH0sXG4gICAgZGVsR3JvdXBCZWZvcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uZGVsZXRlSCgtMSwgXCJncm91cFwiKTsgfSxcbiAgICBkZWxHcm91cEFmdGVyOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmRlbGV0ZUgoMSwgXCJncm91cFwiKTsgfSxcbiAgICBpbmRlbnRBdXRvOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLmluZGVudFNlbGVjdGlvbihcInNtYXJ0XCIpOyB9LFxuICAgIGluZGVudE1vcmU6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0aW9uKFwiYWRkXCIpOyB9LFxuICAgIGluZGVudExlc3M6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20uaW5kZW50U2VsZWN0aW9uKFwic3VidHJhY3RcIik7IH0sXG4gICAgaW5zZXJ0VGFiOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlcGxhY2VTZWxlY3Rpb24oXCJcXHRcIik7IH0sXG4gICAgaW5zZXJ0U29mdFRhYjogZnVuY3Rpb24gKGNtKSB7XG4gICAgICB2YXIgc3BhY2VzID0gW10sIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcG9zID0gcmFuZ2VzW2ldLmZyb20oKTtcbiAgICAgICAgdmFyIGNvbCA9IGNvdW50Q29sdW1uKGNtLmdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gsIHRhYlNpemUpO1xuICAgICAgICBzcGFjZXMucHVzaChzcGFjZVN0cih0YWJTaXplIC0gY29sICUgdGFiU2l6ZSkpO1xuICAgICAgfVxuICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoc3BhY2VzKTtcbiAgICB9LFxuICAgIGRlZmF1bHRUYWI6IGZ1bmN0aW9uIChjbSkge1xuICAgICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgY20uaW5kZW50U2VsZWN0aW9uKFwiYWRkXCIpOyB9XG4gICAgICBlbHNlIHsgY20uZXhlY0NvbW1hbmQoXCJpbnNlcnRUYWJcIik7IH1cbiAgICB9LFxuICAgIC8vIFN3YXAgdGhlIHR3byBjaGFycyBsZWZ0IGFuZCByaWdodCBvZiBlYWNoIHNlbGVjdGlvbidzIGhlYWQuXG4gICAgLy8gTW92ZSBjdXJzb3IgYmVoaW5kIHRoZSB0d28gc3dhcHBlZCBjaGFyYWN0ZXJzIGFmdGVyd2FyZHMuXG4gICAgLy9cbiAgICAvLyBEb2Vzbid0IGNvbnNpZGVyIGxpbmUgZmVlZHMgYSBjaGFyYWN0ZXIuXG4gICAgLy8gRG9lc24ndCBzY2FuIG1vcmUgdGhhbiBvbmUgbGluZSBhYm92ZSB0byBmaW5kIGEgY2hhcmFjdGVyLlxuICAgIC8vIERvZXNuJ3QgZG8gYW55dGhpbmcgb24gYW4gZW1wdHkgbGluZS5cbiAgICAvLyBEb2Vzbid0IGRvIGFueXRoaW5nIHdpdGggbm9uLWVtcHR5IHNlbGVjdGlvbnMuXG4gICAgdHJhbnNwb3NlQ2hhcnM6IGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gcnVuSW5PcChjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJhbmdlcyA9IGNtLmxpc3RTZWxlY3Rpb25zKCksIG5ld1NlbCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFyYW5nZXNbaV0uZW1wdHkoKSkgeyBjb250aW51ZSB9XG4gICAgICAgIHZhciBjdXIgPSByYW5nZXNbaV0uaGVhZCwgbGluZSA9IGdldExpbmUoY20uZG9jLCBjdXIubGluZSkudGV4dDtcbiAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICBpZiAoY3VyLmNoID09IGxpbmUubGVuZ3RoKSB7IGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCAtIDEpOyB9XG4gICAgICAgICAgaWYgKGN1ci5jaCA+IDApIHtcbiAgICAgICAgICAgIGN1ciA9IG5ldyBQb3MoY3VyLmxpbmUsIGN1ci5jaCArIDEpO1xuICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zKGN1ci5saW5lLCBjdXIuY2ggLSAyKSwgY3VyLCBcIit0cmFuc3Bvc2VcIik7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXIubGluZSA+IGNtLmRvYy5maXJzdCkge1xuICAgICAgICAgICAgdmFyIHByZXYgPSBnZXRMaW5lKGNtLmRvYywgY3VyLmxpbmUgLSAxKS50ZXh0O1xuICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgY3VyID0gbmV3IFBvcyhjdXIubGluZSwgMSk7XG4gICAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdCgwKSArIGNtLmRvYy5saW5lU2VwYXJhdG9yKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jaGFyQXQocHJldi5sZW5ndGggLSAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcyhjdXIubGluZSAtIDEsIHByZXYubGVuZ3RoIC0gMSksIGN1ciwgXCIrdHJhbnNwb3NlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTZWwucHVzaChuZXcgUmFuZ2UoY3VyLCBjdXIpKTtcbiAgICAgIH1cbiAgICAgIGNtLnNldFNlbGVjdGlvbnMobmV3U2VsKTtcbiAgICB9KTsgfSxcbiAgICBuZXdsaW5lQW5kSW5kZW50OiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxzID0gY20ubGlzdFNlbGVjdGlvbnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSBzZWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7IGNtLnJlcGxhY2VSYW5nZShjbS5kb2MubGluZVNlcGFyYXRvcigpLCBzZWxzW2ldLmFuY2hvciwgc2Vsc1tpXS5oZWFkLCBcIitpbnB1dFwiKTsgfVxuICAgICAgc2VscyA9IGNtLmxpc3RTZWxlY3Rpb25zKCk7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBzZWxzLmxlbmd0aDsgaSQxKyspXG4gICAgICAgIHsgY20uaW5kZW50TGluZShzZWxzW2kkMV0uZnJvbSgpLmxpbmUsIG51bGwsIHRydWUpOyB9XG4gICAgICBlbnN1cmVDdXJzb3JWaXNpYmxlKGNtKTtcbiAgICB9KTsgfSxcbiAgICBvcGVuTGluZTogZnVuY3Rpb24gKGNtKSB7IHJldHVybiBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXFxuXCIsIFwic3RhcnRcIik7IH0sXG4gICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnRvZ2dsZU92ZXJ3cml0ZSgpOyB9XG4gIH07XG5cblxuICBmdW5jdGlvbiBsaW5lU3RhcnQoY20sIGxpbmVOKSB7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgbGluZU4pO1xuICAgIHZhciB2aXN1YWwgPSB2aXN1YWxMaW5lKGxpbmUpO1xuICAgIGlmICh2aXN1YWwgIT0gbGluZSkgeyBsaW5lTiA9IGxpbmVObyh2aXN1YWwpOyB9XG4gICAgcmV0dXJuIGVuZE9mTGluZSh0cnVlLCBjbSwgdmlzdWFsLCBsaW5lTiwgMSlcbiAgfVxuICBmdW5jdGlvbiBsaW5lRW5kKGNtLCBsaW5lTikge1xuICAgIHZhciBsaW5lID0gZ2V0TGluZShjbS5kb2MsIGxpbmVOKTtcbiAgICB2YXIgdmlzdWFsID0gdmlzdWFsTGluZUVuZChsaW5lKTtcbiAgICBpZiAodmlzdWFsICE9IGxpbmUpIHsgbGluZU4gPSBsaW5lTm8odmlzdWFsKTsgfVxuICAgIHJldHVybiBlbmRPZkxpbmUodHJ1ZSwgY20sIGxpbmUsIGxpbmVOLCAtMSlcbiAgfVxuICBmdW5jdGlvbiBsaW5lU3RhcnRTbWFydChjbSwgcG9zKSB7XG4gICAgdmFyIHN0YXJ0ID0gbGluZVN0YXJ0KGNtLCBwb3MubGluZSk7XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgc3RhcnQubGluZSk7XG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIobGluZSwgY20uZG9jLmRpcmVjdGlvbik7XG4gICAgaWYgKCFvcmRlciB8fCBvcmRlclswXS5sZXZlbCA9PSAwKSB7XG4gICAgICB2YXIgZmlyc3ROb25XUyA9IE1hdGgubWF4KHN0YXJ0LmNoLCBsaW5lLnRleHQuc2VhcmNoKC9cXFMvKSk7XG4gICAgICB2YXIgaW5XUyA9IHBvcy5saW5lID09IHN0YXJ0LmxpbmUgJiYgcG9zLmNoIDw9IGZpcnN0Tm9uV1MgJiYgcG9zLmNoO1xuICAgICAgcmV0dXJuIFBvcyhzdGFydC5saW5lLCBpbldTID8gMCA6IGZpcnN0Tm9uV1MsIHN0YXJ0LnN0aWNreSlcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0XG4gIH1cblxuICAvLyBSdW4gYSBoYW5kbGVyIHRoYXQgd2FzIGJvdW5kIHRvIGEga2V5LlxuICBmdW5jdGlvbiBkb0hhbmRsZUJpbmRpbmcoY20sIGJvdW5kLCBkcm9wU2hpZnQpIHtcbiAgICBpZiAodHlwZW9mIGJvdW5kID09IFwic3RyaW5nXCIpIHtcbiAgICAgIGJvdW5kID0gY29tbWFuZHNbYm91bmRdO1xuICAgICAgaWYgKCFib3VuZCkgeyByZXR1cm4gZmFsc2UgfVxuICAgIH1cbiAgICAvLyBFbnN1cmUgcHJldmlvdXMgaW5wdXQgaGFzIGJlZW4gcmVhZCwgc28gdGhhdCB0aGUgaGFuZGxlciBzZWVzIGFcbiAgICAvLyBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGRvY3VtZW50XG4gICAgY20uZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTtcbiAgICB2YXIgcHJldlNoaWZ0ID0gY20uZGlzcGxheS5zaGlmdCwgZG9uZSA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBpZiAoY20uaXNSZWFkT25seSgpKSB7IGNtLnN0YXRlLnN1cHByZXNzRWRpdHMgPSB0cnVlOyB9XG4gICAgICBpZiAoZHJvcFNoaWZ0KSB7IGNtLmRpc3BsYXkuc2hpZnQgPSBmYWxzZTsgfVxuICAgICAgZG9uZSA9IGJvdW5kKGNtKSAhPSBQYXNzO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbS5kaXNwbGF5LnNoaWZ0ID0gcHJldlNoaWZ0O1xuICAgICAgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZG9uZVxuICB9XG5cbiAgZnVuY3Rpb24gbG9va3VwS2V5Rm9yRWRpdG9yKGNtLCBuYW1lLCBoYW5kbGUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLnN0YXRlLmtleU1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByZXN1bHQgPSBsb29rdXBLZXkobmFtZSwgY20uc3RhdGUua2V5TWFwc1tpXSwgaGFuZGxlLCBjbSk7XG4gICAgICBpZiAocmVzdWx0KSB7IHJldHVybiByZXN1bHQgfVxuICAgIH1cbiAgICByZXR1cm4gKGNtLm9wdGlvbnMuZXh0cmFLZXlzICYmIGxvb2t1cEtleShuYW1lLCBjbS5vcHRpb25zLmV4dHJhS2V5cywgaGFuZGxlLCBjbSkpXG4gICAgICB8fCBsb29rdXBLZXkobmFtZSwgY20ub3B0aW9ucy5rZXlNYXAsIGhhbmRsZSwgY20pXG4gIH1cblxuICAvLyBOb3RlIHRoYXQsIGRlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHRvIGNoZWNrXG4gIC8vIGZvciBib3VuZCBtb3VzZSBjbGlja3MuXG5cbiAgdmFyIHN0b3BTZXEgPSBuZXcgRGVsYXllZDtcblxuICBmdW5jdGlvbiBkaXNwYXRjaEtleShjbSwgbmFtZSwgZSwgaGFuZGxlKSB7XG4gICAgdmFyIHNlcSA9IGNtLnN0YXRlLmtleVNlcTtcbiAgICBpZiAoc2VxKSB7XG4gICAgICBpZiAoaXNNb2RpZmllcktleShuYW1lKSkgeyByZXR1cm4gXCJoYW5kbGVkXCIgfVxuICAgICAgaWYgKC9cXCckLy50ZXN0KG5hbWUpKVxuICAgICAgICB7IGNtLnN0YXRlLmtleVNlcSA9IG51bGw7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBzdG9wU2VxLnNldCg1MCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjbS5zdGF0ZS5rZXlTZXEgPT0gc2VxKSB7XG4gICAgICAgICAgICBjbS5zdGF0ZS5rZXlTZXEgPSBudWxsO1xuICAgICAgICAgICAgY20uZGlzcGxheS5pbnB1dC5yZXNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IH1cbiAgICAgIGlmIChkaXNwYXRjaEtleUlubmVyKGNtLCBzZXEgKyBcIiBcIiArIG5hbWUsIGUsIGhhbmRsZSkpIHsgcmV0dXJuIHRydWUgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hLZXlJbm5lcihjbSwgbmFtZSwgZSwgaGFuZGxlKVxuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hLZXlJbm5lcihjbSwgbmFtZSwgZSwgaGFuZGxlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleUZvckVkaXRvcihjbSwgbmFtZSwgaGFuZGxlKTtcblxuICAgIGlmIChyZXN1bHQgPT0gXCJtdWx0aVwiKVxuICAgICAgeyBjbS5zdGF0ZS5rZXlTZXEgPSBuYW1lOyB9XG4gICAgaWYgKHJlc3VsdCA9PSBcImhhbmRsZWRcIilcbiAgICAgIHsgc2lnbmFsTGF0ZXIoY20sIFwia2V5SGFuZGxlZFwiLCBjbSwgbmFtZSwgZSk7IH1cblxuICAgIGlmIChyZXN1bHQgPT0gXCJoYW5kbGVkXCIgfHwgcmVzdWx0ID09IFwibXVsdGlcIikge1xuICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgIHJlc3RhcnRCbGluayhjbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICEhcmVzdWx0XG4gIH1cblxuICAvLyBIYW5kbGUgYSBrZXkgZnJvbSB0aGUga2V5ZG93biBldmVudC5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5QmluZGluZyhjbSwgZSkge1xuICAgIHZhciBuYW1lID0ga2V5TmFtZShlLCB0cnVlKTtcbiAgICBpZiAoIW5hbWUpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIGlmIChlLnNoaWZ0S2V5ICYmICFjbS5zdGF0ZS5rZXlTZXEpIHtcbiAgICAgIC8vIEZpcnN0IHRyeSB0byByZXNvbHZlIGZ1bGwgbmFtZSAoaW5jbHVkaW5nICdTaGlmdC0nKS4gRmFpbGluZ1xuICAgICAgLy8gdGhhdCwgc2VlIGlmIHRoZXJlIGlzIGEgY3Vyc29yLW1vdGlvbiBjb21tYW5kIChzdGFydGluZyB3aXRoXG4gICAgICAvLyAnZ28nKSBib3VuZCB0byB0aGUga2V5bmFtZSB3aXRob3V0ICdTaGlmdC0nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCBcIlNoaWZ0LVwiICsgbmFtZSwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pXG4gICAgICAgICAgfHwgZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICBpZiAodHlwZW9mIGIgPT0gXCJzdHJpbmdcIiA/IC9eZ29bQS1aXS8udGVzdChiKSA6IGIubW90aW9uKVxuICAgICAgICAgICAgICAgICB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpIH1cbiAgICAgICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIG5hbWUsIGUsIGZ1bmN0aW9uIChiKSB7IHJldHVybiBkb0hhbmRsZUJpbmRpbmcoY20sIGIpOyB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBhIGtleSBmcm9tIHRoZSBrZXlwcmVzcyBldmVudFxuICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hLZXkoY20sIFwiJ1wiICsgY2ggKyBcIidcIiwgZSwgZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGRvSGFuZGxlQmluZGluZyhjbSwgYiwgdHJ1ZSk7IH0pXG4gIH1cblxuICB2YXIgbGFzdFN0b3BwZWRLZXkgPSBudWxsO1xuICBmdW5jdGlvbiBvbktleURvd24oZSkge1xuICAgIHZhciBjbSA9IHRoaXM7XG4gICAgaWYgKGUudGFyZ2V0ICYmIGUudGFyZ2V0ICE9IGNtLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKSkgeyByZXR1cm4gfVxuICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSAmJiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7XG4gICAgY20uZGlzcGxheS5zaGlmdCA9IGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleTtcbiAgICB2YXIgaGFuZGxlZCA9IGhhbmRsZUtleUJpbmRpbmcoY20sIGUpO1xuICAgIGlmIChwcmVzdG8pIHtcbiAgICAgIGxhc3RTdG9wcGVkS2V5ID0gaGFuZGxlZCA/IGNvZGUgOiBudWxsO1xuICAgICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBldmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ib1xuICAgICAgaWYgKCFoYW5kbGVkICYmIGNvZGUgPT0gODggJiYgIWhhc0NvcHlFdmVudCAmJiAobWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSlcbiAgICAgICAgeyBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpOyB9XG4gICAgfVxuICAgIGlmIChnZWNrbyAmJiAhbWFjICYmICFoYW5kbGVkICYmIGNvZGUgPT0gNDYgJiYgZS5zaGlmdEtleSAmJiAhZS5jdHJsS2V5ICYmIGRvY3VtZW50LmV4ZWNDb21tYW5kKVxuICAgICAgeyBkb2N1bWVudC5leGVjQ29tbWFuZChcImN1dFwiKTsgfVxuXG4gICAgLy8gVHVybiBtb3VzZSBpbnRvIGNyb3NzaGFpciB3aGVuIEFsdCBpcyBoZWxkIG9uIE1hYy5cbiAgICBpZiAoY29kZSA9PSAxOCAmJiAhL1xcYkNvZGVNaXJyb3ItY3Jvc3NoYWlyXFxiLy50ZXN0KGNtLmRpc3BsYXkubGluZURpdi5jbGFzc05hbWUpKVxuICAgICAgeyBzaG93Q3Jvc3NIYWlyKGNtKTsgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvd0Nyb3NzSGFpcihjbSkge1xuICAgIHZhciBsaW5lRGl2ID0gY20uZGlzcGxheS5saW5lRGl2O1xuICAgIGFkZENsYXNzKGxpbmVEaXYsIFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIik7XG5cbiAgICBmdW5jdGlvbiB1cChlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlID09IDE4IHx8ICFlLmFsdEtleSkge1xuICAgICAgICBybUNsYXNzKGxpbmVEaXYsIFwiQ29kZU1pcnJvci1jcm9zc2hhaXJcIik7XG4gICAgICAgIG9mZihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gICAgICAgIG9mZihkb2N1bWVudCwgXCJtb3VzZW92ZXJcIiwgdXApO1xuICAgICAgfVxuICAgIH1cbiAgICBvbihkb2N1bWVudCwgXCJrZXl1cFwiLCB1cCk7XG4gICAgb24oZG9jdW1lbnQsIFwibW91c2VvdmVyXCIsIHVwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5VXAoZSkge1xuICAgIGlmIChlLmtleUNvZGUgPT0gMTYpIHsgdGhpcy5kb2Muc2VsLnNoaWZ0ID0gZmFsc2U7IH1cbiAgICBzaWduYWxET01FdmVudCh0aGlzLCBlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkge1xuICAgIHZhciBjbSA9IHRoaXM7XG4gICAgaWYgKGUudGFyZ2V0ICYmIGUudGFyZ2V0ICE9IGNtLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKSkgeyByZXR1cm4gfVxuICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpIHx8IHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBlLmN0cmxLZXkgJiYgIWUuYWx0S2V5IHx8IG1hYyAmJiBlLm1ldGFLZXkpIHsgcmV0dXJuIH1cbiAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZSwgY2hhckNvZGUgPSBlLmNoYXJDb2RlO1xuICAgIGlmIChwcmVzdG8gJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJufVxuICAgIGlmICgocHJlc3RvICYmICghZS53aGljaCB8fCBlLndoaWNoIDwgMTApKSAmJiBoYW5kbGVLZXlCaW5kaW5nKGNtLCBlKSkgeyByZXR1cm4gfVxuICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUgPT0gbnVsbCA/IGtleUNvZGUgOiBjaGFyQ29kZSk7XG4gICAgLy8gU29tZSBicm93c2VycyBmaXJlIGtleXByZXNzIGV2ZW50cyBmb3IgYmFja3NwYWNlXG4gICAgaWYgKGNoID09IFwiXFx4MDhcIikgeyByZXR1cm4gfVxuICAgIGlmIChoYW5kbGVDaGFyQmluZGluZyhjbSwgZSwgY2gpKSB7IHJldHVybiB9XG4gICAgY20uZGlzcGxheS5pbnB1dC5vbktleVByZXNzKGUpO1xuICB9XG5cbiAgdmFyIERPVUJMRUNMSUNLX0RFTEFZID0gNDAwO1xuXG4gIHZhciBQYXN0Q2xpY2sgPSBmdW5jdGlvbih0aW1lLCBwb3MsIGJ1dHRvbikge1xuICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgdGhpcy5wb3MgPSBwb3M7XG4gICAgdGhpcy5idXR0b24gPSBidXR0b247XG4gIH07XG5cbiAgUGFzdENsaWNrLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKHRpbWUsIHBvcywgYnV0dG9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGltZSArIERPVUJMRUNMSUNLX0RFTEFZID4gdGltZSAmJlxuICAgICAgY21wKHBvcywgdGhpcy5wb3MpID09IDAgJiYgYnV0dG9uID09IHRoaXMuYnV0dG9uXG4gIH07XG5cbiAgdmFyIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrO1xuICBmdW5jdGlvbiBjbGlja1JlcGVhdChwb3MsIGJ1dHRvbikge1xuICAgIHZhciBub3cgPSArbmV3IERhdGU7XG4gICAgaWYgKGxhc3REb3VibGVDbGljayAmJiBsYXN0RG91YmxlQ2xpY2suY29tcGFyZShub3csIHBvcywgYnV0dG9uKSkge1xuICAgICAgbGFzdENsaWNrID0gbGFzdERvdWJsZUNsaWNrID0gbnVsbDtcbiAgICAgIHJldHVybiBcInRyaXBsZVwiXG4gICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLmNvbXBhcmUobm93LCBwb3MsIGJ1dHRvbikpIHtcbiAgICAgIGxhc3REb3VibGVDbGljayA9IG5ldyBQYXN0Q2xpY2sobm93LCBwb3MsIGJ1dHRvbik7XG4gICAgICBsYXN0Q2xpY2sgPSBudWxsO1xuICAgICAgcmV0dXJuIFwiZG91YmxlXCJcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdENsaWNrID0gbmV3IFBhc3RDbGljayhub3csIHBvcywgYnV0dG9uKTtcbiAgICAgIGxhc3REb3VibGVDbGljayA9IG51bGw7XG4gICAgICByZXR1cm4gXCJzaW5nbGVcIlxuICAgIH1cbiAgfVxuXG4gIC8vIEEgbW91c2UgZG93biBjYW4gYmUgYSBzaW5nbGUgY2xpY2ssIGRvdWJsZSBjbGljaywgdHJpcGxlIGNsaWNrLFxuICAvLyBzdGFydCBvZiBzZWxlY3Rpb24gZHJhZywgc3RhcnQgb2YgdGV4dCBkcmFnLCBuZXcgY3Vyc29yXG4gIC8vIChjdHJsLWNsaWNrKSwgcmVjdGFuZ2xlIGRyYWcgKGFsdC1kcmFnKSwgb3IgeHdpblxuICAvLyBtaWRkbGUtY2xpY2stcGFzdGUuIE9yIGl0IG1pZ2h0IGJlIGEgY2xpY2sgb24gc29tZXRoaW5nIHdlIHNob3VsZFxuICAvLyBub3QgaW50ZXJmZXJlIHdpdGgsIHN1Y2ggYXMgYSBzY3JvbGxiYXIgb3Igd2lkZ2V0LlxuICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgdmFyIGNtID0gdGhpcywgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlKSB8fCBkaXNwbGF5LmFjdGl2ZVRvdWNoICYmIGRpc3BsYXkuaW5wdXQuc3VwcG9ydHNUb3VjaCgpKSB7IHJldHVybiB9XG4gICAgZGlzcGxheS5pbnB1dC5lbnN1cmVQb2xsZWQoKTtcbiAgICBkaXNwbGF5LnNoaWZ0ID0gZS5zaGlmdEtleTtcblxuICAgIGlmIChldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpKSB7XG4gICAgICBpZiAoIXdlYmtpdCkge1xuICAgICAgICAvLyBCcmllZmx5IHR1cm4gb2ZmIGRyYWdnYWJpbGl0eSwgdG8gYWxsb3cgd2lkZ2V0cyB0byBkb1xuICAgICAgICAvLyBub3JtYWwgZHJhZ2dpbmcgdGhpbmdzLlxuICAgICAgICBkaXNwbGF5LnNjcm9sbGVyLmRyYWdnYWJsZSA9IGZhbHNlO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gdHJ1ZTsgfSwgMTAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2xpY2tJbkd1dHRlcihjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgYnV0dG9uID0gZV9idXR0b24oZSksIHJlcGVhdCA9IHBvcyA/IGNsaWNrUmVwZWF0KHBvcywgYnV0dG9uKSA6IFwic2luZ2xlXCI7XG4gICAgd2luZG93LmZvY3VzKCk7XG5cbiAgICAvLyAjMzI2MTogbWFrZSBzdXJlLCB0aGF0IHdlJ3JlIG5vdCBzdGFydGluZyBhIHNlY29uZCBzZWxlY3Rpb25cbiAgICBpZiAoYnV0dG9uID09IDEgJiYgY20uc3RhdGUuc2VsZWN0aW5nVGV4dClcbiAgICAgIHsgY20uc3RhdGUuc2VsZWN0aW5nVGV4dChlKTsgfVxuXG4gICAgaWYgKHBvcyAmJiBoYW5kbGVNYXBwZWRCdXR0b24oY20sIGJ1dHRvbiwgcG9zLCByZXBlYXQsIGUpKSB7IHJldHVybiB9XG5cbiAgICBpZiAoYnV0dG9uID09IDEpIHtcbiAgICAgIGlmIChwb3MpIHsgbGVmdEJ1dHRvbkRvd24oY20sIHBvcywgcmVwZWF0LCBlKTsgfVxuICAgICAgZWxzZSBpZiAoZV90YXJnZXQoZSkgPT0gZGlzcGxheS5zY3JvbGxlcikgeyBlX3ByZXZlbnREZWZhdWx0KGUpOyB9XG4gICAgfSBlbHNlIGlmIChidXR0b24gPT0gMikge1xuICAgICAgaWYgKHBvcykgeyBleHRlbmRTZWxlY3Rpb24oY20uZG9jLCBwb3MpOyB9XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfSwgMjApO1xuICAgIH0gZWxzZSBpZiAoYnV0dG9uID09IDMpIHtcbiAgICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykgeyBjbS5kaXNwbGF5LmlucHV0Lm9uQ29udGV4dE1lbnUoZSk7IH1cbiAgICAgIGVsc2UgeyBkZWxheUJsdXJFdmVudChjbSk7IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVNYXBwZWRCdXR0b24oY20sIGJ1dHRvbiwgcG9zLCByZXBlYXQsIGV2ZW50KSB7XG4gICAgdmFyIG5hbWUgPSBcIkNsaWNrXCI7XG4gICAgaWYgKHJlcGVhdCA9PSBcImRvdWJsZVwiKSB7IG5hbWUgPSBcIkRvdWJsZVwiICsgbmFtZTsgfVxuICAgIGVsc2UgaWYgKHJlcGVhdCA9PSBcInRyaXBsZVwiKSB7IG5hbWUgPSBcIlRyaXBsZVwiICsgbmFtZTsgfVxuICAgIG5hbWUgPSAoYnV0dG9uID09IDEgPyBcIkxlZnRcIiA6IGJ1dHRvbiA9PSAyID8gXCJNaWRkbGVcIiA6IFwiUmlnaHRcIikgKyBuYW1lO1xuXG4gICAgcmV0dXJuIGRpc3BhdGNoS2V5KGNtLCAgYWRkTW9kaWZpZXJOYW1lcyhuYW1lLCBldmVudCksIGV2ZW50LCBmdW5jdGlvbiAoYm91bmQpIHtcbiAgICAgIGlmICh0eXBlb2YgYm91bmQgPT0gXCJzdHJpbmdcIikgeyBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTsgfVxuICAgICAgaWYgKCFib3VuZCkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChjbS5pc1JlYWRPbmx5KCkpIHsgY20uc3RhdGUuc3VwcHJlc3NFZGl0cyA9IHRydWU7IH1cbiAgICAgICAgZG9uZSA9IGJvdW5kKGNtLCBwb3MpICE9IFBhc3M7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbS5zdGF0ZS5zdXBwcmVzc0VkaXRzID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9uZVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBjb25maWd1cmVNb3VzZShjbSwgcmVwZWF0LCBldmVudCkge1xuICAgIHZhciBvcHRpb24gPSBjbS5nZXRPcHRpb24oXCJjb25maWd1cmVNb3VzZVwiKTtcbiAgICB2YXIgdmFsdWUgPSBvcHRpb24gPyBvcHRpb24oY20sIHJlcGVhdCwgZXZlbnQpIDoge307XG4gICAgaWYgKHZhbHVlLnVuaXQgPT0gbnVsbCkge1xuICAgICAgdmFyIHJlY3QgPSBjaHJvbWVPUyA/IGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50Lm1ldGFLZXkgOiBldmVudC5hbHRLZXk7XG4gICAgICB2YWx1ZS51bml0ID0gcmVjdCA/IFwicmVjdGFuZ2xlXCIgOiByZXBlYXQgPT0gXCJzaW5nbGVcIiA/IFwiY2hhclwiIDogcmVwZWF0ID09IFwiZG91YmxlXCIgPyBcIndvcmRcIiA6IFwibGluZVwiO1xuICAgIH1cbiAgICBpZiAodmFsdWUuZXh0ZW5kID09IG51bGwgfHwgY20uZG9jLmV4dGVuZCkgeyB2YWx1ZS5leHRlbmQgPSBjbS5kb2MuZXh0ZW5kIHx8IGV2ZW50LnNoaWZ0S2V5OyB9XG4gICAgaWYgKHZhbHVlLmFkZE5ldyA9PSBudWxsKSB7IHZhbHVlLmFkZE5ldyA9IG1hYyA/IGV2ZW50Lm1ldGFLZXkgOiBldmVudC5jdHJsS2V5OyB9XG4gICAgaWYgKHZhbHVlLm1vdmVPbkRyYWcgPT0gbnVsbCkgeyB2YWx1ZS5tb3ZlT25EcmFnID0gIShtYWMgPyBldmVudC5hbHRLZXkgOiBldmVudC5jdHJsS2V5KTsgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgZnVuY3Rpb24gbGVmdEJ1dHRvbkRvd24oY20sIHBvcywgcmVwZWF0LCBldmVudCkge1xuICAgIGlmIChpZSkgeyBzZXRUaW1lb3V0KGJpbmQoZW5zdXJlRm9jdXMsIGNtKSwgMCk7IH1cbiAgICBlbHNlIHsgY20uY3VyT3AuZm9jdXMgPSBhY3RpdmVFbHQoKTsgfVxuXG4gICAgdmFyIGJlaGF2aW9yID0gY29uZmlndXJlTW91c2UoY20sIHJlcGVhdCwgZXZlbnQpO1xuXG4gICAgdmFyIHNlbCA9IGNtLmRvYy5zZWwsIGNvbnRhaW5lZDtcbiAgICBpZiAoY20ub3B0aW9ucy5kcmFnRHJvcCAmJiBkcmFnQW5kRHJvcCAmJiAhY20uaXNSZWFkT25seSgpICYmXG4gICAgICAgIHJlcGVhdCA9PSBcInNpbmdsZVwiICYmIChjb250YWluZWQgPSBzZWwuY29udGFpbnMocG9zKSkgPiAtMSAmJlxuICAgICAgICAoY21wKChjb250YWluZWQgPSBzZWwucmFuZ2VzW2NvbnRhaW5lZF0pLmZyb20oKSwgcG9zKSA8IDAgfHwgcG9zLnhSZWwgPiAwKSAmJlxuICAgICAgICAoY21wKGNvbnRhaW5lZC50bygpLCBwb3MpID4gMCB8fCBwb3MueFJlbCA8IDApKVxuICAgICAgeyBsZWZ0QnV0dG9uU3RhcnREcmFnKGNtLCBldmVudCwgcG9zLCBiZWhhdmlvcik7IH1cbiAgICBlbHNlXG4gICAgICB7IGxlZnRCdXR0b25TZWxlY3QoY20sIGV2ZW50LCBwb3MsIGJlaGF2aW9yKTsgfVxuICB9XG5cbiAgLy8gU3RhcnQgYSB0ZXh0IGRyYWcuIFdoZW4gaXQgZW5kcywgc2VlIGlmIGFueSBkcmFnZ2luZyBhY3R1YWxseVxuICAvLyBoYXBwZW4sIGFuZCB0cmVhdCBhcyBhIGNsaWNrIGlmIGl0IGRpZG4ndC5cbiAgZnVuY3Rpb24gbGVmdEJ1dHRvblN0YXJ0RHJhZyhjbSwgZXZlbnQsIHBvcywgYmVoYXZpb3IpIHtcbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXksIG1vdmVkID0gZmFsc2U7XG4gICAgdmFyIGRyYWdFbmQgPSBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAod2Via2l0KSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ2dhYmxlID0gZmFsc2U7IH1cbiAgICAgIGNtLnN0YXRlLmRyYWdnaW5nVGV4dCA9IGZhbHNlO1xuICAgICAgb2ZmKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgZHJhZ0VuZCk7XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdXNlTW92ZSk7XG4gICAgICBvZmYoZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnc3RhcnRcIiwgZHJhZ1N0YXJ0KTtcbiAgICAgIG9mZihkaXNwbGF5LnNjcm9sbGVyLCBcImRyb3BcIiwgZHJhZ0VuZCk7XG4gICAgICBpZiAoIW1vdmVkKSB7XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIGlmICghYmVoYXZpb3IuYWRkTmV3KVxuICAgICAgICAgIHsgZXh0ZW5kU2VsZWN0aW9uKGNtLmRvYywgcG9zLCBudWxsLCBudWxsLCBiZWhhdmlvci5leHRlbmQpOyB9XG4gICAgICAgIC8vIFdvcmsgYXJvdW5kIHVuZXhwbGFpbmFibGUgZm9jdXMgcHJvYmxlbSBpbiBJRTkgKCMyMTI3KSBhbmQgQ2hyb21lICgjMzA4MSlcbiAgICAgICAgaWYgKCh3ZWJraXQgJiYgIXNhZmFyaSkgfHwgaWUgJiYgaWVfdmVyc2lvbiA9PSA5KVxuICAgICAgICAgIHsgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7ZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQuYm9keS5mb2N1cyh7cHJldmVudFNjcm9sbDogdHJ1ZX0pOyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7fSwgMjApOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IGRpc3BsYXkuaW5wdXQuZm9jdXMoKTsgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBtb3VzZU1vdmUgPSBmdW5jdGlvbihlMikge1xuICAgICAgbW92ZWQgPSBtb3ZlZCB8fCBNYXRoLmFicyhldmVudC5jbGllbnRYIC0gZTIuY2xpZW50WCkgKyBNYXRoLmFicyhldmVudC5jbGllbnRZIC0gZTIuY2xpZW50WSkgPj0gMTA7XG4gICAgfTtcbiAgICB2YXIgZHJhZ1N0YXJ0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbW92ZWQgPSB0cnVlOyB9O1xuICAgIC8vIExldCB0aGUgZHJhZyBoYW5kbGVyIGhhbmRsZSB0aGlzLlxuICAgIGlmICh3ZWJraXQpIHsgZGlzcGxheS5zY3JvbGxlci5kcmFnZ2FibGUgPSB0cnVlOyB9XG4gICAgY20uc3RhdGUuZHJhZ2dpbmdUZXh0ID0gZHJhZ0VuZDtcbiAgICBkcmFnRW5kLmNvcHkgPSAhYmVoYXZpb3IubW92ZU9uRHJhZztcbiAgICAvLyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZVxuICAgIGlmIChkaXNwbGF5LnNjcm9sbGVyLmRyYWdEcm9wKSB7IGRpc3BsYXkuc2Nyb2xsZXIuZHJhZ0Ryb3AoKTsgfVxuICAgIG9uKGRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LCBcIm1vdXNldXBcIiwgZHJhZ0VuZCk7XG4gICAgb24oZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIG1vdXNlTW92ZSk7XG4gICAgb24oZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnc3RhcnRcIiwgZHJhZ1N0YXJ0KTtcbiAgICBvbihkaXNwbGF5LnNjcm9sbGVyLCBcImRyb3BcIiwgZHJhZ0VuZCk7XG5cbiAgICBkZWxheUJsdXJFdmVudChjbSk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHJldHVybiBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH0sIDIwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlRm9yVW5pdChjbSwgcG9zLCB1bml0KSB7XG4gICAgaWYgKHVuaXQgPT0gXCJjaGFyXCIpIHsgcmV0dXJuIG5ldyBSYW5nZShwb3MsIHBvcykgfVxuICAgIGlmICh1bml0ID09IFwid29yZFwiKSB7IHJldHVybiBjbS5maW5kV29yZEF0KHBvcykgfVxuICAgIGlmICh1bml0ID09IFwibGluZVwiKSB7IHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhwb3MubGluZSArIDEsIDApKSkgfVxuICAgIHZhciByZXN1bHQgPSB1bml0KGNtLCBwb3MpO1xuICAgIHJldHVybiBuZXcgUmFuZ2UocmVzdWx0LmZyb20sIHJlc3VsdC50bylcbiAgfVxuXG4gIC8vIE5vcm1hbCBzZWxlY3Rpb24sIGFzIG9wcG9zZWQgdG8gdGV4dCBkcmFnZ2luZy5cbiAgZnVuY3Rpb24gbGVmdEJ1dHRvblNlbGVjdChjbSwgZXZlbnQsIHN0YXJ0LCBiZWhhdmlvcikge1xuICAgIHZhciBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuICAgIGVfcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgdmFyIG91clJhbmdlLCBvdXJJbmRleCwgc3RhcnRTZWwgPSBkb2Muc2VsLCByYW5nZXMgPSBzdGFydFNlbC5yYW5nZXM7XG4gICAgaWYgKGJlaGF2aW9yLmFkZE5ldyAmJiAhYmVoYXZpb3IuZXh0ZW5kKSB7XG4gICAgICBvdXJJbmRleCA9IGRvYy5zZWwuY29udGFpbnMoc3RhcnQpO1xuICAgICAgaWYgKG91ckluZGV4ID4gLTEpXG4gICAgICAgIHsgb3VyUmFuZ2UgPSByYW5nZXNbb3VySW5kZXhdOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgb3VyUmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIHN0YXJ0KTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXJSYW5nZSA9IGRvYy5zZWwucHJpbWFyeSgpO1xuICAgICAgb3VySW5kZXggPSBkb2Muc2VsLnByaW1JbmRleDtcbiAgICB9XG5cbiAgICBpZiAoYmVoYXZpb3IudW5pdCA9PSBcInJlY3RhbmdsZVwiKSB7XG4gICAgICBpZiAoIWJlaGF2aW9yLmFkZE5ldykgeyBvdXJSYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgc3RhcnQpOyB9XG4gICAgICBzdGFydCA9IHBvc0Zyb21Nb3VzZShjbSwgZXZlbnQsIHRydWUsIHRydWUpO1xuICAgICAgb3VySW5kZXggPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJhbmdlID0gcmFuZ2VGb3JVbml0KGNtLCBzdGFydCwgYmVoYXZpb3IudW5pdCk7XG4gICAgICBpZiAoYmVoYXZpb3IuZXh0ZW5kKVxuICAgICAgICB7IG91clJhbmdlID0gZXh0ZW5kUmFuZ2Uob3VyUmFuZ2UsIHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCwgYmVoYXZpb3IuZXh0ZW5kKTsgfVxuICAgICAgZWxzZVxuICAgICAgICB7IG91clJhbmdlID0gcmFuZ2U7IH1cbiAgICB9XG5cbiAgICBpZiAoIWJlaGF2aW9yLmFkZE5ldykge1xuICAgICAgb3VySW5kZXggPSAwO1xuICAgICAgc2V0U2VsZWN0aW9uKGRvYywgbmV3IFNlbGVjdGlvbihbb3VyUmFuZ2VdLCAwKSwgc2VsX21vdXNlKTtcbiAgICAgIHN0YXJ0U2VsID0gZG9jLnNlbDtcbiAgICB9IGVsc2UgaWYgKG91ckluZGV4ID09IC0xKSB7XG4gICAgICBvdXJJbmRleCA9IHJhbmdlcy5sZW5ndGg7XG4gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcy5jb25jYXQoW291clJhbmdlXSksIG91ckluZGV4KSxcbiAgICAgICAgICAgICAgICAgICB7c2Nyb2xsOiBmYWxzZSwgb3JpZ2luOiBcIiptb3VzZVwifSk7XG4gICAgfSBlbHNlIGlmIChyYW5nZXMubGVuZ3RoID4gMSAmJiByYW5nZXNbb3VySW5kZXhdLmVtcHR5KCkgJiYgYmVoYXZpb3IudW5pdCA9PSBcImNoYXJcIiAmJiAhYmVoYXZpb3IuZXh0ZW5kKSB7XG4gICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcy5zbGljZSgwLCBvdXJJbmRleCkuY29uY2F0KHJhbmdlcy5zbGljZShvdXJJbmRleCArIDEpKSwgMCksXG4gICAgICAgICAgICAgICAgICAge3Njcm9sbDogZmFsc2UsIG9yaWdpbjogXCIqbW91c2VcIn0pO1xuICAgICAgc3RhcnRTZWwgPSBkb2Muc2VsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBsYWNlT25lU2VsZWN0aW9uKGRvYywgb3VySW5kZXgsIG91clJhbmdlLCBzZWxfbW91c2UpO1xuICAgIH1cblxuICAgIHZhciBsYXN0UG9zID0gc3RhcnQ7XG4gICAgZnVuY3Rpb24gZXh0ZW5kVG8ocG9zKSB7XG4gICAgICBpZiAoY21wKGxhc3RQb3MsIHBvcykgPT0gMCkgeyByZXR1cm4gfVxuICAgICAgbGFzdFBvcyA9IHBvcztcblxuICAgICAgaWYgKGJlaGF2aW9yLnVuaXQgPT0gXCJyZWN0YW5nbGVcIikge1xuICAgICAgICB2YXIgcmFuZ2VzID0gW10sIHRhYlNpemUgPSBjbS5vcHRpb25zLnRhYlNpemU7XG4gICAgICAgIHZhciBzdGFydENvbCA9IGNvdW50Q29sdW1uKGdldExpbmUoZG9jLCBzdGFydC5saW5lKS50ZXh0LCBzdGFydC5jaCwgdGFiU2l6ZSk7XG4gICAgICAgIHZhciBwb3NDb2wgPSBjb3VudENvbHVtbihnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQsIHBvcy5jaCwgdGFiU2l6ZSk7XG4gICAgICAgIHZhciBsZWZ0ID0gTWF0aC5taW4oc3RhcnRDb2wsIHBvc0NvbCksIHJpZ2h0ID0gTWF0aC5tYXgoc3RhcnRDb2wsIHBvc0NvbCk7XG4gICAgICAgIGZvciAodmFyIGxpbmUgPSBNYXRoLm1pbihzdGFydC5saW5lLCBwb3MubGluZSksIGVuZCA9IE1hdGgubWluKGNtLmxhc3RMaW5lKCksIE1hdGgubWF4KHN0YXJ0LmxpbmUsIHBvcy5saW5lKSk7XG4gICAgICAgICAgICAgbGluZSA8PSBlbmQ7IGxpbmUrKykge1xuICAgICAgICAgIHZhciB0ZXh0ID0gZ2V0TGluZShkb2MsIGxpbmUpLnRleHQsIGxlZnRQb3MgPSBmaW5kQ29sdW1uKHRleHQsIGxlZnQsIHRhYlNpemUpO1xuICAgICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KVxuICAgICAgICAgICAgeyByYW5nZXMucHVzaChuZXcgUmFuZ2UoUG9zKGxpbmUsIGxlZnRQb3MpLCBQb3MobGluZSwgbGVmdFBvcykpKTsgfVxuICAgICAgICAgIGVsc2UgaWYgKHRleHQubGVuZ3RoID4gbGVmdFBvcylcbiAgICAgICAgICAgIHsgcmFuZ2VzLnB1c2gobmV3IFJhbmdlKFBvcyhsaW5lLCBsZWZ0UG9zKSwgUG9zKGxpbmUsIGZpbmRDb2x1bW4odGV4dCwgcmlnaHQsIHRhYlNpemUpKSkpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKSB7IHJhbmdlcy5wdXNoKG5ldyBSYW5nZShzdGFydCwgc3RhcnQpKTsgfVxuICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHN0YXJ0U2VsLnJhbmdlcy5zbGljZSgwLCBvdXJJbmRleCkuY29uY2F0KHJhbmdlcyksIG91ckluZGV4KSxcbiAgICAgICAgICAgICAgICAgICAgIHtvcmlnaW46IFwiKm1vdXNlXCIsIHNjcm9sbDogZmFsc2V9KTtcbiAgICAgICAgY20uc2Nyb2xsSW50b1ZpZXcocG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvbGRSYW5nZSA9IG91clJhbmdlO1xuICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZUZvclVuaXQoY20sIHBvcywgYmVoYXZpb3IudW5pdCk7XG4gICAgICAgIHZhciBhbmNob3IgPSBvbGRSYW5nZS5hbmNob3IsIGhlYWQ7XG4gICAgICAgIGlmIChjbXAocmFuZ2UuYW5jaG9yLCBhbmNob3IpID4gMCkge1xuICAgICAgICAgIGhlYWQgPSByYW5nZS5oZWFkO1xuICAgICAgICAgIGFuY2hvciA9IG1pblBvcyhvbGRSYW5nZS5mcm9tKCksIHJhbmdlLmFuY2hvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZCA9IHJhbmdlLmFuY2hvcjtcbiAgICAgICAgICBhbmNob3IgPSBtYXhQb3Mob2xkUmFuZ2UudG8oKSwgcmFuZ2UuaGVhZCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJhbmdlcyQxID0gc3RhcnRTZWwucmFuZ2VzLnNsaWNlKDApO1xuICAgICAgICByYW5nZXMkMVtvdXJJbmRleF0gPSBiaWRpU2ltcGxpZnkoY20sIG5ldyBSYW5nZShjbGlwUG9zKGRvYywgYW5jaG9yKSwgaGVhZCkpO1xuICAgICAgICBzZXRTZWxlY3Rpb24oZG9jLCBub3JtYWxpemVTZWxlY3Rpb24oY20sIHJhbmdlcyQxLCBvdXJJbmRleCksIHNlbF9tb3VzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGVkaXRvclNpemUgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gVXNlZCB0byBlbnN1cmUgdGltZW91dCByZS10cmllcyBkb24ndCBmaXJlIHdoZW4gYW5vdGhlciBleHRlbmRcbiAgICAvLyBoYXBwZW5lZCBpbiB0aGUgbWVhbnRpbWUgKGNsZWFyVGltZW91dCBpc24ndCByZWxpYWJsZSAtLSBhdFxuICAgIC8vIGxlYXN0IG9uIENocm9tZSwgdGhlIHRpbWVvdXRzIHN0aWxsIGhhcHBlbiBldmVuIHdoZW4gY2xlYXJlZCxcbiAgICAvLyBpZiB0aGUgY2xlYXIgaGFwcGVucyBhZnRlciB0aGVpciBzY2hlZHVsZWQgZmlyaW5nIHRpbWUpLlxuICAgIHZhciBjb3VudGVyID0gMDtcblxuICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7XG4gICAgICB2YXIgY3VyQ291bnQgPSArK2NvdW50ZXI7XG4gICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGNtLCBlLCB0cnVlLCBiZWhhdmlvci51bml0ID09IFwicmVjdGFuZ2xlXCIpO1xuICAgICAgaWYgKCFjdXIpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChjbXAoY3VyLCBsYXN0UG9zKSAhPSAwKSB7XG4gICAgICAgIGNtLmN1ck9wLmZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgICAgIGV4dGVuZFRvKGN1cik7XG4gICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKGRpc3BsYXksIGRvYyk7XG4gICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKVxuICAgICAgICAgIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHtpZiAoY291bnRlciA9PSBjdXJDb3VudCkgeyBleHRlbmQoZSk7IH19KSwgMTUwKTsgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG91dHNpZGUgPSBlLmNsaWVudFkgPCBlZGl0b3JTaXplLnRvcCA/IC0yMCA6IGUuY2xpZW50WSA+IGVkaXRvclNpemUuYm90dG9tID8gMjAgOiAwO1xuICAgICAgICBpZiAob3V0c2lkZSkgeyBzZXRUaW1lb3V0KG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChjb3VudGVyICE9IGN1ckNvdW50KSB7IHJldHVybiB9XG4gICAgICAgICAgZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3AgKz0gb3V0c2lkZTtcbiAgICAgICAgICBleHRlbmQoZSk7XG4gICAgICAgIH0pLCA1MCk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkb25lKGUpIHtcbiAgICAgIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQgPSBmYWxzZTtcbiAgICAgIGNvdW50ZXIgPSBJbmZpbml0eTtcbiAgICAgIC8vIElmIGUgaXMgbnVsbCBvciB1bmRlZmluZWQgd2UgaW50ZXJwcmV0IHRoaXMgYXMgc29tZW9uZSB0cnlpbmdcbiAgICAgIC8vIHRvIGV4cGxpY2l0bHkgY2FuY2VsIHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gdGhlIHVzZXJcbiAgICAgIC8vIGxldHRpbmcgZ28gb2YgdGhlIG1vdXNlIGJ1dHRvbi5cbiAgICAgIGlmIChlKSB7XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIG9mZihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW92ZSk7XG4gICAgICBvZmYoZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCB1cCk7XG4gICAgICBkb2MuaGlzdG9yeS5sYXN0U2VsT3JpZ2luID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgbW92ZSA9IG9wZXJhdGlvbihjbSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLmJ1dHRvbnMgPT09IDAgfHwgIWVfYnV0dG9uKGUpKSB7IGRvbmUoZSk7IH1cbiAgICAgIGVsc2UgeyBleHRlbmQoZSk7IH1cbiAgICB9KTtcbiAgICB2YXIgdXAgPSBvcGVyYXRpb24oY20sIGRvbmUpO1xuICAgIGNtLnN0YXRlLnNlbGVjdGluZ1RleHQgPSB1cDtcbiAgICBvbihkaXNwbGF5LndyYXBwZXIub3duZXJEb2N1bWVudCwgXCJtb3VzZW1vdmVcIiwgbW92ZSk7XG4gICAgb24oZGlzcGxheS53cmFwcGVyLm93bmVyRG9jdW1lbnQsIFwibW91c2V1cFwiLCB1cCk7XG4gIH1cblxuICAvLyBVc2VkIHdoZW4gbW91c2Utc2VsZWN0aW5nIHRvIGFkanVzdCB0aGUgYW5jaG9yIHRvIHRoZSBwcm9wZXIgc2lkZVxuICAvLyBvZiBhIGJpZGkganVtcCBkZXBlbmRpbmcgb24gdGhlIHZpc3VhbCBwb3NpdGlvbiBvZiB0aGUgaGVhZC5cbiAgZnVuY3Rpb24gYmlkaVNpbXBsaWZ5KGNtLCByYW5nZSkge1xuICAgIHZhciBhbmNob3IgPSByYW5nZS5hbmNob3I7XG4gICAgdmFyIGhlYWQgPSByYW5nZS5oZWFkO1xuICAgIHZhciBhbmNob3JMaW5lID0gZ2V0TGluZShjbS5kb2MsIGFuY2hvci5saW5lKTtcbiAgICBpZiAoY21wKGFuY2hvciwgaGVhZCkgPT0gMCAmJiBhbmNob3Iuc3RpY2t5ID09IGhlYWQuc3RpY2t5KSB7IHJldHVybiByYW5nZSB9XG4gICAgdmFyIG9yZGVyID0gZ2V0T3JkZXIoYW5jaG9yTGluZSk7XG4gICAgaWYgKCFvcmRlcikgeyByZXR1cm4gcmFuZ2UgfVxuICAgIHZhciBpbmRleCA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIGFuY2hvci5jaCwgYW5jaG9yLnN0aWNreSksIHBhcnQgPSBvcmRlcltpbmRleF07XG4gICAgaWYgKHBhcnQuZnJvbSAhPSBhbmNob3IuY2ggJiYgcGFydC50byAhPSBhbmNob3IuY2gpIHsgcmV0dXJuIHJhbmdlIH1cbiAgICB2YXIgYm91bmRhcnkgPSBpbmRleCArICgocGFydC5mcm9tID09IGFuY2hvci5jaCkgPT0gKHBhcnQubGV2ZWwgIT0gMSkgPyAwIDogMSk7XG4gICAgaWYgKGJvdW5kYXJ5ID09IDAgfHwgYm91bmRhcnkgPT0gb3JkZXIubGVuZ3RoKSB7IHJldHVybiByYW5nZSB9XG5cbiAgICAvLyBDb21wdXRlIHRoZSByZWxhdGl2ZSB2aXN1YWwgcG9zaXRpb24gb2YgdGhlIGhlYWQgY29tcGFyZWQgdG8gdGhlXG4gICAgLy8gYW5jaG9yICg8MCBpcyB0byB0aGUgbGVmdCwgPjAgdG8gdGhlIHJpZ2h0KVxuICAgIHZhciBsZWZ0U2lkZTtcbiAgICBpZiAoaGVhZC5saW5lICE9IGFuY2hvci5saW5lKSB7XG4gICAgICBsZWZ0U2lkZSA9IChoZWFkLmxpbmUgLSBhbmNob3IubGluZSkgKiAoY20uZG9jLmRpcmVjdGlvbiA9PSBcImx0clwiID8gMSA6IC0xKSA+IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBoZWFkSW5kZXggPSBnZXRCaWRpUGFydEF0KG9yZGVyLCBoZWFkLmNoLCBoZWFkLnN0aWNreSk7XG4gICAgICB2YXIgZGlyID0gaGVhZEluZGV4IC0gaW5kZXggfHwgKGhlYWQuY2ggLSBhbmNob3IuY2gpICogKHBhcnQubGV2ZWwgPT0gMSA/IC0xIDogMSk7XG4gICAgICBpZiAoaGVhZEluZGV4ID09IGJvdW5kYXJ5IC0gMSB8fCBoZWFkSW5kZXggPT0gYm91bmRhcnkpXG4gICAgICAgIHsgbGVmdFNpZGUgPSBkaXIgPCAwOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgbGVmdFNpZGUgPSBkaXIgPiAwOyB9XG4gICAgfVxuXG4gICAgdmFyIHVzZVBhcnQgPSBvcmRlcltib3VuZGFyeSArIChsZWZ0U2lkZSA/IC0xIDogMCldO1xuICAgIHZhciBmcm9tID0gbGVmdFNpZGUgPT0gKHVzZVBhcnQubGV2ZWwgPT0gMSk7XG4gICAgdmFyIGNoID0gZnJvbSA/IHVzZVBhcnQuZnJvbSA6IHVzZVBhcnQudG8sIHN0aWNreSA9IGZyb20gPyBcImFmdGVyXCIgOiBcImJlZm9yZVwiO1xuICAgIHJldHVybiBhbmNob3IuY2ggPT0gY2ggJiYgYW5jaG9yLnN0aWNreSA9PSBzdGlja3kgPyByYW5nZSA6IG5ldyBSYW5nZShuZXcgUG9zKGFuY2hvci5saW5lLCBjaCwgc3RpY2t5KSwgaGVhZClcbiAgfVxuXG5cbiAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIGV2ZW50IGhhcHBlbmVkIGluIHRoZSBndXR0ZXIsIGFuZCBmaXJlcyB0aGVcbiAgLy8gaGFuZGxlcnMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50LlxuICBmdW5jdGlvbiBndXR0ZXJFdmVudChjbSwgZSwgdHlwZSwgcHJldmVudCkge1xuICAgIHZhciBtWCwgbVk7XG4gICAgaWYgKGUudG91Y2hlcykge1xuICAgICAgbVggPSBlLnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIG1ZID0gZS50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7IG1YID0gZS5jbGllbnRYOyBtWSA9IGUuY2xpZW50WTsgfVxuICAgICAgY2F0Y2goZSQxKSB7IHJldHVybiBmYWxzZSB9XG4gICAgfVxuICAgIGlmIChtWCA+PSBNYXRoLmZsb29yKGNtLmRpc3BsYXkuZ3V0dGVycy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBpZiAocHJldmVudCkgeyBlX3ByZXZlbnREZWZhdWx0KGUpOyB9XG5cbiAgICB2YXIgZGlzcGxheSA9IGNtLmRpc3BsYXk7XG4gICAgdmFyIGxpbmVCb3ggPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAobVkgPiBsaW5lQm94LmJvdHRvbSB8fCAhaGFzSGFuZGxlcihjbSwgdHlwZSkpIHsgcmV0dXJuIGVfZGVmYXVsdFByZXZlbnRlZChlKSB9XG4gICAgbVkgLT0gbGluZUJveC50b3AgLSBkaXNwbGF5LnZpZXdPZmZzZXQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtLmRpc3BsYXkuZ3V0dGVyU3BlY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgIHZhciBnID0gZGlzcGxheS5ndXR0ZXJzLmNoaWxkTm9kZXNbaV07XG4gICAgICBpZiAoZyAmJiBnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ID49IG1YKSB7XG4gICAgICAgIHZhciBsaW5lID0gbGluZUF0SGVpZ2h0KGNtLmRvYywgbVkpO1xuICAgICAgICB2YXIgZ3V0dGVyID0gY20uZGlzcGxheS5ndXR0ZXJTcGVjc1tpXTtcbiAgICAgICAgc2lnbmFsKGNtLCB0eXBlLCBjbSwgbGluZSwgZ3V0dGVyLmNsYXNzTmFtZSwgZSk7XG4gICAgICAgIHJldHVybiBlX2RlZmF1bHRQcmV2ZW50ZWQoZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGlja0luR3V0dGVyKGNtLCBlKSB7XG4gICAgcmV0dXJuIGd1dHRlckV2ZW50KGNtLCBlLCBcImd1dHRlckNsaWNrXCIsIHRydWUpXG4gIH1cblxuICAvLyBDT05URVhUIE1FTlUgSEFORExJTkdcblxuICAvLyBUbyBtYWtlIHRoZSBjb250ZXh0IG1lbnUgd29yaywgd2UgbmVlZCB0byBicmllZmx5IHVuaGlkZSB0aGVcbiAgLy8gdGV4dGFyZWEgKG1ha2luZyBpdCBhcyB1bm9idHJ1c2l2ZSBhcyBwb3NzaWJsZSkgdG8gbGV0IHRoZVxuICAvLyByaWdodC1jbGljayB0YWtlIGVmZmVjdCBvbiBpdC5cbiAgZnVuY3Rpb24gb25Db250ZXh0TWVudShjbSwgZSkge1xuICAgIGlmIChldmVudEluV2lkZ2V0KGNtLmRpc3BsYXksIGUpIHx8IGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpKSB7IHJldHVybiB9XG4gICAgaWYgKHNpZ25hbERPTUV2ZW50KGNtLCBlLCBcImNvbnRleHRtZW51XCIpKSB7IHJldHVybiB9XG4gICAgaWYgKCFjYXB0dXJlUmlnaHRDbGljaykgeyBjbS5kaXNwbGF5LmlucHV0Lm9uQ29udGV4dE1lbnUoZSk7IH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRleHRNZW51SW5HdXR0ZXIoY20sIGUpIHtcbiAgICBpZiAoIWhhc0hhbmRsZXIoY20sIFwiZ3V0dGVyQ29udGV4dE1lbnVcIikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICByZXR1cm4gZ3V0dGVyRXZlbnQoY20sIGUsIFwiZ3V0dGVyQ29udGV4dE1lbnVcIiwgZmFsc2UpXG4gIH1cblxuICBmdW5jdGlvbiB0aGVtZUNoYW5nZWQoY20pIHtcbiAgICBjbS5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lID0gY20uZGlzcGxheS53cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9cXHMqY20tcy1cXFMrL2csIFwiXCIpICtcbiAgICAgIGNtLm9wdGlvbnMudGhlbWUucmVwbGFjZSgvKF58XFxzKVxccyovZywgXCIgY20tcy1cIik7XG4gICAgY2xlYXJDYWNoZXMoY20pO1xuICB9XG5cbiAgdmFyIEluaXQgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuIFwiQ29kZU1pcnJvci5Jbml0XCJ9fTtcblxuICB2YXIgZGVmYXVsdHMgPSB7fTtcbiAgdmFyIG9wdGlvbkhhbmRsZXJzID0ge307XG5cbiAgZnVuY3Rpb24gZGVmaW5lT3B0aW9ucyhDb2RlTWlycm9yKSB7XG4gICAgdmFyIG9wdGlvbkhhbmRsZXJzID0gQ29kZU1pcnJvci5vcHRpb25IYW5kbGVycztcblxuICAgIGZ1bmN0aW9uIG9wdGlvbihuYW1lLCBkZWZsdCwgaGFuZGxlLCBub3RPbkluaXQpIHtcbiAgICAgIENvZGVNaXJyb3IuZGVmYXVsdHNbbmFtZV0gPSBkZWZsdDtcbiAgICAgIGlmIChoYW5kbGUpIHsgb3B0aW9uSGFuZGxlcnNbbmFtZV0gPVxuICAgICAgICBub3RPbkluaXQgPyBmdW5jdGlvbiAoY20sIHZhbCwgb2xkKSB7aWYgKG9sZCAhPSBJbml0KSB7IGhhbmRsZShjbSwgdmFsLCBvbGQpOyB9fSA6IGhhbmRsZTsgfVxuICAgIH1cblxuICAgIENvZGVNaXJyb3IuZGVmaW5lT3B0aW9uID0gb3B0aW9uO1xuXG4gICAgLy8gUGFzc2VkIHRvIG9wdGlvbiBoYW5kbGVycyB3aGVuIHRoZXJlIGlzIG5vIG9sZCB2YWx1ZS5cbiAgICBDb2RlTWlycm9yLkluaXQgPSBJbml0O1xuXG4gICAgLy8gVGhlc2UgdHdvIGFyZSwgb24gaW5pdCwgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yIGJlY2F1c2UgdGhleVxuICAgIC8vIGhhdmUgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlZGl0b3IgY2FuIHN0YXJ0IGF0IGFsbC5cbiAgICBvcHRpb24oXCJ2YWx1ZVwiLCBcIlwiLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uc2V0VmFsdWUodmFsKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibW9kZVwiLCBudWxsLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgY20uZG9jLm1vZGVPcHRpb24gPSB2YWw7XG4gICAgICBsb2FkTW9kZShjbSk7XG4gICAgfSwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJpbmRlbnRVbml0XCIsIDIsIGxvYWRNb2RlLCB0cnVlKTtcbiAgICBvcHRpb24oXCJpbmRlbnRXaXRoVGFic1wiLCBmYWxzZSk7XG4gICAgb3B0aW9uKFwic21hcnRJbmRlbnRcIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwidGFiU2l6ZVwiLCA0LCBmdW5jdGlvbiAoY20pIHtcbiAgICAgIHJlc2V0TW9kZVN0YXRlKGNtKTtcbiAgICAgIGNsZWFyQ2FjaGVzKGNtKTtcbiAgICAgIHJlZ0NoYW5nZShjbSk7XG4gICAgfSwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJsaW5lU2VwYXJhdG9yXCIsIG51bGwsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kb2MubGluZVNlcCA9IHZhbDtcbiAgICAgIGlmICghdmFsKSB7IHJldHVybiB9XG4gICAgICB2YXIgbmV3QnJlYWtzID0gW10sIGxpbmVObyA9IGNtLmRvYy5maXJzdDtcbiAgICAgIGNtLmRvYy5pdGVyKGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgIGZvciAodmFyIHBvcyA9IDA7Oykge1xuICAgICAgICAgIHZhciBmb3VuZCA9IGxpbmUudGV4dC5pbmRleE9mKHZhbCwgcG9zKTtcbiAgICAgICAgICBpZiAoZm91bmQgPT0gLTEpIHsgYnJlYWsgfVxuICAgICAgICAgIHBvcyA9IGZvdW5kICsgdmFsLmxlbmd0aDtcbiAgICAgICAgICBuZXdCcmVha3MucHVzaChQb3MobGluZU5vLCBmb3VuZCkpO1xuICAgICAgICB9XG4gICAgICAgIGxpbmVObysrO1xuICAgICAgfSk7XG4gICAgICBmb3IgKHZhciBpID0gbmV3QnJlYWtzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKVxuICAgICAgICB7IHJlcGxhY2VSYW5nZShjbS5kb2MsIHZhbCwgbmV3QnJlYWtzW2ldLCBQb3MobmV3QnJlYWtzW2ldLmxpbmUsIG5ld0JyZWFrc1tpXS5jaCArIHZhbC5sZW5ndGgpKTsgfVxuICAgIH0pO1xuICAgIG9wdGlvbihcInNwZWNpYWxDaGFyc1wiLCAvW1xcdTAwMDAtXFx1MDAxZlxcdTAwN2YtXFx1MDA5ZlxcdTAwYWRcXHUwNjFjXFx1MjAwYi1cXHUyMDBjXFx1MjAwZVxcdTIwMGZcXHUyMDI4XFx1MjAyOVxcdWZlZmZcXHVmZmY5LVxcdWZmZmNdL2csIGZ1bmN0aW9uIChjbSwgdmFsLCBvbGQpIHtcbiAgICAgIGNtLnN0YXRlLnNwZWNpYWxDaGFycyA9IG5ldyBSZWdFeHAodmFsLnNvdXJjZSArICh2YWwudGVzdChcIlxcdFwiKSA/IFwiXCIgOiBcInxcXHRcIiksIFwiZ1wiKTtcbiAgICAgIGlmIChvbGQgIT0gSW5pdCkgeyBjbS5yZWZyZXNoKCk7IH1cbiAgICB9KTtcbiAgICBvcHRpb24oXCJzcGVjaWFsQ2hhclBsYWNlaG9sZGVyXCIsIGRlZmF1bHRTcGVjaWFsQ2hhclBsYWNlaG9sZGVyLCBmdW5jdGlvbiAoY20pIHsgcmV0dXJuIGNtLnJlZnJlc2goKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZWxlY3RyaWNDaGFyc1wiLCB0cnVlKTtcbiAgICBvcHRpb24oXCJpbnB1dFN0eWxlXCIsIG1vYmlsZSA/IFwiY29udGVudGVkaXRhYmxlXCIgOiBcInRleHRhcmVhXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlucHV0U3R5bGUgY2FuIG5vdCAoeWV0KSBiZSBjaGFuZ2VkIGluIGEgcnVubmluZyBlZGl0b3JcIikgLy8gRklYTUVcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJzcGVsbGNoZWNrXCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLnNwZWxsY2hlY2sgPSB2YWw7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcImF1dG9jb3JyZWN0XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkgeyByZXR1cm4gY20uZ2V0SW5wdXRGaWVsZCgpLmF1dG9jb3JyZWN0ID0gdmFsOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJhdXRvY2FwaXRhbGl6ZVwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmdldElucHV0RmllbGQoKS5hdXRvY2FwaXRhbGl6ZSA9IHZhbDsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwicnRsTW92ZVZpc3VhbGx5XCIsICF3aW5kb3dzKTtcbiAgICBvcHRpb24oXCJ3aG9sZUxpbmVVcGRhdGVCZWZvcmVcIiwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJ0aGVtZVwiLCBcImRlZmF1bHRcIiwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICB0aGVtZUNoYW5nZWQoY20pO1xuICAgICAgdXBkYXRlR3V0dGVycyhjbSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwia2V5TWFwXCIsIFwiZGVmYXVsdFwiLCBmdW5jdGlvbiAoY20sIHZhbCwgb2xkKSB7XG4gICAgICB2YXIgbmV4dCA9IGdldEtleU1hcCh2YWwpO1xuICAgICAgdmFyIHByZXYgPSBvbGQgIT0gSW5pdCAmJiBnZXRLZXlNYXAob2xkKTtcbiAgICAgIGlmIChwcmV2ICYmIHByZXYuZGV0YWNoKSB7IHByZXYuZGV0YWNoKGNtLCBuZXh0KTsgfVxuICAgICAgaWYgKG5leHQuYXR0YWNoKSB7IG5leHQuYXR0YWNoKGNtLCBwcmV2IHx8IG51bGwpOyB9XG4gICAgfSk7XG4gICAgb3B0aW9uKFwiZXh0cmFLZXlzXCIsIG51bGwpO1xuICAgIG9wdGlvbihcImNvbmZpZ3VyZU1vdXNlXCIsIG51bGwpO1xuXG4gICAgb3B0aW9uKFwibGluZVdyYXBwaW5nXCIsIGZhbHNlLCB3cmFwcGluZ0NoYW5nZWQsIHRydWUpO1xuICAgIG9wdGlvbihcImd1dHRlcnNcIiwgW10sIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyh2YWwsIGNtLm9wdGlvbnMubGluZU51bWJlcnMpO1xuICAgICAgdXBkYXRlR3V0dGVycyhjbSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiZml4ZWRHdXR0ZXJcIiwgdHJ1ZSwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIGNtLmRpc3BsYXkuZ3V0dGVycy5zdHlsZS5sZWZ0ID0gdmFsID8gY29tcGVuc2F0ZUZvckhTY3JvbGwoY20uZGlzcGxheSkgKyBcInB4XCIgOiBcIjBcIjtcbiAgICAgIGNtLnJlZnJlc2goKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJjb3Zlckd1dHRlck5leHRUb1Njcm9sbGJhclwiLCBmYWxzZSwgZnVuY3Rpb24gKGNtKSB7IHJldHVybiB1cGRhdGVTY3JvbGxiYXJzKGNtKTsgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2Nyb2xsYmFyU3R5bGVcIiwgXCJuYXRpdmVcIiwgZnVuY3Rpb24gKGNtKSB7XG4gICAgICBpbml0U2Nyb2xsYmFycyhjbSk7XG4gICAgICB1cGRhdGVTY3JvbGxiYXJzKGNtKTtcbiAgICAgIGNtLmRpc3BsYXkuc2Nyb2xsYmFycy5zZXRTY3JvbGxUb3AoY20uZG9jLnNjcm9sbFRvcCk7XG4gICAgICBjbS5kaXNwbGF5LnNjcm9sbGJhcnMuc2V0U2Nyb2xsTGVmdChjbS5kb2Muc2Nyb2xsTGVmdCk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZU51bWJlcnNcIiwgZmFsc2UsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBjbS5kaXNwbGF5Lmd1dHRlclNwZWNzID0gZ2V0R3V0dGVycyhjbS5vcHRpb25zLmd1dHRlcnMsIHZhbCk7XG4gICAgICB1cGRhdGVHdXR0ZXJzKGNtKTtcbiAgICB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJmaXJzdExpbmVOdW1iZXJcIiwgMSwgdXBkYXRlR3V0dGVycywgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZU51bWJlckZvcm1hdHRlclwiLCBmdW5jdGlvbiAoaW50ZWdlcikgeyByZXR1cm4gaW50ZWdlcjsgfSwgdXBkYXRlR3V0dGVycywgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2hvd0N1cnNvcldoZW5TZWxlY3RpbmdcIiwgZmFsc2UsIHVwZGF0ZVNlbGVjdGlvbiwgdHJ1ZSk7XG5cbiAgICBvcHRpb24oXCJyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnVcIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwibGluZVdpc2VDb3B5Q3V0XCIsIHRydWUpO1xuICAgIG9wdGlvbihcInBhc3RlTGluZXNQZXJTZWxlY3Rpb25cIiwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwic2VsZWN0aW9uc01heVRvdWNoXCIsIGZhbHNlKTtcblxuICAgIG9wdGlvbihcInJlYWRPbmx5XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkge1xuICAgICAgaWYgKHZhbCA9PSBcIm5vY3Vyc29yXCIpIHtcbiAgICAgICAgb25CbHVyKGNtKTtcbiAgICAgICAgY20uZGlzcGxheS5pbnB1dC5ibHVyKCk7XG4gICAgICB9XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnJlYWRPbmx5Q2hhbmdlZCh2YWwpO1xuICAgIH0pO1xuXG4gICAgb3B0aW9uKFwic2NyZWVuUmVhZGVyTGFiZWxcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHtcbiAgICAgIHZhbCA9ICh2YWwgPT09ICcnKSA/IG51bGwgOiB2YWw7XG4gICAgICBjbS5kaXNwbGF5LmlucHV0LnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZCh2YWwpO1xuICAgIH0pO1xuXG4gICAgb3B0aW9uKFwiZGlzYWJsZUlucHV0XCIsIGZhbHNlLCBmdW5jdGlvbiAoY20sIHZhbCkge2lmICghdmFsKSB7IGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTsgfX0sIHRydWUpO1xuICAgIG9wdGlvbihcImRyYWdEcm9wXCIsIHRydWUsIGRyYWdEcm9wQ2hhbmdlZCk7XG4gICAgb3B0aW9uKFwiYWxsb3dEcm9wRmlsZVR5cGVzXCIsIG51bGwpO1xuXG4gICAgb3B0aW9uKFwiY3Vyc29yQmxpbmtSYXRlXCIsIDUzMCk7XG4gICAgb3B0aW9uKFwiY3Vyc29yU2Nyb2xsTWFyZ2luXCIsIDApO1xuICAgIG9wdGlvbihcImN1cnNvckhlaWdodFwiLCAxLCB1cGRhdGVTZWxlY3Rpb24sIHRydWUpO1xuICAgIG9wdGlvbihcInNpbmdsZUN1cnNvckhlaWdodFBlckxpbmVcIiwgdHJ1ZSwgdXBkYXRlU2VsZWN0aW9uLCB0cnVlKTtcbiAgICBvcHRpb24oXCJ3b3JrVGltZVwiLCAxMDApO1xuICAgIG9wdGlvbihcIndvcmtEZWxheVwiLCAxMDApO1xuICAgIG9wdGlvbihcImZsYXR0ZW5TcGFuc1wiLCB0cnVlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwiYWRkTW9kZUNsYXNzXCIsIGZhbHNlLCByZXNldE1vZGVTdGF0ZSwgdHJ1ZSk7XG4gICAgb3B0aW9uKFwicG9sbEludGVydmFsXCIsIDEwMCk7XG4gICAgb3B0aW9uKFwidW5kb0RlcHRoXCIsIDIwMCwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmRvYy5oaXN0b3J5LnVuZG9EZXB0aCA9IHZhbDsgfSk7XG4gICAgb3B0aW9uKFwiaGlzdG9yeUV2ZW50RGVsYXlcIiwgMTI1MCk7XG4gICAgb3B0aW9uKFwidmlld3BvcnRNYXJnaW5cIiwgMTAsIGZ1bmN0aW9uIChjbSkgeyByZXR1cm4gY20ucmVmcmVzaCgpOyB9LCB0cnVlKTtcbiAgICBvcHRpb24oXCJtYXhIaWdobGlnaHRMZW5ndGhcIiwgMTAwMDAsIHJlc2V0TW9kZVN0YXRlLCB0cnVlKTtcbiAgICBvcHRpb24oXCJtb3ZlSW5wdXRXaXRoQ3Vyc29yXCIsIHRydWUsIGZ1bmN0aW9uIChjbSwgdmFsKSB7XG4gICAgICBpZiAoIXZhbCkgeyBjbS5kaXNwbGF5LmlucHV0LnJlc2V0UG9zaXRpb24oKTsgfVxuICAgIH0pO1xuXG4gICAgb3B0aW9uKFwidGFiaW5kZXhcIiwgbnVsbCwgZnVuY3Rpb24gKGNtLCB2YWwpIHsgcmV0dXJuIGNtLmRpc3BsYXkuaW5wdXQuZ2V0RmllbGQoKS50YWJJbmRleCA9IHZhbCB8fCBcIlwiOyB9KTtcbiAgICBvcHRpb24oXCJhdXRvZm9jdXNcIiwgbnVsbCk7XG4gICAgb3B0aW9uKFwiZGlyZWN0aW9uXCIsIFwibHRyXCIsIGZ1bmN0aW9uIChjbSwgdmFsKSB7IHJldHVybiBjbS5kb2Muc2V0RGlyZWN0aW9uKHZhbCk7IH0sIHRydWUpO1xuICAgIG9wdGlvbihcInBocmFzZXNcIiwgbnVsbCk7XG4gIH1cblxuICBmdW5jdGlvbiBkcmFnRHJvcENoYW5nZWQoY20sIHZhbHVlLCBvbGQpIHtcbiAgICB2YXIgd2FzT24gPSBvbGQgJiYgb2xkICE9IEluaXQ7XG4gICAgaWYgKCF2YWx1ZSAhPSAhd2FzT24pIHtcbiAgICAgIHZhciBmdW5jcyA9IGNtLmRpc3BsYXkuZHJhZ0Z1bmN0aW9ucztcbiAgICAgIHZhciB0b2dnbGUgPSB2YWx1ZSA/IG9uIDogb2ZmO1xuICAgICAgdG9nZ2xlKGNtLmRpc3BsYXkuc2Nyb2xsZXIsIFwiZHJhZ3N0YXJ0XCIsIGZ1bmNzLnN0YXJ0KTtcbiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdlbnRlclwiLCBmdW5jcy5lbnRlcik7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcmFnb3ZlclwiLCBmdW5jcy5vdmVyKTtcbiAgICAgIHRvZ2dsZShjbS5kaXNwbGF5LnNjcm9sbGVyLCBcImRyYWdsZWF2ZVwiLCBmdW5jcy5sZWF2ZSk7XG4gICAgICB0b2dnbGUoY20uZGlzcGxheS5zY3JvbGxlciwgXCJkcm9wXCIsIGZ1bmNzLmRyb3ApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXBwaW5nQ2hhbmdlZChjbSkge1xuICAgIGlmIChjbS5vcHRpb25zLmxpbmVXcmFwcGluZykge1xuICAgICAgYWRkQ2xhc3MoY20uZGlzcGxheS53cmFwcGVyLCBcIkNvZGVNaXJyb3Itd3JhcFwiKTtcbiAgICAgIGNtLmRpc3BsYXkuc2l6ZXIuc3R5bGUubWluV2lkdGggPSBcIlwiO1xuICAgICAgY20uZGlzcGxheS5zaXplcldpZHRoID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcm1DbGFzcyhjbS5kaXNwbGF5LndyYXBwZXIsIFwiQ29kZU1pcnJvci13cmFwXCIpO1xuICAgICAgZmluZE1heExpbmUoY20pO1xuICAgIH1cbiAgICBlc3RpbWF0ZUxpbmVIZWlnaHRzKGNtKTtcbiAgICByZWdDaGFuZ2UoY20pO1xuICAgIGNsZWFyQ2FjaGVzKGNtKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHVwZGF0ZVNjcm9sbGJhcnMoY20pOyB9LCAxMDApO1xuICB9XG5cbiAgLy8gQSBDb2RlTWlycm9yIGluc3RhbmNlIHJlcHJlc2VudHMgYW4gZWRpdG9yLiBUaGlzIGlzIHRoZSBvYmplY3RcbiAgLy8gdGhhdCB1c2VyIGNvZGUgaXMgdXN1YWxseSBkZWFsaW5nIHdpdGguXG5cbiAgZnVuY3Rpb24gQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvZGVNaXJyb3IpKSB7IHJldHVybiBuZXcgQ29kZU1pcnJvcihwbGFjZSwgb3B0aW9ucykgfVxuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMpIDoge307XG4gICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuXG4gICAgY29weU9iaihkZWZhdWx0cywgb3B0aW9ucywgZmFsc2UpO1xuXG4gICAgdmFyIGRvYyA9IG9wdGlvbnMudmFsdWU7XG4gICAgaWYgKHR5cGVvZiBkb2MgPT0gXCJzdHJpbmdcIikgeyBkb2MgPSBuZXcgRG9jKGRvYywgb3B0aW9ucy5tb2RlLCBudWxsLCBvcHRpb25zLmxpbmVTZXBhcmF0b3IsIG9wdGlvbnMuZGlyZWN0aW9uKTsgfVxuICAgIGVsc2UgaWYgKG9wdGlvbnMubW9kZSkgeyBkb2MubW9kZU9wdGlvbiA9IG9wdGlvbnMubW9kZTsgfVxuICAgIHRoaXMuZG9jID0gZG9jO1xuXG4gICAgdmFyIGlucHV0ID0gbmV3IENvZGVNaXJyb3IuaW5wdXRTdHlsZXNbb3B0aW9ucy5pbnB1dFN0eWxlXSh0aGlzKTtcbiAgICB2YXIgZGlzcGxheSA9IHRoaXMuZGlzcGxheSA9IG5ldyBEaXNwbGF5KHBsYWNlLCBkb2MsIGlucHV0LCBvcHRpb25zKTtcbiAgICBkaXNwbGF5LndyYXBwZXIuQ29kZU1pcnJvciA9IHRoaXM7XG4gICAgdGhlbWVDaGFuZ2VkKHRoaXMpO1xuICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZylcbiAgICAgIHsgdGhpcy5kaXNwbGF5LndyYXBwZXIuY2xhc3NOYW1lICs9IFwiIENvZGVNaXJyb3Itd3JhcFwiOyB9XG4gICAgaW5pdFNjcm9sbGJhcnModGhpcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAga2V5TWFwczogW10sICAvLyBzdG9yZXMgbWFwcyBhZGRlZCBieSBhZGRLZXlNYXBcbiAgICAgIG92ZXJsYXlzOiBbXSwgLy8gaGlnaGxpZ2h0aW5nIG92ZXJsYXlzLCBhcyBhZGRlZCBieSBhZGRPdmVybGF5XG4gICAgICBtb2RlR2VuOiAwLCAgIC8vIGJ1bXBlZCB3aGVuIG1vZGUvb3ZlcmxheSBjaGFuZ2VzLCB1c2VkIHRvIGludmFsaWRhdGUgaGlnaGxpZ2h0aW5nIGluZm9cbiAgICAgIG92ZXJ3cml0ZTogZmFsc2UsXG4gICAgICBkZWxheWluZ0JsdXJFdmVudDogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzRWRpdHM6IGZhbHNlLCAvLyB1c2VkIHRvIGRpc2FibGUgZWRpdGluZyBkdXJpbmcga2V5IGhhbmRsZXJzIHdoZW4gaW4gcmVhZE9ubHkgbW9kZVxuICAgICAgcGFzdGVJbmNvbWluZzogLTEsIGN1dEluY29taW5nOiAtMSwgLy8gaGVscCByZWNvZ25pemUgcGFzdGUvY3V0IGVkaXRzIGluIGlucHV0LnBvbGxcbiAgICAgIHNlbGVjdGluZ1RleHQ6IGZhbHNlLFxuICAgICAgZHJhZ2dpbmdUZXh0OiBmYWxzZSxcbiAgICAgIGhpZ2hsaWdodDogbmV3IERlbGF5ZWQoKSwgLy8gc3RvcmVzIGhpZ2hsaWdodCB3b3JrZXIgdGltZW91dFxuICAgICAga2V5U2VxOiBudWxsLCAgLy8gVW5maW5pc2hlZCBrZXkgc2VxdWVuY2VcbiAgICAgIHNwZWNpYWxDaGFyczogbnVsbFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgeyBkaXNwbGF5LmlucHV0LmZvY3VzKCk7IH1cblxuICAgIC8vIE92ZXJyaWRlIG1hZ2ljIHRleHRhcmVhIGNvbnRlbnQgcmVzdG9yZSB0aGF0IElFIHNvbWV0aW1lcyBkb2VzXG4gICAgLy8gb24gb3VyIGhpZGRlbiB0ZXh0YXJlYSBvbiByZWxvYWRcbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDExKSB7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmRpc3BsYXkuaW5wdXQucmVzZXQodHJ1ZSk7IH0sIDIwKTsgfVxuXG4gICAgcmVnaXN0ZXJFdmVudEhhbmRsZXJzKHRoaXMpO1xuICAgIGVuc3VyZUdsb2JhbEhhbmRsZXJzKCk7XG5cbiAgICBzdGFydE9wZXJhdGlvbih0aGlzKTtcbiAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICBhdHRhY2hEb2ModGhpcywgZG9jKTtcblxuICAgIGlmICgob3B0aW9ucy5hdXRvZm9jdXMgJiYgIW1vYmlsZSkgfHwgdGhpcy5oYXNGb2N1cygpKVxuICAgICAgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMkMS5oYXNGb2N1cygpICYmICF0aGlzJDEuc3RhdGUuZm9jdXNlZCkgeyBvbkZvY3VzKHRoaXMkMSk7IH1cbiAgICAgIH0sIDIwKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgb25CbHVyKHRoaXMpOyB9XG5cbiAgICBmb3IgKHZhciBvcHQgaW4gb3B0aW9uSGFuZGxlcnMpIHsgaWYgKG9wdGlvbkhhbmRsZXJzLmhhc093blByb3BlcnR5KG9wdCkpXG4gICAgICB7IG9wdGlvbkhhbmRsZXJzW29wdF0odGhpcywgb3B0aW9uc1tvcHRdLCBJbml0KTsgfSB9XG4gICAgbWF5YmVVcGRhdGVMaW5lTnVtYmVyV2lkdGgodGhpcyk7XG4gICAgaWYgKG9wdGlvbnMuZmluaXNoSW5pdCkgeyBvcHRpb25zLmZpbmlzaEluaXQodGhpcyk7IH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRIb29rcy5sZW5ndGg7ICsraSkgeyBpbml0SG9va3NbaV0odGhpcyk7IH1cbiAgICBlbmRPcGVyYXRpb24odGhpcyk7XG4gICAgLy8gU3VwcHJlc3Mgb3B0aW1pemVsZWdpYmlsaXR5IGluIFdlYmtpdCwgc2luY2UgaXQgYnJlYWtzIHRleHRcbiAgICAvLyBtZWFzdXJpbmcgb24gbGluZSB3cmFwcGluZyBib3VuZGFyaWVzLlxuICAgIGlmICh3ZWJraXQgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiZcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkaXNwbGF5LmxpbmVEaXYpLnRleHRSZW5kZXJpbmcgPT0gXCJvcHRpbWl6ZWxlZ2liaWxpdHlcIilcbiAgICAgIHsgZGlzcGxheS5saW5lRGl2LnN0eWxlLnRleHRSZW5kZXJpbmcgPSBcImF1dG9cIjsgfVxuICB9XG5cbiAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICBDb2RlTWlycm9yLmRlZmF1bHRzID0gZGVmYXVsdHM7XG4gIC8vIEZ1bmN0aW9ucyB0byBydW4gd2hlbiBvcHRpb25zIGFyZSBjaGFuZ2VkLlxuICBDb2RlTWlycm9yLm9wdGlvbkhhbmRsZXJzID0gb3B0aW9uSGFuZGxlcnM7XG5cbiAgLy8gQXR0YWNoIHRoZSBuZWNlc3NhcnkgZXZlbnQgaGFuZGxlcnMgd2hlbiBpbml0aWFsaXppbmcgdGhlIGVkaXRvclxuICBmdW5jdGlvbiByZWdpc3RlckV2ZW50SGFuZGxlcnMoY20pIHtcbiAgICB2YXIgZCA9IGNtLmRpc3BsYXk7XG4gICAgb24oZC5zY3JvbGxlciwgXCJtb3VzZWRvd25cIiwgb3BlcmF0aW9uKGNtLCBvbk1vdXNlRG93bikpO1xuICAgIC8vIE9sZGVyIElFJ3Mgd2lsbCBub3QgZmlyZSBhIHNlY29uZCBtb3VzZWRvd24gZm9yIGEgZG91YmxlIGNsaWNrXG4gICAgaWYgKGllICYmIGllX3ZlcnNpb24gPCAxMSlcbiAgICAgIHsgb24oZC5zY3JvbGxlciwgXCJkYmxjbGlja1wiLCBvcGVyYXRpb24oY20sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShjbSwgZSk7XG4gICAgICAgIGlmICghcG9zIHx8IGNsaWNrSW5HdXR0ZXIoY20sIGUpIHx8IGV2ZW50SW5XaWRnZXQoY20uZGlzcGxheSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTtcbiAgICAgICAgdmFyIHdvcmQgPSBjbS5maW5kV29yZEF0KHBvcyk7XG4gICAgICAgIGV4dGVuZFNlbGVjdGlvbihjbS5kb2MsIHdvcmQuYW5jaG9yLCB3b3JkLmhlYWQpO1xuICAgICAgfSkpOyB9XG4gICAgZWxzZVxuICAgICAgeyBvbihkLnNjcm9sbGVyLCBcImRibGNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBzaWduYWxET01FdmVudChjbSwgZSkgfHwgZV9wcmV2ZW50RGVmYXVsdChlKTsgfSk7IH1cbiAgICAvLyBTb21lIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdFxuICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXNcbiAgICAvLyBoYW5kbGVkIGluIG9uTW91c2VEb3duIGZvciB0aGVzZSBicm93c2Vycy5cbiAgICBvbihkLnNjcm9sbGVyLCBcImNvbnRleHRtZW51XCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkNvbnRleHRNZW51KGNtLCBlKTsgfSk7XG4gICAgb24oZC5pbnB1dC5nZXRGaWVsZCgpLCBcImNvbnRleHRtZW51XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIWQuc2Nyb2xsZXIuY29udGFpbnMoZS50YXJnZXQpKSB7IG9uQ29udGV4dE1lbnUoY20sIGUpOyB9XG4gICAgfSk7XG5cbiAgICAvLyBVc2VkIHRvIHN1cHByZXNzIG1vdXNlIGV2ZW50IGhhbmRsaW5nIHdoZW4gYSB0b3VjaCBoYXBwZW5zXG4gICAgdmFyIHRvdWNoRmluaXNoZWQsIHByZXZUb3VjaCA9IHtlbmQ6IDB9O1xuICAgIGZ1bmN0aW9uIGZpbmlzaFRvdWNoKCkge1xuICAgICAgaWYgKGQuYWN0aXZlVG91Y2gpIHtcbiAgICAgICAgdG91Y2hGaW5pc2hlZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZC5hY3RpdmVUb3VjaCA9IG51bGw7IH0sIDEwMDApO1xuICAgICAgICBwcmV2VG91Y2ggPSBkLmFjdGl2ZVRvdWNoO1xuICAgICAgICBwcmV2VG91Y2guZW5kID0gK25ldyBEYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkge1xuICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggIT0gMSkgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgdmFyIHRvdWNoID0gZS50b3VjaGVzWzBdO1xuICAgICAgcmV0dXJuIHRvdWNoLnJhZGl1c1ggPD0gMSAmJiB0b3VjaC5yYWRpdXNZIDw9IDFcbiAgICB9XG4gICAgZnVuY3Rpb24gZmFyQXdheSh0b3VjaCwgb3RoZXIpIHtcbiAgICAgIGlmIChvdGhlci5sZWZ0ID09IG51bGwpIHsgcmV0dXJuIHRydWUgfVxuICAgICAgdmFyIGR4ID0gb3RoZXIubGVmdCAtIHRvdWNoLmxlZnQsIGR5ID0gb3RoZXIudG9wIC0gdG91Y2gudG9wO1xuICAgICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5ID4gMjAgKiAyMFxuICAgIH1cbiAgICBvbihkLnNjcm9sbGVyLCBcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpICYmICFpc01vdXNlTGlrZVRvdWNoRXZlbnQoZSkgJiYgIWNsaWNrSW5HdXR0ZXIoY20sIGUpKSB7XG4gICAgICAgIGQuaW5wdXQuZW5zdXJlUG9sbGVkKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0b3VjaEZpbmlzaGVkKTtcbiAgICAgICAgdmFyIG5vdyA9ICtuZXcgRGF0ZTtcbiAgICAgICAgZC5hY3RpdmVUb3VjaCA9IHtzdGFydDogbm93LCBtb3ZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbm93IC0gcHJldlRvdWNoLmVuZCA8PSAzMDAgPyBwcmV2VG91Y2ggOiBudWxsfTtcbiAgICAgICAgaWYgKGUudG91Y2hlcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgIGQuYWN0aXZlVG91Y2gubGVmdCA9IGUudG91Y2hlc1swXS5wYWdlWDtcbiAgICAgICAgICBkLmFjdGl2ZVRvdWNoLnRvcCA9IGUudG91Y2hlc1swXS5wYWdlWTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwidG91Y2htb3ZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChkLmFjdGl2ZVRvdWNoKSB7IGQuYWN0aXZlVG91Y2gubW92ZWQgPSB0cnVlOyB9XG4gICAgfSk7XG4gICAgb24oZC5zY3JvbGxlciwgXCJ0b3VjaGVuZFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIHRvdWNoID0gZC5hY3RpdmVUb3VjaDtcbiAgICAgIGlmICh0b3VjaCAmJiAhZXZlbnRJbldpZGdldChkLCBlKSAmJiB0b3VjaC5sZWZ0ICE9IG51bGwgJiZcbiAgICAgICAgICAhdG91Y2gubW92ZWQgJiYgbmV3IERhdGUgLSB0b3VjaC5zdGFydCA8IDMwMCkge1xuICAgICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihkLmFjdGl2ZVRvdWNoLCBcInBhZ2VcIiksIHJhbmdlO1xuICAgICAgICBpZiAoIXRvdWNoLnByZXYgfHwgZmFyQXdheSh0b3VjaCwgdG91Y2gucHJldikpIC8vIFNpbmdsZSB0YXBcbiAgICAgICAgICB7IHJhbmdlID0gbmV3IFJhbmdlKHBvcywgcG9zKTsgfVxuICAgICAgICBlbHNlIGlmICghdG91Y2gucHJldi5wcmV2IHx8IGZhckF3YXkodG91Y2gsIHRvdWNoLnByZXYucHJldikpIC8vIERvdWJsZSB0YXBcbiAgICAgICAgICB7IHJhbmdlID0gY20uZmluZFdvcmRBdChwb3MpOyB9XG4gICAgICAgIGVsc2UgLy8gVHJpcGxlIHRhcFxuICAgICAgICAgIHsgcmFuZ2UgPSBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCAwKSwgY2xpcFBvcyhjbS5kb2MsIFBvcyhwb3MubGluZSArIDEsIDApKSk7IH1cbiAgICAgICAgY20uc2V0U2VsZWN0aW9uKHJhbmdlLmFuY2hvciwgcmFuZ2UuaGVhZCk7XG4gICAgICAgIGNtLmZvY3VzKCk7XG4gICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7XG4gICAgICB9XG4gICAgICBmaW5pc2hUb3VjaCgpO1xuICAgIH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwidG91Y2hjYW5jZWxcIiwgZmluaXNoVG91Y2gpO1xuXG4gICAgLy8gU3luYyBzY3JvbGxpbmcgYmV0d2VlbiBmYWtlIHNjcm9sbGJhcnMgYW5kIHJlYWwgc2Nyb2xsYWJsZVxuICAgIC8vIGFyZWEsIGVuc3VyZSB2aWV3cG9ydCBpcyB1cGRhdGVkIHdoZW4gc2Nyb2xsaW5nLlxuICAgIG9uKGQuc2Nyb2xsZXIsIFwic2Nyb2xsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChkLnNjcm9sbGVyLmNsaWVudEhlaWdodCkge1xuICAgICAgICB1cGRhdGVTY3JvbGxUb3AoY20sIGQuc2Nyb2xsZXIuc2Nyb2xsVG9wKTtcbiAgICAgICAgc2V0U2Nyb2xsTGVmdChjbSwgZC5zY3JvbGxlci5zY3JvbGxMZWZ0LCB0cnVlKTtcbiAgICAgICAgc2lnbmFsKGNtLCBcInNjcm9sbFwiLCBjbSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gd2hlZWwgZXZlbnRzIGluIG9yZGVyIHRvIHRyeSBhbmQgdXBkYXRlIHRoZSB2aWV3cG9ydCBvbiB0aW1lLlxuICAgIG9uKGQuc2Nyb2xsZXIsIFwibW91c2V3aGVlbFwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25TY3JvbGxXaGVlbChjbSwgZSk7IH0pO1xuICAgIG9uKGQuc2Nyb2xsZXIsIFwiRE9NTW91c2VTY3JvbGxcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uU2Nyb2xsV2hlZWwoY20sIGUpOyB9KTtcblxuICAgIC8vIFByZXZlbnQgd3JhcHBlciBmcm9tIGV2ZXIgc2Nyb2xsaW5nXG4gICAgb24oZC53cmFwcGVyLCBcInNjcm9sbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiBkLndyYXBwZXIuc2Nyb2xsVG9wID0gZC53cmFwcGVyLnNjcm9sbExlZnQgPSAwOyB9KTtcblxuICAgIGQuZHJhZ0Z1bmN0aW9ucyA9IHtcbiAgICAgIGVudGVyOiBmdW5jdGlvbiAoZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IGVfc3RvcChlKTsgfX0sXG4gICAgICBvdmVyOiBmdW5jdGlvbiAoZSkge2lmICghc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IG9uRHJhZ092ZXIoY20sIGUpOyBlX3N0b3AoZSk7IH19LFxuICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkRyYWdTdGFydChjbSwgZSk7IH0sXG4gICAgICBkcm9wOiBvcGVyYXRpb24oY20sIG9uRHJvcCksXG4gICAgICBsZWF2ZTogZnVuY3Rpb24gKGUpIHtpZiAoIXNpZ25hbERPTUV2ZW50KGNtLCBlKSkgeyBjbGVhckRyYWdDdXJzb3IoY20pOyB9fVxuICAgIH07XG5cbiAgICB2YXIgaW5wID0gZC5pbnB1dC5nZXRGaWVsZCgpO1xuICAgIG9uKGlucCwgXCJrZXl1cFwiLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gb25LZXlVcC5jYWxsKGNtLCBlKTsgfSk7XG4gICAgb24oaW5wLCBcImtleWRvd25cIiwgb3BlcmF0aW9uKGNtLCBvbktleURvd24pKTtcbiAgICBvbihpbnAsIFwia2V5cHJlc3NcIiwgb3BlcmF0aW9uKGNtLCBvbktleVByZXNzKSk7XG4gICAgb24oaW5wLCBcImZvY3VzXCIsIGZ1bmN0aW9uIChlKSB7IHJldHVybiBvbkZvY3VzKGNtLCBlKTsgfSk7XG4gICAgb24oaW5wLCBcImJsdXJcIiwgZnVuY3Rpb24gKGUpIHsgcmV0dXJuIG9uQmx1cihjbSwgZSk7IH0pO1xuICB9XG5cbiAgdmFyIGluaXRIb29rcyA9IFtdO1xuICBDb2RlTWlycm9yLmRlZmluZUluaXRIb29rID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGluaXRIb29rcy5wdXNoKGYpOyB9O1xuXG4gIC8vIEluZGVudCB0aGUgZ2l2ZW4gbGluZS4gVGhlIGhvdyBwYXJhbWV0ZXIgY2FuIGJlIFwic21hcnRcIixcbiAgLy8gXCJhZGRcIi9udWxsLCBcInN1YnRyYWN0XCIsIG9yIFwicHJldlwiLiBXaGVuIGFnZ3Jlc3NpdmUgaXMgZmFsc2VcbiAgLy8gKHR5cGljYWxseSBzZXQgdG8gdHJ1ZSBmb3IgZm9yY2VkIHNpbmdsZS1saW5lIGluZGVudHMpLCBlbXB0eVxuICAvLyBsaW5lcyBhcmUgbm90IGluZGVudGVkLCBhbmQgcGxhY2VzIHdoZXJlIHRoZSBtb2RlIHJldHVybnMgUGFzc1xuICAvLyBhcmUgbGVmdCBhbG9uZS5cbiAgZnVuY3Rpb24gaW5kZW50TGluZShjbSwgbiwgaG93LCBhZ2dyZXNzaXZlKSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgc3RhdGU7XG4gICAgaWYgKGhvdyA9PSBudWxsKSB7IGhvdyA9IFwiYWRkXCI7IH1cbiAgICBpZiAoaG93ID09IFwic21hcnRcIikge1xuICAgICAgLy8gRmFsbCBiYWNrIHRvIFwicHJldlwiIHdoZW4gdGhlIG1vZGUgZG9lc24ndCBoYXZlIGFuIGluZGVudGF0aW9uXG4gICAgICAvLyBtZXRob2QuXG4gICAgICBpZiAoIWRvYy5tb2RlLmluZGVudCkgeyBob3cgPSBcInByZXZcIjsgfVxuICAgICAgZWxzZSB7IHN0YXRlID0gZ2V0Q29udGV4dEJlZm9yZShjbSwgbikuc3RhdGU7IH1cbiAgICB9XG5cbiAgICB2YXIgdGFiU2l6ZSA9IGNtLm9wdGlvbnMudGFiU2l6ZTtcbiAgICB2YXIgbGluZSA9IGdldExpbmUoZG9jLCBuKSwgY3VyU3BhY2UgPSBjb3VudENvbHVtbihsaW5lLnRleHQsIG51bGwsIHRhYlNpemUpO1xuICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHsgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDsgfVxuICAgIHZhciBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxccyovKVswXSwgaW5kZW50YXRpb247XG4gICAgaWYgKCFhZ2dyZXNzaXZlICYmICEvXFxTLy50ZXN0KGxpbmUudGV4dCkpIHtcbiAgICAgIGluZGVudGF0aW9uID0gMDtcbiAgICAgIGhvdyA9IFwibm90XCI7XG4gICAgfSBlbHNlIGlmIChob3cgPT0gXCJzbWFydFwiKSB7XG4gICAgICBpbmRlbnRhdGlvbiA9IGRvYy5tb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7XG4gICAgICBpZiAoaW5kZW50YXRpb24gPT0gUGFzcyB8fCBpbmRlbnRhdGlvbiA+IDE1MCkge1xuICAgICAgICBpZiAoIWFnZ3Jlc3NpdmUpIHsgcmV0dXJuIH1cbiAgICAgICAgaG93ID0gXCJwcmV2XCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChob3cgPT0gXCJwcmV2XCIpIHtcbiAgICAgIGlmIChuID4gZG9jLmZpcnN0KSB7IGluZGVudGF0aW9uID0gY291bnRDb2x1bW4oZ2V0TGluZShkb2MsIG4tMSkudGV4dCwgbnVsbCwgdGFiU2l6ZSk7IH1cbiAgICAgIGVsc2UgeyBpbmRlbnRhdGlvbiA9IDA7IH1cbiAgICB9IGVsc2UgaWYgKGhvdyA9PSBcImFkZFwiKSB7XG4gICAgICBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgY20ub3B0aW9ucy5pbmRlbnRVbml0O1xuICAgIH0gZWxzZSBpZiAoaG93ID09IFwic3VidHJhY3RcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIGNtLm9wdGlvbnMuaW5kZW50VW5pdDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBob3cgPT0gXCJudW1iZXJcIikge1xuICAgICAgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIGhvdztcbiAgICB9XG4gICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7XG5cbiAgICB2YXIgaW5kZW50U3RyaW5nID0gXCJcIiwgcG9zID0gMDtcbiAgICBpZiAoY20ub3B0aW9ucy5pbmRlbnRXaXRoVGFicylcbiAgICAgIHsgZm9yICh2YXIgaSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyB0YWJTaXplKTsgaTsgLS1pKSB7cG9zICs9IHRhYlNpemU7IGluZGVudFN0cmluZyArPSBcIlxcdFwiO30gfVxuICAgIGlmIChwb3MgPCBpbmRlbnRhdGlvbikgeyBpbmRlbnRTdHJpbmcgKz0gc3BhY2VTdHIoaW5kZW50YXRpb24gLSBwb3MpOyB9XG5cbiAgICBpZiAoaW5kZW50U3RyaW5nICE9IGN1clNwYWNlU3RyaW5nKSB7XG4gICAgICByZXBsYWNlUmFuZ2UoZG9jLCBpbmRlbnRTdHJpbmcsIFBvcyhuLCAwKSwgUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIFwiK2lucHV0XCIpO1xuICAgICAgbGluZS5zdGF0ZUFmdGVyID0gbnVsbDtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVuc3VyZSB0aGF0LCBpZiB0aGUgY3Vyc29yIHdhcyBpbiB0aGUgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnRcbiAgICAgIC8vIG9mIHRoZSBsaW5lLCBpdCBpcyBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoYXQgc3BhY2UuXG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBkb2Muc2VsLnJhbmdlcy5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciByYW5nZSA9IGRvYy5zZWwucmFuZ2VzW2kkMV07XG4gICAgICAgIGlmIChyYW5nZS5oZWFkLmxpbmUgPT0gbiAmJiByYW5nZS5oZWFkLmNoIDwgY3VyU3BhY2VTdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBvcyQxID0gUG9zKG4sIGN1clNwYWNlU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgICAgcmVwbGFjZU9uZVNlbGVjdGlvbihkb2MsIGkkMSwgbmV3IFJhbmdlKHBvcyQxLCBwb3MkMSkpO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIHdpbGwgYmUgc2V0IHRvIGEge2xpbmVXaXNlOiBib29sLCB0ZXh0OiBbc3RyaW5nXX0gb2JqZWN0LCBzb1xuICAvLyB0aGF0LCB3aGVuIHBhc3RpbmcsIHdlIGtub3cgd2hhdCBraW5kIG9mIHNlbGVjdGlvbnMgdGhlIGNvcGllZFxuICAvLyB0ZXh0IHdhcyBtYWRlIG91dCBvZi5cbiAgdmFyIGxhc3RDb3BpZWQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHNldExhc3RDb3BpZWQobmV3TGFzdENvcGllZCkge1xuICAgIGxhc3RDb3BpZWQgPSBuZXdMYXN0Q29waWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlUZXh0SW5wdXQoY20sIGluc2VydGVkLCBkZWxldGVkLCBzZWwsIG9yaWdpbikge1xuICAgIHZhciBkb2MgPSBjbS5kb2M7XG4gICAgY20uZGlzcGxheS5zaGlmdCA9IGZhbHNlO1xuICAgIGlmICghc2VsKSB7IHNlbCA9IGRvYy5zZWw7IH1cblxuICAgIHZhciByZWNlbnQgPSArbmV3IERhdGUgLSAyMDA7XG4gICAgdmFyIHBhc3RlID0gb3JpZ2luID09IFwicGFzdGVcIiB8fCBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID4gcmVjZW50O1xuICAgIHZhciB0ZXh0TGluZXMgPSBzcGxpdExpbmVzQXV0byhpbnNlcnRlZCksIG11bHRpUGFzdGUgPSBudWxsO1xuICAgIC8vIFdoZW4gcGFzdGluZyBOIGxpbmVzIGludG8gTiBzZWxlY3Rpb25zLCBpbnNlcnQgb25lIGxpbmUgcGVyIHNlbGVjdGlvblxuICAgIGlmIChwYXN0ZSAmJiBzZWwucmFuZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmIChsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQudGV4dC5qb2luKFwiXFxuXCIpID09IGluc2VydGVkKSB7XG4gICAgICAgIGlmIChzZWwucmFuZ2VzLmxlbmd0aCAlIGxhc3RDb3BpZWQudGV4dC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIG11bHRpUGFzdGUgPSBbXTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RDb3BpZWQudGV4dC5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHsgbXVsdGlQYXN0ZS5wdXNoKGRvYy5zcGxpdExpbmVzKGxhc3RDb3BpZWQudGV4dFtpXSkpOyB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGV4dExpbmVzLmxlbmd0aCA9PSBzZWwucmFuZ2VzLmxlbmd0aCAmJiBjbS5vcHRpb25zLnBhc3RlTGluZXNQZXJTZWxlY3Rpb24pIHtcbiAgICAgICAgbXVsdGlQYXN0ZSA9IG1hcCh0ZXh0TGluZXMsIGZ1bmN0aW9uIChsKSB7IHJldHVybiBbbF07IH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1cGRhdGVJbnB1dCA9IGNtLmN1ck9wLnVwZGF0ZUlucHV0O1xuICAgIC8vIE5vcm1hbCBiZWhhdmlvciBpcyB0byBpbnNlcnQgdGhlIG5ldyB0ZXh0IGludG8gZXZlcnkgc2VsZWN0aW9uXG4gICAgZm9yICh2YXIgaSQxID0gc2VsLnJhbmdlcy5sZW5ndGggLSAxOyBpJDEgPj0gMDsgaSQxLS0pIHtcbiAgICAgIHZhciByYW5nZSA9IHNlbC5yYW5nZXNbaSQxXTtcbiAgICAgIHZhciBmcm9tID0gcmFuZ2UuZnJvbSgpLCB0byA9IHJhbmdlLnRvKCk7XG4gICAgICBpZiAocmFuZ2UuZW1wdHkoKSkge1xuICAgICAgICBpZiAoZGVsZXRlZCAmJiBkZWxldGVkID4gMCkgLy8gSGFuZGxlIGRlbGV0aW9uXG4gICAgICAgICAgeyBmcm9tID0gUG9zKGZyb20ubGluZSwgZnJvbS5jaCAtIGRlbGV0ZWQpOyB9XG4gICAgICAgIGVsc2UgaWYgKGNtLnN0YXRlLm92ZXJ3cml0ZSAmJiAhcGFzdGUpIC8vIEhhbmRsZSBvdmVyd3JpdGVcbiAgICAgICAgICB7IHRvID0gUG9zKHRvLmxpbmUsIE1hdGgubWluKGdldExpbmUoZG9jLCB0by5saW5lKS50ZXh0Lmxlbmd0aCwgdG8uY2ggKyBsc3QodGV4dExpbmVzKS5sZW5ndGgpKTsgfVxuICAgICAgICBlbHNlIGlmIChwYXN0ZSAmJiBsYXN0Q29waWVkICYmIGxhc3RDb3BpZWQubGluZVdpc2UgJiYgbGFzdENvcGllZC50ZXh0LmpvaW4oXCJcXG5cIikgPT0gdGV4dExpbmVzLmpvaW4oXCJcXG5cIikpXG4gICAgICAgICAgeyBmcm9tID0gdG8gPSBQb3MoZnJvbS5saW5lLCAwKTsgfVxuICAgICAgfVxuICAgICAgdmFyIGNoYW5nZUV2ZW50ID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbXVsdGlQYXN0ZSA/IG11bHRpUGFzdGVbaSQxICUgbXVsdGlQYXN0ZS5sZW5ndGhdIDogdGV4dExpbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luIHx8IChwYXN0ZSA/IFwicGFzdGVcIiA6IGNtLnN0YXRlLmN1dEluY29taW5nID4gcmVjZW50ID8gXCJjdXRcIiA6IFwiK2lucHV0XCIpfTtcbiAgICAgIG1ha2VDaGFuZ2UoY20uZG9jLCBjaGFuZ2VFdmVudCk7XG4gICAgICBzaWduYWxMYXRlcihjbSwgXCJpbnB1dFJlYWRcIiwgY20sIGNoYW5nZUV2ZW50KTtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkICYmICFwYXN0ZSlcbiAgICAgIHsgdHJpZ2dlckVsZWN0cmljKGNtLCBpbnNlcnRlZCk7IH1cblxuICAgIGVuc3VyZUN1cnNvclZpc2libGUoY20pO1xuICAgIGlmIChjbS5jdXJPcC51cGRhdGVJbnB1dCA8IDIpIHsgY20uY3VyT3AudXBkYXRlSW5wdXQgPSB1cGRhdGVJbnB1dDsgfVxuICAgIGNtLmN1ck9wLnR5cGluZyA9IHRydWU7XG4gICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9IGNtLnN0YXRlLmN1dEluY29taW5nID0gLTE7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVQYXN0ZShlLCBjbSkge1xuICAgIHZhciBwYXN0ZWQgPSBlLmNsaXBib2FyZERhdGEgJiYgZS5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpO1xuICAgIGlmIChwYXN0ZWQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICghY20uaXNSZWFkT25seSgpICYmICFjbS5vcHRpb25zLmRpc2FibGVJbnB1dClcbiAgICAgICAgeyBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhcHBseVRleHRJbnB1dChjbSwgcGFzdGVkLCAwLCBudWxsLCBcInBhc3RlXCIpOyB9KTsgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyRWxlY3RyaWMoY20sIGluc2VydGVkKSB7XG4gICAgLy8gV2hlbiBhbiAnZWxlY3RyaWMnIGNoYXJhY3RlciBpcyBpbnNlcnRlZCwgaW1tZWRpYXRlbHkgdHJpZ2dlciBhIHJlaW5kZW50XG4gICAgaWYgKCFjbS5vcHRpb25zLmVsZWN0cmljQ2hhcnMgfHwgIWNtLm9wdGlvbnMuc21hcnRJbmRlbnQpIHsgcmV0dXJuIH1cbiAgICB2YXIgc2VsID0gY20uZG9jLnNlbDtcblxuICAgIGZvciAodmFyIGkgPSBzZWwucmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBzZWwucmFuZ2VzW2ldO1xuICAgICAgaWYgKHJhbmdlLmhlYWQuY2ggPiAxMDAgfHwgKGkgJiYgc2VsLnJhbmdlc1tpIC0gMV0uaGVhZC5saW5lID09IHJhbmdlLmhlYWQubGluZSkpIHsgY29udGludWUgfVxuICAgICAgdmFyIG1vZGUgPSBjbS5nZXRNb2RlQXQocmFuZ2UuaGVhZCk7XG4gICAgICB2YXIgaW5kZW50ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtb2RlLmVsZWN0cmljQ2hhcnMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgeyBpZiAoaW5zZXJ0ZWQuaW5kZXhPZihtb2RlLmVsZWN0cmljQ2hhcnMuY2hhckF0KGopKSA+IC0xKSB7XG4gICAgICAgICAgICBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgXCJzbWFydFwiKTtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfSB9XG4gICAgICB9IGVsc2UgaWYgKG1vZGUuZWxlY3RyaWNJbnB1dCkge1xuICAgICAgICBpZiAobW9kZS5lbGVjdHJpY0lucHV0LnRlc3QoZ2V0TGluZShjbS5kb2MsIHJhbmdlLmhlYWQubGluZSkudGV4dC5zbGljZSgwLCByYW5nZS5oZWFkLmNoKSkpXG4gICAgICAgICAgeyBpbmRlbnRlZCA9IGluZGVudExpbmUoY20sIHJhbmdlLmhlYWQubGluZSwgXCJzbWFydFwiKTsgfVxuICAgICAgfVxuICAgICAgaWYgKGluZGVudGVkKSB7IHNpZ25hbExhdGVyKGNtLCBcImVsZWN0cmljSW5wdXRcIiwgY20sIHJhbmdlLmhlYWQubGluZSk7IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5YWJsZVJhbmdlcyhjbSkge1xuICAgIHZhciB0ZXh0ID0gW10sIHJhbmdlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY20uZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lID0gY20uZG9jLnNlbC5yYW5nZXNbaV0uaGVhZC5saW5lO1xuICAgICAgdmFyIGxpbmVSYW5nZSA9IHthbmNob3I6IFBvcyhsaW5lLCAwKSwgaGVhZDogUG9zKGxpbmUgKyAxLCAwKX07XG4gICAgICByYW5nZXMucHVzaChsaW5lUmFuZ2UpO1xuICAgICAgdGV4dC5wdXNoKGNtLmdldFJhbmdlKGxpbmVSYW5nZS5hbmNob3IsIGxpbmVSYW5nZS5oZWFkKSk7XG4gICAgfVxuICAgIHJldHVybiB7dGV4dDogdGV4dCwgcmFuZ2VzOiByYW5nZXN9XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlQnJvd3Nlck1hZ2ljKGZpZWxkLCBzcGVsbGNoZWNrLCBhdXRvY29ycmVjdCwgYXV0b2NhcGl0YWxpemUpIHtcbiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJhdXRvY29ycmVjdFwiLCBhdXRvY29ycmVjdCA/IFwiXCIgOiBcIm9mZlwiKTtcbiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJhdXRvY2FwaXRhbGl6ZVwiLCBhdXRvY2FwaXRhbGl6ZSA/IFwiXCIgOiBcIm9mZlwiKTtcbiAgICBmaWVsZC5zZXRBdHRyaWJ1dGUoXCJzcGVsbGNoZWNrXCIsICEhc3BlbGxjaGVjayk7XG4gIH1cblxuICBmdW5jdGlvbiBoaWRkZW5UZXh0YXJlYSgpIHtcbiAgICB2YXIgdGUgPSBlbHQoXCJ0ZXh0YXJlYVwiLCBudWxsLCBudWxsLCBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgYm90dG9tOiAtMWVtOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbTsgb3V0bGluZTogbm9uZVwiKTtcbiAgICB2YXIgZGl2ID0gZWx0KFwiZGl2XCIsIFt0ZV0sIG51bGwsIFwib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogM3B4OyBoZWlnaHQ6IDBweDtcIik7XG4gICAgLy8gVGhlIHRleHRhcmVhIGlzIGtlcHQgcG9zaXRpb25lZCBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCB0aGVcbiAgICAvLyBmYWN0IHRoYXQgaXQnbGwgYmUgc2Nyb2xsZWQgaW50byB2aWV3IG9uIGlucHV0IGZyb20gc2Nyb2xsaW5nXG4gICAgLy8gb3VyIGZha2UgY3Vyc29yIG91dCBvZiB2aWV3LiBPbiB3ZWJraXQsIHdoZW4gd3JhcD1vZmYsIHBhc3RlIGlzXG4gICAgLy8gdmVyeSBzbG93LiBTbyBtYWtlIHRoZSBhcmVhIHdpZGUgaW5zdGVhZC5cbiAgICBpZiAod2Via2l0KSB7IHRlLnN0eWxlLndpZHRoID0gXCIxMDAwcHhcIjsgfVxuICAgIGVsc2UgeyB0ZS5zZXRBdHRyaWJ1dGUoXCJ3cmFwXCIsIFwib2ZmXCIpOyB9XG4gICAgLy8gSWYgYm9yZGVyOiAwOyAtLSBpT1MgZmFpbHMgdG8gb3BlbiBrZXlib2FyZCAoaXNzdWUgIzEyODcpXG4gICAgaWYgKGlvcykgeyB0ZS5zdHlsZS5ib3JkZXIgPSBcIjFweCBzb2xpZCBibGFja1wiOyB9XG4gICAgZGlzYWJsZUJyb3dzZXJNYWdpYyh0ZSk7XG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgLy8gVGhlIHB1YmxpY2x5IHZpc2libGUgQVBJLiBOb3RlIHRoYXQgbWV0aG9kT3AoZikgbWVhbnNcbiAgLy8gJ3dyYXAgZiBpbiBhbiBvcGVyYXRpb24sIHBlcmZvcm1lZCBvbiBpdHMgYHRoaXNgIHBhcmFtZXRlcicuXG5cbiAgLy8gVGhpcyBpcyBub3QgdGhlIGNvbXBsZXRlIHNldCBvZiBlZGl0b3IgbWV0aG9kcy4gTW9zdCBvZiB0aGVcbiAgLy8gbWV0aG9kcyBkZWZpbmVkIG9uIHRoZSBEb2MgdHlwZSBhcmUgYWxzbyBpbmplY3RlZCBpbnRvXG4gIC8vIENvZGVNaXJyb3IucHJvdG90eXBlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kXG4gIC8vIGNvbnZlbmllbmNlLlxuXG4gIGZ1bmN0aW9uIGFkZEVkaXRvck1ldGhvZHMoQ29kZU1pcnJvcikge1xuICAgIHZhciBvcHRpb25IYW5kbGVycyA9IENvZGVNaXJyb3Iub3B0aW9uSGFuZGxlcnM7XG5cbiAgICB2YXIgaGVscGVycyA9IENvZGVNaXJyb3IuaGVscGVycyA9IHt9O1xuXG4gICAgQ29kZU1pcnJvci5wcm90b3R5cGUgPSB7XG4gICAgICBjb25zdHJ1Y3RvcjogQ29kZU1pcnJvcixcbiAgICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyB0aGlzLmRpc3BsYXkuaW5wdXQuZm9jdXMoKTt9LFxuXG4gICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsIG9sZCA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgaWYgKG9wdGlvbnNbb3B0aW9uXSA9PSB2YWx1ZSAmJiBvcHRpb24gIT0gXCJtb2RlXCIpIHsgcmV0dXJuIH1cbiAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7XG4gICAgICAgIGlmIChvcHRpb25IYW5kbGVycy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKVxuICAgICAgICAgIHsgb3BlcmF0aW9uKHRoaXMsIG9wdGlvbkhhbmRsZXJzW29wdGlvbl0pKHRoaXMsIHZhbHVlLCBvbGQpOyB9XG4gICAgICAgIHNpZ25hbCh0aGlzLCBcIm9wdGlvbkNoYW5nZVwiLCB0aGlzLCBvcHRpb24pO1xuICAgICAgfSxcblxuICAgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gdGhpcy5vcHRpb25zW29wdGlvbl19LFxuICAgICAgZ2V0RG9jOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5kb2N9LFxuXG4gICAgICBhZGRLZXlNYXA6IGZ1bmN0aW9uKG1hcCwgYm90dG9tKSB7XG4gICAgICAgIHRoaXMuc3RhdGUua2V5TWFwc1tib3R0b20gPyBcInB1c2hcIiA6IFwidW5zaGlmdFwiXShnZXRLZXlNYXAobWFwKSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlS2V5TWFwOiBmdW5jdGlvbihtYXApIHtcbiAgICAgICAgdmFyIG1hcHMgPSB0aGlzLnN0YXRlLmtleU1hcHM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICB7IGlmIChtYXBzW2ldID09IG1hcCB8fCBtYXBzW2ldLm5hbWUgPT0gbWFwKSB7XG4gICAgICAgICAgICBtYXBzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSB9XG4gICAgICB9LFxuXG4gICAgICBhZGRPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBtb2RlID0gc3BlYy50b2tlbiA/IHNwZWMgOiBDb2RlTWlycm9yLmdldE1vZGUodGhpcy5vcHRpb25zLCBzcGVjKTtcbiAgICAgICAgaWYgKG1vZGUuc3RhcnRTdGF0ZSkgeyB0aHJvdyBuZXcgRXJyb3IoXCJPdmVybGF5cyBtYXkgbm90IGJlIHN0YXRlZnVsLlwiKSB9XG4gICAgICAgIGluc2VydFNvcnRlZCh0aGlzLnN0YXRlLm92ZXJsYXlzLFxuICAgICAgICAgICAgICAgICAgICAge21vZGU6IG1vZGUsIG1vZGVTcGVjOiBzcGVjLCBvcGFxdWU6IG9wdGlvbnMgJiYgb3B0aW9ucy5vcGFxdWUsXG4gICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk6IChvcHRpb25zICYmIG9wdGlvbnMucHJpb3JpdHkpIHx8IDB9LFxuICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG92ZXJsYXkpIHsgcmV0dXJuIG92ZXJsYXkucHJpb3JpdHk7IH0pO1xuICAgICAgICB0aGlzLnN0YXRlLm1vZGVHZW4rKztcbiAgICAgICAgcmVnQ2hhbmdlKHRoaXMpO1xuICAgICAgfSksXG4gICAgICByZW1vdmVPdmVybGF5OiBtZXRob2RPcChmdW5jdGlvbihzcGVjKSB7XG4gICAgICAgIHZhciBvdmVybGF5cyA9IHRoaXMuc3RhdGUub3ZlcmxheXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3ZlcmxheXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICB2YXIgY3VyID0gb3ZlcmxheXNbaV0ubW9kZVNwZWM7XG4gICAgICAgICAgaWYgKGN1ciA9PSBzcGVjIHx8IHR5cGVvZiBzcGVjID09IFwic3RyaW5nXCIgJiYgY3VyLm5hbWUgPT0gc3BlYykge1xuICAgICAgICAgICAgb3ZlcmxheXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5tb2RlR2VuKys7XG4gICAgICAgICAgICByZWdDaGFuZ2UodGhpcyk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuXG4gICAgICBpbmRlbnRMaW5lOiBtZXRob2RPcChmdW5jdGlvbihuLCBkaXIsIGFnZ3Jlc3NpdmUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkaXIgIT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgZGlyICE9IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBpZiAoZGlyID09IG51bGwpIHsgZGlyID0gdGhpcy5vcHRpb25zLnNtYXJ0SW5kZW50ID8gXCJzbWFydFwiIDogXCJwcmV2XCI7IH1cbiAgICAgICAgICBlbHNlIHsgZGlyID0gZGlyID8gXCJhZGRcIiA6IFwic3VidHJhY3RcIjsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xpbmUodGhpcy5kb2MsIG4pKSB7IGluZGVudExpbmUodGhpcywgbiwgZGlyLCBhZ2dyZXNzaXZlKTsgfVxuICAgICAgfSksXG4gICAgICBpbmRlbnRTZWxlY3Rpb246IG1ldGhvZE9wKGZ1bmN0aW9uKGhvdykge1xuICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5kb2Muc2VsLnJhbmdlcywgZW5kID0gLTE7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuICAgICAgICAgIGlmICghcmFuZ2UuZW1wdHkoKSkge1xuICAgICAgICAgICAgdmFyIGZyb20gPSByYW5nZS5mcm9tKCksIHRvID0gcmFuZ2UudG8oKTtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IE1hdGgubWF4KGVuZCwgZnJvbS5saW5lKTtcbiAgICAgICAgICAgIGVuZCA9IE1hdGgubWluKHRoaXMubGFzdExpbmUoKSwgdG8ubGluZSAtICh0by5jaCA/IDAgOiAxKSkgKyAxO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDwgZW5kOyArK2opXG4gICAgICAgICAgICAgIHsgaW5kZW50TGluZSh0aGlzLCBqLCBob3cpOyB9XG4gICAgICAgICAgICB2YXIgbmV3UmFuZ2VzID0gdGhpcy5kb2Muc2VsLnJhbmdlcztcbiAgICAgICAgICAgIGlmIChmcm9tLmNoID09IDAgJiYgcmFuZ2VzLmxlbmd0aCA9PSBuZXdSYW5nZXMubGVuZ3RoICYmIG5ld1Jhbmdlc1tpXS5mcm9tKCkuY2ggPiAwKVxuICAgICAgICAgICAgICB7IHJlcGxhY2VPbmVTZWxlY3Rpb24odGhpcy5kb2MsIGksIG5ldyBSYW5nZShmcm9tLCBuZXdSYW5nZXNbaV0udG8oKSksIHNlbF9kb250U2Nyb2xsKTsgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaGVhZC5saW5lID4gZW5kKSB7XG4gICAgICAgICAgICBpbmRlbnRMaW5lKHRoaXMsIHJhbmdlLmhlYWQubGluZSwgaG93LCB0cnVlKTtcbiAgICAgICAgICAgIGVuZCA9IHJhbmdlLmhlYWQubGluZTtcbiAgICAgICAgICAgIGlmIChpID09IHRoaXMuZG9jLnNlbC5wcmltSW5kZXgpIHsgZW5zdXJlQ3Vyc29yVmlzaWJsZSh0aGlzKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG5cbiAgICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuXG4gICAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihwb3MsIHByZWNpc2UpIHtcbiAgICAgICAgcmV0dXJuIHRha2VUb2tlbih0aGlzLCBwb3MsIHByZWNpc2UpXG4gICAgICB9LFxuXG4gICAgICBnZXRMaW5lVG9rZW5zOiBmdW5jdGlvbihsaW5lLCBwcmVjaXNlKSB7XG4gICAgICAgIHJldHVybiB0YWtlVG9rZW4odGhpcywgUG9zKGxpbmUpLCBwcmVjaXNlLCB0cnVlKVxuICAgICAgfSxcblxuICAgICAgZ2V0VG9rZW5UeXBlQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICBwb3MgPSBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpO1xuICAgICAgICB2YXIgc3R5bGVzID0gZ2V0TGluZVN0eWxlcyh0aGlzLCBnZXRMaW5lKHRoaXMuZG9jLCBwb3MubGluZSkpO1xuICAgICAgICB2YXIgYmVmb3JlID0gMCwgYWZ0ZXIgPSAoc3R5bGVzLmxlbmd0aCAtIDEpIC8gMiwgY2ggPSBwb3MuY2g7XG4gICAgICAgIHZhciB0eXBlO1xuICAgICAgICBpZiAoY2ggPT0gMCkgeyB0eXBlID0gc3R5bGVzWzJdOyB9XG4gICAgICAgIGVsc2UgeyBmb3IgKDs7KSB7XG4gICAgICAgICAgdmFyIG1pZCA9IChiZWZvcmUgKyBhZnRlcikgPj4gMTtcbiAgICAgICAgICBpZiAoKG1pZCA/IHN0eWxlc1ttaWQgKiAyIC0gMV0gOiAwKSA+PSBjaCkgeyBhZnRlciA9IG1pZDsgfVxuICAgICAgICAgIGVsc2UgaWYgKHN0eWxlc1ttaWQgKiAyICsgMV0gPCBjaCkgeyBiZWZvcmUgPSBtaWQgKyAxOyB9XG4gICAgICAgICAgZWxzZSB7IHR5cGUgPSBzdHlsZXNbbWlkICogMiArIDJdOyBicmVhayB9XG4gICAgICAgIH0gfVxuICAgICAgICB2YXIgY3V0ID0gdHlwZSA/IHR5cGUuaW5kZXhPZihcIm92ZXJsYXkgXCIpIDogLTE7XG4gICAgICAgIHJldHVybiBjdXQgPCAwID8gdHlwZSA6IGN1dCA9PSAwID8gbnVsbCA6IHR5cGUuc2xpY2UoMCwgY3V0IC0gMSlcbiAgICAgIH0sXG5cbiAgICAgIGdldE1vZGVBdDogZnVuY3Rpb24ocG9zKSB7XG4gICAgICAgIHZhciBtb2RlID0gdGhpcy5kb2MubW9kZTtcbiAgICAgICAgaWYgKCFtb2RlLmlubmVyTW9kZSkgeyByZXR1cm4gbW9kZSB9XG4gICAgICAgIHJldHVybiBDb2RlTWlycm9yLmlubmVyTW9kZShtb2RlLCB0aGlzLmdldFRva2VuQXQocG9zKS5zdGF0ZSkubW9kZVxuICAgICAgfSxcblxuICAgICAgZ2V0SGVscGVyOiBmdW5jdGlvbihwb3MsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGVscGVycyhwb3MsIHR5cGUpWzBdXG4gICAgICB9LFxuXG4gICAgICBnZXRIZWxwZXJzOiBmdW5jdGlvbihwb3MsIHR5cGUpIHtcbiAgICAgICAgdmFyIGZvdW5kID0gW107XG4gICAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgeyByZXR1cm4gZm91bmQgfVxuICAgICAgICB2YXIgaGVscCA9IGhlbHBlcnNbdHlwZV0sIG1vZGUgPSB0aGlzLmdldE1vZGVBdChwb3MpO1xuICAgICAgICBpZiAodHlwZW9mIG1vZGVbdHlwZV0gPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmIChoZWxwW21vZGVbdHlwZV1dKSB7IGZvdW5kLnB1c2goaGVscFttb2RlW3R5cGVdXSk7IH1cbiAgICAgICAgfSBlbHNlIGlmIChtb2RlW3R5cGVdKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlW3R5cGVdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gaGVscFttb2RlW3R5cGVdW2ldXTtcbiAgICAgICAgICAgIGlmICh2YWwpIHsgZm91bmQucHVzaCh2YWwpOyB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUuaGVscGVyVHlwZSAmJiBoZWxwW21vZGUuaGVscGVyVHlwZV0pIHtcbiAgICAgICAgICBmb3VuZC5wdXNoKGhlbHBbbW9kZS5oZWxwZXJUeXBlXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGVscFttb2RlLm5hbWVdKSB7XG4gICAgICAgICAgZm91bmQucHVzaChoZWxwW21vZGUubmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGhlbHAuX2dsb2JhbC5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgdmFyIGN1ciA9IGhlbHAuX2dsb2JhbFtpJDFdO1xuICAgICAgICAgIGlmIChjdXIucHJlZChtb2RlLCB0aGlzKSAmJiBpbmRleE9mKGZvdW5kLCBjdXIudmFsKSA9PSAtMSlcbiAgICAgICAgICAgIHsgZm91bmQucHVzaChjdXIudmFsKTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgfSxcblxuICAgICAgZ2V0U3RhdGVBZnRlcjogZnVuY3Rpb24obGluZSwgcHJlY2lzZSkge1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2M7XG4gICAgICAgIGxpbmUgPSBjbGlwTGluZShkb2MsIGxpbmUgPT0gbnVsbCA/IGRvYy5maXJzdCArIGRvYy5zaXplIC0gMTogbGluZSk7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0QmVmb3JlKHRoaXMsIGxpbmUgKyAxLCBwcmVjaXNlKS5zdGF0ZVxuICAgICAgfSxcblxuICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCwgbW9kZSkge1xuICAgICAgICB2YXIgcG9zLCByYW5nZSA9IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCk7XG4gICAgICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHBvcyA9IHJhbmdlLmhlYWQ7IH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHN0YXJ0ID09IFwib2JqZWN0XCIpIHsgcG9zID0gY2xpcFBvcyh0aGlzLmRvYywgc3RhcnQpOyB9XG4gICAgICAgIGVsc2UgeyBwb3MgPSBzdGFydCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCk7IH1cbiAgICAgICAgcmV0dXJuIGN1cnNvckNvb3Jkcyh0aGlzLCBwb3MsIG1vZGUgfHwgXCJwYWdlXCIpXG4gICAgICB9LFxuXG4gICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3MsIG1vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJDb29yZHModGhpcywgY2xpcFBvcyh0aGlzLmRvYywgcG9zKSwgbW9kZSB8fCBcInBhZ2VcIilcbiAgICAgIH0sXG5cbiAgICAgIGNvb3Jkc0NoYXI6IGZ1bmN0aW9uKGNvb3JkcywgbW9kZSkge1xuICAgICAgICBjb29yZHMgPSBmcm9tQ29vcmRTeXN0ZW0odGhpcywgY29vcmRzLCBtb2RlIHx8IFwicGFnZVwiKTtcbiAgICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIodGhpcywgY29vcmRzLmxlZnQsIGNvb3Jkcy50b3ApXG4gICAgICB9LFxuXG4gICAgICBsaW5lQXRIZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCwgbW9kZSkge1xuICAgICAgICBoZWlnaHQgPSBmcm9tQ29vcmRTeXN0ZW0odGhpcywge3RvcDogaGVpZ2h0LCBsZWZ0OiAwfSwgbW9kZSB8fCBcInBhZ2VcIikudG9wO1xuICAgICAgICByZXR1cm4gbGluZUF0SGVpZ2h0KHRoaXMuZG9jLCBoZWlnaHQgKyB0aGlzLmRpc3BsYXkudmlld09mZnNldClcbiAgICAgIH0sXG4gICAgICBoZWlnaHRBdExpbmU6IGZ1bmN0aW9uKGxpbmUsIG1vZGUsIGluY2x1ZGVXaWRnZXRzKSB7XG4gICAgICAgIHZhciBlbmQgPSBmYWxzZSwgbGluZU9iajtcbiAgICAgICAgaWYgKHR5cGVvZiBsaW5lID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB2YXIgbGFzdCA9IHRoaXMuZG9jLmZpcnN0ICsgdGhpcy5kb2Muc2l6ZSAtIDE7XG4gICAgICAgICAgaWYgKGxpbmUgPCB0aGlzLmRvYy5maXJzdCkgeyBsaW5lID0gdGhpcy5kb2MuZmlyc3Q7IH1cbiAgICAgICAgICBlbHNlIGlmIChsaW5lID4gbGFzdCkgeyBsaW5lID0gbGFzdDsgZW5kID0gdHJ1ZTsgfVxuICAgICAgICAgIGxpbmVPYmogPSBnZXRMaW5lKHRoaXMuZG9jLCBsaW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lT2JqID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW50b0Nvb3JkU3lzdGVtKHRoaXMsIGxpbmVPYmosIHt0b3A6IDAsIGxlZnQ6IDB9LCBtb2RlIHx8IFwicGFnZVwiLCBpbmNsdWRlV2lkZ2V0cyB8fCBlbmQpLnRvcCArXG4gICAgICAgICAgKGVuZCA/IHRoaXMuZG9jLmhlaWdodCAtIGhlaWdodEF0TGluZShsaW5lT2JqKSA6IDApXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0VGV4dEhlaWdodDogZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0SGVpZ2h0KHRoaXMuZGlzcGxheSkgfSxcbiAgICAgIGRlZmF1bHRDaGFyV2lkdGg6IGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhcldpZHRoKHRoaXMuZGlzcGxheSkgfSxcblxuICAgICAgZ2V0Vmlld3BvcnQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2Zyb206IHRoaXMuZGlzcGxheS52aWV3RnJvbSwgdG86IHRoaXMuZGlzcGxheS52aWV3VG99fSxcblxuICAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVydCwgaG9yaXopIHtcbiAgICAgICAgdmFyIGRpc3BsYXkgPSB0aGlzLmRpc3BsYXk7XG4gICAgICAgIHBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzLCBjbGlwUG9zKHRoaXMuZG9jLCBwb3MpKTtcbiAgICAgICAgdmFyIHRvcCA9IHBvcy5ib3R0b20sIGxlZnQgPSBwb3MubGVmdDtcbiAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbS1pZ25vcmUtZXZlbnRzXCIsIFwidHJ1ZVwiKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5LmlucHV0LnNldFVuZWRpdGFibGUobm9kZSk7XG4gICAgICAgIGRpc3BsYXkuc2l6ZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICAgIGlmICh2ZXJ0ID09IFwib3ZlclwiKSB7XG4gICAgICAgICAgdG9wID0gcG9zLnRvcDtcbiAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ID09IFwiYWJvdmVcIiB8fCB2ZXJ0ID09IFwibmVhclwiKSB7XG4gICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KGRpc3BsYXkud3JhcHBlci5jbGllbnRIZWlnaHQsIHRoaXMuZG9jLmhlaWdodCksXG4gICAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCwgZGlzcGxheS5saW5lU3BhY2UuY2xpZW50V2lkdGgpO1xuICAgICAgICAgIC8vIERlZmF1bHQgdG8gcG9zaXRpb25pbmcgYWJvdmUgKGlmIHNwZWNpZmllZCBhbmQgcG9zc2libGUpOyBvdGhlcndpc2UgZGVmYXVsdCB0byBwb3NpdGlvbmluZyBiZWxvd1xuICAgICAgICAgIGlmICgodmVydCA9PSAnYWJvdmUnIHx8IHBvcy5ib3R0b20gKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSkgJiYgcG9zLnRvcCA+IG5vZGUub2Zmc2V0SGVpZ2h0KVxuICAgICAgICAgICAgeyB0b3AgPSBwb3MudG9wIC0gbm9kZS5vZmZzZXRIZWlnaHQ7IH1cbiAgICAgICAgICBlbHNlIGlmIChwb3MuYm90dG9tICsgbm9kZS5vZmZzZXRIZWlnaHQgPD0gdnNwYWNlKVxuICAgICAgICAgICAgeyB0b3AgPSBwb3MuYm90dG9tOyB9XG4gICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNwYWNlKVxuICAgICAgICAgICAgeyBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuc3R5bGUudG9wID0gdG9wICsgXCJweFwiO1xuICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSBub2RlLnN0eWxlLnJpZ2h0ID0gXCJcIjtcbiAgICAgICAgaWYgKGhvcml6ID09IFwicmlnaHRcIikge1xuICAgICAgICAgIGxlZnQgPSBkaXNwbGF5LnNpemVyLmNsaWVudFdpZHRoIC0gbm9kZS5vZmZzZXRXaWR0aDtcbiAgICAgICAgICBub2RlLnN0eWxlLnJpZ2h0ID0gXCIwcHhcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaG9yaXogPT0gXCJsZWZ0XCIpIHsgbGVmdCA9IDA7IH1cbiAgICAgICAgICBlbHNlIGlmIChob3JpeiA9PSBcIm1pZGRsZVwiKSB7IGxlZnQgPSAoZGlzcGxheS5zaXplci5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsgfVxuICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IGxlZnQgKyBcInB4XCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjcm9sbClcbiAgICAgICAgICB7IHNjcm9sbEludG9WaWV3KHRoaXMsIHtsZWZ0OiBsZWZ0LCB0b3A6IHRvcCwgcmlnaHQ6IGxlZnQgKyBub2RlLm9mZnNldFdpZHRoLCBib3R0b206IHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0fSk7IH1cbiAgICAgIH0sXG5cbiAgICAgIHRyaWdnZXJPbktleURvd246IG1ldGhvZE9wKG9uS2V5RG93biksXG4gICAgICB0cmlnZ2VyT25LZXlQcmVzczogbWV0aG9kT3Aob25LZXlQcmVzcyksXG4gICAgICB0cmlnZ2VyT25LZXlVcDogb25LZXlVcCxcbiAgICAgIHRyaWdnZXJPbk1vdXNlRG93bjogbWV0aG9kT3Aob25Nb3VzZURvd24pLFxuXG4gICAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7XG4gICAgICAgIGlmIChjb21tYW5kcy5oYXNPd25Qcm9wZXJ0eShjbWQpKVxuICAgICAgICAgIHsgcmV0dXJuIGNvbW1hbmRzW2NtZF0uY2FsbChudWxsLCB0aGlzKSB9XG4gICAgICB9LFxuXG4gICAgICB0cmlnZ2VyRWxlY3RyaWM6IG1ldGhvZE9wKGZ1bmN0aW9uKHRleHQpIHsgdHJpZ2dlckVsZWN0cmljKHRoaXMsIHRleHQpOyB9KSxcblxuICAgICAgZmluZFBvc0g6IGZ1bmN0aW9uKGZyb20sIGFtb3VudCwgdW5pdCwgdmlzdWFsbHkpIHtcbiAgICAgICAgdmFyIGRpciA9IDE7XG4gICAgICAgIGlmIChhbW91bnQgPCAwKSB7IGRpciA9IC0xOyBhbW91bnQgPSAtYW1vdW50OyB9XG4gICAgICAgIHZhciBjdXIgPSBjbGlwUG9zKHRoaXMuZG9jLCBmcm9tKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbW91bnQ7ICsraSkge1xuICAgICAgICAgIGN1ciA9IGZpbmRQb3NIKHRoaXMuZG9jLCBjdXIsIGRpciwgdW5pdCwgdmlzdWFsbHkpO1xuICAgICAgICAgIGlmIChjdXIuaGl0U2lkZSkgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clxuICAgICAgfSxcblxuICAgICAgbW92ZUg6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICB0aGlzLmV4dGVuZFNlbGVjdGlvbnNCeShmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICBpZiAodGhpcyQxLmRpc3BsYXkuc2hpZnQgfHwgdGhpcyQxLmRvYy5leHRlbmQgfHwgcmFuZ2UuZW1wdHkoKSlcbiAgICAgICAgICAgIHsgcmV0dXJuIGZpbmRQb3NIKHRoaXMkMS5kb2MsIHJhbmdlLmhlYWQsIGRpciwgdW5pdCwgdGhpcyQxLm9wdGlvbnMucnRsTW92ZVZpc3VhbGx5KSB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgeyByZXR1cm4gZGlyIDwgMCA/IHJhbmdlLmZyb20oKSA6IHJhbmdlLnRvKCkgfVxuICAgICAgICB9LCBzZWxfbW92ZSk7XG4gICAgICB9KSxcblxuICAgICAgZGVsZXRlSDogbWV0aG9kT3AoZnVuY3Rpb24oZGlyLCB1bml0KSB7XG4gICAgICAgIHZhciBzZWwgPSB0aGlzLmRvYy5zZWwsIGRvYyA9IHRoaXMuZG9jO1xuICAgICAgICBpZiAoc2VsLnNvbWV0aGluZ1NlbGVjdGVkKCkpXG4gICAgICAgICAgeyBkb2MucmVwbGFjZVNlbGVjdGlvbihcIlwiLCBudWxsLCBcIitkZWxldGVcIik7IH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHsgZGVsZXRlTmVhclNlbGVjdGlvbih0aGlzLCBmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGZpbmRQb3NIKGRvYywgcmFuZ2UuaGVhZCwgZGlyLCB1bml0LCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gZGlyIDwgMCA/IHtmcm9tOiBvdGhlciwgdG86IHJhbmdlLmhlYWR9IDoge2Zyb206IHJhbmdlLmhlYWQsIHRvOiBvdGhlcn1cbiAgICAgICAgICB9KTsgfVxuICAgICAgfSksXG5cbiAgICAgIGZpbmRQb3NWOiBmdW5jdGlvbihmcm9tLCBhbW91bnQsIHVuaXQsIGdvYWxDb2x1bW4pIHtcbiAgICAgICAgdmFyIGRpciA9IDEsIHggPSBnb2FsQ29sdW1uO1xuICAgICAgICBpZiAoYW1vdW50IDwgMCkgeyBkaXIgPSAtMTsgYW1vdW50ID0gLWFtb3VudDsgfVxuICAgICAgICB2YXIgY3VyID0gY2xpcFBvcyh0aGlzLmRvYywgZnJvbSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50OyArK2kpIHtcbiAgICAgICAgICB2YXIgY29vcmRzID0gY3Vyc29yQ29vcmRzKHRoaXMsIGN1ciwgXCJkaXZcIik7XG4gICAgICAgICAgaWYgKHggPT0gbnVsbCkgeyB4ID0gY29vcmRzLmxlZnQ7IH1cbiAgICAgICAgICBlbHNlIHsgY29vcmRzLmxlZnQgPSB4OyB9XG4gICAgICAgICAgY3VyID0gZmluZFBvc1YodGhpcywgY29vcmRzLCBkaXIsIHVuaXQpO1xuICAgICAgICAgIGlmIChjdXIuaGl0U2lkZSkgeyBicmVhayB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clxuICAgICAgfSxcblxuICAgICAgbW92ZVY6IG1ldGhvZE9wKGZ1bmN0aW9uKGRpciwgdW5pdCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGdvYWxzID0gW107XG4gICAgICAgIHZhciBjb2xsYXBzZSA9ICF0aGlzLmRpc3BsYXkuc2hpZnQgJiYgIWRvYy5leHRlbmQgJiYgZG9jLnNlbC5zb21ldGhpbmdTZWxlY3RlZCgpO1xuICAgICAgICBkb2MuZXh0ZW5kU2VsZWN0aW9uc0J5KGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgICAgIGlmIChjb2xsYXBzZSlcbiAgICAgICAgICAgIHsgcmV0dXJuIGRpciA8IDAgPyByYW5nZS5mcm9tKCkgOiByYW5nZS50bygpIH1cbiAgICAgICAgICB2YXIgaGVhZFBvcyA9IGN1cnNvckNvb3Jkcyh0aGlzJDEsIHJhbmdlLmhlYWQsIFwiZGl2XCIpO1xuICAgICAgICAgIGlmIChyYW5nZS5nb2FsQ29sdW1uICE9IG51bGwpIHsgaGVhZFBvcy5sZWZ0ID0gcmFuZ2UuZ29hbENvbHVtbjsgfVxuICAgICAgICAgIGdvYWxzLnB1c2goaGVhZFBvcy5sZWZ0KTtcbiAgICAgICAgICB2YXIgcG9zID0gZmluZFBvc1YodGhpcyQxLCBoZWFkUG9zLCBkaXIsIHVuaXQpO1xuICAgICAgICAgIGlmICh1bml0ID09IFwicGFnZVwiICYmIHJhbmdlID09IGRvYy5zZWwucHJpbWFyeSgpKVxuICAgICAgICAgICAgeyBhZGRUb1Njcm9sbFRvcCh0aGlzJDEsIGNoYXJDb29yZHModGhpcyQxLCBwb3MsIFwiZGl2XCIpLnRvcCAtIGhlYWRQb3MudG9wKTsgfVxuICAgICAgICAgIHJldHVybiBwb3NcbiAgICAgICAgfSwgc2VsX21vdmUpO1xuICAgICAgICBpZiAoZ29hbHMubGVuZ3RoKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgZG9jLnNlbC5yYW5nZXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgeyBkb2Muc2VsLnJhbmdlc1tpXS5nb2FsQ29sdW1uID0gZ29hbHNbaV07IH0gfVxuICAgICAgfSksXG5cbiAgICAgIC8vIEZpbmQgdGhlIHdvcmQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIChhcyByZXR1cm5lZCBieSBjb29yZHNDaGFyKS5cbiAgICAgIGZpbmRXb3JkQXQ6IGZ1bmN0aW9uKHBvcykge1xuICAgICAgICB2YXIgZG9jID0gdGhpcy5kb2MsIGxpbmUgPSBnZXRMaW5lKGRvYywgcG9zLmxpbmUpLnRleHQ7XG4gICAgICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoO1xuICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgIHZhciBoZWxwZXIgPSB0aGlzLmdldEhlbHBlcihwb3MsIFwid29yZENoYXJzXCIpO1xuICAgICAgICAgIGlmICgocG9zLnN0aWNreSA9PSBcImJlZm9yZVwiIHx8IGVuZCA9PSBsaW5lLmxlbmd0aCkgJiYgc3RhcnQpIHsgLS1zdGFydDsgfSBlbHNlIHsgKytlbmQ7IH1cbiAgICAgICAgICB2YXIgc3RhcnRDaGFyID0gbGluZS5jaGFyQXQoc3RhcnQpO1xuICAgICAgICAgIHZhciBjaGVjayA9IGlzV29yZENoYXIoc3RhcnRDaGFyLCBoZWxwZXIpXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gaXNXb3JkQ2hhcihjaCwgaGVscGVyKTsgfVxuICAgICAgICAgICAgOiAvXFxzLy50ZXN0KHN0YXJ0Q2hhcikgPyBmdW5jdGlvbiAoY2gpIHsgcmV0dXJuIC9cXHMvLnRlc3QoY2gpOyB9XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChjaCkgeyByZXR1cm4gKCEvXFxzLy50ZXN0KGNoKSAmJiAhaXNXb3JkQ2hhcihjaCkpOyB9O1xuICAgICAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgY2hlY2sobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIHsgLS1zdGFydDsgfVxuICAgICAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBjaGVjayhsaW5lLmNoYXJBdChlbmQpKSkgeyArK2VuZDsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UoUG9zKHBvcy5saW5lLCBzdGFydCksIFBvcyhwb3MubGluZSwgZW5kKSlcbiAgICAgIH0sXG5cbiAgICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPT0gdGhpcy5zdGF0ZS5vdmVyd3JpdGUpIHsgcmV0dXJuIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUub3ZlcndyaXRlID0gIXRoaXMuc3RhdGUub3ZlcndyaXRlKVxuICAgICAgICAgIHsgYWRkQ2xhc3ModGhpcy5kaXNwbGF5LmN1cnNvckRpdiwgXCJDb2RlTWlycm9yLW92ZXJ3cml0ZVwiKTsgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgeyBybUNsYXNzKHRoaXMuZGlzcGxheS5jdXJzb3JEaXYsIFwiQ29kZU1pcnJvci1vdmVyd3JpdGVcIik7IH1cblxuICAgICAgICBzaWduYWwodGhpcywgXCJvdmVyd3JpdGVUb2dnbGVcIiwgdGhpcywgdGhpcy5zdGF0ZS5vdmVyd3JpdGUpO1xuICAgICAgfSxcbiAgICAgIGhhc0ZvY3VzOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpID09IGFjdGl2ZUVsdCgpIH0sXG4gICAgICBpc1JlYWRPbmx5OiBmdW5jdGlvbigpIHsgcmV0dXJuICEhKHRoaXMub3B0aW9ucy5yZWFkT25seSB8fCB0aGlzLmRvYy5jYW50RWRpdCkgfSxcblxuICAgICAgc2Nyb2xsVG86IG1ldGhvZE9wKGZ1bmN0aW9uICh4LCB5KSB7IHNjcm9sbFRvQ29vcmRzKHRoaXMsIHgsIHkpOyB9KSxcbiAgICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLmRpc3BsYXkuc2Nyb2xsZXI7XG4gICAgICAgIHJldHVybiB7bGVmdDogc2Nyb2xsZXIuc2Nyb2xsTGVmdCwgdG9wOiBzY3JvbGxlci5zY3JvbGxUb3AsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzY3JvbGxlci5zY3JvbGxIZWlnaHQgLSBzY3JvbGxHYXAodGhpcykgLSB0aGlzLmRpc3BsYXkuYmFySGVpZ2h0LFxuICAgICAgICAgICAgICAgIHdpZHRoOiBzY3JvbGxlci5zY3JvbGxXaWR0aCAtIHNjcm9sbEdhcCh0aGlzKSAtIHRoaXMuZGlzcGxheS5iYXJXaWR0aCxcbiAgICAgICAgICAgICAgICBjbGllbnRIZWlnaHQ6IGRpc3BsYXlIZWlnaHQodGhpcyksIGNsaWVudFdpZHRoOiBkaXNwbGF5V2lkdGgodGhpcyl9XG4gICAgICB9LFxuXG4gICAgICBzY3JvbGxJbnRvVmlldzogbWV0aG9kT3AoZnVuY3Rpb24ocmFuZ2UsIG1hcmdpbikge1xuICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJhbmdlID0ge2Zyb206IHRoaXMuZG9jLnNlbC5wcmltYXJ5KCkuaGVhZCwgdG86IG51bGx9O1xuICAgICAgICAgIGlmIChtYXJnaW4gPT0gbnVsbCkgeyBtYXJnaW4gPSB0aGlzLm9wdGlvbnMuY3Vyc29yU2Nyb2xsTWFyZ2luOyB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJhbmdlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICByYW5nZSA9IHtmcm9tOiBQb3MocmFuZ2UsIDApLCB0bzogbnVsbH07XG4gICAgICAgIH0gZWxzZSBpZiAocmFuZ2UuZnJvbSA9PSBudWxsKSB7XG4gICAgICAgICAgcmFuZ2UgPSB7ZnJvbTogcmFuZ2UsIHRvOiBudWxsfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhbmdlLnRvKSB7IHJhbmdlLnRvID0gcmFuZ2UuZnJvbTsgfVxuICAgICAgICByYW5nZS5tYXJnaW4gPSBtYXJnaW4gfHwgMDtcblxuICAgICAgICBpZiAocmFuZ2UuZnJvbS5saW5lICE9IG51bGwpIHtcbiAgICAgICAgICBzY3JvbGxUb1JhbmdlKHRoaXMsIHJhbmdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxUb0Nvb3Jkc1JhbmdlKHRoaXMsIHJhbmdlLmZyb20sIHJhbmdlLnRvLCByYW5nZS5tYXJnaW4pO1xuICAgICAgICB9XG4gICAgICB9KSxcblxuICAgICAgc2V0U2l6ZTogbWV0aG9kT3AoZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xuICAgICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgICAgICB2YXIgaW50ZXJwcmV0ID0gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdHlwZW9mIHZhbCA9PSBcIm51bWJlclwiIHx8IC9eXFxkKyQvLnRlc3QoU3RyaW5nKHZhbCkpID8gdmFsICsgXCJweFwiIDogdmFsOyB9O1xuICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgeyB0aGlzLmRpc3BsYXkud3JhcHBlci5zdHlsZS53aWR0aCA9IGludGVycHJldCh3aWR0aCk7IH1cbiAgICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB7IHRoaXMuZGlzcGxheS53cmFwcGVyLnN0eWxlLmhlaWdodCA9IGludGVycHJldChoZWlnaHQpOyB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGluZVdyYXBwaW5nKSB7IGNsZWFyTGluZU1lYXN1cmVtZW50Q2FjaGUodGhpcyk7IH1cbiAgICAgICAgdmFyIGxpbmVObyA9IHRoaXMuZGlzcGxheS52aWV3RnJvbTtcbiAgICAgICAgdGhpcy5kb2MuaXRlcihsaW5lTm8sIHRoaXMuZGlzcGxheS52aWV3VG8sIGZ1bmN0aW9uIChsaW5lKSB7XG4gICAgICAgICAgaWYgKGxpbmUud2lkZ2V0cykgeyBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmUud2lkZ2V0cy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHsgaWYgKGxpbmUud2lkZ2V0c1tpXS5ub0hTY3JvbGwpIHsgcmVnTGluZUNoYW5nZSh0aGlzJDEsIGxpbmVObywgXCJ3aWRnZXRcIik7IGJyZWFrIH0gfSB9XG4gICAgICAgICAgKytsaW5lTm87XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1ck9wLmZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgc2lnbmFsKHRoaXMsIFwicmVmcmVzaFwiLCB0aGlzKTtcbiAgICAgIH0pLFxuXG4gICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBydW5Jbk9wKHRoaXMsIGYpfSxcbiAgICAgIHN0YXJ0T3BlcmF0aW9uOiBmdW5jdGlvbigpe3JldHVybiBzdGFydE9wZXJhdGlvbih0aGlzKX0sXG4gICAgICBlbmRPcGVyYXRpb246IGZ1bmN0aW9uKCl7cmV0dXJuIGVuZE9wZXJhdGlvbih0aGlzKX0sXG5cbiAgICAgIHJlZnJlc2g6IG1ldGhvZE9wKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb2xkSGVpZ2h0ID0gdGhpcy5kaXNwbGF5LmNhY2hlZFRleHRIZWlnaHQ7XG4gICAgICAgIHJlZ0NoYW5nZSh0aGlzKTtcbiAgICAgICAgdGhpcy5jdXJPcC5mb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpO1xuICAgICAgICBzY3JvbGxUb0Nvb3Jkcyh0aGlzLCB0aGlzLmRvYy5zY3JvbGxMZWZ0LCB0aGlzLmRvYy5zY3JvbGxUb3ApO1xuICAgICAgICB1cGRhdGVHdXR0ZXJTcGFjZSh0aGlzLmRpc3BsYXkpO1xuICAgICAgICBpZiAob2xkSGVpZ2h0ID09IG51bGwgfHwgTWF0aC5hYnMob2xkSGVpZ2h0IC0gdGV4dEhlaWdodCh0aGlzLmRpc3BsYXkpKSA+IC41IHx8IHRoaXMub3B0aW9ucy5saW5lV3JhcHBpbmcpXG4gICAgICAgICAgeyBlc3RpbWF0ZUxpbmVIZWlnaHRzKHRoaXMpOyB9XG4gICAgICAgIHNpZ25hbCh0aGlzLCBcInJlZnJlc2hcIiwgdGhpcyk7XG4gICAgICB9KSxcblxuICAgICAgc3dhcERvYzogbWV0aG9kT3AoZnVuY3Rpb24oZG9jKSB7XG4gICAgICAgIHZhciBvbGQgPSB0aGlzLmRvYztcbiAgICAgICAgb2xkLmNtID0gbnVsbDtcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9uIGlmIGFueSAoIzU4MjEpXG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnNlbGVjdGluZ1RleHQpIHsgdGhpcy5zdGF0ZS5zZWxlY3RpbmdUZXh0KCk7IH1cbiAgICAgICAgYXR0YWNoRG9jKHRoaXMsIGRvYyk7XG4gICAgICAgIGNsZWFyQ2FjaGVzKHRoaXMpO1xuICAgICAgICB0aGlzLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgc2Nyb2xsVG9Db29yZHModGhpcywgZG9jLnNjcm9sbExlZnQsIGRvYy5zY3JvbGxUb3ApO1xuICAgICAgICB0aGlzLmN1ck9wLmZvcmNlU2Nyb2xsID0gdHJ1ZTtcbiAgICAgICAgc2lnbmFsTGF0ZXIodGhpcywgXCJzd2FwRG9jXCIsIHRoaXMsIG9sZCk7XG4gICAgICAgIHJldHVybiBvbGRcbiAgICAgIH0pLFxuXG4gICAgICBwaHJhc2U6IGZ1bmN0aW9uKHBocmFzZVRleHQpIHtcbiAgICAgICAgdmFyIHBocmFzZXMgPSB0aGlzLm9wdGlvbnMucGhyYXNlcztcbiAgICAgICAgcmV0dXJuIHBocmFzZXMgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBocmFzZXMsIHBocmFzZVRleHQpID8gcGhyYXNlc1twaHJhc2VUZXh0XSA6IHBocmFzZVRleHRcbiAgICAgIH0sXG5cbiAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5pbnB1dC5nZXRGaWVsZCgpfSxcbiAgICAgIGdldFdyYXBwZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkud3JhcHBlcn0sXG4gICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheS5zY3JvbGxlcn0sXG4gICAgICBnZXRHdXR0ZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXkuZ3V0dGVyc31cbiAgICB9O1xuICAgIGV2ZW50TWl4aW4oQ29kZU1pcnJvcik7XG5cbiAgICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIGlmICghaGVscGVycy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgeyBoZWxwZXJzW3R5cGVdID0gQ29kZU1pcnJvclt0eXBlXSA9IHtfZ2xvYmFsOiBbXX07IH1cbiAgICAgIGhlbHBlcnNbdHlwZV1bbmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICAgIENvZGVNaXJyb3IucmVnaXN0ZXJHbG9iYWxIZWxwZXIgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBwcmVkaWNhdGUsIHZhbHVlKSB7XG4gICAgICBDb2RlTWlycm9yLnJlZ2lzdGVySGVscGVyKHR5cGUsIG5hbWUsIHZhbHVlKTtcbiAgICAgIGhlbHBlcnNbdHlwZV0uX2dsb2JhbC5wdXNoKHtwcmVkOiBwcmVkaWNhdGUsIHZhbDogdmFsdWV9KTtcbiAgICB9O1xuICB9XG5cbiAgLy8gVXNlZCBmb3IgaG9yaXpvbnRhbCByZWxhdGl2ZSBtb3Rpb24uIERpciBpcyAtMSBvciAxIChsZWZ0IG9yXG4gIC8vIHJpZ2h0KSwgdW5pdCBjYW4gYmUgXCJjb2RlcG9pbnRcIiwgXCJjaGFyXCIsIFwiY29sdW1uXCIgKGxpa2UgY2hhciwgYnV0XG4gIC8vIGRvZXNuJ3QgY3Jvc3MgbGluZSBib3VuZGFyaWVzKSwgXCJ3b3JkXCIgKGFjcm9zcyBuZXh0IHdvcmQpLCBvclxuICAvLyBcImdyb3VwXCIgKHRvIHRoZSBzdGFydCBvZiBuZXh0IGdyb3VwIG9mIHdvcmQgb3JcbiAgLy8gbm9uLXdvcmQtbm9uLXdoaXRlc3BhY2UgY2hhcnMpLiBUaGUgdmlzdWFsbHkgcGFyYW0gY29udHJvbHNcbiAgLy8gd2hldGhlciwgaW4gcmlnaHQtdG8tbGVmdCB0ZXh0LCBkaXJlY3Rpb24gMSBtZWFucyB0byBtb3ZlIHRvd2FyZHNcbiAgLy8gdGhlIG5leHQgaW5kZXggaW4gdGhlIHN0cmluZywgb3IgdG93YXJkcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSByaWdodFxuICAvLyBvZiB0aGUgY3VycmVudCBwb3NpdGlvbi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYVxuICAvLyBoaXRTaWRlPXRydWUgcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZFBvc0goZG9jLCBwb3MsIGRpciwgdW5pdCwgdmlzdWFsbHkpIHtcbiAgICB2YXIgb2xkUG9zID0gcG9zO1xuICAgIHZhciBvcmlnRGlyID0gZGlyO1xuICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShkb2MsIHBvcy5saW5lKTtcbiAgICB2YXIgbGluZURpciA9IHZpc3VhbGx5ICYmIGRvYy5kaXJlY3Rpb24gPT0gXCJydGxcIiA/IC1kaXIgOiBkaXI7XG4gICAgZnVuY3Rpb24gZmluZE5leHRMaW5lKCkge1xuICAgICAgdmFyIGwgPSBwb3MubGluZSArIGxpbmVEaXI7XG4gICAgICBpZiAobCA8IGRvYy5maXJzdCB8fCBsID49IGRvYy5maXJzdCArIGRvYy5zaXplKSB7IHJldHVybiBmYWxzZSB9XG4gICAgICBwb3MgPSBuZXcgUG9zKGwsIHBvcy5jaCwgcG9zLnN0aWNreSk7XG4gICAgICByZXR1cm4gbGluZU9iaiA9IGdldExpbmUoZG9jLCBsKVxuICAgIH1cbiAgICBmdW5jdGlvbiBtb3ZlT25jZShib3VuZFRvTGluZSkge1xuICAgICAgdmFyIG5leHQ7XG4gICAgICBpZiAodW5pdCA9PSBcImNvZGVwb2ludFwiKSB7XG4gICAgICAgIHZhciBjaCA9IGxpbmVPYmoudGV4dC5jaGFyQ29kZUF0KHBvcy5jaCArICh1bml0ID4gMCA/IDAgOiAtMSkpO1xuICAgICAgICBpZiAoaXNOYU4oY2gpKSB7IG5leHQgPSBudWxsOyB9XG4gICAgICAgIGVsc2UgeyBuZXh0ID0gbmV3IFBvcyhwb3MubGluZSwgTWF0aC5tYXgoMCwgTWF0aC5taW4obGluZU9iai50ZXh0Lmxlbmd0aCwgcG9zLmNoICsgZGlyICogKGNoID49IDB4RDgwMCAmJiBjaCA8IDB4REMwMCA/IDIgOiAxKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1kaXIpOyB9XG4gICAgICB9IGVsc2UgaWYgKHZpc3VhbGx5KSB7XG4gICAgICAgIG5leHQgPSBtb3ZlVmlzdWFsbHkoZG9jLmNtLCBsaW5lT2JqLCBwb3MsIGRpcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gbW92ZUxvZ2ljYWxseShsaW5lT2JqLCBwb3MsIGRpcik7XG4gICAgICB9XG4gICAgICBpZiAobmV4dCA9PSBudWxsKSB7XG4gICAgICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpXG4gICAgICAgICAgeyBwb3MgPSBlbmRPZkxpbmUodmlzdWFsbHksIGRvYy5jbSwgbGluZU9iaiwgcG9zLmxpbmUsIGxpbmVEaXIpOyB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7IHJldHVybiBmYWxzZSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3MgPSBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodW5pdCA9PSBcImNoYXJcIiB8fCB1bml0ID09IFwiY29kZXBvaW50XCIpIHtcbiAgICAgIG1vdmVPbmNlKCk7XG4gICAgfSBlbHNlIGlmICh1bml0ID09IFwiY29sdW1uXCIpIHtcbiAgICAgIG1vdmVPbmNlKHRydWUpO1xuICAgIH0gZWxzZSBpZiAodW5pdCA9PSBcIndvcmRcIiB8fCB1bml0ID09IFwiZ3JvdXBcIikge1xuICAgICAgdmFyIHNhd1R5cGUgPSBudWxsLCBncm91cCA9IHVuaXQgPT0gXCJncm91cFwiO1xuICAgICAgdmFyIGhlbHBlciA9IGRvYy5jbSAmJiBkb2MuY20uZ2V0SGVscGVyKHBvcywgXCJ3b3JkQ2hhcnNcIik7XG4gICAgICBmb3IgKHZhciBmaXJzdCA9IHRydWU7OyBmaXJzdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkaXIgPCAwICYmICFtb3ZlT25jZSghZmlyc3QpKSB7IGJyZWFrIH1cbiAgICAgICAgdmFyIGN1ciA9IGxpbmVPYmoudGV4dC5jaGFyQXQocG9zLmNoKSB8fCBcIlxcblwiO1xuICAgICAgICB2YXIgdHlwZSA9IGlzV29yZENoYXIoY3VyLCBoZWxwZXIpID8gXCJ3XCJcbiAgICAgICAgICA6IGdyb3VwICYmIGN1ciA9PSBcIlxcblwiID8gXCJuXCJcbiAgICAgICAgICA6ICFncm91cCB8fCAvXFxzLy50ZXN0KGN1cikgPyBudWxsXG4gICAgICAgICAgOiBcInBcIjtcbiAgICAgICAgaWYgKGdyb3VwICYmICFmaXJzdCAmJiAhdHlwZSkgeyB0eXBlID0gXCJzXCI7IH1cbiAgICAgICAgaWYgKHNhd1R5cGUgJiYgc2F3VHlwZSAhPSB0eXBlKSB7XG4gICAgICAgICAgaWYgKGRpciA8IDApIHtkaXIgPSAxOyBtb3ZlT25jZSgpOyBwb3Muc3RpY2t5ID0gXCJhZnRlclwiO31cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUpIHsgc2F3VHlwZSA9IHR5cGU7IH1cbiAgICAgICAgaWYgKGRpciA+IDAgJiYgIW1vdmVPbmNlKCFmaXJzdCkpIHsgYnJlYWsgfVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gc2tpcEF0b21pYyhkb2MsIHBvcywgb2xkUG9zLCBvcmlnRGlyLCB0cnVlKTtcbiAgICBpZiAoZXF1YWxDdXJzb3JQb3Mob2xkUG9zLCByZXN1bHQpKSB7IHJlc3VsdC5oaXRTaWRlID0gdHJ1ZTsgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIC8vIEZvciByZWxhdGl2ZSB2ZXJ0aWNhbCBtb3ZlbWVudC4gRGlyIG1heSBiZSAtMSBvciAxLiBVbml0IGNhbiBiZVxuICAvLyBcInBhZ2VcIiBvciBcImxpbmVcIi4gVGhlIHJlc3VsdGluZyBwb3NpdGlvbiB3aWxsIGhhdmUgYSBoaXRTaWRlPXRydWVcbiAgLy8gcHJvcGVydHkgaWYgaXQgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC5cbiAgZnVuY3Rpb24gZmluZFBvc1YoY20sIHBvcywgZGlyLCB1bml0KSB7XG4gICAgdmFyIGRvYyA9IGNtLmRvYywgeCA9IHBvcy5sZWZ0LCB5O1xuICAgIGlmICh1bml0ID09IFwicGFnZVwiKSB7XG4gICAgICB2YXIgcGFnZVNpemUgPSBNYXRoLm1pbihjbS5kaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCk7XG4gICAgICB2YXIgbW92ZUFtb3VudCA9IE1hdGgubWF4KHBhZ2VTaXplIC0gLjUgKiB0ZXh0SGVpZ2h0KGNtLmRpc3BsYXkpLCAzKTtcbiAgICAgIHkgPSAoZGlyID4gMCA/IHBvcy5ib3R0b20gOiBwb3MudG9wKSArIGRpciAqIG1vdmVBbW91bnQ7XG5cbiAgICB9IGVsc2UgaWYgKHVuaXQgPT0gXCJsaW5lXCIpIHtcbiAgICAgIHkgPSBkaXIgPiAwID8gcG9zLmJvdHRvbSArIDMgOiBwb3MudG9wIC0gMztcbiAgICB9XG4gICAgdmFyIHRhcmdldDtcbiAgICBmb3IgKDs7KSB7XG4gICAgICB0YXJnZXQgPSBjb29yZHNDaGFyKGNtLCB4LCB5KTtcbiAgICAgIGlmICghdGFyZ2V0Lm91dHNpZGUpIHsgYnJlYWsgfVxuICAgICAgaWYgKGRpciA8IDAgPyB5IDw9IDAgOiB5ID49IGRvYy5oZWlnaHQpIHsgdGFyZ2V0LmhpdFNpZGUgPSB0cnVlOyBicmVhayB9XG4gICAgICB5ICs9IGRpciAqIDU7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRcbiAgfVxuXG4gIC8vIENPTlRFTlRFRElUQUJMRSBJTlBVVCBTVFlMRVxuXG4gIHZhciBDb250ZW50RWRpdGFibGVJbnB1dCA9IGZ1bmN0aW9uKGNtKSB7XG4gICAgdGhpcy5jbSA9IGNtO1xuICAgIHRoaXMubGFzdEFuY2hvck5vZGUgPSB0aGlzLmxhc3RBbmNob3JPZmZzZXQgPSB0aGlzLmxhc3RGb2N1c05vZGUgPSB0aGlzLmxhc3RGb2N1c09mZnNldCA9IG51bGw7XG4gICAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTtcbiAgICB0aGlzLmNvbXBvc2luZyA9IG51bGw7XG4gICAgdGhpcy5ncmFjZVBlcmlvZCA9IGZhbHNlO1xuICAgIHRoaXMucmVhZERPTVRpbWVvdXQgPSBudWxsO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKGRpc3BsYXkpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0ID0gdGhpcywgY20gPSBpbnB1dC5jbTtcbiAgICB2YXIgZGl2ID0gaW5wdXQuZGl2ID0gZGlzcGxheS5saW5lRGl2O1xuICAgIGRpc2FibGVCcm93c2VyTWFnaWMoZGl2LCBjbS5vcHRpb25zLnNwZWxsY2hlY2ssIGNtLm9wdGlvbnMuYXV0b2NvcnJlY3QsIGNtLm9wdGlvbnMuYXV0b2NhcGl0YWxpemUpO1xuXG4gICAgZnVuY3Rpb24gYmVsb25nc1RvSW5wdXQoZSkge1xuICAgICAgZm9yICh2YXIgdCA9IGUudGFyZ2V0OyB0OyB0ID0gdC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGlmICh0ID09IGRpdikgeyByZXR1cm4gdHJ1ZSB9XG4gICAgICAgIGlmICgvXFxiQ29kZU1pcnJvci0oPzpsaW5lKT93aWRnZXRcXGIvLnRlc3QodC5jbGFzc05hbWUpKSB7IGJyZWFrIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIG9uKGRpdiwgXCJwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCFiZWxvbmdzVG9JbnB1dChlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkgfHwgaGFuZGxlUGFzdGUoZSwgY20pKSB7IHJldHVybiB9XG4gICAgICAvLyBJRSBkb2Vzbid0IGZpcmUgaW5wdXQgZXZlbnRzLCBzbyB3ZSBzY2hlZHVsZSBhIHJlYWQgZm9yIHRoZSBwYXN0ZWQgY29udGVudCBpbiB0aGlzIHdheVxuICAgICAgaWYgKGllX3ZlcnNpb24gPD0gMTEpIHsgc2V0VGltZW91dChvcGVyYXRpb24oY20sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMkMS51cGRhdGVGcm9tRE9NKCk7IH0pLCAyMCk7IH1cbiAgICB9KTtcblxuICAgIG9uKGRpdiwgXCJjb21wb3NpdGlvbnN0YXJ0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB0aGlzJDEuY29tcG9zaW5nID0ge2RhdGE6IGUuZGF0YSwgZG9uZTogZmFsc2V9O1xuICAgIH0pO1xuICAgIG9uKGRpdiwgXCJjb21wb3NpdGlvbnVwZGF0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCF0aGlzJDEuY29tcG9zaW5nKSB7IHRoaXMkMS5jb21wb3NpbmcgPSB7ZGF0YTogZS5kYXRhLCBkb25lOiBmYWxzZX07IH1cbiAgICB9KTtcbiAgICBvbihkaXYsIFwiY29tcG9zaXRpb25lbmRcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmICh0aGlzJDEuY29tcG9zaW5nKSB7XG4gICAgICAgIGlmIChlLmRhdGEgIT0gdGhpcyQxLmNvbXBvc2luZy5kYXRhKSB7IHRoaXMkMS5yZWFkRnJvbURPTVNvb24oKTsgfVxuICAgICAgICB0aGlzJDEuY29tcG9zaW5nLmRvbmUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb24oZGl2LCBcInRvdWNoc3RhcnRcIiwgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5wdXQuZm9yY2VDb21wb3NpdGlvbkVuZCgpOyB9KTtcblxuICAgIG9uKGRpdiwgXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMkMS5jb21wb3NpbmcpIHsgdGhpcyQxLnJlYWRGcm9tRE9NU29vbigpOyB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBvbkNvcHlDdXQoZSkge1xuICAgICAgaWYgKCFiZWxvbmdzVG9JbnB1dChlKSB8fCBzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiBmYWxzZSwgdGV4dDogY20uZ2V0U2VsZWN0aW9ucygpfSk7XG4gICAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikgeyBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpOyB9XG4gICAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiB0cnVlLCB0ZXh0OiByYW5nZXMudGV4dH0pO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY3V0XCIpIHtcbiAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9ucyhyYW5nZXMucmFuZ2VzLCAwLCBzZWxfZG9udFNjcm9sbCk7XG4gICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKFwiXCIsIG51bGwsIFwiY3V0XCIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZS5jbGlwYm9hcmREYXRhKSB7XG4gICAgICAgIGUuY2xpcGJvYXJkRGF0YS5jbGVhckRhdGEoKTtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBsYXN0Q29waWVkLnRleHQuam9pbihcIlxcblwiKTtcbiAgICAgICAgLy8gaU9TIGV4cG9zZXMgdGhlIGNsaXBib2FyZCBBUEksIGJ1dCBzZWVtcyB0byBkaXNjYXJkIGNvbnRlbnQgaW5zZXJ0ZWQgaW50byBpdFxuICAgICAgICBlLmNsaXBib2FyZERhdGEuc2V0RGF0YShcIlRleHRcIiwgY29udGVudCk7XG4gICAgICAgIGlmIChlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcIlRleHRcIikgPT0gY29udGVudCkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT2xkLWZhc2hpb25lZCBicmllZmx5LWZvY3VzLWEtdGV4dGFyZWEgaGFja1xuICAgICAgdmFyIGtsdWRnZSA9IGhpZGRlblRleHRhcmVhKCksIHRlID0ga2x1ZGdlLmZpcnN0Q2hpbGQ7XG4gICAgICBjbS5kaXNwbGF5LmxpbmVTcGFjZS5pbnNlcnRCZWZvcmUoa2x1ZGdlLCBjbS5kaXNwbGF5LmxpbmVTcGFjZS5maXJzdENoaWxkKTtcbiAgICAgIHRlLnZhbHVlID0gbGFzdENvcGllZC50ZXh0LmpvaW4oXCJcXG5cIik7XG4gICAgICB2YXIgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgc2VsZWN0SW5wdXQodGUpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNtLmRpc3BsYXkubGluZVNwYWNlLnJlbW92ZUNoaWxkKGtsdWRnZSk7XG4gICAgICAgIGhhZEZvY3VzLmZvY3VzKCk7XG4gICAgICAgIGlmIChoYWRGb2N1cyA9PSBkaXYpIHsgaW5wdXQuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsgfVxuICAgICAgfSwgNTApO1xuICAgIH1cbiAgICBvbihkaXYsIFwiY29weVwiLCBvbkNvcHlDdXQpO1xuICAgIG9uKGRpdiwgXCJjdXRcIiwgb25Db3B5Q3V0KTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2NyZWVuUmVhZGVyTGFiZWxDaGFuZ2VkID0gZnVuY3Rpb24gKGxhYmVsKSB7XG4gICAgLy8gTGFiZWwgZm9yIHNjcmVlbnJlYWRlcnMsIGFjY2Vzc2liaWxpdHlcbiAgICBpZihsYWJlbCkge1xuICAgICAgdGhpcy5kaXYuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpdi5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKTtcbiAgICB9XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnByZXBhcmVTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHByZXBhcmVTZWxlY3Rpb24odGhpcy5jbSwgZmFsc2UpO1xuICAgIHJlc3VsdC5mb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gdGhpcy5kaXY7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zaG93U2VsZWN0aW9uID0gZnVuY3Rpb24gKGluZm8sIHRha2VGb2N1cykge1xuICAgIGlmICghaW5mbyB8fCAhdGhpcy5jbS5kaXNwbGF5LnZpZXcubGVuZ3RoKSB7IHJldHVybiB9XG4gICAgaWYgKGluZm8uZm9jdXMgfHwgdGFrZUZvY3VzKSB7IHRoaXMuc2hvd1ByaW1hcnlTZWxlY3Rpb24oKTsgfVxuICAgIHRoaXMuc2hvd011bHRpcGxlU2VsZWN0aW9ucyhpbmZvKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNtLmRpc3BsYXkud3JhcHBlci5vd25lckRvY3VtZW50LmdldFNlbGVjdGlvbigpXG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNob3dQcmltYXJ5U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpLCBjbSA9IHRoaXMuY20sIHByaW0gPSBjbS5kb2Muc2VsLnByaW1hcnkoKTtcbiAgICB2YXIgZnJvbSA9IHByaW0uZnJvbSgpLCB0byA9IHByaW0udG8oKTtcblxuICAgIGlmIChjbS5kaXNwbGF5LnZpZXdUbyA9PSBjbS5kaXNwbGF5LnZpZXdGcm9tIHx8IGZyb20ubGluZSA+PSBjbS5kaXNwbGF5LnZpZXdUbyB8fCB0by5saW5lIDwgY20uZGlzcGxheS52aWV3RnJvbSkge1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGN1ckFuY2hvciA9IGRvbVRvUG9zKGNtLCBzZWwuYW5jaG9yTm9kZSwgc2VsLmFuY2hvck9mZnNldCk7XG4gICAgdmFyIGN1ckZvY3VzID0gZG9tVG9Qb3MoY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7XG4gICAgaWYgKGN1ckFuY2hvciAmJiAhY3VyQW5jaG9yLmJhZCAmJiBjdXJGb2N1cyAmJiAhY3VyRm9jdXMuYmFkICYmXG4gICAgICAgIGNtcChtaW5Qb3MoY3VyQW5jaG9yLCBjdXJGb2N1cyksIGZyb20pID09IDAgJiZcbiAgICAgICAgY21wKG1heFBvcyhjdXJBbmNob3IsIGN1ckZvY3VzKSwgdG8pID09IDApXG4gICAgICB7IHJldHVybiB9XG5cbiAgICB2YXIgdmlldyA9IGNtLmRpc3BsYXkudmlldztcbiAgICB2YXIgc3RhcnQgPSAoZnJvbS5saW5lID49IGNtLmRpc3BsYXkudmlld0Zyb20gJiYgcG9zVG9ET00oY20sIGZyb20pKSB8fFxuICAgICAgICB7bm9kZTogdmlld1swXS5tZWFzdXJlLm1hcFsyXSwgb2Zmc2V0OiAwfTtcbiAgICB2YXIgZW5kID0gdG8ubGluZSA8IGNtLmRpc3BsYXkudmlld1RvICYmIHBvc1RvRE9NKGNtLCB0byk7XG4gICAgaWYgKCFlbmQpIHtcbiAgICAgIHZhciBtZWFzdXJlID0gdmlld1t2aWV3Lmxlbmd0aCAtIDFdLm1lYXN1cmU7XG4gICAgICB2YXIgbWFwID0gbWVhc3VyZS5tYXBzID8gbWVhc3VyZS5tYXBzW21lYXN1cmUubWFwcy5sZW5ndGggLSAxXSA6IG1lYXN1cmUubWFwO1xuICAgICAgZW5kID0ge25vZGU6IG1hcFttYXAubGVuZ3RoIC0gMV0sIG9mZnNldDogbWFwW21hcC5sZW5ndGggLSAyXSAtIG1hcFttYXAubGVuZ3RoIC0gM119O1xuICAgIH1cblxuICAgIGlmICghc3RhcnQgfHwgIWVuZCkge1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIG9sZCA9IHNlbC5yYW5nZUNvdW50ICYmIHNlbC5nZXRSYW5nZUF0KDApLCBybmc7XG4gICAgdHJ5IHsgcm5nID0gcmFuZ2Uoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0LCBlbmQub2Zmc2V0LCBlbmQubm9kZSk7IH1cbiAgICBjYXRjaChlKSB7fSAvLyBPdXIgbW9kZWwgb2YgdGhlIERPTSBtaWdodCBiZSBvdXRkYXRlZCwgaW4gd2hpY2ggY2FzZSB0aGUgcmFuZ2Ugd2UgdHJ5IHRvIHNldCBjYW4gYmUgaW1wb3NzaWJsZVxuICAgIGlmIChybmcpIHtcbiAgICAgIGlmICghZ2Vja28gJiYgY20uc3RhdGUuZm9jdXNlZCkge1xuICAgICAgICBzZWwuY29sbGFwc2Uoc3RhcnQubm9kZSwgc3RhcnQub2Zmc2V0KTtcbiAgICAgICAgaWYgKCFybmcuY29sbGFwc2VkKSB7XG4gICAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgIHNlbC5hZGRSYW5nZShybmcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIHNlbC5hZGRSYW5nZShybmcpO1xuICAgICAgfVxuICAgICAgaWYgKG9sZCAmJiBzZWwuYW5jaG9yTm9kZSA9PSBudWxsKSB7IHNlbC5hZGRSYW5nZShvbGQpOyB9XG4gICAgICBlbHNlIGlmIChnZWNrbykgeyB0aGlzLnN0YXJ0R3JhY2VQZXJpb2QoKTsgfVxuICAgIH1cbiAgICB0aGlzLnJlbWVtYmVyU2VsZWN0aW9uKCk7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnN0YXJ0R3JhY2VQZXJpb2QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmdyYWNlUGVyaW9kKTtcbiAgICB0aGlzLmdyYWNlUGVyaW9kID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEuZ3JhY2VQZXJpb2QgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzJDEuc2VsZWN0aW9uQ2hhbmdlZCgpKVxuICAgICAgICB7IHRoaXMkMS5jbS5vcGVyYXRpb24oZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcyQxLmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9KTsgfVxuICAgIH0sIDIwKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2hvd011bHRpcGxlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgcmVtb3ZlQ2hpbGRyZW5BbmRBZGQodGhpcy5jbS5kaXNwbGF5LmN1cnNvckRpdiwgaW5mby5jdXJzb3JzKTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZCh0aGlzLmNtLmRpc3BsYXkuc2VsZWN0aW9uRGl2LCBpbmZvLnNlbGVjdGlvbik7XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnJlbWVtYmVyU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIHRoaXMubGFzdEFuY2hvck5vZGUgPSBzZWwuYW5jaG9yTm9kZTsgdGhpcy5sYXN0QW5jaG9yT2Zmc2V0ID0gc2VsLmFuY2hvck9mZnNldDtcbiAgICB0aGlzLmxhc3RGb2N1c05vZGUgPSBzZWwuZm9jdXNOb2RlOyB0aGlzLmxhc3RGb2N1c09mZnNldCA9IHNlbC5mb2N1c09mZnNldDtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc2VsZWN0aW9uSW5FZGl0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwucmFuZ2VDb3VudCkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHZhciBub2RlID0gc2VsLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgcmV0dXJuIGNvbnRhaW5zKHRoaXMuZGl2LCBub2RlKVxuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5mb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5jbS5vcHRpb25zLnJlYWRPbmx5ICE9IFwibm9jdXJzb3JcIikge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPSB0aGlzLmRpdilcbiAgICAgICAgeyB0aGlzLnNob3dTZWxlY3Rpb24odGhpcy5wcmVwYXJlU2VsZWN0aW9uKCksIHRydWUpOyB9XG4gICAgICB0aGlzLmRpdi5mb2N1cygpO1xuICAgIH1cbiAgfTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbiAoKSB7IHRoaXMuZGl2LmJsdXIoKTsgfTtcbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5kaXYgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuc3VwcG9ydHNUb3VjaCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVjZWl2ZWRGb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQgPSB0aGlzO1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkluRWRpdG9yKCkpXG4gICAgICB7IHRoaXMucG9sbFNlbGVjdGlvbigpOyB9XG4gICAgZWxzZVxuICAgICAgeyBydW5Jbk9wKHRoaXMuY20sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlucHV0LmNtLmN1ck9wLnNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOyB9KTsgfVxuXG4gICAgZnVuY3Rpb24gcG9sbCgpIHtcbiAgICAgIGlmIChpbnB1dC5jbS5zdGF0ZS5mb2N1c2VkKSB7XG4gICAgICAgIGlucHV0LnBvbGxTZWxlY3Rpb24oKTtcbiAgICAgICAgaW5wdXQucG9sbGluZy5zZXQoaW5wdXQuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIHBvbGwpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBvbGxpbmcuc2V0KHRoaXMuY20ub3B0aW9ucy5wb2xsSW50ZXJ2YWwsIHBvbGwpO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5zZWxlY3Rpb25DaGFuZ2VkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzZWwgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiBzZWwuYW5jaG9yTm9kZSAhPSB0aGlzLmxhc3RBbmNob3JOb2RlIHx8IHNlbC5hbmNob3JPZmZzZXQgIT0gdGhpcy5sYXN0QW5jaG9yT2Zmc2V0IHx8XG4gICAgICBzZWwuZm9jdXNOb2RlICE9IHRoaXMubGFzdEZvY3VzTm9kZSB8fCBzZWwuZm9jdXNPZmZzZXQgIT0gdGhpcy5sYXN0Rm9jdXNPZmZzZXRcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucG9sbFNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5yZWFkRE9NVGltZW91dCAhPSBudWxsIHx8IHRoaXMuZ3JhY2VQZXJpb2QgfHwgIXRoaXMuc2VsZWN0aW9uQ2hhbmdlZCgpKSB7IHJldHVybiB9XG4gICAgdmFyIHNlbCA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksIGNtID0gdGhpcy5jbTtcbiAgICAvLyBPbiBBbmRyb2lkIENocm9tZSAodmVyc2lvbiA1NiwgYXQgbGVhc3QpLCBiYWNrc3BhY2luZyBpbnRvIGFuXG4gICAgLy8gdW5lZGl0YWJsZSBibG9jayBlbGVtZW50IHdpbGwgcHV0IHRoZSBjdXJzb3IgaW4gdGhhdCBlbGVtZW50LFxuICAgIC8vIGFuZCB0aGVuLCBiZWNhdXNlIGl0J3Mgbm90IGVkaXRhYmxlLCBoaWRlIHRoZSB2aXJ0dWFsIGtleWJvYXJkLlxuICAgIC8vIEJlY2F1c2UgQW5kcm9pZCBkb2Vzbid0IGFsbG93IHVzIHRvIGFjdHVhbGx5IGRldGVjdCBiYWNrc3BhY2VcbiAgICAvLyBwcmVzc2VzIGluIGEgc2FuZSB3YXksIHRoaXMgY29kZSBjaGVja3MgZm9yIHdoZW4gdGhhdCBoYXBwZW5zXG4gICAgLy8gYW5kIHNpbXVsYXRlcyBhIGJhY2tzcGFjZSBwcmVzcyBpbiB0aGlzIGNhc2UuXG4gICAgaWYgKGFuZHJvaWQgJiYgY2hyb21lICYmIHRoaXMuY20uZGlzcGxheS5ndXR0ZXJTcGVjcy5sZW5ndGggJiYgaXNJbkd1dHRlcihzZWwuYW5jaG9yTm9kZSkpIHtcbiAgICAgIHRoaXMuY20udHJpZ2dlck9uS2V5RG93bih7dHlwZTogXCJrZXlkb3duXCIsIGtleUNvZGU6IDgsIHByZXZlbnREZWZhdWx0OiBNYXRoLmFic30pO1xuICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHRoaXMuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gICAgdGhpcy5yZW1lbWJlclNlbGVjdGlvbigpO1xuICAgIHZhciBhbmNob3IgPSBkb21Ub1BvcyhjbSwgc2VsLmFuY2hvck5vZGUsIHNlbC5hbmNob3JPZmZzZXQpO1xuICAgIHZhciBoZWFkID0gZG9tVG9Qb3MoY20sIHNlbC5mb2N1c05vZGUsIHNlbC5mb2N1c09mZnNldCk7XG4gICAgaWYgKGFuY2hvciAmJiBoZWFkKSB7IHJ1bkluT3AoY20sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFNlbGVjdGlvbihjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihhbmNob3IsIGhlYWQpLCBzZWxfZG9udFNjcm9sbCk7XG4gICAgICBpZiAoYW5jaG9yLmJhZCB8fCBoZWFkLmJhZCkgeyBjbS5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsgfVxuICAgIH0pOyB9XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnBvbGxDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnJlYWRET01UaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlYWRET01UaW1lb3V0KTtcbiAgICAgIHRoaXMucmVhZERPTVRpbWVvdXQgPSBudWxsO1xuICAgIH1cblxuICAgIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCBzZWwgPSBjbS5kb2Muc2VsLnByaW1hcnkoKTtcbiAgICB2YXIgZnJvbSA9IHNlbC5mcm9tKCksIHRvID0gc2VsLnRvKCk7XG4gICAgaWYgKGZyb20uY2ggPT0gMCAmJiBmcm9tLmxpbmUgPiBjbS5maXJzdExpbmUoKSlcbiAgICAgIHsgZnJvbSA9IFBvcyhmcm9tLmxpbmUgLSAxLCBnZXRMaW5lKGNtLmRvYywgZnJvbS5saW5lIC0gMSkubGVuZ3RoKTsgfVxuICAgIGlmICh0by5jaCA9PSBnZXRMaW5lKGNtLmRvYywgdG8ubGluZSkudGV4dC5sZW5ndGggJiYgdG8ubGluZSA8IGNtLmxhc3RMaW5lKCkpXG4gICAgICB7IHRvID0gUG9zKHRvLmxpbmUgKyAxLCAwKTsgfVxuICAgIGlmIChmcm9tLmxpbmUgPCBkaXNwbGF5LnZpZXdGcm9tIHx8IHRvLmxpbmUgPiBkaXNwbGF5LnZpZXdUbyAtIDEpIHsgcmV0dXJuIGZhbHNlIH1cblxuICAgIHZhciBmcm9tSW5kZXgsIGZyb21MaW5lLCBmcm9tTm9kZTtcbiAgICBpZiAoZnJvbS5saW5lID09IGRpc3BsYXkudmlld0Zyb20gfHwgKGZyb21JbmRleCA9IGZpbmRWaWV3SW5kZXgoY20sIGZyb20ubGluZSkpID09IDApIHtcbiAgICAgIGZyb21MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1swXS5saW5lKTtcbiAgICAgIGZyb21Ob2RlID0gZGlzcGxheS52aWV3WzBdLm5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZyb21MaW5lID0gbGluZU5vKGRpc3BsYXkudmlld1tmcm9tSW5kZXhdLmxpbmUpO1xuICAgICAgZnJvbU5vZGUgPSBkaXNwbGF5LnZpZXdbZnJvbUluZGV4IC0gMV0ubm9kZS5uZXh0U2libGluZztcbiAgICB9XG4gICAgdmFyIHRvSW5kZXggPSBmaW5kVmlld0luZGV4KGNtLCB0by5saW5lKTtcbiAgICB2YXIgdG9MaW5lLCB0b05vZGU7XG4gICAgaWYgKHRvSW5kZXggPT0gZGlzcGxheS52aWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgIHRvTGluZSA9IGRpc3BsYXkudmlld1RvIC0gMTtcbiAgICAgIHRvTm9kZSA9IGRpc3BsYXkubGluZURpdi5sYXN0Q2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvTGluZSA9IGxpbmVObyhkaXNwbGF5LnZpZXdbdG9JbmRleCArIDFdLmxpbmUpIC0gMTtcbiAgICAgIHRvTm9kZSA9IGRpc3BsYXkudmlld1t0b0luZGV4ICsgMV0ubm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKCFmcm9tTm9kZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHZhciBuZXdUZXh0ID0gY20uZG9jLnNwbGl0TGluZXMoZG9tVGV4dEJldHdlZW4oY20sIGZyb21Ob2RlLCB0b05vZGUsIGZyb21MaW5lLCB0b0xpbmUpKTtcbiAgICB2YXIgb2xkVGV4dCA9IGdldEJldHdlZW4oY20uZG9jLCBQb3MoZnJvbUxpbmUsIDApLCBQb3ModG9MaW5lLCBnZXRMaW5lKGNtLmRvYywgdG9MaW5lKS50ZXh0Lmxlbmd0aCkpO1xuICAgIHdoaWxlIChuZXdUZXh0Lmxlbmd0aCA+IDEgJiYgb2xkVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgICBpZiAobHN0KG5ld1RleHQpID09IGxzdChvbGRUZXh0KSkgeyBuZXdUZXh0LnBvcCgpOyBvbGRUZXh0LnBvcCgpOyB0b0xpbmUtLTsgfVxuICAgICAgZWxzZSBpZiAobmV3VGV4dFswXSA9PSBvbGRUZXh0WzBdKSB7IG5ld1RleHQuc2hpZnQoKTsgb2xkVGV4dC5zaGlmdCgpOyBmcm9tTGluZSsrOyB9XG4gICAgICBlbHNlIHsgYnJlYWsgfVxuICAgIH1cblxuICAgIHZhciBjdXRGcm9udCA9IDAsIGN1dEVuZCA9IDA7XG4gICAgdmFyIG5ld1RvcCA9IG5ld1RleHRbMF0sIG9sZFRvcCA9IG9sZFRleHRbMF0sIG1heEN1dEZyb250ID0gTWF0aC5taW4obmV3VG9wLmxlbmd0aCwgb2xkVG9wLmxlbmd0aCk7XG4gICAgd2hpbGUgKGN1dEZyb250IDwgbWF4Q3V0RnJvbnQgJiYgbmV3VG9wLmNoYXJDb2RlQXQoY3V0RnJvbnQpID09IG9sZFRvcC5jaGFyQ29kZUF0KGN1dEZyb250KSlcbiAgICAgIHsgKytjdXRGcm9udDsgfVxuICAgIHZhciBuZXdCb3QgPSBsc3QobmV3VGV4dCksIG9sZEJvdCA9IGxzdChvbGRUZXh0KTtcbiAgICB2YXIgbWF4Q3V0RW5kID0gTWF0aC5taW4obmV3Qm90Lmxlbmd0aCAtIChuZXdUZXh0Lmxlbmd0aCA9PSAxID8gY3V0RnJvbnQgOiAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkQm90Lmxlbmd0aCAtIChvbGRUZXh0Lmxlbmd0aCA9PSAxID8gY3V0RnJvbnQgOiAwKSk7XG4gICAgd2hpbGUgKGN1dEVuZCA8IG1heEN1dEVuZCAmJlxuICAgICAgICAgICBuZXdCb3QuY2hhckNvZGVBdChuZXdCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkgPT0gb2xkQm90LmNoYXJDb2RlQXQob2xkQm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpKVxuICAgICAgeyArK2N1dEVuZDsgfVxuICAgIC8vIFRyeSB0byBtb3ZlIHN0YXJ0IG9mIGNoYW5nZSB0byBzdGFydCBvZiBzZWxlY3Rpb24gaWYgYW1iaWd1b3VzXG4gICAgaWYgKG5ld1RleHQubGVuZ3RoID09IDEgJiYgb2xkVGV4dC5sZW5ndGggPT0gMSAmJiBmcm9tTGluZSA9PSBmcm9tLmxpbmUpIHtcbiAgICAgIHdoaWxlIChjdXRGcm9udCAmJiBjdXRGcm9udCA+IGZyb20uY2ggJiZcbiAgICAgICAgICAgICBuZXdCb3QuY2hhckNvZGVBdChuZXdCb3QubGVuZ3RoIC0gY3V0RW5kIC0gMSkgPT0gb2xkQm90LmNoYXJDb2RlQXQob2xkQm90Lmxlbmd0aCAtIGN1dEVuZCAtIDEpKSB7XG4gICAgICAgIGN1dEZyb250LS07XG4gICAgICAgIGN1dEVuZCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9IG5ld0JvdC5zbGljZSgwLCBuZXdCb3QubGVuZ3RoIC0gY3V0RW5kKS5yZXBsYWNlKC9eXFx1MjAwYisvLCBcIlwiKTtcbiAgICBuZXdUZXh0WzBdID0gbmV3VGV4dFswXS5zbGljZShjdXRGcm9udCkucmVwbGFjZSgvXFx1MjAwYiskLywgXCJcIik7XG5cbiAgICB2YXIgY2hGcm9tID0gUG9zKGZyb21MaW5lLCBjdXRGcm9udCk7XG4gICAgdmFyIGNoVG8gPSBQb3ModG9MaW5lLCBvbGRUZXh0Lmxlbmd0aCA/IGxzdChvbGRUZXh0KS5sZW5ndGggLSBjdXRFbmQgOiAwKTtcbiAgICBpZiAobmV3VGV4dC5sZW5ndGggPiAxIHx8IG5ld1RleHRbMF0gfHwgY21wKGNoRnJvbSwgY2hUbykpIHtcbiAgICAgIHJlcGxhY2VSYW5nZShjbS5kb2MsIG5ld1RleHQsIGNoRnJvbSwgY2hUbywgXCIraW5wdXRcIik7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUuZW5zdXJlUG9sbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZm9yY2VDb21wb3NpdGlvbkVuZCgpO1xuICB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mb3JjZUNvbXBvc2l0aW9uRW5kKCk7XG4gIH07XG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5mb3JjZUNvbXBvc2l0aW9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWFkRE9NVGltZW91dCk7XG4gICAgdGhpcy5jb21wb3NpbmcgPSBudWxsO1xuICAgIHRoaXMudXBkYXRlRnJvbURPTSgpO1xuICAgIHRoaXMuZGl2LmJsdXIoKTtcbiAgICB0aGlzLmRpdi5mb2N1cygpO1xuICB9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVhZEZyb21ET01Tb29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5yZWFkRE9NVGltZW91dCAhPSBudWxsKSB7IHJldHVybiB9XG4gICAgdGhpcy5yZWFkRE9NVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcyQxLnJlYWRET01UaW1lb3V0ID0gbnVsbDtcbiAgICAgIGlmICh0aGlzJDEuY29tcG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzJDEuY29tcG9zaW5nLmRvbmUpIHsgdGhpcyQxLmNvbXBvc2luZyA9IG51bGw7IH1cbiAgICAgICAgZWxzZSB7IHJldHVybiB9XG4gICAgICB9XG4gICAgICB0aGlzJDEudXBkYXRlRnJvbURPTSgpO1xuICAgIH0sIDgwKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUudXBkYXRlRnJvbURPTSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuY20uaXNSZWFkT25seSgpIHx8ICF0aGlzLnBvbGxDb250ZW50KCkpXG4gICAgICB7IHJ1bkluT3AodGhpcy5jbSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVnQ2hhbmdlKHRoaXMkMS5jbSk7IH0pOyB9XG4gIH07XG5cbiAgQ29udGVudEVkaXRhYmxlSW5wdXQucHJvdG90eXBlLnNldFVuZWRpdGFibGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIG5vZGUuY29udGVudEVkaXRhYmxlID0gXCJmYWxzZVwiO1xuICB9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS5jaGFyQ29kZSA9PSAwIHx8IHRoaXMuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghdGhpcy5jbS5pc1JlYWRPbmx5KCkpXG4gICAgICB7IG9wZXJhdGlvbih0aGlzLmNtLCBhcHBseVRleHRJbnB1dCkodGhpcy5jbSwgU3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlID09IG51bGwgPyBlLmtleUNvZGUgOiBlLmNoYXJDb2RlKSwgMCk7IH1cbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIHRoaXMuZGl2LmNvbnRlbnRFZGl0YWJsZSA9IFN0cmluZyh2YWwgIT0gXCJub2N1cnNvclwiKTtcbiAgfTtcblxuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUub25Db250ZXh0TWVudSA9IGZ1bmN0aW9uICgpIHt9O1xuICBDb250ZW50RWRpdGFibGVJbnB1dC5wcm90b3R5cGUucmVzZXRQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gIENvbnRlbnRFZGl0YWJsZUlucHV0LnByb3RvdHlwZS5uZWVkc0NvbnRlbnRBdHRyaWJ1dGUgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIHBvc1RvRE9NKGNtLCBwb3MpIHtcbiAgICB2YXIgdmlldyA9IGZpbmRWaWV3Rm9yTGluZShjbSwgcG9zLmxpbmUpO1xuICAgIGlmICghdmlldyB8fCB2aWV3LmhpZGRlbikgeyByZXR1cm4gbnVsbCB9XG4gICAgdmFyIGxpbmUgPSBnZXRMaW5lKGNtLmRvYywgcG9zLmxpbmUpO1xuICAgIHZhciBpbmZvID0gbWFwRnJvbUxpbmVWaWV3KHZpZXcsIGxpbmUsIHBvcy5saW5lKTtcblxuICAgIHZhciBvcmRlciA9IGdldE9yZGVyKGxpbmUsIGNtLmRvYy5kaXJlY3Rpb24pLCBzaWRlID0gXCJsZWZ0XCI7XG4gICAgaWYgKG9yZGVyKSB7XG4gICAgICB2YXIgcGFydFBvcyA9IGdldEJpZGlQYXJ0QXQob3JkZXIsIHBvcy5jaCk7XG4gICAgICBzaWRlID0gcGFydFBvcyAlIDIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5vZGVBbmRPZmZzZXRJbkxpbmVNYXAoaW5mby5tYXAsIHBvcy5jaCwgc2lkZSk7XG4gICAgcmVzdWx0Lm9mZnNldCA9IHJlc3VsdC5jb2xsYXBzZSA9PSBcInJpZ2h0XCIgPyByZXN1bHQuZW5kIDogcmVzdWx0LnN0YXJ0O1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSW5HdXR0ZXIobm9kZSkge1xuICAgIGZvciAodmFyIHNjYW4gPSBub2RlOyBzY2FuOyBzY2FuID0gc2Nhbi5wYXJlbnROb2RlKVxuICAgICAgeyBpZiAoL0NvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIvLnRlc3Qoc2Nhbi5jbGFzc05hbWUpKSB7IHJldHVybiB0cnVlIH0gfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gYmFkUG9zKHBvcywgYmFkKSB7IGlmIChiYWQpIHsgcG9zLmJhZCA9IHRydWU7IH0gcmV0dXJuIHBvcyB9XG5cbiAgZnVuY3Rpb24gZG9tVGV4dEJldHdlZW4oY20sIGZyb20sIHRvLCBmcm9tTGluZSwgdG9MaW5lKSB7XG4gICAgdmFyIHRleHQgPSBcIlwiLCBjbG9zaW5nID0gZmFsc2UsIGxpbmVTZXAgPSBjbS5kb2MubGluZVNlcGFyYXRvcigpLCBleHRyYUxpbmVicmVhayA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIHJlY29nbml6ZU1hcmtlcihpZCkgeyByZXR1cm4gZnVuY3Rpb24gKG1hcmtlcikgeyByZXR1cm4gbWFya2VyLmlkID09IGlkOyB9IH1cbiAgICBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIGlmIChjbG9zaW5nKSB7XG4gICAgICAgIHRleHQgKz0gbGluZVNlcDtcbiAgICAgICAgaWYgKGV4dHJhTGluZWJyZWFrKSB7IHRleHQgKz0gbGluZVNlcDsgfVxuICAgICAgICBjbG9zaW5nID0gZXh0cmFMaW5lYnJlYWsgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkVGV4dChzdHIpIHtcbiAgICAgIGlmIChzdHIpIHtcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgdGV4dCArPSBzdHI7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdhbGsobm9kZSkge1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMSkge1xuICAgICAgICB2YXIgY21UZXh0ID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJjbS10ZXh0XCIpO1xuICAgICAgICBpZiAoY21UZXh0KSB7XG4gICAgICAgICAgYWRkVGV4dChjbVRleHQpO1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHZhciBtYXJrZXJJRCA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiY20tbWFya2VyXCIpLCByYW5nZTtcbiAgICAgICAgaWYgKG1hcmtlcklEKSB7XG4gICAgICAgICAgdmFyIGZvdW5kID0gY20uZmluZE1hcmtzKFBvcyhmcm9tTGluZSwgMCksIFBvcyh0b0xpbmUgKyAxLCAwKSwgcmVjb2duaXplTWFya2VyKCttYXJrZXJJRCkpO1xuICAgICAgICAgIGlmIChmb3VuZC5sZW5ndGggJiYgKHJhbmdlID0gZm91bmRbMF0uZmluZCgwKSkpXG4gICAgICAgICAgICB7IGFkZFRleHQoZ2V0QmV0d2VlbihjbS5kb2MsIHJhbmdlLmZyb20sIHJhbmdlLnRvKS5qb2luKGxpbmVTZXApKTsgfVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKSA9PSBcImZhbHNlXCIpIHsgcmV0dXJuIH1cbiAgICAgICAgdmFyIGlzQmxvY2sgPSAvXihwcmV8ZGl2fHB8bGl8dGFibGV8YnIpJC9pLnRlc3Qobm9kZS5ub2RlTmFtZSk7XG4gICAgICAgIGlmICghL15iciQvaS50ZXN0KG5vZGUubm9kZU5hbWUpICYmIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoID09IDApIHsgcmV0dXJuIH1cblxuICAgICAgICBpZiAoaXNCbG9jaykgeyBjbG9zZSgpOyB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHsgd2Fsayhub2RlLmNoaWxkTm9kZXNbaV0pOyB9XG5cbiAgICAgICAgaWYgKC9eKHByZXxwKSQvaS50ZXN0KG5vZGUubm9kZU5hbWUpKSB7IGV4dHJhTGluZWJyZWFrID0gdHJ1ZTsgfVxuICAgICAgICBpZiAoaXNCbG9jaykgeyBjbG9zaW5nID0gdHJ1ZTsgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09IDMpIHtcbiAgICAgICAgYWRkVGV4dChub2RlLm5vZGVWYWx1ZS5yZXBsYWNlKC9cXHUyMDBiL2csIFwiXCIpLnJlcGxhY2UoL1xcdTAwYTAvZywgXCIgXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7Oykge1xuICAgICAgd2Fsayhmcm9tKTtcbiAgICAgIGlmIChmcm9tID09IHRvKSB7IGJyZWFrIH1cbiAgICAgIGZyb20gPSBmcm9tLm5leHRTaWJsaW5nO1xuICAgICAgZXh0cmFMaW5lYnJlYWsgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRcbiAgfVxuXG4gIGZ1bmN0aW9uIGRvbVRvUG9zKGNtLCBub2RlLCBvZmZzZXQpIHtcbiAgICB2YXIgbGluZU5vZGU7XG4gICAgaWYgKG5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSB7XG4gICAgICBsaW5lTm9kZSA9IGNtLmRpc3BsYXkubGluZURpdi5jaGlsZE5vZGVzW29mZnNldF07XG4gICAgICBpZiAoIWxpbmVOb2RlKSB7IHJldHVybiBiYWRQb3MoY20uY2xpcFBvcyhQb3MoY20uZGlzcGxheS52aWV3VG8gLSAxKSksIHRydWUpIH1cbiAgICAgIG5vZGUgPSBudWxsOyBvZmZzZXQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxpbmVOb2RlID0gbm9kZTs7IGxpbmVOb2RlID0gbGluZU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBpZiAoIWxpbmVOb2RlIHx8IGxpbmVOb2RlID09IGNtLmRpc3BsYXkubGluZURpdikgeyByZXR1cm4gbnVsbCB9XG4gICAgICAgIGlmIChsaW5lTm9kZS5wYXJlbnROb2RlICYmIGxpbmVOb2RlLnBhcmVudE5vZGUgPT0gY20uZGlzcGxheS5saW5lRGl2KSB7IGJyZWFrIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbS5kaXNwbGF5LnZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBsaW5lVmlldyA9IGNtLmRpc3BsYXkudmlld1tpXTtcbiAgICAgIGlmIChsaW5lVmlldy5ub2RlID09IGxpbmVOb2RlKVxuICAgICAgICB7IHJldHVybiBsb2NhdGVOb2RlSW5MaW5lVmlldyhsaW5lVmlldywgbm9kZSwgb2Zmc2V0KSB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbG9jYXRlTm9kZUluTGluZVZpZXcobGluZVZpZXcsIG5vZGUsIG9mZnNldCkge1xuICAgIHZhciB3cmFwcGVyID0gbGluZVZpZXcudGV4dC5maXJzdENoaWxkLCBiYWQgPSBmYWxzZTtcbiAgICBpZiAoIW5vZGUgfHwgIWNvbnRhaW5zKHdyYXBwZXIsIG5vZGUpKSB7IHJldHVybiBiYWRQb3MoUG9zKGxpbmVObyhsaW5lVmlldy5saW5lKSwgMCksIHRydWUpIH1cbiAgICBpZiAobm9kZSA9PSB3cmFwcGVyKSB7XG4gICAgICBiYWQgPSB0cnVlO1xuICAgICAgbm9kZSA9IHdyYXBwZXIuY2hpbGROb2Rlc1tvZmZzZXRdO1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB2YXIgbGluZSA9IGxpbmVWaWV3LnJlc3QgPyBsc3QobGluZVZpZXcucmVzdCkgOiBsaW5lVmlldy5saW5lO1xuICAgICAgICByZXR1cm4gYmFkUG9zKFBvcyhsaW5lTm8obGluZSksIGxpbmUudGV4dC5sZW5ndGgpLCBiYWQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHRleHROb2RlID0gbm9kZS5ub2RlVHlwZSA9PSAzID8gbm9kZSA6IG51bGwsIHRvcE5vZGUgPSBub2RlO1xuICAgIGlmICghdGV4dE5vZGUgJiYgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIG5vZGUuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PSAzKSB7XG4gICAgICB0ZXh0Tm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgIGlmIChvZmZzZXQpIHsgb2Zmc2V0ID0gdGV4dE5vZGUubm9kZVZhbHVlLmxlbmd0aDsgfVxuICAgIH1cbiAgICB3aGlsZSAodG9wTm9kZS5wYXJlbnROb2RlICE9IHdyYXBwZXIpIHsgdG9wTm9kZSA9IHRvcE5vZGUucGFyZW50Tm9kZTsgfVxuICAgIHZhciBtZWFzdXJlID0gbGluZVZpZXcubWVhc3VyZSwgbWFwcyA9IG1lYXN1cmUubWFwcztcblxuICAgIGZ1bmN0aW9uIGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCkge1xuICAgICAgZm9yICh2YXIgaSA9IC0xOyBpIDwgKG1hcHMgPyBtYXBzLmxlbmd0aCA6IDApOyBpKyspIHtcbiAgICAgICAgdmFyIG1hcCA9IGkgPCAwID8gbWVhc3VyZS5tYXAgOiBtYXBzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcC5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgIHZhciBjdXJOb2RlID0gbWFwW2ogKyAyXTtcbiAgICAgICAgICBpZiAoY3VyTm9kZSA9PSB0ZXh0Tm9kZSB8fCBjdXJOb2RlID09IHRvcE5vZGUpIHtcbiAgICAgICAgICAgIHZhciBsaW5lID0gbGluZU5vKGkgPCAwID8gbGluZVZpZXcubGluZSA6IGxpbmVWaWV3LnJlc3RbaV0pO1xuICAgICAgICAgICAgdmFyIGNoID0gbWFwW2pdICsgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgY3VyTm9kZSAhPSB0ZXh0Tm9kZSkgeyBjaCA9IG1hcFtqICsgKG9mZnNldCA/IDEgOiAwKV07IH1cbiAgICAgICAgICAgIHJldHVybiBQb3MobGluZSwgY2gpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBmb3VuZCA9IGZpbmQodGV4dE5vZGUsIHRvcE5vZGUsIG9mZnNldCk7XG4gICAgaWYgKGZvdW5kKSB7IHJldHVybiBiYWRQb3MoZm91bmQsIGJhZCkgfVxuXG4gICAgLy8gRklYTUUgdGhpcyBpcyBhbGwgcmVhbGx5IHNoYWt5LiBtaWdodCBoYW5kbGUgdGhlIGZldyBjYXNlcyBpdCBuZWVkcyB0byBoYW5kbGUsIGJ1dCBsaWtlbHkgdG8gY2F1c2UgcHJvYmxlbXNcbiAgICBmb3IgKHZhciBhZnRlciA9IHRvcE5vZGUubmV4dFNpYmxpbmcsIGRpc3QgPSB0ZXh0Tm9kZSA/IHRleHROb2RlLm5vZGVWYWx1ZS5sZW5ndGggLSBvZmZzZXQgOiAwOyBhZnRlcjsgYWZ0ZXIgPSBhZnRlci5uZXh0U2libGluZykge1xuICAgICAgZm91bmQgPSBmaW5kKGFmdGVyLCBhZnRlci5maXJzdENoaWxkLCAwKTtcbiAgICAgIGlmIChmb3VuZClcbiAgICAgICAgeyByZXR1cm4gYmFkUG9zKFBvcyhmb3VuZC5saW5lLCBmb3VuZC5jaCAtIGRpc3QpLCBiYWQpIH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBkaXN0ICs9IGFmdGVyLnRleHRDb250ZW50Lmxlbmd0aDsgfVxuICAgIH1cbiAgICBmb3IgKHZhciBiZWZvcmUgPSB0b3BOb2RlLnByZXZpb3VzU2libGluZywgZGlzdCQxID0gb2Zmc2V0OyBiZWZvcmU7IGJlZm9yZSA9IGJlZm9yZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgIGZvdW5kID0gZmluZChiZWZvcmUsIGJlZm9yZS5maXJzdENoaWxkLCAtMSk7XG4gICAgICBpZiAoZm91bmQpXG4gICAgICAgIHsgcmV0dXJuIGJhZFBvcyhQb3MoZm91bmQubGluZSwgZm91bmQuY2ggKyBkaXN0JDEpLCBiYWQpIH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyBkaXN0JDEgKz0gYmVmb3JlLnRleHRDb250ZW50Lmxlbmd0aDsgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRFWFRBUkVBIElOUFVUIFNUWUxFXG5cbiAgdmFyIFRleHRhcmVhSW5wdXQgPSBmdW5jdGlvbihjbSkge1xuICAgIHRoaXMuY20gPSBjbTtcbiAgICAvLyBTZWUgaW5wdXQucG9sbCBhbmQgaW5wdXQucmVzZXRcbiAgICB0aGlzLnByZXZJbnB1dCA9IFwiXCI7XG5cbiAgICAvLyBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgd2UgZXhwZWN0IGlucHV0IHRvIGFwcGVhciByZWFsIHNvb25cbiAgICAvLyBub3cgKGFmdGVyIHNvbWUgZXZlbnQgbGlrZSAna2V5cHJlc3MnIG9yICdpbnB1dCcpIGFuZCBhcmVcbiAgICAvLyBwb2xsaW5nIGludGVuc2l2ZWx5LlxuICAgIHRoaXMucG9sbGluZ0Zhc3QgPSBmYWxzZTtcbiAgICAvLyBTZWxmLXJlc2V0dGluZyB0aW1lb3V0IGZvciB0aGUgcG9sbGVyXG4gICAgdGhpcy5wb2xsaW5nID0gbmV3IERlbGF5ZWQoKTtcbiAgICAvLyBVc2VkIHRvIHdvcmsgYXJvdW5kIElFIGlzc3VlIHdpdGggc2VsZWN0aW9uIGJlaW5nIGZvcmdvdHRlbiB3aGVuIGZvY3VzIG1vdmVzIGF3YXkgZnJvbSB0ZXh0YXJlYVxuICAgIHRoaXMuaGFzU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5jb21wb3NpbmcgPSBudWxsO1xuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoZGlzcGxheSkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgaW5wdXQgPSB0aGlzLCBjbSA9IHRoaXMuY207XG4gICAgdGhpcy5jcmVhdGVGaWVsZChkaXNwbGF5KTtcbiAgICB2YXIgdGUgPSB0aGlzLnRleHRhcmVhO1xuXG4gICAgZGlzcGxheS53cmFwcGVyLmluc2VydEJlZm9yZSh0aGlzLndyYXBwZXIsIGRpc3BsYXkud3JhcHBlci5maXJzdENoaWxkKTtcblxuICAgIC8vIE5lZWRlZCB0byBoaWRlIGJpZyBibHVlIGJsaW5raW5nIGN1cnNvciBvbiBNb2JpbGUgU2FmYXJpIChkb2Vzbid0IHNlZW0gdG8gd29yayBpbiBpT1MgOCBhbnltb3JlKVxuICAgIGlmIChpb3MpIHsgdGUuc3R5bGUud2lkdGggPSBcIjBweFwiOyB9XG5cbiAgICBvbih0ZSwgXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5ICYmIHRoaXMkMS5oYXNTZWxlY3Rpb24pIHsgdGhpcyQxLmhhc1NlbGVjdGlvbiA9IG51bGw7IH1cbiAgICAgIGlucHV0LnBvbGwoKTtcbiAgICB9KTtcblxuICAgIG9uKHRlLCBcInBhc3RlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoc2lnbmFsRE9NRXZlbnQoY20sIGUpIHx8IGhhbmRsZVBhc3RlKGUsIGNtKSkgeyByZXR1cm4gfVxuXG4gICAgICBjbS5zdGF0ZS5wYXN0ZUluY29taW5nID0gK25ldyBEYXRlO1xuICAgICAgaW5wdXQuZmFzdFBvbGwoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb3B5Q3V0KGUpIHtcbiAgICAgIGlmIChzaWduYWxET01FdmVudChjbSwgZSkpIHsgcmV0dXJuIH1cbiAgICAgIGlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiBmYWxzZSwgdGV4dDogY20uZ2V0U2VsZWN0aW9ucygpfSk7XG4gICAgICB9IGVsc2UgaWYgKCFjbS5vcHRpb25zLmxpbmVXaXNlQ29weUN1dCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByYW5nZXMgPSBjb3B5YWJsZVJhbmdlcyhjbSk7XG4gICAgICAgIHNldExhc3RDb3BpZWQoe2xpbmVXaXNlOiB0cnVlLCB0ZXh0OiByYW5nZXMudGV4dH0pO1xuICAgICAgICBpZiAoZS50eXBlID09IFwiY3V0XCIpIHtcbiAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKHJhbmdlcy5yYW5nZXMsIG51bGwsIHNlbF9kb250U2Nyb2xsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnB1dC5wcmV2SW5wdXQgPSBcIlwiO1xuICAgICAgICAgIHRlLnZhbHVlID0gcmFuZ2VzLnRleHQuam9pbihcIlxcblwiKTtcbiAgICAgICAgICBzZWxlY3RJbnB1dCh0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlLnR5cGUgPT0gXCJjdXRcIikgeyBjbS5zdGF0ZS5jdXRJbmNvbWluZyA9ICtuZXcgRGF0ZTsgfVxuICAgIH1cbiAgICBvbih0ZSwgXCJjdXRcIiwgcHJlcGFyZUNvcHlDdXQpO1xuICAgIG9uKHRlLCBcImNvcHlcIiwgcHJlcGFyZUNvcHlDdXQpO1xuXG4gICAgb24oZGlzcGxheS5zY3JvbGxlciwgXCJwYXN0ZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGV2ZW50SW5XaWRnZXQoZGlzcGxheSwgZSkgfHwgc2lnbmFsRE9NRXZlbnQoY20sIGUpKSB7IHJldHVybiB9XG4gICAgICBpZiAoIXRlLmRpc3BhdGNoRXZlbnQpIHtcbiAgICAgICAgY20uc3RhdGUucGFzdGVJbmNvbWluZyA9ICtuZXcgRGF0ZTtcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFBhc3MgdGhlIGBwYXN0ZWAgZXZlbnQgdG8gdGhlIHRleHRhcmVhIHNvIGl0J3MgaGFuZGxlZCBieSBpdHMgZXZlbnQgbGlzdGVuZXIuXG4gICAgICB2YXIgZXZlbnQgPSBuZXcgRXZlbnQoXCJwYXN0ZVwiKTtcbiAgICAgIGV2ZW50LmNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGE7XG4gICAgICB0ZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICB9KTtcblxuICAgIC8vIFByZXZlbnQgbm9ybWFsIHNlbGVjdGlvbiBpbiB0aGUgZWRpdG9yICh3ZSBoYW5kbGUgb3VyIG93bilcbiAgICBvbihkaXNwbGF5LmxpbmVTcGFjZSwgXCJzZWxlY3RzdGFydFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKCFldmVudEluV2lkZ2V0KGRpc3BsYXksIGUpKSB7IGVfcHJldmVudERlZmF1bHQoZSk7IH1cbiAgICB9KTtcblxuICAgIG9uKHRlLCBcImNvbXBvc2l0aW9uc3RhcnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXJ0ID0gY20uZ2V0Q3Vyc29yKFwiZnJvbVwiKTtcbiAgICAgIGlmIChpbnB1dC5jb21wb3NpbmcpIHsgaW5wdXQuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7IH1cbiAgICAgIGlucHV0LmNvbXBvc2luZyA9IHtcbiAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICByYW5nZTogY20ubWFya1RleHQoc3RhcnQsIGNtLmdldEN1cnNvcihcInRvXCIpLCB7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItY29tcG9zaW5nXCJ9KVxuICAgICAgfTtcbiAgICB9KTtcbiAgICBvbih0ZSwgXCJjb21wb3NpdGlvbmVuZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaW5wdXQuY29tcG9zaW5nKSB7XG4gICAgICAgIGlucHV0LnBvbGwoKTtcbiAgICAgICAgaW5wdXQuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7XG4gICAgICAgIGlucHV0LmNvbXBvc2luZyA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuY3JlYXRlRmllbGQgPSBmdW5jdGlvbiAoX2Rpc3BsYXkpIHtcbiAgICAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWFcbiAgICB0aGlzLndyYXBwZXIgPSBoaWRkZW5UZXh0YXJlYSgpO1xuICAgIC8vIFRoZSBzZW1paGlkZGVuIHRleHRhcmVhIHRoYXQgaXMgZm9jdXNlZCB3aGVuIHRoZSBlZGl0b3IgaXNcbiAgICAvLyBmb2N1c2VkLCBhbmQgcmVjZWl2ZXMgaW5wdXQuXG4gICAgdGhpcy50ZXh0YXJlYSA9IHRoaXMud3JhcHBlci5maXJzdENoaWxkO1xuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnNjcmVlblJlYWRlckxhYmVsQ2hhbmdlZCA9IGZ1bmN0aW9uIChsYWJlbCkge1xuICAgIC8vIExhYmVsIGZvciBzY3JlZW5yZWFkZXJzLCBhY2Nlc3NpYmlsaXR5XG4gICAgaWYobGFiZWwpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgbGFiZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHRhcmVhLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICAgIH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5wcmVwYXJlU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFJlZHJhdyB0aGUgc2VsZWN0aW9uIGFuZC9vciBjdXJzb3JcbiAgICB2YXIgY20gPSB0aGlzLmNtLCBkaXNwbGF5ID0gY20uZGlzcGxheSwgZG9jID0gY20uZG9jO1xuICAgIHZhciByZXN1bHQgPSBwcmVwYXJlU2VsZWN0aW9uKGNtKTtcblxuICAgIC8vIE1vdmUgdGhlIGhpZGRlbiB0ZXh0YXJlYSBuZWFyIHRoZSBjdXJzb3IgdG8gcHJldmVudCBzY3JvbGxpbmcgYXJ0aWZhY3RzXG4gICAgaWYgKGNtLm9wdGlvbnMubW92ZUlucHV0V2l0aEN1cnNvcikge1xuICAgICAgdmFyIGhlYWRQb3MgPSBjdXJzb3JDb29yZHMoY20sIGRvYy5zZWwucHJpbWFyeSgpLmhlYWQsIFwiZGl2XCIpO1xuICAgICAgdmFyIHdyYXBPZmYgPSBkaXNwbGF5LndyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpbmVPZmYgPSBkaXNwbGF5LmxpbmVEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICByZXN1bHQudGVUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50SGVpZ2h0IC0gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLnRvcCArIGxpbmVPZmYudG9wIC0gd3JhcE9mZi50b3ApKTtcbiAgICAgIHJlc3VsdC50ZUxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihkaXNwbGF5LndyYXBwZXIuY2xpZW50V2lkdGggLSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkUG9zLmxlZnQgKyBsaW5lT2ZmLmxlZnQgLSB3cmFwT2ZmLmxlZnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc2hvd1NlbGVjdGlvbiA9IGZ1bmN0aW9uIChkcmF3bikge1xuICAgIHZhciBjbSA9IHRoaXMuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5O1xuICAgIHJlbW92ZUNoaWxkcmVuQW5kQWRkKGRpc3BsYXkuY3Vyc29yRGl2LCBkcmF3bi5jdXJzb3JzKTtcbiAgICByZW1vdmVDaGlsZHJlbkFuZEFkZChkaXNwbGF5LnNlbGVjdGlvbkRpdiwgZHJhd24uc2VsZWN0aW9uKTtcbiAgICBpZiAoZHJhd24udGVUb3AgIT0gbnVsbCkge1xuICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLnRvcCA9IGRyYXduLnRlVG9wICsgXCJweFwiO1xuICAgICAgdGhpcy53cmFwcGVyLnN0eWxlLmxlZnQgPSBkcmF3bi50ZUxlZnQgKyBcInB4XCI7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlc2V0IHRoZSBpbnB1dCB0byBjb3JyZXNwb25kIHRvIHRoZSBzZWxlY3Rpb24gKG9yIHRvIGJlIGVtcHR5LFxuICAvLyB3aGVuIG5vdCB0eXBpbmcgYW5kIG5vdGhpbmcgaXMgc2VsZWN0ZWQpXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKHR5cGluZykge1xuICAgIGlmICh0aGlzLmNvbnRleHRNZW51UGVuZGluZyB8fCB0aGlzLmNvbXBvc2luZykgeyByZXR1cm4gfVxuICAgIHZhciBjbSA9IHRoaXMuY207XG4gICAgaWYgKGNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMucHJldklucHV0ID0gXCJcIjtcbiAgICAgIHZhciBjb250ZW50ID0gY20uZ2V0U2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnRleHRhcmVhLnZhbHVlID0gY29udGVudDtcbiAgICAgIGlmIChjbS5zdGF0ZS5mb2N1c2VkKSB7IHNlbGVjdElucHV0KHRoaXMudGV4dGFyZWEpOyB9XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5KSB7IHRoaXMuaGFzU2VsZWN0aW9uID0gY29udGVudDsgfVxuICAgIH0gZWxzZSBpZiAoIXR5cGluZykge1xuICAgICAgdGhpcy5wcmV2SW5wdXQgPSB0aGlzLnRleHRhcmVhLnZhbHVlID0gXCJcIjtcbiAgICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gICAgfVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmdldEZpZWxkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy50ZXh0YXJlYSB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnN1cHBvcnRzVG91Y2ggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBmYWxzZSB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmZvY3VzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmNtLm9wdGlvbnMucmVhZE9ubHkgIT0gXCJub2N1cnNvclwiICYmICghbW9iaWxlIHx8IGFjdGl2ZUVsdCgpICE9IHRoaXMudGV4dGFyZWEpKSB7XG4gICAgICB0cnkgeyB0aGlzLnRleHRhcmVhLmZvY3VzKCk7IH1cbiAgICAgIGNhdGNoIChlKSB7fSAvLyBJRTggd2lsbCB0aHJvdyBpZiB0aGUgdGV4dGFyZWEgaXMgZGlzcGxheTogbm9uZSBvciBub3QgaW4gRE9NXG4gICAgfVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmJsdXIgPSBmdW5jdGlvbiAoKSB7IHRoaXMudGV4dGFyZWEuYmx1cigpOyB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLnJlc2V0UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy53cmFwcGVyLnN0eWxlLnRvcCA9IHRoaXMud3JhcHBlci5zdHlsZS5sZWZ0ID0gMDtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5yZWNlaXZlZEZvY3VzID0gZnVuY3Rpb24gKCkgeyB0aGlzLnNsb3dQb2xsKCk7IH07XG5cbiAgLy8gUG9sbCBmb3IgaW5wdXQgY2hhbmdlcywgdXNpbmcgdGhlIG5vcm1hbCByYXRlIG9mIHBvbGxpbmcuIFRoaXNcbiAgLy8gcnVucyBhcyBsb25nIGFzIHRoZSBlZGl0b3IgaXMgZm9jdXNlZC5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUuc2xvd1BvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIGlmICh0aGlzLnBvbGxpbmdGYXN0KSB7IHJldHVybiB9XG4gICAgdGhpcy5wb2xsaW5nLnNldCh0aGlzLmNtLm9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzJDEucG9sbCgpO1xuICAgICAgaWYgKHRoaXMkMS5jbS5zdGF0ZS5mb2N1c2VkKSB7IHRoaXMkMS5zbG93UG9sbCgpOyB9XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gV2hlbiBhbiBldmVudCBoYXMganVzdCBjb21lIGluIHRoYXQgaXMgbGlrZWx5IHRvIGFkZCBvciBjaGFuZ2VcbiAgLy8gc29tZXRoaW5nIGluIHRoZSBpbnB1dCB0ZXh0YXJlYSwgd2UgcG9sbCBmYXN0ZXIsIHRvIGVuc3VyZSB0aGF0XG4gIC8vIHRoZSBjaGFuZ2UgYXBwZWFycyBvbiB0aGUgc2NyZWVuIHF1aWNrbHkuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmZhc3RQb2xsID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtaXNzZWQgPSBmYWxzZSwgaW5wdXQgPSB0aGlzO1xuICAgIGlucHV0LnBvbGxpbmdGYXN0ID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBwKCkge1xuICAgICAgdmFyIGNoYW5nZWQgPSBpbnB1dC5wb2xsKCk7XG4gICAgICBpZiAoIWNoYW5nZWQgJiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IGlucHV0LnBvbGxpbmcuc2V0KDYwLCBwKTt9XG4gICAgICBlbHNlIHtpbnB1dC5wb2xsaW5nRmFzdCA9IGZhbHNlOyBpbnB1dC5zbG93UG9sbCgpO31cbiAgICB9XG4gICAgaW5wdXQucG9sbGluZy5zZXQoMjAsIHApO1xuICB9O1xuXG4gIC8vIFJlYWQgaW5wdXQgZnJvbSB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgdGhlIGRvY3VtZW50IHRvIG1hdGNoLlxuICAvLyBXaGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCwgaXQgaXMgcHJlc2VudCBpbiB0aGUgdGV4dGFyZWEsIGFuZFxuICAvLyBzZWxlY3RlZCAodW5sZXNzIGl0IGlzIGh1Z2UsIGluIHdoaWNoIGNhc2UgYSBwbGFjZWhvbGRlciBpc1xuICAvLyB1c2VkKS4gV2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCB0aGUgY3Vyc29yIHNpdHMgYWZ0ZXIgcHJldmlvdXNseVxuICAvLyBzZWVuIHRleHQgKGNhbiBiZSBlbXB0eSksIHdoaWNoIGlzIHN0b3JlZCBpbiBwcmV2SW5wdXQgKHdlIG11c3RcbiAgLy8gbm90IHJlc2V0IHRoZSB0ZXh0YXJlYSB3aGVuIHR5cGluZywgYmVjYXVzZSB0aGF0IGJyZWFrcyBJTUUpLlxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5wb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY20gPSB0aGlzLmNtLCBpbnB1dCA9IHRoaXMudGV4dGFyZWEsIHByZXZJbnB1dCA9IHRoaXMucHJldklucHV0O1xuICAgIC8vIFNpbmNlIHRoaXMgaXMgY2FsbGVkIGEgKmxvdCosIHRyeSB0byBiYWlsIG91dCBhcyBjaGVhcGx5IGFzXG4gICAgLy8gcG9zc2libGUgd2hlbiBpdCBpcyBjbGVhciB0aGF0IG5vdGhpbmcgaGFwcGVuZWQuIGhhc1NlbGVjdGlvblxuICAgIC8vIHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBhIGxvdCBvZiB0ZXh0IGluIHRoZSB0ZXh0YXJlYSxcbiAgICAvLyBpbiB3aGljaCBjYXNlIHJlYWRpbmcgaXRzIHZhbHVlIHdvdWxkIGJlIGV4cGVuc2l2ZS5cbiAgICBpZiAodGhpcy5jb250ZXh0TWVudVBlbmRpbmcgfHwgIWNtLnN0YXRlLmZvY3VzZWQgfHxcbiAgICAgICAgKGhhc1NlbGVjdGlvbihpbnB1dCkgJiYgIXByZXZJbnB1dCAmJiAhdGhpcy5jb21wb3NpbmcpIHx8XG4gICAgICAgIGNtLmlzUmVhZE9ubHkoKSB8fCBjbS5vcHRpb25zLmRpc2FibGVJbnB1dCB8fCBjbS5zdGF0ZS5rZXlTZXEpXG4gICAgICB7IHJldHVybiBmYWxzZSB9XG5cbiAgICB2YXIgdGV4dCA9IGlucHV0LnZhbHVlO1xuICAgIC8vIElmIG5vdGhpbmcgY2hhbmdlZCwgYmFpbC5cbiAgICBpZiAodGV4dCA9PSBwcmV2SW5wdXQgJiYgIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICAvLyBXb3JrIGFyb3VuZCBub25zZW5zaWNhbCBzZWxlY3Rpb24gcmVzZXR0aW5nIGluIElFOS8xMCwgYW5kXG4gICAgLy8gaW5leHBsaWNhYmxlIGFwcGVhcmFuY2Ugb2YgcHJpdmF0ZSBhcmVhIHVuaWNvZGUgY2hhcmFjdGVycyBvblxuICAgIC8vIHNvbWUga2V5IGNvbWJvcyBpbiBNYWMgKCMyNjg5KS5cbiAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA+PSA5ICYmIHRoaXMuaGFzU2VsZWN0aW9uID09PSB0ZXh0IHx8XG4gICAgICAgIG1hYyAmJiAvW1xcdWY3MDAtXFx1ZjdmZl0vLnRlc3QodGV4dCkpIHtcbiAgICAgIGNtLmRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjbS5kb2Muc2VsID09IGNtLmRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUpIHtcbiAgICAgIHZhciBmaXJzdCA9IHRleHQuY2hhckNvZGVBdCgwKTtcbiAgICAgIGlmIChmaXJzdCA9PSAweDIwMGIgJiYgIXByZXZJbnB1dCkgeyBwcmV2SW5wdXQgPSBcIlxcdTIwMGJcIjsgfVxuICAgICAgaWYgKGZpcnN0ID09IDB4MjFkYSkgeyB0aGlzLnJlc2V0KCk7IHJldHVybiB0aGlzLmNtLmV4ZWNDb21tYW5kKFwidW5kb1wiKSB9XG4gICAgfVxuICAgIC8vIEZpbmQgdGhlIHBhcnQgb2YgdGhlIGlucHV0IHRoYXQgaXMgYWN0dWFsbHkgbmV3XG4gICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklucHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpO1xuICAgIHdoaWxlIChzYW1lIDwgbCAmJiBwcmV2SW5wdXQuY2hhckNvZGVBdChzYW1lKSA9PSB0ZXh0LmNoYXJDb2RlQXQoc2FtZSkpIHsgKytzYW1lOyB9XG5cbiAgICBydW5Jbk9wKGNtLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseVRleHRJbnB1dChjbSwgdGV4dC5zbGljZShzYW1lKSwgcHJldklucHV0Lmxlbmd0aCAtIHNhbWUsXG4gICAgICAgICAgICAgICAgICAgICBudWxsLCB0aGlzJDEuY29tcG9zaW5nID8gXCIqY29tcG9zZVwiIDogbnVsbCk7XG5cbiAgICAgIC8vIERvbid0IGxlYXZlIGxvbmcgdGV4dCBpbiB0aGUgdGV4dGFyZWEsIHNpbmNlIGl0IG1ha2VzIGZ1cnRoZXIgcG9sbGluZyBzbG93XG4gICAgICBpZiAodGV4dC5sZW5ndGggPiAxMDAwIHx8IHRleHQuaW5kZXhPZihcIlxcblwiKSA+IC0xKSB7IGlucHV0LnZhbHVlID0gdGhpcyQxLnByZXZJbnB1dCA9IFwiXCI7IH1cbiAgICAgIGVsc2UgeyB0aGlzJDEucHJldklucHV0ID0gdGV4dDsgfVxuXG4gICAgICBpZiAodGhpcyQxLmNvbXBvc2luZykge1xuICAgICAgICB0aGlzJDEuY29tcG9zaW5nLnJhbmdlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMkMS5jb21wb3NpbmcucmFuZ2UgPSBjbS5tYXJrVGV4dCh0aGlzJDEuY29tcG9zaW5nLnN0YXJ0LCBjbS5nZXRDdXJzb3IoXCJ0b1wiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcIkNvZGVNaXJyb3ItY29tcG9zaW5nXCJ9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLmVuc3VyZVBvbGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5wb2xsaW5nRmFzdCAmJiB0aGlzLnBvbGwoKSkgeyB0aGlzLnBvbGxpbmdGYXN0ID0gZmFsc2U7IH1cbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5vbktleVByZXNzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgdGhpcy5oYXNTZWxlY3Rpb24gPSBudWxsOyB9XG4gICAgdGhpcy5mYXN0UG9sbCgpO1xuICB9O1xuXG4gIFRleHRhcmVhSW5wdXQucHJvdG90eXBlLm9uQ29udGV4dE1lbnUgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBpbnB1dCA9IHRoaXMsIGNtID0gaW5wdXQuY20sIGRpc3BsYXkgPSBjbS5kaXNwbGF5LCB0ZSA9IGlucHV0LnRleHRhcmVhO1xuICAgIGlmIChpbnB1dC5jb250ZXh0TWVudVBlbmRpbmcpIHsgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nKCk7IH1cbiAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGNtLCBlKSwgc2Nyb2xsUG9zID0gZGlzcGxheS5zY3JvbGxlci5zY3JvbGxUb3A7XG4gICAgaWYgKCFwb3MgfHwgcHJlc3RvKSB7IHJldHVybiB9IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC5cblxuICAgIC8vIFJlc2V0IHRoZSBjdXJyZW50IHRleHQgc2VsZWN0aW9uIG9ubHkgaWYgdGhlIGNsaWNrIGlzIGRvbmUgb3V0c2lkZSBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kICdyZXNldFNlbGVjdGlvbk9uQ29udGV4dE1lbnUnIG9wdGlvbiBpcyB0cnVlLlxuICAgIHZhciByZXNldCA9IGNtLm9wdGlvbnMucmVzZXRTZWxlY3Rpb25PbkNvbnRleHRNZW51O1xuICAgIGlmIChyZXNldCAmJiBjbS5kb2Muc2VsLmNvbnRhaW5zKHBvcykgPT0gLTEpXG4gICAgICB7IG9wZXJhdGlvbihjbSwgc2V0U2VsZWN0aW9uKShjbS5kb2MsIHNpbXBsZVNlbGVjdGlvbihwb3MpLCBzZWxfZG9udFNjcm9sbCk7IH1cblxuICAgIHZhciBvbGRDU1MgPSB0ZS5zdHlsZS5jc3NUZXh0LCBvbGRXcmFwcGVyQ1NTID0gaW5wdXQud3JhcHBlci5zdHlsZS5jc3NUZXh0O1xuICAgIHZhciB3cmFwcGVyQm94ID0gaW5wdXQud3JhcHBlci5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaW5wdXQud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjogc3RhdGljXCI7XG4gICAgdGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMzBweDsgaGVpZ2h0OiAzMHB4O1xcbiAgICAgIHRvcDogXCIgKyAoZS5jbGllbnRZIC0gd3JhcHBlckJveC50b3AgLSA1KSArIFwicHg7IGxlZnQ6IFwiICsgKGUuY2xpZW50WCAtIHdyYXBwZXJCb3gubGVmdCAtIDUpICsgXCJweDtcXG4gICAgICB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiBcIiArIChpZSA/IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAuMDUpXCIgOiBcInRyYW5zcGFyZW50XCIpICsgXCI7XFxuICAgICAgb3V0bGluZTogbm9uZTsgYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTtcIjtcbiAgICB2YXIgb2xkU2Nyb2xsWTtcbiAgICBpZiAod2Via2l0KSB7IG9sZFNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTsgfSAvLyBXb3JrIGFyb3VuZCBDaHJvbWUgaXNzdWUgKCMyNzEyKVxuICAgIGRpc3BsYXkuaW5wdXQuZm9jdXMoKTtcbiAgICBpZiAod2Via2l0KSB7IHdpbmRvdy5zY3JvbGxUbyhudWxsLCBvbGRTY3JvbGxZKTsgfVxuICAgIGRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAvLyBBZGRzIFwiU2VsZWN0IGFsbFwiIHRvIGNvbnRleHQgbWVudSBpbiBGRlxuICAgIGlmICghY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgeyB0ZS52YWx1ZSA9IGlucHV0LnByZXZJbnB1dCA9IFwiIFwiOyB9XG4gICAgaW5wdXQuY29udGV4dE1lbnVQZW5kaW5nID0gcmVoaWRlO1xuICAgIGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPSBjbS5kb2Muc2VsO1xuICAgIGNsZWFyVGltZW91dChkaXNwbGF5LmRldGVjdGluZ1NlbGVjdEFsbCk7XG5cbiAgICAvLyBTZWxlY3QtYWxsIHdpbGwgYmUgZ3JleWVkIG91dCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gc2VsZWN0LCBzb1xuICAgIC8vIHRoaXMgYWRkcyBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB3ZSBjYW4gbGF0ZXIgY2hlY2sgd2hldGhlclxuICAgIC8vIGl0IGdvdCBzZWxlY3RlZC5cbiAgICBmdW5jdGlvbiBwcmVwYXJlU2VsZWN0QWxsSGFjaygpIHtcbiAgICAgIGlmICh0ZS5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgICAgIHZhciBzZWxlY3RlZCA9IGNtLnNvbWV0aGluZ1NlbGVjdGVkKCk7XG4gICAgICAgIHZhciBleHR2YWwgPSBcIlxcdTIwMGJcIiArIChzZWxlY3RlZCA/IHRlLnZhbHVlIDogXCJcIik7XG4gICAgICAgIHRlLnZhbHVlID0gXCJcXHUyMWRhXCI7IC8vIFVzZWQgdG8gY2F0Y2ggY29udGV4dC1tZW51IHVuZG9cbiAgICAgICAgdGUudmFsdWUgPSBleHR2YWw7XG4gICAgICAgIGlucHV0LnByZXZJbnB1dCA9IHNlbGVjdGVkID8gXCJcIiA6IFwiXFx1MjAwYlwiO1xuICAgICAgICB0ZS5zZWxlY3Rpb25TdGFydCA9IDE7IHRlLnNlbGVjdGlvbkVuZCA9IGV4dHZhbC5sZW5ndGg7XG4gICAgICAgIC8vIFJlLXNldCB0aGlzLCBpbiBjYXNlIHNvbWUgb3RoZXIgaGFuZGxlciB0b3VjaGVkIHRoZVxuICAgICAgICAvLyBzZWxlY3Rpb24gaW4gdGhlIG1lYW50aW1lLlxuICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gY20uZG9jLnNlbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVoaWRlKCkge1xuICAgICAgaWYgKGlucHV0LmNvbnRleHRNZW51UGVuZGluZyAhPSByZWhpZGUpIHsgcmV0dXJuIH1cbiAgICAgIGlucHV0LmNvbnRleHRNZW51UGVuZGluZyA9IGZhbHNlO1xuICAgICAgaW5wdXQud3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gb2xkV3JhcHBlckNTUztcbiAgICAgIHRlLnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7XG4gICAgICBpZiAoaWUgJiYgaWVfdmVyc2lvbiA8IDkpIHsgZGlzcGxheS5zY3JvbGxiYXJzLnNldFNjcm9sbFRvcChkaXNwbGF5LnNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvcyk7IH1cblxuICAgICAgLy8gVHJ5IHRvIGRldGVjdCB0aGUgdXNlciBjaG9vc2luZyBzZWxlY3QtYWxsXG4gICAgICBpZiAodGUuc2VsZWN0aW9uU3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIWllIHx8IChpZSAmJiBpZV92ZXJzaW9uIDwgOSkpIHsgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsgfVxuICAgICAgICB2YXIgaSA9IDAsIHBvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGRpc3BsYXkuc2VsRm9yQ29udGV4dE1lbnUgPT0gY20uZG9jLnNlbCAmJiB0ZS5zZWxlY3Rpb25TdGFydCA9PSAwICYmXG4gICAgICAgICAgICAgIHRlLnNlbGVjdGlvbkVuZCA+IDAgJiYgaW5wdXQucHJldklucHV0ID09IFwiXFx1MjAwYlwiKSB7XG4gICAgICAgICAgICBvcGVyYXRpb24oY20sIHNlbGVjdEFsbCkoY20pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSsrIDwgMTApIHtcbiAgICAgICAgICAgIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCA1MDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaXNwbGF5LnNlbEZvckNvbnRleHRNZW51ID0gbnVsbDtcbiAgICAgICAgICAgIGRpc3BsYXkuaW5wdXQucmVzZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGRpc3BsYXkuZGV0ZWN0aW5nU2VsZWN0QWxsID0gc2V0VGltZW91dChwb2xsLCAyMDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpZSAmJiBpZV92ZXJzaW9uID49IDkpIHsgcHJlcGFyZVNlbGVjdEFsbEhhY2soKTsgfVxuICAgIGlmIChjYXB0dXJlUmlnaHRDbGljaykge1xuICAgICAgZV9zdG9wKGUpO1xuICAgICAgdmFyIG1vdXNldXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9mZih3aW5kb3csIFwibW91c2V1cFwiLCBtb3VzZXVwKTtcbiAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTtcbiAgICAgIH07XG4gICAgICBvbih3aW5kb3csIFwibW91c2V1cFwiLCBtb3VzZXVwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dChyZWhpZGUsIDUwKTtcbiAgICB9XG4gIH07XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUucmVhZE9ubHlDaGFuZ2VkID0gZnVuY3Rpb24gKHZhbCkge1xuICAgIGlmICghdmFsKSB7IHRoaXMucmVzZXQoKTsgfVxuICAgIHRoaXMudGV4dGFyZWEuZGlzYWJsZWQgPSB2YWwgPT0gXCJub2N1cnNvclwiO1xuICAgIHRoaXMudGV4dGFyZWEucmVhZE9ubHkgPSAhIXZhbDtcbiAgfTtcblxuICBUZXh0YXJlYUlucHV0LnByb3RvdHlwZS5zZXRVbmVkaXRhYmxlID0gZnVuY3Rpb24gKCkge307XG5cbiAgVGV4dGFyZWFJbnB1dC5wcm90b3R5cGUubmVlZHNDb250ZW50QXR0cmlidXRlID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZnJvbVRleHRBcmVhKHRleHRhcmVhLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgPyBjb3B5T2JqKG9wdGlvbnMpIDoge307XG4gICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZhbHVlO1xuICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJJbmRleClcbiAgICAgIHsgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYkluZGV4OyB9XG4gICAgaWYgKCFvcHRpb25zLnBsYWNlaG9sZGVyICYmIHRleHRhcmVhLnBsYWNlaG9sZGVyKVxuICAgICAgeyBvcHRpb25zLnBsYWNlaG9sZGVyID0gdGV4dGFyZWEucGxhY2Vob2xkZXI7IH1cbiAgICAvLyBTZXQgYXV0b2ZvY3VzIHRvIHRydWUgaWYgdGhpcyB0ZXh0YXJlYSBpcyBmb2N1c2VkLCBvciBpZiBpdCBoYXNcbiAgICAvLyBhdXRvZm9jdXMgYW5kIG5vIG90aGVyIGVsZW1lbnQgaXMgZm9jdXNlZC5cbiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCkge1xuICAgICAgdmFyIGhhc0ZvY3VzID0gYWN0aXZlRWx0KCk7XG4gICAgICBvcHRpb25zLmF1dG9mb2N1cyA9IGhhc0ZvY3VzID09IHRleHRhcmVhIHx8XG4gICAgICAgIHRleHRhcmVhLmdldEF0dHJpYnV0ZShcImF1dG9mb2N1c1wiKSAhPSBudWxsICYmIGhhc0ZvY3VzID09IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZSgpIHt0ZXh0YXJlYS52YWx1ZSA9IGNtLmdldFZhbHVlKCk7fVxuXG4gICAgdmFyIHJlYWxTdWJtaXQ7XG4gICAgaWYgKHRleHRhcmVhLmZvcm0pIHtcbiAgICAgIG9uKHRleHRhcmVhLmZvcm0sIFwic3VibWl0XCIsIHNhdmUpO1xuICAgICAgLy8gRGVwbG9yYWJsZSBoYWNrIHRvIG1ha2UgdGhlIHN1Ym1pdCBtZXRob2QgZG8gdGhlIHJpZ2h0IHRoaW5nLlxuICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUpIHtcbiAgICAgICAgdmFyIGZvcm0gPSB0ZXh0YXJlYS5mb3JtO1xuICAgICAgICByZWFsU3VibWl0ID0gZm9ybS5zdWJtaXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHdyYXBwZWRTdWJtaXQgPSBmb3JtLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNhdmUoKTtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDtcbiAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7XG4gICAgICAgICAgICBmb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMuZmluaXNoSW5pdCA9IGZ1bmN0aW9uIChjbSkge1xuICAgICAgY20uc2F2ZSA9IHNhdmU7XG4gICAgICBjbS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRleHRhcmVhOyB9O1xuICAgICAgY20udG9UZXh0QXJlYSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY20udG9UZXh0QXJlYSA9IGlzTmFOOyAvLyBQcmV2ZW50IHRoaXMgZnJvbSBiZWluZyByYW4gdHdpY2VcbiAgICAgICAgc2F2ZSgpO1xuICAgICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJFbGVtZW50KCkpO1xuICAgICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgICAgaWYgKHRleHRhcmVhLmZvcm0pIHtcbiAgICAgICAgICBvZmYodGV4dGFyZWEuZm9ybSwgXCJzdWJtaXRcIiwgc2F2ZSk7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLmxlYXZlU3VibWl0TWV0aG9kQWxvbmUgJiYgdHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHsgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OyB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcblxuICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICB2YXIgY20gPSBDb2RlTWlycm9yKGZ1bmN0aW9uIChub2RlKSB7IHJldHVybiB0ZXh0YXJlYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCB0ZXh0YXJlYS5uZXh0U2libGluZyk7IH0sXG4gICAgICBvcHRpb25zKTtcbiAgICByZXR1cm4gY21cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExlZ2FjeVByb3BzKENvZGVNaXJyb3IpIHtcbiAgICBDb2RlTWlycm9yLm9mZiA9IG9mZjtcbiAgICBDb2RlTWlycm9yLm9uID0gb247XG4gICAgQ29kZU1pcnJvci53aGVlbEV2ZW50UGl4ZWxzID0gd2hlZWxFdmVudFBpeGVscztcbiAgICBDb2RlTWlycm9yLkRvYyA9IERvYztcbiAgICBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSBzcGxpdExpbmVzQXV0bztcbiAgICBDb2RlTWlycm9yLmNvdW50Q29sdW1uID0gY291bnRDb2x1bW47XG4gICAgQ29kZU1pcnJvci5maW5kQ29sdW1uID0gZmluZENvbHVtbjtcbiAgICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBpc1dvcmRDaGFyQmFzaWM7XG4gICAgQ29kZU1pcnJvci5QYXNzID0gUGFzcztcbiAgICBDb2RlTWlycm9yLnNpZ25hbCA9IHNpZ25hbDtcbiAgICBDb2RlTWlycm9yLkxpbmUgPSBMaW5lO1xuICAgIENvZGVNaXJyb3IuY2hhbmdlRW5kID0gY2hhbmdlRW5kO1xuICAgIENvZGVNaXJyb3Iuc2Nyb2xsYmFyTW9kZWwgPSBzY3JvbGxiYXJNb2RlbDtcbiAgICBDb2RlTWlycm9yLlBvcyA9IFBvcztcbiAgICBDb2RlTWlycm9yLmNtcFBvcyA9IGNtcDtcbiAgICBDb2RlTWlycm9yLm1vZGVzID0gbW9kZXM7XG4gICAgQ29kZU1pcnJvci5taW1lTW9kZXMgPSBtaW1lTW9kZXM7XG4gICAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IHJlc29sdmVNb2RlO1xuICAgIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGdldE1vZGU7XG4gICAgQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9ucyA9IG1vZGVFeHRlbnNpb25zO1xuICAgIENvZGVNaXJyb3IuZXh0ZW5kTW9kZSA9IGV4dGVuZE1vZGU7XG4gICAgQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7XG4gICAgQ29kZU1pcnJvci5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTtcbiAgICBDb2RlTWlycm9yLmlubmVyTW9kZSA9IGlubmVyTW9kZTtcbiAgICBDb2RlTWlycm9yLmNvbW1hbmRzID0gY29tbWFuZHM7XG4gICAgQ29kZU1pcnJvci5rZXlNYXAgPSBrZXlNYXA7XG4gICAgQ29kZU1pcnJvci5rZXlOYW1lID0ga2V5TmFtZTtcbiAgICBDb2RlTWlycm9yLmlzTW9kaWZpZXJLZXkgPSBpc01vZGlmaWVyS2V5O1xuICAgIENvZGVNaXJyb3IubG9va3VwS2V5ID0gbG9va3VwS2V5O1xuICAgIENvZGVNaXJyb3Iubm9ybWFsaXplS2V5TWFwID0gbm9ybWFsaXplS2V5TWFwO1xuICAgIENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuICAgIENvZGVNaXJyb3IuU2hhcmVkVGV4dE1hcmtlciA9IFNoYXJlZFRleHRNYXJrZXI7XG4gICAgQ29kZU1pcnJvci5UZXh0TWFya2VyID0gVGV4dE1hcmtlcjtcbiAgICBDb2RlTWlycm9yLkxpbmVXaWRnZXQgPSBMaW5lV2lkZ2V0O1xuICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGVfcHJldmVudERlZmF1bHQ7XG4gICAgQ29kZU1pcnJvci5lX3N0b3BQcm9wYWdhdGlvbiA9IGVfc3RvcFByb3BhZ2F0aW9uO1xuICAgIENvZGVNaXJyb3IuZV9zdG9wID0gZV9zdG9wO1xuICAgIENvZGVNaXJyb3IuYWRkQ2xhc3MgPSBhZGRDbGFzcztcbiAgICBDb2RlTWlycm9yLmNvbnRhaW5zID0gY29udGFpbnM7XG4gICAgQ29kZU1pcnJvci5ybUNsYXNzID0gcm1DbGFzcztcbiAgICBDb2RlTWlycm9yLmtleU5hbWVzID0ga2V5TmFtZXM7XG4gIH1cblxuICAvLyBFRElUT1IgQ09OU1RSVUNUT1JcblxuICBkZWZpbmVPcHRpb25zKENvZGVNaXJyb3IpO1xuXG4gIGFkZEVkaXRvck1ldGhvZHMoQ29kZU1pcnJvcik7XG5cbiAgLy8gU2V0IHVwIG1ldGhvZHMgb24gQ29kZU1pcnJvcidzIHByb3RvdHlwZSB0byByZWRpcmVjdCB0byB0aGUgZWRpdG9yJ3MgZG9jdW1lbnQuXG4gIHZhciBkb250RGVsZWdhdGUgPSBcIml0ZXIgaW5zZXJ0IHJlbW92ZSBjb3B5IGdldEVkaXRvciBjb25zdHJ1Y3RvclwiLnNwbGl0KFwiIFwiKTtcbiAgZm9yICh2YXIgcHJvcCBpbiBEb2MucHJvdG90eXBlKSB7IGlmIChEb2MucHJvdG90eXBlLmhhc093blByb3BlcnR5KHByb3ApICYmIGluZGV4T2YoZG9udERlbGVnYXRlLCBwcm9wKSA8IDApXG4gICAgeyBDb2RlTWlycm9yLnByb3RvdHlwZVtwcm9wXSA9IChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtyZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMuZG9jLCBhcmd1bWVudHMpfVxuICAgIH0pKERvYy5wcm90b3R5cGVbcHJvcF0pOyB9IH1cblxuICBldmVudE1peGluKERvYyk7XG4gIENvZGVNaXJyb3IuaW5wdXRTdHlsZXMgPSB7XCJ0ZXh0YXJlYVwiOiBUZXh0YXJlYUlucHV0LCBcImNvbnRlbnRlZGl0YWJsZVwiOiBDb250ZW50RWRpdGFibGVJbnB1dH07XG5cbiAgLy8gRXh0cmEgYXJndW1lbnRzIGFyZSBzdG9yZWQgYXMgdGhlIG1vZGUncyBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzXG4gIC8vIHVzZWQgYnkgKGxlZ2FjeSkgbWVjaGFuaXNtcyBsaWtlIGxvYWRtb2RlLmpzIHRvIGF1dG9tYXRpY2FsbHlcbiAgLy8gbG9hZCBhIG1vZGUuIChQcmVmZXJyZWQgbWVjaGFuaXNtIGlzIHRoZSByZXF1aXJlL2RlZmluZSBjYWxscy4pXG4gIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUvKiwgbW9kZSwg4oCmKi8pIHtcbiAgICBpZiAoIUNvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSAmJiBuYW1lICE9IFwibnVsbFwiKSB7IENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7IH1cbiAgICBkZWZpbmVNb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FID0gZGVmaW5lTUlNRTtcblxuICAvLyBNaW5pbWFsIGRlZmF1bHQgbW9kZS5cbiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKFwibnVsbFwiLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoe3Rva2VuOiBmdW5jdGlvbiAoc3RyZWFtKSB7IHJldHVybiBzdHJlYW0uc2tpcFRvRW5kKCk7IH19KTsgfSk7XG4gIENvZGVNaXJyb3IuZGVmaW5lTUlNRShcInRleHQvcGxhaW5cIiwgXCJudWxsXCIpO1xuXG4gIC8vIEVYVEVOU0lPTlNcblxuICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmdW5jO1xuICB9O1xuICBDb2RlTWlycm9yLmRlZmluZURvY0V4dGVuc2lvbiA9IGZ1bmN0aW9uIChuYW1lLCBmdW5jKSB7XG4gICAgRG9jLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmM7XG4gIH07XG5cbiAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmcm9tVGV4dEFyZWE7XG5cbiAgYWRkTGVnYWN5UHJvcHMoQ29kZU1pcnJvcik7XG5cbiAgQ29kZU1pcnJvci52ZXJzaW9uID0gXCI1LjU4LjJcIjtcblxuICByZXR1cm4gQ29kZU1pcnJvcjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/codemirror/lib/codemirror.js\n"); @@ -367,7 +363,6 @@ eval("// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distribute \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__, __webpack_exports__, module */ -/*! CommonJS bailout: this is used directly at 172:35-39 */ /***/ (function(module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*\r\n * Cookies.js - 1.2.3\r\n * https://github.com/ScottHamper/Cookies\r\n *\r\n * This is free and unencumbered software released into the public domain.\r\n */\r\n(function (global, undefined) {\r\n 'use strict';\r\n\r\n var factory = function (window) {\r\n if (typeof window.document !== 'object') {\r\n throw new Error('Cookies.js requires a `window` with a `document` object');\r\n }\r\n\r\n var Cookies = function (key, value, options) {\r\n return arguments.length === 1 ?\r\n Cookies.get(key) : Cookies.set(key, value, options);\r\n };\r\n\r\n // Allows for setter injection in unit tests\r\n Cookies._document = window.document;\r\n\r\n // Used to ensure cookie keys do not collide with\r\n // built-in `Object` properties\r\n Cookies._cacheKeyPrefix = 'cookey.'; // Hurr hurr, :)\r\n \r\n Cookies._maxExpireDate = new Date('Fri, 31 Dec 9999 23:59:59 UTC');\r\n\r\n Cookies.defaults = {\r\n path: '/',\r\n secure: false\r\n };\r\n\r\n Cookies.get = function (key) {\r\n if (Cookies._cachedDocumentCookie !== Cookies._document.cookie) {\r\n Cookies._renewCache();\r\n }\r\n \r\n var value = Cookies._cache[Cookies._cacheKeyPrefix + key];\r\n\r\n return value === undefined ? undefined : decodeURIComponent(value);\r\n };\r\n\r\n Cookies.set = function (key, value, options) {\r\n options = Cookies._getExtendedOptions(options);\r\n options.expires = Cookies._getExpiresDate(value === undefined ? -1 : options.expires);\r\n\r\n Cookies._document.cookie = Cookies._generateCookieString(key, value, options);\r\n\r\n return Cookies;\r\n };\r\n\r\n Cookies.expire = function (key, options) {\r\n return Cookies.set(key, undefined, options);\r\n };\r\n\r\n Cookies._getExtendedOptions = function (options) {\r\n return {\r\n path: options && options.path || Cookies.defaults.path,\r\n domain: options && options.domain || Cookies.defaults.domain,\r\n expires: options && options.expires || Cookies.defaults.expires,\r\n secure: options && options.secure !== undefined ? options.secure : Cookies.defaults.secure\r\n };\r\n };\r\n\r\n Cookies._isValidDate = function (date) {\r\n return Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime());\r\n };\r\n\r\n Cookies._getExpiresDate = function (expires, now) {\r\n now = now || new Date();\r\n\r\n if (typeof expires === 'number') {\r\n expires = expires === Infinity ?\r\n Cookies._maxExpireDate : new Date(now.getTime() + expires * 1000);\r\n } else if (typeof expires === 'string') {\r\n expires = new Date(expires);\r\n }\r\n\r\n if (expires && !Cookies._isValidDate(expires)) {\r\n throw new Error('`expires` parameter cannot be converted to a valid Date instance');\r\n }\r\n\r\n return expires;\r\n };\r\n\r\n Cookies._generateCookieString = function (key, value, options) {\r\n key = key.replace(/[^#$&+\\^`|]/g, encodeURIComponent);\r\n key = key.replace(/\\(/g, '%28').replace(/\\)/g, '%29');\r\n value = (value + '').replace(/[^!#$&-+\\--:<-\\[\\]-~]/g, encodeURIComponent);\r\n options = options || {};\r\n\r\n var cookieString = key + '=' + value;\r\n cookieString += options.path ? ';path=' + options.path : '';\r\n cookieString += options.domain ? ';domain=' + options.domain : '';\r\n cookieString += options.expires ? ';expires=' + options.expires.toUTCString() : '';\r\n cookieString += options.secure ? ';secure' : '';\r\n\r\n return cookieString;\r\n };\r\n\r\n Cookies._getCacheFromString = function (documentCookie) {\r\n var cookieCache = {};\r\n var cookiesArray = documentCookie ? documentCookie.split('; ') : [];\r\n\r\n for (var i = 0; i < cookiesArray.length; i++) {\r\n var cookieKvp = Cookies._getKeyValuePairFromCookieString(cookiesArray[i]);\r\n\r\n if (cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] === undefined) {\r\n cookieCache[Cookies._cacheKeyPrefix + cookieKvp.key] = cookieKvp.value;\r\n }\r\n }\r\n\r\n return cookieCache;\r\n };\r\n\r\n Cookies._getKeyValuePairFromCookieString = function (cookieString) {\r\n // \"=\" is a valid character in a cookie value according to RFC6265, so cannot `split('=')`\r\n var separatorIndex = cookieString.indexOf('=');\r\n\r\n // IE omits the \"=\" when the cookie value is an empty string\r\n separatorIndex = separatorIndex < 0 ? cookieString.length : separatorIndex;\r\n\r\n var key = cookieString.substr(0, separatorIndex);\r\n var decodedKey;\r\n try {\r\n decodedKey = decodeURIComponent(key);\r\n } catch (e) {\r\n if (console && typeof console.error === 'function') {\r\n console.error('Could not decode cookie with key \"' + key + '\"', e);\r\n }\r\n }\r\n \r\n return {\r\n key: decodedKey,\r\n value: cookieString.substr(separatorIndex + 1) // Defer decoding value until accessed\r\n };\r\n };\r\n\r\n Cookies._renewCache = function () {\r\n Cookies._cache = Cookies._getCacheFromString(Cookies._document.cookie);\r\n Cookies._cachedDocumentCookie = Cookies._document.cookie;\r\n };\r\n\r\n Cookies._areEnabled = function () {\r\n var testKey = 'cookies.js';\r\n var areEnabled = Cookies.set(testKey, 1).get(testKey) === '1';\r\n Cookies.expire(testKey);\r\n return areEnabled;\r\n };\r\n\r\n Cookies.enabled = Cookies._areEnabled();\r\n\r\n return Cookies;\r\n };\r\n var cookiesExport = (global && typeof global.document === 'object') ? factory(global) : factory;\r\n\r\n // AMD support\r\n if (true) {\r\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { return cookiesExport; }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n // CommonJS/Node.js support\r\n } else {}\r\n})(typeof window === 'undefined' ? this : window);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2Nvb2tpZXMtanMvZGlzdC9jb29raWVzLmpzPzFlOWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsZ0RBQWdEO0FBQ2hELCtDQUErQzs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUVBQXVFOztBQUV2RSwyQkFBMkIseUJBQXlCO0FBQ3BEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxJQUEwQztBQUNsRCxRQUFRLG1DQUFPLGFBQWEsc0JBQXNCLEVBQUU7QUFBQSxrR0FBQztBQUNyRDtBQUNBLEtBQUssTUFBTSxFQVNOO0FBQ0wsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb29raWVzLWpzL2Rpc3QvY29va2llcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvb2tpZXMuanMgLSAxLjIuM1xyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vU2NvdHRIYW1wZXIvQ29va2llc1xyXG4gKlxyXG4gKiBUaGlzIGlzIGZyZWUgYW5kIHVuZW5jdW1iZXJlZCBzb2Z0d2FyZSByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLlxyXG4gKi9cclxuKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xyXG4gICAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuICAgIHZhciBmYWN0b3J5ID0gZnVuY3Rpb24gKHdpbmRvdykge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nvb2tpZXMuanMgcmVxdWlyZXMgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YCBvYmplY3QnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBDb29raWVzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xyXG4gICAgICAgICAgICAgICAgQ29va2llcy5nZXQoa2V5KSA6IENvb2tpZXMuc2V0KGtleSwgdmFsdWUsIG9wdGlvbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIEFsbG93cyBmb3Igc2V0dGVyIGluamVjdGlvbiBpbiB1bml0IHRlc3RzXHJcbiAgICAgICAgQ29va2llcy5fZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XHJcblxyXG4gICAgICAgIC8vIFVzZWQgdG8gZW5zdXJlIGNvb2tpZSBrZXlzIGRvIG5vdCBjb2xsaWRlIHdpdGhcclxuICAgICAgICAvLyBidWlsdC1pbiBgT2JqZWN0YCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgQ29va2llcy5fY2FjaGVLZXlQcmVmaXggPSAnY29va2V5Lic7IC8vIEh1cnIgaHVyciwgOilcclxuICAgICAgICBcclxuICAgICAgICBDb29raWVzLl9tYXhFeHBpcmVEYXRlID0gbmV3IERhdGUoJ0ZyaSwgMzEgRGVjIDk5OTkgMjM6NTk6NTkgVVRDJyk7XHJcblxyXG4gICAgICAgIENvb2tpZXMuZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgICAgICAgc2VjdXJlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIENvb2tpZXMuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICBpZiAoQ29va2llcy5fY2FjaGVkRG9jdW1lbnRDb29raWUgIT09IENvb2tpZXMuX2RvY3VtZW50LmNvb2tpZSkge1xyXG4gICAgICAgICAgICAgICAgQ29va2llcy5fcmVuZXdDYWNoZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBDb29raWVzLl9jYWNoZVtDb29raWVzLl9jYWNoZUtleVByZWZpeCArIGtleV07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgQ29va2llcy5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICBvcHRpb25zID0gQ29va2llcy5fZ2V0RXh0ZW5kZWRPcHRpb25zKG9wdGlvbnMpO1xyXG4gICAgICAgICAgICBvcHRpb25zLmV4cGlyZXMgPSBDb29raWVzLl9nZXRFeHBpcmVzRGF0ZSh2YWx1ZSA9PT0gdW5kZWZpbmVkID8gLTEgOiBvcHRpb25zLmV4cGlyZXMpO1xyXG5cclxuICAgICAgICAgICAgQ29va2llcy5fZG9jdW1lbnQuY29va2llID0gQ29va2llcy5fZ2VuZXJhdGVDb29raWVTdHJpbmcoa2V5LCB2YWx1ZSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gQ29va2llcztcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBDb29raWVzLmV4cGlyZSA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvb2tpZXMuc2V0KGtleSwgdW5kZWZpbmVkLCBvcHRpb25zKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBDb29raWVzLl9nZXRFeHRlbmRlZE9wdGlvbnMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgcGF0aDogb3B0aW9ucyAmJiBvcHRpb25zLnBhdGggfHwgQ29va2llcy5kZWZhdWx0cy5wYXRoLFxyXG4gICAgICAgICAgICAgICAgZG9tYWluOiBvcHRpb25zICYmIG9wdGlvbnMuZG9tYWluIHx8IENvb2tpZXMuZGVmYXVsdHMuZG9tYWluLFxyXG4gICAgICAgICAgICAgICAgZXhwaXJlczogb3B0aW9ucyAmJiBvcHRpb25zLmV4cGlyZXMgfHwgQ29va2llcy5kZWZhdWx0cy5leHBpcmVzLFxyXG4gICAgICAgICAgICAgICAgc2VjdXJlOiBvcHRpb25zICYmIG9wdGlvbnMuc2VjdXJlICE9PSB1bmRlZmluZWQgPyAgb3B0aW9ucy5zZWN1cmUgOiBDb29raWVzLmRlZmF1bHRzLnNlY3VyZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIENvb2tpZXMuX2lzVmFsaWREYXRlID0gZnVuY3Rpb24gKGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRlKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgQ29va2llcy5fZ2V0RXhwaXJlc0RhdGUgPSBmdW5jdGlvbiAoZXhwaXJlcywgbm93KSB7XHJcbiAgICAgICAgICAgIG5vdyA9IG5vdyB8fCBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgZXhwaXJlcyA9IGV4cGlyZXMgPT09IEluZmluaXR5ID9cclxuICAgICAgICAgICAgICAgICAgICBDb29raWVzLl9tYXhFeHBpcmVEYXRlIDogbmV3IERhdGUobm93LmdldFRpbWUoKSArIGV4cGlyZXMgKiAxMDAwKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwaXJlcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIGV4cGlyZXMgPSBuZXcgRGF0ZShleHBpcmVzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV4cGlyZXMgJiYgIUNvb2tpZXMuX2lzVmFsaWREYXRlKGV4cGlyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHBpcmVzYCBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIHZhbGlkIERhdGUgaW5zdGFuY2UnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXM7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgQ29va2llcy5fZ2VuZXJhdGVDb29raWVTdHJpbmcgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgvW14jJCYrXFxeYHxdL2csIGVuY29kZVVSSUNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKC9cXCgvZywgJyUyOCcpLnJlcGxhY2UoL1xcKS9nLCAnJTI5Jyk7XHJcbiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlICsgJycpLnJlcGxhY2UoL1teISMkJi0rXFwtLTo8LVxcW1xcXS1+XS9nLCBlbmNvZGVVUklDb21wb25lbnQpO1xyXG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjb29raWVTdHJpbmcgPSBrZXkgKyAnPScgKyB2YWx1ZTtcclxuICAgICAgICAgICAgY29va2llU3RyaW5nICs9IG9wdGlvbnMucGF0aCA/ICc7cGF0aD0nICsgb3B0aW9ucy5wYXRoIDogJyc7XHJcbiAgICAgICAgICAgIGNvb2tpZVN0cmluZyArPSBvcHRpb25zLmRvbWFpbiA/ICc7ZG9tYWluPScgKyBvcHRpb25zLmRvbWFpbiA6ICcnO1xyXG4gICAgICAgICAgICBjb29raWVTdHJpbmcgKz0gb3B0aW9ucy5leHBpcmVzID8gJztleHBpcmVzPScgKyBvcHRpb25zLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnO1xyXG4gICAgICAgICAgICBjb29raWVTdHJpbmcgKz0gb3B0aW9ucy5zZWN1cmUgPyAnO3NlY3VyZScgOiAnJztcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb29raWVTdHJpbmc7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgQ29va2llcy5fZ2V0Q2FjaGVGcm9tU3RyaW5nID0gZnVuY3Rpb24gKGRvY3VtZW50Q29va2llKSB7XHJcbiAgICAgICAgICAgIHZhciBjb29raWVDYWNoZSA9IHt9O1xyXG4gICAgICAgICAgICB2YXIgY29va2llc0FycmF5ID0gZG9jdW1lbnRDb29raWUgPyBkb2N1bWVudENvb2tpZS5zcGxpdCgnOyAnKSA6IFtdO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVzQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBjb29raWVLdnAgPSBDb29raWVzLl9nZXRLZXlWYWx1ZVBhaXJGcm9tQ29va2llU3RyaW5nKGNvb2tpZXNBcnJheVtpXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNvb2tpZUNhY2hlW0Nvb2tpZXMuX2NhY2hlS2V5UHJlZml4ICsgY29va2llS3ZwLmtleV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZUNhY2hlW0Nvb2tpZXMuX2NhY2hlS2V5UHJlZml4ICsgY29va2llS3ZwLmtleV0gPSBjb29raWVLdnAudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBjb29raWVDYWNoZTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBDb29raWVzLl9nZXRLZXlWYWx1ZVBhaXJGcm9tQ29va2llU3RyaW5nID0gZnVuY3Rpb24gKGNvb2tpZVN0cmluZykge1xyXG4gICAgICAgICAgICAvLyBcIj1cIiBpcyBhIHZhbGlkIGNoYXJhY3RlciBpbiBhIGNvb2tpZSB2YWx1ZSBhY2NvcmRpbmcgdG8gUkZDNjI2NSwgc28gY2Fubm90IGBzcGxpdCgnPScpYFxyXG4gICAgICAgICAgICB2YXIgc2VwYXJhdG9ySW5kZXggPSBjb29raWVTdHJpbmcuaW5kZXhPZignPScpO1xyXG5cclxuICAgICAgICAgICAgLy8gSUUgb21pdHMgdGhlIFwiPVwiIHdoZW4gdGhlIGNvb2tpZSB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmdcclxuICAgICAgICAgICAgc2VwYXJhdG9ySW5kZXggPSBzZXBhcmF0b3JJbmRleCA8IDAgPyBjb29raWVTdHJpbmcubGVuZ3RoIDogc2VwYXJhdG9ySW5kZXg7XHJcblxyXG4gICAgICAgICAgICB2YXIga2V5ID0gY29va2llU3RyaW5nLnN1YnN0cigwLCBzZXBhcmF0b3JJbmRleCk7XHJcbiAgICAgICAgICAgIHZhciBkZWNvZGVkS2V5O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgZGVjb2RlZEtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uc29sZSAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NvdWxkIG5vdCBkZWNvZGUgY29va2llIHdpdGgga2V5IFwiJyArIGtleSArICdcIicsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAga2V5OiBkZWNvZGVkS2V5LFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvb2tpZVN0cmluZy5zdWJzdHIoc2VwYXJhdG9ySW5kZXggKyAxKSAvLyBEZWZlciBkZWNvZGluZyB2YWx1ZSB1bnRpbCBhY2Nlc3NlZFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIENvb2tpZXMuX3JlbmV3Q2FjaGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIENvb2tpZXMuX2NhY2hlID0gQ29va2llcy5fZ2V0Q2FjaGVGcm9tU3RyaW5nKENvb2tpZXMuX2RvY3VtZW50LmNvb2tpZSk7XHJcbiAgICAgICAgICAgIENvb2tpZXMuX2NhY2hlZERvY3VtZW50Q29va2llID0gQ29va2llcy5fZG9jdW1lbnQuY29va2llO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIENvb2tpZXMuX2FyZUVuYWJsZWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZXN0S2V5ID0gJ2Nvb2tpZXMuanMnO1xyXG4gICAgICAgICAgICB2YXIgYXJlRW5hYmxlZCA9IENvb2tpZXMuc2V0KHRlc3RLZXksIDEpLmdldCh0ZXN0S2V5KSA9PT0gJzEnO1xyXG4gICAgICAgICAgICBDb29raWVzLmV4cGlyZSh0ZXN0S2V5KTtcclxuICAgICAgICAgICAgcmV0dXJuIGFyZUVuYWJsZWQ7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgQ29va2llcy5lbmFibGVkID0gQ29va2llcy5fYXJlRW5hYmxlZCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gQ29va2llcztcclxuICAgIH07XHJcbiAgICB2YXIgY29va2llc0V4cG9ydCA9IChnbG9iYWwgJiYgdHlwZW9mIGdsb2JhbC5kb2N1bWVudCA9PT0gJ29iamVjdCcpID8gZmFjdG9yeShnbG9iYWwpIDogZmFjdG9yeTtcclxuXHJcbiAgICAvLyBBTUQgc3VwcG9ydFxyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShmdW5jdGlvbiAoKSB7IHJldHVybiBjb29raWVzRXhwb3J0OyB9KTtcclxuICAgIC8vIENvbW1vbkpTL05vZGUuanMgc3VwcG9ydFxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAvLyBTdXBwb3J0IE5vZGUuanMgc3BlY2lmaWMgYG1vZHVsZS5leHBvcnRzYCAod2hpY2ggY2FuIGJlIGEgZnVuY3Rpb24pXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gY29va2llc0V4cG9ydDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQnV0IGFsd2F5cyBzdXBwb3J0IENvbW1vbkpTIG1vZHVsZSAxLjEuMSBzcGVjIChgZXhwb3J0c2AgY2Fubm90IGJlIGEgZnVuY3Rpb24pXHJcbiAgICAgICAgZXhwb3J0cy5Db29raWVzID0gY29va2llc0V4cG9ydDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZ2xvYmFsLkNvb2tpZXMgPSBjb29raWVzRXhwb3J0O1xyXG4gICAgfVxyXG59KSh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IHRoaXMgOiB3aW5kb3cpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/cookies-js/dist/cookies.js\n"); @@ -524,7 +519,6 @@ eval("__webpack_require__(/*! ../../modules/es7.string.trim-left */ \"./node_mod \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("__webpack_require__(/*! ../../modules/es7.symbol.async-iterator */ \"./node_modules/core-js/modules/es7.symbol.async-iterator.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_wks-ext */ \"./node_modules/core-js/modules/_wks-ext.js\").f('asyncIterator');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vc3ltYm9sL2FzeW5jLWl0ZXJhdG9yLmpzP2MwM2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQU8sQ0FBQyw0R0FBeUM7QUFDakQsaUJBQWlCLGlHQUFtQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3N5bWJvbC9hc3luYy1pdGVyYXRvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL193a3MtZXh0JykuZignYXN5bmNJdGVyYXRvcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/fn/symbol/async-iterator.js\n"); @@ -550,7 +544,6 @@ eval("__webpack_require__(/*! ../modules/es7.global */ \"./node_modules/core-js/ \*************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzPzc5YWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_a-function.js\n"); @@ -563,7 +556,6 @@ eval("module.exports = function (it) {\n if (typeof it != 'function') throw Typ \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanM/ZTRhZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsMEVBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FuLW9iamVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_an-object.js\n"); @@ -576,7 +568,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:11-25 */ /***/ ((module) => { eval("var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzPzU4NGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkJBQTZCO0FBQzdCLHVDQUF1QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTEnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_core.js\n"); @@ -589,7 +580,6 @@ eval("var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'num \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/library/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanM/ZDg2NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLDRFQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY3R4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_ctx.js\n"); @@ -602,7 +592,6 @@ eval("// optional / simple context binding\nvar aFunction = __webpack_require__( \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcz84ZTYwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0Esa0JBQWtCLG1CQUFPLENBQUMsa0VBQVU7QUFDcEMsaUNBQWlDLFFBQVEsbUJBQW1CLFVBQVUsRUFBRSxFQUFFO0FBQzFFLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_descriptors.js\n"); @@ -615,7 +604,6 @@ eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_r \*************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzPzFlYzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDBFQUFjO0FBQ3JDLGVBQWUsa0dBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_dom-create.js\n"); @@ -628,7 +616,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 62:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/library/modules/_ctx.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanM/NjNiNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsb0VBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLGdFQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyw4REFBUTtBQUMxQixXQUFXLG1CQUFPLENBQUMsZ0VBQVM7QUFDNUIsVUFBVSxtQkFBTyxDQUFDLDhEQUFRO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFO0FBQ2pFO0FBQ0Esa0ZBQWtGO0FBQ2xGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGdCQUFnQjtBQUNoQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_export.js\n"); @@ -641,7 +628,6 @@ eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qcz8yOTRjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_fails.js\n"); @@ -654,7 +640,6 @@ eval("module.exports = function (exec) {\n try {\n return !!exec();\n } cat \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:13-27 */ /***/ ((module) => { eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanM/ZTUzZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_global.js\n"); @@ -667,7 +652,6 @@ eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nv \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanM/MDdlMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_has.js\n"); @@ -680,7 +664,6 @@ eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, ke \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/library/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzPzM1ZTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxtQkFBTyxDQUFDLDBFQUFjO0FBQy9CLGlCQUFpQixtQkFBTyxDQUFDLGtGQUFrQjtBQUMzQyxpQkFBaUIsbUJBQU8sQ0FBQyw4RUFBZ0I7QUFDekM7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_hide.js\n"); @@ -693,7 +676,6 @@ eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/ \*****************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/library/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcz83OTRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtCQUFrQixtQkFBTyxDQUFDLDhFQUFnQixNQUFNLG1CQUFPLENBQUMsa0VBQVU7QUFDbEUsK0JBQStCLG1CQUFPLENBQUMsNEVBQWUsZ0JBQWdCLG1CQUFtQixVQUFVLEVBQUUsRUFBRTtBQUN2RyxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_ie8-dom-define.js\n"); @@ -706,7 +688,6 @@ eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modul \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanM/Zjc3MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_is-object.js\n"); @@ -733,7 +714,6 @@ eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/co \****************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzP2FlYmQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_property-desc.js\n"); @@ -746,7 +726,6 @@ eval("module.exports = function (bitmap, value) {\n return {\n enumerable: ! \***************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanM/MWJjMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQywwRUFBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/library/modules/_to-primitive.js\n"); @@ -771,7 +750,6 @@ eval("// https://github.com/tc39/proposal-global\nvar $export = __webpack_requir \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcz9kOGU4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_a-function.js\n"); @@ -784,7 +762,6 @@ eval("module.exports = function (it) {\n if (typeof it != 'function') throw Typ \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanM/YmVmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_a-number-value.js\n"); @@ -797,7 +774,6 @@ eval("var cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modul \*************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzPzljNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQyxzREFBUTtBQUNsQztBQUNBLDBDQUEwQyxtQkFBTyxDQUFDLHdEQUFTLDZCQUE2QjtBQUN4RjtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_add-to-unscopables.js\n"); @@ -810,7 +786,6 @@ eval("// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_r \***************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -824,7 +799,6 @@ eval("\nvar at = __webpack_require__(/*! ./_string-at */ \"./node_modules/core-j \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanM/ZjYwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_an-instance.js\n"); @@ -837,7 +811,6 @@ eval("module.exports = function (it, Constructor, name, forbiddenField) {\n if \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzP2NiN2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_an-object.js\n"); @@ -850,7 +823,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -864,7 +836,6 @@ eval("// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -878,7 +849,6 @@ eval("// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nv \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanM/YzM2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLHNCQUFzQixtQkFBTyxDQUFDLGtGQUFzQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWSxlQUFlO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-includes.js\n"); @@ -891,7 +861,6 @@ eval("// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __w \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 13:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar asc = __webpack_require__(/*! ./_array-species-create */ \"./node_modules/core-js/modules/_array-species-create.js\");\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcz8wYTQ5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyx3RkFBeUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGVBQWU7QUFDekI7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0EsOEJBQThCO0FBQzlCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLFNBQVMsaUNBQWlDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-methods.js\n"); @@ -904,7 +873,6 @@ eval("// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Ar \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzPzdiMjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQWU7QUFDdkMsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQyxlQUFlLG1CQUFPLENBQUMsa0VBQWM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzQ0FBc0M7QUFDOUM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-reduce.js\n"); @@ -917,7 +885,6 @@ eval("var aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/ \********************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar isArray = __webpack_require__(/*! ./_is-array */ \"./node_modules/core-js/modules/_is-array.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lODUzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxjQUFjLG1CQUFPLENBQUMsZ0VBQWE7QUFDbkMsY0FBYyxtQkFBTyxDQUFDLHNEQUFROztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-species-constructor.js\n"); @@ -930,7 +897,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \***************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(/*! ./_array-species-constructor */ \"./node_modules/core-js/modules/_array-species-constructor.js\");\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanM/Y2QxYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLHlCQUF5QixtQkFBTyxDQUFDLGtHQUE4Qjs7QUFFL0Q7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jcmVhdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_array-species-create.js\n"); @@ -943,7 +909,6 @@ eval("// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstruct \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 16:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -957,7 +922,6 @@ eval("\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_module \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 14:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcz8yM2M2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQjtBQUNBLDJCQUEyQixrQkFBa0IsRUFBRTs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLFlBQVk7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_classof.js\n"); @@ -970,7 +934,6 @@ eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webp \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzPzJkOTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_cof.js\n"); @@ -983,7 +946,6 @@ eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n return \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 27:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -997,7 +959,6 @@ eval("\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-j \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 49:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1011,7 +972,6 @@ eval("\nvar redefineAll = __webpack_require__(/*! ./_redefine-all */ \"./node_mo \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 15:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1025,7 +985,6 @@ eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core- \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:11-25 */ /***/ ((module) => { eval("var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcz84Mzc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3Qix1Q0FBdUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_core.js\n"); @@ -1038,7 +997,6 @@ eval("var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'num \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1052,7 +1010,6 @@ eval("\nvar $defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_m \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzPzliNDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_ctx.js\n"); @@ -1065,7 +1022,6 @@ eval("// optional / simple context binding\nvar aFunction = __webpack_require__( \*************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 12:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1079,7 +1035,6 @@ eval("\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = __web \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1093,7 +1048,6 @@ eval("\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/ \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcz9iZTEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_defined.js\n"); @@ -1106,7 +1060,6 @@ eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanM/OWUxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGtCQUFrQixtQkFBTyxDQUFDLDBEQUFVO0FBQ3BDLGlDQUFpQyxRQUFRLG1CQUFtQixVQUFVLEVBQUUsRUFBRTtBQUMxRSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_descriptors.js\n"); @@ -1119,7 +1072,6 @@ eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_r \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcz8yMzBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxlQUFlLDBGQUE2QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_dom-create.js\n"); @@ -1132,7 +1084,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcz9lMTFlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_enum-bug-keys.js\n"); @@ -1145,7 +1096,6 @@ eval("// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnPro \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\");\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzP2Q0YzAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsc0VBQWdCO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDbkMsVUFBVSxtQkFBTyxDQUFDLG9FQUFlO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_enum-keys.js\n"); @@ -1158,7 +1108,6 @@ eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_r \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 43:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzPzVjYTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLFdBQVcsbUJBQU8sQ0FBQyx3REFBUztBQUM1QixXQUFXLG1CQUFPLENBQUMsd0RBQVM7QUFDNUIsZUFBZSxtQkFBTyxDQUFDLGdFQUFhO0FBQ3BDLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRkFBa0YsdUJBQXVCO0FBQ3pHLGlFQUFpRTtBQUNqRSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLGdCQUFnQjtBQUNoQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_export.js\n"); @@ -1171,7 +1120,6 @@ eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzPzUxNDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLHNEQUFRO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUssWUFBWTtBQUNqQixHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fails-is-regexp.js\n"); @@ -1184,7 +1132,6 @@ eval("var MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/mod \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanM/NzllNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_fails.js\n"); @@ -1197,7 +1144,6 @@ eval("module.exports = function (exec) {\n try {\n return !!exec();\n } cat \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 34:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1211,7 +1157,6 @@ eval("\n__webpack_require__(/*! ./es6.regexp.exec */ \"./node_modules/core-js/mo \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1225,7 +1170,6 @@ eval("\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require \*************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 39:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1239,7 +1183,6 @@ eval("\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar is \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 9:14-28 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/core-js/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/core-js/modules/_is-array-iter.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/core-js/modules/core.get-iterator-method.js\");\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzPzRhNTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLFdBQVcsbUJBQU8sQ0FBQyxrRUFBYztBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQywwRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyw4RkFBNEI7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQixFQUFFO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUsZ0JBQWdCO0FBQ25GO0FBQ0E7QUFDQSxHQUFHLDRDQUE0QyxnQ0FBZ0M7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_for-of.js\n"); @@ -1252,7 +1195,6 @@ eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modul \*************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("module.exports = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('native-function-to-string', Function.toString);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzP2ZhNWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUJBQWlCLG1CQUFPLENBQUMsNERBQVciLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_function-to-string.js\n"); @@ -1265,7 +1207,6 @@ eval("module.exports = __webpack_require__(/*! ./_shared */ \"./node_modules/cor \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:13-27 */ /***/ ((module) => { eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzPzc3MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2dsb2JhbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_global.js\n"); @@ -1278,7 +1219,6 @@ eval("// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nv \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzPzY5YTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_has.js\n"); @@ -1291,7 +1231,6 @@ eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, ke \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcz8zMmU5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxrRUFBYztBQUMvQixpQkFBaUIsbUJBQU8sQ0FBQywwRUFBa0I7QUFDM0MsaUJBQWlCLG1CQUFPLENBQUMsc0VBQWdCO0FBQ3pDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hpZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_hide.js\n"); @@ -1304,7 +1243,6 @@ eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/ \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").document;\nmodule.exports = document && document.documentElement;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcz9mYWIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsMEZBQTZCO0FBQzVDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_html.js\n"); @@ -1317,7 +1255,6 @@ eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/core- \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanM/YzY5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsbUJBQU8sQ0FBQyxzRUFBZ0IsTUFBTSxtQkFBTyxDQUFDLDBEQUFVO0FBQ2xFLCtCQUErQixtQkFBTyxDQUFDLG9FQUFlLGdCQUFnQixtQkFBbUIsVUFBVSxFQUFFLEVBQUU7QUFDdkcsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_ie8-dom-define.js\n"); @@ -1330,7 +1267,6 @@ eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modul \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar setPrototypeOf = __webpack_require__(/*! ./_set-proto */ \"./node_modules/core-js/modules/_set-proto.js\").set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcz81ZGJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxxQkFBcUIsMkZBQTJCO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_inherit-if-required.js\n"); @@ -1343,7 +1279,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW52b2tlLmpzPzMxZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_invoke.js\n"); @@ -1356,7 +1291,6 @@ eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = func \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcz82MjZhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iobject.js\n"); @@ -1369,7 +1303,6 @@ eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcz8zM2E0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQWM7QUFDdEMsZUFBZSxtQkFBTyxDQUFDLHNEQUFRO0FBQy9COztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-array-iter.js\n"); @@ -1382,7 +1315,6 @@ eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/* \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanM/MTE2OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQjtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-array.js\n"); @@ -1395,7 +1327,6 @@ eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(/*! ./_cof */ \" \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcz85YzEyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-integer.js\n"); @@ -1408,7 +1339,6 @@ eval("// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(/ \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzP2QzZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-object.js\n"); @@ -1421,7 +1351,6 @@ eval("module.exports = function (it) {\n return typeof it === 'object' ? it !== \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\");\nvar MATCH = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzP2FhZTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLFlBQVksbUJBQU8sQ0FBQyxzREFBUTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_is-regexp.js\n"); @@ -1434,7 +1363,6 @@ eval("// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(/*! ./_is- \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzPzFmYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-call.js\n"); @@ -1447,7 +1375,6 @@ eval("// call something on iterator step with safe closing on error\nvar anObjec \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 10:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1461,7 +1388,6 @@ eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_module \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 18:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1475,7 +1401,6 @@ eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/cor \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanM/NWNjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsc0RBQVE7QUFDL0I7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQyxxQkFBcUI7QUFDdEQ7QUFDQSxpQ0FBaUMsU0FBUyxFQUFFO0FBQzVDLENBQUMsWUFBWTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsU0FBUyxxQkFBcUI7QUFDM0QsaUNBQWlDLGFBQWE7QUFDOUM7QUFDQSxHQUFHLFlBQVk7QUFDZjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-detect.js\n"); @@ -1488,7 +1413,6 @@ eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/ \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzP2Q1M2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxVQUFVO0FBQ1YiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iter-step.js\n"); @@ -1501,7 +1425,6 @@ eval("module.exports = function (done, value) {\n return { value: value, done: \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzPzg0ZjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_iterators.js\n"); @@ -1514,7 +1437,6 @@ eval("module.exports = {};\n//# sourceURL=[module]\n//# sourceMappingURL=data:ap \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcz8yZDAwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_library.js\n"); @@ -1527,7 +1449,6 @@ eval("module.exports = false;\n//# sourceURL=[module]\n//# sourceMappingURL=data \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcz8yZDVjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-expm1.js\n"); @@ -1540,7 +1461,6 @@ eval("// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$ \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 13:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(/*! ./_math-sign */ \"./node_modules/core-js/modules/_math-sign.js\");\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanM/OTFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxrRUFBYztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-fround.js\n"); @@ -1553,7 +1473,6 @@ eval("// 20.2.2.16 Math.fround(x)\nvar sign = __webpack_require__(/*! ./_math-si \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcz9kNmM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-log1p.js\n"); @@ -1566,7 +1485,6 @@ eval("// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p( \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzPzk2ZmIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_math-sign.js\n"); @@ -1579,7 +1497,6 @@ eval("// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 47:11-25 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var META = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\")('meta');\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar setDesc = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\")(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcz82N2FiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdBQVcsbUJBQU8sQ0FBQyxzREFBUTtBQUMzQixlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLGNBQWMseUZBQXlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDBEQUFVO0FBQ2hDLGlEQUFpRDtBQUNqRCxDQUFDO0FBQ0Q7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxTQUFTO0FBQ1QsR0FBRyxFQUFFO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_meta.js\n"); @@ -1592,7 +1509,6 @@ eval("var META = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modu \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 8:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar macrotask = __webpack_require__(/*! ./_task */ \"./node_modules/core-js/modules/_task.js\").set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzPzgwNzkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLDREQUFXO0FBQ2hDLGdCQUFnQixpRkFBc0I7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsYUFBYSxtQkFBTyxDQUFDLHNEQUFROztBQUU3QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLHVDQUF1QyxzQkFBc0IsRUFBRTtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_microtask.js\n"); @@ -1620,7 +1536,6 @@ eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__ \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 12:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1634,7 +1549,6 @@ eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = __webp \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 31:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/core-js/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\")('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n __webpack_require__(/*! ./_html */ \"./node_modules/core-js/modules/_html.js\").appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcz8yYWViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLFVBQVUsbUJBQU8sQ0FBQyxvRUFBZTtBQUNqQyxrQkFBa0IsbUJBQU8sQ0FBQywwRUFBa0I7QUFDNUMsZUFBZSxtQkFBTyxDQUFDLG9FQUFlO0FBQ3RDLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLG1CQUFPLENBQUMsb0VBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUseUZBQThCO0FBQ2hDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-create.js\n"); @@ -1661,7 +1575,6 @@ eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/co \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcz8xNDk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVMsbUJBQU8sQ0FBQyxrRUFBYztBQUMvQixlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsY0FBYyxtQkFBTyxDQUFDLHNFQUFnQjs7QUFFdEMsaUJBQWlCLG1CQUFPLENBQUMsc0VBQWdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-dps.js\n"); @@ -1730,7 +1643,6 @@ eval("exports.f = Object.getOwnPropertySymbols;\n//# sourceURL=[module]\n//# sou \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcz8zOGZkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHNEQUFRO0FBQzFCLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsb0VBQWU7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-gpo.js\n"); @@ -1743,7 +1655,6 @@ eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_requi \***************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/core-js/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanM/Y2UxMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQWU7QUFDdkMsbUJBQW1CLG1CQUFPLENBQUMsNEVBQW1CO0FBQzlDLGVBQWUsbUJBQU8sQ0FBQyxvRUFBZTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-keys-internal.js\n"); @@ -1756,7 +1667,6 @@ eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modul \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/core-js/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanM/MGQ1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyx3RkFBeUI7QUFDN0Msa0JBQWtCLG1CQUFPLENBQUMsMEVBQWtCOztBQUU1QztBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-keys.js\n"); @@ -1783,7 +1693,6 @@ eval("exports.f = {}.propertyIsEnumerable;\n//# sourceURL=[module]\n//# sourceMa \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcz81ZWRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDREQUFXO0FBQ2pDLFdBQVcsbUJBQU8sQ0FBQyx3REFBUztBQUM1QixZQUFZLG1CQUFPLENBQUMsMERBQVU7QUFDOUI7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFEQUFxRCxPQUFPLEVBQUU7QUFDOUQiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qtc2FwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-sap.js\n"); @@ -1796,7 +1705,6 @@ eval("// most Object methods by ES6 should accept primitives\nvar $export = __we \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/modules/_descriptors.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/modules/_object-keys.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/modules/_to-iobject.js\");\nvar isEnum = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/modules/_object-pie.js\").f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzPzUwNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCLG1CQUFPLENBQUMsc0VBQWdCO0FBQzFDLGNBQWMsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDdEMsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQWU7QUFDdkMsYUFBYSwyRkFBMEI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC10by1hcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_object-to-array.js\n"); @@ -1809,7 +1717,6 @@ eval("var DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modul \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/modules/_object-gopn.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/modules/_object-gops.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar Reflect = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanM/OTkwYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLFdBQVcsbUJBQU8sQ0FBQyxzRUFBZ0I7QUFDbkMsV0FBVyxtQkFBTyxDQUFDLHNFQUFnQjtBQUNuQyxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckMsY0FBYyx5RkFBNEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgUmVmbGVjdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3QgJiYgUmVmbGVjdC5vd25LZXlzIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnT1BOLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHJldHVybiBnZXRTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_own-keys.js\n"); @@ -1822,7 +1729,6 @@ eval("// all object keys, includes non-enumerable and symbols\nvar gOPN = __webp \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var $parseFloat = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").parseFloat;\nvar $trim = __webpack_require__(/*! ./_string-trim */ \"./node_modules/core-js/modules/_string-trim.js\").trim;\n\nmodule.exports = 1 / $parseFloat(__webpack_require__(/*! ./_string-ws */ \"./node_modules/core-js/modules/_string-ws.js\") + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanM/ZDc1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQkFBa0IsNEZBQStCO0FBQ2pELFlBQVksZ0dBQThCOztBQUUxQyxpQ0FBaUMsbUJBQU8sQ0FBQyxrRUFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDEgLyAkcGFyc2VGbG9hdChyZXF1aXJlKCcuL19zdHJpbmctd3MnKSArICctMCcpICE9PSAtSW5maW5pdHkgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cikge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBzdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_parse-float.js\n"); @@ -1835,7 +1741,6 @@ eval("var $parseFloat = __webpack_require__(/*! ./_global */ \"./node_modules/co \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var $parseInt = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").parseInt;\nvar $trim = __webpack_require__(/*! ./_string-trim */ \"./node_modules/core-js/modules/_string-trim.js\").trim;\nvar ws = __webpack_require__(/*! ./_string-ws */ \"./node_modules/core-js/modules/_string-ws.js\");\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzPzNjYTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLDBGQUE2QjtBQUM3QyxZQUFZLGdHQUE4QjtBQUMxQyxTQUFTLG1CQUFPLENBQUMsa0VBQWM7QUFDL0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_parse-int.js\n"); @@ -1848,7 +1753,6 @@ eval("var $parseInt = __webpack_require__(/*! ./_global */ \"./node_modules/core \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcz85YzgwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osR0FBRztBQUNILFlBQVk7QUFDWjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_perform.js\n"); @@ -1861,7 +1765,6 @@ eval("module.exports = function (exec) {\n try {\n return { e: false, v: exe \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/core-js/modules/_new-promise-capability.js\");\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzP2JjYWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQywyQkFBMkIsbUJBQU8sQ0FBQyw0RkFBMkI7O0FBRTlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9taXNlLXJlc29sdmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_promise-resolve.js\n"); @@ -1874,7 +1777,6 @@ eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/co \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcz80NjMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_property-desc.js\n"); @@ -1887,7 +1789,6 @@ eval("module.exports = function (bitmap, value) {\n return {\n enumerable: ! \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/modules/_redefine.js\");\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzP2RjYmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLGdFQUFhO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_redefine-all.js\n"); @@ -1900,7 +1801,6 @@ eval("var redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/cor \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 13:1-15 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar SRC = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\")('src');\nvar $toString = __webpack_require__(/*! ./_function-to-string */ \"./node_modules/core-js/modules/_function-to-string.js\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\").inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanM/MmFiYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQixVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsZ0JBQWdCLG1CQUFPLENBQUMsb0ZBQXVCO0FBQy9DO0FBQ0E7O0FBRUEsMkZBQWdDO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_redefine.js\n"); @@ -1913,7 +1813,6 @@ eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js \***************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 8:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1927,7 +1826,6 @@ eval("\n\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/c \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 58:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1941,7 +1839,6 @@ eval("\n\nvar regexpFlags = __webpack_require__(/*! ./_flags */ \"./node_modules \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module) => { eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2FtZS12YWx1ZS5qcz84M2ExIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_same-value.js\n"); @@ -1954,7 +1851,6 @@ eval("// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 9:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\")(Function.call, __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzPzhiOTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQyxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLHNEQUFRLGlCQUFpQiw2RkFBMkI7QUFDMUU7QUFDQTtBQUNBLE9BQU8sWUFBWSxjQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssR0FBRztBQUNSO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_set-proto.js\n"); @@ -1967,7 +1863,6 @@ eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -1981,7 +1876,6 @@ eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core- \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanM/N2YyMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVLHlGQUF5QjtBQUNuQyxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUIsVUFBVSxtQkFBTyxDQUFDLHNEQUFROztBQUUxQjtBQUNBLG9FQUFvRSxpQ0FBaUM7QUFDckciLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_set-to-string-tag.js\n"); @@ -1994,7 +1888,6 @@ eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcz82MTNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxVQUFVLG1CQUFPLENBQUMsc0RBQVE7QUFDMUI7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_shared-key.js\n"); @@ -2007,7 +1900,6 @@ eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:1-15 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\") ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzPzU1MzciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQztBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQSxxRUFBcUU7QUFDckUsQ0FBQztBQUNEO0FBQ0EsUUFBUSxtQkFBTyxDQUFDLDhEQUFZO0FBQzVCO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_shared.js\n"); @@ -2020,7 +1912,6 @@ eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/mod \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/modules/_an-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/modules/_a-function.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz9lYmQ2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGdCQUFnQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyxzREFBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_species-constructor.js\n"); @@ -2033,7 +1924,6 @@ eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webp \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -2047,7 +1937,6 @@ eval("\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzPzAyZjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCLG1CQUFPLENBQUMsb0VBQWU7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-at.js\n"); @@ -2060,7 +1949,6 @@ eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/ \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(/*! ./_is-regexp */ \"./node_modules/core-js/modules/_is-regexp.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanM/ZDJjOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzQkFBc0I7QUFDdEIsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-context.js\n"); @@ -2073,7 +1961,6 @@ eval("// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __we \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 12:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanM/Mzg2YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsNERBQVc7QUFDakMsWUFBWSxtQkFBTyxDQUFDLDBEQUFVO0FBQzlCLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEZBQTBGO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgcXVvdCA9IC9cIi9nO1xuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG52YXIgY3JlYXRlSFRNTCA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCBleGVjKSB7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KSwgJ1N0cmluZycsIE8pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-html.js\n"); @@ -2086,7 +1973,6 @@ eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-j \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nvar repeat = __webpack_require__(/*! ./_string-repeat */ \"./node_modules/core-js/modules/_string-repeat.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcz8yZTA4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLGtFQUFjO0FBQ3JDLGFBQWEsbUJBQU8sQ0FBQywwRUFBa0I7QUFDdkMsY0FBYyxtQkFBTyxDQUFDLDhEQUFZOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-pad.js\n"); @@ -2099,7 +1985,6 @@ eval("// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = _ \********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -2113,7 +1998,6 @@ eval("\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_module \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 30:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/modules/_export.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/modules/_fails.js\");\nvar spaces = __webpack_require__(/*! ./_string-ws */ \"./node_modules/core-js/modules/_string-ws.js\");\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanM/YWE3NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsNERBQVc7QUFDakMsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDLFlBQVksbUJBQU8sQ0FBQywwREFBVTtBQUM5QixhQUFhLG1CQUFPLENBQUMsa0VBQWM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-trim.js\n"); @@ -2126,7 +2010,6 @@ eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-j \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 1:0-14 */ /***/ ((module) => { eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzP2ZkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_string-ws.js\n"); @@ -2139,7 +2022,6 @@ eval("module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000 \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 81:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modules/_ctx.js\");\nvar invoke = __webpack_require__(/*! ./_invoke */ \"./node_modules/core-js/modules/_invoke.js\");\nvar html = __webpack_require__(/*! ./_html */ \"./node_modules/core-js/modules/_html.js\");\nvar cel = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/modules/_dom-create.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (__webpack_require__(/*! ./_cof */ \"./node_modules/core-js/modules/_cof.js\")(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcz8xOTkxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQixhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxvRUFBZTtBQUNqQyxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sbUJBQU8sQ0FBQyxzREFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_task.js\n"); @@ -2152,7 +2034,6 @@ eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/modul \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanM/NzdmMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-absolute-index.js\n"); @@ -2165,7 +2046,6 @@ eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/ \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/modules/_to-length.js\");\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanM/MDlmYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLG9FQUFlO0FBQ3ZDLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-index.js\n"); @@ -2178,7 +2058,6 @@ eval("// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = __webpack_ \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module) => { eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcz80NTg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-integer.js\n"); @@ -2191,7 +2070,6 @@ eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcz82ODIxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDLGNBQWMsbUJBQU8sQ0FBQyw4REFBWTtBQUNsQztBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-iobject.js\n"); @@ -2204,7 +2082,6 @@ eval("// to indexed object, toObject with fallback for non-array-like ES3 string \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzPzlkZWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxvRUFBZTtBQUN2QztBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-length.js\n"); @@ -2217,7 +2094,6 @@ eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzPzRiZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEM7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-object.js\n"); @@ -2230,7 +2106,6 @@ eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_def \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzPzZhOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxlQUFlLG1CQUFPLENBQUMsa0VBQWM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_to-primitive.js\n"); @@ -2243,8 +2118,6 @@ eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_re \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 325:2-16 */ -/*! CommonJS bailout: module.exports is used directly at 480:7-21 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -2258,8 +2131,6 @@ eval("\nif (__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/m \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, __webpack_exports__ */ -/*! CommonJS bailout: exports is used directly at 275:0-7 */ -/*! CommonJS bailout: exports is used directly at 276:0-7 */ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; @@ -2273,7 +2144,6 @@ eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core- \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 23:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/modules/_hide.js\");\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsNERBQVc7QUFDaEMsV0FBVyxtQkFBTyxDQUFDLHdEQUFTO0FBQzVCLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_typed.js\n"); @@ -2286,7 +2156,6 @@ eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzP2NhNWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_uid.js\n"); @@ -2299,7 +2168,6 @@ eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcz9hMjVmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQzs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VzZXItYWdlbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_user-agent.js\n"); @@ -2312,7 +2180,6 @@ eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 2:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcz9iMzlhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyxrRUFBYztBQUNyQztBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3ZhbGlkYXRlLWNvbGxlY3Rpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_validate-collection.js\n"); @@ -2325,7 +2192,6 @@ eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/co \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\");\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/modules/_library.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/core-js/modules/_wks-ext.js\");\nvar defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/modules/_object-dp.js\").f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcz8zYTcyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyw0REFBVztBQUNoQyxXQUFXLG1CQUFPLENBQUMsd0RBQVM7QUFDNUIsY0FBYyxtQkFBTyxDQUFDLDhEQUFZO0FBQ2xDLGFBQWEsbUJBQU8sQ0FBQyw4REFBWTtBQUNqQyxxQkFBcUIseUZBQXlCO0FBQzlDO0FBQ0EsMERBQTBELHNCQUFzQjtBQUNoRixrRkFBa0Ysd0JBQXdCO0FBQzFHIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_wks-define.js\n"); @@ -2353,7 +2219,6 @@ eval("exports.f = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/mod \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 6:15-29 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/modules/_uid.js\");\nvar Symbol = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzPzJiNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxtQkFBTyxDQUFDLDREQUFXO0FBQy9CLFVBQVUsbUJBQU8sQ0FBQyxzREFBUTtBQUMxQixhQUFhLHdGQUEyQjtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/_wks.js\n"); @@ -2366,7 +2231,6 @@ eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/ \******************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/modules/_classof.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/modules/_wks.js\")('iterator');\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/modules/_iterators.js\");\nmodule.exports = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/modules/_core.js\").getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanM/MjdlZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFPLENBQUMsOERBQVk7QUFDbEMsZUFBZSxtQkFBTyxDQUFDLHNEQUFRO0FBQy9CLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFjO0FBQ3RDLGlCQUFpQiwrRkFBb0M7QUFDckQ7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/core-js/modules/core.get-iterator-method.js\n"); @@ -2506,7 +2370,6 @@ eval("// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = __webpack_require \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -2747,7 +2610,6 @@ eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/ \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -3625,7 +3487,6 @@ eval("\n__webpack_require__(/*! ./es6.regexp.flags */ \"./node_modules/core-js/m \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4068,7 +3929,6 @@ eval("__webpack_require__(/*! ./_typed-array */ \"./node_modules/core-js/modules \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 40:15-29 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4298,7 +4158,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 9:0-14 */ /***/ ((module) => { "use strict"; @@ -4312,7 +4171,6 @@ eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n \************************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 15:0-14 */ /***/ ((module) => { "use strict"; @@ -4326,7 +4184,6 @@ eval("\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iter \*************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 29:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4340,7 +4197,6 @@ eval("\n\nvar isValue = __webpack_require__(/*! type/value/is */ \". \*********************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 9:9-23 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4354,7 +4210,6 @@ eval("\n\nvar isValue = __webpack_require__(/*! type/value/is */ \"./nod \****************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 70:0-14 */ /***/ ((module) => { eval("/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2RlYm91bmNlL2luZGV4LmpzP2IwMTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsT0FBTztBQUNsQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2RlYm91bmNlL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIGFzIGxvbmcgYXMgaXQgY29udGludWVzIHRvIGJlIGludm9rZWQsIHdpbGwgbm90XG4gKiBiZSB0cmlnZ2VyZWQuIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBpdCBzdG9wcyBiZWluZyBjYWxsZWQgZm9yXG4gKiBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGVcbiAqIGxlYWRpbmcgZWRnZSwgaW5zdGVhZCBvZiB0aGUgdHJhaWxpbmcuIFRoZSBmdW5jdGlvbiBhbHNvIGhhcyBhIHByb3BlcnR5ICdjbGVhcicgXG4gKiB0aGF0IGlzIGEgZnVuY3Rpb24gd2hpY2ggd2lsbCBjbGVhciB0aGUgdGltZXIgdG8gcHJldmVudCBwcmV2aW91c2x5IHNjaGVkdWxlZCBleGVjdXRpb25zLiBcbiAqXG4gKiBAc291cmNlIHVuZGVyc2NvcmUuanNcbiAqIEBzZWUgaHR0cDovL3Vuc2NyaXB0YWJsZS5jb20vMjAwOS8wMy8yMC9kZWJvdW5jaW5nLWphdmFzY3JpcHQtbWV0aG9kcy9cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmN0aW9uIHRvIHdyYXBcbiAqIEBwYXJhbSB7TnVtYmVyfSB0aW1lb3V0IGluIG1zIChgMTAwYClcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gd2hldGhlciB0byBleGVjdXRlIGF0IHRoZSBiZWdpbm5pbmcgKGBmYWxzZWApXG4gKiBAYXBpIHB1YmxpY1xuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpe1xuICB2YXIgdGltZW91dCwgYXJncywgY29udGV4dCwgdGltZXN0YW1wLCByZXN1bHQ7XG4gIGlmIChudWxsID09IHdhaXQpIHdhaXQgPSAxMDA7XG5cbiAgZnVuY3Rpb24gbGF0ZXIoKSB7XG4gICAgdmFyIGxhc3QgPSBEYXRlLm5vdygpIC0gdGltZXN0YW1wO1xuXG4gICAgaWYgKGxhc3QgPCB3YWl0ICYmIGxhc3QgPj0gMCkge1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHdhaXQgLSBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICBpZiAoIWltbWVkaWF0ZSkge1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBjb250ZXh0ID0gYXJncyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBkZWJvdW5jZWQgPSBmdW5jdGlvbigpe1xuICAgIGNvbnRleHQgPSB0aGlzO1xuICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgY2FsbE5vdyA9IGltbWVkaWF0ZSAmJiAhdGltZW91dDtcbiAgICBpZiAoIXRpbWVvdXQpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICBpZiAoY2FsbE5vdykge1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGRlYm91bmNlZC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIFxuICBkZWJvdW5jZWQuZmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGltZW91dCkge1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIFxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBkZWJvdW5jZWQ7XG59O1xuXG4vLyBBZGRzIGNvbXBhdGliaWxpdHkgZm9yIEVTIG1vZHVsZXNcbmRlYm91bmNlLmRlYm91bmNlID0gZGVib3VuY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVib3VuY2U7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/debounce/index.js\n"); @@ -4367,7 +4222,6 @@ eval("/**\n * Returns a function, that, as long as it continues to be invoked, w \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module.loaded, module.id, module, __webpack_require__.nmd, __webpack_require__.* */ -/*! CommonJS bailout: module.exports is used directly at 3161:2-16 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4381,7 +4235,6 @@ eval("/* module decorator */ module = __webpack_require__.nmd(module);\n\n\nfunc \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 9:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4395,7 +4248,6 @@ eval("// Inspired by Google Closure:\n// http://closure-library.googlecode.com/s \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4409,7 +4261,6 @@ eval("\n\nvar numberIsNaN = __webpack_require__(/*! ../../number/is-nan */ \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4423,7 +4274,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \***********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4437,7 +4287,6 @@ eval("\n\nmodule.exports = function () {\n\tvar from = Array.from, arr, result;\ \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 17:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4451,7 +4300,6 @@ eval("\n\nvar iteratorSymbol = __webpack_require__(/*! es6-symbol */ \"./node_mo \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module) => { "use strict"; @@ -4465,7 +4313,6 @@ eval("\n\nvar objToString = Object.prototype.toString\n , id = objToString.call \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module) => { "use strict"; @@ -4479,7 +4326,6 @@ eval("\n\nvar objToString = Object.prototype.toString\n , isFunctionStringTag = \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 4:0-14 */ /***/ ((module) => { "use strict"; @@ -4493,7 +4339,6 @@ eval("\n\n// eslint-disable-next-line no-empty-function\nmodule.exports = functi \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4507,7 +4352,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4521,7 +4365,6 @@ eval("\n\nmodule.exports = function () {\n\tvar sign = Math.sign;\n\tif (typeof \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4535,7 +4378,6 @@ eval("\n\nmodule.exports = function (value) {\n\tvalue = Number(value);\n\tif (i \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4549,7 +4391,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4563,7 +4404,6 @@ eval("\n\nmodule.exports = function () {\n\tvar numberIsNaN = Number.isNaN;\n\ti \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4577,7 +4417,6 @@ eval("\n\nmodule.exports = function (value) {\n\t// eslint-disable-next-line no- \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4591,7 +4430,6 @@ eval("\n\nvar sign = __webpack_require__(/*! ../math/sign */ \"./node_modules/e \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4605,7 +4443,6 @@ eval("\n\nvar toInteger = __webpack_require__(/*! ./to-integer */ \"./node_modul \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 14:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4619,7 +4456,6 @@ eval("// Internal method, used by iteration functions.\n// Calls a function for \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4633,7 +4469,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4647,7 +4482,6 @@ eval("\n\nmodule.exports = function () {\n\tvar assign = Object.assign, obj;\n\t \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4661,7 +4495,6 @@ eval("\n\nvar keys = __webpack_require__(/*! ../keys */ \"./node_modules/es5-ex \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4675,7 +4508,6 @@ eval("\n\nvar aFrom = __webpack_require__(/*! ../array/from */ \"./node_modules \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4689,7 +4521,6 @@ eval("// Workaround for http://code.google.com/p/v8/issues/detail?id=2804\n\n\n\ \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4703,7 +4534,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./_iterate */ \"./node_module \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4717,7 +4547,6 @@ eval("\n\nvar isValue = __webpack_require__(/*! ./is-value */ \"./node_modules/e \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4731,7 +4560,6 @@ eval("\n\nvar _undefined = __webpack_require__(/*! ../function/noop */ \"./node_ \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4745,7 +4573,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4759,7 +4586,6 @@ eval("\n\nmodule.exports = function () {\n\ttry {\n\t\tObject.keys(\"primitive\" \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4773,7 +4599,6 @@ eval("\n\nvar isValue = __webpack_require__(/*! ../is-value */ \"./node_modules/ \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4787,7 +4612,6 @@ eval("\n\nvar callable = __webpack_require__(/*! ./valid-callable */ \"./node_mo \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 13:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4801,7 +4625,6 @@ eval("\n\nvar isValue = __webpack_require__(/*! ./is-value */ \"./node_modules/e \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module) => { "use strict"; @@ -4815,7 +4638,6 @@ eval("\n\nvar forEach = Array.prototype.forEach, create = Object.create;\n\n// e \***************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4829,7 +4651,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \************************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module) => { "use strict"; @@ -4843,7 +4664,6 @@ eval("\n\nvar create = Object.create, getPrototypeOf = Object.getPrototypeOf, pl \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 21:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4857,7 +4677,6 @@ eval("/* eslint no-proto: \"off\" */\n\n// Big thanks to @WebReflection for sort \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -4871,7 +4690,6 @@ eval("\n\nmodule.exports = function (fn) {\n\tif (typeof fn !== \"function\") th \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4885,7 +4703,6 @@ eval("\n\nvar isValue = __webpack_require__(/*! ./is-value */ \"./node_modules/e \**********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4899,7 +4716,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \*******************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module) => { "use strict"; @@ -4913,7 +4729,6 @@ eval("\n\nvar str = \"razdwatrzy\";\n\nmodule.exports = function () {\n\tif (typ \*********************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module) => { "use strict"; @@ -4927,7 +4742,6 @@ eval("\n\nvar indexOf = String.prototype.indexOf;\n\nmodule.exports = function ( \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module) => { "use strict"; @@ -4941,7 +4755,6 @@ eval("\n\nvar objToString = Object.prototype.toString, id = objToString.call(\"\ \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:16-30 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4955,7 +4768,6 @@ eval("\n\nvar setPrototypeOf = __webpack_require__(/*! es5-ext/object/set-protot \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 10:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4969,7 +4781,6 @@ eval("\n\nvar isArguments = __webpack_require__(/*! es5-ext/function/is-argument \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 10:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4983,7 +4794,6 @@ eval("\n\nvar isArguments = __webpack_require__(/*! es5-ext/function/is-argum \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 13:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -4997,7 +4807,6 @@ eval("\n\nvar clear = __webpack_require__(/*! es5-ext/array/#/clear */ \"./no \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 10:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5011,7 +4820,6 @@ eval("\n\nvar isArguments = __webpack_require__(/*! es5-ext/function/is-argument \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 13:17-31 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5025,7 +4833,6 @@ eval("// Thanks @mathiasbynens\n// http://mathiasbynens.be/notes/javascript-unic \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5039,7 +4846,6 @@ eval("\n\nvar isIterable = __webpack_require__(/*! ./is-iterable */ \"./node_mod \***************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5053,7 +4859,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -5067,7 +4872,6 @@ eval("\n\nmodule.exports = function () {\n\tvar map, iterator, result;\n\tif (ty \*******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module) => { "use strict"; @@ -5081,7 +4885,6 @@ eval("// Exports true if environment provides native `Map` implementation,\n// w \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5095,7 +4898,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! es5-ext/object/primitive-set \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 13:14-28 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5109,7 +4911,6 @@ eval("\n\nvar setPrototypeOf = __webpack_require__(/*! es5-ext/object/set-pro \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 20:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5123,8 +4924,6 @@ eval("\n\nvar clear = __webpack_require__(/*! es5-ext/array/#/clear */ \******************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, top-level-this-exports, __webpack_require__.g, __webpack_require__.* */ -/*! CommonJS bailout: this is used directly at 13:2-6 */ -/*! CommonJS bailout: module.exports is used directly at 10:64-78 */ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\t true ? module.exports = factory() :\n\t0;\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && \"function\" === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof __webpack_require__.g !== 'undefined') {\n local = __webpack_require__.g;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanM/MTM2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsS0FBNEQ7QUFDN0QsQ0FBQyxDQUMrQjtBQUNoQyxDQUFDLHFCQUFxQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdGQUFnRjs7QUFFaEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsc0JBQXNCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDLHlDQUF5QyxVQUFjO0FBQ3hEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLFVBQVUsSUFBSTtBQUNkO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDZDQUE2QztBQUNoRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE1BQU07QUFDaEIsVUFBVSxPQUFPO0FBQ2pCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixZQUFZO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxVQUFVLFNBQVM7QUFDbkIsVUFBVSxTQUFTO0FBQ25CO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLFVBQVUsU0FBUztBQUNuQjtBQUNBLFdBQVc7QUFDWDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQixLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCLGFBQWE7QUFDYjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLHFCQUFNO0FBQ25CLFlBQVkscUJBQU07QUFDbEIsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7OztBQUlEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIHY0LjIuOCsxZTY4ZGNlNlxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG5cdHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcblx0dHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcblx0KGdsb2JhbC5FUzZQcm9taXNlID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBvYmplY3RPckZ1bmN0aW9uKHgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgeDtcbiAgcmV0dXJuIHggIT09IG51bGwgJiYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG5cblxudmFyIF9pc0FycmF5ID0gdm9pZCAwO1xuaWYgKEFycmF5LmlzQXJyYXkpIHtcbiAgX2lzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xufSBlbHNlIHtcbiAgX2lzQXJyYXkgPSBmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG59XG5cbnZhciBpc0FycmF5ID0gX2lzQXJyYXk7XG5cbnZhciBsZW4gPSAwO1xudmFyIHZlcnR4TmV4dCA9IHZvaWQgMDtcbnZhciBjdXN0b21TY2hlZHVsZXJGbiA9IHZvaWQgMDtcblxudmFyIGFzYXAgPSBmdW5jdGlvbiBhc2FwKGNhbGxiYWNrLCBhcmcpIHtcbiAgcXVldWVbbGVuXSA9IGNhbGxiYWNrO1xuICBxdWV1ZVtsZW4gKyAxXSA9IGFyZztcbiAgbGVuICs9IDI7XG4gIGlmIChsZW4gPT09IDIpIHtcbiAgICAvLyBJZiBsZW4gaXMgMiwgdGhhdCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gc2NoZWR1bGUgYW4gYXN5bmMgZmx1c2guXG4gICAgLy8gSWYgYWRkaXRpb25hbCBjYWxsYmFja3MgYXJlIHF1ZXVlZCBiZWZvcmUgdGhlIHF1ZXVlIGlzIGZsdXNoZWQsIHRoZXlcbiAgICAvLyB3aWxsIGJlIHByb2Nlc3NlZCBieSB0aGlzIGZsdXNoIHRoYXQgd2UgYXJlIHNjaGVkdWxpbmcuXG4gICAgaWYgKGN1c3RvbVNjaGVkdWxlckZuKSB7XG4gICAgICBjdXN0b21TY2hlZHVsZXJGbihmbHVzaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNjaGVkdWxlcihzY2hlZHVsZUZuKSB7XG4gIGN1c3RvbVNjaGVkdWxlckZuID0gc2NoZWR1bGVGbjtcbn1cblxuZnVuY3Rpb24gc2V0QXNhcChhc2FwRm4pIHtcbiAgYXNhcCA9IGFzYXBGbjtcbn1cblxudmFyIGJyb3dzZXJXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHVuZGVmaW5lZDtcbnZhciBicm93c2VyR2xvYmFsID0gYnJvd3NlcldpbmRvdyB8fCB7fTtcbnZhciBCcm93c2VyTXV0YXRpb25PYnNlcnZlciA9IGJyb3dzZXJHbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBicm93c2VyR2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgaXNOb2RlID0gdHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiB7fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXSc7XG5cbi8vIHRlc3QgZm9yIHdlYiB3b3JrZXIgYnV0IG5vdCBpbiBJRTEwXG52YXIgaXNXb3JrZXIgPSB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnO1xuXG4vLyBub2RlXG5mdW5jdGlvbiB1c2VOZXh0VGljaygpIHtcbiAgLy8gbm9kZSB2ZXJzaW9uIDAuMTAueCBkaXNwbGF5cyBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2hlbiBuZXh0VGljayBpcyB1c2VkIHJlY3Vyc2l2ZWx5XG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3Vqb2pzL3doZW4vaXNzdWVzLzQxMCBmb3IgZGV0YWlsc1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgfTtcbn1cblxuLy8gdmVydHhcbmZ1bmN0aW9uIHVzZVZlcnR4VGltZXIoKSB7XG4gIGlmICh0eXBlb2YgdmVydHhOZXh0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2ZXJ0eE5leHQoZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xufVxuXG5mdW5jdGlvbiB1c2VNdXRhdGlvbk9ic2VydmVyKCkge1xuICB2YXIgaXRlcmF0aW9ucyA9IDA7XG4gIHZhciBvYnNlcnZlciA9IG5ldyBCcm93c2VyTXV0YXRpb25PYnNlcnZlcihmbHVzaCk7XG4gIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICBvYnNlcnZlci5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIG5vZGUuZGF0YSA9IGl0ZXJhdGlvbnMgPSArK2l0ZXJhdGlvbnMgJSAyO1xuICB9O1xufVxuXG4vLyB3ZWIgd29ya2VyXG5mdW5jdGlvbiB1c2VNZXNzYWdlQ2hhbm5lbCgpIHtcbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmbHVzaDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdXNlU2V0VGltZW91dCgpIHtcbiAgLy8gU3RvcmUgc2V0VGltZW91dCByZWZlcmVuY2Ugc28gZXM2LXByb21pc2Ugd2lsbCBiZSB1bmFmZmVjdGVkIGJ5XG4gIC8vIG90aGVyIGNvZGUgbW9kaWZ5aW5nIHNldFRpbWVvdXQgKGxpa2Ugc2lub24udXNlRmFrZVRpbWVycygpKVxuICB2YXIgZ2xvYmFsU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdsb2JhbFNldFRpbWVvdXQoZmx1c2gsIDEpO1xuICB9O1xufVxuXG52YXIgcXVldWUgPSBuZXcgQXJyYXkoMTAwMCk7XG5mdW5jdGlvbiBmbHVzaCgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHZhciBjYWxsYmFjayA9IHF1ZXVlW2ldO1xuICAgIHZhciBhcmcgPSBxdWV1ZVtpICsgMV07XG5cbiAgICBjYWxsYmFjayhhcmcpO1xuXG4gICAgcXVldWVbaV0gPSB1bmRlZmluZWQ7XG4gICAgcXVldWVbaSArIDFdID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgbGVuID0gMDtcbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFZlcnR4KCkge1xuICB0cnkge1xuICAgIHZhciB2ZXJ0eCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCkucmVxdWlyZSgndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdm9pZCAwO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG5cbiAgaWYgKF9zdGF0ZSkge1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICBhc2FwKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpbnZva2VDYWxsYmFjayhfc3RhdGUsIGNoaWxkLCBjYWxsYmFjaywgcGFyZW50Ll9yZXN1bHQpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbik7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yZXNvbHZlYCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHdpbGwgYmVjb21lIHJlc29sdmVkIHdpdGggdGhlXG4gIHBhc3NlZCBgdmFsdWVgLiBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVzb2x2ZSgxKTtcbiAgfSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAvLyB2YWx1ZSA9PT0gMVxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZXNvbHZlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBbnl9IHZhbHVlIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZXNvbHZlZCB3aXRoXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgZnVsZmlsbGVkIHdpdGggdGhlIGdpdmVuXG4gIGB2YWx1ZWBcbiovXG5mdW5jdGlvbiByZXNvbHZlJDEob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICByZXNvbHZlKHByb21pc2UsIG9iamVjdCk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgUFJPTUlTRV9JRCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyKTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnZhciBQRU5ESU5HID0gdm9pZCAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiB0cnlUaGVuKHRoZW4kJDEsIHZhbHVlLCBmdWxmaWxsbWVudEhhbmRsZXIsIHJlamVjdGlvbkhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICB0aGVuJCQxLmNhbGwodmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVGb3JlaWduVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUsIHRoZW4kJDEpIHtcbiAgYXNhcChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgIHZhciBzZWFsZWQgPSBmYWxzZTtcbiAgICB2YXIgZXJyb3IgPSB0cnlUaGVuKHRoZW4kJDEsIHRoZW5hYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChzZWFsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGVuYWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIHJlamVjdChwcm9taXNlLCByZWFzb24pO1xuICAgIH0sICdTZXR0bGU6ICcgKyAocHJvbWlzZS5fbGFiZWwgfHwgJyB1bmtub3duIHByb21pc2UnKSk7XG5cbiAgICBpZiAoIXNlYWxlZCAmJiBlcnJvcikge1xuICAgICAgc2VhbGVkID0gdHJ1ZTtcbiAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgfVxuICB9LCBwcm9taXNlKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgdGhlbmFibGUpIHtcbiAgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB0aGVuYWJsZS5fcmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0aGVuYWJsZS5fc3RhdGUgPT09IFJFSkVDVEVEKSB7XG4gICAgcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHByb21pc2UsIHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlTWF5YmVUaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQxKSB7XG4gIGlmIChtYXliZVRoZW5hYmxlLmNvbnN0cnVjdG9yID09PSBwcm9taXNlLmNvbnN0cnVjdG9yICYmIHRoZW4kJDEgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlJDEpIHtcbiAgICBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodGhlbiQkMSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih0aGVuJCQxKSkge1xuICAgICAgaGFuZGxlRm9yZWlnblRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlID09PSB2YWx1ZSkge1xuICAgIHJlamVjdChwcm9taXNlLCBzZWxmRnVsZmlsbG1lbnQoKSk7XG4gIH0gZWxzZSBpZiAob2JqZWN0T3JGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YXIgdGhlbiQkMSA9IHZvaWQgMDtcbiAgICB0cnkge1xuICAgICAgdGhlbiQkMSA9IHZhbHVlLnRoZW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIHRoZW4kJDEpO1xuICB9IGVsc2Uge1xuICAgIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2hSZWplY3Rpb24ocHJvbWlzZSkge1xuICBpZiAocHJvbWlzZS5fb25lcnJvcikge1xuICAgIHByb21pc2UuX29uZXJyb3IocHJvbWlzZS5fcmVzdWx0KTtcbiAgfVxuXG4gIHB1Ymxpc2gocHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIGZ1bGZpbGwocHJvbWlzZSwgdmFsdWUpIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvbWlzZS5fcmVzdWx0ID0gdmFsdWU7XG4gIHByb21pc2UuX3N0YXRlID0gRlVMRklMTEVEO1xuXG4gIGlmIChwcm9taXNlLl9zdWJzY3JpYmVycy5sZW5ndGggIT09IDApIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHByb21pc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlamVjdChwcm9taXNlLCByZWFzb24pIHtcbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHByb21pc2UuX3N0YXRlID0gUkVKRUNURUQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHJlYXNvbjtcblxuICBhc2FwKHB1Ymxpc2hSZWplY3Rpb24sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBzdWJzY3JpYmUocGFyZW50LCBjaGlsZCwgb25GdWxmaWxsbWVudCwgb25SZWplY3Rpb24pIHtcbiAgdmFyIF9zdWJzY3JpYmVycyA9IHBhcmVudC5fc3Vic2NyaWJlcnM7XG4gIHZhciBsZW5ndGggPSBfc3Vic2NyaWJlcnMubGVuZ3RoO1xuXG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB2b2lkIDAsXG4gICAgICBjYWxsYmFjayA9IHZvaWQgMCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIGludm9rZUNhbGxiYWNrKHNldHRsZWQsIHByb21pc2UsIGNhbGxiYWNrLCBkZXRhaWwpIHtcbiAgdmFyIGhhc0NhbGxiYWNrID0gaXNGdW5jdGlvbihjYWxsYmFjayksXG4gICAgICB2YWx1ZSA9IHZvaWQgMCxcbiAgICAgIGVycm9yID0gdm9pZCAwLFxuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcblxuICBpZiAoaGFzQ2FsbGJhY2spIHtcbiAgICB0cnkge1xuICAgICAgdmFsdWUgPSBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN1Y2NlZWRlZCA9IGZhbHNlO1xuICAgICAgZXJyb3IgPSBlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkge1xuICAgICAgcmVqZWN0KHByb21pc2UsIGNhbm5vdFJldHVybk93bigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBkZXRhaWw7XG4gIH1cblxuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICAvLyBub29wXG4gIH0gZWxzZSBpZiAoaGFzQ2FsbGJhY2sgJiYgc3VjY2VlZGVkKSB7XG4gICAgcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoc3VjY2VlZGVkID09PSBmYWxzZSkge1xuICAgIHJlamVjdChwcm9taXNlLCBlcnJvcik7XG4gIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gRlVMRklMTEVEKSB7XG4gICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoc2V0dGxlZCA9PT0gUkVKRUNURUQpIHtcbiAgICByZWplY3QocHJvbWlzZSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVQcm9taXNlKHByb21pc2UsIHJlc29sdmVyKSB7XG4gIHRyeSB7XG4gICAgcmVzb2x2ZXIoZnVuY3Rpb24gcmVzb2x2ZVByb21pc2UodmFsdWUpIHtcbiAgICAgIHJlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0sIGZ1bmN0aW9uIHJlamVjdFByb21pc2UocmVhc29uKSB7XG4gICAgICByZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJlamVjdChwcm9taXNlLCBlKTtcbiAgfVxufVxuXG52YXIgaWQgPSAwO1xuZnVuY3Rpb24gbmV4dElkKCkge1xuICByZXR1cm4gaWQrKztcbn1cblxuZnVuY3Rpb24gbWFrZVByb21pc2UocHJvbWlzZSkge1xuICBwcm9taXNlW1BST01JU0VfSURdID0gaWQrKztcbiAgcHJvbWlzZS5fc3RhdGUgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgcHJvbWlzZS5fc3Vic2NyaWJlcnMgPSBbXTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCkge1xuICByZXR1cm4gbmV3IEVycm9yKCdBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXknKTtcbn1cblxudmFyIEVudW1lcmF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gICAgdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcblxuICAgIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgICBtYWtlUHJvbWlzZSh0aGlzLnByb21pc2UpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICB0aGlzLl9yZW1haW5pbmcgPSBpbnB1dC5sZW5ndGg7XG5cbiAgICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBBcnJheSh0aGlzLmxlbmd0aCk7XG5cbiAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgICAgdGhpcy5fZW51bWVyYXRlKGlucHV0KTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgIGZ1bGZpbGwodGhpcy5wcm9taXNlLCB0aGlzLl9yZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgICB9XG4gIH1cblxuICBFbnVtZXJhdG9yLnByb3RvdHlwZS5fZW51bWVyYXRlID0gZnVuY3Rpb24gX2VudW1lcmF0ZShpbnB1dCkge1xuICAgIGZvciAodmFyIGkgPSAwOyB0aGlzLl9zdGF0ZSA9PT0gUEVORElORyAmJiBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuX2VhY2hFbnRyeShpbnB1dFtpXSwgaSk7XG4gICAgfVxuICB9O1xuXG4gIEVudW1lcmF0b3IucHJvdG90eXBlLl9lYWNoRW50cnkgPSBmdW5jdGlvbiBfZWFjaEVudHJ5KGVudHJ5LCBpKSB7XG4gICAgdmFyIGMgPSB0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yO1xuICAgIHZhciByZXNvbHZlJCQxID0gYy5yZXNvbHZlO1xuXG5cbiAgICBpZiAocmVzb2x2ZSQkMSA9PT0gcmVzb2x2ZSQxKSB7XG4gICAgICB2YXIgX3RoZW4gPSB2b2lkIDA7XG4gICAgICB2YXIgZXJyb3IgPSB2b2lkIDA7XG4gICAgICB2YXIgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIF90aGVuID0gZW50cnkudGhlbjtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICBlcnJvciA9IGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChfdGhlbiA9PT0gdGhlbiAmJiBlbnRyeS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICAgICAgdGhpcy5fc2V0dGxlZEF0KGVudHJ5Ll9zdGF0ZSwgaSwgZW50cnkuX3Jlc3VsdCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLl9yZW1haW5pbmctLTtcbiAgICAgICAgdGhpcy5fcmVzdWx0W2ldID0gZW50cnk7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UkMSkge1xuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBjKG5vb3ApO1xuICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICByZWplY3QocHJvbWlzZSwgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgZW50cnksIF90aGVuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl93aWxsU2V0dGxlQXQobmV3IGMoZnVuY3Rpb24gKHJlc29sdmUkJDEpIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSQkMShlbnRyeSk7XG4gICAgICAgIH0pLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fd2lsbFNldHRsZUF0KHJlc29sdmUkJDEoZW50cnkpLCBpKTtcbiAgICB9XG4gIH07XG5cbiAgRW51bWVyYXRvci5wcm90b3R5cGUuX3NldHRsZWRBdCA9IGZ1bmN0aW9uIF9zZXR0bGVkQXQoc3RhdGUsIGksIHZhbHVlKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzLnByb21pc2U7XG5cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICAgICAgcmVqZWN0KHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICB9XG4gIH07XG5cbiAgRW51bWVyYXRvci5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdCA9IGZ1bmN0aW9uIF93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSkge1xuICAgIHZhciBlbnVtZXJhdG9yID0gdGhpcztcblxuICAgIHN1YnNjcmliZShwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICByZXR1cm4gZW51bWVyYXRvci5fc2V0dGxlZEF0KFJFSkVDVEVELCBpLCByZWFzb24pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiBFbnVtZXJhdG9yO1xufSgpO1xuXG4vKipcbiAgYFByb21pc2UuYWxsYCBhY2NlcHRzIGFuIGFycmF5IG9mIHByb21pc2VzLCBhbmQgcmV0dXJucyBhIG5ldyBwcm9taXNlIHdoaWNoXG4gIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIGFycmF5IG9mIGZ1bGZpbGxtZW50IHZhbHVlcyBmb3IgdGhlIHBhc3NlZCBwcm9taXNlcywgb3JcbiAgcmVqZWN0ZWQgd2l0aCB0aGUgcmVhc29uIG9mIHRoZSBmaXJzdCBwYXNzZWQgcHJvbWlzZSB0byBiZSByZWplY3RlZC4gSXQgY2FzdHMgYWxsXG4gIGVsZW1lbnRzIG9mIHRoZSBwYXNzZWQgaXRlcmFibGUgdG8gcHJvbWlzZXMgYXMgaXQgcnVucyB0aGlzIGFsZ29yaXRobS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gcmVzb2x2ZSgxKTtcbiAgbGV0IHByb21pc2UyID0gcmVzb2x2ZSgyKTtcbiAgbGV0IHByb21pc2UzID0gcmVzb2x2ZSgzKTtcbiAgbGV0IHByb21pc2VzID0gWyBwcm9taXNlMSwgcHJvbWlzZTIsIHByb21pc2UzIF07XG5cbiAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24oYXJyYXkpe1xuICAgIC8vIFRoZSBhcnJheSBoZXJlIHdvdWxkIGJlIFsgMSwgMiwgMyBdO1xuICB9KTtcbiAgYGBgXG5cbiAgSWYgYW55IG9mIHRoZSBgcHJvbWlzZXNgIGdpdmVuIHRvIGBhbGxgIGFyZSByZWplY3RlZCwgdGhlIGZpcnN0IHByb21pc2VcbiAgdGhhdCBpcyByZWplY3RlZCB3aWxsIGJlIGdpdmVuIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSByZXR1cm5lZCBwcm9taXNlcydzXG4gIHJlamVjdGlvbiBoYW5kbGVyLiBGb3IgZXhhbXBsZTpcblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gcmVzb2x2ZSgxKTtcbiAgbGV0IHByb21pc2UyID0gcmVqZWN0KG5ldyBFcnJvcihcIjJcIikpO1xuICBsZXQgcHJvbWlzZTMgPSByZWplY3QobmV3IEVycm9yKFwiM1wiKSk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBDb2RlIGhlcmUgbmV2ZXIgcnVucyBiZWNhdXNlIHRoZXJlIGFyZSByZWplY3RlZCBwcm9taXNlcyFcbiAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAvLyBlcnJvci5tZXNzYWdlID09PSBcIjJcIlxuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCBhbGxcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FycmF5fSBlbnRyaWVzIGFycmF5IG9mIHByb21pc2VzXG4gIEBwYXJhbSB7U3RyaW5nfSBsYWJlbCBvcHRpb25hbCBzdHJpbmcgZm9yIGxhYmVsaW5nIHRoZSBwcm9taXNlLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2hlbiBhbGwgYHByb21pc2VzYCBoYXZlIGJlZW5cbiAgZnVsZmlsbGVkLCBvciByZWplY3RlZCBpZiBhbnkgb2YgdGhlbSBiZWNvbWUgcmVqZWN0ZWQuXG4gIEBzdGF0aWNcbiovXG5mdW5jdGlvbiBhbGwoZW50cmllcykge1xuICByZXR1cm4gbmV3IEVudW1lcmF0b3IodGhpcywgZW50cmllcykucHJvbWlzZTtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJhY2VgIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaCBpcyBzZXR0bGVkIGluIHRoZSBzYW1lIHdheSBhcyB0aGVcbiAgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gc2V0dGxlLlxuXG4gIEV4YW1wbGU6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAyJyk7XG4gICAgfSwgMTAwKTtcbiAgfSk7XG5cbiAgUHJvbWlzZS5yYWNlKFtwcm9taXNlMSwgcHJvbWlzZTJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgLy8gcmVzdWx0ID09PSAncHJvbWlzZSAyJyBiZWNhdXNlIGl0IHdhcyByZXNvbHZlZCBiZWZvcmUgcHJvbWlzZTFcbiAgICAvLyB3YXMgcmVzb2x2ZWQuXG4gIH0pO1xuICBgYGBcblxuICBgUHJvbWlzZS5yYWNlYCBpcyBkZXRlcm1pbmlzdGljIGluIHRoYXQgb25seSB0aGUgc3RhdGUgb2YgdGhlIGZpcnN0XG4gIHNldHRsZWQgcHJvbWlzZSBtYXR0ZXJzLiBGb3IgZXhhbXBsZSwgZXZlbiBpZiBvdGhlciBwcm9taXNlcyBnaXZlbiB0byB0aGVcbiAgYHByb21pc2VzYCBhcnJheSBhcmd1bWVudCBhcmUgcmVzb2x2ZWQsIGJ1dCB0aGUgZmlyc3Qgc2V0dGxlZCBwcm9taXNlIGhhc1xuICBiZWNvbWUgcmVqZWN0ZWQgYmVmb3JlIHRoZSBvdGhlciBwcm9taXNlcyBiZWNhbWUgZnVsZmlsbGVkLCB0aGUgcmV0dXJuZWRcbiAgcHJvbWlzZSB3aWxsIGJlY29tZSByZWplY3RlZDpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVzb2x2ZSgncHJvbWlzZSAxJyk7XG4gICAgfSwgMjAwKTtcbiAgfSk7XG5cbiAgbGV0IHByb21pc2UyID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZWplY3QobmV3IEVycm9yKCdwcm9taXNlIDInKSk7XG4gICAgfSwgMTAwKTtcbiAgfSk7XG5cbiAgUHJvbWlzZS5yYWNlKFtwcm9taXNlMSwgcHJvbWlzZTJdKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnNcbiAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyByZWFzb24ubWVzc2FnZSA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBwcm9taXNlIDIgYmVjYW1lIHJlamVjdGVkIGJlZm9yZVxuICAgIC8vIHByb21pc2UgMSBiZWNhbWUgZnVsZmlsbGVkXG4gIH0pO1xuICBgYGBcblxuICBBbiBleGFtcGxlIHJlYWwtd29ybGQgdXNlIGNhc2UgaXMgaW1wbGVtZW50aW5nIHRpbWVvdXRzOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgUHJvbWlzZS5yYWNlKFthamF4KCdmb28uanNvbicpLCB0aW1lb3V0KDUwMDApXSlcbiAgYGBgXG5cbiAgQG1ldGhvZCByYWNlXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gcHJvbWlzZXMgYXJyYXkgb2YgcHJvbWlzZXMgdG8gb2JzZXJ2ZVxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSB3aGljaCBzZXR0bGVzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgZmlyc3QgcGFzc2VkXG4gIHByb21pc2UgdG8gc2V0dGxlLlxuKi9cbmZ1bmN0aW9uIHJhY2UoZW50cmllcykge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuXG4gIGlmICghaXNBcnJheShlbnRyaWVzKSkge1xuICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoZnVuY3Rpb24gKF8sIHJlamVjdCkge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGFuIGFycmF5IHRvIHJhY2UuJykpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBDb25zdHJ1Y3Rvci5yZXNvbHZlKGVudHJpZXNbaV0pLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAgYFByb21pc2UucmVqZWN0YCByZXR1cm5zIGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBwYXNzZWQgYHJlYXNvbmAuXG4gIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZWplY3QobmV3IEVycm9yKCdXSE9PUFMnKSk7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgLy8gQ29kZSBoZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdXSE9PUFMnXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSl7XG4gICAgLy8gQ29kZSBoZXJlIGRvZXNuJ3QgcnVuIGJlY2F1c2UgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQhXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdXSE9PUFMnXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlamVjdFxuICBAc3RhdGljXG4gIEBwYXJhbSB7QW55fSByZWFzb24gdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlamVjdGVkIHdpdGguXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX0gYSBwcm9taXNlIHJlamVjdGVkIHdpdGggdGhlIGdpdmVuIGByZWFzb25gLlxuKi9cbmZ1bmN0aW9uIHJlamVjdCQxKHJlYXNvbikge1xuICAvKmpzaGludCB2YWxpZHRoaXM6dHJ1ZSAqL1xuICB2YXIgQ29uc3RydWN0b3IgPSB0aGlzO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBDb25zdHJ1Y3Rvcihub29wKTtcbiAgcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cblxudmFyIFByb21pc2UkMSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUHJvbWlzZShyZXNvbHZlcikge1xuICAgIHRoaXNbUFJPTUlTRV9JRF0gPSBuZXh0SWQoKTtcbiAgICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zdWJzY3JpYmVycyA9IFtdO1xuXG4gICAgaWYgKG5vb3AgIT09IHJlc29sdmVyKSB7XG4gICAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgICAgdGhpcyBpbnN0YW5jZW9mIFByb21pc2UgPyBpbml0aWFsaXplUHJvbWlzZSh0aGlzLCByZXNvbHZlcikgOiBuZWVkc05ldygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICBUaGUgcHJpbWFyeSB3YXkgb2YgaW50ZXJhY3Rpbmcgd2l0aCBhIHByb21pc2UgaXMgdGhyb3VnaCBpdHMgYHRoZW5gIG1ldGhvZCxcbiAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgcmVhc29uIHdoeSB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgZnVsZmlsbGVkLlxuICAgYGBganNcbiAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgIC8vIHVzZXIgaXMgYXZhaWxhYmxlXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgfSk7XG4gIGBgYFxuICAgQ2hhaW5pbmdcbiAgLS0tLS0tLS1cbiAgIFRoZSByZXR1cm4gdmFsdWUgb2YgYHRoZW5gIGlzIGl0c2VsZiBhIHByb21pc2UuICBUaGlzIHNlY29uZCwgJ2Rvd25zdHJlYW0nXG4gIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgb3IgcmVqZWN0aW9uIGhhbmRsZXIsIG9yIHJlamVjdGVkIGlmIHRoZSBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24uXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICByZXR1cm4gdXNlci5uYW1lO1xuICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICB9KS50aGVuKGZ1bmN0aW9uICh1c2VyTmFtZSkge1xuICAgIC8vIElmIGBmaW5kVXNlcmAgZnVsZmlsbGVkLCBgdXNlck5hbWVgIHdpbGwgYmUgdGhlIHVzZXIncyBuYW1lLCBvdGhlcndpc2UgaXRcbiAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgfSk7XG4gICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknKTtcbiAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyBuZXZlciByZWFjaGVkXG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgIC8vIElmIGBmaW5kVXNlcmAgcmVqZWN0ZWQsIGByZWFzb25gIHdpbGwgYmUgJ2BmaW5kVXNlcmAgcmVqZWN0ZWQgYW5kIHdlJ3JlIHVuaGFwcHknLlxuICB9KTtcbiAgYGBgXG4gIElmIHRoZSBkb3duc3RyZWFtIHByb21pc2UgZG9lcyBub3Qgc3BlY2lmeSBhIHJlamVjdGlvbiBoYW5kbGVyLCByZWplY3Rpb24gcmVhc29ucyB3aWxsIGJlIHByb3BhZ2F0ZWQgZnVydGhlciBkb3duc3RyZWFtLlxuICAgYGBganNcbiAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgdGhyb3cgbmV3IFBlZGFnb2dpY2FsRXhjZXB0aW9uKCdVcHN0cmVhbSBlcnJvcicpO1xuICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAvLyBuZXZlciByZWFjaGVkXG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAvLyBUaGUgYFBlZGdhZ29jaWFsRXhjZXB0aW9uYCBpcyBwcm9wYWdhdGVkIGFsbCB0aGUgd2F5IGRvd24gdG8gaGVyZVxuICB9KTtcbiAgYGBgXG4gICBBc3NpbWlsYXRpb25cbiAgLS0tLS0tLS0tLS0tXG4gICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICByZXRyaWV2ZWQgYXN5bmNocm9ub3VzbHkuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHJldHVybmluZyBhIHByb21pc2UgaW4gdGhlXG4gIGZ1bGZpbGxtZW50IG9yIHJlamVjdGlvbiBoYW5kbGVyLiBUaGUgZG93bnN0cmVhbSBwcm9taXNlIHdpbGwgdGhlbiBiZSBwZW5kaW5nXG4gIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICAgYGBganNcbiAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICB9KS50aGVuKGZ1bmN0aW9uIChjb21tZW50cykge1xuICAgIC8vIFRoZSB1c2VyJ3MgY29tbWVudHMgYXJlIG5vdyBhdmFpbGFibGVcbiAgfSk7XG4gIGBgYFxuICAgSWYgdGhlIGFzc2ltbGlhdGVkIHByb21pc2UgcmVqZWN0cywgdGhlbiB0aGUgZG93bnN0cmVhbSBwcm9taXNlIHdpbGwgYWxzbyByZWplY3QuXG4gICBgYGBqc1xuICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICByZXR1cm4gZmluZENvbW1lbnRzQnlBdXRob3IodXNlcik7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCBmdWxmaWxscywgd2UnbGwgaGF2ZSB0aGUgdmFsdWUgaGVyZVxuICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICB9KTtcbiAgYGBgXG4gICBTaW1wbGUgRXhhbXBsZVxuICAtLS0tLS0tLS0tLS0tLVxuICAgU3luY2hyb25vdXMgRXhhbXBsZVxuICAgYGBgamF2YXNjcmlwdFxuICBsZXQgcmVzdWx0O1xuICAgdHJ5IHtcbiAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgLy8gc3VjY2Vzc1xuICB9IGNhdGNoKHJlYXNvbikge1xuICAgIC8vIGZhaWx1cmVcbiAgfVxuICBgYGBcbiAgIEVycmJhY2sgRXhhbXBsZVxuICAgYGBganNcbiAgZmluZFJlc3VsdChmdW5jdGlvbihyZXN1bHQsIGVycil7XG4gICAgaWYgKGVycikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfVxuICB9KTtcbiAgYGBgXG4gICBQcm9taXNlIEV4YW1wbGU7XG4gICBgYGBqYXZhc2NyaXB0XG4gIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgLy8gc3VjY2Vzc1xuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIGZhaWx1cmVcbiAgfSk7XG4gIGBgYFxuICAgQWR2YW5jZWQgRXhhbXBsZVxuICAtLS0tLS0tLS0tLS0tLVxuICAgU3luY2hyb25vdXMgRXhhbXBsZVxuICAgYGBgamF2YXNjcmlwdFxuICBsZXQgYXV0aG9yLCBib29rcztcbiAgIHRyeSB7XG4gICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgIGJvb2tzICA9IGZpbmRCb29rc0J5QXV0aG9yKGF1dGhvcik7XG4gICAgLy8gc3VjY2Vzc1xuICB9IGNhdGNoKHJlYXNvbikge1xuICAgIC8vIGZhaWx1cmVcbiAgfVxuICBgYGBcbiAgIEVycmJhY2sgRXhhbXBsZVxuICAgYGBganNcbiAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgIH1cbiAgIGZ1bmN0aW9uIGZhaWx1cmUocmVhc29uKSB7XG4gICB9XG4gICBmaW5kQXV0aG9yKGZ1bmN0aW9uKGF1dGhvciwgZXJyKXtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBmYWlsdXJlKGVycik7XG4gICAgICAvLyBmYWlsdXJlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbmRCb29va3NCeUF1dGhvcihhdXRob3IsIGZ1bmN0aW9uKGJvb2tzLCBlcnIpIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgICAgICAgICAgZmFpbHVyZShyZWFzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGZhaWx1cmUoZXJyKTtcbiAgICAgIH1cbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9XG4gIH0pO1xuICBgYGBcbiAgIFByb21pc2UgRXhhbXBsZTtcbiAgIGBgYGphdmFzY3JpcHRcbiAgZmluZEF1dGhvcigpLlxuICAgIHRoZW4oZmluZEJvb2tzQnlBdXRob3IpLlxuICAgIHRoZW4oZnVuY3Rpb24oYm9va3Mpe1xuICAgICAgLy8gZm91bmQgYm9va3NcbiAgfSkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICB9KTtcbiAgYGBgXG4gICBAbWV0aG9kIHRoZW5cbiAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3RlZFxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG5cbiAgLyoqXG4gIGBjYXRjaGAgaXMgc2ltcGx5IHN1Z2FyIGZvciBgdGhlbih1bmRlZmluZWQsIG9uUmVqZWN0aW9uKWAgd2hpY2ggbWFrZXMgaXQgdGhlIHNhbWVcbiAgYXMgdGhlIGNhdGNoIGJsb2NrIG9mIGEgdHJ5L2NhdGNoIHN0YXRlbWVudC5cbiAgYGBganNcbiAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkbid0IGZpbmQgdGhhdCBhdXRob3InKTtcbiAgfVxuICAvLyBzeW5jaHJvbm91c1xuICB0cnkge1xuICBmaW5kQXV0aG9yKCk7XG4gIH0gY2F0Y2gocmVhc29uKSB7XG4gIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gIH1cbiAgLy8gYXN5bmMgd2l0aCBwcm9taXNlc1xuICBmaW5kQXV0aG9yKCkuY2F0Y2goZnVuY3Rpb24ocmVhc29uKXtcbiAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgfSk7XG4gIGBgYFxuICBAbWV0aG9kIGNhdGNoXG4gIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVqZWN0aW9uXG4gIFVzZWZ1bCBmb3IgdG9vbGluZy5cbiAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cblxuXG4gIFByb21pc2UucHJvdG90eXBlLmNhdGNoID0gZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAgYGZpbmFsbHlgIHdpbGwgYmUgaW52b2tlZCByZWdhcmRsZXNzIG9mIHRoZSBwcm9taXNlJ3MgZmF0ZSBqdXN0IGFzIG5hdGl2ZVxuICAgIHRyeS9jYXRjaC9maW5hbGx5IGJlaGF2ZXNcbiAgXG4gICAgU3luY2hyb25vdXMgZXhhbXBsZTpcbiAgXG4gICAgYGBganNcbiAgICBmaW5kQXV0aG9yKCkge1xuICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEF1dGhvcigpO1xuICAgIH1cbiAgXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmaW5kQXV0aG9yKCk7IC8vIHN1Y2NlZWQgb3IgZmFpbFxuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIHJldHVybiBmaW5kT3RoZXJBdXRoZXIoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gYWx3YXlzIHJ1bnNcbiAgICAgIC8vIGRvZXNuJ3QgYWZmZWN0IHRoZSByZXR1cm4gdmFsdWVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEFzeW5jaHJvbm91cyBleGFtcGxlOlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRBdXRob3IoKS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgcmV0dXJuIGZpbmRPdGhlckF1dGhlcigpO1xuICAgIH0pLmZpbmFsbHkoZnVuY3Rpb24oKXtcbiAgICAgIC8vIGF1dGhvciB3YXMgZWl0aGVyIGZvdW5kLCBvciBub3RcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCBmaW5hbGx5XG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICBAcmV0dXJuIHtQcm9taXNlfVxuICAqL1xuXG5cbiAgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSA9IGZ1bmN0aW9uIF9maW5hbGx5KGNhbGxiYWNrKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3I7XG5cbiAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5yZXNvbHZlKGNhbGxiYWNrKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgcmV0dXJuIFByb21pc2U7XG59KCk7XG5cblByb21pc2UkMS5wcm90b3R5cGUudGhlbiA9IHRoZW47XG5Qcm9taXNlJDEuYWxsID0gYWxsO1xuUHJvbWlzZSQxLnJhY2UgPSByYWNlO1xuUHJvbWlzZSQxLnJlc29sdmUgPSByZXNvbHZlJDE7XG5Qcm9taXNlJDEucmVqZWN0ID0gcmVqZWN0JDE7XG5Qcm9taXNlJDEuX3NldFNjaGVkdWxlciA9IHNldFNjaGVkdWxlcjtcblByb21pc2UkMS5fc2V0QXNhcCA9IHNldEFzYXA7XG5Qcm9taXNlJDEuX2FzYXAgPSBhc2FwO1xuXG4vKmdsb2JhbCBzZWxmKi9cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICB2YXIgbG9jYWwgPSB2b2lkIDA7XG5cbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbG9jYWwgPSBzZWxmO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBsb2NhbCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgUCA9IGxvY2FsLlByb21pc2U7XG5cbiAgaWYgKFApIHtcbiAgICB2YXIgcHJvbWlzZVRvU3RyaW5nID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzaWxlbnRseSBpZ25vcmVkXG4gICAgfVxuXG4gICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBsb2NhbC5Qcm9taXNlID0gUHJvbWlzZSQxO1xufVxuXG4vLyBTdHJhbmdlIGNvbXBhdC4uXG5Qcm9taXNlJDEucG9seWZpbGwgPSBwb2x5ZmlsbDtcblByb21pc2UkMS5Qcm9taXNlID0gUHJvbWlzZSQxO1xuXG5yZXR1cm4gUHJvbWlzZSQxO1xuXG59KSkpO1xuXG5cblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXM2LXByb21pc2UubWFwXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/es6-promise/dist/es6-promise.js\n"); @@ -5137,7 +4936,6 @@ eval("/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5151,7 +4949,6 @@ eval("\n\nmodule.exports = __webpack_require__(/*! ./is-implemented */ \"./node_ \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5165,7 +4962,6 @@ eval("\n\nvar global = __webpack_require__(/*! ext/global-this */ \"./node_m \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 3:0-14 */ /***/ ((module) => { "use strict"; @@ -5179,7 +4975,6 @@ eval("\n\nmodule.exports = function (value) {\n\tif (!value) return false;\n\tif \**************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 8:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5193,7 +4988,6 @@ eval("\n\nvar d = __webpack_require__(/*! d */ \"./node_modules/d/index.js\");\n \***********************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 6:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5207,7 +5001,6 @@ eval("\n\nvar d = __webpack_require__(/*! d */ \"./node_modules/d/ind \**********************************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 8:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5221,7 +5014,6 @@ eval("\n\nvar d = __webpack_require__(/*! d */ \"./node_modules/d/i \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: __webpack_require__, module */ -/*! CommonJS bailout: module.exports is used directly at 36:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5235,7 +5027,6 @@ eval("// ES2015 Symbol polyfill for environments that do not (or partially) supp \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; @@ -5249,8 +5040,6 @@ eval("\n\nvar isSymbol = __webpack_require__(/*! ./is-symbol */ \"./node_modules \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, top-level-this-exports */ -/*! CommonJS bailout: this is used directly at 12:3-7 */ -/*! CommonJS bailout: module.exports is used directly at 4:2-16 */ /***/ (function(module) { eval("(function webpackUniversalModuleDefinition(root, factory) {\n/* istanbul ignore next */\n\tif(true)\n\t\tmodule.exports = factory();\n\telse {}\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __nested_webpack_require_583__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/* istanbul ignore if */\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __nested_webpack_require_583__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__nested_webpack_require_583__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__nested_webpack_require_583__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__nested_webpack_require_583__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __nested_webpack_require_583__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __nested_webpack_require_1808__) {\n\n\t\"use strict\";\n\t/*\n\t Copyright JS Foundation and other contributors, https://js.foundation/\n\n\t Redistribution and use in source and binary forms, with or without\n\t modification, are permitted provided that the following conditions are met:\n\n\t * Redistributions of source code must retain the above copyright\n\t notice, this list of conditions and the following disclaimer.\n\t * Redistributions in binary form must reproduce the above copyright\n\t notice, this list of conditions and the following disclaimer in the\n\t documentation and/or other materials provided with the distribution.\n\n\t THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n\t AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n\t IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n\t ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n\t DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n\t (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n\t LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n\t ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n\t THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar comment_handler_1 = __nested_webpack_require_1808__(1);\n\tvar jsx_parser_1 = __nested_webpack_require_1808__(3);\n\tvar parser_1 = __nested_webpack_require_1808__(8);\n\tvar tokenizer_1 = __nested_webpack_require_1808__(15);\n\tfunction parse(code, options, delegate) {\n\t var commentHandler = null;\n\t var proxyDelegate = function (node, metadata) {\n\t if (delegate) {\n\t delegate(node, metadata);\n\t }\n\t if (commentHandler) {\n\t commentHandler.visit(node, metadata);\n\t }\n\t };\n\t var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null;\n\t var collectComment = false;\n\t if (options) {\n\t collectComment = (typeof options.comment === 'boolean' && options.comment);\n\t var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment);\n\t if (collectComment || attachComment) {\n\t commentHandler = new comment_handler_1.CommentHandler();\n\t commentHandler.attach = attachComment;\n\t options.comment = true;\n\t parserDelegate = proxyDelegate;\n\t }\n\t }\n\t var isModule = false;\n\t if (options && typeof options.sourceType === 'string') {\n\t isModule = (options.sourceType === 'module');\n\t }\n\t var parser;\n\t if (options && typeof options.jsx === 'boolean' && options.jsx) {\n\t parser = new jsx_parser_1.JSXParser(code, options, parserDelegate);\n\t }\n\t else {\n\t parser = new parser_1.Parser(code, options, parserDelegate);\n\t }\n\t var program = isModule ? parser.parseModule() : parser.parseScript();\n\t var ast = program;\n\t if (collectComment && commentHandler) {\n\t ast.comments = commentHandler.comments;\n\t }\n\t if (parser.config.tokens) {\n\t ast.tokens = parser.tokens;\n\t }\n\t if (parser.config.tolerant) {\n\t ast.errors = parser.errorHandler.errors;\n\t }\n\t return ast;\n\t}\n\texports.parse = parse;\n\tfunction parseModule(code, options, delegate) {\n\t var parsingOptions = options || {};\n\t parsingOptions.sourceType = 'module';\n\t return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseModule = parseModule;\n\tfunction parseScript(code, options, delegate) {\n\t var parsingOptions = options || {};\n\t parsingOptions.sourceType = 'script';\n\t return parse(code, parsingOptions, delegate);\n\t}\n\texports.parseScript = parseScript;\n\tfunction tokenize(code, options, delegate) {\n\t var tokenizer = new tokenizer_1.Tokenizer(code, options);\n\t var tokens;\n\t tokens = [];\n\t try {\n\t while (true) {\n\t var token = tokenizer.getNextToken();\n\t if (!token) {\n\t break;\n\t }\n\t if (delegate) {\n\t token = delegate(token);\n\t }\n\t tokens.push(token);\n\t }\n\t }\n\t catch (e) {\n\t tokenizer.errorHandler.tolerate(e);\n\t }\n\t if (tokenizer.errorHandler.tolerant) {\n\t tokens.errors = tokenizer.errors();\n\t }\n\t return tokens;\n\t}\n\texports.tokenize = tokenize;\n\tvar syntax_1 = __nested_webpack_require_1808__(2);\n\texports.Syntax = syntax_1.Syntax;\n\t// Sync with *.json manifests.\n\texports.version = '4.0.1';\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __nested_webpack_require_6456__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __nested_webpack_require_6456__(2);\n\tvar CommentHandler = (function () {\n\t function CommentHandler() {\n\t this.attach = false;\n\t this.comments = [];\n\t this.stack = [];\n\t this.leading = [];\n\t this.trailing = [];\n\t }\n\t CommentHandler.prototype.insertInnerComments = function (node, metadata) {\n\t // innnerComments for properties empty block\n\t // `function a() {/** comments **\\/}`\n\t if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {\n\t var innerComments = [];\n\t for (var i = this.leading.length - 1; i >= 0; --i) {\n\t var entry = this.leading[i];\n\t if (metadata.end.offset >= entry.start) {\n\t innerComments.unshift(entry.comment);\n\t this.leading.splice(i, 1);\n\t this.trailing.splice(i, 1);\n\t }\n\t }\n\t if (innerComments.length) {\n\t node.innerComments = innerComments;\n\t }\n\t }\n\t };\n\t CommentHandler.prototype.findTrailingComments = function (metadata) {\n\t var trailingComments = [];\n\t if (this.trailing.length > 0) {\n\t for (var i = this.trailing.length - 1; i >= 0; --i) {\n\t var entry_1 = this.trailing[i];\n\t if (entry_1.start >= metadata.end.offset) {\n\t trailingComments.unshift(entry_1.comment);\n\t }\n\t }\n\t this.trailing.length = 0;\n\t return trailingComments;\n\t }\n\t var entry = this.stack[this.stack.length - 1];\n\t if (entry && entry.node.trailingComments) {\n\t var firstComment = entry.node.trailingComments[0];\n\t if (firstComment && firstComment.range[0] >= metadata.end.offset) {\n\t trailingComments = entry.node.trailingComments;\n\t delete entry.node.trailingComments;\n\t }\n\t }\n\t return trailingComments;\n\t };\n\t CommentHandler.prototype.findLeadingComments = function (metadata) {\n\t var leadingComments = [];\n\t var target;\n\t while (this.stack.length > 0) {\n\t var entry = this.stack[this.stack.length - 1];\n\t if (entry && entry.start >= metadata.start.offset) {\n\t target = entry.node;\n\t this.stack.pop();\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t if (target) {\n\t var count = target.leadingComments ? target.leadingComments.length : 0;\n\t for (var i = count - 1; i >= 0; --i) {\n\t var comment = target.leadingComments[i];\n\t if (comment.range[1] <= metadata.start.offset) {\n\t leadingComments.unshift(comment);\n\t target.leadingComments.splice(i, 1);\n\t }\n\t }\n\t if (target.leadingComments && target.leadingComments.length === 0) {\n\t delete target.leadingComments;\n\t }\n\t return leadingComments;\n\t }\n\t for (var i = this.leading.length - 1; i >= 0; --i) {\n\t var entry = this.leading[i];\n\t if (entry.start <= metadata.start.offset) {\n\t leadingComments.unshift(entry.comment);\n\t this.leading.splice(i, 1);\n\t }\n\t }\n\t return leadingComments;\n\t };\n\t CommentHandler.prototype.visitNode = function (node, metadata) {\n\t if (node.type === syntax_1.Syntax.Program && node.body.length > 0) {\n\t return;\n\t }\n\t this.insertInnerComments(node, metadata);\n\t var trailingComments = this.findTrailingComments(metadata);\n\t var leadingComments = this.findLeadingComments(metadata);\n\t if (leadingComments.length > 0) {\n\t node.leadingComments = leadingComments;\n\t }\n\t if (trailingComments.length > 0) {\n\t node.trailingComments = trailingComments;\n\t }\n\t this.stack.push({\n\t node: node,\n\t start: metadata.start.offset\n\t });\n\t };\n\t CommentHandler.prototype.visitComment = function (node, metadata) {\n\t var type = (node.type[0] === 'L') ? 'Line' : 'Block';\n\t var comment = {\n\t type: type,\n\t value: node.value\n\t };\n\t if (node.range) {\n\t comment.range = node.range;\n\t }\n\t if (node.loc) {\n\t comment.loc = node.loc;\n\t }\n\t this.comments.push(comment);\n\t if (this.attach) {\n\t var entry = {\n\t comment: {\n\t type: type,\n\t value: node.value,\n\t range: [metadata.start.offset, metadata.end.offset]\n\t },\n\t start: metadata.start.offset\n\t };\n\t if (node.loc) {\n\t entry.comment.loc = node.loc;\n\t }\n\t node.type = type;\n\t this.leading.push(entry);\n\t this.trailing.push(entry);\n\t }\n\t };\n\t CommentHandler.prototype.visit = function (node, metadata) {\n\t if (node.type === 'LineComment') {\n\t this.visitComment(node, metadata);\n\t }\n\t else if (node.type === 'BlockComment') {\n\t this.visitComment(node, metadata);\n\t }\n\t else if (this.attach) {\n\t this.visitNode(node, metadata);\n\t }\n\t };\n\t return CommentHandler;\n\t}());\n\texports.CommentHandler = CommentHandler;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.Syntax = {\n\t AssignmentExpression: 'AssignmentExpression',\n\t AssignmentPattern: 'AssignmentPattern',\n\t ArrayExpression: 'ArrayExpression',\n\t ArrayPattern: 'ArrayPattern',\n\t ArrowFunctionExpression: 'ArrowFunctionExpression',\n\t AwaitExpression: 'AwaitExpression',\n\t BlockStatement: 'BlockStatement',\n\t BinaryExpression: 'BinaryExpression',\n\t BreakStatement: 'BreakStatement',\n\t CallExpression: 'CallExpression',\n\t CatchClause: 'CatchClause',\n\t ClassBody: 'ClassBody',\n\t ClassDeclaration: 'ClassDeclaration',\n\t ClassExpression: 'ClassExpression',\n\t ConditionalExpression: 'ConditionalExpression',\n\t ContinueStatement: 'ContinueStatement',\n\t DoWhileStatement: 'DoWhileStatement',\n\t DebuggerStatement: 'DebuggerStatement',\n\t EmptyStatement: 'EmptyStatement',\n\t ExportAllDeclaration: 'ExportAllDeclaration',\n\t ExportDefaultDeclaration: 'ExportDefaultDeclaration',\n\t ExportNamedDeclaration: 'ExportNamedDeclaration',\n\t ExportSpecifier: 'ExportSpecifier',\n\t ExpressionStatement: 'ExpressionStatement',\n\t ForStatement: 'ForStatement',\n\t ForOfStatement: 'ForOfStatement',\n\t ForInStatement: 'ForInStatement',\n\t FunctionDeclaration: 'FunctionDeclaration',\n\t FunctionExpression: 'FunctionExpression',\n\t Identifier: 'Identifier',\n\t IfStatement: 'IfStatement',\n\t ImportDeclaration: 'ImportDeclaration',\n\t ImportDefaultSpecifier: 'ImportDefaultSpecifier',\n\t ImportNamespaceSpecifier: 'ImportNamespaceSpecifier',\n\t ImportSpecifier: 'ImportSpecifier',\n\t Literal: 'Literal',\n\t LabeledStatement: 'LabeledStatement',\n\t LogicalExpression: 'LogicalExpression',\n\t MemberExpression: 'MemberExpression',\n\t MetaProperty: 'MetaProperty',\n\t MethodDefinition: 'MethodDefinition',\n\t NewExpression: 'NewExpression',\n\t ObjectExpression: 'ObjectExpression',\n\t ObjectPattern: 'ObjectPattern',\n\t Program: 'Program',\n\t Property: 'Property',\n\t RestElement: 'RestElement',\n\t ReturnStatement: 'ReturnStatement',\n\t SequenceExpression: 'SequenceExpression',\n\t SpreadElement: 'SpreadElement',\n\t Super: 'Super',\n\t SwitchCase: 'SwitchCase',\n\t SwitchStatement: 'SwitchStatement',\n\t TaggedTemplateExpression: 'TaggedTemplateExpression',\n\t TemplateElement: 'TemplateElement',\n\t TemplateLiteral: 'TemplateLiteral',\n\t ThisExpression: 'ThisExpression',\n\t ThrowStatement: 'ThrowStatement',\n\t TryStatement: 'TryStatement',\n\t UnaryExpression: 'UnaryExpression',\n\t UpdateExpression: 'UpdateExpression',\n\t VariableDeclaration: 'VariableDeclaration',\n\t VariableDeclarator: 'VariableDeclarator',\n\t WhileStatement: 'WhileStatement',\n\t WithStatement: 'WithStatement',\n\t YieldExpression: 'YieldExpression'\n\t};\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __nested_webpack_require_15019__) {\n\n\t\"use strict\";\n/* istanbul ignore next */\n\tvar __extends = (this && this.__extends) || (function () {\n\t var extendStatics = Object.setPrototypeOf ||\n\t ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n\t function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n\t return function (d, b) {\n\t extendStatics(d, b);\n\t function __() { this.constructor = d; }\n\t d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n\t };\n\t})();\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar character_1 = __nested_webpack_require_15019__(4);\n\tvar JSXNode = __nested_webpack_require_15019__(5);\n\tvar jsx_syntax_1 = __nested_webpack_require_15019__(6);\n\tvar Node = __nested_webpack_require_15019__(7);\n\tvar parser_1 = __nested_webpack_require_15019__(8);\n\tvar token_1 = __nested_webpack_require_15019__(13);\n\tvar xhtml_entities_1 = __nested_webpack_require_15019__(14);\n\ttoken_1.TokenName[100 /* Identifier */] = 'JSXIdentifier';\n\ttoken_1.TokenName[101 /* Text */] = 'JSXText';\n\t// Fully qualified element name, e.g. returns \"svg:path\"\n\tfunction getQualifiedElementName(elementName) {\n\t var qualifiedName;\n\t switch (elementName.type) {\n\t case jsx_syntax_1.JSXSyntax.JSXIdentifier:\n\t var id = elementName;\n\t qualifiedName = id.name;\n\t break;\n\t case jsx_syntax_1.JSXSyntax.JSXNamespacedName:\n\t var ns = elementName;\n\t qualifiedName = getQualifiedElementName(ns.namespace) + ':' +\n\t getQualifiedElementName(ns.name);\n\t break;\n\t case jsx_syntax_1.JSXSyntax.JSXMemberExpression:\n\t var expr = elementName;\n\t qualifiedName = getQualifiedElementName(expr.object) + '.' +\n\t getQualifiedElementName(expr.property);\n\t break;\n\t /* istanbul ignore next */\n\t default:\n\t break;\n\t }\n\t return qualifiedName;\n\t}\n\tvar JSXParser = (function (_super) {\n\t __extends(JSXParser, _super);\n\t function JSXParser(code, options, delegate) {\n\t return _super.call(this, code, options, delegate) || this;\n\t }\n\t JSXParser.prototype.parsePrimaryExpression = function () {\n\t return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);\n\t };\n\t JSXParser.prototype.startJSX = function () {\n\t // Unwind the scanner before the lookahead token.\n\t this.scanner.index = this.startMarker.index;\n\t this.scanner.lineNumber = this.startMarker.line;\n\t this.scanner.lineStart = this.startMarker.index - this.startMarker.column;\n\t };\n\t JSXParser.prototype.finishJSX = function () {\n\t // Prime the next lookahead.\n\t this.nextToken();\n\t };\n\t JSXParser.prototype.reenterJSX = function () {\n\t this.startJSX();\n\t this.expectJSX('}');\n\t // Pop the closing '}' added from the lookahead.\n\t if (this.config.tokens) {\n\t this.tokens.pop();\n\t }\n\t };\n\t JSXParser.prototype.createJSXNode = function () {\n\t this.collectComments();\n\t return {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t };\n\t JSXParser.prototype.createJSXChildNode = function () {\n\t return {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t };\n\t JSXParser.prototype.scanXHTMLEntity = function (quote) {\n\t var result = '&';\n\t var valid = true;\n\t var terminated = false;\n\t var numeric = false;\n\t var hex = false;\n\t while (!this.scanner.eof() && valid && !terminated) {\n\t var ch = this.scanner.source[this.scanner.index];\n\t if (ch === quote) {\n\t break;\n\t }\n\t terminated = (ch === ';');\n\t result += ch;\n\t ++this.scanner.index;\n\t if (!terminated) {\n\t switch (result.length) {\n\t case 2:\n\t // e.g. '{'\n\t numeric = (ch === '#');\n\t break;\n\t case 3:\n\t if (numeric) {\n\t // e.g. 'A'\n\t hex = (ch === 'x');\n\t valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0));\n\t numeric = numeric && !hex;\n\t }\n\t break;\n\t default:\n\t valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0)));\n\t valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));\n\t break;\n\t }\n\t }\n\t }\n\t if (valid && terminated && result.length > 2) {\n\t // e.g. 'A' becomes just '#x41'\n\t var str = result.substr(1, result.length - 2);\n\t if (numeric && str.length > 1) {\n\t result = String.fromCharCode(parseInt(str.substr(1), 10));\n\t }\n\t else if (hex && str.length > 2) {\n\t result = String.fromCharCode(parseInt('0' + str.substr(1), 16));\n\t }\n\t else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) {\n\t result = xhtml_entities_1.XHTMLEntities[str];\n\t }\n\t }\n\t return result;\n\t };\n\t // Scan the next JSX token. This replaces Scanner#lex when in JSX mode.\n\t JSXParser.prototype.lexJSX = function () {\n\t var cp = this.scanner.source.charCodeAt(this.scanner.index);\n\t // < > / : = { }\n\t if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) {\n\t var value = this.scanner.source[this.scanner.index++];\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: value,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: this.scanner.index - 1,\n\t end: this.scanner.index\n\t };\n\t }\n\t // \" '\n\t if (cp === 34 || cp === 39) {\n\t var start = this.scanner.index;\n\t var quote = this.scanner.source[this.scanner.index++];\n\t var str = '';\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source[this.scanner.index++];\n\t if (ch === quote) {\n\t break;\n\t }\n\t else if (ch === '&') {\n\t str += this.scanXHTMLEntity(quote);\n\t }\n\t else {\n\t str += ch;\n\t }\n\t }\n\t return {\n\t type: 8 /* StringLiteral */,\n\t value: str,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t // ... or .\n\t if (cp === 46) {\n\t var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1);\n\t var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2);\n\t var value = (n1 === 46 && n2 === 46) ? '...' : '.';\n\t var start = this.scanner.index;\n\t this.scanner.index += value.length;\n\t return {\n\t type: 7 /* Punctuator */,\n\t value: value,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t // `\n\t if (cp === 96) {\n\t // Only placeholder, since it will be rescanned as a real assignment expression.\n\t return {\n\t type: 10 /* Template */,\n\t value: '',\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: this.scanner.index,\n\t end: this.scanner.index\n\t };\n\t }\n\t // Identifer can not contain backslash (char code 92).\n\t if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) {\n\t var start = this.scanner.index;\n\t ++this.scanner.index;\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source.charCodeAt(this.scanner.index);\n\t if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) {\n\t ++this.scanner.index;\n\t }\n\t else if (ch === 45) {\n\t // Hyphen (char code 45) can be part of an identifier.\n\t ++this.scanner.index;\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t var id = this.scanner.source.slice(start, this.scanner.index);\n\t return {\n\t type: 100 /* Identifier */,\n\t value: id,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t }\n\t return this.scanner.lex();\n\t };\n\t JSXParser.prototype.nextJSXToken = function () {\n\t this.collectComments();\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var token = this.lexJSX();\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t if (this.config.tokens) {\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t return token;\n\t };\n\t JSXParser.prototype.nextJSXText = function () {\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var start = this.scanner.index;\n\t var text = '';\n\t while (!this.scanner.eof()) {\n\t var ch = this.scanner.source[this.scanner.index];\n\t if (ch === '{' || ch === '<') {\n\t break;\n\t }\n\t ++this.scanner.index;\n\t text += ch;\n\t if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) {\n\t ++this.scanner.lineNumber;\n\t if (ch === '\\r' && this.scanner.source[this.scanner.index] === '\\n') {\n\t ++this.scanner.index;\n\t }\n\t this.scanner.lineStart = this.scanner.index;\n\t }\n\t }\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t var token = {\n\t type: 101 /* Text */,\n\t value: text,\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: this.scanner.lineStart,\n\t start: start,\n\t end: this.scanner.index\n\t };\n\t if ((text.length > 0) && this.config.tokens) {\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t return token;\n\t };\n\t JSXParser.prototype.peekJSXToken = function () {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.lexJSX();\n\t this.scanner.restoreState(state);\n\t return next;\n\t };\n\t // Expect the next JSX token to match the specified punctuator.\n\t // If not, an exception will be thrown.\n\t JSXParser.prototype.expectJSX = function (value) {\n\t var token = this.nextJSXToken();\n\t if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Return true if the next JSX token matches the specified punctuator.\n\t JSXParser.prototype.matchJSX = function (value) {\n\t var next = this.peekJSXToken();\n\t return next.type === 7 /* Punctuator */ && next.value === value;\n\t };\n\t JSXParser.prototype.parseJSXIdentifier = function () {\n\t var node = this.createJSXNode();\n\t var token = this.nextJSXToken();\n\t if (token.type !== 100 /* Identifier */) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new JSXNode.JSXIdentifier(token.value));\n\t };\n\t JSXParser.prototype.parseJSXElementName = function () {\n\t var node = this.createJSXNode();\n\t var elementName = this.parseJSXIdentifier();\n\t if (this.matchJSX(':')) {\n\t var namespace = elementName;\n\t this.expectJSX(':');\n\t var name_1 = this.parseJSXIdentifier();\n\t elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));\n\t }\n\t else if (this.matchJSX('.')) {\n\t while (this.matchJSX('.')) {\n\t var object = elementName;\n\t this.expectJSX('.');\n\t var property = this.parseJSXIdentifier();\n\t elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));\n\t }\n\t }\n\t return elementName;\n\t };\n\t JSXParser.prototype.parseJSXAttributeName = function () {\n\t var node = this.createJSXNode();\n\t var attributeName;\n\t var identifier = this.parseJSXIdentifier();\n\t if (this.matchJSX(':')) {\n\t var namespace = identifier;\n\t this.expectJSX(':');\n\t var name_2 = this.parseJSXIdentifier();\n\t attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));\n\t }\n\t else {\n\t attributeName = identifier;\n\t }\n\t return attributeName;\n\t };\n\t JSXParser.prototype.parseJSXStringLiteralAttribute = function () {\n\t var node = this.createJSXNode();\n\t var token = this.nextJSXToken();\n\t if (token.type !== 8 /* StringLiteral */) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t var raw = this.getTokenRaw(token);\n\t return this.finalize(node, new Node.Literal(token.value, raw));\n\t };\n\t JSXParser.prototype.parseJSXExpressionAttribute = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t this.finishJSX();\n\t if (this.match('}')) {\n\t this.tolerateError('JSX attributes must only be assigned a non-empty expression');\n\t }\n\t var expression = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t };\n\t JSXParser.prototype.parseJSXAttributeValue = function () {\n\t return this.matchJSX('{') ? this.parseJSXExpressionAttribute() :\n\t this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();\n\t };\n\t JSXParser.prototype.parseJSXNameValueAttribute = function () {\n\t var node = this.createJSXNode();\n\t var name = this.parseJSXAttributeName();\n\t var value = null;\n\t if (this.matchJSX('=')) {\n\t this.expectJSX('=');\n\t value = this.parseJSXAttributeValue();\n\t }\n\t return this.finalize(node, new JSXNode.JSXAttribute(name, value));\n\t };\n\t JSXParser.prototype.parseJSXSpreadAttribute = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t this.expectJSX('...');\n\t this.finishJSX();\n\t var argument = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));\n\t };\n\t JSXParser.prototype.parseJSXAttributes = function () {\n\t var attributes = [];\n\t while (!this.matchJSX('/') && !this.matchJSX('>')) {\n\t var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() :\n\t this.parseJSXNameValueAttribute();\n\t attributes.push(attribute);\n\t }\n\t return attributes;\n\t };\n\t JSXParser.prototype.parseJSXOpeningElement = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('<');\n\t var name = this.parseJSXElementName();\n\t var attributes = this.parseJSXAttributes();\n\t var selfClosing = this.matchJSX('/');\n\t if (selfClosing) {\n\t this.expectJSX('/');\n\t }\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t };\n\t JSXParser.prototype.parseJSXBoundaryElement = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('<');\n\t if (this.matchJSX('/')) {\n\t this.expectJSX('/');\n\t var name_3 = this.parseJSXElementName();\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXClosingElement(name_3));\n\t }\n\t var name = this.parseJSXElementName();\n\t var attributes = this.parseJSXAttributes();\n\t var selfClosing = this.matchJSX('/');\n\t if (selfClosing) {\n\t this.expectJSX('/');\n\t }\n\t this.expectJSX('>');\n\t return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));\n\t };\n\t JSXParser.prototype.parseJSXEmptyExpression = function () {\n\t var node = this.createJSXChildNode();\n\t this.collectComments();\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t return this.finalize(node, new JSXNode.JSXEmptyExpression());\n\t };\n\t JSXParser.prototype.parseJSXExpressionContainer = function () {\n\t var node = this.createJSXNode();\n\t this.expectJSX('{');\n\t var expression;\n\t if (this.matchJSX('}')) {\n\t expression = this.parseJSXEmptyExpression();\n\t this.expectJSX('}');\n\t }\n\t else {\n\t this.finishJSX();\n\t expression = this.parseAssignmentExpression();\n\t this.reenterJSX();\n\t }\n\t return this.finalize(node, new JSXNode.JSXExpressionContainer(expression));\n\t };\n\t JSXParser.prototype.parseJSXChildren = function () {\n\t var children = [];\n\t while (!this.scanner.eof()) {\n\t var node = this.createJSXChildNode();\n\t var token = this.nextJSXText();\n\t if (token.start < token.end) {\n\t var raw = this.getTokenRaw(token);\n\t var child = this.finalize(node, new JSXNode.JSXText(token.value, raw));\n\t children.push(child);\n\t }\n\t if (this.scanner.source[this.scanner.index] === '{') {\n\t var container = this.parseJSXExpressionContainer();\n\t children.push(container);\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return children;\n\t };\n\t JSXParser.prototype.parseComplexJSXElement = function (el) {\n\t var stack = [];\n\t while (!this.scanner.eof()) {\n\t el.children = el.children.concat(this.parseJSXChildren());\n\t var node = this.createJSXChildNode();\n\t var element = this.parseJSXBoundaryElement();\n\t if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {\n\t var opening = element;\n\t if (opening.selfClosing) {\n\t var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));\n\t el.children.push(child);\n\t }\n\t else {\n\t stack.push(el);\n\t el = { node: node, opening: opening, closing: null, children: [] };\n\t }\n\t }\n\t if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {\n\t el.closing = element;\n\t var open_1 = getQualifiedElementName(el.opening.name);\n\t var close_1 = getQualifiedElementName(el.closing.name);\n\t if (open_1 !== close_1) {\n\t this.tolerateError('Expected corresponding JSX closing tag for %0', open_1);\n\t }\n\t if (stack.length > 0) {\n\t var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));\n\t el = stack[stack.length - 1];\n\t el.children.push(child);\n\t stack.pop();\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t }\n\t return el;\n\t };\n\t JSXParser.prototype.parseJSXElement = function () {\n\t var node = this.createJSXNode();\n\t var opening = this.parseJSXOpeningElement();\n\t var children = [];\n\t var closing = null;\n\t if (!opening.selfClosing) {\n\t var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children });\n\t children = el.children;\n\t closing = el.closing;\n\t }\n\t return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));\n\t };\n\t JSXParser.prototype.parseJSXRoot = function () {\n\t // Pop the opening '<' added from the lookahead.\n\t if (this.config.tokens) {\n\t this.tokens.pop();\n\t }\n\t this.startJSX();\n\t var element = this.parseJSXElement();\n\t this.finishJSX();\n\t return element;\n\t };\n\t JSXParser.prototype.isStartOfExpression = function () {\n\t return _super.prototype.isStartOfExpression.call(this) || this.match('<');\n\t };\n\t return JSXParser;\n\t}(parser_1.Parser));\n\texports.JSXParser = JSXParser;\n\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// See also tools/generate-unicode-regex.js.\n\tvar Regex = {\n\t // Unicode v8.0.0 NonAsciiIdentifierStart:\n\t NonAsciiIdentifierStart: /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]/,\n\t // Unicode v8.0.0 NonAsciiIdentifierPart:\n\t NonAsciiIdentifierPart: /[\\xAA\\xB5\\xB7\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B4\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1369-\\u1371\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF30-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDEC0-\\uDEF8]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F]|\\uD82C[\\uDC00\\uDC01]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/\n\t};\n\texports.Character = {\n\t /* tslint:disable:no-bitwise */\n\t fromCodePoint: function (cp) {\n\t return (cp < 0x10000) ? String.fromCharCode(cp) :\n\t String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) +\n\t String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023));\n\t },\n\t // https://tc39.github.io/ecma262/#sec-white-space\n\t isWhiteSpace: function (cp) {\n\t return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) ||\n\t (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0);\n\t },\n\t // https://tc39.github.io/ecma262/#sec-line-terminators\n\t isLineTerminator: function (cp) {\n\t return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029);\n\t },\n\t // https://tc39.github.io/ecma262/#sec-names-and-keywords\n\t isIdentifierStart: function (cp) {\n\t return (cp === 0x24) || (cp === 0x5F) ||\n\t (cp >= 0x41 && cp <= 0x5A) ||\n\t (cp >= 0x61 && cp <= 0x7A) ||\n\t (cp === 0x5C) ||\n\t ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp)));\n\t },\n\t isIdentifierPart: function (cp) {\n\t return (cp === 0x24) || (cp === 0x5F) ||\n\t (cp >= 0x41 && cp <= 0x5A) ||\n\t (cp >= 0x61 && cp <= 0x7A) ||\n\t (cp >= 0x30 && cp <= 0x39) ||\n\t (cp === 0x5C) ||\n\t ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp)));\n\t },\n\t // https://tc39.github.io/ecma262/#sec-literals-numeric-literals\n\t isDecimalDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x39); // 0..9\n\t },\n\t isHexDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x39) ||\n\t (cp >= 0x41 && cp <= 0x46) ||\n\t (cp >= 0x61 && cp <= 0x66); // a..f\n\t },\n\t isOctalDigit: function (cp) {\n\t return (cp >= 0x30 && cp <= 0x37); // 0..7\n\t }\n\t};\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __nested_webpack_require_54354__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar jsx_syntax_1 = __nested_webpack_require_54354__(6);\n\t/* tslint:disable:max-classes-per-file */\n\tvar JSXClosingElement = (function () {\n\t function JSXClosingElement(name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement;\n\t this.name = name;\n\t }\n\t return JSXClosingElement;\n\t}());\n\texports.JSXClosingElement = JSXClosingElement;\n\tvar JSXElement = (function () {\n\t function JSXElement(openingElement, children, closingElement) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXElement;\n\t this.openingElement = openingElement;\n\t this.children = children;\n\t this.closingElement = closingElement;\n\t }\n\t return JSXElement;\n\t}());\n\texports.JSXElement = JSXElement;\n\tvar JSXEmptyExpression = (function () {\n\t function JSXEmptyExpression() {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;\n\t }\n\t return JSXEmptyExpression;\n\t}());\n\texports.JSXEmptyExpression = JSXEmptyExpression;\n\tvar JSXExpressionContainer = (function () {\n\t function JSXExpressionContainer(expression) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer;\n\t this.expression = expression;\n\t }\n\t return JSXExpressionContainer;\n\t}());\n\texports.JSXExpressionContainer = JSXExpressionContainer;\n\tvar JSXIdentifier = (function () {\n\t function JSXIdentifier(name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier;\n\t this.name = name;\n\t }\n\t return JSXIdentifier;\n\t}());\n\texports.JSXIdentifier = JSXIdentifier;\n\tvar JSXMemberExpression = (function () {\n\t function JSXMemberExpression(object, property) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return JSXMemberExpression;\n\t}());\n\texports.JSXMemberExpression = JSXMemberExpression;\n\tvar JSXAttribute = (function () {\n\t function JSXAttribute(name, value) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXAttribute;\n\t this.name = name;\n\t this.value = value;\n\t }\n\t return JSXAttribute;\n\t}());\n\texports.JSXAttribute = JSXAttribute;\n\tvar JSXNamespacedName = (function () {\n\t function JSXNamespacedName(namespace, name) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName;\n\t this.namespace = namespace;\n\t this.name = name;\n\t }\n\t return JSXNamespacedName;\n\t}());\n\texports.JSXNamespacedName = JSXNamespacedName;\n\tvar JSXOpeningElement = (function () {\n\t function JSXOpeningElement(name, selfClosing, attributes) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement;\n\t this.name = name;\n\t this.selfClosing = selfClosing;\n\t this.attributes = attributes;\n\t }\n\t return JSXOpeningElement;\n\t}());\n\texports.JSXOpeningElement = JSXOpeningElement;\n\tvar JSXSpreadAttribute = (function () {\n\t function JSXSpreadAttribute(argument) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute;\n\t this.argument = argument;\n\t }\n\t return JSXSpreadAttribute;\n\t}());\n\texports.JSXSpreadAttribute = JSXSpreadAttribute;\n\tvar JSXText = (function () {\n\t function JSXText(value, raw) {\n\t this.type = jsx_syntax_1.JSXSyntax.JSXText;\n\t this.value = value;\n\t this.raw = raw;\n\t }\n\t return JSXText;\n\t}());\n\texports.JSXText = JSXText;\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.JSXSyntax = {\n\t JSXAttribute: 'JSXAttribute',\n\t JSXClosingElement: 'JSXClosingElement',\n\t JSXElement: 'JSXElement',\n\t JSXEmptyExpression: 'JSXEmptyExpression',\n\t JSXExpressionContainer: 'JSXExpressionContainer',\n\t JSXIdentifier: 'JSXIdentifier',\n\t JSXMemberExpression: 'JSXMemberExpression',\n\t JSXNamespacedName: 'JSXNamespacedName',\n\t JSXOpeningElement: 'JSXOpeningElement',\n\t JSXSpreadAttribute: 'JSXSpreadAttribute',\n\t JSXText: 'JSXText'\n\t};\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __nested_webpack_require_58416__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar syntax_1 = __nested_webpack_require_58416__(2);\n\t/* tslint:disable:max-classes-per-file */\n\tvar ArrayExpression = (function () {\n\t function ArrayExpression(elements) {\n\t this.type = syntax_1.Syntax.ArrayExpression;\n\t this.elements = elements;\n\t }\n\t return ArrayExpression;\n\t}());\n\texports.ArrayExpression = ArrayExpression;\n\tvar ArrayPattern = (function () {\n\t function ArrayPattern(elements) {\n\t this.type = syntax_1.Syntax.ArrayPattern;\n\t this.elements = elements;\n\t }\n\t return ArrayPattern;\n\t}());\n\texports.ArrayPattern = ArrayPattern;\n\tvar ArrowFunctionExpression = (function () {\n\t function ArrowFunctionExpression(params, body, expression) {\n\t this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t this.id = null;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = expression;\n\t this.async = false;\n\t }\n\t return ArrowFunctionExpression;\n\t}());\n\texports.ArrowFunctionExpression = ArrowFunctionExpression;\n\tvar AssignmentExpression = (function () {\n\t function AssignmentExpression(operator, left, right) {\n\t this.type = syntax_1.Syntax.AssignmentExpression;\n\t this.operator = operator;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return AssignmentExpression;\n\t}());\n\texports.AssignmentExpression = AssignmentExpression;\n\tvar AssignmentPattern = (function () {\n\t function AssignmentPattern(left, right) {\n\t this.type = syntax_1.Syntax.AssignmentPattern;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return AssignmentPattern;\n\t}());\n\texports.AssignmentPattern = AssignmentPattern;\n\tvar AsyncArrowFunctionExpression = (function () {\n\t function AsyncArrowFunctionExpression(params, body, expression) {\n\t this.type = syntax_1.Syntax.ArrowFunctionExpression;\n\t this.id = null;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = expression;\n\t this.async = true;\n\t }\n\t return AsyncArrowFunctionExpression;\n\t}());\n\texports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;\n\tvar AsyncFunctionDeclaration = (function () {\n\t function AsyncFunctionDeclaration(id, params, body) {\n\t this.type = syntax_1.Syntax.FunctionDeclaration;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = false;\n\t this.async = true;\n\t }\n\t return AsyncFunctionDeclaration;\n\t}());\n\texports.AsyncFunctionDeclaration = AsyncFunctionDeclaration;\n\tvar AsyncFunctionExpression = (function () {\n\t function AsyncFunctionExpression(id, params, body) {\n\t this.type = syntax_1.Syntax.FunctionExpression;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = false;\n\t this.expression = false;\n\t this.async = true;\n\t }\n\t return AsyncFunctionExpression;\n\t}());\n\texports.AsyncFunctionExpression = AsyncFunctionExpression;\n\tvar AwaitExpression = (function () {\n\t function AwaitExpression(argument) {\n\t this.type = syntax_1.Syntax.AwaitExpression;\n\t this.argument = argument;\n\t }\n\t return AwaitExpression;\n\t}());\n\texports.AwaitExpression = AwaitExpression;\n\tvar BinaryExpression = (function () {\n\t function BinaryExpression(operator, left, right) {\n\t var logical = (operator === '||' || operator === '&&');\n\t this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression;\n\t this.operator = operator;\n\t this.left = left;\n\t this.right = right;\n\t }\n\t return BinaryExpression;\n\t}());\n\texports.BinaryExpression = BinaryExpression;\n\tvar BlockStatement = (function () {\n\t function BlockStatement(body) {\n\t this.type = syntax_1.Syntax.BlockStatement;\n\t this.body = body;\n\t }\n\t return BlockStatement;\n\t}());\n\texports.BlockStatement = BlockStatement;\n\tvar BreakStatement = (function () {\n\t function BreakStatement(label) {\n\t this.type = syntax_1.Syntax.BreakStatement;\n\t this.label = label;\n\t }\n\t return BreakStatement;\n\t}());\n\texports.BreakStatement = BreakStatement;\n\tvar CallExpression = (function () {\n\t function CallExpression(callee, args) {\n\t this.type = syntax_1.Syntax.CallExpression;\n\t this.callee = callee;\n\t this.arguments = args;\n\t }\n\t return CallExpression;\n\t}());\n\texports.CallExpression = CallExpression;\n\tvar CatchClause = (function () {\n\t function CatchClause(param, body) {\n\t this.type = syntax_1.Syntax.CatchClause;\n\t this.param = param;\n\t this.body = body;\n\t }\n\t return CatchClause;\n\t}());\n\texports.CatchClause = CatchClause;\n\tvar ClassBody = (function () {\n\t function ClassBody(body) {\n\t this.type = syntax_1.Syntax.ClassBody;\n\t this.body = body;\n\t }\n\t return ClassBody;\n\t}());\n\texports.ClassBody = ClassBody;\n\tvar ClassDeclaration = (function () {\n\t function ClassDeclaration(id, superClass, body) {\n\t this.type = syntax_1.Syntax.ClassDeclaration;\n\t this.id = id;\n\t this.superClass = superClass;\n\t this.body = body;\n\t }\n\t return ClassDeclaration;\n\t}());\n\texports.ClassDeclaration = ClassDeclaration;\n\tvar ClassExpression = (function () {\n\t function ClassExpression(id, superClass, body) {\n\t this.type = syntax_1.Syntax.ClassExpression;\n\t this.id = id;\n\t this.superClass = superClass;\n\t this.body = body;\n\t }\n\t return ClassExpression;\n\t}());\n\texports.ClassExpression = ClassExpression;\n\tvar ComputedMemberExpression = (function () {\n\t function ComputedMemberExpression(object, property) {\n\t this.type = syntax_1.Syntax.MemberExpression;\n\t this.computed = true;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return ComputedMemberExpression;\n\t}());\n\texports.ComputedMemberExpression = ComputedMemberExpression;\n\tvar ConditionalExpression = (function () {\n\t function ConditionalExpression(test, consequent, alternate) {\n\t this.type = syntax_1.Syntax.ConditionalExpression;\n\t this.test = test;\n\t this.consequent = consequent;\n\t this.alternate = alternate;\n\t }\n\t return ConditionalExpression;\n\t}());\n\texports.ConditionalExpression = ConditionalExpression;\n\tvar ContinueStatement = (function () {\n\t function ContinueStatement(label) {\n\t this.type = syntax_1.Syntax.ContinueStatement;\n\t this.label = label;\n\t }\n\t return ContinueStatement;\n\t}());\n\texports.ContinueStatement = ContinueStatement;\n\tvar DebuggerStatement = (function () {\n\t function DebuggerStatement() {\n\t this.type = syntax_1.Syntax.DebuggerStatement;\n\t }\n\t return DebuggerStatement;\n\t}());\n\texports.DebuggerStatement = DebuggerStatement;\n\tvar Directive = (function () {\n\t function Directive(expression, directive) {\n\t this.type = syntax_1.Syntax.ExpressionStatement;\n\t this.expression = expression;\n\t this.directive = directive;\n\t }\n\t return Directive;\n\t}());\n\texports.Directive = Directive;\n\tvar DoWhileStatement = (function () {\n\t function DoWhileStatement(body, test) {\n\t this.type = syntax_1.Syntax.DoWhileStatement;\n\t this.body = body;\n\t this.test = test;\n\t }\n\t return DoWhileStatement;\n\t}());\n\texports.DoWhileStatement = DoWhileStatement;\n\tvar EmptyStatement = (function () {\n\t function EmptyStatement() {\n\t this.type = syntax_1.Syntax.EmptyStatement;\n\t }\n\t return EmptyStatement;\n\t}());\n\texports.EmptyStatement = EmptyStatement;\n\tvar ExportAllDeclaration = (function () {\n\t function ExportAllDeclaration(source) {\n\t this.type = syntax_1.Syntax.ExportAllDeclaration;\n\t this.source = source;\n\t }\n\t return ExportAllDeclaration;\n\t}());\n\texports.ExportAllDeclaration = ExportAllDeclaration;\n\tvar ExportDefaultDeclaration = (function () {\n\t function ExportDefaultDeclaration(declaration) {\n\t this.type = syntax_1.Syntax.ExportDefaultDeclaration;\n\t this.declaration = declaration;\n\t }\n\t return ExportDefaultDeclaration;\n\t}());\n\texports.ExportDefaultDeclaration = ExportDefaultDeclaration;\n\tvar ExportNamedDeclaration = (function () {\n\t function ExportNamedDeclaration(declaration, specifiers, source) {\n\t this.type = syntax_1.Syntax.ExportNamedDeclaration;\n\t this.declaration = declaration;\n\t this.specifiers = specifiers;\n\t this.source = source;\n\t }\n\t return ExportNamedDeclaration;\n\t}());\n\texports.ExportNamedDeclaration = ExportNamedDeclaration;\n\tvar ExportSpecifier = (function () {\n\t function ExportSpecifier(local, exported) {\n\t this.type = syntax_1.Syntax.ExportSpecifier;\n\t this.exported = exported;\n\t this.local = local;\n\t }\n\t return ExportSpecifier;\n\t}());\n\texports.ExportSpecifier = ExportSpecifier;\n\tvar ExpressionStatement = (function () {\n\t function ExpressionStatement(expression) {\n\t this.type = syntax_1.Syntax.ExpressionStatement;\n\t this.expression = expression;\n\t }\n\t return ExpressionStatement;\n\t}());\n\texports.ExpressionStatement = ExpressionStatement;\n\tvar ForInStatement = (function () {\n\t function ForInStatement(left, right, body) {\n\t this.type = syntax_1.Syntax.ForInStatement;\n\t this.left = left;\n\t this.right = right;\n\t this.body = body;\n\t this.each = false;\n\t }\n\t return ForInStatement;\n\t}());\n\texports.ForInStatement = ForInStatement;\n\tvar ForOfStatement = (function () {\n\t function ForOfStatement(left, right, body) {\n\t this.type = syntax_1.Syntax.ForOfStatement;\n\t this.left = left;\n\t this.right = right;\n\t this.body = body;\n\t }\n\t return ForOfStatement;\n\t}());\n\texports.ForOfStatement = ForOfStatement;\n\tvar ForStatement = (function () {\n\t function ForStatement(init, test, update, body) {\n\t this.type = syntax_1.Syntax.ForStatement;\n\t this.init = init;\n\t this.test = test;\n\t this.update = update;\n\t this.body = body;\n\t }\n\t return ForStatement;\n\t}());\n\texports.ForStatement = ForStatement;\n\tvar FunctionDeclaration = (function () {\n\t function FunctionDeclaration(id, params, body, generator) {\n\t this.type = syntax_1.Syntax.FunctionDeclaration;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = generator;\n\t this.expression = false;\n\t this.async = false;\n\t }\n\t return FunctionDeclaration;\n\t}());\n\texports.FunctionDeclaration = FunctionDeclaration;\n\tvar FunctionExpression = (function () {\n\t function FunctionExpression(id, params, body, generator) {\n\t this.type = syntax_1.Syntax.FunctionExpression;\n\t this.id = id;\n\t this.params = params;\n\t this.body = body;\n\t this.generator = generator;\n\t this.expression = false;\n\t this.async = false;\n\t }\n\t return FunctionExpression;\n\t}());\n\texports.FunctionExpression = FunctionExpression;\n\tvar Identifier = (function () {\n\t function Identifier(name) {\n\t this.type = syntax_1.Syntax.Identifier;\n\t this.name = name;\n\t }\n\t return Identifier;\n\t}());\n\texports.Identifier = Identifier;\n\tvar IfStatement = (function () {\n\t function IfStatement(test, consequent, alternate) {\n\t this.type = syntax_1.Syntax.IfStatement;\n\t this.test = test;\n\t this.consequent = consequent;\n\t this.alternate = alternate;\n\t }\n\t return IfStatement;\n\t}());\n\texports.IfStatement = IfStatement;\n\tvar ImportDeclaration = (function () {\n\t function ImportDeclaration(specifiers, source) {\n\t this.type = syntax_1.Syntax.ImportDeclaration;\n\t this.specifiers = specifiers;\n\t this.source = source;\n\t }\n\t return ImportDeclaration;\n\t}());\n\texports.ImportDeclaration = ImportDeclaration;\n\tvar ImportDefaultSpecifier = (function () {\n\t function ImportDefaultSpecifier(local) {\n\t this.type = syntax_1.Syntax.ImportDefaultSpecifier;\n\t this.local = local;\n\t }\n\t return ImportDefaultSpecifier;\n\t}());\n\texports.ImportDefaultSpecifier = ImportDefaultSpecifier;\n\tvar ImportNamespaceSpecifier = (function () {\n\t function ImportNamespaceSpecifier(local) {\n\t this.type = syntax_1.Syntax.ImportNamespaceSpecifier;\n\t this.local = local;\n\t }\n\t return ImportNamespaceSpecifier;\n\t}());\n\texports.ImportNamespaceSpecifier = ImportNamespaceSpecifier;\n\tvar ImportSpecifier = (function () {\n\t function ImportSpecifier(local, imported) {\n\t this.type = syntax_1.Syntax.ImportSpecifier;\n\t this.local = local;\n\t this.imported = imported;\n\t }\n\t return ImportSpecifier;\n\t}());\n\texports.ImportSpecifier = ImportSpecifier;\n\tvar LabeledStatement = (function () {\n\t function LabeledStatement(label, body) {\n\t this.type = syntax_1.Syntax.LabeledStatement;\n\t this.label = label;\n\t this.body = body;\n\t }\n\t return LabeledStatement;\n\t}());\n\texports.LabeledStatement = LabeledStatement;\n\tvar Literal = (function () {\n\t function Literal(value, raw) {\n\t this.type = syntax_1.Syntax.Literal;\n\t this.value = value;\n\t this.raw = raw;\n\t }\n\t return Literal;\n\t}());\n\texports.Literal = Literal;\n\tvar MetaProperty = (function () {\n\t function MetaProperty(meta, property) {\n\t this.type = syntax_1.Syntax.MetaProperty;\n\t this.meta = meta;\n\t this.property = property;\n\t }\n\t return MetaProperty;\n\t}());\n\texports.MetaProperty = MetaProperty;\n\tvar MethodDefinition = (function () {\n\t function MethodDefinition(key, computed, value, kind, isStatic) {\n\t this.type = syntax_1.Syntax.MethodDefinition;\n\t this.key = key;\n\t this.computed = computed;\n\t this.value = value;\n\t this.kind = kind;\n\t this.static = isStatic;\n\t }\n\t return MethodDefinition;\n\t}());\n\texports.MethodDefinition = MethodDefinition;\n\tvar Module = (function () {\n\t function Module(body) {\n\t this.type = syntax_1.Syntax.Program;\n\t this.body = body;\n\t this.sourceType = 'module';\n\t }\n\t return Module;\n\t}());\n\texports.Module = Module;\n\tvar NewExpression = (function () {\n\t function NewExpression(callee, args) {\n\t this.type = syntax_1.Syntax.NewExpression;\n\t this.callee = callee;\n\t this.arguments = args;\n\t }\n\t return NewExpression;\n\t}());\n\texports.NewExpression = NewExpression;\n\tvar ObjectExpression = (function () {\n\t function ObjectExpression(properties) {\n\t this.type = syntax_1.Syntax.ObjectExpression;\n\t this.properties = properties;\n\t }\n\t return ObjectExpression;\n\t}());\n\texports.ObjectExpression = ObjectExpression;\n\tvar ObjectPattern = (function () {\n\t function ObjectPattern(properties) {\n\t this.type = syntax_1.Syntax.ObjectPattern;\n\t this.properties = properties;\n\t }\n\t return ObjectPattern;\n\t}());\n\texports.ObjectPattern = ObjectPattern;\n\tvar Property = (function () {\n\t function Property(kind, key, computed, value, method, shorthand) {\n\t this.type = syntax_1.Syntax.Property;\n\t this.key = key;\n\t this.computed = computed;\n\t this.value = value;\n\t this.kind = kind;\n\t this.method = method;\n\t this.shorthand = shorthand;\n\t }\n\t return Property;\n\t}());\n\texports.Property = Property;\n\tvar RegexLiteral = (function () {\n\t function RegexLiteral(value, raw, pattern, flags) {\n\t this.type = syntax_1.Syntax.Literal;\n\t this.value = value;\n\t this.raw = raw;\n\t this.regex = { pattern: pattern, flags: flags };\n\t }\n\t return RegexLiteral;\n\t}());\n\texports.RegexLiteral = RegexLiteral;\n\tvar RestElement = (function () {\n\t function RestElement(argument) {\n\t this.type = syntax_1.Syntax.RestElement;\n\t this.argument = argument;\n\t }\n\t return RestElement;\n\t}());\n\texports.RestElement = RestElement;\n\tvar ReturnStatement = (function () {\n\t function ReturnStatement(argument) {\n\t this.type = syntax_1.Syntax.ReturnStatement;\n\t this.argument = argument;\n\t }\n\t return ReturnStatement;\n\t}());\n\texports.ReturnStatement = ReturnStatement;\n\tvar Script = (function () {\n\t function Script(body) {\n\t this.type = syntax_1.Syntax.Program;\n\t this.body = body;\n\t this.sourceType = 'script';\n\t }\n\t return Script;\n\t}());\n\texports.Script = Script;\n\tvar SequenceExpression = (function () {\n\t function SequenceExpression(expressions) {\n\t this.type = syntax_1.Syntax.SequenceExpression;\n\t this.expressions = expressions;\n\t }\n\t return SequenceExpression;\n\t}());\n\texports.SequenceExpression = SequenceExpression;\n\tvar SpreadElement = (function () {\n\t function SpreadElement(argument) {\n\t this.type = syntax_1.Syntax.SpreadElement;\n\t this.argument = argument;\n\t }\n\t return SpreadElement;\n\t}());\n\texports.SpreadElement = SpreadElement;\n\tvar StaticMemberExpression = (function () {\n\t function StaticMemberExpression(object, property) {\n\t this.type = syntax_1.Syntax.MemberExpression;\n\t this.computed = false;\n\t this.object = object;\n\t this.property = property;\n\t }\n\t return StaticMemberExpression;\n\t}());\n\texports.StaticMemberExpression = StaticMemberExpression;\n\tvar Super = (function () {\n\t function Super() {\n\t this.type = syntax_1.Syntax.Super;\n\t }\n\t return Super;\n\t}());\n\texports.Super = Super;\n\tvar SwitchCase = (function () {\n\t function SwitchCase(test, consequent) {\n\t this.type = syntax_1.Syntax.SwitchCase;\n\t this.test = test;\n\t this.consequent = consequent;\n\t }\n\t return SwitchCase;\n\t}());\n\texports.SwitchCase = SwitchCase;\n\tvar SwitchStatement = (function () {\n\t function SwitchStatement(discriminant, cases) {\n\t this.type = syntax_1.Syntax.SwitchStatement;\n\t this.discriminant = discriminant;\n\t this.cases = cases;\n\t }\n\t return SwitchStatement;\n\t}());\n\texports.SwitchStatement = SwitchStatement;\n\tvar TaggedTemplateExpression = (function () {\n\t function TaggedTemplateExpression(tag, quasi) {\n\t this.type = syntax_1.Syntax.TaggedTemplateExpression;\n\t this.tag = tag;\n\t this.quasi = quasi;\n\t }\n\t return TaggedTemplateExpression;\n\t}());\n\texports.TaggedTemplateExpression = TaggedTemplateExpression;\n\tvar TemplateElement = (function () {\n\t function TemplateElement(value, tail) {\n\t this.type = syntax_1.Syntax.TemplateElement;\n\t this.value = value;\n\t this.tail = tail;\n\t }\n\t return TemplateElement;\n\t}());\n\texports.TemplateElement = TemplateElement;\n\tvar TemplateLiteral = (function () {\n\t function TemplateLiteral(quasis, expressions) {\n\t this.type = syntax_1.Syntax.TemplateLiteral;\n\t this.quasis = quasis;\n\t this.expressions = expressions;\n\t }\n\t return TemplateLiteral;\n\t}());\n\texports.TemplateLiteral = TemplateLiteral;\n\tvar ThisExpression = (function () {\n\t function ThisExpression() {\n\t this.type = syntax_1.Syntax.ThisExpression;\n\t }\n\t return ThisExpression;\n\t}());\n\texports.ThisExpression = ThisExpression;\n\tvar ThrowStatement = (function () {\n\t function ThrowStatement(argument) {\n\t this.type = syntax_1.Syntax.ThrowStatement;\n\t this.argument = argument;\n\t }\n\t return ThrowStatement;\n\t}());\n\texports.ThrowStatement = ThrowStatement;\n\tvar TryStatement = (function () {\n\t function TryStatement(block, handler, finalizer) {\n\t this.type = syntax_1.Syntax.TryStatement;\n\t this.block = block;\n\t this.handler = handler;\n\t this.finalizer = finalizer;\n\t }\n\t return TryStatement;\n\t}());\n\texports.TryStatement = TryStatement;\n\tvar UnaryExpression = (function () {\n\t function UnaryExpression(operator, argument) {\n\t this.type = syntax_1.Syntax.UnaryExpression;\n\t this.operator = operator;\n\t this.argument = argument;\n\t this.prefix = true;\n\t }\n\t return UnaryExpression;\n\t}());\n\texports.UnaryExpression = UnaryExpression;\n\tvar UpdateExpression = (function () {\n\t function UpdateExpression(operator, argument, prefix) {\n\t this.type = syntax_1.Syntax.UpdateExpression;\n\t this.operator = operator;\n\t this.argument = argument;\n\t this.prefix = prefix;\n\t }\n\t return UpdateExpression;\n\t}());\n\texports.UpdateExpression = UpdateExpression;\n\tvar VariableDeclaration = (function () {\n\t function VariableDeclaration(declarations, kind) {\n\t this.type = syntax_1.Syntax.VariableDeclaration;\n\t this.declarations = declarations;\n\t this.kind = kind;\n\t }\n\t return VariableDeclaration;\n\t}());\n\texports.VariableDeclaration = VariableDeclaration;\n\tvar VariableDeclarator = (function () {\n\t function VariableDeclarator(id, init) {\n\t this.type = syntax_1.Syntax.VariableDeclarator;\n\t this.id = id;\n\t this.init = init;\n\t }\n\t return VariableDeclarator;\n\t}());\n\texports.VariableDeclarator = VariableDeclarator;\n\tvar WhileStatement = (function () {\n\t function WhileStatement(test, body) {\n\t this.type = syntax_1.Syntax.WhileStatement;\n\t this.test = test;\n\t this.body = body;\n\t }\n\t return WhileStatement;\n\t}());\n\texports.WhileStatement = WhileStatement;\n\tvar WithStatement = (function () {\n\t function WithStatement(object, body) {\n\t this.type = syntax_1.Syntax.WithStatement;\n\t this.object = object;\n\t this.body = body;\n\t }\n\t return WithStatement;\n\t}());\n\texports.WithStatement = WithStatement;\n\tvar YieldExpression = (function () {\n\t function YieldExpression(argument, delegate) {\n\t this.type = syntax_1.Syntax.YieldExpression;\n\t this.argument = argument;\n\t this.delegate = delegate;\n\t }\n\t return YieldExpression;\n\t}());\n\texports.YieldExpression = YieldExpression;\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __nested_webpack_require_80491__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __nested_webpack_require_80491__(9);\n\tvar error_handler_1 = __nested_webpack_require_80491__(10);\n\tvar messages_1 = __nested_webpack_require_80491__(11);\n\tvar Node = __nested_webpack_require_80491__(7);\n\tvar scanner_1 = __nested_webpack_require_80491__(12);\n\tvar syntax_1 = __nested_webpack_require_80491__(2);\n\tvar token_1 = __nested_webpack_require_80491__(13);\n\tvar ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder';\n\tvar Parser = (function () {\n\t function Parser(code, options, delegate) {\n\t if (options === void 0) { options = {}; }\n\t this.config = {\n\t range: (typeof options.range === 'boolean') && options.range,\n\t loc: (typeof options.loc === 'boolean') && options.loc,\n\t source: null,\n\t tokens: (typeof options.tokens === 'boolean') && options.tokens,\n\t comment: (typeof options.comment === 'boolean') && options.comment,\n\t tolerant: (typeof options.tolerant === 'boolean') && options.tolerant\n\t };\n\t if (this.config.loc && options.source && options.source !== null) {\n\t this.config.source = String(options.source);\n\t }\n\t this.delegate = delegate;\n\t this.errorHandler = new error_handler_1.ErrorHandler();\n\t this.errorHandler.tolerant = this.config.tolerant;\n\t this.scanner = new scanner_1.Scanner(code, this.errorHandler);\n\t this.scanner.trackComment = this.config.comment;\n\t this.operatorPrecedence = {\n\t ')': 0,\n\t ';': 0,\n\t ',': 0,\n\t '=': 0,\n\t ']': 0,\n\t '||': 1,\n\t '&&': 2,\n\t '|': 3,\n\t '^': 4,\n\t '&': 5,\n\t '==': 6,\n\t '!=': 6,\n\t '===': 6,\n\t '!==': 6,\n\t '<': 7,\n\t '>': 7,\n\t '<=': 7,\n\t '>=': 7,\n\t '<<': 8,\n\t '>>': 8,\n\t '>>>': 8,\n\t '+': 9,\n\t '-': 9,\n\t '*': 11,\n\t '/': 11,\n\t '%': 11\n\t };\n\t this.lookahead = {\n\t type: 2 /* EOF */,\n\t value: '',\n\t lineNumber: this.scanner.lineNumber,\n\t lineStart: 0,\n\t start: 0,\n\t end: 0\n\t };\n\t this.hasLineTerminator = false;\n\t this.context = {\n\t isModule: false,\n\t await: false,\n\t allowIn: true,\n\t allowStrictDirective: true,\n\t allowYield: true,\n\t firstCoverInitializedNameError: null,\n\t isAssignmentTarget: false,\n\t isBindingElement: false,\n\t inFunctionBody: false,\n\t inIteration: false,\n\t inSwitch: false,\n\t labelSet: {},\n\t strict: false\n\t };\n\t this.tokens = [];\n\t this.startMarker = {\n\t index: 0,\n\t line: this.scanner.lineNumber,\n\t column: 0\n\t };\n\t this.lastMarker = {\n\t index: 0,\n\t line: this.scanner.lineNumber,\n\t column: 0\n\t };\n\t this.nextToken();\n\t this.lastMarker = {\n\t index: this.scanner.index,\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t };\n\t }\n\t Parser.prototype.throwError = function (messageFormat) {\n\t var values = [];\n\t for (var _i = 1; _i < arguments.length; _i++) {\n\t values[_i - 1] = arguments[_i];\n\t }\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t return args[idx];\n\t });\n\t var index = this.lastMarker.index;\n\t var line = this.lastMarker.line;\n\t var column = this.lastMarker.column + 1;\n\t throw this.errorHandler.createError(index, line, column, msg);\n\t };\n\t Parser.prototype.tolerateError = function (messageFormat) {\n\t var values = [];\n\t for (var _i = 1; _i < arguments.length; _i++) {\n\t values[_i - 1] = arguments[_i];\n\t }\n\t var args = Array.prototype.slice.call(arguments, 1);\n\t var msg = messageFormat.replace(/%(\\d)/g, function (whole, idx) {\n\t assert_1.assert(idx < args.length, 'Message reference must be in range');\n\t return args[idx];\n\t });\n\t var index = this.lastMarker.index;\n\t var line = this.scanner.lineNumber;\n\t var column = this.lastMarker.column + 1;\n\t this.errorHandler.tolerateError(index, line, column, msg);\n\t };\n\t // Throw an exception because of the token.\n\t Parser.prototype.unexpectedTokenError = function (token, message) {\n\t var msg = message || messages_1.Messages.UnexpectedToken;\n\t var value;\n\t if (token) {\n\t if (!message) {\n\t msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS :\n\t (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier :\n\t (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber :\n\t (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString :\n\t (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate :\n\t messages_1.Messages.UnexpectedToken;\n\t if (token.type === 4 /* Keyword */) {\n\t if (this.scanner.isFutureReservedWord(token.value)) {\n\t msg = messages_1.Messages.UnexpectedReserved;\n\t }\n\t else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) {\n\t msg = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t value = token.value;\n\t }\n\t else {\n\t value = 'ILLEGAL';\n\t }\n\t msg = msg.replace('%0', value);\n\t if (token && typeof token.lineNumber === 'number') {\n\t var index = token.start;\n\t var line = token.lineNumber;\n\t var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column;\n\t var column = token.start - lastMarkerLineStart + 1;\n\t return this.errorHandler.createError(index, line, column, msg);\n\t }\n\t else {\n\t var index = this.lastMarker.index;\n\t var line = this.lastMarker.line;\n\t var column = this.lastMarker.column + 1;\n\t return this.errorHandler.createError(index, line, column, msg);\n\t }\n\t };\n\t Parser.prototype.throwUnexpectedToken = function (token, message) {\n\t throw this.unexpectedTokenError(token, message);\n\t };\n\t Parser.prototype.tolerateUnexpectedToken = function (token, message) {\n\t this.errorHandler.tolerate(this.unexpectedTokenError(token, message));\n\t };\n\t Parser.prototype.collectComments = function () {\n\t if (!this.config.comment) {\n\t this.scanner.scanComments();\n\t }\n\t else {\n\t var comments = this.scanner.scanComments();\n\t if (comments.length > 0 && this.delegate) {\n\t for (var i = 0; i < comments.length; ++i) {\n\t var e = comments[i];\n\t var node = void 0;\n\t node = {\n\t type: e.multiLine ? 'BlockComment' : 'LineComment',\n\t value: this.scanner.source.slice(e.slice[0], e.slice[1])\n\t };\n\t if (this.config.range) {\n\t node.range = e.range;\n\t }\n\t if (this.config.loc) {\n\t node.loc = e.loc;\n\t }\n\t var metadata = {\n\t start: {\n\t line: e.loc.start.line,\n\t column: e.loc.start.column,\n\t offset: e.range[0]\n\t },\n\t end: {\n\t line: e.loc.end.line,\n\t column: e.loc.end.column,\n\t offset: e.range[1]\n\t }\n\t };\n\t this.delegate(node, metadata);\n\t }\n\t }\n\t }\n\t };\n\t // From internal representation to an external structure\n\t Parser.prototype.getTokenRaw = function (token) {\n\t return this.scanner.source.slice(token.start, token.end);\n\t };\n\t Parser.prototype.convertToken = function (token) {\n\t var t = {\n\t type: token_1.TokenName[token.type],\n\t value: this.getTokenRaw(token)\n\t };\n\t if (this.config.range) {\n\t t.range = [token.start, token.end];\n\t }\n\t if (this.config.loc) {\n\t t.loc = {\n\t start: {\n\t line: this.startMarker.line,\n\t column: this.startMarker.column\n\t },\n\t end: {\n\t line: this.scanner.lineNumber,\n\t column: this.scanner.index - this.scanner.lineStart\n\t }\n\t };\n\t }\n\t if (token.type === 9 /* RegularExpression */) {\n\t var pattern = token.pattern;\n\t var flags = token.flags;\n\t t.regex = { pattern: pattern, flags: flags };\n\t }\n\t return t;\n\t };\n\t Parser.prototype.nextToken = function () {\n\t var token = this.lookahead;\n\t this.lastMarker.index = this.scanner.index;\n\t this.lastMarker.line = this.scanner.lineNumber;\n\t this.lastMarker.column = this.scanner.index - this.scanner.lineStart;\n\t this.collectComments();\n\t if (this.scanner.index !== this.startMarker.index) {\n\t this.startMarker.index = this.scanner.index;\n\t this.startMarker.line = this.scanner.lineNumber;\n\t this.startMarker.column = this.scanner.index - this.scanner.lineStart;\n\t }\n\t var next = this.scanner.lex();\n\t this.hasLineTerminator = (token.lineNumber !== next.lineNumber);\n\t if (next && this.context.strict && next.type === 3 /* Identifier */) {\n\t if (this.scanner.isStrictModeReservedWord(next.value)) {\n\t next.type = 4 /* Keyword */;\n\t }\n\t }\n\t this.lookahead = next;\n\t if (this.config.tokens && next.type !== 2 /* EOF */) {\n\t this.tokens.push(this.convertToken(next));\n\t }\n\t return token;\n\t };\n\t Parser.prototype.nextRegexToken = function () {\n\t this.collectComments();\n\t var token = this.scanner.scanRegExp();\n\t if (this.config.tokens) {\n\t // Pop the previous token, '/' or '/='\n\t // This is added from the lookahead token.\n\t this.tokens.pop();\n\t this.tokens.push(this.convertToken(token));\n\t }\n\t // Prime the next lookahead.\n\t this.lookahead = token;\n\t this.nextToken();\n\t return token;\n\t };\n\t Parser.prototype.createNode = function () {\n\t return {\n\t index: this.startMarker.index,\n\t line: this.startMarker.line,\n\t column: this.startMarker.column\n\t };\n\t };\n\t Parser.prototype.startNode = function (token, lastLineStart) {\n\t if (lastLineStart === void 0) { lastLineStart = 0; }\n\t var column = token.start - token.lineStart;\n\t var line = token.lineNumber;\n\t if (column < 0) {\n\t column += lastLineStart;\n\t line--;\n\t }\n\t return {\n\t index: token.start,\n\t line: line,\n\t column: column\n\t };\n\t };\n\t Parser.prototype.finalize = function (marker, node) {\n\t if (this.config.range) {\n\t node.range = [marker.index, this.lastMarker.index];\n\t }\n\t if (this.config.loc) {\n\t node.loc = {\n\t start: {\n\t line: marker.line,\n\t column: marker.column,\n\t },\n\t end: {\n\t line: this.lastMarker.line,\n\t column: this.lastMarker.column\n\t }\n\t };\n\t if (this.config.source) {\n\t node.loc.source = this.config.source;\n\t }\n\t }\n\t if (this.delegate) {\n\t var metadata = {\n\t start: {\n\t line: marker.line,\n\t column: marker.column,\n\t offset: marker.index\n\t },\n\t end: {\n\t line: this.lastMarker.line,\n\t column: this.lastMarker.column,\n\t offset: this.lastMarker.index\n\t }\n\t };\n\t this.delegate(node, metadata);\n\t }\n\t return node;\n\t };\n\t // Expect the next token to match the specified punctuator.\n\t // If not, an exception will be thrown.\n\t Parser.prototype.expect = function (value) {\n\t var token = this.nextToken();\n\t if (token.type !== 7 /* Punctuator */ || token.value !== value) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Quietly expect a comma when in tolerant mode, otherwise delegates to expect().\n\t Parser.prototype.expectCommaSeparator = function () {\n\t if (this.config.tolerant) {\n\t var token = this.lookahead;\n\t if (token.type === 7 /* Punctuator */ && token.value === ',') {\n\t this.nextToken();\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === ';') {\n\t this.nextToken();\n\t this.tolerateUnexpectedToken(token);\n\t }\n\t else {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);\n\t }\n\t }\n\t else {\n\t this.expect(',');\n\t }\n\t };\n\t // Expect the next token to match the specified keyword.\n\t // If not, an exception will be thrown.\n\t Parser.prototype.expectKeyword = function (keyword) {\n\t var token = this.nextToken();\n\t if (token.type !== 4 /* Keyword */ || token.value !== keyword) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t };\n\t // Return true if the next token matches the specified punctuator.\n\t Parser.prototype.match = function (value) {\n\t return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value;\n\t };\n\t // Return true if the next token matches the specified keyword\n\t Parser.prototype.matchKeyword = function (keyword) {\n\t return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword;\n\t };\n\t // Return true if the next token matches the specified contextual keyword\n\t // (where an identifier is sometimes a keyword depending on the context)\n\t Parser.prototype.matchContextualKeyword = function (keyword) {\n\t return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword;\n\t };\n\t // Return true if the next token is an assignment operator\n\t Parser.prototype.matchAssign = function () {\n\t if (this.lookahead.type !== 7 /* Punctuator */) {\n\t return false;\n\t }\n\t var op = this.lookahead.value;\n\t return op === '=' ||\n\t op === '*=' ||\n\t op === '**=' ||\n\t op === '/=' ||\n\t op === '%=' ||\n\t op === '+=' ||\n\t op === '-=' ||\n\t op === '<<=' ||\n\t op === '>>=' ||\n\t op === '>>>=' ||\n\t op === '&=' ||\n\t op === '^=' ||\n\t op === '|=';\n\t };\n\t // Cover grammar support.\n\t //\n\t // When an assignment expression position starts with an left parenthesis, the determination of the type\n\t // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead)\n\t // or the first comma. This situation also defers the determination of all the expressions nested in the pair.\n\t //\n\t // There are three productions that can be parsed in a parentheses pair that needs to be determined\n\t // after the outermost pair is closed. They are:\n\t //\n\t // 1. AssignmentExpression\n\t // 2. BindingElements\n\t // 3. AssignmentTargets\n\t //\n\t // In order to avoid exponential backtracking, we use two flags to denote if the production can be\n\t // binding element or assignment target.\n\t //\n\t // The three productions have the relationship:\n\t //\n\t // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression\n\t //\n\t // with a single exception that CoverInitializedName when used directly in an Expression, generates\n\t // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the\n\t // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair.\n\t //\n\t // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not\n\t // effect the current flags. This means the production the parser parses is only used as an expression. Therefore\n\t // the CoverInitializedName check is conducted.\n\t //\n\t // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates\n\t // the flags outside of the parser. This means the production the parser parses is used as a part of a potential\n\t // pattern. The CoverInitializedName check is deferred.\n\t Parser.prototype.isolateCoverGrammar = function (parseFunction) {\n\t var previousIsBindingElement = this.context.isBindingElement;\n\t var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t this.context.isBindingElement = true;\n\t this.context.isAssignmentTarget = true;\n\t this.context.firstCoverInitializedNameError = null;\n\t var result = parseFunction.call(this);\n\t if (this.context.firstCoverInitializedNameError !== null) {\n\t this.throwUnexpectedToken(this.context.firstCoverInitializedNameError);\n\t }\n\t this.context.isBindingElement = previousIsBindingElement;\n\t this.context.isAssignmentTarget = previousIsAssignmentTarget;\n\t this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError;\n\t return result;\n\t };\n\t Parser.prototype.inheritCoverGrammar = function (parseFunction) {\n\t var previousIsBindingElement = this.context.isBindingElement;\n\t var previousIsAssignmentTarget = this.context.isAssignmentTarget;\n\t var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;\n\t this.context.isBindingElement = true;\n\t this.context.isAssignmentTarget = true;\n\t this.context.firstCoverInitializedNameError = null;\n\t var result = parseFunction.call(this);\n\t this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement;\n\t this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget;\n\t this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError;\n\t return result;\n\t };\n\t Parser.prototype.consumeSemicolon = function () {\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else if (!this.hasLineTerminator) {\n\t if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t this.lastMarker.index = this.startMarker.index;\n\t this.lastMarker.line = this.startMarker.line;\n\t this.lastMarker.column = this.startMarker.column;\n\t }\n\t };\n\t // https://tc39.github.io/ecma262/#sec-primary-expression\n\t Parser.prototype.parsePrimaryExpression = function () {\n\t var node = this.createNode();\n\t var expr;\n\t var token, raw;\n\t switch (this.lookahead.type) {\n\t case 3 /* Identifier */:\n\t if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t }\n\t expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t break;\n\t case 6 /* NumericLiteral */:\n\t case 8 /* StringLiteral */:\n\t if (this.context.strict && this.lookahead.octal) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(token.value, raw));\n\t break;\n\t case 1 /* BooleanLiteral */:\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(token.value === 'true', raw));\n\t break;\n\t case 5 /* NullLiteral */:\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t token = this.nextToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.Literal(null, raw));\n\t break;\n\t case 10 /* Template */:\n\t expr = this.parseTemplateLiteral();\n\t break;\n\t case 7 /* Punctuator */:\n\t switch (this.lookahead.value) {\n\t case '(':\n\t this.context.isBindingElement = false;\n\t expr = this.inheritCoverGrammar(this.parseGroupExpression);\n\t break;\n\t case '[':\n\t expr = this.inheritCoverGrammar(this.parseArrayInitializer);\n\t break;\n\t case '{':\n\t expr = this.inheritCoverGrammar(this.parseObjectInitializer);\n\t break;\n\t case '/':\n\t case '/=':\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t this.scanner.index = this.startMarker.index;\n\t token = this.nextRegexToken();\n\t raw = this.getTokenRaw(token);\n\t expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));\n\t break;\n\t default:\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t break;\n\t case 4 /* Keyword */:\n\t if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) {\n\t expr = this.parseIdentifierName();\n\t }\n\t else if (!this.context.strict && this.matchKeyword('let')) {\n\t expr = this.finalize(node, new Node.Identifier(this.nextToken().value));\n\t }\n\t else {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t if (this.matchKeyword('function')) {\n\t expr = this.parseFunctionExpression();\n\t }\n\t else if (this.matchKeyword('this')) {\n\t this.nextToken();\n\t expr = this.finalize(node, new Node.ThisExpression());\n\t }\n\t else if (this.matchKeyword('class')) {\n\t expr = this.parseClassExpression();\n\t }\n\t else {\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t break;\n\t default:\n\t expr = this.throwUnexpectedToken(this.nextToken());\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-array-initializer\n\t Parser.prototype.parseSpreadElement = function () {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t return this.finalize(node, new Node.SpreadElement(arg));\n\t };\n\t Parser.prototype.parseArrayInitializer = function () {\n\t var node = this.createNode();\n\t var elements = [];\n\t this.expect('[');\n\t while (!this.match(']')) {\n\t if (this.match(',')) {\n\t this.nextToken();\n\t elements.push(null);\n\t }\n\t else if (this.match('...')) {\n\t var element = this.parseSpreadElement();\n\t if (!this.match(']')) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t this.expect(',');\n\t }\n\t elements.push(element);\n\t }\n\t else {\n\t elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t if (!this.match(']')) {\n\t this.expect(',');\n\t }\n\t }\n\t }\n\t this.expect(']');\n\t return this.finalize(node, new Node.ArrayExpression(elements));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-object-initializer\n\t Parser.prototype.parsePropertyMethod = function (params) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = params.simple;\n\t var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);\n\t if (this.context.strict && params.firstRestricted) {\n\t this.tolerateUnexpectedToken(params.firstRestricted, params.message);\n\t }\n\t if (this.context.strict && params.stricted) {\n\t this.tolerateUnexpectedToken(params.stricted, params.message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t return body;\n\t };\n\t Parser.prototype.parsePropertyMethodFunction = function () {\n\t var isGenerator = false;\n\t var node = this.createNode();\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var params = this.parseFormalParameters();\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t };\n\t Parser.prototype.parsePropertyMethodAsyncFunction = function () {\n\t var node = this.createNode();\n\t var previousAllowYield = this.context.allowYield;\n\t var previousAwait = this.context.await;\n\t this.context.allowYield = false;\n\t this.context.await = true;\n\t var params = this.parseFormalParameters();\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t this.context.await = previousAwait;\n\t return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));\n\t };\n\t Parser.prototype.parseObjectPropertyKey = function () {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var key;\n\t switch (token.type) {\n\t case 8 /* StringLiteral */:\n\t case 6 /* NumericLiteral */:\n\t if (this.context.strict && token.octal) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t var raw = this.getTokenRaw(token);\n\t key = this.finalize(node, new Node.Literal(token.value, raw));\n\t break;\n\t case 3 /* Identifier */:\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 4 /* Keyword */:\n\t key = this.finalize(node, new Node.Identifier(token.value));\n\t break;\n\t case 7 /* Punctuator */:\n\t if (token.value === '[') {\n\t key = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.expect(']');\n\t }\n\t else {\n\t key = this.throwUnexpectedToken(token);\n\t }\n\t break;\n\t default:\n\t key = this.throwUnexpectedToken(token);\n\t }\n\t return key;\n\t };\n\t Parser.prototype.isPropertyKey = function (key, value) {\n\t return (key.type === syntax_1.Syntax.Identifier && key.name === value) ||\n\t (key.type === syntax_1.Syntax.Literal && key.value === value);\n\t };\n\t Parser.prototype.parseObjectProperty = function (hasProto) {\n\t var node = this.createNode();\n\t var token = this.lookahead;\n\t var kind;\n\t var key = null;\n\t var value = null;\n\t var computed = false;\n\t var method = false;\n\t var shorthand = false;\n\t var isAsync = false;\n\t if (token.type === 3 /* Identifier */) {\n\t var id = token.value;\n\t this.nextToken();\n\t computed = this.match('[');\n\t isAsync = !this.hasLineTerminator && (id === 'async') &&\n\t !this.match(':') && !this.match('(') && !this.match('*') && !this.match(',');\n\t key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));\n\t }\n\t else if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t }\n\t var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) {\n\t kind = 'get';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.context.allowYield = false;\n\t value = this.parseGetterMethod();\n\t }\n\t else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) {\n\t kind = 'set';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseSetterMethod();\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t kind = 'init';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseGeneratorMethod();\n\t method = true;\n\t }\n\t else {\n\t if (!key) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t kind = 'init';\n\t if (this.match(':') && !isAsync) {\n\t if (!computed && this.isPropertyKey(key, '__proto__')) {\n\t if (hasProto.value) {\n\t this.tolerateError(messages_1.Messages.DuplicateProtoProperty);\n\t }\n\t hasProto.value = true;\n\t }\n\t this.nextToken();\n\t value = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else if (this.match('(')) {\n\t value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t method = true;\n\t }\n\t else if (token.type === 3 /* Identifier */) {\n\t var id = this.finalize(node, new Node.Identifier(token.value));\n\t if (this.match('=')) {\n\t this.context.firstCoverInitializedNameError = this.lookahead;\n\t this.nextToken();\n\t shorthand = true;\n\t var init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t value = this.finalize(node, new Node.AssignmentPattern(id, init));\n\t }\n\t else {\n\t shorthand = true;\n\t value = id;\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));\n\t };\n\t Parser.prototype.parseObjectInitializer = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var properties = [];\n\t var hasProto = { value: false };\n\t while (!this.match('}')) {\n\t properties.push(this.parseObjectProperty(hasProto));\n\t if (!this.match('}')) {\n\t this.expectCommaSeparator();\n\t }\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.ObjectExpression(properties));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-template-literals\n\t Parser.prototype.parseTemplateHead = function () {\n\t assert_1.assert(this.lookahead.head, 'Template literal must start with a template head');\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var raw = token.value;\n\t var cooked = token.cooked;\n\t return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t };\n\t Parser.prototype.parseTemplateElement = function () {\n\t if (this.lookahead.type !== 10 /* Template */) {\n\t this.throwUnexpectedToken();\n\t }\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t var raw = token.value;\n\t var cooked = token.cooked;\n\t return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail));\n\t };\n\t Parser.prototype.parseTemplateLiteral = function () {\n\t var node = this.createNode();\n\t var expressions = [];\n\t var quasis = [];\n\t var quasi = this.parseTemplateHead();\n\t quasis.push(quasi);\n\t while (!quasi.tail) {\n\t expressions.push(this.parseExpression());\n\t quasi = this.parseTemplateElement();\n\t quasis.push(quasi);\n\t }\n\t return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-grouping-operator\n\t Parser.prototype.reinterpretExpressionAsPattern = function (expr) {\n\t switch (expr.type) {\n\t case syntax_1.Syntax.Identifier:\n\t case syntax_1.Syntax.MemberExpression:\n\t case syntax_1.Syntax.RestElement:\n\t case syntax_1.Syntax.AssignmentPattern:\n\t break;\n\t case syntax_1.Syntax.SpreadElement:\n\t expr.type = syntax_1.Syntax.RestElement;\n\t this.reinterpretExpressionAsPattern(expr.argument);\n\t break;\n\t case syntax_1.Syntax.ArrayExpression:\n\t expr.type = syntax_1.Syntax.ArrayPattern;\n\t for (var i = 0; i < expr.elements.length; i++) {\n\t if (expr.elements[i] !== null) {\n\t this.reinterpretExpressionAsPattern(expr.elements[i]);\n\t }\n\t }\n\t break;\n\t case syntax_1.Syntax.ObjectExpression:\n\t expr.type = syntax_1.Syntax.ObjectPattern;\n\t for (var i = 0; i < expr.properties.length; i++) {\n\t this.reinterpretExpressionAsPattern(expr.properties[i].value);\n\t }\n\t break;\n\t case syntax_1.Syntax.AssignmentExpression:\n\t expr.type = syntax_1.Syntax.AssignmentPattern;\n\t delete expr.operator;\n\t this.reinterpretExpressionAsPattern(expr.left);\n\t break;\n\t default:\n\t // Allow other node type for tolerant parsing.\n\t break;\n\t }\n\t };\n\t Parser.prototype.parseGroupExpression = function () {\n\t var expr;\n\t this.expect('(');\n\t if (this.match(')')) {\n\t this.nextToken();\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [],\n\t async: false\n\t };\n\t }\n\t else {\n\t var startToken = this.lookahead;\n\t var params = [];\n\t if (this.match('...')) {\n\t expr = this.parseRestElement(params);\n\t this.expect(')');\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [expr],\n\t async: false\n\t };\n\t }\n\t else {\n\t var arrow = false;\n\t this.context.isBindingElement = true;\n\t expr = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t if (this.match(',')) {\n\t var expressions = [];\n\t this.context.isAssignmentTarget = false;\n\t expressions.push(expr);\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (!this.match(',')) {\n\t break;\n\t }\n\t this.nextToken();\n\t if (this.match(')')) {\n\t this.nextToken();\n\t for (var i = 0; i < expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expressions[i]);\n\t }\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: expressions,\n\t async: false\n\t };\n\t }\n\t else if (this.match('...')) {\n\t if (!this.context.isBindingElement) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t expressions.push(this.parseRestElement(params));\n\t this.expect(')');\n\t if (!this.match('=>')) {\n\t this.expect('=>');\n\t }\n\t this.context.isBindingElement = false;\n\t for (var i = 0; i < expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expressions[i]);\n\t }\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: expressions,\n\t async: false\n\t };\n\t }\n\t else {\n\t expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t if (arrow) {\n\t break;\n\t }\n\t }\n\t if (!arrow) {\n\t expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t }\n\t }\n\t if (!arrow) {\n\t this.expect(')');\n\t if (this.match('=>')) {\n\t if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') {\n\t arrow = true;\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [expr],\n\t async: false\n\t };\n\t }\n\t if (!arrow) {\n\t if (!this.context.isBindingElement) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t if (expr.type === syntax_1.Syntax.SequenceExpression) {\n\t for (var i = 0; i < expr.expressions.length; i++) {\n\t this.reinterpretExpressionAsPattern(expr.expressions[i]);\n\t }\n\t }\n\t else {\n\t this.reinterpretExpressionAsPattern(expr);\n\t }\n\t var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]);\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: parameters,\n\t async: false\n\t };\n\t }\n\t }\n\t this.context.isBindingElement = false;\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions\n\t Parser.prototype.parseArguments = function () {\n\t this.expect('(');\n\t var args = [];\n\t if (!this.match(')')) {\n\t while (true) {\n\t var expr = this.match('...') ? this.parseSpreadElement() :\n\t this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t args.push(expr);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expectCommaSeparator();\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return args;\n\t };\n\t Parser.prototype.isIdentifierName = function (token) {\n\t return token.type === 3 /* Identifier */ ||\n\t token.type === 4 /* Keyword */ ||\n\t token.type === 1 /* BooleanLiteral */ ||\n\t token.type === 5 /* NullLiteral */;\n\t };\n\t Parser.prototype.parseIdentifierName = function () {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t if (!this.isIdentifierName(token)) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new Node.Identifier(token.value));\n\t };\n\t Parser.prototype.parseNewExpression = function () {\n\t var node = this.createNode();\n\t var id = this.parseIdentifierName();\n\t assert_1.assert(id.name === 'new', 'New expression must start with `new`');\n\t var expr;\n\t if (this.match('.')) {\n\t this.nextToken();\n\t if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') {\n\t var property = this.parseIdentifierName();\n\t expr = new Node.MetaProperty(id, property);\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t else {\n\t var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression);\n\t var args = this.match('(') ? this.parseArguments() : [];\n\t expr = new Node.NewExpression(callee, args);\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t return this.finalize(node, expr);\n\t };\n\t Parser.prototype.parseAsyncArgument = function () {\n\t var arg = this.parseAssignmentExpression();\n\t this.context.firstCoverInitializedNameError = null;\n\t return arg;\n\t };\n\t Parser.prototype.parseAsyncArguments = function () {\n\t this.expect('(');\n\t var args = [];\n\t if (!this.match(')')) {\n\t while (true) {\n\t var expr = this.match('...') ? this.parseSpreadElement() :\n\t this.isolateCoverGrammar(this.parseAsyncArgument);\n\t args.push(expr);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expectCommaSeparator();\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return args;\n\t };\n\t Parser.prototype.parseLeftHandSideExpressionAllowCall = function () {\n\t var startToken = this.lookahead;\n\t var maybeAsync = this.matchContextualKeyword('async');\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t var expr;\n\t if (this.matchKeyword('super') && this.context.inFunctionBody) {\n\t expr = this.createNode();\n\t this.nextToken();\n\t expr = this.finalize(expr, new Node.Super());\n\t if (!this.match('(') && !this.match('.') && !this.match('[')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t else {\n\t expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t }\n\t while (true) {\n\t if (this.match('.')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('.');\n\t var property = this.parseIdentifierName();\n\t expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));\n\t }\n\t else if (this.match('(')) {\n\t var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber);\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = false;\n\t var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();\n\t expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args));\n\t if (asyncArrow && this.match('=>')) {\n\t for (var i = 0; i < args.length; ++i) {\n\t this.reinterpretExpressionAsPattern(args[i]);\n\t }\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: args,\n\t async: true\n\t };\n\t }\n\t }\n\t else if (this.match('[')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('[');\n\t var property = this.isolateCoverGrammar(this.parseExpression);\n\t this.expect(']');\n\t expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));\n\t }\n\t else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t var quasi = this.parseTemplateLiteral();\n\t expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t this.context.allowIn = previousAllowIn;\n\t return expr;\n\t };\n\t Parser.prototype.parseSuper = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('super');\n\t if (!this.match('[') && !this.match('.')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t return this.finalize(node, new Node.Super());\n\t };\n\t Parser.prototype.parseLeftHandSideExpression = function () {\n\t assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.');\n\t var node = this.startNode(this.lookahead);\n\t var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() :\n\t this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression);\n\t while (true) {\n\t if (this.match('[')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('[');\n\t var property = this.isolateCoverGrammar(this.parseExpression);\n\t this.expect(']');\n\t expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));\n\t }\n\t else if (this.match('.')) {\n\t this.context.isBindingElement = false;\n\t this.context.isAssignmentTarget = true;\n\t this.expect('.');\n\t var property = this.parseIdentifierName();\n\t expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));\n\t }\n\t else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) {\n\t var quasi = this.parseTemplateLiteral();\n\t expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-update-expressions\n\t Parser.prototype.parseUpdateExpression = function () {\n\t var expr;\n\t var startToken = this.lookahead;\n\t if (this.match('++') || this.match('--')) {\n\t var node = this.startNode(startToken);\n\t var token = this.nextToken();\n\t expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t this.tolerateError(messages_1.Messages.StrictLHSPrefix);\n\t }\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t var prefix = true;\n\t expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix));\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else {\n\t expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) {\n\t if (this.match('++') || this.match('--')) {\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) {\n\t this.tolerateError(messages_1.Messages.StrictLHSPostfix);\n\t }\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var operator = this.nextToken().value;\n\t var prefix = false;\n\t expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-unary-operators\n\t Parser.prototype.parseAwaitExpression = function () {\n\t var node = this.createNode();\n\t this.nextToken();\n\t var argument = this.parseUnaryExpression();\n\t return this.finalize(node, new Node.AwaitExpression(argument));\n\t };\n\t Parser.prototype.parseUnaryExpression = function () {\n\t var expr;\n\t if (this.match('+') || this.match('-') || this.match('~') || this.match('!') ||\n\t this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) {\n\t var node = this.startNode(this.lookahead);\n\t var token = this.nextToken();\n\t expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t expr = this.finalize(node, new Node.UnaryExpression(token.value, expr));\n\t if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) {\n\t this.tolerateError(messages_1.Messages.StrictDelete);\n\t }\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else if (this.context.await && this.matchContextualKeyword('await')) {\n\t expr = this.parseAwaitExpression();\n\t }\n\t else {\n\t expr = this.parseUpdateExpression();\n\t }\n\t return expr;\n\t };\n\t Parser.prototype.parseExponentiationExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseUnaryExpression);\n\t if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) {\n\t this.nextToken();\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var left = expr;\n\t var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right));\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-exp-operator\n\t // https://tc39.github.io/ecma262/#sec-multiplicative-operators\n\t // https://tc39.github.io/ecma262/#sec-additive-operators\n\t // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators\n\t // https://tc39.github.io/ecma262/#sec-relational-operators\n\t // https://tc39.github.io/ecma262/#sec-equality-operators\n\t // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators\n\t // https://tc39.github.io/ecma262/#sec-binary-logical-operators\n\t Parser.prototype.binaryPrecedence = function (token) {\n\t var op = token.value;\n\t var precedence;\n\t if (token.type === 7 /* Punctuator */) {\n\t precedence = this.operatorPrecedence[op] || 0;\n\t }\n\t else if (token.type === 4 /* Keyword */) {\n\t precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0;\n\t }\n\t else {\n\t precedence = 0;\n\t }\n\t return precedence;\n\t };\n\t Parser.prototype.parseBinaryExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseExponentiationExpression);\n\t var token = this.lookahead;\n\t var prec = this.binaryPrecedence(token);\n\t if (prec > 0) {\n\t this.nextToken();\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var markers = [startToken, this.lookahead];\n\t var left = expr;\n\t var right = this.isolateCoverGrammar(this.parseExponentiationExpression);\n\t var stack = [left, token.value, right];\n\t var precedences = [prec];\n\t while (true) {\n\t prec = this.binaryPrecedence(this.lookahead);\n\t if (prec <= 0) {\n\t break;\n\t }\n\t // Reduce: make a binary expression from the three topmost entries.\n\t while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) {\n\t right = stack.pop();\n\t var operator = stack.pop();\n\t precedences.pop();\n\t left = stack.pop();\n\t markers.pop();\n\t var node = this.startNode(markers[markers.length - 1]);\n\t stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));\n\t }\n\t // Shift.\n\t stack.push(this.nextToken().value);\n\t precedences.push(prec);\n\t markers.push(this.lookahead);\n\t stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));\n\t }\n\t // Final reduce to clean-up the stack.\n\t var i = stack.length - 1;\n\t expr = stack[i];\n\t var lastMarker = markers.pop();\n\t while (i > 1) {\n\t var marker = markers.pop();\n\t var lastLineStart = lastMarker && lastMarker.lineStart;\n\t var node = this.startNode(marker, lastLineStart);\n\t var operator = stack[i - 1];\n\t expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr));\n\t i -= 2;\n\t lastMarker = marker;\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-conditional-operator\n\t Parser.prototype.parseConditionalExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.inheritCoverGrammar(this.parseBinaryExpression);\n\t if (this.match('?')) {\n\t this.nextToken();\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowIn = previousAllowIn;\n\t this.expect(':');\n\t var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate));\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-assignment-operators\n\t Parser.prototype.checkPatternParam = function (options, param) {\n\t switch (param.type) {\n\t case syntax_1.Syntax.Identifier:\n\t this.validateParam(options, param, param.name);\n\t break;\n\t case syntax_1.Syntax.RestElement:\n\t this.checkPatternParam(options, param.argument);\n\t break;\n\t case syntax_1.Syntax.AssignmentPattern:\n\t this.checkPatternParam(options, param.left);\n\t break;\n\t case syntax_1.Syntax.ArrayPattern:\n\t for (var i = 0; i < param.elements.length; i++) {\n\t if (param.elements[i] !== null) {\n\t this.checkPatternParam(options, param.elements[i]);\n\t }\n\t }\n\t break;\n\t case syntax_1.Syntax.ObjectPattern:\n\t for (var i = 0; i < param.properties.length; i++) {\n\t this.checkPatternParam(options, param.properties[i].value);\n\t }\n\t break;\n\t default:\n\t break;\n\t }\n\t options.simple = options.simple && (param instanceof Node.Identifier);\n\t };\n\t Parser.prototype.reinterpretAsCoverFormalsList = function (expr) {\n\t var params = [expr];\n\t var options;\n\t var asyncArrow = false;\n\t switch (expr.type) {\n\t case syntax_1.Syntax.Identifier:\n\t break;\n\t case ArrowParameterPlaceHolder:\n\t params = expr.params;\n\t asyncArrow = expr.async;\n\t break;\n\t default:\n\t return null;\n\t }\n\t options = {\n\t simple: true,\n\t paramSet: {}\n\t };\n\t for (var i = 0; i < params.length; ++i) {\n\t var param = params[i];\n\t if (param.type === syntax_1.Syntax.AssignmentPattern) {\n\t if (param.right.type === syntax_1.Syntax.YieldExpression) {\n\t if (param.right.argument) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t param.right.type = syntax_1.Syntax.Identifier;\n\t param.right.name = 'yield';\n\t delete param.right.argument;\n\t delete param.right.delegate;\n\t }\n\t }\n\t else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t this.checkPatternParam(options, param);\n\t params[i] = param;\n\t }\n\t if (this.context.strict || !this.context.allowYield) {\n\t for (var i = 0; i < params.length; ++i) {\n\t var param = params[i];\n\t if (param.type === syntax_1.Syntax.YieldExpression) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t }\n\t if (options.message === messages_1.Messages.StrictParamDupe) {\n\t var token = this.context.strict ? options.stricted : options.firstRestricted;\n\t this.throwUnexpectedToken(token, options.message);\n\t }\n\t return {\n\t simple: options.simple,\n\t params: params,\n\t stricted: options.stricted,\n\t firstRestricted: options.firstRestricted,\n\t message: options.message\n\t };\n\t };\n\t Parser.prototype.parseAssignmentExpression = function () {\n\t var expr;\n\t if (!this.context.allowYield && this.matchKeyword('yield')) {\n\t expr = this.parseYieldExpression();\n\t }\n\t else {\n\t var startToken = this.lookahead;\n\t var token = startToken;\n\t expr = this.parseConditionalExpression();\n\t if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') {\n\t if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) {\n\t var arg = this.parsePrimaryExpression();\n\t this.reinterpretExpressionAsPattern(arg);\n\t expr = {\n\t type: ArrowParameterPlaceHolder,\n\t params: [arg],\n\t async: true\n\t };\n\t }\n\t }\n\t if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) {\n\t // https://tc39.github.io/ecma262/#sec-arrow-function-definitions\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t var isAsync = expr.async;\n\t var list = this.reinterpretAsCoverFormalsList(expr);\n\t if (list) {\n\t if (this.hasLineTerminator) {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t }\n\t this.context.firstCoverInitializedNameError = null;\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = list.simple;\n\t var previousAllowYield = this.context.allowYield;\n\t var previousAwait = this.context.await;\n\t this.context.allowYield = true;\n\t this.context.await = isAsync;\n\t var node = this.startNode(startToken);\n\t this.expect('=>');\n\t var body = void 0;\n\t if (this.match('{')) {\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = true;\n\t body = this.parseFunctionSourceElements();\n\t this.context.allowIn = previousAllowIn;\n\t }\n\t else {\n\t body = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t var expression = body.type !== syntax_1.Syntax.BlockStatement;\n\t if (this.context.strict && list.firstRestricted) {\n\t this.throwUnexpectedToken(list.firstRestricted, list.message);\n\t }\n\t if (this.context.strict && list.stricted) {\n\t this.tolerateUnexpectedToken(list.stricted, list.message);\n\t }\n\t expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) :\n\t this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression));\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.allowYield = previousAllowYield;\n\t this.context.await = previousAwait;\n\t }\n\t }\n\t else {\n\t if (this.matchAssign()) {\n\t if (!this.context.isAssignmentTarget) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);\n\t }\n\t if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) {\n\t var id = expr;\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment);\n\t }\n\t if (this.scanner.isStrictModeReservedWord(id.name)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t }\n\t if (!this.match('=')) {\n\t this.context.isAssignmentTarget = false;\n\t this.context.isBindingElement = false;\n\t }\n\t else {\n\t this.reinterpretExpressionAsPattern(expr);\n\t }\n\t token = this.nextToken();\n\t var operator = token.value;\n\t var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right));\n\t this.context.firstCoverInitializedNameError = null;\n\t }\n\t }\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-comma-operator\n\t Parser.prototype.parseExpression = function () {\n\t var startToken = this.lookahead;\n\t var expr = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t if (this.match(',')) {\n\t var expressions = [];\n\t expressions.push(expr);\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (!this.match(',')) {\n\t break;\n\t }\n\t this.nextToken();\n\t expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));\n\t }\n\t return expr;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-block\n\t Parser.prototype.parseStatementListItem = function () {\n\t var statement;\n\t this.context.isAssignmentTarget = true;\n\t this.context.isBindingElement = true;\n\t if (this.lookahead.type === 4 /* Keyword */) {\n\t switch (this.lookahead.value) {\n\t case 'export':\n\t if (!this.context.isModule) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration);\n\t }\n\t statement = this.parseExportDeclaration();\n\t break;\n\t case 'import':\n\t if (!this.context.isModule) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration);\n\t }\n\t statement = this.parseImportDeclaration();\n\t break;\n\t case 'const':\n\t statement = this.parseLexicalDeclaration({ inFor: false });\n\t break;\n\t case 'function':\n\t statement = this.parseFunctionDeclaration();\n\t break;\n\t case 'class':\n\t statement = this.parseClassDeclaration();\n\t break;\n\t case 'let':\n\t statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement();\n\t break;\n\t default:\n\t statement = this.parseStatement();\n\t break;\n\t }\n\t }\n\t else {\n\t statement = this.parseStatement();\n\t }\n\t return statement;\n\t };\n\t Parser.prototype.parseBlock = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var block = [];\n\t while (true) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t block.push(this.parseStatementListItem());\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.BlockStatement(block));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-let-and-const-declarations\n\t Parser.prototype.parseLexicalBinding = function (kind, options) {\n\t var node = this.createNode();\n\t var params = [];\n\t var id = this.parsePattern(params, kind);\n\t if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateError(messages_1.Messages.StrictVarName);\n\t }\n\t }\n\t var init = null;\n\t if (kind === 'const') {\n\t if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) {\n\t if (this.match('=')) {\n\t this.nextToken();\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else {\n\t this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const');\n\t }\n\t }\n\t }\n\t else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) {\n\t this.expect('=');\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t };\n\t Parser.prototype.parseBindingList = function (kind, options) {\n\t var list = [this.parseLexicalBinding(kind, options)];\n\t while (this.match(',')) {\n\t this.nextToken();\n\t list.push(this.parseLexicalBinding(kind, options));\n\t }\n\t return list;\n\t };\n\t Parser.prototype.isLexicalDeclaration = function () {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.scanner.lex();\n\t this.scanner.restoreState(state);\n\t return (next.type === 3 /* Identifier */) ||\n\t (next.type === 7 /* Punctuator */ && next.value === '[') ||\n\t (next.type === 7 /* Punctuator */ && next.value === '{') ||\n\t (next.type === 4 /* Keyword */ && next.value === 'let') ||\n\t (next.type === 4 /* Keyword */ && next.value === 'yield');\n\t };\n\t Parser.prototype.parseLexicalDeclaration = function (options) {\n\t var node = this.createNode();\n\t var kind = this.nextToken().value;\n\t assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const');\n\t var declarations = this.parseBindingList(kind, options);\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.VariableDeclaration(declarations, kind));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns\n\t Parser.prototype.parseBindingRestElement = function (params, kind) {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.parsePattern(params, kind);\n\t return this.finalize(node, new Node.RestElement(arg));\n\t };\n\t Parser.prototype.parseArrayPattern = function (params, kind) {\n\t var node = this.createNode();\n\t this.expect('[');\n\t var elements = [];\n\t while (!this.match(']')) {\n\t if (this.match(',')) {\n\t this.nextToken();\n\t elements.push(null);\n\t }\n\t else {\n\t if (this.match('...')) {\n\t elements.push(this.parseBindingRestElement(params, kind));\n\t break;\n\t }\n\t else {\n\t elements.push(this.parsePatternWithDefault(params, kind));\n\t }\n\t if (!this.match(']')) {\n\t this.expect(',');\n\t }\n\t }\n\t }\n\t this.expect(']');\n\t return this.finalize(node, new Node.ArrayPattern(elements));\n\t };\n\t Parser.prototype.parsePropertyPattern = function (params, kind) {\n\t var node = this.createNode();\n\t var computed = false;\n\t var shorthand = false;\n\t var method = false;\n\t var key;\n\t var value;\n\t if (this.lookahead.type === 3 /* Identifier */) {\n\t var keyToken = this.lookahead;\n\t key = this.parseVariableIdentifier();\n\t var init = this.finalize(node, new Node.Identifier(keyToken.value));\n\t if (this.match('=')) {\n\t params.push(keyToken);\n\t shorthand = true;\n\t this.nextToken();\n\t var expr = this.parseAssignmentExpression();\n\t value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));\n\t }\n\t else if (!this.match(':')) {\n\t params.push(keyToken);\n\t shorthand = true;\n\t value = init;\n\t }\n\t else {\n\t this.expect(':');\n\t value = this.parsePatternWithDefault(params, kind);\n\t }\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.expect(':');\n\t value = this.parsePatternWithDefault(params, kind);\n\t }\n\t return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand));\n\t };\n\t Parser.prototype.parseObjectPattern = function (params, kind) {\n\t var node = this.createNode();\n\t var properties = [];\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t properties.push(this.parsePropertyPattern(params, kind));\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t return this.finalize(node, new Node.ObjectPattern(properties));\n\t };\n\t Parser.prototype.parsePattern = function (params, kind) {\n\t var pattern;\n\t if (this.match('[')) {\n\t pattern = this.parseArrayPattern(params, kind);\n\t }\n\t else if (this.match('{')) {\n\t pattern = this.parseObjectPattern(params, kind);\n\t }\n\t else {\n\t if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) {\n\t this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding);\n\t }\n\t params.push(this.lookahead);\n\t pattern = this.parseVariableIdentifier(kind);\n\t }\n\t return pattern;\n\t };\n\t Parser.prototype.parsePatternWithDefault = function (params, kind) {\n\t var startToken = this.lookahead;\n\t var pattern = this.parsePattern(params, kind);\n\t if (this.match('=')) {\n\t this.nextToken();\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var right = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowYield = previousAllowYield;\n\t pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));\n\t }\n\t return pattern;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-variable-statement\n\t Parser.prototype.parseVariableIdentifier = function (kind) {\n\t var node = this.createNode();\n\t var token = this.nextToken();\n\t if (token.type === 4 /* Keyword */ && token.value === 'yield') {\n\t if (this.context.strict) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t else if (!this.context.allowYield) {\n\t this.throwUnexpectedToken(token);\n\t }\n\t }\n\t else if (token.type !== 3 /* Identifier */) {\n\t if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);\n\t }\n\t else {\n\t if (this.context.strict || token.value !== 'let' || kind !== 'var') {\n\t this.throwUnexpectedToken(token);\n\t }\n\t }\n\t }\n\t else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') {\n\t this.tolerateUnexpectedToken(token);\n\t }\n\t return this.finalize(node, new Node.Identifier(token.value));\n\t };\n\t Parser.prototype.parseVariableDeclaration = function (options) {\n\t var node = this.createNode();\n\t var params = [];\n\t var id = this.parsePattern(params, 'var');\n\t if (this.context.strict && id.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(id.name)) {\n\t this.tolerateError(messages_1.Messages.StrictVarName);\n\t }\n\t }\n\t var init = null;\n\t if (this.match('=')) {\n\t this.nextToken();\n\t init = this.isolateCoverGrammar(this.parseAssignmentExpression);\n\t }\n\t else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) {\n\t this.expect('=');\n\t }\n\t return this.finalize(node, new Node.VariableDeclarator(id, init));\n\t };\n\t Parser.prototype.parseVariableDeclarationList = function (options) {\n\t var opt = { inFor: options.inFor };\n\t var list = [];\n\t list.push(this.parseVariableDeclaration(opt));\n\t while (this.match(',')) {\n\t this.nextToken();\n\t list.push(this.parseVariableDeclaration(opt));\n\t }\n\t return list;\n\t };\n\t Parser.prototype.parseVariableStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('var');\n\t var declarations = this.parseVariableDeclarationList({ inFor: false });\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.VariableDeclaration(declarations, 'var'));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-empty-statement\n\t Parser.prototype.parseEmptyStatement = function () {\n\t var node = this.createNode();\n\t this.expect(';');\n\t return this.finalize(node, new Node.EmptyStatement());\n\t };\n\t // https://tc39.github.io/ecma262/#sec-expression-statement\n\t Parser.prototype.parseExpressionStatement = function () {\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ExpressionStatement(expr));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-if-statement\n\t Parser.prototype.parseIfClause = function () {\n\t if (this.context.strict && this.matchKeyword('function')) {\n\t this.tolerateError(messages_1.Messages.StrictFunction);\n\t }\n\t return this.parseStatement();\n\t };\n\t Parser.prototype.parseIfStatement = function () {\n\t var node = this.createNode();\n\t var consequent;\n\t var alternate = null;\n\t this.expectKeyword('if');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t consequent = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t consequent = this.parseIfClause();\n\t if (this.matchKeyword('else')) {\n\t this.nextToken();\n\t alternate = this.parseIfClause();\n\t }\n\t }\n\t return this.finalize(node, new Node.IfStatement(test, consequent, alternate));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-do-while-statement\n\t Parser.prototype.parseDoWhileStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('do');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t var body = this.parseStatement();\n\t this.context.inIteration = previousInIteration;\n\t this.expectKeyword('while');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t }\n\t else {\n\t this.expect(')');\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t }\n\t return this.finalize(node, new Node.DoWhileStatement(body, test));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-while-statement\n\t Parser.prototype.parseWhileStatement = function () {\n\t var node = this.createNode();\n\t var body;\n\t this.expectKeyword('while');\n\t this.expect('(');\n\t var test = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t body = this.parseStatement();\n\t this.context.inIteration = previousInIteration;\n\t }\n\t return this.finalize(node, new Node.WhileStatement(test, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-for-statement\n\t // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements\n\t Parser.prototype.parseForStatement = function () {\n\t var init = null;\n\t var test = null;\n\t var update = null;\n\t var forIn = true;\n\t var left, right;\n\t var node = this.createNode();\n\t this.expectKeyword('for');\n\t this.expect('(');\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else {\n\t if (this.matchKeyword('var')) {\n\t init = this.createNode();\n\t this.nextToken();\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t var declarations = this.parseVariableDeclarationList({ inFor: true });\n\t this.context.allowIn = previousAllowIn;\n\t if (declarations.length === 1 && this.matchKeyword('in')) {\n\t var decl = declarations[0];\n\t if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) {\n\t this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in');\n\t }\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var'));\n\t this.expect(';');\n\t }\n\t }\n\t else if (this.matchKeyword('const') || this.matchKeyword('let')) {\n\t init = this.createNode();\n\t var kind = this.nextToken().value;\n\t if (!this.context.strict && this.lookahead.value === 'in') {\n\t init = this.finalize(init, new Node.Identifier(kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else {\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t var declarations = this.parseBindingList(kind, { inFor: true });\n\t this.context.allowIn = previousAllowIn;\n\t if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) {\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t this.nextToken();\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t this.consumeSemicolon();\n\t init = this.finalize(init, new Node.VariableDeclaration(declarations, kind));\n\t }\n\t }\n\t }\n\t else {\n\t var initStartToken = this.lookahead;\n\t var previousAllowIn = this.context.allowIn;\n\t this.context.allowIn = false;\n\t init = this.inheritCoverGrammar(this.parseAssignmentExpression);\n\t this.context.allowIn = previousAllowIn;\n\t if (this.matchKeyword('in')) {\n\t if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInForIn);\n\t }\n\t this.nextToken();\n\t this.reinterpretExpressionAsPattern(init);\n\t left = init;\n\t right = this.parseExpression();\n\t init = null;\n\t }\n\t else if (this.matchContextualKeyword('of')) {\n\t if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) {\n\t this.tolerateError(messages_1.Messages.InvalidLHSInForLoop);\n\t }\n\t this.nextToken();\n\t this.reinterpretExpressionAsPattern(init);\n\t left = init;\n\t right = this.parseAssignmentExpression();\n\t init = null;\n\t forIn = false;\n\t }\n\t else {\n\t if (this.match(',')) {\n\t var initSeq = [init];\n\t while (this.match(',')) {\n\t this.nextToken();\n\t initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));\n\t }\n\t init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));\n\t }\n\t this.expect(';');\n\t }\n\t }\n\t }\n\t if (typeof left === 'undefined') {\n\t if (!this.match(';')) {\n\t test = this.parseExpression();\n\t }\n\t this.expect(';');\n\t if (!this.match(')')) {\n\t update = this.parseExpression();\n\t }\n\t }\n\t var body;\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t var previousInIteration = this.context.inIteration;\n\t this.context.inIteration = true;\n\t body = this.isolateCoverGrammar(this.parseStatement);\n\t this.context.inIteration = previousInIteration;\n\t }\n\t return (typeof left === 'undefined') ?\n\t this.finalize(node, new Node.ForStatement(init, test, update, body)) :\n\t forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) :\n\t this.finalize(node, new Node.ForOfStatement(left, right, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-continue-statement\n\t Parser.prototype.parseContinueStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('continue');\n\t var label = null;\n\t if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t var id = this.parseVariableIdentifier();\n\t label = id;\n\t var key = '$' + id.name;\n\t if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t }\n\t }\n\t this.consumeSemicolon();\n\t if (label === null && !this.context.inIteration) {\n\t this.throwError(messages_1.Messages.IllegalContinue);\n\t }\n\t return this.finalize(node, new Node.ContinueStatement(label));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-break-statement\n\t Parser.prototype.parseBreakStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('break');\n\t var label = null;\n\t if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) {\n\t var id = this.parseVariableIdentifier();\n\t var key = '$' + id.name;\n\t if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.UnknownLabel, id.name);\n\t }\n\t label = id;\n\t }\n\t this.consumeSemicolon();\n\t if (label === null && !this.context.inIteration && !this.context.inSwitch) {\n\t this.throwError(messages_1.Messages.IllegalBreak);\n\t }\n\t return this.finalize(node, new Node.BreakStatement(label));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-return-statement\n\t Parser.prototype.parseReturnStatement = function () {\n\t if (!this.context.inFunctionBody) {\n\t this.tolerateError(messages_1.Messages.IllegalReturn);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('return');\n\t var hasArgument = (!this.match(';') && !this.match('}') &&\n\t !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) ||\n\t this.lookahead.type === 8 /* StringLiteral */ ||\n\t this.lookahead.type === 10 /* Template */;\n\t var argument = hasArgument ? this.parseExpression() : null;\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ReturnStatement(argument));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-with-statement\n\t Parser.prototype.parseWithStatement = function () {\n\t if (this.context.strict) {\n\t this.tolerateError(messages_1.Messages.StrictModeWith);\n\t }\n\t var node = this.createNode();\n\t var body;\n\t this.expectKeyword('with');\n\t this.expect('(');\n\t var object = this.parseExpression();\n\t if (!this.match(')') && this.config.tolerant) {\n\t this.tolerateUnexpectedToken(this.nextToken());\n\t body = this.finalize(this.createNode(), new Node.EmptyStatement());\n\t }\n\t else {\n\t this.expect(')');\n\t body = this.parseStatement();\n\t }\n\t return this.finalize(node, new Node.WithStatement(object, body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-switch-statement\n\t Parser.prototype.parseSwitchCase = function () {\n\t var node = this.createNode();\n\t var test;\n\t if (this.matchKeyword('default')) {\n\t this.nextToken();\n\t test = null;\n\t }\n\t else {\n\t this.expectKeyword('case');\n\t test = this.parseExpression();\n\t }\n\t this.expect(':');\n\t var consequent = [];\n\t while (true) {\n\t if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) {\n\t break;\n\t }\n\t consequent.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.SwitchCase(test, consequent));\n\t };\n\t Parser.prototype.parseSwitchStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('switch');\n\t this.expect('(');\n\t var discriminant = this.parseExpression();\n\t this.expect(')');\n\t var previousInSwitch = this.context.inSwitch;\n\t this.context.inSwitch = true;\n\t var cases = [];\n\t var defaultFound = false;\n\t this.expect('{');\n\t while (true) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t var clause = this.parseSwitchCase();\n\t if (clause.test === null) {\n\t if (defaultFound) {\n\t this.throwError(messages_1.Messages.MultipleDefaultsInSwitch);\n\t }\n\t defaultFound = true;\n\t }\n\t cases.push(clause);\n\t }\n\t this.expect('}');\n\t this.context.inSwitch = previousInSwitch;\n\t return this.finalize(node, new Node.SwitchStatement(discriminant, cases));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-labelled-statements\n\t Parser.prototype.parseLabelledStatement = function () {\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t var statement;\n\t if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) {\n\t this.nextToken();\n\t var id = expr;\n\t var key = '$' + id.name;\n\t if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) {\n\t this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name);\n\t }\n\t this.context.labelSet[key] = true;\n\t var body = void 0;\n\t if (this.matchKeyword('class')) {\n\t this.tolerateUnexpectedToken(this.lookahead);\n\t body = this.parseClassDeclaration();\n\t }\n\t else if (this.matchKeyword('function')) {\n\t var token = this.lookahead;\n\t var declaration = this.parseFunctionDeclaration();\n\t if (this.context.strict) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction);\n\t }\n\t else if (declaration.generator) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext);\n\t }\n\t body = declaration;\n\t }\n\t else {\n\t body = this.parseStatement();\n\t }\n\t delete this.context.labelSet[key];\n\t statement = new Node.LabeledStatement(id, body);\n\t }\n\t else {\n\t this.consumeSemicolon();\n\t statement = new Node.ExpressionStatement(expr);\n\t }\n\t return this.finalize(node, statement);\n\t };\n\t // https://tc39.github.io/ecma262/#sec-throw-statement\n\t Parser.prototype.parseThrowStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('throw');\n\t if (this.hasLineTerminator) {\n\t this.throwError(messages_1.Messages.NewlineAfterThrow);\n\t }\n\t var argument = this.parseExpression();\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ThrowStatement(argument));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-try-statement\n\t Parser.prototype.parseCatchClause = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('catch');\n\t this.expect('(');\n\t if (this.match(')')) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t var params = [];\n\t var param = this.parsePattern(params);\n\t var paramMap = {};\n\t for (var i = 0; i < params.length; i++) {\n\t var key = '$' + params[i].value;\n\t if (Object.prototype.hasOwnProperty.call(paramMap, key)) {\n\t this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value);\n\t }\n\t paramMap[key] = true;\n\t }\n\t if (this.context.strict && param.type === syntax_1.Syntax.Identifier) {\n\t if (this.scanner.isRestrictedWord(param.name)) {\n\t this.tolerateError(messages_1.Messages.StrictCatchVariable);\n\t }\n\t }\n\t this.expect(')');\n\t var body = this.parseBlock();\n\t return this.finalize(node, new Node.CatchClause(param, body));\n\t };\n\t Parser.prototype.parseFinallyClause = function () {\n\t this.expectKeyword('finally');\n\t return this.parseBlock();\n\t };\n\t Parser.prototype.parseTryStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('try');\n\t var block = this.parseBlock();\n\t var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null;\n\t var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null;\n\t if (!handler && !finalizer) {\n\t this.throwError(messages_1.Messages.NoCatchOrFinally);\n\t }\n\t return this.finalize(node, new Node.TryStatement(block, handler, finalizer));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-debugger-statement\n\t Parser.prototype.parseDebuggerStatement = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('debugger');\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.DebuggerStatement());\n\t };\n\t // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations\n\t Parser.prototype.parseStatement = function () {\n\t var statement;\n\t switch (this.lookahead.type) {\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 6 /* NumericLiteral */:\n\t case 8 /* StringLiteral */:\n\t case 10 /* Template */:\n\t case 9 /* RegularExpression */:\n\t statement = this.parseExpressionStatement();\n\t break;\n\t case 7 /* Punctuator */:\n\t var value = this.lookahead.value;\n\t if (value === '{') {\n\t statement = this.parseBlock();\n\t }\n\t else if (value === '(') {\n\t statement = this.parseExpressionStatement();\n\t }\n\t else if (value === ';') {\n\t statement = this.parseEmptyStatement();\n\t }\n\t else {\n\t statement = this.parseExpressionStatement();\n\t }\n\t break;\n\t case 3 /* Identifier */:\n\t statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();\n\t break;\n\t case 4 /* Keyword */:\n\t switch (this.lookahead.value) {\n\t case 'break':\n\t statement = this.parseBreakStatement();\n\t break;\n\t case 'continue':\n\t statement = this.parseContinueStatement();\n\t break;\n\t case 'debugger':\n\t statement = this.parseDebuggerStatement();\n\t break;\n\t case 'do':\n\t statement = this.parseDoWhileStatement();\n\t break;\n\t case 'for':\n\t statement = this.parseForStatement();\n\t break;\n\t case 'function':\n\t statement = this.parseFunctionDeclaration();\n\t break;\n\t case 'if':\n\t statement = this.parseIfStatement();\n\t break;\n\t case 'return':\n\t statement = this.parseReturnStatement();\n\t break;\n\t case 'switch':\n\t statement = this.parseSwitchStatement();\n\t break;\n\t case 'throw':\n\t statement = this.parseThrowStatement();\n\t break;\n\t case 'try':\n\t statement = this.parseTryStatement();\n\t break;\n\t case 'var':\n\t statement = this.parseVariableStatement();\n\t break;\n\t case 'while':\n\t statement = this.parseWhileStatement();\n\t break;\n\t case 'with':\n\t statement = this.parseWithStatement();\n\t break;\n\t default:\n\t statement = this.parseExpressionStatement();\n\t break;\n\t }\n\t break;\n\t default:\n\t statement = this.throwUnexpectedToken(this.lookahead);\n\t }\n\t return statement;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-function-definitions\n\t Parser.prototype.parseFunctionSourceElements = function () {\n\t var node = this.createNode();\n\t this.expect('{');\n\t var body = this.parseDirectivePrologues();\n\t var previousLabelSet = this.context.labelSet;\n\t var previousInIteration = this.context.inIteration;\n\t var previousInSwitch = this.context.inSwitch;\n\t var previousInFunctionBody = this.context.inFunctionBody;\n\t this.context.labelSet = {};\n\t this.context.inIteration = false;\n\t this.context.inSwitch = false;\n\t this.context.inFunctionBody = true;\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t if (this.match('}')) {\n\t break;\n\t }\n\t body.push(this.parseStatementListItem());\n\t }\n\t this.expect('}');\n\t this.context.labelSet = previousLabelSet;\n\t this.context.inIteration = previousInIteration;\n\t this.context.inSwitch = previousInSwitch;\n\t this.context.inFunctionBody = previousInFunctionBody;\n\t return this.finalize(node, new Node.BlockStatement(body));\n\t };\n\t Parser.prototype.validateParam = function (options, param, name) {\n\t var key = '$' + name;\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(name)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamName;\n\t }\n\t if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamDupe;\n\t }\n\t }\n\t else if (!options.firstRestricted) {\n\t if (this.scanner.isRestrictedWord(name)) {\n\t options.firstRestricted = param;\n\t options.message = messages_1.Messages.StrictParamName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(name)) {\n\t options.firstRestricted = param;\n\t options.message = messages_1.Messages.StrictReservedWord;\n\t }\n\t else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {\n\t options.stricted = param;\n\t options.message = messages_1.Messages.StrictParamDupe;\n\t }\n\t }\n\t /* istanbul ignore next */\n\t if (typeof Object.defineProperty === 'function') {\n\t Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true });\n\t }\n\t else {\n\t options.paramSet[key] = true;\n\t }\n\t };\n\t Parser.prototype.parseRestElement = function (params) {\n\t var node = this.createNode();\n\t this.expect('...');\n\t var arg = this.parsePattern(params);\n\t if (this.match('=')) {\n\t this.throwError(messages_1.Messages.DefaultRestParameter);\n\t }\n\t if (!this.match(')')) {\n\t this.throwError(messages_1.Messages.ParameterAfterRestParameter);\n\t }\n\t return this.finalize(node, new Node.RestElement(arg));\n\t };\n\t Parser.prototype.parseFormalParameter = function (options) {\n\t var params = [];\n\t var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params);\n\t for (var i = 0; i < params.length; i++) {\n\t this.validateParam(options, params[i], params[i].value);\n\t }\n\t options.simple = options.simple && (param instanceof Node.Identifier);\n\t options.params.push(param);\n\t };\n\t Parser.prototype.parseFormalParameters = function (firstRestricted) {\n\t var options;\n\t options = {\n\t simple: true,\n\t params: [],\n\t firstRestricted: firstRestricted\n\t };\n\t this.expect('(');\n\t if (!this.match(')')) {\n\t options.paramSet = {};\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t this.parseFormalParameter(options);\n\t if (this.match(')')) {\n\t break;\n\t }\n\t this.expect(',');\n\t if (this.match(')')) {\n\t break;\n\t }\n\t }\n\t }\n\t this.expect(')');\n\t return {\n\t simple: options.simple,\n\t params: options.params,\n\t stricted: options.stricted,\n\t firstRestricted: options.firstRestricted,\n\t message: options.message\n\t };\n\t };\n\t Parser.prototype.matchAsyncFunction = function () {\n\t var match = this.matchContextualKeyword('async');\n\t if (match) {\n\t var state = this.scanner.saveState();\n\t this.scanner.scanComments();\n\t var next = this.scanner.lex();\n\t this.scanner.restoreState(state);\n\t match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function');\n\t }\n\t return match;\n\t };\n\t Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) {\n\t var node = this.createNode();\n\t var isAsync = this.matchContextualKeyword('async');\n\t if (isAsync) {\n\t this.nextToken();\n\t }\n\t this.expectKeyword('function');\n\t var isGenerator = isAsync ? false : this.match('*');\n\t if (isGenerator) {\n\t this.nextToken();\n\t }\n\t var message;\n\t var id = null;\n\t var firstRestricted = null;\n\t if (!identifierIsOptional || !this.match('(')) {\n\t var token = this.lookahead;\n\t id = this.parseVariableIdentifier();\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t }\n\t }\n\t else {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictFunctionName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t var previousAllowAwait = this.context.await;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.await = isAsync;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters(firstRestricted);\n\t var params = formalParameters.params;\n\t var stricted = formalParameters.stricted;\n\t firstRestricted = formalParameters.firstRestricted;\n\t if (formalParameters.message) {\n\t message = formalParameters.message;\n\t }\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = formalParameters.simple;\n\t var body = this.parseFunctionSourceElements();\n\t if (this.context.strict && firstRestricted) {\n\t this.throwUnexpectedToken(firstRestricted, message);\n\t }\n\t if (this.context.strict && stricted) {\n\t this.tolerateUnexpectedToken(stricted, message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.await = previousAllowAwait;\n\t this.context.allowYield = previousAllowYield;\n\t return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) :\n\t this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));\n\t };\n\t Parser.prototype.parseFunctionExpression = function () {\n\t var node = this.createNode();\n\t var isAsync = this.matchContextualKeyword('async');\n\t if (isAsync) {\n\t this.nextToken();\n\t }\n\t this.expectKeyword('function');\n\t var isGenerator = isAsync ? false : this.match('*');\n\t if (isGenerator) {\n\t this.nextToken();\n\t }\n\t var message;\n\t var id = null;\n\t var firstRestricted;\n\t var previousAllowAwait = this.context.await;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.await = isAsync;\n\t this.context.allowYield = !isGenerator;\n\t if (!this.match('(')) {\n\t var token = this.lookahead;\n\t id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier();\n\t if (this.context.strict) {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName);\n\t }\n\t }\n\t else {\n\t if (this.scanner.isRestrictedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictFunctionName;\n\t }\n\t else if (this.scanner.isStrictModeReservedWord(token.value)) {\n\t firstRestricted = token;\n\t message = messages_1.Messages.StrictReservedWord;\n\t }\n\t }\n\t }\n\t var formalParameters = this.parseFormalParameters(firstRestricted);\n\t var params = formalParameters.params;\n\t var stricted = formalParameters.stricted;\n\t firstRestricted = formalParameters.firstRestricted;\n\t if (formalParameters.message) {\n\t message = formalParameters.message;\n\t }\n\t var previousStrict = this.context.strict;\n\t var previousAllowStrictDirective = this.context.allowStrictDirective;\n\t this.context.allowStrictDirective = formalParameters.simple;\n\t var body = this.parseFunctionSourceElements();\n\t if (this.context.strict && firstRestricted) {\n\t this.throwUnexpectedToken(firstRestricted, message);\n\t }\n\t if (this.context.strict && stricted) {\n\t this.tolerateUnexpectedToken(stricted, message);\n\t }\n\t this.context.strict = previousStrict;\n\t this.context.allowStrictDirective = previousAllowStrictDirective;\n\t this.context.await = previousAllowAwait;\n\t this.context.allowYield = previousAllowYield;\n\t return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) :\n\t this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive\n\t Parser.prototype.parseDirective = function () {\n\t var token = this.lookahead;\n\t var node = this.createNode();\n\t var expr = this.parseExpression();\n\t var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null;\n\t this.consumeSemicolon();\n\t return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));\n\t };\n\t Parser.prototype.parseDirectivePrologues = function () {\n\t var firstRestricted = null;\n\t var body = [];\n\t while (true) {\n\t var token = this.lookahead;\n\t if (token.type !== 8 /* StringLiteral */) {\n\t break;\n\t }\n\t var statement = this.parseDirective();\n\t body.push(statement);\n\t var directive = statement.directive;\n\t if (typeof directive !== 'string') {\n\t break;\n\t }\n\t if (directive === 'use strict') {\n\t this.context.strict = true;\n\t if (firstRestricted) {\n\t this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral);\n\t }\n\t if (!this.context.allowStrictDirective) {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective);\n\t }\n\t }\n\t else {\n\t if (!firstRestricted && token.octal) {\n\t firstRestricted = token;\n\t }\n\t }\n\t }\n\t return body;\n\t };\n\t // https://tc39.github.io/ecma262/#sec-method-definitions\n\t Parser.prototype.qualifiedPropertyName = function (token) {\n\t switch (token.type) {\n\t case 3 /* Identifier */:\n\t case 8 /* StringLiteral */:\n\t case 1 /* BooleanLiteral */:\n\t case 5 /* NullLiteral */:\n\t case 6 /* NumericLiteral */:\n\t case 4 /* Keyword */:\n\t return true;\n\t case 7 /* Punctuator */:\n\t return token.value === '[';\n\t default:\n\t break;\n\t }\n\t return false;\n\t };\n\t Parser.prototype.parseGetterMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = false;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters();\n\t if (formalParameters.params.length > 0) {\n\t this.tolerateError(messages_1.Messages.BadGetterArity);\n\t }\n\t var method = this.parsePropertyMethod(formalParameters);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t };\n\t Parser.prototype.parseSetterMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = false;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = !isGenerator;\n\t var formalParameters = this.parseFormalParameters();\n\t if (formalParameters.params.length !== 1) {\n\t this.tolerateError(messages_1.Messages.BadSetterArity);\n\t }\n\t else if (formalParameters.params[0] instanceof Node.RestElement) {\n\t this.tolerateError(messages_1.Messages.BadSetterRestParameter);\n\t }\n\t var method = this.parsePropertyMethod(formalParameters);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));\n\t };\n\t Parser.prototype.parseGeneratorMethod = function () {\n\t var node = this.createNode();\n\t var isGenerator = true;\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = true;\n\t var params = this.parseFormalParameters();\n\t this.context.allowYield = false;\n\t var method = this.parsePropertyMethod(params);\n\t this.context.allowYield = previousAllowYield;\n\t return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-generator-function-definitions\n\t Parser.prototype.isStartOfExpression = function () {\n\t var start = true;\n\t var value = this.lookahead.value;\n\t switch (this.lookahead.type) {\n\t case 7 /* Punctuator */:\n\t start = (value === '[') || (value === '(') || (value === '{') ||\n\t (value === '+') || (value === '-') ||\n\t (value === '!') || (value === '~') ||\n\t (value === '++') || (value === '--') ||\n\t (value === '/') || (value === '/='); // regular expression literal\n\t break;\n\t case 4 /* Keyword */:\n\t start = (value === 'class') || (value === 'delete') ||\n\t (value === 'function') || (value === 'let') || (value === 'new') ||\n\t (value === 'super') || (value === 'this') || (value === 'typeof') ||\n\t (value === 'void') || (value === 'yield');\n\t break;\n\t default:\n\t break;\n\t }\n\t return start;\n\t };\n\t Parser.prototype.parseYieldExpression = function () {\n\t var node = this.createNode();\n\t this.expectKeyword('yield');\n\t var argument = null;\n\t var delegate = false;\n\t if (!this.hasLineTerminator) {\n\t var previousAllowYield = this.context.allowYield;\n\t this.context.allowYield = false;\n\t delegate = this.match('*');\n\t if (delegate) {\n\t this.nextToken();\n\t argument = this.parseAssignmentExpression();\n\t }\n\t else if (this.isStartOfExpression()) {\n\t argument = this.parseAssignmentExpression();\n\t }\n\t this.context.allowYield = previousAllowYield;\n\t }\n\t return this.finalize(node, new Node.YieldExpression(argument, delegate));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-class-definitions\n\t Parser.prototype.parseClassElement = function (hasConstructor) {\n\t var token = this.lookahead;\n\t var node = this.createNode();\n\t var kind = '';\n\t var key = null;\n\t var value = null;\n\t var computed = false;\n\t var method = false;\n\t var isStatic = false;\n\t var isAsync = false;\n\t if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t var id = key;\n\t if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) {\n\t token = this.lookahead;\n\t isStatic = true;\n\t computed = this.match('[');\n\t if (this.match('*')) {\n\t this.nextToken();\n\t }\n\t else {\n\t key = this.parseObjectPropertyKey();\n\t }\n\t }\n\t if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) {\n\t var punctuator = this.lookahead.value;\n\t if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') {\n\t isAsync = true;\n\t token = this.lookahead;\n\t key = this.parseObjectPropertyKey();\n\t if (token.type === 3 /* Identifier */ && token.value === 'constructor') {\n\t this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync);\n\t }\n\t }\n\t }\n\t }\n\t var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);\n\t if (token.type === 3 /* Identifier */) {\n\t if (token.value === 'get' && lookaheadPropertyKey) {\n\t kind = 'get';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t this.context.allowYield = false;\n\t value = this.parseGetterMethod();\n\t }\n\t else if (token.value === 'set' && lookaheadPropertyKey) {\n\t kind = 'set';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseSetterMethod();\n\t }\n\t }\n\t else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) {\n\t kind = 'init';\n\t computed = this.match('[');\n\t key = this.parseObjectPropertyKey();\n\t value = this.parseGeneratorMethod();\n\t method = true;\n\t }\n\t if (!kind && key && this.match('(')) {\n\t kind = 'init';\n\t value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction();\n\t method = true;\n\t }\n\t if (!kind) {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t if (kind === 'init') {\n\t kind = 'method';\n\t }\n\t if (!computed) {\n\t if (isStatic && this.isPropertyKey(key, 'prototype')) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype);\n\t }\n\t if (!isStatic && this.isPropertyKey(key, 'constructor')) {\n\t if (kind !== 'method' || !method || (value && value.generator)) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod);\n\t }\n\t if (hasConstructor.value) {\n\t this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor);\n\t }\n\t else {\n\t hasConstructor.value = true;\n\t }\n\t kind = 'constructor';\n\t }\n\t }\n\t return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));\n\t };\n\t Parser.prototype.parseClassElementList = function () {\n\t var body = [];\n\t var hasConstructor = { value: false };\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t if (this.match(';')) {\n\t this.nextToken();\n\t }\n\t else {\n\t body.push(this.parseClassElement(hasConstructor));\n\t }\n\t }\n\t this.expect('}');\n\t return body;\n\t };\n\t Parser.prototype.parseClassBody = function () {\n\t var node = this.createNode();\n\t var elementList = this.parseClassElementList();\n\t return this.finalize(node, new Node.ClassBody(elementList));\n\t };\n\t Parser.prototype.parseClassDeclaration = function (identifierIsOptional) {\n\t var node = this.createNode();\n\t var previousStrict = this.context.strict;\n\t this.context.strict = true;\n\t this.expectKeyword('class');\n\t var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier();\n\t var superClass = null;\n\t if (this.matchKeyword('extends')) {\n\t this.nextToken();\n\t superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t }\n\t var classBody = this.parseClassBody();\n\t this.context.strict = previousStrict;\n\t return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));\n\t };\n\t Parser.prototype.parseClassExpression = function () {\n\t var node = this.createNode();\n\t var previousStrict = this.context.strict;\n\t this.context.strict = true;\n\t this.expectKeyword('class');\n\t var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null;\n\t var superClass = null;\n\t if (this.matchKeyword('extends')) {\n\t this.nextToken();\n\t superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall);\n\t }\n\t var classBody = this.parseClassBody();\n\t this.context.strict = previousStrict;\n\t return this.finalize(node, new Node.ClassExpression(id, superClass, classBody));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-scripts\n\t // https://tc39.github.io/ecma262/#sec-modules\n\t Parser.prototype.parseModule = function () {\n\t this.context.strict = true;\n\t this.context.isModule = true;\n\t this.scanner.isModule = true;\n\t var node = this.createNode();\n\t var body = this.parseDirectivePrologues();\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t body.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.Module(body));\n\t };\n\t Parser.prototype.parseScript = function () {\n\t var node = this.createNode();\n\t var body = this.parseDirectivePrologues();\n\t while (this.lookahead.type !== 2 /* EOF */) {\n\t body.push(this.parseStatementListItem());\n\t }\n\t return this.finalize(node, new Node.Script(body));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-imports\n\t Parser.prototype.parseModuleSpecifier = function () {\n\t var node = this.createNode();\n\t if (this.lookahead.type !== 8 /* StringLiteral */) {\n\t this.throwError(messages_1.Messages.InvalidModuleSpecifier);\n\t }\n\t var token = this.nextToken();\n\t var raw = this.getTokenRaw(token);\n\t return this.finalize(node, new Node.Literal(token.value, raw));\n\t };\n\t // import {} ...;\n\t Parser.prototype.parseImportSpecifier = function () {\n\t var node = this.createNode();\n\t var imported;\n\t var local;\n\t if (this.lookahead.type === 3 /* Identifier */) {\n\t imported = this.parseVariableIdentifier();\n\t local = imported;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t local = this.parseVariableIdentifier();\n\t }\n\t }\n\t else {\n\t imported = this.parseIdentifierName();\n\t local = imported;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t local = this.parseVariableIdentifier();\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t }\n\t return this.finalize(node, new Node.ImportSpecifier(local, imported));\n\t };\n\t // {foo, bar as bas}\n\t Parser.prototype.parseNamedImports = function () {\n\t this.expect('{');\n\t var specifiers = [];\n\t while (!this.match('}')) {\n\t specifiers.push(this.parseImportSpecifier());\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t return specifiers;\n\t };\n\t // import ...;\n\t Parser.prototype.parseImportDefaultSpecifier = function () {\n\t var node = this.createNode();\n\t var local = this.parseIdentifierName();\n\t return this.finalize(node, new Node.ImportDefaultSpecifier(local));\n\t };\n\t // import <* as foo> ...;\n\t Parser.prototype.parseImportNamespaceSpecifier = function () {\n\t var node = this.createNode();\n\t this.expect('*');\n\t if (!this.matchContextualKeyword('as')) {\n\t this.throwError(messages_1.Messages.NoAsAfterImportNamespace);\n\t }\n\t this.nextToken();\n\t var local = this.parseIdentifierName();\n\t return this.finalize(node, new Node.ImportNamespaceSpecifier(local));\n\t };\n\t Parser.prototype.parseImportDeclaration = function () {\n\t if (this.context.inFunctionBody) {\n\t this.throwError(messages_1.Messages.IllegalImportDeclaration);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('import');\n\t var src;\n\t var specifiers = [];\n\t if (this.lookahead.type === 8 /* StringLiteral */) {\n\t // import 'foo';\n\t src = this.parseModuleSpecifier();\n\t }\n\t else {\n\t if (this.match('{')) {\n\t // import {bar}\n\t specifiers = specifiers.concat(this.parseNamedImports());\n\t }\n\t else if (this.match('*')) {\n\t // import * as foo\n\t specifiers.push(this.parseImportNamespaceSpecifier());\n\t }\n\t else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) {\n\t // import foo\n\t specifiers.push(this.parseImportDefaultSpecifier());\n\t if (this.match(',')) {\n\t this.nextToken();\n\t if (this.match('*')) {\n\t // import foo, * as foo\n\t specifiers.push(this.parseImportNamespaceSpecifier());\n\t }\n\t else if (this.match('{')) {\n\t // import foo, {bar}\n\t specifiers = specifiers.concat(this.parseNamedImports());\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t }\n\t }\n\t else {\n\t this.throwUnexpectedToken(this.nextToken());\n\t }\n\t if (!this.matchContextualKeyword('from')) {\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t this.nextToken();\n\t src = this.parseModuleSpecifier();\n\t }\n\t this.consumeSemicolon();\n\t return this.finalize(node, new Node.ImportDeclaration(specifiers, src));\n\t };\n\t // https://tc39.github.io/ecma262/#sec-exports\n\t Parser.prototype.parseExportSpecifier = function () {\n\t var node = this.createNode();\n\t var local = this.parseIdentifierName();\n\t var exported = local;\n\t if (this.matchContextualKeyword('as')) {\n\t this.nextToken();\n\t exported = this.parseIdentifierName();\n\t }\n\t return this.finalize(node, new Node.ExportSpecifier(local, exported));\n\t };\n\t Parser.prototype.parseExportDeclaration = function () {\n\t if (this.context.inFunctionBody) {\n\t this.throwError(messages_1.Messages.IllegalExportDeclaration);\n\t }\n\t var node = this.createNode();\n\t this.expectKeyword('export');\n\t var exportDeclaration;\n\t if (this.matchKeyword('default')) {\n\t // export default ...\n\t this.nextToken();\n\t if (this.matchKeyword('function')) {\n\t // export default function foo () {}\n\t // export default function () {}\n\t var declaration = this.parseFunctionDeclaration(true);\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else if (this.matchKeyword('class')) {\n\t // export default class foo {}\n\t var declaration = this.parseClassDeclaration(true);\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else if (this.matchContextualKeyword('async')) {\n\t // export default async function f () {}\n\t // export default async function () {}\n\t // export default async x => x\n\t var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression();\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t else {\n\t if (this.matchContextualKeyword('from')) {\n\t this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);\n\t }\n\t // export default {};\n\t // export default [];\n\t // export default (1 + 2);\n\t var declaration = this.match('{') ? this.parseObjectInitializer() :\n\t this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression();\n\t this.consumeSemicolon();\n\t exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));\n\t }\n\t }\n\t else if (this.match('*')) {\n\t // export * from 'foo';\n\t this.nextToken();\n\t if (!this.matchContextualKeyword('from')) {\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t this.nextToken();\n\t var src = this.parseModuleSpecifier();\n\t this.consumeSemicolon();\n\t exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));\n\t }\n\t else if (this.lookahead.type === 4 /* Keyword */) {\n\t // export var f = 1;\n\t var declaration = void 0;\n\t switch (this.lookahead.value) {\n\t case 'let':\n\t case 'const':\n\t declaration = this.parseLexicalDeclaration({ inFor: false });\n\t break;\n\t case 'var':\n\t case 'class':\n\t case 'function':\n\t declaration = this.parseStatementListItem();\n\t break;\n\t default:\n\t this.throwUnexpectedToken(this.lookahead);\n\t }\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t }\n\t else if (this.matchAsyncFunction()) {\n\t var declaration = this.parseFunctionDeclaration();\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));\n\t }\n\t else {\n\t var specifiers = [];\n\t var source = null;\n\t var isExportFromIdentifier = false;\n\t this.expect('{');\n\t while (!this.match('}')) {\n\t isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default');\n\t specifiers.push(this.parseExportSpecifier());\n\t if (!this.match('}')) {\n\t this.expect(',');\n\t }\n\t }\n\t this.expect('}');\n\t if (this.matchContextualKeyword('from')) {\n\t // export {default} from 'foo';\n\t // export {foo} from 'foo';\n\t this.nextToken();\n\t source = this.parseModuleSpecifier();\n\t this.consumeSemicolon();\n\t }\n\t else if (isExportFromIdentifier) {\n\t // export {default}; // missing fromClause\n\t var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;\n\t this.throwError(message, this.lookahead.value);\n\t }\n\t else {\n\t // export {foo};\n\t this.consumeSemicolon();\n\t }\n\t exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));\n\t }\n\t return exportDeclaration;\n\t };\n\t return Parser;\n\t}());\n\texports.Parser = Parser;\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t// Ensure the condition is true, otherwise throw an error.\n\t// This is only to have a better contract semantic, i.e. another safety net\n\t// to catch a logic error. The condition shall be fulfilled in normal case.\n\t// Do NOT use this to enforce a certain condition on any user input.\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tfunction assert(condition, message) {\n\t /* istanbul ignore if */\n\t if (!condition) {\n\t throw new Error('ASSERT: ' + message);\n\t }\n\t}\n\texports.assert = assert;\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t/* tslint:disable:max-classes-per-file */\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar ErrorHandler = (function () {\n\t function ErrorHandler() {\n\t this.errors = [];\n\t this.tolerant = false;\n\t }\n\t ErrorHandler.prototype.recordError = function (error) {\n\t this.errors.push(error);\n\t };\n\t ErrorHandler.prototype.tolerate = function (error) {\n\t if (this.tolerant) {\n\t this.recordError(error);\n\t }\n\t else {\n\t throw error;\n\t }\n\t };\n\t ErrorHandler.prototype.constructError = function (msg, column) {\n\t var error = new Error(msg);\n\t try {\n\t throw error;\n\t }\n\t catch (base) {\n\t /* istanbul ignore else */\n\t if (Object.create && Object.defineProperty) {\n\t error = Object.create(base);\n\t Object.defineProperty(error, 'column', { value: column });\n\t }\n\t }\n\t /* istanbul ignore next */\n\t return error;\n\t };\n\t ErrorHandler.prototype.createError = function (index, line, col, description) {\n\t var msg = 'Line ' + line + ': ' + description;\n\t var error = this.constructError(msg, col);\n\t error.index = index;\n\t error.lineNumber = line;\n\t error.description = description;\n\t return error;\n\t };\n\t ErrorHandler.prototype.throwError = function (index, line, col, description) {\n\t throw this.createError(index, line, col, description);\n\t };\n\t ErrorHandler.prototype.tolerateError = function (index, line, col, description) {\n\t var error = this.createError(index, line, col, description);\n\t if (this.tolerant) {\n\t this.recordError(error);\n\t }\n\t else {\n\t throw error;\n\t }\n\t };\n\t return ErrorHandler;\n\t}());\n\texports.ErrorHandler = ErrorHandler;\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\t// Error messages should be identical to V8.\n\texports.Messages = {\n\t BadGetterArity: 'Getter must not have any formal parameters',\n\t BadSetterArity: 'Setter must have exactly one formal parameter',\n\t BadSetterRestParameter: 'Setter function argument must not be a rest parameter',\n\t ConstructorIsAsync: 'Class constructor may not be an async method',\n\t ConstructorSpecialMethod: 'Class constructor may not be an accessor',\n\t DeclarationMissingInitializer: 'Missing initializer in %0 declaration',\n\t DefaultRestParameter: 'Unexpected token =',\n\t DuplicateBinding: 'Duplicate binding %0',\n\t DuplicateConstructor: 'A class may only have one constructor',\n\t DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals',\n\t ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer',\n\t GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts',\n\t IllegalBreak: 'Illegal break statement',\n\t IllegalContinue: 'Illegal continue statement',\n\t IllegalExportDeclaration: 'Unexpected token',\n\t IllegalImportDeclaration: 'Unexpected token',\n\t IllegalLanguageModeDirective: 'Illegal \\'use strict\\' directive in function with non-simple parameter list',\n\t IllegalReturn: 'Illegal return statement',\n\t InvalidEscapedReservedWord: 'Keyword must not contain escaped characters',\n\t InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence',\n\t InvalidLHSInAssignment: 'Invalid left-hand side in assignment',\n\t InvalidLHSInForIn: 'Invalid left-hand side in for-in',\n\t InvalidLHSInForLoop: 'Invalid left-hand side in for-loop',\n\t InvalidModuleSpecifier: 'Unexpected token',\n\t InvalidRegExp: 'Invalid regular expression',\n\t LetInLexicalBinding: 'let is disallowed as a lexically bound name',\n\t MissingFromClause: 'Unexpected token',\n\t MultipleDefaultsInSwitch: 'More than one default clause in switch statement',\n\t NewlineAfterThrow: 'Illegal newline after throw',\n\t NoAsAfterImportNamespace: 'Unexpected token',\n\t NoCatchOrFinally: 'Missing catch or finally after try',\n\t ParameterAfterRestParameter: 'Rest parameter must be last formal parameter',\n\t Redeclaration: '%0 \\'%1\\' has already been declared',\n\t StaticPrototype: 'Classes may not have static property named prototype',\n\t StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode',\n\t StrictDelete: 'Delete of an unqualified identifier in strict mode.',\n\t StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block',\n\t StrictFunctionName: 'Function name may not be eval or arguments in strict mode',\n\t StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode',\n\t StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode',\n\t StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode',\n\t StrictModeWith: 'Strict mode code may not include a with statement',\n\t StrictOctalLiteral: 'Octal literals are not allowed in strict mode.',\n\t StrictParamDupe: 'Strict mode function may not have duplicate parameter names',\n\t StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode',\n\t StrictReservedWord: 'Use of future reserved word in strict mode',\n\t StrictVarName: 'Variable name may not be eval or arguments in strict mode',\n\t TemplateOctalLiteral: 'Octal literals are not allowed in template strings.',\n\t UnexpectedEOS: 'Unexpected end of input',\n\t UnexpectedIdentifier: 'Unexpected identifier',\n\t UnexpectedNumber: 'Unexpected number',\n\t UnexpectedReserved: 'Unexpected reserved word',\n\t UnexpectedString: 'Unexpected string',\n\t UnexpectedTemplate: 'Unexpected quasi %0',\n\t UnexpectedToken: 'Unexpected token %0',\n\t UnexpectedTokenIllegal: 'Unexpected token ILLEGAL',\n\t UnknownLabel: 'Undefined label \\'%0\\'',\n\t UnterminatedRegExp: 'Invalid regular expression: missing /'\n\t};\n\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __nested_webpack_require_226595__) {\n\n\t\"use strict\";\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\tvar assert_1 = __nested_webpack_require_226595__(9);\n\tvar character_1 = __nested_webpack_require_226595__(4);\n\tvar messages_1 = __nested_webpack_require_226595__(11);\n\tfunction hexValue(ch) {\n\t return '0123456789abcdef'.indexOf(ch.toLowerCase());\n\t}\n\tfunction octalValue(ch) {\n\t return '01234567'.indexOf(ch);\n\t}\n\tvar Scanner = (function () {\n\t function Scanner(code, handler) {\n\t this.source = code;\n\t this.errorHandler = handler;\n\t this.trackComment = false;\n\t this.isModule = false;\n\t this.length = code.length;\n\t this.index = 0;\n\t this.lineNumber = (code.length > 0) ? 1 : 0;\n\t this.lineStart = 0;\n\t this.curlyStack = [];\n\t }\n\t Scanner.prototype.saveState = function () {\n\t return {\n\t index: this.index,\n\t lineNumber: this.lineNumber,\n\t lineStart: this.lineStart\n\t };\n\t };\n\t Scanner.prototype.restoreState = function (state) {\n\t this.index = state.index;\n\t this.lineNumber = state.lineNumber;\n\t this.lineStart = state.lineStart;\n\t };\n\t Scanner.prototype.eof = function () {\n\t return this.index >= this.length;\n\t };\n\t Scanner.prototype.throwUnexpectedToken = function (message) {\n\t if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t };\n\t Scanner.prototype.tolerateUnexpectedToken = function (message) {\n\t if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; }\n\t this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);\n\t };\n\t // https://tc39.github.io/ecma262/#sec-comments\n\t Scanner.prototype.skipSingleLineComment = function (offset) {\n\t var comments = [];\n\t var start, loc;\n\t if (this.trackComment) {\n\t comments = [];\n\t start = this.index - offset;\n\t loc = {\n\t start: {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - offset\n\t },\n\t end: {}\n\t };\n\t }\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t ++this.index;\n\t if (character_1.Character.isLineTerminator(ch)) {\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - 1\n\t };\n\t var entry = {\n\t multiLine: false,\n\t slice: [start + offset, this.index - 1],\n\t range: [start, this.index - 1],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t if (ch === 13 && this.source.charCodeAt(this.index) === 10) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t this.lineStart = this.index;\n\t return comments;\n\t }\n\t }\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: false,\n\t slice: [start + offset, this.index],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t return comments;\n\t };\n\t Scanner.prototype.skipMultiLineComment = function () {\n\t var comments = [];\n\t var start, loc;\n\t if (this.trackComment) {\n\t comments = [];\n\t start = this.index - 2;\n\t loc = {\n\t start: {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart - 2\n\t },\n\t end: {}\n\t };\n\t }\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isLineTerminator(ch)) {\n\t if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t ++this.index;\n\t this.lineStart = this.index;\n\t }\n\t else if (ch === 0x2A) {\n\t // Block comment ends with '*/'.\n\t if (this.source.charCodeAt(this.index + 1) === 0x2F) {\n\t this.index += 2;\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: true,\n\t slice: [start + 2, this.index - 2],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t return comments;\n\t }\n\t ++this.index;\n\t }\n\t else {\n\t ++this.index;\n\t }\n\t }\n\t // Ran off the end of the file - the whole thing is a comment\n\t if (this.trackComment) {\n\t loc.end = {\n\t line: this.lineNumber,\n\t column: this.index - this.lineStart\n\t };\n\t var entry = {\n\t multiLine: true,\n\t slice: [start + 2, this.index],\n\t range: [start, this.index],\n\t loc: loc\n\t };\n\t comments.push(entry);\n\t }\n\t this.tolerateUnexpectedToken();\n\t return comments;\n\t };\n\t Scanner.prototype.scanComments = function () {\n\t var comments;\n\t if (this.trackComment) {\n\t comments = [];\n\t }\n\t var start = (this.index === 0);\n\t while (!this.eof()) {\n\t var ch = this.source.charCodeAt(this.index);\n\t if (character_1.Character.isWhiteSpace(ch)) {\n\t ++this.index;\n\t }\n\t else if (character_1.Character.isLineTerminator(ch)) {\n\t ++this.index;\n\t if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) {\n\t ++this.index;\n\t }\n\t ++this.lineNumber;\n\t this.lineStart = this.index;\n\t start = true;\n\t }\n\t else if (ch === 0x2F) {\n\t ch = this.source.charCodeAt(this.index + 1);\n\t if (ch === 0x2F) {\n\t this.index += 2;\n\t var comment = this.skipSingleLineComment(2);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t start = true;\n\t }\n\t else if (ch === 0x2A) {\n\t this.index += 2;\n\t var comment = this.skipMultiLineComment();\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else if (start && ch === 0x2D) {\n\t // U+003E is '>'\n\t if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) {\n\t // '-->' is a single-line comment\n\t this.index += 3;\n\t var comment = this.skipSingleLineComment(3);\n\t if (this.trackComment) {\n\t comments = comments.concat(comment);\n\t }\n\t }\n\t else {\n\t break;\n\t }\n\t }\n\t else if (ch === 0x3C && !this.isModule) {\n\t if (this.source.slice(this.index + 1, this.index + 4) === '!--') {\n\t this.index += 4; // ` always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10,\n firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n '_'\n ),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n },\n },\n relativeTime: {\n future: processFutureTime,\n past: processPastTime,\n s: 'e puer Sekonnen',\n ss: '%d Sekonnen',\n m: processRelativeTime,\n mm: '%d Minutten',\n h: processRelativeTime,\n hh: '%d Stonnen',\n d: processRelativeTime,\n dd: '%d Deeg',\n M: processRelativeTime,\n MM: '%d Méint',\n y: processRelativeTime,\n yy: '%d Joer',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanM/NDQwYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTHV4ZW1ib3VyZ2lzaCBbbGJdXG4vLyEgYXV0aG9yIDogbXdlaW1lcnNraXJjaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9td2VpbWVyc2tpcmNoXG4vLyEgYXV0aG9yIDogRGF2aWQgUmFpc29uIDogaHR0cHM6Ly9naXRodWIuY29tL2t3aXNhdHpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VuZyBNaW51dHQnLCAnZW5nZXIgTWludXR0J10sXG4gICAgICAgICAgICBoOiBbJ2VuZyBTdG9ubicsICdlbmdlciBTdG9ubiddLFxuICAgICAgICAgICAgZDogWydlZW4gRGFnJywgJ2VuZ2VtIERhZyddLFxuICAgICAgICAgICAgTTogWydlZSBNb3VudCcsICdlbmdlbSBNb3VudCddLFxuICAgICAgICAgICAgeTogWydlZSBKb2VyJywgJ2VuZ2VtIEpvZXInXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzRnV0dXJlVGltZShzdHJpbmcpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgICAgIGlmIChlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICdhICcgKyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdhbiAnICsgc3RyaW5nO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwcm9jZXNzUGFzdFRpbWUoc3RyaW5nKSB7XG4gICAgICAgIHZhciBudW1iZXIgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKCcgJykpO1xuICAgICAgICBpZiAoZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAndmlydSAnICsgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAndmlydW4gJyArIHN0cmluZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3b3JkIGJlZm9yZSB0aGUgZ2l2ZW4gbnVtYmVyIGxvc2VzIHRoZSAnLW4nIGVuZGluZy5cbiAgICAgKiBlLmcuICdhbiAxMCBEZWVnJyBidXQgJ2EgNSBEZWVnJ1xuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlciB7aW50ZWdlcn1cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSB7XG4gICAgICAgIG51bWJlciA9IHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyBOZWdhdGl2ZSBOdW1iZXIgLS0+IGFsd2F5cyB0cnVlXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMCkge1xuICAgICAgICAgICAgLy8gT25seSAxIGRpZ2l0XG4gICAgICAgICAgICBpZiAoNCA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIC8vIDIgZGlnaXRzXG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgZmlyc3REaWdpdCA9IG51bWJlciAvIDEwO1xuICAgICAgICAgICAgaWYgKGxhc3REaWdpdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIoZmlyc3REaWdpdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKGxhc3REaWdpdCk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTAwMDApIHtcbiAgICAgICAgICAgIC8vIDMgb3IgNCBkaWdpdHMgLS0+IHJlY3Vyc2l2ZWx5IGNoZWNrIGZpcnN0IGRpZ2l0XG4gICAgICAgICAgICB3aGlsZSAobnVtYmVyID49IDEwKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbnl0aGluZyBsYXJnZXIgdGhhbiA0IGRpZ2l0czogcmVjdXJzaXZlbHkgY2hlY2sgZmlyc3Qgbi0zIGRpZ2l0c1xuICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTAwMDtcbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xiJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6RlcnpfQWJyw6tsbF9NZWVfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnU29ubmRlZ19Nw6lpbmRlZ19Ew6tuc2NoZGVnX03Dq3R0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nw6kuX0TDqy5fTcOrLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nw6lfRMOrX03Dq19Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tIFtBdWVyXScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzIFtBdWVyXScsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhdXQgdW1dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW011ZXIgdW1dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbR8Orc2NodGVyIHVtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIERpZmZlcmVudCBkYXRlIHN0cmluZyBmb3IgJ0TDq25zY2hkZWcnIChUdWVzZGF5KSBhbmQgJ0Rvbm5lc2NoZGVnJyAoVGh1cnNkYXkpIGR1ZSB0byBwaG9ub2xvZ2ljYWwgcnVsZVxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbTGVzY2h0ZV0gZGRkZCBbdW1dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogcHJvY2Vzc0Z1dHVyZVRpbWUsXG4gICAgICAgICAgICBwYXN0OiBwcm9jZXNzUGFzdFRpbWUsXG4gICAgICAgICAgICBzOiAnZSBwdWVyIFNla29ubmVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2Vrb25uZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXR0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3Rvbm5lbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6ICclZCBEZWVnJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogJyVkIE3DqWludCcsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6ICclZCBKb2VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsYjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lb.js\n"); @@ -6923,7 +6594,6 @@ eval("//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! a \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var lo = moment.defineLocale('lo', {\n months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n '_'\n ),\n monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n '_'\n ),\n weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n isPM: function (input) {\n return input === 'ຕອນແລງ';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ຕອນເຊົ້າ';\n } else {\n return 'ຕອນແລງ';\n }\n },\n calendar: {\n sameDay: '[ມື້ນີ້ເວລາ] LT',\n nextDay: '[ມື້ອື່ນເວລາ] LT',\n nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ອີກ %s',\n past: '%sຜ່ານມາ',\n s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n ss: '%d ວິນາທີ',\n m: '1 ນາທີ',\n mm: '%d ນາທີ',\n h: '1 ຊົ່ວໂມງ',\n hh: '%d ຊົ່ວໂມງ',\n d: '1 ມື້',\n dd: '%d ມື້',\n M: '1 ເດືອນ',\n MM: '%d ເດືອນ',\n y: '1 ປີ',\n yy: '%d ປີ',\n },\n dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n ordinal: function (number) {\n return 'ທີ່' + number;\n },\n });\n\n return lo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanM/YjI5ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULHlDQUF5QyxJQUFJO0FBQzdDO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbG8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGFvIFtsb11cbi8vISBhdXRob3IgOiBSeWFuIEhhcnQgOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbmhhcnQyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsbycsIHtcbiAgICAgICAgbW9udGhzOiAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Lqt4Lqy4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C6l1/guohf4Lqt4LqEX+C6nl/gup7guqtf4Lqq4LqBX+C6qicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICfguqfgurHguplkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C6leC6reC6meC7gOC6iuC6u+C7ieC6snzgupXguq3gupngu4HguqXguocvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C6leC6reC6meC7geC6peC6hyc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgupXguq3gupngu4Dguorgurvgu4ngurInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C6leC6reC6meC7geC6peC6hyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C6oeC6t+C7ieC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vguqHgurfgu4nguq3gurfgu4jgupngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+C6p+C6seC6mV1kZGRkW+C7nOC7ieC6suC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vguqHgurfgu4nguqfgurLgupngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C6p+C6seC6mV1kZGRkW+C7geC6peC7ieC6p+C6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfguq3gurXguoEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVz4Lqc4LuI4Lqy4LqZ4Lqh4LqyJyxcbiAgICAgICAgICAgIHM6ICfguprgu43gu4jgu4Dgupfgurvgu4jgurLgu4PgupTguqfgurTgupngurLgupfgurUnLFxuICAgICAgICAgICAgc3M6ICclZCDguqfgurTgupngurLgupfgurUnLFxuICAgICAgICAgICAgbTogJzEg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIGg6ICcxIOC6iuC6u+C7iOC6p+C7guC6oeC6hycsXG4gICAgICAgICAgICBoaDogJyVkIOC6iuC6u+C7iOC6p+C7guC6oeC6hycsXG4gICAgICAgICAgICBkOiAnMSDguqHgurfgu4knLFxuICAgICAgICAgICAgZGQ6ICclZCDguqHgurfgu4knLFxuICAgICAgICAgICAgTTogJzEg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgICAgIHk6ICcxIOC6m+C6tScsXG4gICAgICAgICAgICB5eTogJyVkIOC6m+C6tScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC8o4LqX4Lq14LuIKVxcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuICfgupfgurXgu4gnICsgbnVtYmVyO1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxvO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lo.js\n"); @@ -6936,7 +6606,6 @@ eval("//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ry \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundė_sekundžių_sekundes',\n m: 'minutė_minutės_minutę',\n mm: 'minutės_minučių_minutes',\n h: 'valanda_valandos_valandą',\n hh: 'valandos_valandų_valandas',\n d: 'diena_dienos_dieną',\n dd: 'dienos_dienų_dienas',\n M: 'mėnuo_mėnesio_mėnesį',\n MM: 'mėnesiai_mėnesių_mėnesius',\n y: 'metai_metų_metus',\n yy: 'metai_metų_metus',\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix\n ? forms(key)[0]\n : isFuture\n ? forms(key)[1]\n : forms(key)[2];\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return (\n result + translateSingular(number, withoutSuffix, key[0], isFuture)\n );\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months: {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n '_'\n ),\n standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n '_'\n ),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n },\n monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays: {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n '_'\n ),\n standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n '_'\n ),\n isFormat: /dddd HH:mm/,\n },\n weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY [m.] MMMM D [d.]',\n LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l: 'YYYY-MM-DD',\n ll: 'YYYY [m.] MMMM D [d.]',\n lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n },\n calendar: {\n sameDay: '[Šiandien] LT',\n nextDay: '[Rytoj] LT',\n nextWeek: 'dddd LT',\n lastDay: '[Vakar] LT',\n lastWeek: '[Praėjusį] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'po %s',\n past: 'prieš %s',\n s: translateSeconds,\n ss: translate,\n m: translateSingular,\n mm: translate,\n h: translateSingular,\n hh: translate,\n d: translateSingular,\n dd: translate,\n M: translateSingular,\n MM: translate,\n y: translateSingular,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal: function (number) {\n return number + '-oji';\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHQuanM/MjZmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExpdGh1YW5pYW4gW2x0XVxuLy8hIGF1dGhvciA6IE1pbmRhdWdhcyBNb3rFq3JhcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tbW96dXJhc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICBzczogJ3Nla3VuZMSXX3Nla3VuZMW+acWzX3Nla3VuZGVzJyxcbiAgICAgICAgbTogJ21pbnV0xJdfbWludXTEl3NfbWludXTEmScsXG4gICAgICAgIG1tOiAnbWludXTEl3NfbWludcSNacWzX21pbnV0ZXMnLFxuICAgICAgICBoOiAndmFsYW5kYV92YWxhbmRvc192YWxhbmTEhScsXG4gICAgICAgIGhoOiAndmFsYW5kb3NfdmFsYW5kxbNfdmFsYW5kYXMnLFxuICAgICAgICBkOiAnZGllbmFfZGllbm9zX2RpZW7EhScsXG4gICAgICAgIGRkOiAnZGllbm9zX2RpZW7Fs19kaWVuYXMnLFxuICAgICAgICBNOiAnbcSXbnVvX23El25lc2lvX23El25lc8SvJyxcbiAgICAgICAgTU06ICdtxJduZXNpYWlfbcSXbmVzacWzX23El25lc2l1cycsXG4gICAgICAgIHk6ICdtZXRhaV9tZXTFs19tZXR1cycsXG4gICAgICAgIHl5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxuICAgIH07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlU2Vjb25kcyhudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiAna2VsaW9zIHNla3VuZMSXcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna2VsacWzIHNla3VuZMW+acWzJyA6ICdrZWxpYXMgc2VrdW5kZXMnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeFxuICAgICAgICAgICAgPyBmb3JtcyhrZXkpWzBdXG4gICAgICAgICAgICA6IGlzRnV0dXJlXG4gICAgICAgICAgICA/IGZvcm1zKGtleSlbMV1cbiAgICAgICAgICAgIDogZm9ybXMoa2V5KVsyXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3BlY2lhbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAwIHx8IChudW1iZXIgPiAxMCAmJiBudW1iZXIgPCAyMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1zKGtleSkge1xuICAgICAgICByZXR1cm4gdW5pdHNba2V5XS5zcGxpdCgnXycpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgcmVzdWx0ICsgdHJhbnNsYXRlU2luZ3VsYXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXlbMF0sIGlzRnV0dXJlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyBmb3JtcyhrZXkpWzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHNwZWNpYWwobnVtYmVyKSA/IGZvcm1zKGtleSlbMV0gOiBmb3JtcyhrZXkpWzJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdCcsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzYXVzaW9fdmFzYXJpb19rb3ZvX2JhbGFuZMW+aW9fZ2VndcW+xJdzX2JpcsW+ZWxpb19saWVwb3NfcnVncGrFq8SNaW9fcnVnc8SXam9fc3BhbGlvX2xhcGtyacSNaW9fZ3J1b2TFvmlvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAnc2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2Rpcycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/fE1NTU0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3NhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2VrbWFkaWVuxK9fcGlybWFkaWVuxK9fYW50cmFkaWVuxK9fdHJlxI1pYWRpZW7Er19rZXR2aXJ0YWRpZW7Er19wZW5rdGFkaWVuxK9fxaFlxaF0YWRpZW7Erycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ3Nla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJhZGllbmlzX3RyZcSNaWFkaWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX8WhZcWhdGFkaWVuaXMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvZGRkZCBISDptbS8sXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl/FoGXFoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTX1BfQV9UX0tfUG5fxaAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbxaBpYW5kaWVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1J5dG9qXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tWYWthcl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbUHJhxJdqdXPEr10gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3BvICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmllxaEgJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlU2Vjb25kcyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS1vamkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy1vamknO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHQ7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lt.js\n"); @@ -6949,7 +6618,6 @@ eval("//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! auth \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n h: 'stundas_stundām_stunda_stundas'.split('_'),\n hh: 'stundas_stundām_stunda_stundas'.split('_'),\n d: 'dienas_dienām_diena_dienas'.split('_'),\n dd: 'dienas_dienām_diena_dienas'.split('_'),\n M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n y: 'gada_gadiem_gads_gadi'.split('_'),\n yy: 'gada_gadiem_gads_gadi'.split('_'),\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n '_'\n ),\n weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY.',\n LL: 'YYYY. [gada] D. MMMM',\n LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n },\n calendar: {\n sameDay: '[Šodien pulksten] LT',\n nextDay: '[Rīt pulksten] LT',\n nextWeek: 'dddd [pulksten] LT',\n lastDay: '[Vakar pulksten] LT',\n lastWeek: '[Pagājušā] dddd [pulksten] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'pēc %s',\n past: 'pirms %s',\n s: relativeSeconds,\n ss: relativeTimeWithPlural,\n m: relativeTimeWithSingular,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithSingular,\n hh: relativeTimeWithPlural,\n d: relativeTimeWithSingular,\n dd: relativeTimeWithPlural,\n M: relativeTimeWithSingular,\n MM: relativeTimeWithPlural,\n y: relativeTimeWithSingular,\n yy: relativeTimeWithPlural,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanM/Yjk3YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sdi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMYXR2aWFuIFtsdl1cbi8vISBhdXRob3IgOiBLcmlzdGFwcyBLYXJsc29ucyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9za2Frcmlcbi8vISBhdXRob3IgOiBKxIFuaXMgRWxtZXJpcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9KYW5pc0VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1bml0cyA9IHtcbiAgICAgICAgc3M6ICdzZWt1bmRlc19zZWt1bmTEk21fc2VrdW5kZV9zZWt1bmRlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgbTogJ21pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzJy5zcGxpdCgnXycpLFxuICAgICAgICBtbTogJ21pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzJy5zcGxpdCgnXycpLFxuICAgICAgICBoOiAnc3R1bmRhc19zdHVuZMSBbV9zdHVuZGFfc3R1bmRhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgaGg6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgICAgICBkOiAnZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzJy5zcGxpdCgnXycpLFxuICAgICAgICBkZDogJ2RpZW5hc19kaWVuxIFtX2RpZW5hX2RpZW5hcycuc3BsaXQoJ18nKSxcbiAgICAgICAgTTogJ23Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWknLnNwbGl0KCdfJyksXG4gICAgICAgIE1NOiAnbcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgeTogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgeXk6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJyksXG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gd2l0aG91dFN1ZmZpeCBib29sZWFuIHRydWUgPSBhIGxlbmd0aCBvZiB0aW1lOyBmYWxzZSA9IGJlZm9yZS9hZnRlciBhIHBlcmlvZCBvZiB0aW1lLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvcm1hdChmb3JtcywgbnVtYmVyLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAvLyBFLmcuIFwiMjEgbWluxat0ZVwiLCBcIjMgbWluxat0ZXNcIi5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSAmJiBudW1iZXIgJSAxMDAgIT09IDExID8gZm9ybXNbMl0gOiBmb3Jtc1szXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3Rlc1wiIGFzIGluIFwicMSTYyAyMSBtaW7Fq3Rlc1wiLlxuICAgICAgICAgICAgLy8gRS5nLiBcIjMgbWluxat0xJNtXCIgYXMgaW4gXCJwxJNjIDMgbWluxat0xJNtXCIuXG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgJiYgbnVtYmVyICUgMTAwICE9PSAxMSA/IGZvcm1zWzBdIDogZm9ybXNbMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgZm9ybWF0KHVuaXRzW2tleV0sIG51bWJlciwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0KHVuaXRzW2tleV0sIG51bWJlciwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlU2Vjb25kcyhudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZGHFvmFzIHNla3VuZGVzJyA6ICdkYcW+xIFtIHNla3VuZMSTbSc7XG4gICAgfVxuXG4gICAgdmFyIGx2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbHYnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnbEgXJpc19mZWJydcSBcmlzX21hcnRzX2FwcsSrbGlzX21haWpzX2rFq25panNfasWrbGlqc19hdWd1c3RzX3NlcHRlbWJyaXNfb2t0b2JyaXNfbm92ZW1icmlzX2RlY2VtYnJpcycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFpX2rFq25fasWrbF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3N2xJN0ZGllbmFfcGlybWRpZW5hX290cmRpZW5hX3RyZcWhZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdl9QX09fVF9DX1BrX1MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3ZfUF9PX1RfQ19Qa19TJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZLicsXG4gICAgICAgICAgICBMTDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIGRkZGQsIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbxaBvZGllbiBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tSxKt0IHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1Zha2FyIHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tQYWfEgWp1xaHEgV0gZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAncMSTYyAlcycsXG4gICAgICAgICAgICBwYXN0OiAncGlybXMgJXMnLFxuICAgICAgICAgICAgczogcmVsYXRpdmVTZWNvbmRzLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBNOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGx2O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/lv.js\n"); @@ -6962,7 +6630,6 @@ eval("//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač : https://github.com/miodragnikac\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'dan',\n dd: translator.translate,\n M: 'mjesec',\n MM: translator.translate,\n y: 'godinu',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return me;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWUuanM/MjkzYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNb250ZW5lZ3JpbiBbbWVdXG4vLyEgYXV0aG9yIDogTWlvZHJhZyBOaWthxI0gPG1pb2RyYWdAcmVzdGFydGl0Lm1lPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taW9kcmFnbmlrYWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZCcsICdzZWt1bmRhJywgJ3Nla3VuZGknXSxcbiAgICAgICAgICAgIG06IFsnamVkYW4gbWludXQnLCAnamVkbm9nIG1pbnV0YSddLFxuICAgICAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRhJywgJ21pbnV0YSddLFxuICAgICAgICAgICAgaDogWydqZWRhbiBzYXQnLCAnamVkbm9nIHNhdGEnXSxcbiAgICAgICAgICAgIGhoOiBbJ3NhdCcsICdzYXRhJywgJ3NhdGknXSxcbiAgICAgICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgICAgIE1NOiBbJ21qZXNlYycsICdtamVzZWNhJywgJ21qZXNlY2knXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGluYScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgICAgICA6IG51bWJlciA+PSAyICYmIG51bWJlciA8PSA0XG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzFdXG4gICAgICAgICAgICAgICAgOiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShudW1iZXIsIHdvcmRLZXkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgdmFyIG1lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc2p1dHJhIHVdIExUJyxcblxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkamVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3V0b3JrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3JpamVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWU7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/me.js\n"); @@ -6975,7 +6642,6 @@ eval("//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! aut \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan : https://github.com/johnideal\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n '_'\n ),\n monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n '_'\n ),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWkuanM/Njg4YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELElBQUk7QUFDM0QsNkRBQTZELElBQUk7QUFDakUsNERBQTRELElBQUk7QUFDaEUsa0VBQWtFLElBQUk7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hb3JpIFttaV1cbi8vISBhdXRob3IgOiBKb2huIENvcnJpZ2FuIDxyb2JiaWVjbG9zZXRAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb2huaWRlYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21pJywge1xuICAgICAgICBtb250aHM6ICdLb2hpLXTEgXRlX0h1aS10YW5ndXJ1X1BvdXTFqy10ZS1yYW5naV9QYWVuZ2Etd2jEgXdoxIFfSGFyYXR1YV9QaXBpcmlfSMWNbmdvaW5nb2lfSGVyZS10dXJpLWvFjWvEgV9NYWh1cnVfV2hpcmluZ2EtxIEtbnVrdV9XaGlyaW5nYS3EgS1yYW5naV9IYWtpaGVhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0tvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0jFjW5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsMn0vaSxcbiAgICAgICAgd2Vla2RheXM6ICdSxIF0YXB1X01hbmVfVMWrcmVpX1dlbmVyZWlfVMSBaXRlX1BhcmFpcmVfSMSBdGFyZWknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtpXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaSB0ZWllIG1haGFuYSwgaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1thcG9wbyBpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaW5hbmFoaSBpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3doYWthbXV0dW5nYSBpXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgcm90byBpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBpIG11YScsXG4gICAgICAgICAgICBzOiAndGUgaMSTa29uYSBydWFydWEnLFxuICAgICAgICAgICAgc3M6ICclZCBoxJNrb25hJyxcbiAgICAgICAgICAgIG06ICdoZSBtZW5ldGknLFxuICAgICAgICAgICAgbW06ICclZCBtZW5ldGknLFxuICAgICAgICAgICAgaDogJ3RlIGhhb3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGFvcmEnLFxuICAgICAgICAgICAgZDogJ2hlIHJhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgcmEnLFxuICAgICAgICAgICAgTTogJ2hlIG1hcmFtYScsXG4gICAgICAgICAgICBNTTogJyVkIG1hcmFtYScsXG4gICAgICAgICAgICB5OiAnaGUgdGF1JyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGF1JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtaTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mi.js\n"); @@ -6988,7 +6654,6 @@ eval("//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mk = moment.defineLocale('mk', {\n months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Денес во] LT',\n nextDay: '[Утре во] LT',\n nextWeek: '[Во] dddd [во] LT',\n lastDay: '[Вчера во] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пред %s',\n s: 'неколку секунди',\n ss: '%d секунди',\n m: 'една минута',\n mm: '%d минути',\n h: 'еден час',\n hh: '%d часа',\n d: 'еден ден',\n dd: '%d дена',\n M: 'еден месец',\n MM: '%d месеци',\n y: 'една година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return mk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanM/NjkwOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21rLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hY2Vkb25pYW4gW21rXVxuLy8hIGF1dGhvciA6IEJvcmlzbGF2IE1pY2tvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9CMGswXG4vLyEgYXV0aG9yIDogU2FzaGtvIFRvZG9yb3YgOiBodHRwczovL2dpdGh1Yi5jb20vYmt5Y2VoXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaycsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRmNCw0L1f0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdC70LBf0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQvtC6X9C/0LXRgtC+0Lpf0YHQsNCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CU0LXQvdC10YEg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQo9GC0YDQtSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQktC+XSBkZGRkIFvQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LDRgtCwXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC10LQgJXMnLFxuICAgICAgICAgICAgczogJ9C90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbTogJ9C10LTQvdCwINC80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoOiAn0LXQtNC10L0g0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZDogJ9C10LTQtdC9INC00LXQvScsXG4gICAgICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIE06ICfQtdC00LXQvSDQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQtdGB0LXRhtC4JyxcbiAgICAgICAgICAgIHk6ICfQtdC00L3QsCDQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1rO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mk.js\n"); @@ -7001,7 +6666,6 @@ eval("//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! auth \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ml = moment.defineLocale('ml', {\n months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n '_'\n ),\n monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n '_'\n ),\n weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm -നു',\n LTS: 'A h:mm:ss -നു',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm -നു',\n LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n },\n calendar: {\n sameDay: '[ഇന്ന്] LT',\n nextDay: '[നാളെ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ഇന്നലെ] LT',\n lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s കഴിഞ്ഞ്',\n past: '%s മുൻപ്',\n s: 'അൽപ നിമിഷങ്ങൾ',\n ss: '%d സെക്കൻഡ്',\n m: 'ഒരു മിനിറ്റ്',\n mm: '%d മിനിറ്റ്',\n h: 'ഒരു മണിക്കൂർ',\n hh: '%d മണിക്കൂർ',\n d: 'ഒരു ദിവസം',\n dd: '%d ദിവസം',\n M: 'ഒരു മാസം',\n MM: '%d മാസം',\n y: 'ഒരു വർഷം',\n yy: '%d വർഷം',\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n },\n });\n\n return ml;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWwuanM/MDJmYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheWFsYW0gW21sXVxuLy8hIGF1dGhvciA6IEZsb3lkIFBpbmsgOiBodHRwczovL2dpdGh1Yi5jb20vZmxveWRwaW5rXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbCcsIHtcbiAgICAgICAgbW9udGhzOiAn4LSc4LSo4LWB4LS14LSw4LS/X+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0v1/gtK7gtL7gtbzgtJrgtY3gtJrgtY1f4LSP4LSq4LWN4LSw4LS/4LW9X+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWIX+C0k+C0l+C0uOC1jeC0seC1jeC0seC1jV/gtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtbxf4LSS4LSV4LWN4LSf4LWL4LSs4LW8X+C0qOC0teC0guC0rOC1vF/gtKHgtL/gtLjgtILgtKzgtbwnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4LSc4LSo4LWBLl/gtKvgtYbgtKzgtY3gtLDgtYEuX+C0ruC0vuC1vC5f4LSP4LSq4LWN4LSw4LS/Ll/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iC5f4LST4LSXLl/gtLjgtYbgtKrgtY3gtLHgtY3gtLEuX+C0kuC0leC1jeC0n+C1iy5f4LSo4LS14LSCLl/gtKHgtL/gtLjgtIIuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+C0nuC0vuC0r+C0seC0vuC0tOC1jeC0ml/gtKTgtL/gtJngtY3gtJXgtLPgtL7gtLTgtY3gtJpf4LSa4LWK4LS14LWN4LS14LS+4LS04LWN4LSaX+C0rOC1geC0p+C0qOC0vuC0tOC1jeC0ml/gtLXgtY3gtK/gtL7gtLTgtL7gtLTgtY3gtJpf4LS14LWG4LSz4LWN4LSz4LS/4LSv4LS+4LS04LWN4LSaX+C0tuC0qOC0v+C0r+C0vuC0tOC1jeC0micuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C0nuC0vuC0r+C1vF/gtKTgtL/gtJngtY3gtJXgtb5f4LSa4LWK4LS14LWN4LS1X+C0rOC1geC0p+C1u1/gtLXgtY3gtK/gtL7gtLTgtIJf4LS14LWG4LSz4LWN4LSz4LS/X+C0tuC0qOC0vycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgtJ7gtL5f4LSk4LS/X+C0muC1il/gtKzgtYFf4LS14LWN4LSv4LS+X+C0teC1hl/gtLYnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyAt4LSo4LWBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgtIfgtKjgtY3gtKjgtY1dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LSo4LS+4LSz4LWGXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LSH4LSo4LWN4LSo4LSy4LWGXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgtJXgtLTgtL/gtJ7gtY3gtJ5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LSV4LS04LS/4LSe4LWN4LSe4LWNJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgtK7gtYHgtbvgtKrgtY0nLFxuICAgICAgICAgICAgczogJ+C0heC1veC0qiDgtKjgtL/gtK7gtL/gtLfgtJngtY3gtJngtb4nLFxuICAgICAgICAgICAgc3M6ICclZCDgtLjgtYbgtJXgtY3gtJXgtbvgtKHgtY0nLFxuICAgICAgICAgICAgbTogJ+C0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0nLFxuICAgICAgICAgICAgbW06ICclZCDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0nLFxuICAgICAgICAgICAgaDogJ+C0kuC0sOC1gSDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwnLFxuICAgICAgICAgICAgaGg6ICclZCDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwnLFxuICAgICAgICAgICAgZDogJ+C0kuC0sOC1gSDgtKbgtL/gtLXgtLjgtIInLFxuICAgICAgICAgICAgZGQ6ICclZCDgtKbgtL/gtLXgtLjgtIInLFxuICAgICAgICAgICAgTTogJ+C0kuC0sOC1gSDgtK7gtL7gtLjgtIInLFxuICAgICAgICAgICAgTU06ICclZCDgtK7gtL7gtLjgtIInLFxuICAgICAgICAgICAgeTogJ+C0kuC0sOC1gSDgtLXgtbzgtLfgtIInLFxuICAgICAgICAgICAgeXk6ICclZCDgtLXgtbzgtLfgtIInLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LSw4LS+4LSk4LWN4LSw4LS/fOC0sOC0vuC0teC0v+C0suC1hnzgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNfOC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gnzgtLDgtL7gtKTgtY3gtLDgtL8vaSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C0sOC0vuC0pOC1jeC0sOC0vycgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtKTgtY3gtLDgtL8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0teC0v+C0suC1hic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLDgtL7gtKTgtY3gtLDgtL8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1sO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ml.js\n"); @@ -7014,7 +6678,6 @@ eval("//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! autho \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 's':\n return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n case 'ss':\n return number + (withoutSuffix ? ' секунд' : ' секундын');\n case 'm':\n case 'mm':\n return number + (withoutSuffix ? ' минут' : ' минутын');\n case 'h':\n case 'hh':\n return number + (withoutSuffix ? ' цаг' : ' цагийн');\n case 'd':\n case 'dd':\n return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n case 'M':\n case 'MM':\n return number + (withoutSuffix ? ' сар' : ' сарын');\n case 'y':\n case 'yy':\n return number + (withoutSuffix ? ' жил' : ' жилийн');\n default:\n return number;\n }\n }\n\n var mn = moment.defineLocale('mn', {\n months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n '_'\n ),\n monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY оны MMMMын D',\n LLL: 'YYYY оны MMMMын D HH:mm',\n LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n },\n meridiemParse: /ҮӨ|ҮХ/i,\n isPM: function (input) {\n return input === 'ҮХ';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ҮӨ';\n } else {\n return 'ҮХ';\n }\n },\n calendar: {\n sameDay: '[Өнөөдөр] LT',\n nextDay: '[Маргааш] LT',\n nextWeek: '[Ирэх] dddd LT',\n lastDay: '[Өчигдөр] LT',\n lastWeek: '[Өнгөрсөн] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s дараа',\n past: '%s өмнө',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + ' өдөр';\n default:\n return number;\n }\n },\n });\n\n return mn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbW4uanM/OTU4YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1vbmdvbGlhbiBbbW5dXG4vLyEgYXV0aG9yIDogSmF2a2hsYW50dWdzIE55YW1kb3JqIDogaHR0cHM6Ly9naXRodWIuY29tL2phdmtoYWFuajdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LQnIDogJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LTRi9C9JztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LXQutGD0L3QtCcgOiAnINGB0LXQutGD0L3QtNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LzQuNC90YPRgicgOiAnINC80LjQvdGD0YLRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGG0LDQsycgOiAnINGG0LDQs9C40LnQvScpO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDTqdC006nRgCcgOiAnINOp0LTRgNC40LnQvScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRgdCw0YAnIDogJyDRgdCw0YDRi9C9Jyk7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINC20LjQuycgOiAnINC20LjQu9C40LnQvScpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1uID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbW4nLCB7XG4gICAgICAgIG1vbnRoczogJ9Cd0Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0KXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAX9CT0YPRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CU06nRgNOp0LLQtNKv0LPRjdGN0YAg0YHQsNGAX9Ci0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JfRg9GA0LPQsNC00YPQs9Cw0LDRgCDRgdCw0YBf0JTQvtC70LTRg9Cz0LDQsNGAINGB0LDRgF/QndCw0LnQvNC00YPQs9Cw0LDRgCDRgdCw0YBf0JXRgdC00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CQ0YDQstCw0L0g0L3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LLQsNC9INGF0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcxINGB0LDRgF8yINGB0LDRgF8zINGB0LDRgF80INGB0LDRgF81INGB0LDRgF82INGB0LDRgF83INGB0LDRgF84INGB0LDRgF85INGB0LDRgF8xMCDRgdCw0YBfMTEg0YHQsNGAXzEyINGB0LDRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfQndGP0Lxf0JTQsNCy0LDQsF/QnNGP0LPQvNCw0YBf0JvRhdCw0LPQstCwX9Cf0q/RgNGN0LJf0JHQsNCw0YHQsNC9X9CR0Y/QvNCx0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQndGP0Lxf0JTQsNCyX9Cc0Y/Qs1/Qm9GF0LBf0J/Sr9GAX9CR0LDQsF/QkdGP0LwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0J3Rj1/QlNCwX9Cc0Y9f0JvRhV/Qn9KvX9CR0LBf0JHRjycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkg0L7QvdGLIE1NTU3Ri9C9IEQnLFxuICAgICAgICAgICAgTExMOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/SrtOofNKu0KUvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfSrtClJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Ku06gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Ku0KUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vTqNC906nTqdC006nRgF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQnNCw0YDQs9Cw0LDRiF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb0JjRgNGN0YVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vTqNGH0LjQs9C006nRgF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb06jQvdCz06nRgNGB06nQvV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINC00LDRgNCw0LAnLFxuICAgICAgICAgICAgcGFzdDogJyVzINOp0LzQvdOpJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9INOp0LTTqdGALyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINOp0LTTqdGAJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1uO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mn.js\n"); @@ -7027,7 +6690,6 @@ eval("//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! autho \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n var output = '';\n if (withoutSuffix) {\n switch (string) {\n case 's':\n output = 'काही सेकंद';\n break;\n case 'ss':\n output = '%d सेकंद';\n break;\n case 'm':\n output = 'एक मिनिट';\n break;\n case 'mm':\n output = '%d मिनिटे';\n break;\n case 'h':\n output = 'एक तास';\n break;\n case 'hh':\n output = '%d तास';\n break;\n case 'd':\n output = 'एक दिवस';\n break;\n case 'dd':\n output = '%d दिवस';\n break;\n case 'M':\n output = 'एक महिना';\n break;\n case 'MM':\n output = '%d महिने';\n break;\n case 'y':\n output = 'एक वर्ष';\n break;\n case 'yy':\n output = '%d वर्षे';\n break;\n }\n } else {\n switch (string) {\n case 's':\n output = 'काही सेकंदां';\n break;\n case 'ss':\n output = '%d सेकंदां';\n break;\n case 'm':\n output = 'एका मिनिटा';\n break;\n case 'mm':\n output = '%d मिनिटां';\n break;\n case 'h':\n output = 'एका तासा';\n break;\n case 'hh':\n output = '%d तासां';\n break;\n case 'd':\n output = 'एका दिवसा';\n break;\n case 'dd':\n output = '%d दिवसां';\n break;\n case 'M':\n output = 'एका महिन्या';\n break;\n case 'MM':\n output = '%d महिन्यां';\n break;\n case 'y':\n output = 'एका वर्षा';\n break;\n case 'yy':\n output = '%d वर्षां';\n break;\n }\n }\n return output.replace(/%d/i, number);\n }\n\n var mr = moment.defineLocale('mr', {\n months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n '_'\n ),\n monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm वाजता',\n LTS: 'A h:mm:ss वाजता',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm वाजता',\n LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[उद्या] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमध्ये',\n past: '%sपूर्वी',\n s: relativeTimeMr,\n ss: relativeTimeMr,\n m: relativeTimeMr,\n mm: relativeTimeMr,\n h: relativeTimeMr,\n hh: relativeTimeMr,\n d: relativeTimeMr,\n dd: relativeTimeMr,\n M: relativeTimeMr,\n MM: relativeTimeMr,\n y: relativeTimeMr,\n yy: relativeTimeMr,\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n return hour;\n } else if (\n meridiem === 'दुपारी' ||\n meridiem === 'सायंकाळी' ||\n meridiem === 'रात्री'\n ) {\n return hour >= 12 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour >= 0 && hour < 6) {\n return 'पहाटे';\n } else if (hour < 12) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return mr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanM/MzliZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFyYXRoaSBbbXJdXG4vLyEgYXV0aG9yIDogSGFyc2hhZCBLYWxlIDogaHR0cHM6Ly9naXRodWIuY29tL2thbGVodlxuLy8hIGF1dGhvciA6IFZpdmVrIEF0aGFseWUgOiBodHRwczovL2dpdGh1Yi5jb20vdm5hdGhhbHllXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+ClpycsXG4gICAgICAgICAgICAyOiAn4KWoJyxcbiAgICAgICAgICAgIDM6ICfgpaknLFxuICAgICAgICAgICAgNDogJ+ClqicsXG4gICAgICAgICAgICA1OiAn4KWrJyxcbiAgICAgICAgICAgIDY6ICfgpawnLFxuICAgICAgICAgICAgNzogJ+ClrScsXG4gICAgICAgICAgICA4OiAn4KWuJyxcbiAgICAgICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAgICAgMDogJ+ClpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgICAgICfgpaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVNcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9ICcnO1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpK7gpL/gpKjgpL/gpJ8nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpKTgpL7gpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKTgpL7gpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpKbgpL/gpLXgpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKbgpL/gpLXgpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpK7gpLngpL/gpKjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpLXgpLDgpY3gpLcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSm4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS44KWH4KSV4KSC4KSm4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSu4KS/4KSo4KS/4KSf4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS/4KSo4KS/4KSf4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSk4KS+4KS44KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSk4KS+4KS44KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSm4KS/4KS14KS44KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSm4KS/4KS14KS44KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSu4KS54KS/4KSo4KWN4KSv4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS54KS/4KSo4KWN4KSv4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KS14KSw4KWN4KS34KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS14KSw4KWN4KS34KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBtciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21yJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWAX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpL/gpLJf4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLLgpYhf4KSR4KSX4KS44KWN4KSfX+CkuOCkquCljeCkn+Clh+CkguCkrOCksF/gpJHgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSwX+CkoeCkv+CkuOClh+CkguCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaLl/gpI/gpKrgpY3gpLDgpL8uX+CkruClhy5f4KSc4KWC4KSoLl/gpJzgpYHgpLLgpYguX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+Cks+CkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cks1/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSJ4KSm4KWN4KSv4KS+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpKfgpY3gpK/gpYcnLFxuICAgICAgICAgICAgcGFzdDogJyVz4KSq4KWC4KSw4KWN4KS14KWAJyxcbiAgICAgICAgICAgIHM6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICB5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CkquCkueCkvuCkn+Clh3zgpLjgpJXgpL7gpLPgpYB84KSm4KWB4KSq4KS+4KSw4KWAfOCkuOCkvuCkr+CkguCkleCkvuCks+ClgHzgpLDgpL7gpKTgpY3gpLDgpYAvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpKrgpLngpL7gpJ/gpYcnIHx8IG1lcmlkaWVtID09PSAn4KS44KSV4KS+4KSz4KWAJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkpuClgeCkquCkvuCksOClgCcgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCcgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCljeCksOClgCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkquCkueCkvuCkn+Clhyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KSV4KS+4KSz4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpYHgpKrgpL7gpLDgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWN4KSw4KWAJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1yO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mr.js\n"); @@ -7040,7 +6702,6 @@ eval("//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var msMy = moment.defineLocale('ms-my', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return msMy;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMtbXkuanM/NjQwMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXMtbXldXG4vLyEgbm90ZSA6IERFUFJFQ0FURUQsIHRoZSBjb3JyZWN0IG9uZSBpcyBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtc015ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbXMtbXknLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWhfSXNfU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdwYWdpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3RlbmdhaGFyaScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAncGV0YW5nJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndGVuZ2FoYXJpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Vzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VsbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGVwYXMgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFsYW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIHNhYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIG06ICdzZW1pbml0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWluaXQnLFxuICAgICAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgICAgIGQ6ICdzZWhhcmknLFxuICAgICAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnVsYW4nLFxuICAgICAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtc015O1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ms-my.js\n"); @@ -7053,7 +6714,6 @@ eval("//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ms = moment.defineLocale('ms', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ms;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanM/ZWJlNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXkgW21zXVxuLy8hIGF1dGhvciA6IFdlbGRhbiBKYW1pbGkgOiBodHRwczovL2dpdGh1Yi5jb20vd2VsZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcycsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbTogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1zO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ms.js\n"); @@ -7066,7 +6726,6 @@ eval("//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mt = moment.defineLocale('mt', {\n months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n '_'\n ),\n weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Illum fil-]LT',\n nextDay: '[Għada fil-]LT',\n nextWeek: 'dddd [fil-]LT',\n lastDay: '[Il-bieraħ fil-]LT',\n lastWeek: 'dddd [li għadda] [fil-]LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'f’ %s',\n past: '%s ilu',\n s: 'ftit sekondi',\n ss: '%d sekondi',\n m: 'minuta',\n mm: '%d minuti',\n h: 'siegħa',\n hh: '%d siegħat',\n d: 'ġurnata',\n dd: '%d ġranet',\n M: 'xahar',\n MM: '%d xhur',\n y: 'sena',\n yy: '%d sni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanM/MWI0NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL210LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbHRlc2UgKE1hbHRhKSBbbXRdXG4vLyEgYXV0aG9yIDogQWxlc3NhbmRybyBNYXJ1Y2NpYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGVzbWFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ210Jywge1xuICAgICAgICBtb250aHM6ICdKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV/EoHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EacSLZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZyYV9NYXJfQXByX01lal/EoHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGnEiycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdJbC3EpmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnxKdhX0lsLcSmYW1pc19JbC3EoGltZ8SnYV9Jcy1TaWJ0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnxKZhZF9UbmVfVGxpX0VyYl/EpmFtX8SgaW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ8SmYV9Ubl9UbF9Fcl/EpmFfxKBpX1NpJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lsbHVtIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tHxKdhZGEgZmlsLV1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJbC1iaWVyYcSnIGZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsaSBnxKdhZGRhXSBbZmlsLV1MVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2bigJkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGlsdScsXG4gICAgICAgICAgICBzOiAnZnRpdCBzZWtvbmRpJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kaScsXG4gICAgICAgICAgICBtOiAnbWludXRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGg6ICdzaWVnxKdhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2llZ8SnYXQnLFxuICAgICAgICAgICAgZDogJ8ShdXJuYXRhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgxKFyYW5ldCcsXG4gICAgICAgICAgICBNOiAneGFoYXInLFxuICAgICAgICAgICAgTU06ICclZCB4aHVyJyxcbiAgICAgICAgICAgIHk6ICdzZW5hJyxcbiAgICAgICAgICAgIHl5OiAnJWQgc25pJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtdDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/mt.js\n"); @@ -7079,7 +6738,6 @@ eval("//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '၁',\n 2: '၂',\n 3: '၃',\n 4: '၄',\n 5: '၅',\n 6: '၆',\n 7: '၇',\n 8: '၈',\n 9: '၉',\n 0: '၀',\n },\n numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0',\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n '_'\n ),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n '_'\n ),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss: '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်',\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return my;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXkuanM/ODY4OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCdXJtZXNlIFtteV1cbi8vISBhdXRob3IgOiBTcXVhciB0ZWFtLCBteXNxdWFyLmNvbVxuLy8hIGF1dGhvciA6IERhdmlkIFJvc3NlbGxhdCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9naG9sYWRyXG4vLyEgYXV0aG9yIDogVGluIEF1bmcgTGluIDogaHR0cHM6Ly9naXRodWIuY29tL3RoYW55YXd6aW5taW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4YGBJyxcbiAgICAgICAgICAgIDI6ICfhgYInLFxuICAgICAgICAgICAgMzogJ+GBgycsXG4gICAgICAgICAgICA0OiAn4YGEJyxcbiAgICAgICAgICAgIDU6ICfhgYUnLFxuICAgICAgICAgICAgNjogJ+GBhicsXG4gICAgICAgICAgICA3OiAn4YGHJyxcbiAgICAgICAgICAgIDg6ICfhgYgnLFxuICAgICAgICAgICAgOTogJ+GBiScsXG4gICAgICAgICAgICAwOiAn4YGAJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+GBgSc6ICcxJyxcbiAgICAgICAgICAgICfhgYInOiAnMicsXG4gICAgICAgICAgICAn4YGDJzogJzMnLFxuICAgICAgICAgICAgJ+GBhCc6ICc0JyxcbiAgICAgICAgICAgICfhgYUnOiAnNScsXG4gICAgICAgICAgICAn4YGGJzogJzYnLFxuICAgICAgICAgICAgJ+GBhyc6ICc3JyxcbiAgICAgICAgICAgICfhgYgnOiAnOCcsXG4gICAgICAgICAgICAn4YGJJzogJzknLFxuICAgICAgICAgICAgJ+GBgCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBteSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ215Jywge1xuICAgICAgICBtb250aHM6ICfhgIfhgJThgLrhgJThgJ3hgKvhgJvhgK5f4YCW4YCx4YCW4YCx4YCs4YC64YCd4YCr4YCb4YCuX+GAmeGAkOGAul/hgKfhgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgIfhgLDhgJzhgK3hgK/hgIThgLpf4YCe4YC84YCC4YCv4YCQ4YC6X+GAheGAgOGAuuGAkOGAhOGAuuGAmOGArF/hgKHhgLHhgKzhgIDhgLrhgJDhgK3hgK/hgJjhgKxf4YCU4YCt4YCv4YCd4YCE4YC64YCY4YCsX+GAkuGAruGAh+GAhOGAuuGAmOGArCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfhgIfhgJThgLpf4YCW4YCxX+GAmeGAkOGAul/hgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgJzhgK3hgK/hgIThgLpf4YCe4YC8X+GAheGAgOGAul/hgKHhgLHhgKzhgIDhgLpf4YCU4YCt4YCvX+GAkuGAricuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfhgJDhgJThgIThgLrhgLnhgILhgJThgL3hgLFf4YCQ4YCU4YCE4YC64YC54YCc4YCsX+GAoeGAhOGAuuGAueGAguGAq1/hgJfhgK/hgJLhgLnhgJPhgJ/hgLDhgLhf4YCA4YC84YCs4YCe4YCV4YCQ4YCx4YC4X+GAnuGAseGArOGAgOGAvOGArF/hgIXhgJThgLEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhgJrhgJThgLEuXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GAmeGAlOGAgOGAuuGAluGAvOGAlOGAul0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YCZ4YCU4YCxLuGAgF0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YCV4YC84YCu4YC44YCB4YCy4YC34YCe4YCx4YCsXSBkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCcsXG4gICAgICAgICAgICBwYXN0OiAn4YCc4YC94YCU4YC64YCB4YCy4YC34YCe4YCx4YCsICVzIOGAgCcsXG4gICAgICAgICAgICBzOiAn4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuicsXG4gICAgICAgICAgICBzczogJyVkIOGAheGAgOGAueGAgOGAlOGAt+GAuicsXG4gICAgICAgICAgICBtOiAn4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIGg6ICfhgJDhgIXhgLrhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgaGg6ICclZCDhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgZDogJ+GAkOGAheGAuuGAm+GAgOGAuicsXG4gICAgICAgICAgICBkZDogJyVkIOGAm+GAgOGAuicsXG4gICAgICAgICAgICBNOiAn4YCQ4YCF4YC64YCcJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4YCcJyxcbiAgICAgICAgICAgIHk6ICfhgJDhgIXhgLrhgJThgL7hgIXhgLonLFxuICAgICAgICAgICAgeXk6ICclZCDhgJThgL7hgIXhgLonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXk7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/my.js\n"); @@ -7092,7 +6750,6 @@ eval("//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//! Sigurd Gartmann : https://github.com/sigurdga\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nb = moment.defineLocale('nb', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s siden',\n s: 'noen sekunder',\n ss: '%d sekunder',\n m: 'ett minutt',\n mm: '%d minutter',\n h: 'en time',\n hh: '%d timer',\n d: 'en dag',\n dd: '%d dager',\n w: 'en uke',\n ww: '%d uker',\n M: 'en måned',\n MM: '%d måneder',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nb;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmIuanM/NmNlMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE5vcndlZ2lhbiBCb2ttw6VsIFtuYl1cbi8vISBhdXRob3JzIDogRXNwZW4gSG92bGFuZHNkYWwgOiBodHRwczovL2dpdGh1Yi5jb20vcmV4eGFyc1xuLy8hICAgICAgICAgICBTaWd1cmQgR2FydG1hbm4gOiBodHRwczovL2dpdGh1Yi5jb20vc2lndXJkZ2Fcbi8vISAgICAgICAgICAgU3RlcGhlbiBSYW10aHVuIDogaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5yYW10aHVuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbmIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCduYicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3PDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7guX21hLl90aS5fb24uX3RvLl9mci5fbMO4Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaSBtb3JnZW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tmb3JyaWdlXSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpZGVuJyxcbiAgICAgICAgICAgIHM6ICdub2VuIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2V0dCBtaW51dHQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbWVyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlcicsXG4gICAgICAgICAgICB3OiAnZW4gdWtlJyxcbiAgICAgICAgICAgIHd3OiAnJWQgdWtlcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmVkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmVkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5iO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nb.js\n"); @@ -7105,7 +6762,6 @@ eval("//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n/ \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n var ne = moment.defineLocale('ne', {\n months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n '_'\n ),\n monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n '_'\n ),\n weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'Aको h:mm बजे',\n LTS: 'Aको h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, Aको h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[भोलि] LT',\n nextWeek: '[आउँदो] dddd[,] LT',\n lastDay: '[हिजो] LT',\n lastWeek: '[गएको] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमा',\n past: '%s अगाडि',\n s: 'केही क्षण',\n ss: '%d सेकेण्ड',\n m: 'एक मिनेट',\n mm: '%d मिनेट',\n h: 'एक घण्टा',\n hh: '%d घण्टा',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महिना',\n MM: '%d महिना',\n y: 'एक बर्ष',\n yy: '%d बर्ष',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ne;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanM/M2EzOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE5lcGFsZXNlIFtuZV1cbi8vISBhdXRob3IgOiBzdXZhc2ggOiBodHRwczovL2dpdGh1Yi5jb20vc3V2YXNoXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+ClpycsXG4gICAgICAgICAgICAyOiAn4KWoJyxcbiAgICAgICAgICAgIDM6ICfgpaknLFxuICAgICAgICAgICAgNDogJ+ClqicsXG4gICAgICAgICAgICA1OiAn4KWrJyxcbiAgICAgICAgICAgIDY6ICfgpawnLFxuICAgICAgICAgICAgNzogJ+ClrScsXG4gICAgICAgICAgICA4OiAn4KWuJyxcbiAgICAgICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAgICAgMDogJ+ClpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgICAgICfgpaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgbmUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCduZScsIHtcbiAgICAgICAgbW9udGhzOiAn4KSc4KSo4KS14KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KS/4KSyX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+Ckt+CljeCkn1/gpLjgpYfgpKrgpY3gpJ/gpYfgpK7gpY3gpKzgpLBf4KSF4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkreClh+CkruCljeCkrOCksF/gpKHgpL/gpLjgpYfgpK7gpY3gpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4KSG4KSH4KSk4KSs4KS+4KSwX+CkuOCli+CkruCkrOCkvuCksF/gpK7gpJngpY3gpJfgpLLgpKzgpL7gpLBf4KSs4KWB4KSn4KSs4KS+4KSwX+CkrOCkv+CkueCkv+CkrOCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpKzgpL7gpLBf4KS24KSo4KS/4KSs4KS+4KSwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSG4KSH4KSkLl/gpLjgpYvgpK4uX+CkruCkmeCljeCkl+Cksi5f4KSs4KWB4KSnLl/gpKzgpL/gpLngpL8uX+CktuClgeCkleCljeCksC5f4KS24KSo4KS/Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpIYuX+CkuOCliy5f4KSu4KSCLl/gpKzgpYEuX+CkrOCkvy5f4KS24KWBLl/gpLYuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0HgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTFRTOiAnQeCkleCliyBoOm1tOnNzIOCkrOCknOClhycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKTgpL984KSs4KS/4KS54KS+4KSofOCkpuCkv+CkieCkgeCkuOCli3zgpLjgpL7gpIHgpJ0vLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpL8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKzgpL/gpLngpL7gpKgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KS/4KSJ4KSB4KS44KWLJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpIHgpJ0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKzgpL/gpLngpL7gpKgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkpuCkv+CkieCkgeCkuOCliyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSB4KSdJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpL8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSt4KWL4KSy4KS/XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vgpIbgpIngpIHgpKbgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgpLngpL/gpJzgpYtdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Ckl+Ckj+CkleCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4KSu4KS+JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpIXgpJfgpL7gpKHgpL8nLFxuICAgICAgICAgICAgczogJ+CkleClh+CkueClgCDgpJXgpY3gpLfgpKMnLFxuICAgICAgICAgICAgc3M6ICclZCDgpLjgpYfgpJXgpYfgpKPgpY3gpKEnLFxuICAgICAgICAgICAgbTogJ+Ckj+CklSDgpK7gpL/gpKjgpYfgpJ8nLFxuICAgICAgICAgICAgbW06ICclZCDgpK7gpL/gpKjgpYfgpJ8nLFxuICAgICAgICAgICAgaDogJ+Ckj+CklSDgpJjgpKPgpY3gpJ/gpL4nLFxuICAgICAgICAgICAgaGg6ICclZCDgpJjgpKPgpY3gpJ/gpL4nLFxuICAgICAgICAgICAgZDogJ+Ckj+CklSDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpKbgpL/gpKgnLFxuICAgICAgICAgICAgTTogJ+Ckj+CklSDgpK7gpLngpL/gpKjgpL4nLFxuICAgICAgICAgICAgTU06ICclZCDgpK7gpLngpL/gpKjgpL4nLFxuICAgICAgICAgICAgeTogJ+Ckj+CklSDgpKzgpLDgpY3gpLcnLFxuICAgICAgICAgICAgeXk6ICclZCDgpKzgpLDgpY3gpLcnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmU7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ne.js\n"); @@ -7118,7 +6774,6 @@ eval("//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n '_'\n ),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^maart|mrt.?$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n '_'\n ),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nlBe;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanM/ZGIyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwtYmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRHV0Y2ggKEJlbGdpdW0pIFtubC1iZV1cbi8vISBhdXRob3IgOiBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pvcmlzcm9saW5nXG4vLyEgYXV0aG9yIDogSmFjb2IgTWlkZGFnIDogaHR0cHM6Ly9naXRodWIuY29tL21pZGRhZ2pcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID0gJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPSAnamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15qYW4vaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hYXJ0fG1ydC4/JC9pLFxuICAgICAgICAgICAgL15hcHIvaSxcbiAgICAgICAgICAgIC9ebWVpJC9pLFxuICAgICAgICAgICAgL15qdW5baS5dPyQvaSxcbiAgICAgICAgICAgIC9eanVsW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmF1Zy9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2t0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kZWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPSAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7XG5cbiAgICB2YXIgbmxCZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25sLWJlJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90cztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzOiAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICd6b19tYV9kaV93b19kb192cl96YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gb21dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3ZlciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgICAgICBzOiAnZWVuIHBhYXIgc2Vjb25kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlbicsXG4gICAgICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlbicsXG4gICAgICAgICAgICBoOiAnw6nDqW4gdXVyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgICAgIGQ6ICfDqcOpbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdlbicsXG4gICAgICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHk6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubEJlO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nl-be.js\n"); @@ -7131,7 +6786,6 @@ eval("//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n '_'\n ),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^maart|mrt.?$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n '_'\n ),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n w: 'één week',\n ww: '%d weken',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmwuanM/ZmFjZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IER1dGNoIFtubF1cbi8vISBhdXRob3IgOiBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pvcmlzcm9saW5nXG4vLyEgYXV0aG9yIDogSmFjb2IgTWlkZGFnIDogaHR0cHM6Ly9naXRodWIuY29tL21pZGRhZ2pcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydFdpdGhEb3RzID0gJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPSAnamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15qYW4vaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hYXJ0fG1ydC4/JC9pLFxuICAgICAgICAgICAgL15hcHIvaSxcbiAgICAgICAgICAgIC9ebWVpJC9pLFxuICAgICAgICAgICAgL15qdW5baS5dPyQvaSxcbiAgICAgICAgICAgIC9eanVsW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmF1Zy9pLFxuICAgICAgICAgICAgL15zZXAvaSxcbiAgICAgICAgICAgIC9eb2t0L2ksXG4gICAgICAgICAgICAvXm5vdi9pLFxuICAgICAgICAgICAgL15kZWMvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPSAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7XG5cbiAgICB2YXIgbmwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogL14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICB3ZWVrZGF5czogJ3pvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICd6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnem9fbWFfZGlfd29fZG9fdnJfemEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3ZhbmRhYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dpc3RlcmVuIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thZmdlbG9wZW5dIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ292ZXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGdlbGVkZW4nLFxuICAgICAgICAgICAgczogJ2VlbiBwYWFyIHNlY29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICAgICAgbTogJ8Opw6luIG1pbnV1dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogJ8Opw6luIHV1cicsXG4gICAgICAgICAgICBoaDogJyVkIHV1cicsXG4gICAgICAgICAgICBkOiAnw6nDqW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgdzogJ8Opw6luIHdlZWsnLFxuICAgICAgICAgICAgd3c6ICclZCB3ZWtlbicsXG4gICAgICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHk6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nl.js\n"); @@ -7144,7 +6798,6 @@ eval("//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nn = moment.defineLocale('nn', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s sidan',\n s: 'nokre sekund',\n ss: '%d sekund',\n m: 'eit minutt',\n mm: '%d minutt',\n h: 'ein time',\n hh: '%d timar',\n d: 'ein dag',\n dd: '%d dagar',\n w: 'ei veke',\n ww: '%d veker',\n M: 'ein månad',\n MM: '%d månader',\n y: 'eit år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanM/Yjg0YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOeW5vcnNrIFtubl1cbi8vISBhdXRob3JzIDogaHR0cHM6Ly9naXRodWIuY29tL21lY2h1d2luZFxuLy8hICAgICAgICAgICBTdGVwaGVuIFJhbXRodW4gOiBodHRwczovL2dpdGh1Yi5jb20vc3RlcGhlbnJhbXRodW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBubiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25uJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tYXJzX2Fwci5fbWFpX2p1bmlfanVsaV9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc3VuZGFnX23DpW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc3UuX23DpS5fdHkuX29uLl90by5fZnIuX2xhdS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbcOlX3R5X29uX3RvX2ZyX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0kgZGFnIGtsb2trYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tJIG1vcmdvbiBrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xva2thXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0kgZ8OlciBrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0bDuHJlZ8OlYW5kZV0gZGRkZCBba2xva2thXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaWRhbicsXG4gICAgICAgICAgICBzOiAnbm9rcmUgc2VrdW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kJyxcbiAgICAgICAgICAgIG06ICdlaXQgbWludXR0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0JyxcbiAgICAgICAgICAgIGg6ICdlaW4gdGltZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlaW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgdzogJ2VpIHZla2UnLFxuICAgICAgICAgICAgd3c6ICclZCB2ZWtlcicsXG4gICAgICAgICAgICBNOiAnZWluIG3DpW5hZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHk6ICdlaXQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/nn.js\n"); @@ -7157,7 +6810,6 @@ eval("//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ocLnc = moment.defineLocale('oc-lnc', {\n months: {\n standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n '_'\n ),\n format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: '[uèi a] LT',\n nextDay: '[deman a] LT',\n nextWeek: 'dddd [a] LT',\n lastDay: '[ièr a] LT',\n lastWeek: 'dddd [passat a] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'unas segondas',\n ss: '%d segondas',\n m: 'una minuta',\n mm: '%d minutas',\n h: 'una ora',\n hh: '%d oras',\n d: 'un jorn',\n dd: '%d jorns',\n M: 'un mes',\n MM: '%d meses',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4,\n },\n });\n\n return ocLnc;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvb2MtbG5jLmpzPzE2N2IiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9vYy1sbmMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGUgW29jLWxuY11cbi8vISBhdXRob3IgOiBRdWVudGluIFBBR8OIUyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9RdWVudHkzMVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG9jTG5jID0gbW9tZW50LmRlZmluZUxvY2FsZSgnb2MtbG5jJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICdnZW5pw6hyX2ZlYnJpw6hyX21hcsOnX2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3TDsmJyZV9ub3ZlbWJyZV9kZWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlIGdlbmnDqHJfZGUgZmVicmnDqHJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdMOyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlXCIuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NLyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpX2p1bmhfanVsaC5fYWdvLl9zZXQuX29jdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW3DqGNyZXNfZGlqw7J1c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGdfZGxfZG1fZGNfZGpfZHZfZHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdcOoaSBhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2RlbWFuIGFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpw6hyIGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbcGFzc2F0IGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBcImQnYXF1w60gJXNcIixcbiAgICAgICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgICAgICBzOiAndW5hcyBzZWdvbmRhcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ29uZGFzJyxcbiAgICAgICAgICAgIG06ICd1bmEgbWludXRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRhcycsXG4gICAgICAgICAgICBoOiAndW5hIG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvcm4nLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3JucycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHJ8bnx0fMOofGEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBudW1iZXIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDRcbiAgICAgICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICAgICAgOiAnw6gnO1xuICAgICAgICAgICAgaWYgKHBlcmlvZCA9PT0gJ3cnIHx8IHBlcmlvZCA9PT0gJ1cnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBvY0xuYztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/oc-lnc.js\n"); @@ -7170,7 +6822,6 @@ eval("//! moment.js locale configuration\n//! locale : Occitan, lengadocian dial \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '੧',\n 2: '੨',\n 3: '੩',\n 4: '੪',\n 5: '੫',\n 6: '੬',\n 7: '੭',\n 8: '੮',\n 9: '੯',\n 0: '੦',\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0',\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n '_'\n ),\n weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm ਵਜੇ',\n LTS: 'A h:mm:ss ਵਜੇ',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n },\n calendar: {\n sameDay: '[ਅਜ] LT',\n nextDay: '[ਕਲ] LT',\n nextWeek: '[ਅਗਲਾ] dddd, LT',\n lastDay: '[ਕਲ] LT',\n lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ਵਿੱਚ',\n past: '%s ਪਿਛਲੇ',\n s: 'ਕੁਝ ਸਕਿੰਟ',\n ss: '%d ਸਕਿੰਟ',\n m: 'ਇਕ ਮਿੰਟ',\n mm: '%d ਮਿੰਟ',\n h: 'ਇੱਕ ਘੰਟਾ',\n hh: '%d ਘੰਟੇ',\n d: 'ਇੱਕ ਦਿਨ',\n dd: '%d ਦਿਨ',\n M: 'ਇੱਕ ਮਹੀਨਾ',\n MM: '%d ਮਹੀਨੇ',\n y: 'ਇੱਕ ਸਾਲ',\n yy: '%d ਸਾਲ',\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return paIn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanM/ZjNmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGEtaW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHVuamFiaSAoSW5kaWEpIFtwYS1pbl1cbi8vISBhdXRob3IgOiBIYXJwcmVldCBTaW5naCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJwcmVldGtoYWxzYWd0Yml0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CppycsXG4gICAgICAgICAgICAyOiAn4KmoJyxcbiAgICAgICAgICAgIDM6ICfgqaknLFxuICAgICAgICAgICAgNDogJ+CpqicsXG4gICAgICAgICAgICA1OiAn4KmrJyxcbiAgICAgICAgICAgIDY6ICfgqawnLFxuICAgICAgICAgICAgNzogJ+CprScsXG4gICAgICAgICAgICA4OiAn4KmuJyxcbiAgICAgICAgICAgIDk6ICfgqa8nLFxuICAgICAgICAgICAgMDogJ+CppicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgqacnOiAnMScsXG4gICAgICAgICAgICAn4KmoJzogJzInLFxuICAgICAgICAgICAgJ+CpqSc6ICczJyxcbiAgICAgICAgICAgICfgqaonOiAnNCcsXG4gICAgICAgICAgICAn4KmrJzogJzUnLFxuICAgICAgICAgICAgJ+CprCc6ICc2JyxcbiAgICAgICAgICAgICfgqa0nOiAnNycsXG4gICAgICAgICAgICAn4KmuJzogJzgnLFxuICAgICAgICAgICAgJ+Cpryc6ICc5JyxcbiAgICAgICAgICAgICfgqaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgcGFJbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BhLWluJywge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbW9udGhzIG5hbWUgYXMgcGVyIE5hbmFrc2hhaGkgQ2FsZW5kYXIgYnV0IHRoZXkgYXJlIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1vbnRoczogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCoteConOCphycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CoheConF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CoheCol+CosuCovl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CoquCov+Com+CosuCph10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgqLXgqL/gqbHgqJonLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCoquCov+Com+CosuCphycsXG4gICAgICAgICAgICBzOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBzczogJyVkIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBtOiAn4KiH4KiVIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBtbTogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBoOiAn4KiH4Kmx4KiVIOComOCpsOCon+CovicsXG4gICAgICAgICAgICBoaDogJyVkIOComOCpsOCon+CphycsXG4gICAgICAgICAgICBkOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCopuCov+CoqCcsXG4gICAgICAgICAgICBNOiAn4KiH4Kmx4KiVIOCoruCoueCpgOCoqOCovicsXG4gICAgICAgICAgICBNTTogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgICAgICB5OiAn4KiH4Kmx4KiVIOCouOCovuCosicsXG4gICAgICAgICAgICB5eTogJyVkIOCouOCovuCosicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgqafgqajgqangqargqavgqazgqa3gqa7gqa/gqaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFB1bmphYmkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CosOCovuCopHzgqLjgqLXgqYfgqLB84Kim4KmB4Kiq4Ki54Ki/4KiwfOCouOCovOCovuCori8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CosOCovuCopCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCoteCph+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqKbgqYHgqKrgqLngqL/gqLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCovOCovuCoricpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCoteCph+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kim4KmB4Kiq4Ki54Ki/4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwYUluO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pa-in.js\n"); @@ -7183,7 +6834,6 @@ eval("//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n '_'\n ),\n monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n '_'\n ),\n monthsParse = [\n /^sty/i,\n /^lut/i,\n /^mar/i,\n /^kwi/i,\n /^maj/i,\n /^cze/i,\n /^lip/i,\n /^sie/i,\n /^wrz/i,\n /^paź/i,\n /^lis/i,\n /^gru/i,\n ];\n function plural(n) {\n return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n return result + (plural(number) ? 'sekundy' : 'sekund');\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'ww':\n return result + (plural(number) ? 'tygodnie' : 'tygodni');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months: function (momentToFormat, format) {\n if (!momentToFormat) {\n return monthsNominative;\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(\n '_'\n ),\n weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W niedzielę o] LT';\n\n case 2:\n return '[We wtorek o] LT';\n\n case 3:\n return '[W środę o] LT';\n\n case 6:\n return '[W sobotę o] LT';\n\n default:\n return '[W] dddd [o] LT';\n }\n },\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: '%s temu',\n s: 'kilka sekund',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: '1 dzień',\n dd: '%d dni',\n w: 'tydzień',\n ww: translate,\n M: 'miesiąc',\n MM: translate,\n y: 'rok',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanM/OGQ1NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcGwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUG9saXNoIFtwbF1cbi8vISBhdXRob3IgOiBSYWZhbCBIaXJzeiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ldm9MXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzTm9taW5hdGl2ZSA9ICdzdHljemXFhF9sdXR5X21hcnplY19rd2llY2llxYRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllxYRfd3J6ZXNpZcWEX3Bhxbpkemllcm5pa19saXN0b3BhZF9ncnVkemllxYQnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1N1YmplY3RpdmUgPSAnc3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplxZtuaWFfcGHFumR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXnN0eS9pLFxuICAgICAgICAgICAgL15sdXQvaSxcbiAgICAgICAgICAgIC9ebWFyL2ksXG4gICAgICAgICAgICAvXmt3aS9pLFxuICAgICAgICAgICAgL15tYWovaSxcbiAgICAgICAgICAgIC9eY3plL2ksXG4gICAgICAgICAgICAvXmxpcC9pLFxuICAgICAgICAgICAgL15zaWUvaSxcbiAgICAgICAgICAgIC9ed3J6L2ksXG4gICAgICAgICAgICAvXnBhxbovaSxcbiAgICAgICAgICAgIC9ebGlzL2ksXG4gICAgICAgICAgICAvXmdydS9pLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuICUgMTAgPCA1ICYmIG4gJSAxMCA+IDEgJiYgfn4obiAvIDEwKSAlIDEwICE9PSAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla3VuZCcpO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6ICdtaW51dMSZJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pbnV0eScgOiAnbWludXQnKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2dvZHppbmEnIDogJ2dvZHppbsSZJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2dvZHppbnknIDogJ2dvZHppbicpO1xuICAgICAgICAgICAgY2FzZSAnd3cnOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAndHlnb2RuaWUnIDogJ3R5Z29kbmknKTtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pZXNpxIVjZScgOiAnbWllc2nEmWN5Jyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdsYXRhJyA6ICdsYXQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BsJywge1xuICAgICAgICBtb250aHM6IGZ1bmN0aW9uIChtb21lbnRUb0Zvcm1hdCwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudFRvRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc05vbWluYXRpdmU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC9EIE1NTU0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTdWJqZWN0aXZlW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzTm9taW5hdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOiAnbmllZHppZWxhX3BvbmllZHppYcWCZWtfd3RvcmVrX8Wbcm9kYV9jendhcnRla19wacSFdGVrX3NvYm90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25kel9wb25fd3RfxZtyX2N6d19wdF9zb2InLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTmRfUG5fV3RfxZpyX0N6X1B0X1NvJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0R6acWbIG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSnV0cm8gb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyBuaWVkemllbMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXZSB3dG9yZWsgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgxZtyb2TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyBzb2JvdMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbV10gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1djem9yYWogb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBuaWVkemllbMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSDFm3JvZMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBzb2JvdMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCeV0gZGRkZCBbb10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0ZW11JyxcbiAgICAgICAgICAgIHM6ICdraWxrYSBzZWt1bmQnLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJzEgZHppZcWEJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZG5pJyxcbiAgICAgICAgICAgIHc6ICd0eWR6aWXFhCcsXG4gICAgICAgICAgICB3dzogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21pZXNpxIVjJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAncm9rJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGw7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pl.js\n"); @@ -7196,7 +6846,6 @@ eval("//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ptBr = moment.defineLocale('pt-br', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n '_'\n ),\n weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'poucos segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n invalidDate: 'Data inválida',\n });\n\n return ptBr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQtYnIuanM/ZDJkNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LWJyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvcnR1Z3Vlc2UgKEJyYXppbCkgW3B0LWJyXVxuLy8hIGF1dGhvciA6IENhaW8gUmliZWlybyBQZXJlaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NhaW8tcmliZWlyby1wZXJlaXJhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcHRCciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0LWJyJywge1xuICAgICAgICBtb250aHM6ICdqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2Rleicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3PDoWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fMsKqXzPCql80wqpfNcKqXzbCql9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2plIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoHNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbT250ZW0gw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpID09PSAwIHx8IHRoaXMuZGF5KCkgPT09IDZcbiAgICAgICAgICAgICAgICAgICAgPyAnW8OabHRpbW9dIGRkZGQgW8Ogc10gTFQnIC8vIFNhdHVyZGF5ICsgU3VuZGF5XG4gICAgICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgICAgIHM6ICdwb3Vjb3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1bSBhbm8nLFxuICAgICAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIGludmFsaWREYXRlOiAnRGF0YSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHB0QnI7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pt-br.js\n"); @@ -7209,7 +6858,6 @@ eval("//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-b \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var pt = moment.defineLocale('pt', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n '_'\n ),\n weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n w: 'uma semana',\n ww: '%d semanas',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pt;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQuanM/ZjI2MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3B0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvcnR1Z3Vlc2UgW3B0XVxuLy8hIGF1dGhvciA6IEplZmZlcnNvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWxleDc5XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwdCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFuZWlyb19mZXZlcmVpcm9fbWFyw6dvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1Rlcl9RdWFfUXVpX1NleF9Tw6FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0RvXzLCql8zwqpfNMKqXzXCql82wqpfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSG9qZSDDoHNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQW1hbmjDoyDDoHNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW09udGVtIMOgc10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSA9PT0gMCB8fCB0aGlzLmRheSgpID09PSA2XG4gICAgICAgICAgICAgICAgICAgID8gJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgICAgICA6ICdbw5psdGltYV0gZGRkZCBbw6BzXSBMVCc7IC8vIE1vbmRheSAtIEZyaWRheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2jDoSAlcycsXG4gICAgICAgICAgICBzOiAnc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgICAgICB3OiAndW1hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VtIG3DqnMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW0gYW5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5vcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHQ7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/pt.js\n"); @@ -7222,7 +6870,6 @@ eval("//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! auth \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: 'secunde',\n mm: 'minute',\n hh: 'ore',\n dd: 'zile',\n ww: 'săptămâni',\n MM: 'luni',\n yy: 'ani',\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n '_'\n ),\n monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'peste %s',\n past: '%s în urmă',\n s: 'câteva secunde',\n ss: relativeTimeWithPlural,\n m: 'un minut',\n mm: relativeTimeWithPlural,\n h: 'o oră',\n hh: relativeTimeWithPlural,\n d: 'o zi',\n dd: relativeTimeWithPlural,\n w: 'o săptămână',\n ww: relativeTimeWithPlural,\n M: 'o lună',\n MM: relativeTimeWithPlural,\n y: 'un an',\n yy: relativeTimeWithPlural,\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ro;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcm8uanM/OTcyYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9yby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBSb21hbmlhbiBbcm9dXG4vLyEgYXV0aG9yIDogVmxhZCBHdXJkaWdhIDogaHR0cHM6Ly9naXRodWIuY29tL2d1cmRpZ2Fcbi8vISBhdXRob3IgOiBWYWxlbnRpbiBBZ2FjaGkgOiBodHRwczovL2dpdGh1Yi5jb20vYXZhbHlcbi8vISBhdXRob3IgOiBFbWFudWVsIENlcG9pIDogaHR0cHM6Ly9naXRodWIuY29tL2NlcGVtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICAgICAgc3M6ICdzZWN1bmRlJyxcbiAgICAgICAgICAgICAgICBtbTogJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgaGg6ICdvcmUnLFxuICAgICAgICAgICAgICAgIGRkOiAnemlsZScsXG4gICAgICAgICAgICAgICAgd3c6ICdzxINwdMSDbcOibmknLFxuICAgICAgICAgICAgICAgIE1NOiAnbHVuaScsXG4gICAgICAgICAgICAgICAgeXk6ICdhbmknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlcGFyYXRvciA9ICcgJztcbiAgICAgICAgaWYgKG51bWJlciAlIDEwMCA+PSAyMCB8fCAobnVtYmVyID49IDEwMCAmJiBudW1iZXIgJSAxMDAgPT09IDApKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSAnIGRlICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciArIHNlcGFyYXRvciArIGZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBybyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3JvJywge1xuICAgICAgICBtb250aHM6ICdpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2lhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkdW1pbmljxINfbHVuaV9tYXLIm2lfbWllcmN1cmlfam9pX3ZpbmVyaV9zw6JtYsSDdMSDJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnRHVtX0x1bl9NYXJfTWllX0pvaV9WaW5fU8OibScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdEdV9MdV9NYV9NaV9Kb19WaV9Tw6InLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1themkgbGFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbcOiaW5lIGxhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2xhXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llcmkgbGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2Zvc3RhXSBkZGRkIFtsYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwZXN0ZSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw65uIHVybcSDJyxcbiAgICAgICAgICAgIHM6ICdjw6J0ZXZhIHNlY3VuZGUnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAnbyBvcsSDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ28gemknLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB3OiAnbyBzxINwdMSDbcOibsSDJyxcbiAgICAgICAgICAgIHd3OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ28gbHVuxIMnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBybztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ro.js\n"); @@ -7235,7 +6882,6 @@ eval("//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n hh: 'час_часа_часов',\n dd: 'день_дня_дней',\n ww: 'неделя_недели_недель',\n MM: 'месяц_месяца_месяцев',\n yy: 'год_года_лет',\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n var monthsParse = [\n /^янв/i,\n /^фев/i,\n /^мар/i,\n /^апр/i,\n /^ма[йя]/i,\n /^июн/i,\n /^июл/i,\n /^авг/i,\n /^сен/i,\n /^окт/i,\n /^ноя/i,\n /^дек/i,\n ];\n\n // http://new.gramota.ru/spravka/rules/139-prop : § 103\n // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n var ru = moment.defineLocale('ru', {\n months: {\n format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n '_'\n ),\n standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n '_'\n ),\n },\n monthsShort: {\n // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n '_'\n ),\n standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n '_'\n ),\n },\n weekdays: {\n standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n '_'\n ),\n format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n '_'\n ),\n isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n },\n weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // копия предыдущего\n monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // полные названия с падежами\n monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n // Выражение, которое соответствует только сокращённым формам\n monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY г.',\n LLL: 'D MMMM YYYY г., H:mm',\n LLLL: 'dddd, D MMMM YYYY г., H:mm',\n },\n calendar: {\n sameDay: '[Сегодня, в] LT',\n nextDay: '[Завтра, в] LT',\n lastDay: '[Вчера, в] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В следующее] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В следующий] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В следующую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'через %s',\n past: '%s назад',\n s: 'несколько секунд',\n ss: relativeTimeWithPlural,\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: 'час',\n hh: relativeTimeWithPlural,\n d: 'день',\n dd: relativeTimeWithPlural,\n w: 'неделя',\n ww: relativeTimeWithPlural,\n M: 'месяц',\n MM: relativeTimeWithPlural,\n y: 'год',\n yy: relativeTimeWithPlural,\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM: function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ru;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcnUuanM/OTU3YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcnUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUnVzc2lhbiBbcnVdXG4vLyEgYXV0aG9yIDogVmlrdG9ybWluYXRvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9WaWt0b3JtaW5hdG9yXG4vLyEgYXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiDQmtC+0YDQtdC90LHQtdGA0LMg0JzQsNGA0LogOiBodHRwczovL2dpdGh1Yi5jb20vc29ja2V0cGFpclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0LzQuNC90YPRgtCwX9C80LjQvdGD0YLRi1/QvNC40L3Rg9GCJyA6ICfQvNC40L3Rg9GC0YNf0LzQuNC90YPRgtGLX9C80LjQvdGD0YInLFxuICAgICAgICAgICAgaGg6ICfRh9Cw0YFf0YfQsNGB0LBf0YfQsNGB0L7QsicsXG4gICAgICAgICAgICBkZDogJ9C00LXQvdGMX9C00L3Rj1/QtNC90LXQuScsXG4gICAgICAgICAgICB3dzogJ9C90LXQtNC10LvRj1/QvdC10LTQtdC70Lhf0L3QtdC00LXQu9GMJyxcbiAgICAgICAgICAgIE1NOiAn0LzQtdGB0Y/Rhl/QvNC10YHRj9GG0LBf0LzQtdGB0Y/RhtC10LInLFxuICAgICAgICAgICAgeXk6ICfQs9C+0LRf0LPQvtC00LBf0LvQtdGCJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LAnIDogJ9C80LjQvdGD0YLRgyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgIC9e0Y/QvdCyL2ksXG4gICAgICAgIC9e0YTQtdCyL2ksXG4gICAgICAgIC9e0LzQsNGAL2ksXG4gICAgICAgIC9e0LDQv9GAL2ksXG4gICAgICAgIC9e0LzQsFvQudGPXS9pLFxuICAgICAgICAvXtC40Y7QvS9pLFxuICAgICAgICAvXtC40Y7Quy9pLFxuICAgICAgICAvXtCw0LLQsy9pLFxuICAgICAgICAvXtGB0LXQvS9pLFxuICAgICAgICAvXtC+0LrRgi9pLFxuICAgICAgICAvXtC90L7Rjy9pLFxuICAgICAgICAvXtC00LXQui9pLFxuICAgIF07XG5cbiAgICAvLyBodHRwOi8vbmV3LmdyYW1vdGEucnUvc3ByYXZrYS9ydWxlcy8xMzktcHJvcCA6IMKnIDEwM1xuICAgIC8vINCh0L7QutGA0LDRidC10L3QuNGPINC80LXRgdGP0YbQtdCyOiBodHRwOi8vbmV3LmdyYW1vdGEucnUvc3ByYXZrYS9idXJvL3NlYXJjaC1hbnN3ZXI/cz0yNDI2MzdcbiAgICAvLyBDTERSIGRhdGE6ICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9jaGFydHMvMjgvc3VtbWFyeS9ydS5odG1sIzE3NTNcbiAgICB2YXIgcnUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdydScsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRj9C90LLQsNGA0Y9f0YTQtdCy0YDQsNC70Y9f0LzQsNGA0YLQsF/QsNC/0YDQtdC70Y9f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQs9GD0YHRgtCwX9GB0LXQvdGC0Y/QsdGA0Y9f0L7QutGC0Y/QsdGA0Y9f0L3QvtGP0LHRgNGPX9C00LXQutCw0LHRgNGPJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiB7XG4gICAgICAgICAgICAvLyDQv9C+IENMRFIg0LjQvNC10L3QvdC+IFwi0LjRjtC7LlwiINC4IFwi0LjRjtC9LlwiLCDQvdC+INC60LDQutC+0Lkg0YHQvNGL0YHQuyDQvNC10L3Rj9GC0Ywg0LHRg9C60LLRgyDQvdCwINGC0L7Rh9C60YM/XG4gICAgICAgICAgICBmb3JtYXQ6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YDRgl/QsNC/0YAuX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LMuX9GB0LXQvdGCLl/QvtC60YIuX9C90L7Rj9CxLl/QtNC10LouJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOiAn0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ9Cy0L7RgdC60YDQtdGB0LXQvdGM0LVf0L/QvtC90LXQtNC10LvRjNC90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNGDX9GH0LXRgtCy0LXRgNCzX9C/0Y/RgtC90LjRhtGDX9GB0YPQsdCx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL1xcWyA/W9CS0LJdID8oPzrQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidGD0Y580Y3RgtGDKT8gP10gP2RkZGQvLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIC8vINC/0L7Qu9C90YvQtSDQvdCw0LfQstCw0L3QuNGPINGBINC/0LDQtNC10LbQsNC80LgsINC/0L4g0YLRgNC4INCx0YPQutCy0YssINC00LvRjyDQvdC10LrQvtGC0L7RgNGL0YUsINC/0L4gNCDQsdGD0LrQstGLLCDRgdC+0LrRgNCw0YnQtdC90LjRjyDRgSDRgtC+0YfQutC+0Lkg0Lgg0LHQtdC3INGC0L7Rh9C60LhcbiAgICAgICAgbW9udGhzUmVnZXg6IC9eKNGP0L3QstCw0YBb0YzRj1180Y/QvdCyXFwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XFwuP3zQvNCw0YDRgtCwP3zQvNCw0YBcXC4/fNCw0L/RgNC10Ltb0YzRj1180LDQv9GAXFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cXC4/fNC40Y7Qu1vRjNGPXXzQuNGO0LtcXC4/fNCw0LLQs9GD0YHRgtCwP3zQsNCy0LNcXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1xcLj980L7QutGC0Y/QsdGAW9GM0Y9dfNC+0LrRglxcLj980L3QvtGP0LHRgFvRjNGPXXzQvdC+0Y/QsT9cXC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcXC4/KS9pLFxuXG4gICAgICAgIC8vINC60L7Qv9C40Y8g0L/RgNC10LTRi9C00YPRidC10LPQvlxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslxcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1xcLj980LzQsNGA0YLQsD980LzQsNGAXFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFxcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XFwuP3zQuNGO0Ltb0YzRj1180LjRjtC7XFwuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXFwuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cXC4/fNC+0LrRgtGP0LHRgFvRjNGPXXzQvtC60YJcXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XFwuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XFwuPykvaSxcblxuICAgICAgICAvLyDQv9C+0LvQvdGL0LUg0L3QsNC30LLQsNC90LjRjyDRgSDQv9Cw0LTQtdC20LDQvNC4XG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvXijRj9C90LLQsNGAW9GP0YxdfNGE0LXQstGA0LDQu1vRj9GMXXzQvNCw0YDRgtCwP3zQsNC/0YDQtdC7W9GP0YxdfNC80LBb0Y/QuV180LjRjtC9W9GP0YxdfNC40Y7Qu1vRj9GMXXzQsNCy0LPRg9GB0YLQsD980YHQtdC90YLRj9Cx0YBb0Y/RjF180L7QutGC0Y/QsdGAW9GP0YxdfNC90L7Rj9Cx0YBb0Y/RjF180LTQtdC60LDQsdGAW9GP0YxdKS9pLFxuXG4gICAgICAgIC8vINCS0YvRgNCw0LbQtdC90LjQtSwg0LrQvtGC0L7RgNC+0LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9C10YIg0YLQvtC70YzQutC+INGB0L7QutGA0LDRidGR0L3QvdGL0Lwg0YTQvtGA0LzQsNC8XG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKNGP0L3QslxcLnzRhNC10LLRgD9cXC580LzQsNGAW9GCLl180LDQv9GAXFwufNC80LBb0Y/QuV180LjRjtC9W9GM0Y8uXXzQuNGO0Ltb0YzRjy5dfNCw0LLQs1xcLnzRgdC10L3Rgj9cXC580L7QutGCXFwufNC90L7Rj9CxP1xcLnzQtNC10LpcXC4pL2ksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDQsy4sIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Ch0LXQs9C+0LTQvdGPLCDQsl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQl9Cw0LLRgtGA0LAsINCyXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAsINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidC10LVdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LjQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70L7QtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GL0LldIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9GH0LXRgNC10LcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINC90LDQt9Cw0LQnLFxuICAgICAgICAgICAgczogJ9C90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgdzogJ9C90LXQtNC10LvRjycsXG4gICAgICAgICAgICB3dzogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9C4fNGD0YLRgNCwfNC00L3Rj3zQstC10YfQtdGA0LAvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C10YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GD0YLRgNCwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9C10YDQsCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0Ll80LPQvnzRjykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LknO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9C+JztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0Y8nO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBydTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ru.js\n"); @@ -7248,7 +6894,6 @@ eval("//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر',\n ],\n days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n var sd = moment.defineLocale('sd', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[اڄ] LT',\n nextDay: '[سڀاڻي] LT',\n nextWeek: 'dddd [اڳين هفتي تي] LT',\n lastDay: '[ڪالهه] LT',\n lastWeek: '[گزريل هفتي] dddd [تي] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s پوء',\n past: '%s اڳ',\n s: 'چند سيڪنڊ',\n ss: '%d سيڪنڊ',\n m: 'هڪ منٽ',\n mm: '%d منٽ',\n h: 'هڪ ڪلاڪ',\n hh: '%d ڪلاڪ',\n d: 'هڪ ڏينهن',\n dd: '%d ڏينهن',\n M: 'هڪ مهينو',\n MM: '%d مهينا',\n y: 'هڪ سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sd;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2QuanM/Njc4NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTaW5kaGkgW3NkXVxuLy8hIGF1dGhvciA6IE5hcmFpbiBTYWdhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uYXJhaW5zYWdhclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfYrNmG2YjYsdmKJyxcbiAgICAgICAgICAgICfZgdmK2KjYsdmI2LHZiicsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsdmK2YQnLFxuICAgICAgICAgICAgJ9mF2KbZiicsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9ih2ZAnLFxuICAgICAgICAgICAgJ9ii2q/Ys9m9JyxcbiAgICAgICAgICAgICfYs9mK2b7ZvdmF2KjYsScsXG4gICAgICAgICAgICAn2KLaqtm92YjYqNixJyxcbiAgICAgICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgICAgICfaitiz2YXYqNixJyxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5cyA9IFsn2KLahtixJywgJ9iz2YjZhdixJywgJ9in2rHYp9ix2YgnLCAn2KfYsdio2LknLCAn2K7ZhdmK2LMnLCAn2KzZhdi5JywgJ9qH2Ybah9ixJ107XG5cbiAgICB2YXIgc2QgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZCcsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9qEXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9iz2oDYp9q72YpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2Kfas9mK2YYg2YfZgdiq2Yog2KrZil0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vaqtin2YTZh9mHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1var9iy2LHZitmEINmH2YHYqtmKXSBkZGRkIFvYqtmKXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINm+2YjYoScsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2KfasycsXG4gICAgICAgICAgICBzOiAn2obZhtivINiz2YraqtmG2oonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9mK2qrZhtqKJyxcbiAgICAgICAgICAgIG06ICfZh9qqINmF2YbZvScsXG4gICAgICAgICAgICBtbTogJyVkINmF2YbZvScsXG4gICAgICAgICAgICBoOiAn2YfaqiDaqtmE2KfaqicsXG4gICAgICAgICAgICBoaDogJyVkINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGQ6ICfZh9qqINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDaj9mK2YbZh9mGJyxcbiAgICAgICAgICAgIE06ICfZh9qqINmF2YfZitmG2YgnLFxuICAgICAgICAgICAgTU06ICclZCDZhdmH2YrZhtinJyxcbiAgICAgICAgICAgIHk6ICfZh9qqINiz2KfZhCcsXG4gICAgICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNkO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sd.js\n"); @@ -7261,7 +6906,6 @@ eval("//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var se = moment.defineLocale('se', {\n months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n '_'\n ),\n monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(\n '_'\n ),\n weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n '_'\n ),\n weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'MMMM D. [b.] YYYY',\n LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n },\n calendar: {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s geažes',\n past: 'maŋit %s',\n s: 'moadde sekunddat',\n ss: '%d sekunddat',\n m: 'okta minuhta',\n mm: '%d minuhtat',\n h: 'okta diimmu',\n hh: '%d diimmut',\n d: 'okta beaivi',\n dd: '%d beaivvit',\n M: 'okta mánnu',\n MM: '%d mánut',\n y: 'okta jahki',\n yy: '%d jagit',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return se;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2UuanM/ZmZmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J0aGVybiBTYW1pIFtzZV1cbi8vISBhdXRob3JzIDogQsOlcmQgUm9sc3RhZCBIZW5yaWtzZW4gOiBodHRwczovL2dpdGh1Yi5jb20va2FyYW1lbGxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NlJywge1xuICAgICAgICBtb250aHM6ICdvxJHEkWFqYWdlbcOhbm51X2d1b3Z2YW3DoW5udV9uanVrxI1hbcOhbm51X2N1b8WLb23DoW5udV9taWVzc2Vtw6FubnVfZ2Vhc3NlbcOhbm51X3N1b2lkbmVtw6FubnVfYm9yZ2Vtw6FubnVfxI1ha8SNYW3DoW5udV9nb2xnZ290bcOhbm51X3Nrw6FibWFtw6FubnVfanVvdmxhbcOhbm51Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2/EkcSRal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfxI1ha8SNX2dvbGdfc2vDoWJfanVvdicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICdzb3RuYWJlYWl2aV92dW9zc8OhcmdhX21hxYvFi2Viw6FyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sw6F2dmFyZGF0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc290bl92dW9zX21hxYtfZ2Fza19kdW9yX2JlYXJfbMOhdicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzX3ZfbV9nX2RfYl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gRC4gW2IuXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW290bmUgdGldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaWh0dGluIHRpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3RpXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2lrdGUgdGldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW292ZGRpdF0gZGRkZCBbdGldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgZ2Vhxb5lcycsXG4gICAgICAgICAgICBwYXN0OiAnbWHFi2l0ICVzJyxcbiAgICAgICAgICAgIHM6ICdtb2FkZGUgc2VrdW5kZGF0JyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZGF0JyxcbiAgICAgICAgICAgIG06ICdva3RhIG1pbnVodGEnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51aHRhdCcsXG4gICAgICAgICAgICBoOiAnb2t0YSBkaWltbXUnLFxuICAgICAgICAgICAgaGg6ICclZCBkaWltbXV0JyxcbiAgICAgICAgICAgIGQ6ICdva3RhIGJlYWl2aScsXG4gICAgICAgICAgICBkZDogJyVkIGJlYWl2dml0JyxcbiAgICAgICAgICAgIE06ICdva3RhIG3DoW5udScsXG4gICAgICAgICAgICBNTTogJyVkIG3DoW51dCcsXG4gICAgICAgICAgICB5OiAnb2t0YSBqYWhraScsXG4gICAgICAgICAgICB5eTogJyVkIGphZ2l0JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzZTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/se.js\n"); @@ -7274,7 +6918,6 @@ eval("//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! a \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n '_'\n ),\n monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n '_'\n ),\n weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n '_'\n ),\n weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'a h:mm',\n LTS: 'a h:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY MMMM D',\n LLL: 'YYYY MMMM D, a h:mm',\n LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n },\n calendar: {\n sameDay: '[අද] LT[ට]',\n nextDay: '[හෙට] LT[ට]',\n nextWeek: 'dddd LT[ට]',\n lastDay: '[ඊයේ] LT[ට]',\n lastWeek: '[පසුගිය] dddd LT[ට]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sකින්',\n past: '%sකට පෙර',\n s: 'තත්පර කිහිපය',\n ss: 'තත්පර %d',\n m: 'මිනිත්තුව',\n mm: 'මිනිත්තු %d',\n h: 'පැය',\n hh: 'පැය %d',\n d: 'දිනය',\n dd: 'දින %d',\n M: 'මාසය',\n MM: 'මාස %d',\n y: 'වසර',\n yy: 'වසර %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal: function (number) {\n return number + ' වැනි';\n },\n meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM: function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n },\n });\n\n return si;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanM/ZWRhNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2luaGFsZXNlIFtzaV1cbi8vISBhdXRob3IgOiBTYW1wYXRoIFNpdGluYW1hbHV3YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYW1wYXRoc3Jpc1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgLypqc2hpbnQgLVcxMDAqL1xuICAgIHZhciBzaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NpJywge1xuICAgICAgICBtb250aHM6ICfgtqLgtrHgt4Dgt4/gtrvgt5Jf4La04LeZ4La24La74LeA4LeP4La74LeSX+C2uOC3j+C2u+C3iuC2reC3lF/gtoXgtrTgt4rigI3gtrvgt5rgtr3gt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4Led4LeD4LeK4Lat4LeUX+C3g+C3kOC2tOC3iuC2reC3kOC2uOC3iuC2tuC2u+C3il/gtpTgtprgt4rgtq3gt53gtrbgtrvgt4pf4Lax4Lec4LeA4LeQ4La44LeK4La24La74LeKX+C2r+C3meC3g+C3kOC2uOC3iuC2tuC2u+C3iicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgtongtrvgt5Lgtq/gt49f4LeD4Laz4LeU4Lav4LePX+C2heC2n+C3hOC2u+C3lOC3gOC3j+C2r+C3j1/gtrbgtq/gt4/gtq/gt49f4La24LeK4oCN4La74LeE4LeD4LeK4La04Lat4LeS4Lax4LeK4Lav4LePX+C3g+C3kuC2muC3lOC2u+C3j+C2r+C3j1/gt4Pgt5ngtrHgt4Pgt5Tgtrvgt4/gtq/gt48nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgtongtrvgt5Jf4LeD4Laz4LeUX+C2heC2n1/gtrbgtq/gt49f4La24LeK4oCN4La74LeEX+C3g+C3kuC2muC3lF/gt4Pgt5ngtrEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LaJX+C3g1/gtoVf4La2X+C2tuC3iuKAjeC2u1/gt4Pgt5Jf4LeD4LeZJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdhIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZIE1NTU0gRCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZIE1NTU0gRCwgYSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZIE1NTU0gRCBb4LeA4LeQ4Lax4LeSXSBkZGRkLCBhIGg6bW06c3MnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgtoXgtq9dIExUW+C2p10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgt4Tgt5ngtqddIExUW+C2p10nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUW+C2p10nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgtorgtrrgt5pdIExUW+C2p10nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4La04LeD4LeU4Lac4LeS4La6XSBkZGRkIExUW+C2p10nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+C2muC3kuC2seC3iicsXG4gICAgICAgICAgICBwYXN0OiAnJXPgtprgtqcg4La04LeZ4La7JyxcbiAgICAgICAgICAgIHM6ICfgtq3gtq3gt4rgtrTgtrsg4Laa4LeS4LeE4LeS4La04La6JyxcbiAgICAgICAgICAgIHNzOiAn4Lat4Lat4LeK4La04La7ICVkJyxcbiAgICAgICAgICAgIG06ICfgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4AnLFxuICAgICAgICAgICAgbW06ICfgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJWQnLFxuICAgICAgICAgICAgaDogJ+C2tOC3kOC2uicsXG4gICAgICAgICAgICBoaDogJ+C2tOC3kOC2uiAlZCcsXG4gICAgICAgICAgICBkOiAn4Lav4LeS4Lax4La6JyxcbiAgICAgICAgICAgIGRkOiAn4Lav4LeS4LaxICVkJyxcbiAgICAgICAgICAgIE06ICfgtrjgt4/gt4PgtronLFxuICAgICAgICAgICAgTU06ICfgtrjgt4/gt4MgJWQnLFxuICAgICAgICAgICAgeTogJ+C3gOC3g+C2uycsXG4gICAgICAgICAgICB5eTogJ+C3gOC3g+C2uyAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDgt4Dgt5DgtrHgt5IvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDgt4Dgt5DgtrHgt5InO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4La04LeZ4La7IOC3gOC2u+C3lHzgtrTgt4Pgt4og4LeA4La74LeUfOC2tOC3mS7gt4B84La0LuC3gC4vLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+C2tC7gt4AuJyB8fCBpbnB1dCA9PT0gJ+C2tOC3g+C3iiDgt4Dgtrvgt5QnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tC7gt4AuJyA6ICfgtrTgt4Pgt4og4LeA4La74LeUJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn4La04LeZLuC3gC4nIDogJ+C2tOC3meC2uyDgt4Dgtrvgt5QnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/si.js\n"); @@ -7287,7 +6930,6 @@ eval("//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! autho \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n '_'\n ),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return n > 1 && n < 5;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months: months,\n monthsShort: monthsShort,\n weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pred %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2suanM/N2JlNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92YWsgW3NrXVxuLy8hIGF1dGhvciA6IE1hcnRpbiBNaW5rYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rMnNcbi8vISBiYXNlZCBvbiB3b3JrIG9mIHBldHJiZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL3BldHJiZWxhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gJ2phbnXDoXJfZmVicnXDoXJfbWFyZWNfYXByw61sX23DoWpfasO6bl9qw7psX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2phbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuID4gMSAmJiBuIDwgNTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdww6FyIHNla8O6bmQnIDogJ3DDoXIgc2VrdW5kYW1pJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzogLy8gOSBzZWNvbmRzIC8gaW4gOSBzZWNvbmRzIC8gOSBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2Vrw7puZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtJzogLy8gYSBtaW51dGUgLyBpbiBhIG1pbnV0ZSAvIGEgbWludXRlIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbsO6dGEnIDogaXNGdXR1cmUgPyAnbWluw7p0dScgOiAnbWluw7p0b3UnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOiAvLyA5IG1pbnV0ZXMgLyBpbiA5IG1pbnV0ZXMgLyA5IG1pbnV0ZXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW7DunR5JyA6ICdtaW7DunQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21pbsO6dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaCc6IC8vIGFuIGhvdXIgLyBpbiBhbiBob3VyIC8gYW4gaG91ciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdob2RpbmEnIDogaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91JztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnaG9kaW55JyA6ICdob2TDrW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RlxYgnIDogJ2TFiG9tJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzogLy8gOSBkYXlzIC8gaW4gOSBkYXlzIC8gOSBkYXlzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZG5pJyA6ICdkbsOtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkxYhhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ00nOiAvLyBhIG1vbnRoIC8gaW4gYSBtb250aCAvIGEgbW9udGggYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzaWFjJyA6ICdtZXNpYWNvbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21lc2lhY2UnIDogJ21lc2lhY292Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtZXNpYWNtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAneSc6IC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdyb2snIDogJ3Jva29tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzogLy8gOSB5ZWFycyAvIGluIDkgeWVhcnMgLyA5IHllYXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAncm9reScgOiAncm9rb3YnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Jva21pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2sgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaycsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlxL5hX3BvbmRlbG9rX3V0b3Jva19zdHJlZGFfxaF0dnJ0b2tfcGlhdG9rX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zdF/FoXRfcGlfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6YWp0cmEgb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdm8gxaF0dnJ0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHBpYXRvayBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlZCAlcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2s7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sk.js\n"); @@ -7300,7 +6942,6 @@ eval("//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nekaj sekund'\n : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danes ob] LT',\n nextDay: '[jutri ob] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay: '[včeraj ob] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'čez %s',\n past: 'pred %s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2wuanM/ODE1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2wuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2xvdmVuaWFuIFtzbF1cbi8vISBhdXRob3IgOiBSb2JlcnQgU2Vkb3bFoWVrIDogaHR0cHM6Ly9naXRodWIuY29tL3NlZG92c2VrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgPyAnbmVrYWogc2VrdW5kJ1xuICAgICAgICAgICAgICAgICAgICA6ICduZWthaiBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAnc2VrdW5kbycgOiAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kaScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRlJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZW5hIG1pbnV0YScgOiAnZW5vIG1pbnV0byc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0byc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRpJyA6ICdtaW51dGFtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0ZScgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0JyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgdXJhJyA6ICdlbm8gdXJvJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ3VyYScgOiAndXJvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmknIDogJ3VyYW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXJlJyA6ICd1cmFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXInIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIGRhbicgOiAnZW5pbSBkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RhbicgOiAnZG5lbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2b21hJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIG1lc2VjJyA6ICdlbmltIG1lc2VjZW0nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWMnIDogJ21lc2VjZW0nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjYScgOiAnbWVzZWNlbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2UnIDogJ21lc2VjaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNldicgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VubyBsZXRvJyA6ICdlbmltIGxldG9tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldG8nIDogJ2xldG9tJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRpJyA6ICdsZXRvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRhJyA6ICdsZXRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXQnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2wnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX8SNZXRydGVrX3BldGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl90b3IuX3NyZS5fxI1ldC5fcGV0Ll9zb2IuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3RvX3NyX8SNZV9wZV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELiBNTS4gWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5lcyBvYl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tqdXRyaSBvYl0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYWogb2JdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfEjWV6ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzbDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sl.js\n"); @@ -7313,7 +6954,6 @@ eval("//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! autho \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sq = moment.defineLocale('sq', {\n months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n '_'\n ),\n monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n '_'\n ),\n weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem: function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Sot në] LT',\n nextDay: '[Nesër në] LT',\n nextWeek: 'dddd [në] LT',\n lastDay: '[Dje në] LT',\n lastWeek: 'dddd [e kaluar në] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'në %s',\n past: '%s më parë',\n s: 'disa sekonda',\n ss: '%d sekonda',\n m: 'një minutë',\n mm: '%d minuta',\n h: 'një orë',\n hh: '%d orë',\n d: 'një ditë',\n dd: '%d ditë',\n M: 'një muaj',\n MM: '%d muaj',\n y: 'një vit',\n yy: '%d vite',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sq;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3EuanM/YzhmMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NxLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFsYmFuaWFuIFtzcV1cbi8vISBhdXRob3IgOiBGbGFrw6tyaW0gSXNtYW5pIDogaHR0cHM6Ly9naXRodWIuY29tL2ZsYWtlcmltaVxuLy8hIGF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogT2VyZCBDdWthbGxhIDogaHR0cHM6Ly9naXRodWIuY29tL29lcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzcSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NxJywge1xuICAgICAgICBtb250aHM6ICdKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9Ow6tudG9yX0RoamV0b3InLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX1Noa19NYXJfUHJpX01hal9RZXJfS29yX0d1c19TaHRfVGV0X07Dq25fRGhqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0UgRGllbF9FIEjDq27Dq19FIE1hcnTDq19FIE3Dq3JrdXLDq19FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW7Dqycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0RpZV9Iw6tuX01hcl9Nw6tyX0Vual9QcmVfU2h0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0RfSF9NYV9Nw6tfRV9QX1NoJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9QRHxNRC8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgwKSA9PT0gJ00nO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cnMgPCAxMiA/ICdQRCcgOiAnTUQnO1xuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1NvdCBuw6tdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmVzw6tyIG7Dq10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRGplIG7Dq10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtlIGthbHVhciBuw6tdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbsOrICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBtw6sgcGFyw6snLFxuICAgICAgICAgICAgczogJ2Rpc2Egc2Vrb25kYScsXG4gICAgICAgICAgICBzczogJyVkIHNla29uZGEnLFxuICAgICAgICAgICAgbTogJ25qw6sgbWludXTDqycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0YScsXG4gICAgICAgICAgICBoOiAnbmrDqyBvcsOrJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3LDqycsXG4gICAgICAgICAgICBkOiAnbmrDqyBkaXTDqycsXG4gICAgICAgICAgICBkZDogJyVkIGRpdMOrJyxcbiAgICAgICAgICAgIE06ICduasOrIG11YWonLFxuICAgICAgICAgICAgTU06ICclZCBtdWFqJyxcbiAgICAgICAgICAgIHk6ICduasOrIHZpdCcsXG4gICAgICAgICAgICB5eTogJyVkIHZpdGUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNxO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sq.js\n"); @@ -7326,7 +6966,6 @@ eval("//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković : https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једне минуте'],\n mm: ['минут', 'минуте', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n dd: ['дан', 'дана', 'дана'],\n MM: ['месец', 'месеца', 'месеци'],\n yy: ['година', 'године', 'година'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n '_'\n ),\n monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay: '[јуче у] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пре %s',\n s: 'неколико секунди',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'дан',\n dd: translator.translate,\n M: 'месец',\n MM: translator.translate,\n y: 'годину',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return srCyrl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3ItY3lybC5qcz8xM2U5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NyLWN5cmwuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2VyYmlhbiBDeXJpbGxpYyBbc3ItY3lybF1cbi8vISBhdXRob3IgOiBNaWxhbiBKYW5hxI1rb3ZpxIc8bWlsYW5qYW5hY2tvdmljQGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlsYW4talxuLy8hIGF1dGhvciA6IFN0ZWZhbiBDcm5qYWtvdmnEhyA8c3RlZmFuQGhvdG1haWwucnM+IDogaHR0cHM6Ly9naXRodWIuY29tL2Nybmpha292aWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ9GB0LXQutGD0L3QtNCwJywgJ9GB0LXQutGD0L3QtNC1JywgJ9GB0LXQutGD0L3QtNC4J10sXG4gICAgICAgICAgICBtOiBbJ9GY0LXQtNCw0L0g0LzQuNC90YPRgicsICfRmNC10LTQvdC1INC80LjQvdGD0YLQtSddLFxuICAgICAgICAgICAgbW06IFsn0LzQuNC90YPRgicsICfQvNC40L3Rg9GC0LUnLCAn0LzQuNC90YPRgtCwJ10sXG4gICAgICAgICAgICBoOiBbJ9GY0LXQtNCw0L0g0YHQsNGCJywgJ9GY0LXQtNC90L7QsyDRgdCw0YLQsCddLFxuICAgICAgICAgICAgaGg6IFsn0YHQsNGCJywgJ9GB0LDRgtCwJywgJ9GB0LDRgtC4J10sXG4gICAgICAgICAgICBkZDogWyfQtNCw0L0nLCAn0LTQsNC90LAnLCAn0LTQsNC90LAnXSxcbiAgICAgICAgICAgIE1NOiBbJ9C80LXRgdC10YYnLCAn0LzQtdGB0LXRhtCwJywgJ9C80LXRgdC10YbQuCddLFxuICAgICAgICAgICAgeXk6IFsn0LPQvtC00LjQvdCwJywgJ9Cz0L7QtNC40L3QtScsICfQs9C+0LTQuNC90LAnXSxcbiAgICAgICAgfSxcbiAgICAgICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMVxuICAgICAgICAgICAgICAgID8gd29yZEtleVswXVxuICAgICAgICAgICAgICAgIDogbnVtYmVyID49IDIgJiYgbnVtYmVyIDw9IDRcbiAgICAgICAgICAgICAgICA/IHdvcmRLZXlbMV1cbiAgICAgICAgICAgICAgICA6IHdvcmRLZXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XTtcbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3JDeXJsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3ItY3lybCcsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGAX9GE0LXQsdGA0YPQsNGAX9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCx0LDRgF/QvtC60YLQvtCx0LDRgF/QvdC+0LLQtdC80LHQsNGAX9C00LXRhtC10LzQsdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn0ZjQsNC9Ll/RhNC10LEuX9C80LDRgC5f0LDQv9GALl/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LMuX9GB0LXQvy5f0L7QutGCLl/QvdC+0LIuX9C00LXRhi4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn0L3QtdC00LXRmdCwX9C/0L7QvdC10LTQtdGZ0LDQul/Rg9GC0L7RgNCw0Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQsNC6X9C/0LXRgtCw0Lpf0YHRg9Cx0L7RgtCwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0Ll/Qv9C+0L0uX9GD0YLQvi5f0YHRgNC1Ll/Rh9C10YIuX9C/0LXRgi5f0YHRg9CxLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQvdC1X9C/0L5f0YPRgl/RgdGAX9GH0LVf0L/QtV/RgdGDJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC4gTS4gWVlZWS4nLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVkuJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0LTQsNC90LDRgSDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vRgdGD0YLRgNCwINGDXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9C90LXQtNC10ZnRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBb0YHRgNC10LTRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBb0YHRg9Cx0L7RgtGDXSBb0YNdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIGRkZGQgW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0ZjRg9GH0LUg0YNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvQvdC10LTQtdGZ0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0L/QvtC90LXQtNC10ZnQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9GD0YLQvtGA0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0YHRgNC10LTQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRh9C10YLQstGA0YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0LXRgtC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YPQsdC+0YLQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC1ICVzJyxcbiAgICAgICAgICAgIHM6ICfQvdC10LrQvtC70LjQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAn0LTQsNC9JyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICfQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICfQs9C+0LTQuNC90YMnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyQ3lybDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sr-cyrl.js\n"); @@ -7339,7 +6978,6 @@ eval("//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković : https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jedne minute'],\n mm: ['minut', 'minute', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mesec', 'meseca', 'meseci'],\n yy: ['godina', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pre %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'dan',\n dd: translator.translate,\n M: 'mesec',\n MM: translator.translate,\n y: 'godinu',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanM/Y2YxZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2VyYmlhbiBbc3JdXG4vLyEgYXV0aG9yIDogTWlsYW4gSmFuYcSNa292acSHPG1pbGFuamFuYWNrb3ZpY0BnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL21pbGFuLWpcbi8vISBhdXRob3IgOiBTdGVmYW4gQ3JuamFrb3ZpxIcgPHN0ZWZhbkBob3RtYWlsLnJzPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcm5qYWtvdmljXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmRhJywgJ3Nla3VuZGUnLCAnc2VrdW5kaSddLFxuICAgICAgICAgICAgbTogWydqZWRhbiBtaW51dCcsICdqZWRuZSBtaW51dGUnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0ZScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzBdXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPj0gMiAmJiBudW1iZXIgPD0gNFxuICAgICAgICAgICAgICAgID8gd29yZEtleVsxXVxuICAgICAgICAgICAgICAgIDogd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldO1xuICAgICAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIHZhciBzciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NyJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELiBNLiBZWVlZLicsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWS4nLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZLiBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtuZWRlbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JlZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1tqdcSNZSB1XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW25lZGVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbdXRvcmthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByZSAlcycsXG4gICAgICAgICAgICBzOiAnbmVrb2xpa28gc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ2RhbicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sr.js\n"); @@ -7352,7 +6990,6 @@ eval("//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ss = moment.defineLocale('ss', {\n months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n '_'\n ),\n monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n '_'\n ),\n weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Namuhla nga] LT',\n nextDay: '[Kusasa nga] LT',\n nextWeek: 'dddd [nga] LT',\n lastDay: '[Itolo nga] LT',\n lastWeek: 'dddd [leliphelile] [nga] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'nga %s',\n past: 'wenteka nga %s',\n s: 'emizuzwana lomcane',\n ss: '%d mzuzwana',\n m: 'umzuzu',\n mm: '%d emizuzu',\n h: 'lihora',\n hh: '%d emahora',\n d: 'lilanga',\n dd: '%d emalanga',\n M: 'inyanga',\n MM: '%d tinyanga',\n y: 'umnyaka',\n yy: '%d iminyaka',\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: '%d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ss;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3MuanM/NTJiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBzaVN3YXRpIFtzc11cbi8vISBhdXRob3IgOiBOaWNvbGFpIERhdmllczxtYWlsQG5pY29sYWkuaW8+IDogaHR0cHM6Ly9naXRodWIuY29tL25pY29sYWlkYXZpZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NzJywge1xuICAgICAgICBtb250aHM6IFwiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVfTWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0tob2x3YW5lX0luZ2NpX0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29uZ29uaVwiLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0xpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdMaV9Vc19MYl9MdF9Mc19MaF9VZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tOYW11aGxhIG5nYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tLdXNhc2EgbmdhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW25nYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJdG9sbyBuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbmdhICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd3ZW50ZWthIG5nYSAlcycsXG4gICAgICAgICAgICBzOiAnZW1penV6d2FuYSBsb21jYW5lJyxcbiAgICAgICAgICAgIHNzOiAnJWQgbXp1endhbmEnLFxuICAgICAgICAgICAgbTogJ3VtenV6dScsXG4gICAgICAgICAgICBtbTogJyVkIGVtaXp1enUnLFxuICAgICAgICAgICAgaDogJ2xpaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGVtYWhvcmEnLFxuICAgICAgICAgICAgZDogJ2xpbGFuZ2EnLFxuICAgICAgICAgICAgZGQ6ICclZCBlbWFsYW5nYScsXG4gICAgICAgICAgICBNOiAnaW55YW5nYScsXG4gICAgICAgICAgICBNTTogJyVkIHRpbnlhbmdhJyxcbiAgICAgICAgICAgIHk6ICd1bW55YWthJyxcbiAgICAgICAgICAgIHl5OiAnJWQgaW1pbnlha2EnLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWt1c2VuaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VtaW5pJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW50c2FtYmFtYSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZWJ1c3VrdSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ2VrdXNlbmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZW1pbmknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VudHNhbWJhbWEnIHx8IG1lcmlkaWVtID09PSAnZWJ1c3VrdScpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogJyVkJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNzO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ss.js\n"); @@ -7365,7 +7002,6 @@ eval("//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sv = moment.defineLocale('sv', {\n months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: 'för %s sedan',\n s: 'några sekunder',\n ss: '%d sekunder',\n m: 'en minut',\n mm: '%d minuter',\n h: 'en timme',\n hh: '%d timmar',\n d: 'en dag',\n dd: '%d dagar',\n M: 'en månad',\n MM: '%d månader',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? ':e'\n : b === 1\n ? ':a'\n : b === 2\n ? ':a'\n : b === 3\n ? ':e'\n : ':e';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sv;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3YuanM/NWZiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sv.js\n"); @@ -7378,7 +7014,6 @@ eval("//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sw = moment.defineLocale('sw', {\n months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n '_'\n ),\n weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'hh:mm A',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[leo saa] LT',\n nextDay: '[kesho saa] LT',\n nextWeek: '[wiki ijayo] dddd [saat] LT',\n lastDay: '[jana] LT',\n lastWeek: '[wiki iliyopita] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s baadaye',\n past: 'tokea %s',\n s: 'hivi punde',\n ss: 'sekunde %d',\n m: 'dakika moja',\n mm: 'dakika %d',\n h: 'saa limoja',\n hh: 'masaa %d',\n d: 'siku moja',\n dd: 'siku %d',\n M: 'mwezi mmoja',\n MM: 'miezi %d',\n y: 'mwaka mmoja',\n yy: 'miaka %d',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanM/NzRkYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N3LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFN3YWhpbGkgW3N3XVxuLy8hIGF1dGhvciA6IEZhaGFkIEthc3NpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWRzZWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N3Jywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0pwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnSjJfSjNfSjRfSjVfQWxfSWpfSjEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaGg6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2xlbyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdba2VzaG8gc2FhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1t3aWtpIGlqYXlvXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2phbmFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIGJhYWRheWUnLFxuICAgICAgICAgICAgcGFzdDogJ3Rva2VhICVzJyxcbiAgICAgICAgICAgIHM6ICdoaXZpIHB1bmRlJyxcbiAgICAgICAgICAgIHNzOiAnc2VrdW5kZSAlZCcsXG4gICAgICAgICAgICBtOiAnZGFraWthIG1vamEnLFxuICAgICAgICAgICAgbW06ICdkYWtpa2EgJWQnLFxuICAgICAgICAgICAgaDogJ3NhYSBsaW1vamEnLFxuICAgICAgICAgICAgaGg6ICdtYXNhYSAlZCcsXG4gICAgICAgICAgICBkOiAnc2lrdSBtb2phJyxcbiAgICAgICAgICAgIGRkOiAnc2lrdSAlZCcsXG4gICAgICAgICAgICBNOiAnbXdlemkgbW1vamEnLFxuICAgICAgICAgICAgTU06ICdtaWV6aSAlZCcsXG4gICAgICAgICAgICB5OiAnbXdha2EgbW1vamEnLFxuICAgICAgICAgICAgeXk6ICdtaWFrYSAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/sw.js\n"); @@ -7391,7 +7026,6 @@ eval("//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '௧',\n 2: '௨',\n 3: '௩',\n 4: '௪',\n 5: '௫',\n 6: '௬',\n 7: '௭',\n 8: '௮',\n 9: '௯',\n 0: '௦',\n },\n numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0',\n };\n\n var ta = moment.defineLocale('ta', {\n months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n '_'\n ),\n weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n '_'\n ),\n weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, HH:mm',\n LLLL: 'dddd, D MMMM YYYY, HH:mm',\n },\n calendar: {\n sameDay: '[இன்று] LT',\n nextDay: '[நாளை] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[நேற்று] LT',\n lastWeek: '[கடந்த வாரம்] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s இல்',\n past: '%s முன்',\n s: 'ஒரு சில விநாடிகள்',\n ss: '%d விநாடிகள்',\n m: 'ஒரு நிமிடம்',\n mm: '%d நிமிடங்கள்',\n h: 'ஒரு மணி நேரம்',\n hh: '%d மணி நேரம்',\n d: 'ஒரு நாள்',\n dd: '%d நாட்கள்',\n M: 'ஒரு மாதம்',\n MM: '%d மாதங்கள்',\n y: 'ஒரு வருடம்',\n yy: '%d ஆண்டுகள்',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal: function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem: function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ta;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanM/M2RlNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixnQ0FBZ0M7QUFDaEMsYUFBYTtBQUNiLCtCQUErQjtBQUMvQixhQUFhO0FBQ2Isa0NBQWtDO0FBQ2xDLGFBQWE7QUFDYixrQ0FBa0M7QUFDbEMsYUFBYTtBQUNiLCtCQUErQjtBQUMvQixhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFtaWwgW3RhXVxuLy8hIGF1dGhvciA6IEFyanVua3VtYXIgS3Jpc2huYW1vb3J0aHkgOiBodHRwczovL2dpdGh1Yi5jb20vdGsxMjA0MDRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4K+nJyxcbiAgICAgICAgICAgIDI6ICfgr6gnLFxuICAgICAgICAgICAgMzogJ+CvqScsXG4gICAgICAgICAgICA0OiAn4K+qJyxcbiAgICAgICAgICAgIDU6ICfgr6snLFxuICAgICAgICAgICAgNjogJ+CvrCcsXG4gICAgICAgICAgICA3OiAn4K+tJyxcbiAgICAgICAgICAgIDg6ICfgr64nLFxuICAgICAgICAgICAgOTogJ+CvrycsXG4gICAgICAgICAgICAwOiAn4K+mJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cvpyc6ICcxJyxcbiAgICAgICAgICAgICfgr6gnOiAnMicsXG4gICAgICAgICAgICAn4K+pJzogJzMnLFxuICAgICAgICAgICAgJ+Cvqic6ICc0JyxcbiAgICAgICAgICAgICfgr6snOiAnNScsXG4gICAgICAgICAgICAn4K+sJzogJzYnLFxuICAgICAgICAgICAgJ+CvrSc6ICc3JyxcbiAgICAgICAgICAgICfgr64nOiAnOCcsXG4gICAgICAgICAgICAn4K+vJzogJzknLFxuICAgICAgICAgICAgJ+Cvpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciB0YSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RhJywge1xuICAgICAgICBtb250aHM6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgrp7grr7grq/grr/grrHgr43grrHgr4HgrpXgr43grpXgrr/grrTgrq7gr4hf4K6k4K6/4K6Z4K+N4K6V4K6f4K+N4K6V4K6/4K604K6u4K+IX+CumuCvhuCuteCvjeCuteCuvuCur+CvjeCuleCuv+CutOCuruCviF/grqrgr4HgrqTgrqngr43grpXgrr/grrTgrq7gr4hf4K614K6/4K6v4K6+4K604K6V4K+N4K6V4K6/4K604K6u4K+IX+CuteCvhuCus+CvjeCus+Cuv+CuleCvjeCuleCuv+CutOCuruCviF/grprgrqngrr/grpXgr43grpXgrr/grrTgrq7gr4gnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgrp7grr7grq/grr/grrHgr4Ff4K6k4K6/4K6Z4K+N4K6V4K6z4K+NX+CumuCvhuCuteCvjeCuteCuvuCur+CvjV/grqrgr4HgrqTgrqngr41f4K614K6/4K6v4K6+4K604K6p4K+NX+CuteCvhuCus+CvjeCus+Cuv1/grprgrqngrr8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4K6e4K6+X+CupOCuv1/grprgr4Zf4K6q4K+BX+CuteCuv1/grrXgr4Zf4K6aJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4K6H4K6p4K+N4K6x4K+BXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CuqOCuvuCus+CviF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CuqOCvh+CuseCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4K6V4K6f4K6o4K+N4K6kIOCuteCuvuCusOCuruCvjV0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgrofgrrLgr40nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCuruCvgeCuqeCvjScsXG4gICAgICAgICAgICBzOiAn4K6S4K6w4K+BIOCumuCuv+CusiDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40nLFxuICAgICAgICAgICAgc3M6ICclZCDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40nLFxuICAgICAgICAgICAgbTogJ+CukuCusOCvgSDgrqjgrr/grq7grr/grp/grq7gr40nLFxuICAgICAgICAgICAgbW06ICclZCDgrqjgrr/grq7grr/grp/grpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgaDogJ+CukuCusOCvgSDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBkOiAn4K6S4K6w4K+BIOCuqOCuvuCus+CvjScsXG4gICAgICAgICAgICBkZDogJyVkIOCuqOCuvuCun+CvjeCuleCus+CvjScsXG4gICAgICAgICAgICBNOiAn4K6S4K6w4K+BIOCuruCuvuCupOCuruCvjScsXG4gICAgICAgICAgICBNTTogJyVkIOCuruCuvuCupOCumeCvjeCuleCus+CvjScsXG4gICAgICAgICAgICB5OiAn4K6S4K6w4K+BIOCuteCusOCvgeCun+CuruCvjScsXG4gICAgICAgICAgICB5eTogJyVkIOCuhuCuo+CvjeCun+CvgeCuleCus+CvjScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeCuteCupOCvgS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4K614K6k4K+BJztcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Cvp+CvqOCvqeCvquCvq+CvrOCvreCvruCvr+Cvpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcmVmZXIgaHR0cDovL3RhLndpa2lwZWRpYS5vcmcvcy8xZXIxXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/grq/grr7grq7grq7gr4184K614K+I4K6V4K6x4K+IfOCuleCuvuCusuCviHzgrqjgrqPgr43grqrgrpXgrrLgr4184K6O4K6x4K+N4K6q4K6+4K6f4K+BfOCuruCuvuCusuCviC8sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq/grr7grq7grq7gr40nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuteCviOCuleCuseCviCc7IC8vIOCuteCviOCuleCuseCviFxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrpXgrr7grrLgr4gnOyAvLyDgrpXgrr7grrLgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6o4K6j4K+N4K6q4K6V4K6y4K+NJzsgLy8g4K6o4K6j4K+N4K6q4K6V4K6y4K+NXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCujuCuseCvjeCuquCuvuCun+CvgSc7IC8vIOCujuCuseCvjeCuquCuvuCun+CvgVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrq7grr7grrLgr4gnOyAvLyDgrq7grr7grrLgr4hcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4K6v4K6+4K6u4K6u4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K614K+I4K6V4K6x4K+IJyB8fCBtZXJpZGllbSA9PT0gJ+CuleCuvuCusuCviCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgrqjgrqPgr43grqrgrpXgrrLgr40nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGE7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ta.js\n"); @@ -7404,7 +7038,6 @@ eval("//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var te = moment.defineLocale('te', {\n months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n '_'\n ),\n monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n '_'\n ),\n weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[నేడు] LT',\n nextDay: '[రేపు] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[నిన్న] LT',\n lastWeek: '[గత] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s లో',\n past: '%s క్రితం',\n s: 'కొన్ని క్షణాలు',\n ss: '%d సెకన్లు',\n m: 'ఒక నిమిషం',\n mm: '%d నిమిషాలు',\n h: 'ఒక గంట',\n hh: '%d గంటలు',\n d: 'ఒక రోజు',\n dd: '%d రోజులు',\n M: 'ఒక నెల',\n MM: '%d నెలలు',\n y: 'ఒక సంవత్సరం',\n yy: '%d సంవత్సరాలు',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n ordinal: '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return te;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanM/NWNiYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGVsdWd1IFt0ZV1cbi8vISBhdXRob3IgOiBLcmlzaG5hIENoYWl0YW55YSBUaG90YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rY3Rob3RhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZScsIHtcbiAgICAgICAgbW9udGhzOiAn4LCc4LCo4LC14LCw4LC/X+Cwq+Cwv+CwrOCxjeCwsOCwteCwsOCwv1/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/4LCy4LGNX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwl+CwuOCxjeCwn+CxgV/gsLjgsYbgsKrgsY3gsJ/gsYbgsILgsKzgsLDgsY1f4LCF4LCV4LGN4LCf4LGL4LCs4LCw4LGNX+CwqOCwteCwguCwrOCwsOCxjV/gsKHgsL/gsLjgsYbgsILgsKzgsLDgsY0nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4LCc4LCoLl/gsKvgsL/gsKzgsY3gsLAuX+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL8uX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwly5f4LC44LGG4LCq4LGNLl/gsIXgsJXgsY3gsJ/gsYsuX+CwqOCwtS5f4LCh4LC/4LC44LGGLicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgsIbgsKbgsL/gsLXgsL7gsLDgsIJf4LC44LGL4LCu4LC14LC+4LCw4LCCX+CwruCwguCwl+Cws+CwteCwvuCwsOCwgl/gsKzgsYHgsKfgsLXgsL7gsLDgsIJf4LCX4LGB4LCw4LGB4LC14LC+4LCw4LCCX+CwtuCxgeCwleCxjeCwsOCwteCwvuCwsOCwgl/gsLbgsKjgsL/gsLXgsL7gsLDgsIInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgsIbgsKbgsL9f4LC44LGL4LCuX+CwruCwguCwl+Cws1/gsKzgsYHgsKdf4LCX4LGB4LCw4LGBX+CwtuCxgeCwleCxjeCwsF/gsLbgsKjgsL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LCGX+CwuOCxi1/gsK7gsIJf4LCs4LGBX+Cwl+CxgV/gsLbgsYFf4LC2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CwqOCxh+CwoeCxgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgsLDgsYfgsKrgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgsKjgsL/gsKjgsY3gsKhdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+Cwl+CwpF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgsLLgsYsnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCwleCxjeCwsOCwv+CwpOCwgicsXG4gICAgICAgICAgICBzOiAn4LCV4LGK4LCo4LGN4LCo4LC/IOCwleCxjeCwt+Cwo+CwvuCwsuCxgScsXG4gICAgICAgICAgICBzczogJyVkIOCwuOCxhuCwleCwqOCxjeCwsuCxgScsXG4gICAgICAgICAgICBtOiAn4LCS4LCVIOCwqOCwv+CwruCwv+Cwt+CwgicsXG4gICAgICAgICAgICBtbTogJyVkIOCwqOCwv+CwruCwv+Cwt+CwvuCwsuCxgScsXG4gICAgICAgICAgICBoOiAn4LCS4LCVIOCwl+CwguCwnycsXG4gICAgICAgICAgICBoaDogJyVkIOCwl+CwguCwn+CwsuCxgScsXG4gICAgICAgICAgICBkOiAn4LCS4LCVIOCwsOCxi+CwnOCxgScsXG4gICAgICAgICAgICBkZDogJyVkIOCwsOCxi+CwnOCxgeCwsuCxgScsXG4gICAgICAgICAgICBNOiAn4LCS4LCVIOCwqOCxhuCwsicsXG4gICAgICAgICAgICBNTTogJyVkIOCwqOCxhuCwsuCwsuCxgScsXG4gICAgICAgICAgICB5OiAn4LCS4LCVIOCwuOCwguCwteCwpOCxjeCwuOCwsOCwgicsXG4gICAgICAgICAgICB5eTogJyVkIOCwuOCwguCwteCwpOCxjeCwuOCwsOCwvuCwsuCxgScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeCwtS8sXG4gICAgICAgIG9yZGluYWw6ICclZOCwtScsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gsLDgsL7gsKTgsY3gsLDgsL984LCJ4LCm4LCv4LCCfOCwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgnzgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIIvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgsLDgsL7gsKTgsY3gsLDgsL8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsIngsKbgsK/gsIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsIngsKbgsK/gsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsLDgsL7gsKTgsY3gsLDgsL8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGU7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/te.js\n"); @@ -7417,7 +7050,6 @@ eval("//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tet = moment.defineLocale('tet', {\n months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'iha %s',\n past: '%s liuba',\n s: 'segundu balun',\n ss: 'segundu %d',\n m: 'minutu ida',\n mm: 'minutu %d',\n h: 'oras ida',\n hh: 'oras %d',\n d: 'loron ida',\n dd: 'loron %d',\n M: 'fulan ida',\n MM: 'fulan %d',\n y: 'tinan ida',\n yy: 'tinan %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tet;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzPzU3NmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRldHVuIERpbGkgKEVhc3QgVGltb3IpIFt0ZXRdXG4vLyEgYXV0aG9yIDogSm9zaHVhIEJyb29rcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NoYnJvb2tzXG4vLyEgYXV0aG9yIDogT25vcmlvIERlIEouIEFmb25zbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJvYm9cbi8vISBhdXRob3IgOiBTb25pYSBTaW1vZXMgOiBodHRwczovL2dpdGh1Yi5jb20vc29uaWFzaW1vZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpaGEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzOiAnc2VndW5kdSAlZCcsXG4gICAgICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbTogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBoOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQ6ICdsb3JvbiBpZGEnLFxuICAgICAgICAgICAgZGQ6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NOiAnZnVsYW4gJWQnLFxuICAgICAgICAgICAgeTogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tet.js\n"); @@ -7430,7 +7062,6 @@ eval("//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [ \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-ум',\n 1: '-ум',\n 2: '-юм',\n 3: '-юм',\n 4: '-ум',\n 5: '-ум',\n 6: '-ум',\n 7: '-ум',\n 8: '-ум',\n 9: '-ум',\n 10: '-ум',\n 12: '-ум',\n 13: '-ум',\n 20: '-ум',\n 30: '-юм',\n 40: '-ум',\n 50: '-ум',\n 60: '-ум',\n 70: '-ум',\n 80: '-ум',\n 90: '-ум',\n 100: '-ум',\n };\n\n var tg = moment.defineLocale('tg', {\n months: {\n format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n '_'\n ),\n standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n },\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n '_'\n ),\n weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Имрӯз соати] LT',\n nextDay: '[Фардо соати] LT',\n lastDay: '[Дирӯз соати] LT',\n nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'баъди %s',\n past: '%s пеш',\n s: 'якчанд сония',\n m: 'як дақиқа',\n mm: '%d дақиқа',\n h: 'як соат',\n hh: '%d соат',\n d: 'як рӯз',\n dd: '%d рӯз',\n M: 'як моҳ',\n MM: '%d моҳ',\n y: 'як сол',\n yy: '%d сол',\n },\n meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'шаб') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'субҳ') {\n return hour;\n } else if (meridiem === 'рӯз') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'бегоҳ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'шаб';\n } else if (hour < 11) {\n return 'субҳ';\n } else if (hour < 16) {\n return 'рӯз';\n } else if (hour < 19) {\n return 'бегоҳ';\n } else {\n return 'шаб';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1th is the first week of the year.\n },\n });\n\n return tg;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanM/M2IxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFqaWsgW3RnXVxuLy8hIGF1dGhvciA6IE9yaWYgTi4gSnIuIDogaHR0cHM6Ly9naXRodWIuY29tL29yaWYtanJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMDogJy3Rg9C8JyxcbiAgICAgICAgMTogJy3Rg9C8JyxcbiAgICAgICAgMjogJy3RjtC8JyxcbiAgICAgICAgMzogJy3RjtC8JyxcbiAgICAgICAgNDogJy3Rg9C8JyxcbiAgICAgICAgNTogJy3Rg9C8JyxcbiAgICAgICAgNjogJy3Rg9C8JyxcbiAgICAgICAgNzogJy3Rg9C8JyxcbiAgICAgICAgODogJy3Rg9C8JyxcbiAgICAgICAgOTogJy3Rg9C8JyxcbiAgICAgICAgMTA6ICct0YPQvCcsXG4gICAgICAgIDEyOiAnLdGD0LwnLFxuICAgICAgICAxMzogJy3Rg9C8JyxcbiAgICAgICAgMjA6ICct0YPQvCcsXG4gICAgICAgIDMwOiAnLdGO0LwnLFxuICAgICAgICA0MDogJy3Rg9C8JyxcbiAgICAgICAgNTA6ICct0YPQvCcsXG4gICAgICAgIDYwOiAnLdGD0LwnLFxuICAgICAgICA3MDogJy3Rg9C8JyxcbiAgICAgICAgODA6ICct0YPQvCcsXG4gICAgICAgIDkwOiAnLdGD0LwnLFxuICAgICAgICAxMDA6ICct0YPQvCcsXG4gICAgfTtcblxuICAgIHZhciB0ZyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RnJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDQuF/RhNC10LLRgNCw0LvQuF/QvNCw0YDRgtC4X9Cw0L/RgNC10LvQuF/QvNCw0LnQuF/QuNGO0L3QuF/QuNGO0LvQuF/QsNCy0LPRg9GB0YLQuF/RgdC10L3RgtGP0LHRgNC4X9C+0LrRgtGP0LHRgNC4X9C90L7Rj9Cx0YDQuF/QtNC10LrQsNCx0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTogJ9GP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9GP0LrRiNCw0L3QsdC1X9C00YPRiNCw0L3QsdC1X9GB0LXRiNCw0L3QsdC1X9GH0L7RgNGI0LDQvdCx0LVf0L/QsNC90rfRiNCw0L3QsdC1X9K30YPQvNGK0LBf0YjQsNC90LHQtScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9GP0YjQsV/QtNGI0LFf0YHRiNCxX9GH0YjQsV/Qv9GI0LFf0rfRg9C8X9GI0L3QsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CY0LzRgNOv0Lcg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQpNCw0YDQtNC+INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0L7Rj9C90LTQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0LPRg9C30LDRiNGC0LAg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQsdCw0YrQtNC4ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQv9C10YgnLFxuICAgICAgICAgICAgczogJ9GP0LrRh9Cw0L3QtCDRgdC+0L3QuNGPJyxcbiAgICAgICAgICAgIG06ICfRj9C6INC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBoOiAn0Y/QuiDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfRj9C6INGA06/QtycsXG4gICAgICAgICAgICBkZDogJyVkINGA06/QtycsXG4gICAgICAgICAgICBNOiAn0Y/QuiDQvNC+0rMnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC+0rMnLFxuICAgICAgICAgICAgeTogJ9GP0Log0YHQvtC7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0YHQvtC7JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ9GI0LDQsScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GB0YPQsdKzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GA06/QtycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0LHQtdCz0L7SsycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRiNCw0LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GB0YPQsdKzJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNOv0LcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cx0LXQs9C+0rMnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YPQvHzRjtC8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRnO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tg.js\n"); @@ -7443,7 +7074,6 @@ eval("//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var th = moment.defineLocale('th', {\n months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n '_'\n ),\n monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY เวลา H:mm',\n LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar: {\n sameDay: '[วันนี้ เวลา] LT',\n nextDay: '[พรุ่งนี้ เวลา] LT',\n nextWeek: 'dddd[หน้า เวลา] LT',\n lastDay: '[เมื่อวานนี้ เวลา] LT',\n lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'อีก %s',\n past: '%sที่แล้ว',\n s: 'ไม่กี่วินาที',\n ss: '%d วินาที',\n m: '1 นาที',\n mm: '%d นาที',\n h: '1 ชั่วโมง',\n hh: '%d ชั่วโมง',\n d: '1 วัน',\n dd: '%d วัน',\n w: '1 สัปดาห์',\n ww: '%d สัปดาห์',\n M: '1 เดือน',\n MM: '%d เดือน',\n y: '1 ปี',\n yy: '%d ปี',\n },\n });\n\n return th;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGguanM/MTBlOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRoYWkgW3RoXVxuLy8hIGF1dGhvciA6IEtyaWRzYWRhIFRoYW5hYnVscG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaXJuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aCcsIHtcbiAgICAgICAgbW9udGhzOiAn4Lih4LiB4Lij4Liy4LiE4LihX+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jF/guKHguLXguJnguLLguITguKFf4LmA4Lih4Lip4Liy4Lii4LiZX+C4nuC4pOC4qeC4oOC4suC4hOC4oV/guKHguLTguJbguLjguJnguLLguKLguJlf4LiB4Lij4LiB4LiO4Liy4LiE4LihX+C4quC4tOC4h+C4q+C4suC4hOC4oV/guIHguLHguJnguKLguLLguKLguJlf4LiV4Li44Lil4Liy4LiE4LihX+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mV/guJjguLHguJnguKfguLLguITguKEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4LihLuC4hC5f4LiBLuC4ni5f4Lih4Li1LuC4hC5f4LmA4LihLuC4oi5f4LieLuC4hC5f4Lih4Li0LuC4oi5f4LiBLuC4hC5f4LiqLuC4hC5f4LiBLuC4oi5f4LiVLuC4hC5f4LieLuC4oi5f4LiYLuC4hC4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4quC4muC4lOC4tV/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4ql/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLCAvLyB5ZXMsIHRocmVlIGNoYXJhY3RlcnMgZGlmZmVyZW5jZVxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C4reC4si5f4LiILl/guK0uX+C4ni5f4Lie4LikLl/guKguX+C4qi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ+C4p+C4seC4mWRkZGTguJfguLXguYggRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHfOC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C4geC5iOC4reC4meC5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Lin4Lix4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vguJ7guKPguLjguYjguIfguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb4Lir4LiZ4LmJ4LiyIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vguYDguKHguLfguYjguK3guKfguLLguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vguKfguLHguJldZGRkZFvguJfguLXguYjguYHguKXguYnguKcg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+C4reC4teC4gSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXPguJfguLXguYjguYHguKXguYnguKcnLFxuICAgICAgICAgICAgczogJ+C5hOC4oeC5iOC4geC4teC5iOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBzczogJyVkIOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtOiAnMSDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgbW06ICclZCDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgaDogJzEg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGQ6ICcxIOC4p+C4seC4mScsXG4gICAgICAgICAgICBkZDogJyVkIOC4p+C4seC4mScsXG4gICAgICAgICAgICB3OiAnMSDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICAgICAgd3c6ICclZCDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICAgICAgTTogJzEg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIHk6ICcxIOC4m+C4tScsXG4gICAgICAgICAgICB5eTogJyVkIOC4m+C4tScsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGg7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/th.js\n"); @@ -7456,7 +7086,6 @@ eval("//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : K \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inji\",\n 5: \"'inji\",\n 8: \"'inji\",\n 70: \"'inji\",\n 80: \"'inji\",\n 2: \"'nji\",\n 7: \"'nji\",\n 20: \"'nji\",\n 50: \"'nji\",\n 3: \"'ünji\",\n 4: \"'ünji\",\n 100: \"'ünji\",\n 6: \"'njy\",\n 9: \"'unjy\",\n 10: \"'unjy\",\n 30: \"'unjy\",\n 60: \"'ynjy\",\n 90: \"'ynjy\",\n };\n\n var tk = moment.defineLocale('tk', {\n months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n '_'\n ),\n weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün sagat] LT',\n nextDay: '[ertir sagat] LT',\n nextWeek: '[indiki] dddd [sagat] LT',\n lastDay: '[düýn] LT',\n lastWeek: '[geçen] dddd [sagat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s soň',\n past: '%s öň',\n s: 'birnäçe sekunt',\n m: 'bir minut',\n mm: '%d minut',\n h: 'bir sagat',\n hh: '%d sagat',\n d: 'bir gün',\n dd: '%d gün',\n M: 'bir aý',\n MM: '%d aý',\n y: 'bir ýyl',\n yy: '%d ýyl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'unjy\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGsuanM/NWFmZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmttZW4gW3RrXVxuLy8hIGF1dGhvciA6IEF0YW15cmF0IEFiZHlyYWhtYW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGFteXJhdGFiZHlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMTogXCInaW5qaVwiLFxuICAgICAgICA1OiBcIidpbmppXCIsXG4gICAgICAgIDg6IFwiJ2luamlcIixcbiAgICAgICAgNzA6IFwiJ2luamlcIixcbiAgICAgICAgODA6IFwiJ2luamlcIixcbiAgICAgICAgMjogXCInbmppXCIsXG4gICAgICAgIDc6IFwiJ25qaVwiLFxuICAgICAgICAyMDogXCInbmppXCIsXG4gICAgICAgIDUwOiBcIiduamlcIixcbiAgICAgICAgMzogXCInw7xuamlcIixcbiAgICAgICAgNDogXCInw7xuamlcIixcbiAgICAgICAgMTAwOiBcIifDvG5qaVwiLFxuICAgICAgICA2OiBcIiduanlcIixcbiAgICAgICAgOTogXCIndW5qeVwiLFxuICAgICAgICAxMDogXCIndW5qeVwiLFxuICAgICAgICAzMDogXCIndW5qeVwiLFxuICAgICAgICA2MDogXCIneW5qeVwiLFxuICAgICAgICA5MDogXCIneW5qeVwiLFxuICAgIH07XG5cbiAgICB2YXIgdGsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aycsIHtcbiAgICAgICAgbW9udGhzOiAnw51hbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYcO9X0nDvXVuX0nDvXVsX0F3Z3VzdF9TZW50w71hYnJfT2t0w71hYnJfTm/DvWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnw51hbl9GZXdfTWFyX0Fwcl9NYcO9X0nDvW5fScO9bF9Bd2dfU2VuX09rdF9Ob8O9X0Rlaycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnw51la19EdcWfX1NpxZ9fw4dhcl9QZW5fQW5uX8WeZW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnw51rX0TFn19TxZ9fw4dyX1BuX0FuX8Webicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbZXJ0aXIgc2FnYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2luZGlraV0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZMO8w71uXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhZ2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHNvxYgnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2xYgnLFxuICAgICAgICAgICAgczogJ2Jpcm7DpMOnZSBzZWt1bnQnLFxuICAgICAgICAgICAgbTogJ2JpciBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0JyxcbiAgICAgICAgICAgIGg6ICdiaXIgc2FnYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWdhdCcsXG4gICAgICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgICAgIE06ICdiaXIgYcO9JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYcO9JyxcbiAgICAgICAgICAgIHk6ICdiaXIgw715bCcsXG4gICAgICAgICAgICB5eTogJyVkIMO9eWwnLFxuICAgICAgICB9LFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRG8nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIHplcm9cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBcIid1bmp5XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGs7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tk.js\n"); @@ -7469,7 +7098,6 @@ eval("//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tlPh = moment.defineLocale('tl-ph', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlPh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGwtcGguanM/MGYzOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RsLXBoLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhZ2Fsb2cgKFBoaWxpcHBpbmVzKSBbdGwtcGhdXG4vLyEgYXV0aG9yIDogRGFuIEhhZ21hbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWdtYW5kYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0bFBoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGwtcGgnLCB7XG4gICAgICAgIG1vbnRoczogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0Rpcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfTHVfTWFfTWlfSHVfQmlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3NhIGxvb2IgbmcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFuZyBuYWthbGlwYXMnLFxuICAgICAgICAgICAgczogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvJyxcbiAgICAgICAgICAgIG06ICdpc2FuZyBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG8nLFxuICAgICAgICAgICAgaDogJ2lzYW5nIG9yYXMnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgICAgIGRkOiAnJWQgYXJhdycsXG4gICAgICAgICAgICBNOiAnaXNhbmcgYnV3YW4nLFxuICAgICAgICAgICAgTU06ICclZCBidXdhbicsXG4gICAgICAgICAgICB5OiAnaXNhbmcgdGFvbicsXG4gICAgICAgICAgICB5eTogJyVkIHRhb24nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0vLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxQaDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tl-ph.js\n"); @@ -7482,7 +7110,6 @@ eval("//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'leS'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'waQ'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'nem'\n : time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'Hu’'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'wen'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'ben'\n : time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[one];\n }\n return word === '' ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n '_'\n ),\n monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L',\n },\n relativeTime: {\n future: translateFuture,\n past: translatePast,\n s: 'puS lup',\n ss: translate,\n m: 'wa’ tup',\n mm: translate,\n h: 'wa’ rep',\n hh: translate,\n d: 'wa’ jaj',\n dd: translate,\n M: 'wa’ jar',\n MM: translate,\n y: 'wa’ DIS',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlh;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGxoLmpzP2NmNzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2xpbmdvbiBbdGxoXVxuLy8hIGF1dGhvciA6IERvbWluaWthIEtydWsgOiBodHRwczovL2dpdGh1Yi5jb20vYW1hcmFudGhyb3NlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbnVtYmVyc05vdW5zID0gJ3BhZ2hfd2HigJlfY2hh4oCZX3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Jy5zcGxpdCgnXycpO1xuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlKG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9XG4gICAgICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdsZVMnXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICd3YVEnXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICduZW0nXG4gICAgICAgICAgICAgICAgOiB0aW1lICsgJyBwSXEnO1xuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVQYXN0KG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9XG4gICAgICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdIdeKAmSdcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdqYXInKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dlbidcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdESVMnKSAhPT0gLTFcbiAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ2JlbidcbiAgICAgICAgICAgICAgICA6IHRpbWUgKyAnIHJldCc7XG4gICAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bWJlck5vdW4gPSBudW1iZXJBc05vdW4obnVtYmVyKTtcbiAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgbHVwJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgdHVwJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgcmVwJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFqJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFyJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgRElTJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG51bWJlckFzTm91bihudW1iZXIpIHtcbiAgICAgICAgdmFyIGh1bmRyZWQgPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDAwKSAvIDEwMCksXG4gICAgICAgICAgICB0ZW4gPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDApIC8gMTApLFxuICAgICAgICAgICAgb25lID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICB3b3JkID0gJyc7XG4gICAgICAgIGlmIChodW5kcmVkID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSBudW1iZXJzTm91bnNbaHVuZHJlZF0gKyAndmF0bGgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW4gPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICh3b3JkICE9PSAnJyA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1t0ZW5dICsgJ21hSCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uZSA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gKHdvcmQgIT09ICcnID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW29uZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmQgPT09ICcnID8gJ3BhZ2gnIDogd29yZDtcbiAgICB9XG5cbiAgICB2YXIgdGxoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGxoJywge1xuICAgICAgICBtb250aHM6ICd0ZXJh4oCZIGphciB3YeKAmV90ZXJh4oCZIGphciBjaGHigJlfdGVyYeKAmSBqYXIgd2VqX3RlcmHigJkgamFyIGxvU190ZXJh4oCZIGphciB2YWdoX3RlcmHigJkgamFyIGphdl90ZXJh4oCZIGphciBTb2NoX3RlcmHigJkgamFyIGNob3JnaF90ZXJh4oCZIGphciBIdXRfdGVyYeKAmSBqYXIgd2HigJltYUhfdGVyYeKAmSBqYXIgd2HigJltYUggd2HigJlfdGVyYeKAmSBqYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phciB3YeKAmV9qYXIgY2hh4oCZX2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFyIEh1dF9qYXIgd2HigJltYUhfamFyIHdh4oCZbWFIIHdh4oCZX2phciB3YeKAmW1hSCBjaGHigJknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tEYUhqYWpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbd2HigJlsZVNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTExMJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbd2HigJlIdeKAmV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IHRyYW5zbGF0ZUZ1dHVyZSxcbiAgICAgICAgICAgIHBhc3Q6IHRyYW5zbGF0ZVBhc3QsXG4gICAgICAgICAgICBzOiAncHVTIGx1cCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogJ3dh4oCZIHR1cCcsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogJ3dh4oCZIHJlcCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ3dh4oCZIGphaicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ3dh4oCZIGphcicsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ3dh4oCZIERJUycsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsaDtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tlh.js\n"); @@ -7495,7 +7122,6 @@ eval("//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//! Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inci\",\n 5: \"'inci\",\n 8: \"'inci\",\n 70: \"'inci\",\n 80: \"'inci\",\n 2: \"'nci\",\n 7: \"'nci\",\n 20: \"'nci\",\n 50: \"'nci\",\n 3: \"'üncü\",\n 4: \"'üncü\",\n 100: \"'üncü\",\n 6: \"'ncı\",\n 9: \"'uncu\",\n 10: \"'uncu\",\n 30: \"'uncu\",\n 60: \"'ıncı\",\n 90: \"'ıncı\",\n };\n\n var tr = moment.defineLocale('tr', {\n months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n '_'\n ),\n monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n '_'\n ),\n weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'öö' : 'ÖÖ';\n } else {\n return isLower ? 'ös' : 'ÖS';\n }\n },\n meridiemParse: /öö|ÖÖ|ös|ÖS/,\n isPM: function (input) {\n return input === 'ös' || input === 'ÖS';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün saat] LT',\n nextDay: '[yarın saat] LT',\n nextWeek: '[gelecek] dddd [saat] LT',\n lastDay: '[dün] LT',\n lastWeek: '[geçen] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s sonra',\n past: '%s önce',\n s: 'birkaç saniye',\n ss: '%d saniye',\n m: 'bir dakika',\n mm: '%d dakika',\n h: 'bir saat',\n hh: '%d saat',\n d: 'bir gün',\n dd: '%d gün',\n w: 'bir hafta',\n ww: '%d hafta',\n M: 'bir ay',\n MM: '%d ay',\n y: 'bir yıl',\n yy: '%d yıl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'ıncı\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tr;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHIuanM/MGU4MSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmtpc2ggW3RyXVxuLy8hIGF1dGhvcnMgOiBFcmhhbiBHdW5kb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmhhbmd1bmRvZ2FuLFxuLy8hICAgICAgICAgICBCdXJhayBZacSfaXQgS2F5YTogaHR0cHM6Ly9naXRodWIuY29tL0JZS1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmNpXCIsXG4gICAgICAgIDU6IFwiJ2luY2lcIixcbiAgICAgICAgODogXCInaW5jaVwiLFxuICAgICAgICA3MDogXCInaW5jaVwiLFxuICAgICAgICA4MDogXCInaW5jaVwiLFxuICAgICAgICAyOiBcIiduY2lcIixcbiAgICAgICAgNzogXCInbmNpXCIsXG4gICAgICAgIDIwOiBcIiduY2lcIixcbiAgICAgICAgNTA6IFwiJ25jaVwiLFxuICAgICAgICAzOiBcIifDvG5jw7xcIixcbiAgICAgICAgNDogXCInw7xuY8O8XCIsXG4gICAgICAgIDEwMDogXCInw7xuY8O8XCIsXG4gICAgICAgIDY6IFwiJ25jxLFcIixcbiAgICAgICAgOTogXCIndW5jdVwiLFxuICAgICAgICAxMDogXCIndW5jdVwiLFxuICAgICAgICAzMDogXCIndW5jdVwiLFxuICAgICAgICA2MDogXCInxLFuY8SxXCIsXG4gICAgICAgIDkwOiBcIifEsW5jxLFcIixcbiAgICB9O1xuXG4gICAgdmFyIHRyID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHInLCB7XG4gICAgICAgIG1vbnRoczogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ09jYV/FnnViX01hcl9OaXNfTWF5X0hhel9UZW1fQcSfdV9FeWxfRWtpX0thc19BcmEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnUGF6YXJfUGF6YXJ0ZXNpX1NhbMSxX8OHYXLFn2FtYmFfUGVyxZ9lbWJlX0N1bWFfQ3VtYXJ0ZXNpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUGF6X1B0c19TYWxfw4dhcl9QZXJfQ3VtX0N0cycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnw7bDticgOiAnw5bDlic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8O2cycgOiAnw5ZTJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL8O2w7Z8w5bDlnzDtnN8w5ZTLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfDtnMnIHx8IGlucHV0ID09PSAnw5ZTJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t5YXLEsW4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2bmNlJyxcbiAgICAgICAgICAgIHM6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5ZScsXG4gICAgICAgICAgICBtOiAnYmlyIGRha2lrYScsXG4gICAgICAgICAgICBtbTogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNhYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgdzogJ2JpciBoYWZ0YScsXG4gICAgICAgICAgICB3dzogJyVkIGhhZnRhJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5xLFsJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCInxLFuY8SxXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tr.js\n"); @@ -7508,7 +7134,6 @@ eval("//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM [dallas] YYYY',\n LLL: 'D. MMMM [dallas] YYYY HH.mm',\n LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM: function (input) {\n return \"d'o\" === input.toLowerCase();\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? \"d'o\" : \"D'O\";\n } else {\n return isLower ? \"d'a\" : \"D'A\";\n }\n },\n calendar: {\n sameDay: '[oxhi à] LT',\n nextDay: '[demà à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[ieiri à] LT',\n lastWeek: '[sür el] dddd [lasteu à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'osprei %s',\n past: 'ja%s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['viensas secunds', \"'iensas secunds\"],\n ss: [number + ' secunds', '' + number + ' secunds'],\n m: [\"'n míut\", \"'iens míut\"],\n mm: [number + ' míuts', '' + number + ' míuts'],\n h: [\"'n þora\", \"'iensa þora\"],\n hh: [number + ' þoras', '' + number + ' þoras'],\n d: [\"'n ziua\", \"'iensa ziua\"],\n dd: [number + ' ziuas', '' + number + ' ziuas'],\n M: [\"'n mes\", \"'iens mes\"],\n MM: [number + ' mesen', '' + number + ' mesen'],\n y: [\"'n ar\", \"'iens ar\"],\n yy: [number + ' ars', '' + number + ' ars'],\n };\n return isFuture\n ? format[key][0]\n : withoutSuffix\n ? format[key][0]\n : format[key][1];\n }\n\n return tzl;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzP2NmNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHpsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbG9zc2FuIFt0emxdXG4vLyEgYXV0aG9yIDogUm9iaW4gdmFuIGRlciBWbGlldCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JpbjB2YW4wZGVyMHZcbi8vISBhdXRob3IgOiBJdXN0w6wgQ2FudW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIC8vIEFmdGVyIHRoZSB5ZWFyIHRoZXJlIHNob3VsZCBiZSBhIHNsYXNoIGFuZCB0aGUgYW1vdW50IG9mIHllYXJzIHNpbmNlIERlY2VtYmVyIDI2LCAxOTc5IGluIFJvbWFuIG51bWVyYWxzLlxuICAgIC8vIFRoaXMgaXMgY3VycmVudGx5IHRvbyBkaWZmaWN1bHQgKG1heWJlIGV2ZW4gaW1wb3NzaWJsZSkgdG8gYWRkLlxuICAgIHZhciB0emwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0emwnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZXZyYWdsaF9NYXLDp19BdnLDr3VfTWFpX0fDvG5fSnVsaWFfR3VzY2h0X1NldGVtdmFyX0xpc3RvcMOkdHNfTm9lbXZhcl9aZWNlbXZhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTw7psX0zDum5fTWFpX03DoXJfWGjDul9WacOpX1PDoXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU8O6X0zDul9NYV9Nw6FfWGhfVmlfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2RcXCdvfGRcXCdhL2ksXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiZCdvXCIgPT09IGlucHV0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnb1wiIDogXCJEJ09cIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnYVwiIDogXCJEJ0FcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbb3hoaSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tkZW3DoCDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpZWlyaSDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbc8O8ciBlbF0gZGRkZCBbbGFzdGV1IMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29zcHJlaSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnamElcycsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyd2aWVuc2FzIHNlY3VuZHMnLCBcIidpZW5zYXMgc2VjdW5kc1wiXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWN1bmRzJywgJycgKyBudW1iZXIgKyAnIHNlY3VuZHMnXSxcbiAgICAgICAgICAgIG06IFtcIiduIG3DrXV0XCIsIFwiJ2llbnMgbcOtdXRcIl0sXG4gICAgICAgICAgICBtbTogW251bWJlciArICcgbcOtdXRzJywgJycgKyBudW1iZXIgKyAnIG3DrXV0cyddLFxuICAgICAgICAgICAgaDogW1wiJ24gw75vcmFcIiwgXCInaWVuc2Egw75vcmFcIl0sXG4gICAgICAgICAgICBoaDogW251bWJlciArICcgw75vcmFzJywgJycgKyBudW1iZXIgKyAnIMO+b3JhcyddLFxuICAgICAgICAgICAgZDogW1wiJ24geml1YVwiLCBcIidpZW5zYSB6aXVhXCJdLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIHppdWFzJywgJycgKyBudW1iZXIgKyAnIHppdWFzJ10sXG4gICAgICAgICAgICBNOiBbXCInbiBtZXNcIiwgXCInaWVucyBtZXNcIl0sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgbWVzZW4nLCAnJyArIG51bWJlciArICcgbWVzZW4nXSxcbiAgICAgICAgICAgIHk6IFtcIiduIGFyXCIsIFwiJ2llbnMgYXJcIl0sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgYXJzJywgJycgKyBudW1iZXIgKyAnIGFycyddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmVcbiAgICAgICAgICAgID8gZm9ybWF0W2tleV1bMF1cbiAgICAgICAgICAgIDogd2l0aG91dFN1ZmZpeFxuICAgICAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICAgICAgOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpsO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tzl.js\n"); @@ -7521,7 +7146,6 @@ eval("//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! autho \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tzmLatn = moment.defineLocale('tzm-latn', {\n months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n '_'\n ),\n monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n '_'\n ),\n weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[asdkh g] LT',\n nextDay: '[aska g] LT',\n nextWeek: 'dddd [g] LT',\n lastDay: '[assant g] LT',\n lastWeek: 'dddd [g] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dadkh s yan %s',\n past: 'yan %s',\n s: 'imik',\n ss: '%d imik',\n m: 'minuḍ',\n mm: '%d minuḍ',\n h: 'saɛa',\n hh: '%d tassaɛin',\n d: 'ass',\n dd: '%d ossan',\n M: 'ayowr',\n MM: '%d iyyirn',\n y: 'asgas',\n yy: '%d isgasn',\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return tzmLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLWxhdG4uanM/YjUzZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90em0tbGF0bi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDZW50cmFsIEF0bGFzIFRhbWF6aWdodCBMYXRpbiBbdHptLWxhdG5dXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0em1MYXRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHptLWxhdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ2lubmF5cl9icsukYXlyy6RfbWFyy6Rzy6RfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X8mjd8WhdF/FoXd0YW5iaXJfa3TLpHdicsukX253d2FuYmlyX2R3am5iaXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYXNka2ggZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1thc2thIGddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1thc3NhbnQgZ10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhZGtoIHMgeWFuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd5YW4gJXMnLFxuICAgICAgICAgICAgczogJ2ltaWsnLFxuICAgICAgICAgICAgc3M6ICclZCBpbWlrJyxcbiAgICAgICAgICAgIG06ICdtaW514biNJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludeG4jScsXG4gICAgICAgICAgICBoOiAnc2HJm2EnLFxuICAgICAgICAgICAgaGg6ICclZCB0YXNzYcmbaW4nLFxuICAgICAgICAgICAgZDogJ2FzcycsXG4gICAgICAgICAgICBkZDogJyVkIG9zc2FuJyxcbiAgICAgICAgICAgIE06ICdheW93cicsXG4gICAgICAgICAgICBNTTogJyVkIGl5eWlybicsXG4gICAgICAgICAgICB5OiAnYXNnYXMnLFxuICAgICAgICAgICAgeXk6ICclZCBpc2dhc24nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR6bUxhdG47XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tzm-latn.js\n"); @@ -7534,7 +7158,6 @@ eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight L \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tzm = moment.defineLocale('tzm', {\n months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past: 'ⵢⴰⵏ %s',\n s: 'ⵉⵎⵉⴽ',\n ss: '%d ⵉⵎⵉⴽ',\n m: 'ⵎⵉⵏⵓⴺ',\n mm: '%d ⵎⵉⵏⵓⴺ',\n h: 'ⵙⴰⵄⴰ',\n hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d: 'ⴰⵙⵙ',\n dd: '%d oⵙⵙⴰⵏ',\n M: 'ⴰⵢoⵓⵔ',\n MM: '%d ⵉⵢⵢⵉⵔⵏ',\n y: 'ⴰⵙⴳⴰⵙ',\n yy: '%d ⵉⵙⴳⴰⵙⵏ',\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return tzm;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzP2MxMDkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IFt0em1dXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0em0gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0nLCB7XG4gICAgICAgIG1vbnRoczogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ+K1ieK1j+K1j+K0sOK1ouK1lF/itLHitZXitLDitaLitZVf4rWO4rSw4rWV4rWaX+K1ieK0seK1lOK1ieK1lF/itY7itLDitaLitaLitZNf4rWi4rWT4rWP4rWi4rWTX+K1ouK1k+K1jeK1ouK1k+K1o1/itZbitZPitZvitZxf4rWb4rWT4rWc4rSw4rWP4rSx4rWJ4rWUX+K0veK1n+K1k+K0seK1lV/itY/itZPitaHitLDitY/itLHitYnitZRf4rS34rWT4rWK4rWP4rSx4rWJ4rWUJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+K0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vitLDitZnitLfitYUg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+K0sOK1meK0veK0sCDitLRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+K0sOK1muK0sOK1j+K1nCDitLRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+K0t+K0sOK0t+K1hSDitZkg4rWi4rSw4rWPICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfitaLitLDitY8gJXMnLFxuICAgICAgICAgICAgczogJ+K1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBzczogJyVkIOK1ieK1juK1ieK0vScsXG4gICAgICAgICAgICBtOiAn4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4rWO4rWJ4rWP4rWT4rS6JyxcbiAgICAgICAgICAgIGg6ICfitZnitLDitYTitLAnLFxuICAgICAgICAgICAgaGg6ICclZCDitZzitLDitZnitZnitLDitYTitYnitY8nLFxuICAgICAgICAgICAgZDogJ+K0sOK1meK1mScsXG4gICAgICAgICAgICBkZDogJyVkIG/itZnitZnitLDitY8nLFxuICAgICAgICAgICAgTTogJ+K0sOK1om/itZPitZQnLFxuICAgICAgICAgICAgTU06ICclZCDitYnitaLitaLitYnitZTitY8nLFxuICAgICAgICAgICAgeTogJ+K0sOK1meK0s+K0sOK1mScsXG4gICAgICAgICAgICB5eTogJyVkIOK1ieK1meK0s+K0sOK1meK1jycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/tzm.js\n"); @@ -7547,7 +7170,6 @@ eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [ \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل',\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return ugCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWctY24uanM/NjExNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91Zy1jbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVeWdodXIgKENoaW5hKSBbdWctY25dXG4vLyEgYXV0aG9yOiBib3lhcSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3lhcVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVnQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1Zy1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2YrbldmD2LTbldmG2KjblV/Yr9uI2LTbldmG2KjblV/Ys9uV2YrYtNuV2YbYqNuVX9qG2KfYsdi025XZhtio25Vf2b7bldmK2LTbldmG2KjblV/YrNuI2YXblV/YtNuV2YbYqNuVJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YknLFxuICAgICAgICAgICAgTExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2YrbkNix2YnZhSDZg9uQ2obblScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9iz25XavtuV2LEnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJyB8fCBtZXJpZGllbSA9PT0gJ9mD25XahicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZituQ2LHZidmFINmD25DahtuVJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9iz25XavtuV2LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZg9uV2oYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYqNuI2q/biNmGINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2Kbbldiq25Ug2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb2YPbkNmE25XYsdmD2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KrbhtmG24jar9uI2YZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9im2KfZhNiv2YnZhtmC2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2YPbkNmK2YnZhicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2Kjbh9ix24fZhicsXG4gICAgICAgICAgICBzOiAn2YbbldqG2obblSDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgbTogJ9io2YnYsSDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZidmG24fYqicsXG4gICAgICAgICAgICBoOiAn2KjZidixINiz2KfYptuV2KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2KbbldiqJyxcbiAgICAgICAgICAgIGQ6ICfYqNmJ2LEg2YPbiNmGJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2YPbiNmGJyxcbiAgICAgICAgICAgIE06ICfYqNmJ2LEg2KbYp9mKJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KbYp9mKJyxcbiAgICAgICAgICAgIHk6ICfYqNmJ2LEg2YrZidmEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2YrZidmEJyxcbiAgICAgICAgfSxcblxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oLdmD24jZhtmJfC3Yptin2Yp8Ldq+25XZvtiq25UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdmD24jZhtmJJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2r7bldm+2KrblSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICAvLyBHQi9UIDc0MDgtMTk5NOOAiuaVsOaNruWFg+WSjOS6pOaNouagvOW8j8K35L+h5oGv5Lqk5o2iwrfml6XmnJ/lkozml7bpl7TooajnpLrms5XjgIvkuI5JU08gODYwMToxOTg4562J5pWIXG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWdDbjtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ug-cn.js\n"); @@ -7560,7 +7182,6 @@ eval("//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n/ \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n dd: 'день_дні_днів',\n MM: 'місяць_місяці_місяців',\n yy: 'рік_роки_років',\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвилина' : 'хвилину';\n } else if (key === 'h') {\n return withoutSuffix ? 'година' : 'годину';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n function weekdaysCaseReplace(m, format) {\n var weekdays = {\n nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n '_'\n ),\n accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n '_'\n ),\n genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n '_'\n ),\n },\n nounCase;\n\n if (m === true) {\n return weekdays['nominative']\n .slice(1, 7)\n .concat(weekdays['nominative'].slice(0, 1));\n }\n if (!m) {\n return weekdays['nominative'];\n }\n\n nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n ? 'accusative'\n : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n ? 'genitive'\n : 'nominative';\n return weekdays[nounCase][m.day()];\n }\n function processHoursFunction(str) {\n return function () {\n return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n };\n }\n\n var uk = moment.defineLocale('uk', {\n months: {\n format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n '_'\n ),\n standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n '_'\n ),\n },\n monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n '_'\n ),\n weekdays: weekdaysCaseReplace,\n weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY р.',\n LLL: 'D MMMM YYYY р., HH:mm',\n LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n },\n calendar: {\n sameDay: processHoursFunction('[Сьогодні '),\n nextDay: processHoursFunction('[Завтра '),\n lastDay: processHoursFunction('[Вчора '),\n nextWeek: processHoursFunction('[У] dddd ['),\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return processHoursFunction('[Минулої] dddd [').call(this);\n case 1:\n case 2:\n case 4:\n return processHoursFunction('[Минулого] dddd [').call(this);\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: '%s тому',\n s: 'декілька секунд',\n ss: relativeTimeWithPlural,\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: 'годину',\n hh: relativeTimeWithPlural,\n d: 'день',\n dd: relativeTimeWithPlural,\n M: 'місяць',\n MM: relativeTimeWithPlural,\n y: 'рік',\n yy: relativeTimeWithPlural,\n },\n // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n meridiemParse: /ночі|ранку|дня|вечора/,\n isPM: function (input) {\n return /^(дня|вечора)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночі';\n } else if (hour < 12) {\n return 'ранку';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечора';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return number + '-й';\n case 'D':\n return number + '-го';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWsuanM/YWRhMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVa3JhaW5pYW4gW3VrXVxuLy8hIGF1dGhvciA6IHplbWxhbmluIDogaHR0cHM6Ly9naXRodWIuY29tL3plbWxhbmluXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgIDogZm9ybXNbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLQuNC70LjQvdCwX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvScgOiAn0YXQstC40LvQuNC90YNf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyxcbiAgICAgICAgICAgIGhoOiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsF/Qs9C+0LTQuNC90Lhf0LPQvtC00LjQvScgOiAn0LPQvtC00LjQvdGDX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9JyxcbiAgICAgICAgICAgIGRkOiAn0LTQtdC90Yxf0LTQvdGWX9C00L3RltCyJyxcbiAgICAgICAgICAgIE1NOiAn0LzRltGB0Y/RhtGMX9C80ZbRgdGP0YbRll/QvNGW0YHRj9GG0ZbQsicsXG4gICAgICAgICAgICB5eTogJ9GA0ZbQul/RgNC+0LrQuF/RgNC+0LrRltCyJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfRhdCy0LjQu9C40L3QsCcgOiAn0YXQstC40LvQuNC90YMnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2gnKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQs9C+0LTQuNC90LAnIDogJ9Cz0L7QtNC40L3Rgyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c0Nhc2VSZXBsYWNlKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSB7XG4gICAgICAgICAgICAgICAgbm9taW5hdGl2ZTogJ9C90LXQtNGW0LvRj1/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00LBf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGPX9GB0YPQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYWNjdXNhdGl2ZTogJ9C90LXQtNGW0LvRjl/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00YNf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGOX9GB0YPQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZ2VuaXRpdmU6ICfQvdC10LTRltC70ZZf0L/QvtC90LXQtNGW0LvQutCwX9Cy0ZbQstGC0L7RgNC60LBf0YHQtdGA0LXQtNC4X9GH0LXRgtCy0LXRgNCz0LBf0L/igJnRj9GC0L3QuNGG0ZZf0YHRg9Cx0L7RgtC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBub3VuQ2FzZTtcblxuICAgICAgICBpZiAobSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXlzWydub21pbmF0aXZlJ11cbiAgICAgICAgICAgICAgICAuc2xpY2UoMSwgNylcbiAgICAgICAgICAgICAgICAuY29uY2F0KHdlZWtkYXlzWydub21pbmF0aXZlJ10uc2xpY2UoMCwgMSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXlzWydub21pbmF0aXZlJ107XG4gICAgICAgIH1cblxuICAgICAgICBub3VuQ2FzZSA9IC8oXFxbW9CS0LLQo9GDXVxcXSkgP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgPyAnYWNjdXNhdGl2ZSdcbiAgICAgICAgICAgIDogL1xcWz8oPzrQvNC40L3Rg9C70L7Rl3zQvdCw0YHRgtGD0L/QvdC+0ZcpPyA/XFxdID9kZGRkLy50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgID8gJ2dlbml0aXZlJ1xuICAgICAgICAgICAgOiAnbm9taW5hdGl2ZSc7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5c1tub3VuQ2FzZV1bbS5kYXkoKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKHN0cikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0ciArICfQvicgKyAodGhpcy5ob3VycygpID09PSAxMSA/ICfQsScgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHVrID0gbW9tZW50LmRlZmluZUxvY2FsZSgndWsnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0YHRltGH0L3Rj1/Qu9GO0YLQvtCz0L5f0LHQtdGA0LXQt9C90Y9f0LrQstGW0YLQvdGPX9GC0YDQsNCy0L3Rj1/Rh9C10YDQstC90Y9f0LvQuNC/0L3Rj1/RgdC10YDQv9C90Y9f0LLQtdGA0LXRgdC90Y9f0LbQvtCy0YLQvdGPX9C70LjRgdGC0L7Qv9Cw0LTQsF/Qs9GA0YPQtNC90Y8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6ICfRgdGW0YfQtdC90Yxf0LvRjtGC0LjQuV/QsdC10YDQtdC30LXQvdGMX9C60LLRltGC0LXQvdGMX9GC0YDQsNCy0LXQvdGMX9GH0LXRgNCy0LXQvdGMX9C70LjQv9C10L3RjF/RgdC10YDQv9C10L3RjF/QstC10YDQtdGB0LXQvdGMX9C20L7QstGC0LXQvdGMX9C70LjRgdGC0L7Qv9Cw0LRf0LPRgNGD0LTQtdC90YwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRgdGW0Ydf0LvRjtGCX9Cx0LXRgF/QutCy0ZbRgl/RgtGA0LDQsl/Rh9C10YDQsl/Qu9C40L9f0YHQtdGA0L9f0LLQtdGAX9C20L7QstGCX9C70LjRgdGCX9Cz0YDRg9C0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXNDYXNlUmVwbGFjZSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDRgC4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Ch0YzQvtCz0L7QtNC90ZYgJyksXG4gICAgICAgICAgICBuZXh0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CX0LDQstGC0YDQsCAnKSxcbiAgICAgICAgICAgIGxhc3REYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JLRh9C+0YDQsCAnKSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CjXSBkZGRkIFsnKSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtGXXSBkZGRkIFsnKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0LPQvl0gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDRgtC+0LzRgycsXG4gICAgICAgICAgICBzOiAn0LTQtdC60ZbQu9GM0LrQsCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80ZbRgdGP0YbRjCcsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICfRgNGW0LonLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE0uIEUuOiB0aG9zZSB0d28gYXJlIHZpcnR1YWxseSB1bnVzZWQgYnV0IGEgdXNlciBtaWdodCB3YW50IHRvIGltcGxlbWVudCB0aGVtIGZvciBoaXMvaGVyIHdlYnNpdGUgZm9yIHNvbWUgcmVhc29uXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0L7RgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRlic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90LrRgyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQvtGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC5JztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVrO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/uk.js\n"); @@ -7573,7 +7194,6 @@ eval("//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! autho \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر',\n ],\n days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n var ur = moment.defineLocale('ur', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[آج بوقت] LT',\n nextDay: '[کل بوقت] LT',\n nextWeek: 'dddd [بوقت] LT',\n lastDay: '[گذشتہ روز بوقت] LT',\n lastWeek: '[گذشتہ] dddd [بوقت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s بعد',\n past: '%s قبل',\n s: 'چند سیکنڈ',\n ss: '%d سیکنڈ',\n m: 'ایک منٹ',\n mm: '%d منٹ',\n h: 'ایک گھنٹہ',\n hh: '%d گھنٹے',\n d: 'ایک دن',\n dd: '%d دن',\n M: 'ایک ماہ',\n MM: '%d ماہ',\n y: 'ایک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ur;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXIuanM/NTI5NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVyZHUgW3VyXVxuLy8hIGF1dGhvciA6IFNhd29vZCBBbGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2libmVzYXllZWRcbi8vISBhdXRob3IgOiBaYWNrIDogaHR0cHM6Ly9naXRodWIuY29tL1phY2tWaXNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzZhtmI2LHbjCcsXG4gICAgICAgICAgICAn2YHYsdmI2LHbjCcsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsduM2YQnLFxuICAgICAgICAgICAgJ9mF2KbbjCcsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9im24wnLFxuICAgICAgICAgICAgJ9in2q/Ys9iqJyxcbiAgICAgICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgICAgICfYp9qp2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYp9iq2YjYp9ixJywgJ9m+24zYsScsICfZhdmG2q/ZhCcsICfYqNiv2r4nLCAn2KzZhdi52LHYp9iqJywgJ9is2YXYuduBJywgJ9uB2YHYqtuBJ107XG5cbiAgICB2YXIgdXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYotisINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9qp2YQg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2q/YsNi02KrbgSDYsdmI2LIg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINio2LnYrycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2YLYqNmEJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBzczogJyVkINiz24zaqdmG2ognLFxuICAgICAgICAgICAgbTogJ9in24zaqSDZhdmG2bknLFxuICAgICAgICAgICAgbW06ICclZCDZhdmG2bknLFxuICAgICAgICAgICAgaDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2q/avtmG2bnbkicsXG4gICAgICAgICAgICBkOiAn2KfbjNqpINiv2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDYr9mGJyxcbiAgICAgICAgICAgIE06ICfYp9uM2qkg2YXYp9uBJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9uBJyxcbiAgICAgICAgICAgIHk6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXI7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/ur.js\n"); @@ -7586,7 +7206,6 @@ eval("//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : S \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n '_'\n ),\n weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Bugun soat] LT [da]',\n nextDay: '[Ertaga] LT [da]',\n nextWeek: 'dddd [kuni soat] LT [da]',\n lastDay: '[Kecha soat] LT [da]',\n lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Yaqin %s ichida',\n past: 'Bir necha %s oldin',\n s: 'soniya',\n ss: '%d soniya',\n m: 'bir daqiqa',\n mm: '%d daqiqa',\n h: 'bir soat',\n hh: '%d soat',\n d: 'bir kun',\n dd: '%d kun',\n M: 'bir oy',\n MM: '%d oy',\n y: 'bir yil',\n yy: '%d yil',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uzLatn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qcz8wMTBlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LWxhdG4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXpiZWsgTGF0aW4gW3V6LWxhdG5dXG4vLyEgYXV0aG9yIDogUmFzdWxiZWsgTWlyemF5ZXYgOiBnaXRodWIuY29tL1Jhc3VsYmVlZWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1ekxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1ei1sYXRuJywge1xuICAgICAgICBtb250aHM6ICdZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1lha3NoYW5iYV9EdXNoYW5iYV9TZXNoYW5iYV9DaG9yc2hhbmJhX1BheXNoYW5iYV9KdW1hX1NoYW5iYScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1lha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tCdWd1biBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXJ0YWdhXSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VjaGEgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0V2VlazogXCJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV1cIixcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnWWFxaW4gJXMgaWNoaWRhJyxcbiAgICAgICAgICAgIHBhc3Q6ICdCaXIgbmVjaGEgJXMgb2xkaW4nLFxuICAgICAgICAgICAgczogJ3Nvbml5YScsXG4gICAgICAgICAgICBzczogJyVkIHNvbml5YScsXG4gICAgICAgICAgICBtOiAnYmlyIGRhcWlxYScsXG4gICAgICAgICAgICBtbTogJyVkIGRhcWlxYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNvYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzb2F0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIga3VuJyxcbiAgICAgICAgICAgIGRkOiAnJWQga3VuJyxcbiAgICAgICAgICAgIE06ICdiaXIgb3knLFxuICAgICAgICAgICAgTU06ICclZCBveScsXG4gICAgICAgICAgICB5OiAnYmlyIHlpbCcsXG4gICAgICAgICAgICB5eTogJyVkIHlpbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1ekxhdG47XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/uz-latn.js\n"); @@ -7599,7 +7218,6 @@ eval("//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n// \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uz = moment.defineLocale('uz', {\n months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Бугун соат] LT [да]',\n nextDay: '[Эртага] LT [да]',\n nextWeek: 'dddd [куни соат] LT [да]',\n lastDay: '[Кеча соат] LT [да]',\n lastWeek: '[Утган] dddd [куни соат] LT [да]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Якин %s ичида',\n past: 'Бир неча %s олдин',\n s: 'фурсат',\n ss: '%d фурсат',\n m: 'бир дакика',\n mm: '%d дакика',\n h: 'бир соат',\n hh: '%d соат',\n d: 'бир кун',\n dd: '%d кун',\n M: 'бир ой',\n MM: '%d ой',\n y: 'бир йил',\n yy: '%d йил',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return uz;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXouanM/MmU4YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFV6YmVrIFt1el1cbi8vISBhdXRob3IgOiBTYXJkb3IgTXVtaW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdW1pbm9mZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHV6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgndXonLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQr9C60YjQsNC90LHQsF/QlNGD0YjQsNC90LHQsF/QodC10YjQsNC90LHQsF/Qp9C+0YDRiNCw0L3QsdCwX9Cf0LDQudGI0LDQvdCx0LBf0JbRg9C80LBf0KjQsNC90LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cv0LrRiF/QlNGD0Yhf0KHQtdGIX9Cn0L7RgF/Qn9Cw0Llf0JbRg9C8X9Co0LDQvScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQr9C6X9CU0YNf0KHQtV/Qp9C+X9Cf0LBf0JbRg1/QqNCwJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdEIE1NTU0gWVlZWSwgZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CR0YPQs9GD0L0g0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Ct0YDRgtCw0LPQsF0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRh9CwINGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb0KPRgtCz0LDQvV0gZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9Cv0LrQuNC9ICVzINC40YfQuNC00LAnLFxuICAgICAgICAgICAgcGFzdDogJ9CR0LjRgCDQvdC10YfQsCAlcyDQvtC70LTQuNC9JyxcbiAgICAgICAgICAgIHM6ICfRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgc3M6ICclZCDRhNGD0YDRgdCw0YInLFxuICAgICAgICAgICAgbTogJ9Cx0LjRgCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgbW06ICclZCDQtNCw0LrQuNC60LAnLFxuICAgICAgICAgICAgaDogJ9Cx0LjRgCDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfQsdC40YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQsdC40YAg0L7QuScsXG4gICAgICAgICAgICBNTTogJyVkINC+0LknLFxuICAgICAgICAgICAgeTogJ9Cx0LjRgCDQudC40LsnLFxuICAgICAgICAgICAgeXk6ICclZCDQudC40LsnLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXo7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/uz.js\n"); @@ -7612,7 +7230,6 @@ eval("//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var vi = moment.defineLocale('vi', {\n months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n '_'\n ),\n monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n '_'\n ),\n weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /sa|ch/i,\n isPM: function (input) {\n return /^ch$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [năm] YYYY',\n LLL: 'D MMMM [năm] YYYY HH:mm',\n LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n l: 'DD/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần trước lúc] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s tới',\n past: '%s trước',\n s: 'vài giây',\n ss: '%d giây',\n m: 'một phút',\n mm: '%d phút',\n h: 'một giờ',\n hh: '%d giờ',\n d: 'một ngày',\n dd: '%d ngày',\n w: 'một tuần',\n ww: '%d tuần',\n M: 'một tháng',\n MM: '%d tháng',\n y: 'một năm',\n yy: '%d năm',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return vi;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanM/MjkyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVmlldG5hbWVzZSBbdmldXG4vLyEgYXV0aG9yIDogQmFuZyBOZ3V5ZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmFuZ25rXG4vLyEgYXV0aG9yIDogQ2hpZW4gS2lyYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaGllbmtpcmFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB2aSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3ZpJywge1xuICAgICAgICBtb250aHM6ICd0aMOhbmcgMV90aMOhbmcgMl90aMOhbmcgM190aMOhbmcgNF90aMOhbmcgNV90aMOhbmcgNl90aMOhbmcgN190aMOhbmcgOF90aMOhbmcgOV90aMOhbmcgMTBfdGjDoW5nIDExX3Row6FuZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdjaOG7pyBuaOG6rXRfdGjhu6kgaGFpX3Ro4bupIGJhX3Ro4bupIHTGsF90aOG7qSBuxINtX3Ro4bupIHPDoXVfdGjhu6kgYuG6o3knLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvc2F8Y2gvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15jaCQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdzYScgOiAnU0EnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdjaCcgOiAnQ0gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsOiAnREQvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIw7RtIG5heSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW05nw6B5IG1haSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3R14bqnbiB04bubaSBsw7pjXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0jDtG0gcXVhIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbdHXhuqduIHRyxrDhu5tjIGzDumNdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgdOG7m2knLFxuICAgICAgICAgICAgcGFzdDogJyVzIHRyxrDhu5tjJyxcbiAgICAgICAgICAgIHM6ICd2w6BpIGdpw6J5JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZ2nDonknLFxuICAgICAgICAgICAgbTogJ23hu5l0IHBow7p0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgcGjDunQnLFxuICAgICAgICAgICAgaDogJ23hu5l0IGdp4budJyxcbiAgICAgICAgICAgIGhoOiAnJWQgZ2nhu50nLFxuICAgICAgICAgICAgZDogJ23hu5l0IG5nw6B5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgbmfDoHknLFxuICAgICAgICAgICAgdzogJ23hu5l0IHR14bqnbicsXG4gICAgICAgICAgICB3dzogJyVkIHR14bqnbicsXG4gICAgICAgICAgICBNOiAnbeG7mXQgdGjDoW5nJyxcbiAgICAgICAgICAgIE1NOiAnJWQgdGjDoW5nJyxcbiAgICAgICAgICAgIHk6ICdt4buZdCBuxINtJyxcbiAgICAgICAgICAgIHl5OiAnJWQgbsSDbScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB2aTtcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/vi.js\n"); @@ -7625,7 +7242,6 @@ eval("//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! auth \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n '_'\n ),\n monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n '_'\n ),\n weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[T~ódá~ý át] LT',\n nextDay: '[T~ómó~rró~w át] LT',\n nextWeek: 'dddd [át] LT',\n lastDay: '[Ý~ést~érdá~ý át] LT',\n lastWeek: '[L~ást] dddd [át] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'í~ñ %s',\n past: '%s á~gó',\n s: 'á ~féw ~sécó~ñds',\n ss: '%d s~écóñ~ds',\n m: 'á ~míñ~úté',\n mm: '%d m~íñú~tés',\n h: 'á~ñ hó~úr',\n hh: '%d h~óúrs',\n d: 'á ~dáý',\n dd: '%d d~áýs',\n M: 'á ~móñ~th',\n MM: '%d m~óñt~hs',\n y: 'á ~ýéár',\n yy: '%d ý~éárs',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return xPseudo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveC1wc2V1ZG8uanM/ZmQ3ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQc2V1ZG8gW3gtcHNldWRvXVxuLy8hIGF1dGhvciA6IEFuZHJldyBIb29kIDogaHR0cHM6Ly9naXRodWIuY29tL2FuZHJld2hvb2QxMjVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB4UHNldWRvID0gbW9tZW50LmRlZmluZUxvY2FsZSgneC1wc2V1ZG8nLCB7XG4gICAgICAgIG1vbnRoczogJ0p+w6HDscO6w6F+csO9X0Z+w6licsO6fsOhcsO9X35Nw6FyY35oX8OBcH5yw61sX35Nw6HDvV9+SsO6w7HDqX5fSsO6bH7DvV/DgcO6fmfDunN0fl9Tw6lwfnTDqW1ifsOpcl/Dk35jdMOzYn7DqXJfw5F+w7N2w6ltfmLDqXJffkTDqWPDqX5tYsOpcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKfsOhw7FffkbDqWJffk3DoXJffsOBcHJffk3DocO9X35Kw7rDsV9+SsO6bF9+w4HDumdfflPDqXBffsOTY3RffsORw7N2X35Ew6ljJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ1N+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTfsO6w7Fffk3Ds8OxX35Uw7rDqV9+V8OpZF9+VGjDul9+RnLDrV9+U8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTfsO6X03Ds35fVMO6X35Xw6lfVH5oX0Zyfl9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUfsOzZMOhfsO9IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUfsOzbcOzfnJyw7N+dyDDoXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8OdfsOpc3R+w6lyZMOhfsO9IMOhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTH7DoXN0XSBkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnw61+w7EgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOhfmfDsycsXG4gICAgICAgICAgICBzOiAnw6EgfmbDqXcgfnPDqWPDs37DsWRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc37DqWPDs8OxfmRzJyxcbiAgICAgICAgICAgIG06ICfDoSB+bcOtw7F+w7p0w6knLFxuICAgICAgICAgICAgbW06ICclZCBtfsOtw7HDun50w6lzJyxcbiAgICAgICAgICAgIGg6ICfDoX7DsSBow7N+w7pyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaH7Ds8O6cnMnLFxuICAgICAgICAgICAgZDogJ8OhIH5kw6HDvScsXG4gICAgICAgICAgICBkZDogJyVkIGR+w6HDvXMnLFxuICAgICAgICAgICAgTTogJ8OhIH5tw7PDsX50aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1+w7PDsXR+aHMnLFxuICAgICAgICAgICAgeTogJ8OhIH7DvcOpw6FyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw71+w6nDoXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHhQc2V1ZG87XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/x-pseudo.js\n"); @@ -7638,7 +7254,6 @@ eval("//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! au \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 10:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var yo = moment.defineLocale('yo', {\n months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n '_'\n ),\n monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Ònì ni] LT',\n nextDay: '[Ọ̀la ni] LT',\n nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n lastDay: '[Àna ni] LT',\n lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ní %s',\n past: '%s kọjá',\n s: 'ìsẹjú aayá die',\n ss: 'aayá %d',\n m: 'ìsẹjú kan',\n mm: 'ìsẹjú %d',\n h: 'wákati kan',\n hh: 'wákati %d',\n d: 'ọjọ́ kan',\n dd: 'ọjọ́ %d',\n M: 'osù kan',\n MM: 'osù %d',\n y: 'ọdún kan',\n yy: 'ọdún %d',\n },\n dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n ordinal: 'ọjọ́ %d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return yo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanM/N2YzMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsMENBQTBDLElBQUk7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUveW8uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogWW9ydWJhIE5pZ2VyaWEgW3lvXVxuLy8hIGF1dGhvciA6IEF0b2xhZ2JlIEFiaXNveWUgOiBodHRwczovL2dpdGh1Yi5jb20vYW5kZWxhLWJhdG9sYWdiZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHlvID0gbW9tZW50LmRlZmluZUxvY2FsZSgneW8nLCB7XG4gICAgICAgIG1vbnRoczogJ1PhurnMgXLhurnMgV9FzIByZcyAbGXMgF/hurhy4bq5zIBuYcyAX0nMgGdiZcyBX0XMgGJpYmlfT8yAa3XMgGR1X0Fn4bq5bW9fT8yAZ3XMgW5fT3dld2Vf4buMzIB3YcyAcmHMgF9CZcyBbHXMgV/hu4zMgHDhurnMgMyAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ1PhurnMgXJfRcyAcmxf4bq4cm5fScyAZ2JfRcyAYmlfT8yAa3XMgF9BZ+G6uV9PzIBndcyBX093ZV/hu4zMgHdhzIBfQmXMgWxf4buMzIBw4bq5zIDMgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdBzIBpzIBrdcyBX0FqZcyBX0nMgHPhurnMgWd1bl/hu4xq4buNzIFydcyBX+G7jGrhu43MgWLhu41f4bq4dGnMgF9BzIBiYcyBbeG6ucyBdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQcyAacyAX0FqX0nMgHNf4buMcl/hu4xiX+G6uHRfQcyAYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbT8yAbmnMgCBuaV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vhu4zMgGxhIG5pXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogXCJkZGRkIFvhu4xz4bq5zIAgdG/MgW4nYuG7jV0gW25pXSBMVFwiLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBzIBuYSBuaV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvhu4xz4bq5zIAgdG/MgWzhu43MgV0gW25pXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ25pzIEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGvhu41qYcyBJyxcbiAgICAgICAgICAgIHM6ICdpzIBz4bq5anXMgSBhYXlhzIEgZGllJyxcbiAgICAgICAgICAgIHNzOiAnYWF5YcyBICVkJyxcbiAgICAgICAgICAgIG06ICdpzIBz4bq5anXMgSBrYW4nLFxuICAgICAgICAgICAgbW06ICdpzIBz4bq5anXMgSAlZCcsXG4gICAgICAgICAgICBoOiAnd2HMgWthdGkga2FuJyxcbiAgICAgICAgICAgIGhoOiAnd2HMgWthdGkgJWQnLFxuICAgICAgICAgICAgZDogJ+G7jWrhu43MgSBrYW4nLFxuICAgICAgICAgICAgZGQ6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICAgICAgTTogJ29zdcyAIGthbicsXG4gICAgICAgICAgICBNTTogJ29zdcyAICVkJyxcbiAgICAgICAgICAgIHk6ICfhu41kdcyBbiBrYW4nLFxuICAgICAgICAgICAgeXk6ICfhu41kdcyBbiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC/hu41q4buNzIFcXHNcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICfhu41q4buNzIEgJWQnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4geW87XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/yo.js\n"); @@ -7651,7 +7266,6 @@ eval("//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhCn = moment.defineLocale('zh-cn', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日Ah点mm分',\n LLLL: 'YYYY年M月D日ddddAh点mm分',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[下]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n lastDay: '[昨天]LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[上]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s后',\n past: '%s前',\n s: '几秒',\n ss: '%d 秒',\n m: '1 分钟',\n mm: '%d 分钟',\n h: '1 小时',\n hh: '%d 小时',\n d: '1 天',\n dd: '%d 天',\n w: '1 周',\n ww: '%d 周',\n M: '1 个月',\n MM: '%d 个月',\n y: '1 年',\n yy: '%d 年',\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return zhCn;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanM/NWMzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoQ2hpbmEpIFt6aC1jbl1cbi8vISBhdXRob3IgOiBzdXVwaWMgOiBodHRwczovL2dpdGh1Yi5jb20vc3V1cGljXG4vLyEgYXV0aG9yIDogWmVubyBaZW5nIDogaHR0cHM6Ly9naXRodWIuY29tL3plbm96ZW5nXG4vLyEgYXV0aG9yIDogdXUxMDkgOiBodHRwczovL2dpdGh1Yi5jb20vdXUxMDlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aENuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtY24nLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+WRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpUFo54K5bW3liIYnLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGRBaOeCuW1t5YiGJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL00vRCcsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICfkuK3ljYgnXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXUxUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+S4i11kZGRMVCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5pysXWRkZExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5LiKXWRkZExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzlkagpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+WRqCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WQjicsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+WHoOenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkp8nLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkp8nLFxuICAgICAgICAgICAgaDogJzEg5bCP5pe2JyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pe2JyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICB3OiAnMSDlkagnLFxuICAgICAgICAgICAgd3c6ICclZCDlkagnLFxuICAgICAgICAgICAgTTogJzEg5Liq5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5Liq5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIC8vIEdCL1QgNzQwOC0xOTk044CK5pWw5o2u5YWD5ZKM5Lqk5o2i5qC85byPwrfkv6Hmga/kuqTmjaLCt+aXpeacn+WSjOaXtumXtOihqOekuuazleOAi+S4jklTTyA4NjAxOjE5ODjnrYnmlYhcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aENuO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-cn.js\n"); @@ -7664,7 +7278,6 @@ eval("//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 13:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhHk = moment.defineLocale('zh-hk', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1200) {\n return '上午';\n } else if (hm === 1200) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: '[下]ddddLT',\n lastDay: '[昨天]LT',\n lastWeek: '[上]ddddLT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhHk;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanM/NDlhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsQ0FBQztBQUNELEdBQUcsS0FDb0MsV0FBVyxtQkFBTyxDQUFDLGtEQUFXO0FBQ3JFLEdBQUcsQ0FDc0I7QUFDekIsQ0FBQywyQkFBMkI7O0FBRTVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSzs7QUFFTDs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtaGsuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoSG9uZyBLb25nKSBbemgtaGtdXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogS29uc3RhbnRpbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9za2ZkXG4vLyEgYXV0aG9yIDogQW50aG9ueSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRob255bGF1XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhIayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWhrJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPT09IDEyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGRMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoSGs7XG5cbn0pKSk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-hk.js\n"); @@ -7677,7 +7290,6 @@ eval("//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-h \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 12:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhMo = moment.defineLocale('zh-mo', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'D/M/YYYY',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s內',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhMo;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtbW8uanM/M2E2YyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLENBQUM7QUFDRCxHQUFHLEtBQ29DLFdBQVcsbUJBQU8sQ0FBQyxrREFBVztBQUNyRSxHQUFHLENBQ3NCO0FBQ3pCLENBQUMsMkJBQTJCOztBQUU1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUEsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKE1hY2F1KSBbemgtbW9dXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogVGFuIFl1YW5ob25nIDogaHR0cHM6Ly9naXRodWIuY29tL2xlMHRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoTW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1tbycsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdEL00vWVlZWScsXG4gICAgICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIvljYgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb5pio5aSpXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+WFpycsXG4gICAgICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB6aE1vO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-mo.js\n"); @@ -7690,7 +7302,6 @@ eval("//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n \*********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__ */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval("//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n 0\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhTw = moment.defineLocale('zh-tw', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhTw;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanM/OTBlYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsR0FBRyxLQUNvQyxXQUFXLG1CQUFPLENBQUMsa0RBQVc7QUFDckUsR0FBRyxDQUNzQjtBQUN6QixDQUFDLDJCQUEyQjs7QUFFNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxvQ0FBb0MsSUFBSTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC10dy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChUYWl3YW4pIFt6aC10d11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB6aFR3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnemgtdHcnLCB7XG4gICAgICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgICAgICBsOiAnWVlZWS9NL0QnLFxuICAgICAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICflub7np5InLFxuICAgICAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gemhUdztcblxufSkpKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/moment/locale/zh-tw.js\n"); @@ -7703,9 +7314,6 @@ eval("//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\ \***************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, top-level-this-exports, module.loaded, module.id, __webpack_require__.nmd, __webpack_require__, __webpack_require__.* */ -/*! CommonJS bailout: this is used directly at 11:2-6 */ -/*! CommonJS bailout: module.exports is used directly at 2087:12-26 */ -/*! CommonJS bailout: module.exports is used directly at 8:67-81 */ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("/* module decorator */ module = __webpack_require__.nmd(module);\n//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n true ? module.exports = factory() :\n 0\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key;\n for (i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i;\n for (i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n matched,\n p1,\n p2,\n p3,\n p4\n ) {\n return p1 || p2 || p3 || p4;\n })\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n '_'\n ),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n input,\n week,\n config,\n token\n ) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n \"object\" !== 'undefined' &&\n module &&\n module.exports\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = undefined;\n __webpack_require__(\"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\")(\"./\" + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n input,\n array,\n config,\n token\n ) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n });\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n input,\n week,\n config,\n token\n ) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanM/YzFkZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0QsSUFBSSxLQUE0RDtBQUNoRSxJQUFJLENBQ3lCO0FBQzdCLENBQUMscUJBQXFCOztBQUV0Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsZ0JBQWdCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixTQUFTO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLDZCQUE2QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixzQkFBc0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQyxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFJO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVIQUF1SCxJQUFJLHdCQUF3QixJQUFJLHVEQUF1RCxJQUFJO0FBQ2xOLHFFQUFxRSxJQUFJO0FBQ3pFLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsWUFBWTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0Q0FBNEMsSUFBSTs7QUFFaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixtQ0FBbUM7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsd0JBQXdCO0FBQy9DO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixFQUFFO0FBQ3ZCLHFCQUFxQixFQUFFO0FBQ3ZCLDBCQUEwQixFQUFFO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixJQUFJO0FBQzVCLHdCQUF3QixJQUFJO0FBQzVCLDZCQUE2QixJQUFJO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUM7QUFDQTtBQUNBLDJCQUEyQixNQUFNLHdFQUF3RSxNQUFNLG1CQUFtQixNQUFNLHFCQUFxQixNQUFNLEVBQUUsSUFBSTtBQUN6Szs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEM7QUFDOUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixpQkFBaUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFFBQVE7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFFBQVE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLE9BQU87QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtB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QUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwrQkFBK0I7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUJBQW1CLG1CQUFtQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0NBQWtDLGtCQUFrQjtBQUNwRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG9CQUFvQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMkdBQTJHO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsdUJBQXVCO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsdUJBQXVCO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx1QkFBdUI7QUFDMUQ7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsdUJBQXVCO0FBQzFEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCO0FBQ3hCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxPQUFPO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLE9BQU87QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxPQUFPO0FBQzNDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0MsT0FBTztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsT0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLG9DQUFvQyxJQUFJO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgaWYgKG0uX2lzVmFsaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pLFxuICAgICAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyh1bml0LCBzaG9ydGhhbmQpIHtcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IHVuaXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKClcbiAgICAgICAgICAgID8gbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKClcbiAgICAgICAgICAgIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHVuaXQgPT09ICdGdWxsWWVhcicgJiZcbiAgICAgICAgICAgICAgICBpc0xlYXBZZWFyKG1vbS55ZWFyKCkpICYmXG4gICAgICAgICAgICAgICAgbW9tLm1vbnRoKCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBtb20uZGF0ZSgpID09PSAyOVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9tLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID0gL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csIGZ1bmN0aW9uIChcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZCxcbiAgICAgICAgICAgICAgICAgICAgcDEsXG4gICAgICAgICAgICAgICAgICAgIHAyLFxuICAgICAgICAgICAgICAgICAgICBwMyxcbiAgICAgICAgICAgICAgICAgICAgcDRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21vbnRoJywgOCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID0gJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsndycsICd3dycsICdXJywgJ1dXJ10sIGZ1bmN0aW9uIChcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHdlZWssXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vlayhtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXknLCAnZCcpO1xuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrZGF5JywgJ0UnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla2RheScsIDExKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPSAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQ7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYTtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZy5fZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSwgZnVuY3Rpb24gKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgYXJyYXksXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgdG9rZW5cbiAgICApIHtcbiAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcblxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla1llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLCBmdW5jdGlvbiAoXG4gICAgICAgIGlucHV0LFxuICAgICAgICB3ZWVrLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHRva2VuXG4gICAgKSB7XG4gICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yOS4xJztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/moment/moment.js\n"); @@ -7718,7 +7326,6 @@ eval("/* module decorator */ module = __webpack_require__.nmd(module);\n//! mome \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 24:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var makeIterator = __webpack_require__(/*! ../function/makeIterator_ */ \"./node_modules/mout/function/makeIterator_.js\");\r\n\r\n /**\r\n * Array filter\r\n */\r\n function filter(arr, callback, thisObj) {\r\n callback = makeIterator(callback, thisObj);\r\n var results = [];\r\n if (arr == null) {\r\n return results;\r\n }\r\n\r\n var i = -1, len = arr.length, value;\r\n while (++i < len) {\r\n value = arr[i];\r\n if (callback(value, i, arr)) {\r\n results.push(value);\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n module.exports = filter;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvYXJyYXkvZmlsdGVyLmpzP2E2NzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUJBQW1CLG1CQUFPLENBQUMsZ0ZBQTJCOztBQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L2FycmF5L2ZpbHRlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBtYWtlSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9mdW5jdGlvbi9tYWtlSXRlcmF0b3JfJyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcnJheSBmaWx0ZXJcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZmlsdGVyKGFyciwgY2FsbGJhY2ssIHRoaXNPYmopIHtcclxuICAgICAgICBjYWxsYmFjayA9IG1ha2VJdGVyYXRvcihjYWxsYmFjaywgdGhpc09iaik7XHJcbiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcclxuICAgICAgICBpZiAoYXJyID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaSA9IC0xLCBsZW4gPSBhcnIubGVuZ3RoLCB2YWx1ZTtcclxuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gYXJyW2ldO1xyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sodmFsdWUsIGksIGFycikpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gZmlsdGVyO1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/array/filter.js\n"); @@ -7731,7 +7338,6 @@ eval("var makeIterator = __webpack_require__(/*! ../function/makeIterator_ */ \" \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 21:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Array forEach\r\n */\r\n function forEach(arr, callback, thisObj) {\r\n if (arr == null) {\r\n return;\r\n }\r\n var i = -1,\r\n len = arr.length;\r\n while (++i < len) {\r\n // we iterate over sparse items since there is no way to make it\r\n // work properly on IE 7-8. see #64\r\n if ( callback.call(thisObj, arr[i], i, arr) === false ) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n module.exports = forEach;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvYXJyYXkvZm9yRWFjaC5qcz8yYWJjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L2FycmF5L2ZvckVhY2guanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFycmF5IGZvckVhY2hcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9yRWFjaChhcnIsIGNhbGxiYWNrLCB0aGlzT2JqKSB7XHJcbiAgICAgICAgaWYgKGFyciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGkgPSAtMSxcclxuICAgICAgICAgICAgbGVuID0gYXJyLmxlbmd0aDtcclxuICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGl0ZXJhdGUgb3ZlciBzcGFyc2UgaXRlbXMgc2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIG1ha2UgaXRcclxuICAgICAgICAgICAgLy8gd29yayBwcm9wZXJseSBvbiBJRSA3LTguIHNlZSAjNjRcclxuICAgICAgICAgICAgaWYgKCBjYWxsYmFjay5jYWxsKHRoaXNPYmosIGFycltpXSwgaSwgYXJyKSA9PT0gZmFsc2UgKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZvckVhY2g7XHJcblxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/array/forEach.js\n"); @@ -7744,7 +7350,6 @@ eval("\r\n\r\n /**\r\n * Array forEach\r\n */\r\n function forEach \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 33:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Create slice of source array or array-like object\r\n */\r\n function slice(arr, start, end){\r\n var len = arr.length;\r\n\r\n if (start == null) {\r\n start = 0;\r\n } else if (start < 0) {\r\n start = Math.max(len + start, 0);\r\n } else {\r\n start = Math.min(start, len);\r\n }\r\n\r\n if (end == null) {\r\n end = len;\r\n } else if (end < 0) {\r\n end = Math.max(len + end, 0);\r\n } else {\r\n end = Math.min(end, len);\r\n }\r\n\r\n var result = [];\r\n while (start < end) {\r\n result.push(arr[start++]);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n module.exports = slice;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvYXJyYXkvc2xpY2UuanM/NmVhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvYXJyYXkvc2xpY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBzbGljZSBvZiBzb3VyY2UgYXJyYXkgb3IgYXJyYXktbGlrZSBvYmplY3RcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2xpY2UoYXJyLCBzdGFydCwgZW5kKXtcclxuICAgICAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgc3RhcnQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgobGVuICsgc3RhcnQsIDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gTWF0aC5taW4oc3RhcnQsIGxlbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5kID09IG51bGwpIHtcclxuICAgICAgICAgICAgZW5kID0gbGVuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkge1xyXG4gICAgICAgICAgICBlbmQgPSBNYXRoLm1heChsZW4gKyBlbmQsIDApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVuZCA9IE1hdGgubWluKGVuZCwgbGVuKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcclxuICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goYXJyW3N0YXJ0KytdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzbGljZTtcclxuXHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/array/slice.js\n"); @@ -7757,7 +7362,6 @@ eval("\r\n\r\n /**\r\n * Create slice of source array or array-like objec \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 23:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var filter = __webpack_require__(/*! ./filter */ \"./node_modules/mout/array/filter.js\");\r\n\r\n /**\r\n * @return {array} Array of unique items\r\n */\r\n function unique(arr, compare){\r\n compare = compare || isEqual;\r\n return filter(arr, function(item, i, arr){\r\n var n = arr.length;\r\n while (++i < n) {\r\n if ( compare(item, arr[i]) ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n function isEqual(a, b){\r\n return a === b;\r\n }\r\n\r\n module.exports = unique;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvYXJyYXkvdW5pcXVlLmpzPzAwZDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLHFEQUFVOztBQUUvQjtBQUNBLGdCQUFnQixNQUFNO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvYXJyYXkvdW5pcXVlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGZpbHRlciA9IHJlcXVpcmUoJy4vZmlsdGVyJyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcmV0dXJuIHthcnJheX0gQXJyYXkgb2YgdW5pcXVlIGl0ZW1zXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHVuaXF1ZShhcnIsIGNvbXBhcmUpe1xyXG4gICAgICAgIGNvbXBhcmUgPSBjb21wYXJlIHx8IGlzRXF1YWw7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcihhcnIsIGZ1bmN0aW9uKGl0ZW0sIGksIGFycil7XHJcbiAgICAgICAgICAgIHZhciBuID0gYXJyLmxlbmd0aDtcclxuICAgICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcclxuICAgICAgICAgICAgICAgIGlmICggY29tcGFyZShpdGVtLCBhcnJbaV0pICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpe1xyXG4gICAgICAgIHJldHVybiBhID09PSBiO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gdW5pcXVlO1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/array/unique.js\n"); @@ -7770,7 +7374,6 @@ eval("var filter = __webpack_require__(/*! ./filter */ \"./node_modules/mout/arr \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 17:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var slice = __webpack_require__(/*! ../array/slice */ \"./node_modules/mout/array/slice.js\");\r\n\r\n /**\r\n * Return a function that will execute in the given context, optionally adding any additional supplied parameters to the beginning of the arguments collection.\r\n * @param {Function} fn Function.\r\n * @param {object} context Execution context.\r\n * @param {rest} args Arguments (0...n arguments).\r\n * @return {Function} Wrapped Function.\r\n */\r\n function bind(fn, context, args){\r\n var argsArr = slice(arguments, 2); //curried args\r\n return function(){\r\n return fn.apply(context, argsArr.concat(slice(arguments)));\r\n };\r\n }\r\n\r\n module.exports = bind;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvZnVuY3Rpb24vYmluZC5qcz9mMDI4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksbUJBQU8sQ0FBQywwREFBZ0I7O0FBRXBDO0FBQ0E7QUFDQSxlQUFlLFNBQVM7QUFDeEIsZUFBZSxPQUFPO0FBQ3RCLGVBQWUsS0FBSztBQUNwQixnQkFBZ0IsU0FBUztBQUN6QjtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvZnVuY3Rpb24vYmluZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBzbGljZSA9IHJlcXVpcmUoJy4uL2FycmF5L3NsaWNlJyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHdpbGwgZXhlY3V0ZSBpbiB0aGUgZ2l2ZW4gY29udGV4dCwgb3B0aW9uYWxseSBhZGRpbmcgYW55IGFkZGl0aW9uYWwgc3VwcGxpZWQgcGFyYW1ldGVycyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcmd1bWVudHMgY29sbGVjdGlvbi5cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICBGdW5jdGlvbi5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0ICAgRXhlY3V0aW9uIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0ge3Jlc3R9IGFyZ3MgICAgQXJndW1lbnRzICgwLi4ubiBhcmd1bWVudHMpLlxyXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259IFdyYXBwZWQgRnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGJpbmQoZm4sIGNvbnRleHQsIGFyZ3Mpe1xyXG4gICAgICAgIHZhciBhcmdzQXJyID0gc2xpY2UoYXJndW1lbnRzLCAyKTsgLy9jdXJyaWVkIGFyZ3NcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KGNvbnRleHQsIGFyZ3NBcnIuY29uY2F0KHNsaWNlKGFyZ3VtZW50cykpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gYmluZDtcclxuXHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/function/bind.js\n"); @@ -7783,7 +7386,6 @@ eval("var slice = __webpack_require__(/*! ../array/slice */ \"./node_modules/mou \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 10:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Returns the first argument provided to it.\r\n */\r\n function identity(val){\r\n return val;\r\n }\r\n\r\n module.exports = identity;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvZnVuY3Rpb24vaWRlbnRpdHkuanM/NDkzOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L2Z1bmN0aW9uL2lkZW50aXR5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlZCB0byBpdC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gaWRlbnRpdHkodmFsKXtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XHJcblxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/function/identity.js\n"); @@ -7796,7 +7398,6 @@ eval("\r\n\r\n /**\r\n * Returns the first argument provided to it.\r\n \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 32:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var identity = __webpack_require__(/*! ./identity */ \"./node_modules/mout/function/identity.js\");\nvar prop = __webpack_require__(/*! ./prop */ \"./node_modules/mout/function/prop.js\");\nvar deepMatches = __webpack_require__(/*! ../object/deepMatches */ \"./node_modules/mout/object/deepMatches.js\");\r\n\r\n /**\r\n * Converts argument into a valid iterator.\r\n * Used internally on most array/object/collection methods that receives a\r\n * callback/iterator providing a shortcut syntax.\r\n */\r\n function makeIterator(src, thisObj){\r\n if (src == null) {\r\n return identity;\r\n }\r\n switch(typeof src) {\r\n case 'function':\r\n // function is the first to improve perf (most common case)\r\n // also avoid using `Function#call` if not needed, which boosts\r\n // perf a lot in some cases\r\n return (typeof thisObj !== 'undefined')? function(val, i, arr){\r\n return src.call(thisObj, val, i, arr);\r\n } : src;\r\n case 'object':\r\n return function(val){\r\n return deepMatches(val, src);\r\n };\r\n case 'string':\r\n case 'number':\r\n return prop(src);\r\n }\r\n }\r\n\r\n module.exports = makeIterator;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvZnVuY3Rpb24vbWFrZUl0ZXJhdG9yXy5qcz82Yzc3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyw0REFBWTtBQUNuQyxXQUFXLG1CQUFPLENBQUMsb0RBQVE7QUFDM0Isa0JBQWtCLG1CQUFPLENBQUMsd0VBQXVCOztBQUVqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9mdW5jdGlvbi9tYWtlSXRlcmF0b3JfLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xudmFyIHByb3AgPSByZXF1aXJlKCcuL3Byb3AnKTtcbnZhciBkZWVwTWF0Y2hlcyA9IHJlcXVpcmUoJy4uL29iamVjdC9kZWVwTWF0Y2hlcycpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgYXJndW1lbnQgaW50byBhIHZhbGlkIGl0ZXJhdG9yLlxyXG4gICAgICogVXNlZCBpbnRlcm5hbGx5IG9uIG1vc3QgYXJyYXkvb2JqZWN0L2NvbGxlY3Rpb24gbWV0aG9kcyB0aGF0IHJlY2VpdmVzIGFcclxuICAgICAqIGNhbGxiYWNrL2l0ZXJhdG9yIHByb3ZpZGluZyBhIHNob3J0Y3V0IHN5bnRheC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gbWFrZUl0ZXJhdG9yKHNyYywgdGhpc09iail7XHJcbiAgICAgICAgaWYgKHNyYyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpZGVudGl0eTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3dpdGNoKHR5cGVvZiBzcmMpIHtcclxuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxyXG4gICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gaXMgdGhlIGZpcnN0IHRvIGltcHJvdmUgcGVyZiAobW9zdCBjb21tb24gY2FzZSlcclxuICAgICAgICAgICAgICAgIC8vIGFsc28gYXZvaWQgdXNpbmcgYEZ1bmN0aW9uI2NhbGxgIGlmIG5vdCBuZWVkZWQsIHdoaWNoIGJvb3N0c1xyXG4gICAgICAgICAgICAgICAgLy8gcGVyZiBhIGxvdCBpbiBzb21lIGNhc2VzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHR5cGVvZiB0aGlzT2JqICE9PSAndW5kZWZpbmVkJyk/IGZ1bmN0aW9uKHZhbCwgaSwgYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjLmNhbGwodGhpc09iaiwgdmFsLCBpLCBhcnIpO1xyXG4gICAgICAgICAgICAgICAgfSA6IHNyYztcclxuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2YWwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWVwTWF0Y2hlcyh2YWwsIHNyYyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3Aoc3JjKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBtYWtlSXRlcmF0b3I7XHJcblxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/function/makeIterator_.js\n"); @@ -7809,7 +7410,6 @@ eval("var identity = __webpack_require__(/*! ./identity */ \"./node_modules/mout \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 12:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Returns a function that gets a property of the passed object\r\n */\r\n function prop(name){\r\n return function(obj){\r\n return obj[name];\r\n };\r\n }\r\n\r\n module.exports = prop;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvZnVuY3Rpb24vcHJvcC5qcz84YTkwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L2Z1bmN0aW9uL3Byb3AuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGdldHMgYSBwcm9wZXJ0eSBvZiB0aGUgcGFzc2VkIG9iamVjdFxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBwcm9wKG5hbWUpe1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmope1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqW25hbWVdO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwcm9wO1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/function/prop.js\n"); @@ -7822,7 +7422,6 @@ eval("\r\n\r\n /**\r\n * Returns a function that gets a property of the p \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 7:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var isKind = __webpack_require__(/*! ./isKind */ \"./node_modules/mout/lang/isKind.js\");\r\n /**\r\n */\r\n var isArray = Array.isArray || function (val) {\r\n return isKind(val, 'Array');\r\n };\r\n module.exports = isArray;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvbGFuZy9pc0FycmF5LmpzPzEzMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLG9EQUFVO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L2xhbmcvaXNBcnJheS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc0tpbmQgPSByZXF1aXJlKCcuL2lzS2luZCcpO1xyXG4gICAgLyoqXHJcbiAgICAgKi9cclxuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAodmFsKSB7XHJcbiAgICAgICAgcmV0dXJuIGlzS2luZCh2YWwsICdBcnJheScpO1xyXG4gICAgfTtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/lang/isArray.js\n"); @@ -7835,7 +7434,6 @@ eval("var isKind = __webpack_require__(/*! ./isKind */ \"./node_modules/mout/lan \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 8:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var kindOf = __webpack_require__(/*! ./kindOf */ \"./node_modules/mout/lang/kindOf.js\");\r\n /**\r\n * Check if value is from a specific \"kind\".\r\n */\r\n function isKind(val, kind){\r\n return kindOf(val) === kind;\r\n }\r\n module.exports = isKind;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvbGFuZy9pc0tpbmQuanM/MmQ5YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsb0RBQVU7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9sYW5nL2lzS2luZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBraW5kT2YgPSByZXF1aXJlKCcuL2tpbmRPZicpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBpZiB2YWx1ZSBpcyBmcm9tIGEgc3BlY2lmaWMgXCJraW5kXCIuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGlzS2luZCh2YWwsIGtpbmQpe1xyXG4gICAgICAgIHJldHVybiBraW5kT2YodmFsKSA9PT0ga2luZDtcclxuICAgIH1cclxuICAgIG1vZHVsZS5leHBvcnRzID0gaXNLaW5kO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/lang/isKind.js\n"); @@ -7848,7 +7446,6 @@ eval("var kindOf = __webpack_require__(/*! ./kindOf */ \"./node_modules/mout/lan \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 8:4-18 */ /***/ ((module) => { eval("\r\n /**\r\n * Gets the \"kind\" of value. (e.g. \"String\", \"Number\", etc)\r\n */\r\n function kindOf(val) {\r\n return Object.prototype.toString.call(val).slice(8, -1);\r\n }\r\n module.exports = kindOf;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvbGFuZy9raW5kT2YuanM/ZTc2ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9sYW5nL2tpbmRPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBcImtpbmRcIiBvZiB2YWx1ZS4gKGUuZy4gXCJTdHJpbmdcIiwgXCJOdW1iZXJcIiwgZXRjKVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBraW5kT2YodmFsKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpLnNsaWNlKDgsIC0xKTtcclxuICAgIH1cclxuICAgIG1vZHVsZS5leHBvcnRzID0ga2luZE9mO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/lang/kindOf.js\n"); @@ -7861,7 +7458,6 @@ eval("\r\n /**\r\n * Gets the \"kind\" of value. (e.g. \"String\", \"Numb \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 11:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Typecast a value to a String, using an empty string value for null or\r\n * undefined.\r\n */\r\n function toString(val){\r\n return val == null ? '' : val.toString();\r\n }\r\n\r\n module.exports = toString;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvbGFuZy90b1N0cmluZy5qcz8zMDc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9sYW5nL3RvU3RyaW5nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUeXBlY2FzdCBhIHZhbHVlIHRvIGEgU3RyaW5nLCB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdmFsdWUgZm9yIG51bGwgb3JcclxuICAgICAqIHVuZGVmaW5lZC5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcodmFsKXtcclxuICAgICAgICByZXR1cm4gdmFsID09IG51bGwgPyAnJyA6IHZhbC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XHJcblxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/lang/toString.js\n"); @@ -7874,7 +7470,6 @@ eval("\r\n\r\n /**\r\n * Typecast a value to a String, using an empty str \*****************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 8:4-18 */ /***/ ((module) => { eval("\r\n /**\r\n * Clamps value inside range.\r\n */\r\n function clamp(val, min, max){\r\n return val < min? min : (val > max? max : val);\r\n }\r\n module.exports = clamp;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvbWF0aC9jbGFtcC5qcz9mZjkzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L21hdGgvY2xhbXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIC8qKlxyXG4gICAgICogQ2xhbXBzIHZhbHVlIGluc2lkZSByYW5nZS5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY2xhbXAodmFsLCBtaW4sIG1heCl7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA8IG1pbj8gbWluIDogKHZhbCA+IG1heD8gbWF4IDogdmFsKTtcclxuICAgIH1cclxuICAgIG1vZHVsZS5leHBvcnRzID0gY2xhbXA7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/math/clamp.js\n"); @@ -7887,7 +7482,6 @@ eval("\r\n /**\r\n * Clamps value inside range.\r\n */\r\n functio \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 54:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var forOwn = __webpack_require__(/*! ./forOwn */ \"./node_modules/mout/object/forOwn.js\");\nvar isArray = __webpack_require__(/*! ../lang/isArray */ \"./node_modules/mout/lang/isArray.js\");\r\n\r\n function containsMatch(array, pattern) {\r\n var i = -1, length = array.length;\r\n while (++i < length) {\r\n if (deepMatches(array[i], pattern)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function matchArray(target, pattern) {\r\n var i = -1, patternLength = pattern.length;\r\n while (++i < patternLength) {\r\n if (!containsMatch(target, pattern[i])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function matchObject(target, pattern) {\r\n var result = true;\r\n forOwn(pattern, function(val, key) {\r\n if (!deepMatches(target[key], val)) {\r\n // Return false to break out of forOwn early\r\n return (result = false);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Recursively check if the objects match.\r\n */\r\n function deepMatches(target, pattern){\r\n if (target && typeof target === 'object' &&\r\n pattern && typeof pattern === 'object') {\r\n if (isArray(target) && isArray(pattern)) {\r\n return matchArray(target, pattern);\r\n } else {\r\n return matchObject(target, pattern);\r\n }\r\n } else {\r\n return target === pattern;\r\n }\r\n }\r\n\r\n module.exports = deepMatches;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2RlZXBNYXRjaGVzLmpzPzdlMDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLHNEQUFVO0FBQy9CLGNBQWMsbUJBQU8sQ0FBQyw0REFBaUI7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2RlZXBNYXRjaGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGZvck93biA9IHJlcXVpcmUoJy4vZm9yT3duJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2xhbmcvaXNBcnJheScpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNvbnRhaW5zTWF0Y2goYXJyYXksIHBhdHRlcm4pIHtcclxuICAgICAgICB2YXIgaSA9IC0xLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XHJcbiAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoZGVlcE1hdGNoZXMoYXJyYXlbaV0sIHBhdHRlcm4pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1hdGNoQXJyYXkodGFyZ2V0LCBwYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFyIGkgPSAtMSwgcGF0dGVybkxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlICgrK2kgPCBwYXR0ZXJuTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGFpbnNNYXRjaCh0YXJnZXQsIHBhdHRlcm5baV0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1hdGNoT2JqZWN0KHRhcmdldCwgcGF0dGVybikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgIGZvck93bihwYXR0ZXJuLCBmdW5jdGlvbih2YWwsIGtleSkge1xyXG4gICAgICAgICAgICBpZiAoIWRlZXBNYXRjaGVzKHRhcmdldFtrZXldLCB2YWwpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBSZXR1cm4gZmFsc2UgdG8gYnJlYWsgb3V0IG9mIGZvck93biBlYXJseVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlY3Vyc2l2ZWx5IGNoZWNrIGlmIHRoZSBvYmplY3RzIG1hdGNoLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBkZWVwTWF0Y2hlcyh0YXJnZXQsIHBhdHRlcm4pe1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgcGF0dGVybiAmJiB0eXBlb2YgcGF0dGVybiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHBhdHRlcm4pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBcnJheSh0YXJnZXQsIHBhdHRlcm4pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoT2JqZWN0KHRhcmdldCwgcGF0dGVybik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0ID09PSBwYXR0ZXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRlZXBNYXRjaGVzO1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/object/deepMatches.js\n"); @@ -7900,7 +7494,6 @@ eval("var forOwn = __webpack_require__(/*! ./forOwn */ \"./node_modules/mout/obj \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 74:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var hasOwn = __webpack_require__(/*! ./hasOwn */ \"./node_modules/mout/object/hasOwn.js\");\r\n\r\n var _hasDontEnumBug,\r\n _dontEnums;\r\n\r\n function checkDontEnum(){\r\n _dontEnums = [\r\n 'toString',\r\n 'toLocaleString',\r\n 'valueOf',\r\n 'hasOwnProperty',\r\n 'isPrototypeOf',\r\n 'propertyIsEnumerable',\r\n 'constructor'\r\n ];\r\n\r\n _hasDontEnumBug = true;\r\n\r\n for (var key in {'toString': null}) {\r\n _hasDontEnumBug = false;\r\n }\r\n }\r\n\r\n /**\r\n * Similar to Array/forEach but works over object properties and fixes Don't\r\n * Enum bug on IE.\r\n * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\r\n */\r\n function forIn(obj, fn, thisObj){\r\n var key, i = 0;\r\n // no need to check if argument is a real object that way we can use\r\n // it for arrays, functions, date, etc.\r\n\r\n //post-pone check till needed\r\n if (_hasDontEnumBug == null) checkDontEnum();\r\n\r\n for (key in obj) {\r\n if (exec(fn, obj, key, thisObj) === false) {\r\n break;\r\n }\r\n }\r\n\r\n\r\n if (_hasDontEnumBug) {\r\n var ctor = obj.constructor,\r\n isProto = !!ctor && obj === ctor.prototype;\r\n\r\n while (key = _dontEnums[i++]) {\r\n // For constructor, if it is a prototype object the constructor\r\n // is always non-enumerable unless defined otherwise (and\r\n // enumerated above). For non-prototype objects, it will have\r\n // to be defined on this object, since it cannot be defined on\r\n // any prototype objects.\r\n //\r\n // For other [[DontEnum]] properties, check if the value is\r\n // different than Object prototype value.\r\n if (\r\n (key !== 'constructor' ||\r\n (!isProto && hasOwn(obj, key))) &&\r\n obj[key] !== Object.prototype[key]\r\n ) {\r\n if (exec(fn, obj, key, thisObj) === false) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n function exec(fn, obj, key, thisObj){\r\n return fn.call(thisObj, obj[key], key, obj);\r\n }\r\n\r\n module.exports = forIn;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2ZvckluLmpzP2QyOTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLHNEQUFVOztBQUUvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHlCQUF5QixpQkFBaUI7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2ZvckluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGhhc093biA9IHJlcXVpcmUoJy4vaGFzT3duJyk7XHJcblxyXG4gICAgdmFyIF9oYXNEb250RW51bUJ1ZyxcclxuICAgICAgICBfZG9udEVudW1zO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNoZWNrRG9udEVudW0oKXtcclxuICAgICAgICBfZG9udEVudW1zID0gW1xyXG4gICAgICAgICAgICAgICAgJ3RvU3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICd0b0xvY2FsZVN0cmluZycsXHJcbiAgICAgICAgICAgICAgICAndmFsdWVPZicsXHJcbiAgICAgICAgICAgICAgICAnaGFzT3duUHJvcGVydHknLFxyXG4gICAgICAgICAgICAgICAgJ2lzUHJvdG90eXBlT2YnLFxyXG4gICAgICAgICAgICAgICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcclxuICAgICAgICAgICAgICAgICdjb25zdHJ1Y3RvcidcclxuICAgICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgX2hhc0RvbnRFbnVtQnVnID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHsndG9TdHJpbmcnOiBudWxsfSkge1xyXG4gICAgICAgICAgICBfaGFzRG9udEVudW1CdWcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaW1pbGFyIHRvIEFycmF5L2ZvckVhY2ggYnV0IHdvcmtzIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMgYW5kIGZpeGVzIERvbid0XHJcbiAgICAgKiBFbnVtIGJ1ZyBvbiBJRS5cclxuICAgICAqIGJhc2VkIG9uOiBodHRwOi8vd2hhdHRoZWhlYWRzYWlkLmNvbS8yMDEwLzEwL2Etc2FmZXItb2JqZWN0LWtleXMtY29tcGF0aWJpbGl0eS1pbXBsZW1lbnRhdGlvblxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBmb3JJbihvYmosIGZuLCB0aGlzT2JqKXtcclxuICAgICAgICB2YXIga2V5LCBpID0gMDtcclxuICAgICAgICAvLyBubyBuZWVkIHRvIGNoZWNrIGlmIGFyZ3VtZW50IGlzIGEgcmVhbCBvYmplY3QgdGhhdCB3YXkgd2UgY2FuIHVzZVxyXG4gICAgICAgIC8vIGl0IGZvciBhcnJheXMsIGZ1bmN0aW9ucywgZGF0ZSwgZXRjLlxyXG5cclxuICAgICAgICAvL3Bvc3QtcG9uZSBjaGVjayB0aWxsIG5lZWRlZFxyXG4gICAgICAgIGlmIChfaGFzRG9udEVudW1CdWcgPT0gbnVsbCkgY2hlY2tEb250RW51bSgpO1xyXG5cclxuICAgICAgICBmb3IgKGtleSBpbiBvYmopIHtcclxuICAgICAgICAgICAgaWYgKGV4ZWMoZm4sIG9iaiwga2V5LCB0aGlzT2JqKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKF9oYXNEb250RW51bUJ1Zykge1xyXG4gICAgICAgICAgICB2YXIgY3RvciA9IG9iai5jb25zdHJ1Y3RvcixcclxuICAgICAgICAgICAgICAgIGlzUHJvdG8gPSAhIWN0b3IgJiYgb2JqID09PSBjdG9yLnByb3RvdHlwZTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChrZXkgPSBfZG9udEVudW1zW2krK10pIHtcclxuICAgICAgICAgICAgICAgIC8vIEZvciBjb25zdHJ1Y3RvciwgaWYgaXQgaXMgYSBwcm90b3R5cGUgb2JqZWN0IHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgICAgICAgICAgICAgLy8gaXMgYWx3YXlzIG5vbi1lbnVtZXJhYmxlIHVubGVzcyBkZWZpbmVkIG90aGVyd2lzZSAoYW5kXHJcbiAgICAgICAgICAgICAgICAvLyBlbnVtZXJhdGVkIGFib3ZlKS4gIEZvciBub24tcHJvdG90eXBlIG9iamVjdHMsIGl0IHdpbGwgaGF2ZVxyXG4gICAgICAgICAgICAgICAgLy8gdG8gYmUgZGVmaW5lZCBvbiB0aGlzIG9iamVjdCwgc2luY2UgaXQgY2Fubm90IGJlIGRlZmluZWQgb25cclxuICAgICAgICAgICAgICAgIC8vIGFueSBwcm90b3R5cGUgb2JqZWN0cy5cclxuICAgICAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgICAgICAvLyBGb3Igb3RoZXIgW1tEb250RW51bV1dIHByb3BlcnRpZXMsIGNoZWNrIGlmIHRoZSB2YWx1ZSBpc1xyXG4gICAgICAgICAgICAgICAgLy8gZGlmZmVyZW50IHRoYW4gT2JqZWN0IHByb3RvdHlwZSB2YWx1ZS5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAoa2V5ICE9PSAnY29uc3RydWN0b3InIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICghaXNQcm90byAmJiBoYXNPd24ob2JqLCBrZXkpKSkgJiZcclxuICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSAhPT0gT2JqZWN0LnByb3RvdHlwZVtrZXldXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXhlYyhmbiwgb2JqLCBrZXksIHRoaXNPYmopID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZXhlYyhmbiwgb2JqLCBrZXksIHRoaXNPYmope1xyXG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXNPYmosIG9ialtrZXldLCBrZXksIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmb3JJbjtcclxuXHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/object/forIn.js\n"); @@ -7913,7 +7506,6 @@ eval("var hasOwn = __webpack_require__(/*! ./hasOwn */ \"./node_modules/mout/obj \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 17:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var hasOwn = __webpack_require__(/*! ./hasOwn */ \"./node_modules/mout/object/hasOwn.js\");\nvar forIn = __webpack_require__(/*! ./forIn */ \"./node_modules/mout/object/forIn.js\");\r\n\r\n /**\r\n * Similar to Array/forEach but works over object properties and fixes Don't\r\n * Enum bug on IE.\r\n * based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\r\n */\r\n function forOwn(obj, fn, thisObj){\r\n forIn(obj, function(val, key){\r\n if (hasOwn(obj, key)) {\r\n return fn.call(thisObj, obj[key], key, obj);\r\n }\r\n });\r\n }\r\n\r\n module.exports = forOwn;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2Zvck93bi5qcz9iNjc4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGFBQWEsbUJBQU8sQ0FBQyxzREFBVTtBQUMvQixZQUFZLG1CQUFPLENBQUMsb0RBQVM7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2Zvck93bi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNPd24gPSByZXF1aXJlKCcuL2hhc093bicpO1xudmFyIGZvckluID0gcmVxdWlyZSgnLi9mb3JJbicpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2ltaWxhciB0byBBcnJheS9mb3JFYWNoIGJ1dCB3b3JrcyBvdmVyIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBmaXhlcyBEb24ndFxyXG4gICAgICogRW51bSBidWcgb24gSUUuXHJcbiAgICAgKiBiYXNlZCBvbjogaHR0cDovL3doYXR0aGVoZWFkc2FpZC5jb20vMjAxMC8xMC9hLXNhZmVyLW9iamVjdC1rZXlzLWNvbXBhdGliaWxpdHktaW1wbGVtZW50YXRpb25cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZm9yT3duKG9iaiwgZm4sIHRoaXNPYmope1xyXG4gICAgICAgIGZvckluKG9iaiwgZnVuY3Rpb24odmFsLCBrZXkpe1xyXG4gICAgICAgICAgICBpZiAoaGFzT3duKG9iaiwga2V5KSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpc09iaiwgb2JqW2tleV0sIGtleSwgb2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gZm9yT3duO1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/object/forOwn.js\n"); @@ -7926,7 +7518,6 @@ eval("var hasOwn = __webpack_require__(/*! ./hasOwn */ \"./node_modules/mout/obj \********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 10:5-19 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Safer Object.hasOwnProperty\r\n */\r\n function hasOwn(obj, prop){\r\n return Object.prototype.hasOwnProperty.call(obj, prop);\r\n }\r\n\r\n module.exports = hasOwn;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2hhc093bi5qcz85NWY3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvb2JqZWN0L2hhc093bi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2FmZXIgT2JqZWN0Lmhhc093blByb3BlcnR5XHJcbiAgICAgKi9cclxuICAgICBmdW5jdGlvbiBoYXNPd24ob2JqLCBwcm9wKXtcclxuICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xyXG4gICAgIH1cclxuXHJcbiAgICAgbW9kdWxlLmV4cG9ydHMgPSBoYXNPd247XHJcblxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/object/hasOwn.js\n"); @@ -7939,7 +7530,6 @@ eval("\r\n\r\n /**\r\n * Safer Object.hasOwnProperty\r\n */\r\n f \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 5:0-14 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("\r\n\r\n//automatically generated, do not edit!\r\n//run `node build` instead\r\nmodule.exports = {\r\n 'contains' : __webpack_require__(/*! ./queryString/contains */ \"./node_modules/mout/queryString/contains.js\"),\n 'decode' : __webpack_require__(/*! ./queryString/decode */ \"./node_modules/mout/queryString/decode.js\"),\n 'encode' : __webpack_require__(/*! ./queryString/encode */ \"./node_modules/mout/queryString/encode.js\"),\n 'getParam' : __webpack_require__(/*! ./queryString/getParam */ \"./node_modules/mout/queryString/getParam.js\"),\n 'getQuery' : __webpack_require__(/*! ./queryString/getQuery */ \"./node_modules/mout/queryString/getQuery.js\"),\n 'parse' : __webpack_require__(/*! ./queryString/parse */ \"./node_modules/mout/queryString/parse.js\"),\n 'setParam' : __webpack_require__(/*! ./queryString/setParam */ \"./node_modules/mout/queryString/setParam.js\")\r\n};\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcuanM/OTBhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixtQkFBTyxDQUFDLDJFQUF3QjtBQUNqRCxlQUFlLG1CQUFPLENBQUMsdUVBQXNCO0FBQzdDLGVBQWUsbUJBQU8sQ0FBQyx1RUFBc0I7QUFDN0MsaUJBQWlCLG1CQUFPLENBQUMsMkVBQXdCO0FBQ2pELGlCQUFpQixtQkFBTyxDQUFDLDJFQUF3QjtBQUNqRCxjQUFjLG1CQUFPLENBQUMscUVBQXFCO0FBQzNDLGlCQUFpQixtQkFBTyxDQUFDLDJFQUF3QjtBQUNqRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3F1ZXJ5U3RyaW5nLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcblxyXG4vL2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBkbyBub3QgZWRpdCFcclxuLy9ydW4gYG5vZGUgYnVpbGRgIGluc3RlYWRcclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICAnY29udGFpbnMnIDogcmVxdWlyZSgnLi9xdWVyeVN0cmluZy9jb250YWlucycpLFxuICAgICdkZWNvZGUnIDogcmVxdWlyZSgnLi9xdWVyeVN0cmluZy9kZWNvZGUnKSxcbiAgICAnZW5jb2RlJyA6IHJlcXVpcmUoJy4vcXVlcnlTdHJpbmcvZW5jb2RlJyksXG4gICAgJ2dldFBhcmFtJyA6IHJlcXVpcmUoJy4vcXVlcnlTdHJpbmcvZ2V0UGFyYW0nKSxcbiAgICAnZ2V0UXVlcnknIDogcmVxdWlyZSgnLi9xdWVyeVN0cmluZy9nZXRRdWVyeScpLFxuICAgICdwYXJzZScgOiByZXF1aXJlKCcuL3F1ZXJ5U3RyaW5nL3BhcnNlJyksXG4gICAgJ3NldFBhcmFtJyA6IHJlcXVpcmUoJy4vcXVlcnlTdHJpbmcvc2V0UGFyYW0nKVxyXG59O1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString.js\n"); @@ -7952,7 +7542,6 @@ eval("\r\n\r\n//automatically generated, do not edit!\r\n//run `node build` inst \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var getQuery = __webpack_require__(/*! ./getQuery */ \"./node_modules/mout/queryString/getQuery.js\");\r\n\r\n /**\r\n * Checks if query string contains parameter.\r\n */\r\n function contains(url, paramName) {\r\n var regex = new RegExp('(\\\\?|&)'+ paramName +'=', 'g'); //matches `?param=` or `¶m=`\r\n return regex.test(getQuery(url));\r\n }\r\n\r\n module.exports = contains;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvY29udGFpbnMuanM/ZDY1NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsK0RBQVk7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9xdWVyeVN0cmluZy9jb250YWlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBnZXRRdWVyeSA9IHJlcXVpcmUoJy4vZ2V0UXVlcnknKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBxdWVyeSBzdHJpbmcgY29udGFpbnMgcGFyYW1ldGVyLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjb250YWlucyh1cmwsIHBhcmFtTmFtZSkge1xyXG4gICAgICAgIHZhciByZWdleCA9IG5ldyBSZWdFeHAoJyhcXFxcP3wmKScrIHBhcmFtTmFtZSArJz0nLCAnZycpOyAvL21hdGNoZXMgYD9wYXJhbT1gIG9yIGAmcGFyYW09YFxyXG4gICAgICAgIHJldHVybiByZWdleC50ZXN0KGdldFF1ZXJ5KHVybCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gY29udGFpbnM7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/contains.js\n"); @@ -7965,7 +7554,6 @@ eval("var getQuery = __webpack_require__(/*! ./getQuery */ \"./node_modules/mout \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 35:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var typecast = __webpack_require__(/*! ../string/typecast */ \"./node_modules/mout/string/typecast.js\");\nvar isArray = __webpack_require__(/*! ../lang/isArray */ \"./node_modules/mout/lang/isArray.js\");\nvar hasOwn = __webpack_require__(/*! ../object/hasOwn */ \"./node_modules/mout/object/hasOwn.js\");\r\n\r\n /**\r\n * Decode query string into an object of keys => vals.\r\n */\r\n function decode(queryStr, shouldTypecast) {\r\n var queryArr = (queryStr || '').replace('?', '').split('&'),\r\n reg = /([^=]+)=(.+)/,\r\n i = -1,\r\n obj = {},\r\n equalIndex, cur, pValue, pName;\r\n\r\n while ((cur = queryArr[++i])) {\r\n equalIndex = cur.indexOf('=');\r\n pName = cur.substring(0, equalIndex);\r\n pValue = decodeURIComponent(cur.substring(equalIndex + 1));\r\n if (shouldTypecast !== false) {\r\n pValue = typecast(pValue);\r\n }\r\n if (hasOwn(obj, pName)){\r\n if(isArray(obj[pName])){\r\n obj[pName].push(pValue);\r\n } else {\r\n obj[pName] = [obj[pName], pValue];\r\n }\r\n } else {\r\n obj[pName] = pValue;\r\n }\r\n }\r\n return obj;\r\n }\r\n\r\n module.exports = decode;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvZGVjb2RlLmpzP2I2OGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLGtFQUFvQjtBQUMzQyxjQUFjLG1CQUFPLENBQUMsNERBQWlCO0FBQ3ZDLGFBQWEsbUJBQU8sQ0FBQyw4REFBa0I7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3F1ZXJ5U3RyaW5nL2RlY29kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0eXBlY2FzdCA9IHJlcXVpcmUoJy4uL3N0cmluZy90eXBlY2FzdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9sYW5nL2lzQXJyYXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9vYmplY3QvaGFzT3duJyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNvZGUgcXVlcnkgc3RyaW5nIGludG8gYW4gb2JqZWN0IG9mIGtleXMgPT4gdmFscy5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZGVjb2RlKHF1ZXJ5U3RyLCBzaG91bGRUeXBlY2FzdCkge1xyXG4gICAgICAgIHZhciBxdWVyeUFyciA9IChxdWVyeVN0ciB8fCAnJykucmVwbGFjZSgnPycsICcnKS5zcGxpdCgnJicpLFxyXG4gICAgICAgICAgICByZWcgPSAvKFtePV0rKT0oLispLyxcclxuICAgICAgICAgICAgaSA9IC0xLFxyXG4gICAgICAgICAgICBvYmogPSB7fSxcclxuICAgICAgICAgICAgZXF1YWxJbmRleCwgY3VyLCBwVmFsdWUsIHBOYW1lO1xyXG5cclxuICAgICAgICB3aGlsZSAoKGN1ciA9IHF1ZXJ5QXJyWysraV0pKSB7XHJcbiAgICAgICAgICAgIGVxdWFsSW5kZXggPSBjdXIuaW5kZXhPZignPScpO1xyXG4gICAgICAgICAgICBwTmFtZSA9IGN1ci5zdWJzdHJpbmcoMCwgZXF1YWxJbmRleCk7XHJcbiAgICAgICAgICAgIHBWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXIuc3Vic3RyaW5nKGVxdWFsSW5kZXggKyAxKSk7XHJcbiAgICAgICAgICAgIGlmIChzaG91bGRUeXBlY2FzdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHBWYWx1ZSA9IHR5cGVjYXN0KHBWYWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGhhc093bihvYmosIHBOYW1lKSl7XHJcbiAgICAgICAgICAgICAgICBpZihpc0FycmF5KG9ialtwTmFtZV0pKXtcclxuICAgICAgICAgICAgICAgICAgICBvYmpbcE5hbWVdLnB1c2gocFZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqW3BOYW1lXSA9IFtvYmpbcE5hbWVdLCBwVmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW3BOYW1lXSA9IHBWYWx1ZTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBkZWNvZGU7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/decode.js\n"); @@ -7978,7 +7566,6 @@ eval("var typecast = __webpack_require__(/*! ../string/typecast */ \"./node_modu \*************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 26:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var forOwn = __webpack_require__(/*! ../object/forOwn */ \"./node_modules/mout/object/forOwn.js\");\nvar isArray = __webpack_require__(/*! ../lang/isArray */ \"./node_modules/mout/lang/isArray.js\");\nvar forEach = __webpack_require__(/*! ../array/forEach */ \"./node_modules/mout/array/forEach.js\");\r\n\r\n /**\r\n * Encode object into a query string.\r\n */\r\n function encode(obj){\r\n var query = [],\r\n arrValues, reg;\r\n forOwn(obj, function (val, key) {\r\n if (isArray(val)) {\r\n arrValues = key + '=';\r\n reg = new RegExp('&'+key+'+=$');\r\n forEach(val, function (aValue) {\r\n arrValues += encodeURIComponent(aValue) + '&' + key + '=';\r\n });\r\n query.push(arrValues.replace(reg, ''));\r\n } else {\r\n query.push(key + '=' + encodeURIComponent(val));\r\n }\r\n });\r\n return (query.length) ? '?' + query.join('&') : '';\r\n }\r\n\r\n module.exports = encode;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvZW5jb2RlLmpzPzJlNWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYSxtQkFBTyxDQUFDLDhEQUFrQjtBQUN2QyxjQUFjLG1CQUFPLENBQUMsNERBQWlCO0FBQ3ZDLGNBQWMsbUJBQU8sQ0FBQyw4REFBa0I7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9xdWVyeVN0cmluZy9lbmNvZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZm9yT3duID0gcmVxdWlyZSgnLi4vb2JqZWN0L2Zvck93bicpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9sYW5nL2lzQXJyYXknKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vYXJyYXkvZm9yRWFjaCcpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5jb2RlIG9iamVjdCBpbnRvIGEgcXVlcnkgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBlbmNvZGUob2JqKXtcclxuICAgICAgICB2YXIgcXVlcnkgPSBbXSxcclxuICAgICAgICAgICAgYXJyVmFsdWVzLCByZWc7XHJcbiAgICAgICAgZm9yT3duKG9iaiwgZnVuY3Rpb24gKHZhbCwga2V5KSB7XHJcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbCkpIHtcclxuICAgICAgICAgICAgICAgIGFyclZhbHVlcyA9IGtleSArICc9JztcclxuICAgICAgICAgICAgICAgIHJlZyA9IG5ldyBSZWdFeHAoJyYnK2tleSsnKz0kJyk7XHJcbiAgICAgICAgICAgICAgICBmb3JFYWNoKHZhbCwgZnVuY3Rpb24gKGFWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclZhbHVlcyArPSBlbmNvZGVVUklDb21wb25lbnQoYVZhbHVlKSArICcmJyArIGtleSArICc9JztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkucHVzaChhcnJWYWx1ZXMucmVwbGFjZShyZWcsICcnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgIHF1ZXJ5LnB1c2goa2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIChxdWVyeS5sZW5ndGgpID8gJz8nICsgcXVlcnkuam9pbignJicpIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBlbmNvZGU7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/encode.js\n"); @@ -7991,7 +7578,6 @@ eval("var forOwn = __webpack_require__(/*! ../object/forOwn */ \"./node_modules/ \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 14:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var typecast = __webpack_require__(/*! ../string/typecast */ \"./node_modules/mout/string/typecast.js\");\nvar getQuery = __webpack_require__(/*! ./getQuery */ \"./node_modules/mout/queryString/getQuery.js\");\r\n\r\n /**\r\n * Get query parameter value.\r\n */\r\n function getParam(url, param, shouldTypecast){\r\n var regexp = new RegExp('(\\\\?|&)'+ param + '=([^&]*)'), //matches `?param=value` or `¶m=value`, value = $2\r\n result = regexp.exec( getQuery(url) ),\r\n val = (result && result[2])? result[2] : null;\r\n return shouldTypecast === false? val : typecast(val);\r\n }\r\n\r\n module.exports = getParam;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvZ2V0UGFyYW0uanM/M2QwOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsa0VBQW9CO0FBQzNDLGVBQWUsbUJBQU8sQ0FBQywrREFBWTs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvZ2V0UGFyYW0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdHlwZWNhc3QgPSByZXF1aXJlKCcuLi9zdHJpbmcvdHlwZWNhc3QnKTtcbnZhciBnZXRRdWVyeSA9IHJlcXVpcmUoJy4vZ2V0UXVlcnknKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBxdWVyeSBwYXJhbWV0ZXIgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldFBhcmFtKHVybCwgcGFyYW0sIHNob3VsZFR5cGVjYXN0KXtcclxuICAgICAgICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKFxcXFw/fCYpJysgcGFyYW0gKyAnPShbXiZdKiknKSwgLy9tYXRjaGVzIGA/cGFyYW09dmFsdWVgIG9yIGAmcGFyYW09dmFsdWVgLCB2YWx1ZSA9ICQyXHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlZ2V4cC5leGVjKCBnZXRRdWVyeSh1cmwpICksXHJcbiAgICAgICAgICAgIHZhbCA9IChyZXN1bHQgJiYgcmVzdWx0WzJdKT8gcmVzdWx0WzJdIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gc2hvdWxkVHlwZWNhc3QgPT09IGZhbHNlPyB2YWwgOiB0eXBlY2FzdCh2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gZ2V0UGFyYW07XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/getParam.js\n"); @@ -8004,7 +7590,6 @@ eval("var typecast = __webpack_require__(/*! ../string/typecast */ \"./node_modu \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 12:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Gets full query as string with all special chars decoded.\r\n */\r\n function getQuery(url) {\r\n // url = url.replace(/#.*\\?/, '?'); //removes hash (to avoid getting hash query)\r\n var queryString = /\\?[a-zA-Z0-9\\=\\&\\%\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,]+/.exec(url); //valid chars according to: http://www.ietf.org/rfc/rfc1738.txt\r\n return (queryString)? decodeURIComponent(queryString[0].replace(/\\+/g,' ')) : '';\r\n }\r\n\r\n module.exports = getQuery;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvZ2V0UXVlcnkuanM/YjExYyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDLGlGQUFpRjtBQUNqRjtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvZ2V0UXVlcnkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgZnVsbCBxdWVyeSBhcyBzdHJpbmcgd2l0aCBhbGwgc3BlY2lhbCBjaGFycyBkZWNvZGVkLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBnZXRRdWVyeSh1cmwpIHtcclxuICAgICAgICAvLyB1cmwgPSB1cmwucmVwbGFjZSgvIy4qXFw/LywgJz8nKTsgLy9yZW1vdmVzIGhhc2ggKHRvIGF2b2lkIGdldHRpbmcgaGFzaCBxdWVyeSlcclxuICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSAvXFw/W2EtekEtWjAtOVxcPVxcJlxcJVxcJFxcLVxcX1xcLlxcK1xcIVxcKlxcJ1xcKFxcKVxcLF0rLy5leGVjKHVybCk7IC8vdmFsaWQgY2hhcnMgYWNjb3JkaW5nIHRvOiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxNzM4LnR4dFxyXG4gICAgICAgIHJldHVybiAocXVlcnlTdHJpbmcpPyBkZWNvZGVVUklDb21wb25lbnQocXVlcnlTdHJpbmdbMF0ucmVwbGFjZSgvXFwrL2csJyAnKSkgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGdldFF1ZXJ5O1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/getQuery.js\n"); @@ -8017,7 +7602,6 @@ eval("\r\n\r\n /**\r\n * Gets full query as string with all special chars \************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 11:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var decode = __webpack_require__(/*! ./decode */ \"./node_modules/mout/queryString/decode.js\");\nvar getQuery = __webpack_require__(/*! ./getQuery */ \"./node_modules/mout/queryString/getQuery.js\");\r\n\r\n /**\r\n * Get query string, parses and decodes it.\r\n */\r\n function parse(url, shouldTypecast) {\r\n return decode(getQuery(url), shouldTypecast);\r\n }\r\n\r\n module.exports = parse;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvcGFyc2UuanM/NjgzZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxhQUFhLG1CQUFPLENBQUMsMkRBQVU7QUFDL0IsZUFBZSxtQkFBTyxDQUFDLCtEQUFZOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9xdWVyeVN0cmluZy9wYXJzZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBkZWNvZGUgPSByZXF1aXJlKCcuL2RlY29kZScpO1xudmFyIGdldFF1ZXJ5ID0gcmVxdWlyZSgnLi9nZXRRdWVyeScpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHF1ZXJ5IHN0cmluZywgcGFyc2VzIGFuZCBkZWNvZGVzIGl0LlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBwYXJzZSh1cmwsIHNob3VsZFR5cGVjYXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGRlY29kZShnZXRRdWVyeSh1cmwpLCBzaG91bGRUeXBlY2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcclxuXHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/parse.js\n"); @@ -8030,7 +7614,6 @@ eval("var decode = __webpack_require__(/*! ./decode */ \"./node_modules/mout/que \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 26:4-18 */ /***/ ((module) => { eval("\r\n\r\n /**\r\n * Set query string parameter value\r\n */\r\n function setParam(url, paramName, value){\r\n url = url || '';\r\n\r\n var re = new RegExp('(\\\\?|&)'+ paramName +'=[^&]*' );\r\n var param = paramName +'='+ encodeURIComponent( value );\r\n\r\n if ( re.test(url) ) {\r\n return url.replace(re, '$1'+ param);\r\n } else {\r\n if (url.indexOf('?') === -1) {\r\n url += '?';\r\n }\r\n if (url.indexOf('=') !== -1) {\r\n url += '&';\r\n }\r\n return url + param;\r\n }\r\n\r\n }\r\n\r\n module.exports = setParam;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvcXVlcnlTdHJpbmcvc2V0UGFyYW0uanM/OWMxYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9xdWVyeVN0cmluZy9zZXRQYXJhbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXIgdmFsdWVcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gc2V0UGFyYW0odXJsLCBwYXJhbU5hbWUsIHZhbHVlKXtcclxuICAgICAgICB1cmwgPSB1cmwgfHwgJyc7XHJcblxyXG4gICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJyhcXFxcP3wmKScrIHBhcmFtTmFtZSArJz1bXiZdKicgKTtcclxuICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbU5hbWUgKyc9JysgZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApO1xyXG5cclxuICAgICAgICBpZiAoIHJlLnRlc3QodXJsKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKHJlLCAnJDEnKyBwYXJhbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB1cmwgKz0gJz8nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdXJsICs9ICcmJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgcGFyYW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHNldFBhcmFtO1xyXG5cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/queryString/setParam.js\n"); @@ -8043,7 +7626,6 @@ eval("\r\n\r\n /**\r\n * Set query string parameter value\r\n */\r\n \**************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 6:4-18 */ /***/ ((module) => { eval("\r\n /**\r\n * Contains all Unicode white-spaces. Taken from\r\n * http://en.wikipedia.org/wiki/Whitespace_character.\r\n */\r\n module.exports = [\r\n ' ', '\\n', '\\r', '\\t', '\\f', '\\v', '\\u00A0', '\\u1680', '\\u180E',\r\n '\\u2000', '\\u2001', '\\u2002', '\\u2003', '\\u2004', '\\u2005', '\\u2006',\r\n '\\u2007', '\\u2008', '\\u2009', '\\u200A', '\\u2028', '\\u2029', '\\u202F',\r\n '\\u205F', '\\u3000'\r\n ];\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL1dISVRFX1NQQUNFUy5qcz9kMzQxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3N0cmluZy9XSElURV9TUEFDRVMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuICAgIC8qKlxyXG4gICAgICogQ29udGFpbnMgYWxsIFVuaWNvZGUgd2hpdGUtc3BhY2VzLiBUYWtlbiBmcm9tXHJcbiAgICAgKiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1doaXRlc3BhY2VfY2hhcmFjdGVyLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFtcclxuICAgICAgICAnICcsICdcXG4nLCAnXFxyJywgJ1xcdCcsICdcXGYnLCAnXFx2JywgJ1xcdTAwQTAnLCAnXFx1MTY4MCcsICdcXHUxODBFJyxcclxuICAgICAgICAnXFx1MjAwMCcsICdcXHUyMDAxJywgJ1xcdTIwMDInLCAnXFx1MjAwMycsICdcXHUyMDA0JywgJ1xcdTIwMDUnLCAnXFx1MjAwNicsXHJcbiAgICAgICAgJ1xcdTIwMDcnLCAnXFx1MjAwOCcsICdcXHUyMDA5JywgJ1xcdTIwMEEnLCAnXFx1MjAyOCcsICdcXHUyMDI5JywgJ1xcdTIwMkYnLFxyXG4gICAgICAgICdcXHUyMDVGJywgJ1xcdTMwMDAnXHJcbiAgICBdO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/string/WHITE_SPACES.js\n"); @@ -8056,7 +7638,6 @@ eval("\r\n /**\r\n * Contains all Unicode white-spaces. Taken from\r\n \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 33:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\nvar replaceAccents = __webpack_require__(/*! ./replaceAccents */ \"./node_modules/mout/string/replaceAccents.js\");\nvar removeNonWord = __webpack_require__(/*! ./removeNonWord */ \"./node_modules/mout/string/removeNonWord.js\");\nvar upperCase = __webpack_require__(/*! ./upperCase */ \"./node_modules/mout/string/upperCase.js\");\nvar lowerCase = __webpack_require__(/*! ./lowerCase */ \"./node_modules/mout/string/lowerCase.js\");\r\n /**\r\n * Convert string to camelCase text.\r\n */\r\n function camelCase(str){\r\n str = toString(str);\r\n str = replaceAccents(str);\r\n str = removeNonWord(str)\r\n .replace(/[\\-_]/g, ' '); // convert all hyphens and underscores to spaces\r\n\r\n // handle acronyms\r\n // matches lowercase chars && uppercase words\r\n if (/[a-z]/.test(str) && /^|\\s[A-Z]+\\s|$/.test(str)) {\r\n // we convert any word that isn't all caps into lowercase\r\n str = str.replace(/\\s(\\w+)/g, function(word, m) {\r\n return /^[A-Z]+$/.test(m) ? word : lowerCase(word);\r\n });\r\n } else if (/\\s/.test(str)) {\r\n // if it doesn't contain an acronym and it has spaces we should\r\n // convert every word to lowercase\r\n str = lowerCase(str);\r\n }\r\n\r\n return str\r\n .replace(/\\s[a-z]/g, upperCase) // convert first char of each word to UPPERCASE\r\n .replace(/^\\s*[A-Z]+/g, lowerCase) // convert first word to lowercase\r\n .replace(/\\s+/g, ''); // remove spaces\r\n }\r\n module.exports = camelCase;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL2NhbWVsQ2FzZS5qcz84Njk0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyw4REFBa0I7QUFDekMscUJBQXFCLG1CQUFPLENBQUMsc0VBQWtCO0FBQy9DLG9CQUFvQixtQkFBTyxDQUFDLG9FQUFpQjtBQUM3QyxnQkFBZ0IsbUJBQU8sQ0FBQyw0REFBYTtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQyw0REFBYTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3N0cmluZy9jYW1lbENhc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9sYW5nL3RvU3RyaW5nJyk7XG52YXIgcmVwbGFjZUFjY2VudHMgPSByZXF1aXJlKCcuL3JlcGxhY2VBY2NlbnRzJyk7XG52YXIgcmVtb3ZlTm9uV29yZCA9IHJlcXVpcmUoJy4vcmVtb3ZlTm9uV29yZCcpO1xudmFyIHVwcGVyQ2FzZSA9IHJlcXVpcmUoJy4vdXBwZXJDYXNlJyk7XG52YXIgbG93ZXJDYXNlID0gcmVxdWlyZSgnLi9sb3dlckNhc2UnKTtcclxuICAgIC8qKlxyXG4gICAgKiBDb252ZXJ0IHN0cmluZyB0byBjYW1lbENhc2UgdGV4dC5cclxuICAgICovXHJcbiAgICBmdW5jdGlvbiBjYW1lbENhc2Uoc3RyKXtcclxuICAgICAgICBzdHIgPSB0b1N0cmluZyhzdHIpO1xyXG4gICAgICAgIHN0ciA9IHJlcGxhY2VBY2NlbnRzKHN0cik7XHJcbiAgICAgICAgc3RyID0gcmVtb3ZlTm9uV29yZChzdHIpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFwtX10vZywgJyAnKTsgLy8gY29udmVydCBhbGwgaHlwaGVucyBhbmQgdW5kZXJzY29yZXMgdG8gc3BhY2VzXHJcblxyXG4gICAgICAgIC8vIGhhbmRsZSBhY3Jvbnltc1xyXG4gICAgICAgIC8vIG1hdGNoZXMgbG93ZXJjYXNlIGNoYXJzICYmIHVwcGVyY2FzZSB3b3Jkc1xyXG4gICAgICAgIGlmICgvW2Etel0vLnRlc3Qoc3RyKSAmJiAvXnxcXHNbQS1aXStcXHN8JC8udGVzdChzdHIpKSB7XHJcbiAgICAgICAgICAgIC8vIHdlIGNvbnZlcnQgYW55IHdvcmQgdGhhdCBpc24ndCBhbGwgY2FwcyBpbnRvIGxvd2VyY2FzZVxyXG4gICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFxzKFxcdyspL2csIGZ1bmN0aW9uKHdvcmQsIG0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAvXltBLVpdKyQvLnRlc3QobSkgPyB3b3JkIDogbG93ZXJDYXNlKHdvcmQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9cXHMvLnRlc3Qoc3RyKSkge1xyXG4gICAgICAgICAgICAvLyBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gYW4gYWNyb255bSBhbmQgaXQgaGFzIHNwYWNlcyB3ZSBzaG91bGRcclxuICAgICAgICAgICAgLy8gY29udmVydCBldmVyeSB3b3JkIHRvIGxvd2VyY2FzZVxyXG4gICAgICAgICAgICBzdHIgPSBsb3dlckNhc2Uoc3RyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdHJcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1thLXpdL2csIHVwcGVyQ2FzZSkgLy8gY29udmVydCBmaXJzdCBjaGFyIG9mIGVhY2ggd29yZCB0byBVUFBFUkNBU0VcclxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHMqW0EtWl0rL2csIGxvd2VyQ2FzZSkgLy8gY29udmVydCBmaXJzdCB3b3JkIHRvIGxvd2VyY2FzZVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJyk7IC8vIHJlbW92ZSBzcGFjZXNcclxuICAgIH1cclxuICAgIG1vZHVsZS5leHBvcnRzID0gY2FtZWxDYXNlO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/string/camelCase.js\n"); @@ -8069,7 +7650,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 12:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\r\n\r\n /**\r\n * Searches for a given substring\r\n */\r\n function contains(str, substring, fromIndex){\r\n str = toString(str);\r\n substring = toString(substring);\r\n return str.indexOf(substring, fromIndex) !== -1;\r\n }\r\n\r\n module.exports = contains;\r\n\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL2NvbnRhaW5zLmpzPzZlZjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDhEQUFrQjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3N0cmluZy9jb250YWlucy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2xhbmcvdG9TdHJpbmcnKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlYXJjaGVzIGZvciBhIGdpdmVuIHN1YnN0cmluZ1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjb250YWlucyhzdHIsIHN1YnN0cmluZywgZnJvbUluZGV4KXtcclxuICAgICAgICBzdHIgPSB0b1N0cmluZyhzdHIpO1xyXG4gICAgICAgIHN1YnN0cmluZyA9IHRvU3RyaW5nKHN1YnN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5pbmRleE9mKHN1YnN0cmluZywgZnJvbUluZGV4KSAhPT0gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBjb250YWlucztcclxuXHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/string/contains.js\n"); @@ -8082,7 +7662,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 10:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\r\n /**\r\n * \"Safer\" String.toLowerCase()\r\n */\r\n function lowerCase(str){\r\n str = toString(str);\r\n return str.toLowerCase();\r\n }\r\n\r\n module.exports = lowerCase;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL2xvd2VyQ2FzZS5qcz85OTYwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyw4REFBa0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9zdHJpbmcvbG93ZXJDYXNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vbGFuZy90b1N0cmluZycpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBcIlNhZmVyXCIgU3RyaW5nLnRvTG93ZXJDYXNlKClcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gbG93ZXJDYXNlKHN0cil7XHJcbiAgICAgICAgc3RyID0gdG9TdHJpbmcoc3RyKTtcclxuICAgICAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBsb3dlckNhc2U7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/string/lowerCase.js\n"); @@ -8095,7 +7674,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 33:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\nvar WHITE_SPACES = __webpack_require__(/*! ./WHITE_SPACES */ \"./node_modules/mout/string/WHITE_SPACES.js\");\r\n /**\r\n * Remove chars from beginning of string.\r\n */\r\n function ltrim(str, chars) {\r\n str = toString(str);\r\n chars = chars || WHITE_SPACES;\r\n\r\n var start = 0,\r\n len = str.length,\r\n charLen = chars.length,\r\n found = true,\r\n i, c;\r\n\r\n while (found && start < len) {\r\n found = false;\r\n i = -1;\r\n c = str.charAt(start);\r\n\r\n while (++i < charLen) {\r\n if (c === chars[i]) {\r\n found = true;\r\n start++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return (start >= len) ? '' : str.substr(start, len);\r\n }\r\n\r\n module.exports = ltrim;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL2x0cmltLmpzPzViODgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDhEQUFrQjtBQUN6QyxtQkFBbUIsbUJBQU8sQ0FBQyxrRUFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL2x0cmltLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vbGFuZy90b1N0cmluZycpO1xudmFyIFdISVRFX1NQQUNFUyA9IHJlcXVpcmUoJy4vV0hJVEVfU1BBQ0VTJyk7XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBjaGFycyBmcm9tIGJlZ2lubmluZyBvZiBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGx0cmltKHN0ciwgY2hhcnMpIHtcclxuICAgICAgICBzdHIgPSB0b1N0cmluZyhzdHIpO1xyXG4gICAgICAgIGNoYXJzID0gY2hhcnMgfHwgV0hJVEVfU1BBQ0VTO1xyXG5cclxuICAgICAgICB2YXIgc3RhcnQgPSAwLFxyXG4gICAgICAgICAgICBsZW4gPSBzdHIubGVuZ3RoLFxyXG4gICAgICAgICAgICBjaGFyTGVuID0gY2hhcnMubGVuZ3RoLFxyXG4gICAgICAgICAgICBmb3VuZCA9IHRydWUsXHJcbiAgICAgICAgICAgIGksIGM7XHJcblxyXG4gICAgICAgIHdoaWxlIChmb3VuZCAmJiBzdGFydCA8IGxlbikge1xyXG4gICAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgIGMgPSBzdHIuY2hhckF0KHN0YXJ0KTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlICgrK2kgPCBjaGFyTGVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gY2hhcnNbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQrKztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChzdGFydCA+PSBsZW4pID8gJycgOiBzdHIuc3Vic3RyKHN0YXJ0LCBsZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gbHRyaW07XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/string/ltrim.js\n"); @@ -8108,7 +7686,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \***************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 13:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\r\n // This pattern is generated by the _build/pattern-removeNonWord.js script\r\n var PATTERN = /[^\\x20\\x2D0-9A-Z\\x5Fa-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\xFF]/g;\r\n\r\n /**\r\n * Remove non-word chars.\r\n */\r\n function removeNonWord(str){\r\n str = toString(str);\r\n return str.replace(PATTERN, '');\r\n }\r\n\r\n module.exports = removeNonWord;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3JlbW92ZU5vbldvcmQuanM/ZjliNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsOERBQWtCO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9zdHJpbmcvcmVtb3ZlTm9uV29yZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2xhbmcvdG9TdHJpbmcnKTtcclxuICAgIC8vIFRoaXMgcGF0dGVybiBpcyBnZW5lcmF0ZWQgYnkgdGhlIF9idWlsZC9wYXR0ZXJuLXJlbW92ZU5vbldvcmQuanMgc2NyaXB0XHJcbiAgICB2YXIgUEFUVEVSTiA9IC9bXlxceDIwXFx4MkQwLTlBLVpcXHg1RmEtelxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHhGRl0vZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZSBub24td29yZCBjaGFycy5cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gcmVtb3ZlTm9uV29yZChzdHIpe1xyXG4gICAgICAgIHN0ciA9IHRvU3RyaW5nKHN0cik7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKFBBVFRFUk4sICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJlbW92ZU5vbldvcmQ7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/string/removeNonWord.js\n"); @@ -8121,7 +7698,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 35:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\r\n /**\r\n * Replaces all accented chars with regular ones\r\n */\r\n function replaceAccents(str){\r\n str = toString(str);\r\n\r\n // verifies if the String has accents and replace them\r\n if (str.search(/[\\xC0-\\xFF]/g) > -1) {\r\n str = str\r\n .replace(/[\\xC0-\\xC5]/g, \"A\")\r\n .replace(/[\\xC6]/g, \"AE\")\r\n .replace(/[\\xC7]/g, \"C\")\r\n .replace(/[\\xC8-\\xCB]/g, \"E\")\r\n .replace(/[\\xCC-\\xCF]/g, \"I\")\r\n .replace(/[\\xD0]/g, \"D\")\r\n .replace(/[\\xD1]/g, \"N\")\r\n .replace(/[\\xD2-\\xD6\\xD8]/g, \"O\")\r\n .replace(/[\\xD9-\\xDC]/g, \"U\")\r\n .replace(/[\\xDD]/g, \"Y\")\r\n .replace(/[\\xDE]/g, \"P\")\r\n .replace(/[\\xE0-\\xE5]/g, \"a\")\r\n .replace(/[\\xE6]/g, \"ae\")\r\n .replace(/[\\xE7]/g, \"c\")\r\n .replace(/[\\xE8-\\xEB]/g, \"e\")\r\n .replace(/[\\xEC-\\xEF]/g, \"i\")\r\n .replace(/[\\xF1]/g, \"n\")\r\n .replace(/[\\xF2-\\xF6\\xF8]/g, \"o\")\r\n .replace(/[\\xF9-\\xFC]/g, \"u\")\r\n .replace(/[\\xFE]/g, \"p\")\r\n .replace(/[\\xFD\\xFF]/g, \"y\");\r\n }\r\n return str;\r\n }\r\n module.exports = replaceAccents;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3JlcGxhY2VBY2NlbnRzLmpzPzFhYTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDhEQUFrQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3JlcGxhY2VBY2NlbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vbGFuZy90b1N0cmluZycpO1xyXG4gICAgLyoqXHJcbiAgICAqIFJlcGxhY2VzIGFsbCBhY2NlbnRlZCBjaGFycyB3aXRoIHJlZ3VsYXIgb25lc1xyXG4gICAgKi9cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VBY2NlbnRzKHN0cil7XHJcbiAgICAgICAgc3RyID0gdG9TdHJpbmcoc3RyKTtcclxuXHJcbiAgICAgICAgLy8gdmVyaWZpZXMgaWYgdGhlIFN0cmluZyBoYXMgYWNjZW50cyBhbmQgcmVwbGFjZSB0aGVtXHJcbiAgICAgICAgaWYgKHN0ci5zZWFyY2goL1tcXHhDMC1cXHhGRl0vZykgPiAtMSkge1xyXG4gICAgICAgICAgICBzdHIgPSBzdHJcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEMwLVxceEM1XS9nLCBcIkFcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEM2XS9nLCBcIkFFXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhDN10vZywgXCJDXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhDOC1cXHhDQl0vZywgXCJFXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhDQy1cXHhDRl0vZywgXCJJXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhEMF0vZywgXCJEXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhEMV0vZywgXCJOXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhEMi1cXHhENlxceEQ4XS9nLCBcIk9cIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEQ5LVxceERDXS9nLCBcIlVcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEREXS9nLCBcIllcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceERFXS9nLCBcIlBcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEUwLVxceEU1XS9nLCBcImFcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEU2XS9nLCBcImFlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhFN10vZywgXCJjXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhFOC1cXHhFQl0vZywgXCJlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhFQy1cXHhFRl0vZywgXCJpXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhGMV0vZywgXCJuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHhGMi1cXHhGNlxceEY4XS9nLCBcIm9cIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEY5LVxceEZDXS9nLCBcInVcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEZFXS9nLCBcInBcIilcclxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvW1xceEZEXFx4RkZdL2csIFwieVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuICAgIG1vZHVsZS5leHBvcnRzID0gcmVwbGFjZUFjY2VudHM7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/string/replaceAccents.js\n"); @@ -8134,7 +7710,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \*******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 32:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\nvar WHITE_SPACES = __webpack_require__(/*! ./WHITE_SPACES */ \"./node_modules/mout/string/WHITE_SPACES.js\");\r\n /**\r\n * Remove chars from end of string.\r\n */\r\n function rtrim(str, chars) {\r\n str = toString(str);\r\n chars = chars || WHITE_SPACES;\r\n\r\n var end = str.length - 1,\r\n charLen = chars.length,\r\n found = true,\r\n i, c;\r\n\r\n while (found && end >= 0) {\r\n found = false;\r\n i = -1;\r\n c = str.charAt(end);\r\n\r\n while (++i < charLen) {\r\n if (c === chars[i]) {\r\n found = true;\r\n end--;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return (end >= 0) ? str.substring(0, end + 1) : '';\r\n }\r\n\r\n module.exports = rtrim;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3J0cmltLmpzPzJjMjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxtQkFBTyxDQUFDLDhEQUFrQjtBQUN6QyxtQkFBbUIsbUJBQU8sQ0FBQyxrRUFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3N0cmluZy9ydHJpbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2xhbmcvdG9TdHJpbmcnKTtcbnZhciBXSElURV9TUEFDRVMgPSByZXF1aXJlKCcuL1dISVRFX1NQQUNFUycpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgY2hhcnMgZnJvbSBlbmQgb2Ygc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBydHJpbShzdHIsIGNoYXJzKSB7XHJcbiAgICAgICAgc3RyID0gdG9TdHJpbmcoc3RyKTtcclxuICAgICAgICBjaGFycyA9IGNoYXJzIHx8IFdISVRFX1NQQUNFUztcclxuXHJcbiAgICAgICAgdmFyIGVuZCA9IHN0ci5sZW5ndGggLSAxLFxyXG4gICAgICAgICAgICBjaGFyTGVuID0gY2hhcnMubGVuZ3RoLFxyXG4gICAgICAgICAgICBmb3VuZCA9IHRydWUsXHJcbiAgICAgICAgICAgIGksIGM7XHJcblxyXG4gICAgICAgIHdoaWxlIChmb3VuZCAmJiBlbmQgPj0gMCkge1xyXG4gICAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpID0gLTE7XHJcbiAgICAgICAgICAgIGMgPSBzdHIuY2hhckF0KGVuZCk7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAoKytpIDwgY2hhckxlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGMgPT09IGNoYXJzW2ldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZC0tO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGVuZCA+PSAwKSA/IHN0ci5zdWJzdHJpbmcoMCwgZW5kICsgMSkgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHJ0cmltO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/string/rtrim.js\n"); @@ -8147,7 +7722,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \******************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 14:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\nvar WHITE_SPACES = __webpack_require__(/*! ./WHITE_SPACES */ \"./node_modules/mout/string/WHITE_SPACES.js\");\nvar ltrim = __webpack_require__(/*! ./ltrim */ \"./node_modules/mout/string/ltrim.js\");\nvar rtrim = __webpack_require__(/*! ./rtrim */ \"./node_modules/mout/string/rtrim.js\");\r\n /**\r\n * Remove white-spaces from beginning and end of string.\r\n */\r\n function trim(str, chars) {\r\n str = toString(str);\r\n chars = chars || WHITE_SPACES;\r\n return ltrim(rtrim(str, chars), chars);\r\n }\r\n\r\n module.exports = trim;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3RyaW0uanM/MzM1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlLG1CQUFPLENBQUMsOERBQWtCO0FBQ3pDLG1CQUFtQixtQkFBTyxDQUFDLGtFQUFnQjtBQUMzQyxZQUFZLG1CQUFPLENBQUMsb0RBQVM7QUFDN0IsWUFBWSxtQkFBTyxDQUFDLG9EQUFTO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9zdHJpbmcvdHJpbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2xhbmcvdG9TdHJpbmcnKTtcbnZhciBXSElURV9TUEFDRVMgPSByZXF1aXJlKCcuL1dISVRFX1NQQUNFUycpO1xudmFyIGx0cmltID0gcmVxdWlyZSgnLi9sdHJpbScpO1xudmFyIHJ0cmltID0gcmVxdWlyZSgnLi9ydHJpbScpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgd2hpdGUtc3BhY2VzIGZyb20gYmVnaW5uaW5nIGFuZCBlbmQgb2Ygc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB0cmltKHN0ciwgY2hhcnMpIHtcclxuICAgICAgICBzdHIgPSB0b1N0cmluZyhzdHIpO1xyXG4gICAgICAgIGNoYXJzID0gY2hhcnMgfHwgV0hJVEVfU1BBQ0VTO1xyXG4gICAgICAgIHJldHVybiBsdHJpbShydHJpbShzdHIsIGNoYXJzKSwgY2hhcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gdHJpbTtcclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mout/string/trim.js\n"); @@ -8160,7 +7734,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \**********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 28:4-18 */ /***/ ((module) => { eval("\r\n\r\n var UNDEF;\r\n\r\n /**\r\n * Parses string and convert it into a native value.\r\n */\r\n function typecast(val) {\r\n var r;\r\n if ( val === null || val === 'null' ) {\r\n r = null;\r\n } else if ( val === 'true' ) {\r\n r = true;\r\n } else if ( val === 'false' ) {\r\n r = false;\r\n } else if ( val === UNDEF || val === 'undefined' ) {\r\n r = UNDEF;\r\n } else if ( val === '' || isNaN(val) ) {\r\n //isNaN('') returns false\r\n r = val;\r\n } else {\r\n //parseFloat(null || '') returns NaN\r\n r = parseFloat(val);\r\n }\r\n return r;\r\n }\r\n\r\n module.exports = typecast;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3R5cGVjYXN0LmpzPzRhYTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbW91dC9zdHJpbmcvdHlwZWNhc3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuXHJcbiAgICB2YXIgVU5ERUY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgc3RyaW5nIGFuZCBjb252ZXJ0IGl0IGludG8gYSBuYXRpdmUgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHR5cGVjYXN0KHZhbCkge1xyXG4gICAgICAgIHZhciByO1xyXG4gICAgICAgIGlmICggdmFsID09PSBudWxsIHx8IHZhbCA9PT0gJ251bGwnICkge1xyXG4gICAgICAgICAgICByID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKCB2YWwgPT09ICd0cnVlJyApIHtcclxuICAgICAgICAgICAgciA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICggdmFsID09PSAnZmFsc2UnICkge1xyXG4gICAgICAgICAgICByID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICggdmFsID09PSBVTkRFRiB8fCB2YWwgPT09ICd1bmRlZmluZWQnICkge1xyXG4gICAgICAgICAgICByID0gVU5ERUY7XHJcbiAgICAgICAgfSBlbHNlIGlmICggdmFsID09PSAnJyB8fCBpc05hTih2YWwpICkge1xyXG4gICAgICAgICAgICAvL2lzTmFOKCcnKSByZXR1cm5zIGZhbHNlXHJcbiAgICAgICAgICAgIHIgPSB2YWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy9wYXJzZUZsb2F0KG51bGwgfHwgJycpIHJldHVybnMgTmFOXHJcbiAgICAgICAgICAgIHIgPSBwYXJzZUZsb2F0KHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gdHlwZWNhc3Q7XHJcblxyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mout/string/typecast.js\n"); @@ -8173,7 +7746,6 @@ eval("\r\n\r\n var UNDEF;\r\n\r\n /**\r\n * Parses string and convert \***********************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module, __webpack_require__ */ -/*! CommonJS bailout: module.exports is used directly at 9:4-18 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_modules/mout/lang/toString.js\");\r\n /**\r\n * \"Safer\" String.toUpperCase()\r\n */\r\n function upperCase(str){\r\n str = toString(str);\r\n return str.toUpperCase();\r\n }\r\n module.exports = upperCase;\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL21vdXQvc3RyaW5nL3VwcGVyQ2FzZS5qcz84Zjc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGVBQWUsbUJBQU8sQ0FBQyw4REFBa0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9tb3V0L3N0cmluZy91cHBlckNhc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9sYW5nL3RvU3RyaW5nJyk7XHJcbiAgICAvKipcclxuICAgICAqIFwiU2FmZXJcIiBTdHJpbmcudG9VcHBlckNhc2UoKVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiB1cHBlckNhc2Uoc3RyKXtcclxuICAgICAgICBzdHIgPSB0b1N0cmluZyhzdHIpO1xyXG4gICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcclxuICAgIH1cclxuICAgIG1vZHVsZS5leHBvcnRzID0gdXBwZXJDYXNlO1xyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mout/string/upperCase.js\n"); @@ -8186,7 +7758,6 @@ eval("var toString = __webpack_require__(/*! ../lang/toString */ \"./node_module \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: module */ -/*! CommonJS bailout: module.exports is used directly at 732:31-45 */ /***/ ((module) => { eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n true ? module.exports : 0\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9HcmF2Ly4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcz85NmNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUI7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLEtBQTBCLG9CQUFvQixDQUFFO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBydW50aW1lID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgZnVuY3Rpb24gZGVmaW5lKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIG9ialtrZXldO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gSUUgOCBoYXMgYSBicm9rZW4gT2JqZWN0LmRlZmluZVByb3BlcnR5IHRoYXQgb25seSB3b3JrcyBvbiBET00gb2JqZWN0cy5cbiAgICBkZWZpbmUoe30sIFwiXCIpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbihvYmosIGtleSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBleHBvcnRzLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShcbiAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSxcbiAgICB0b1N0cmluZ1RhZ1N5bWJvbCxcbiAgICBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgKTtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBkZWZpbmUocHJvdG90eXBlLCBtZXRob2QsIGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhwb3J0cy5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgZXhwb3J0cy5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBkZWZpbmUoZ2VuRnVuLCB0b1N0cmluZ1RhZ1N5bWJvbCwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKTtcbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgZXhwb3J0cy5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yLCBQcm9taXNlSW1wbCkge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2VJbXBsLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICAvLyBJZiBhIHJlamVjdGVkIFByb21pc2Ugd2FzIHlpZWxkZWQsIHRocm93IHRoZSByZWplY3Rpb24gYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBzbyBpdCBjYW4gYmUgaGFuZGxlZCB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlSW1wbChmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBleHBvcnRzLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBleHBvcnRzLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QsIFByb21pc2VJbXBsKSB7XG4gICAgaWYgKFByb21pc2VJbXBsID09PSB2b2lkIDApIFByb21pc2VJbXBsID0gUHJvbWlzZTtcblxuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSxcbiAgICAgIFByb21pc2VJbXBsXG4gICAgKTtcblxuICAgIHJldHVybiBleHBvcnRzLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAvLyBOb3RlOiBbXCJyZXR1cm5cIl0gbXVzdCBiZSB1c2VkIGZvciBFUzMgcGFyc2luZyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBkZWZpbmUoR3AsIHRvU3RyaW5nVGFnU3ltYm9sLCBcIkdlbmVyYXRvclwiKTtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgRnVuY3Rpb24oXCJyXCIsIFwicmVnZW5lcmF0b3JSdW50aW1lID0gclwiKShydW50aW1lKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/regenerator-runtime/runtime.js\n"); @@ -8214,7 +7785,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*****************************************************/ /*! unknown exports (runtime-defined) */ /*! runtime requirements: top-level-this-exports, __webpack_require__, __webpack_exports__, module */ -/*! CommonJS bailout: this is used directly at 28:2-6 */ /***/ (function(module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * selectize.js (v0.12.6)\n * Copyright (c) 2013–2015 Brian Reavis & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis \n */\n\n/*jshint curly:false */\n/*jshint browser:true */\n\n(function(root, factory) {\n\tif (true) {\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ \"jquery\"),__webpack_require__(/*! sifter */ \"./node_modules/sifter/sifter.js\"),__webpack_require__(/*! microplugin */ \"./node_modules/microplugin/src/microplugin.js\")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}(this, function($, Sifter, MicroPlugin) {\n\t'use strict';\n\n\tvar highlight = function($element, pattern) {\n\t\tif (typeof pattern === 'string' && !pattern.length) return;\n\t\tvar regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;\n\t\n\t\tvar highlight = function(node) {\n\t\t\tvar skip = 0;\n\t\t\t// Wrap matching part of text node with highlighting , e.g.\n\t\t\t// Soccer -> Soccer for regex = /soc/i\n\t\t\tif (node.nodeType === 3) {\n\t\t\t\tvar pos = node.data.search(regex);\n\t\t\t\tif (pos >= 0 && node.data.length > 0) {\n\t\t\t\t\tvar match = node.data.match(regex);\n\t\t\t\t\tvar spannode = document.createElement('span');\n\t\t\t\t\tspannode.className = 'highlight';\n\t\t\t\t\tvar middlebit = node.splitText(pos);\n\t\t\t\t\tvar endbit = middlebit.splitText(match[0].length);\n\t\t\t\t\tvar middleclone = middlebit.cloneNode(true);\n\t\t\t\t\tspannode.appendChild(middleclone);\n\t\t\t\t\tmiddlebit.parentNode.replaceChild(spannode, middlebit);\n\t\t\t\t\tskip = 1;\n\t\t\t\t}\n\t\t\t} \n\t\t\t// Recurse element node, looking for child text nodes to highlight, unless element \n\t\t\t// is childless,