@hotstaq/admin-panel 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env +2 -0
- package/HotSite.json +0 -1
- package/assets/html/admin-header.hott +7 -3
- package/assets/js/dashboard.js +0 -46
- package/build/AppAPI.d.ts +21 -2
- package/build/AppAPI.d.ts.map +1 -1
- package/build/AppAPI.js +38 -43
- package/build/AppAPI.js.map +1 -1
- package/build/WebExport.d.ts.map +1 -1
- package/build/WebExport.js +8 -4
- package/build/WebExport.js.map +1 -1
- package/build/components/admin-button.js.map +1 -1
- package/build/components/admin-dropdown.js.map +1 -1
- package/build/components/admin-edit.js +4 -4
- package/build/components/admin-edit.js.map +1 -1
- package/build/components/admin-table-field.js +1 -1
- package/build/components/admin-table-field.js.map +1 -1
- package/build/components/admin-table-row.js.map +1 -1
- package/build/components/admin-table.d.ts +48 -2
- package/build/components/admin-table.d.ts.map +1 -1
- package/build/components/admin-table.js +136 -24
- package/build/components/admin-table.js.map +1 -1
- package/build/components/admin-text.d.ts.map +1 -1
- package/build/components/admin-text.js +2 -1
- package/build/components/admin-text.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -0
- package/build-web/AdminPanelComponents.js +2 -2
- package/build-web/AdminPanelComponents.js.LICENSE.txt +14 -0
- package/build-web/AdminPanelWeb_AppAPI.js +804 -39
- package/docker-compose.yaml +0 -1
- package/env-example +4 -2
- package/package.json +13 -6
- package/src/AppAPI.ts +54 -57
- package/src/WebExport.ts +8 -3
- package/src/components/admin-table-field.ts +1 -1
- package/src/components/admin-table.ts +211 -19
- package/src/components/admin-text.ts +2 -1
- package/start.sh +1 -1
- package/stop.sh +1 -1
- package/webpack-api.config.js +8 -2
- package/webpack.config.cjs +7 -1
- package/dbstart.sh +0 -14
- package/dbstop.sh +0 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var AdminPanelComponentsWeb;(()=>{"use strict";var t={79:t=>{t.exports=HotStaqWeb},91:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDropdown=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dropdown",this.placeholder="Search",this.onsearch=null,this.onselect=null}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onsearch&&("string"==typeof this.onsearch&&(this.onsearch=new Function(this.onsearch)),e.querySelector("input").addEventListener("keyup",(t=>i(this,void 0,void 0,(function*(){const e=t.currentTarget.value;let n=yield this.onsearch(e,t),i=$(this.htmlElements[1]).find(".searchResults");i.empty();for(let t=0;t<n.length;t++){const e=n[t];let l=e.url,s=e.value,o=e.text;i.append($(`<li><a class="dropdown-item" href="${l}" data-value = "${s}" onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selected (${t});">${o}</a></li>`))}}))))),null}selected(t){return i(this,void 0,void 0,(function*(){if(null!=this.onselect){"string"==typeof this.onselect&&(this.onselect=new Function(this.onselect));const e=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("href"),n=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("data-value"),i=this.htmlElements[1].querySelectorAll("a")[t].innerHTML;yield this.onselect(e,n,i)}}))}output(){return`<div class="dropdown">\n\t\t<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">\n\t\t ${this.inner}\n\t\t</button>\n\t\t<ul class="dropdown-menu">\n\t\t\t<li>\n\t\t\t\t<div class = "input-group">\n\t\t\t\t\t<input type = "text" class = "form-control" placeholder = "${this.placeholder}" value = "" />\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t\t<div class = "searchResults">\n\t\t\t</div>\n\t\t</ul>\n\t</div>`}}e.AdminDropdown=s},383:t=>{t.exports=bootstrap},494:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const s=n(79),o=l(n(383));class d extends s.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="Save",this.attached_list="",this.schema="",this.modalId="",this.add_text="Add",this.add_place_here="dashboardHeader",this.edit_text="Edit",this.edit_place_here="dashboardHeader",this.remove_text="Remove",this.remove_place_here="dashboardHeader",this.css_class="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[],this.onsave=null,this.onedit=null,this.ondelete=null}processHotFields(t){return i(this,void 0,void 0,(function*(){const e=this.htmlElements[1].querySelectorAll("[hot-field]");for(let n=0;n<e.length;n++){const i=e[n],l=$(i).attr("hot-field");let s=$(i).attr("hot-field-type"),o=$(i).attr("hot-field-input");null!=s&&""!==s||(s="text"),i.fieldType=s,yield t(i,{name:l,type:s,input:o})}}))}addClicked(t=[]){return i(this,void 0,void 0,(function*(){if(null==this.onAddClicked||!1!==(yield this.onAddClicked())){if(this.modalType="add",yield this.processHotFields(((t,e)=>i(this,void 0,void 0,(function*(){$(t).val("")})))),this.selectedFields=t,null!=this.onadd){"string"==typeof this.onadd&&(this.onadd=new Function(this.onadd));let t=yield this.onadd(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}getAttachedLists(){const t=this.attached_list.split(","),e=[];for(let n=0;n<t.length;n++){const i=t[n];let l=document.getElementById(i);e.push(l)}return e}editClicked(t,e=[]){return i(this,void 0,void 0,(function*(){if(null==this.onEditClicked||!1!==(yield this.onEditClicked())){if(this.modalType="edit",this.selectedFields=e,""!==this.attached_list){t.attachedEdit=this;let e=t.getSelected();null!=e&&(yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){let i=e[n.name];if(null!=n.input&&""!==n.input){let e=new Function(n.input);i=yield e.call(this,this,t,i)}null!=i&&$(t).val(i)})))),this.selectedFields=[e])}if(null!=this.onedit){"string"==typeof this.onedit&&(this.onedit=new Function(this.onedit));let t=yield this.onedit(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=[],e=null;if(""!==this.attached_list){const n=this.getAttachedLists();for(let i=0;i<n.length;i++){e=n[i].hotComponent,e.attachedEdit=this;let l=e.getCheckedRows();if(l.length>0)for(let e=0;e<l.length;e++){let n=l[e];t.push(n)}let s=e.getSelected();null!=s&&(t=[s])}}if(!0===confirm("Are you sure you want to remove this item?")){for(let n=0;n<t.length;n++){let i=t[n];if(null!=e)for(let t in i){let n=e.getFieldType(t);null!=n&&"remove"===n&&delete i[t]}if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(i);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:i})}}if(0===t.length)if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(null);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:null})}null!=e&&(yield e.refreshList())}}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};if(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(e).val();if(null!=$(e).attr("hot-value")&&(i=$(e).attr("hot-value")),null!=$(e).attr("hot-field-save")){let t=$(e).attr("hot-field-save");if(null!=t&&""!==t){let n=new Function(t);i=yield n.call(this,this,e,i)}}if("array"===n.type)return null==t[n.name]&&(t[n.name]=[]),void t[n.name].push(i);t[n.name]=i})))),null!=this.onsave){if("string"==typeof this.onsave&&(this.onsave=new Function(this.onsave)),!1===(yield this.onsave(this.modalType,t,this.selectedFields)))return}else{if("add"===this.modalType){let e=s.Hot.Data.AdminPanel.addUrl;yield s.Hot.jsonRequest(e,{schema:this.schema,fields:t})}if("edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e={};yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(t).val();if(null!=$(t).attr("hot-value")&&(i=$(t).attr("hot-value")),"array"===n.type)return null==e[n.name]&&(e[n.name]=[]),void e[n.name].push(i);e[n.name]=i}))));let n=s.Hot.Data.AdminPanel.editUrl;yield s.Hot.jsonRequest(n,{schema:this.schema,whereFields:e,fields:t})}}if(""!==this.attached_list){const t=this.getAttachedLists();for(let e=0;e<t.length;e++){let n=t[e].hotComponent;n.attachedEdit=this,yield n.refreshList()}}!0===this.closeOnSave&&o.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new o.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),setTimeout((()=>{if(""!==this.attached_list){const t=this.getAttachedLists();for(let e=0;e<t.length;e++){let n=t[e].hotComponent;null!=n&&(n.attachedEdit=this)}}}),50),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");this.modalId=`${this.name}Modal`;let t=[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade ${this.css_class}" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"}];return""!==this.add_place_here&&t.push({html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">${this.add_text}</button>`,documentSelector:`hot-place-here[name="${this.add_place_here}"]`}),""!==this.edit_place_here&&t.push({html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">${this.edit_text}</button>`,documentSelector:`hot-place-here[name="${this.edit_place_here}"]`}),""!==this.remove_place_here&&t.push({html:`<button id = "${this.modalId}-remove-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">${this.remove_text}</button>`,documentSelector:`hot-place-here[name="${this.remove_place_here}"]`}),t}}e.AdminEdit=d},594:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button",this.css_class="btn btn-sm btn-outline-secondary",this.onclick=null}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onclick&&("string"==typeof this.onclick&&(this.onclick=new Function(this.onclick)),e.addEventListener("click",this.onclick)),null}output(){return`<button id = "${this.htmlElements[0].id}" class = "${this.css_class}" onclick = "this.buttonClicked ();">${this.inner}</button>`}}e.AdminButton=s},620:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headers={fields:{},elements:{},indicies:[]},this.rowElements=[],this.onlist=null,this.listurl="",this.checkbox=!0,this.singleclickedit=!1,this.onselectedrow=null,this.attachedEdit=null,this.selected=-1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.field),this.headers.fields[t.field]=t,this.headers.elements[t.field]=e}getFieldType(t){if(null!=this.headers.elements[t]){let e=this.headers.elements[t].hotComponent;if(null!=e)return e.field_type}return null}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null!=this.onselectedrow){"string"==typeof this.onselectedrow&&(this.onselectedrow=new Function(this.onselectedrow));let t=null;if(null!=this.rowElements[e]&&(t=this.rowElements[e].fields),!1===(yield this.onselectedrow(e,t)))return}{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e,"string"==typeof this.singleclickedit&&(this.singleclickedit=l.HotStaq.parseBoolean(this.singleclickedit)),!0===this.singleclickedit&&null!=this.attachedEdit&&(yield this.attachedEdit.editClicked(this))}))}getSelected(){let t=this.selected;return t<0?null:this.rowElements[t].fields}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){if(null==t)return;if(0==t.length)return;let e=this.htmlElements[1].getElementsByTagName("tbody")[0],n=this.rowElements.length,i=`<tr onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selectRow (this, ${n});">`;"string"==typeof this.checkbox&&(this.checkbox=l.HotStaq.parseBoolean(this.checkbox)),!0===this.checkbox?i+='<td><input type = "checkbox" /></td>':i+="<td></td>";for(let e=0;e<this.headers.indicies.length;e++){let l=this.headers.indicies[e];if(null==l)continue;let s=t[l],o=l.split(".");if(o.length>1){let e=t[o[0]];for(let t=1;t<o.length;t++)e=e[o[t]];s=e}if(null!=this.headers.elements[l]){let t=this.getFieldType(l);if(null==t&&(t="text"),"remove"!==t){const t=this.headers.fields[l];let e=!0;null!=t&&(null!=t.oninput&&("string"==typeof t.oninput&&(this.headers.fields[l].oninput=new Function(t.oninput)),s=t.oninput(s)),null!=t.onoutput)&&("string"==typeof t.onoutput&&(this.headers.fields[l].onoutput=new Function(t.onoutput)),e=!1,i+=t.onoutput(n,s)),!0===e&&(i+=`<td data-index = "${n}">${s}</td>`)}}}i+="</tr>";let s=l.HotStaq.addHtml(e,i);this.rowElements.push({fields:t,element:s})}clearRows(){return i(this,void 0,void 0,(function*(){this.rowElements=[],this.htmlElements[1].getElementsByTagName("tbody")[0].innerHTML=""}))}refreshList(t=null){return i(this,void 0,void 0,(function*(){if(null!=this.onlist)"string"==typeof this.onlist&&(this.onlist=new Function(this.onlist)),t=yield this.onlist();else{let e="";""!==this.listurl&&(e=this.listurl),""!==e&&(t=yield l.Hot.jsonRequest(e,{schema:this.schema}))}if(this.clearRows(),null!=t)for(let e=0;e<t.length;e++){let n=t[e];this.addRow(n)}}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){yield this.refreshList()}))),50),null}output(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<hot-place-here name = "afterTable"></hot-place-here>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=s},741:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.no_output="0",this.css_class="form-control"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null}output(){let t="";if(null!=this.value&&(t=this.value),"1"===this.no_output)return`<div><input class="${this.css_class}" type = "hidden" value = "${t}" /></div>`;const e=this.htmlElements[0].getAttribute("hot-field");let n=this.htmlElements[0].getAttribute("hot-field-type");return null==n&&(n="text"),`<div>\n\t\t\t<label class="form-label">${this.inner}</label>\n\t\t\t<input class="${this.css_class}" type = "text" hot-field = "${e}" hot-field-type = "${n}" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},837:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0,this.field_type="text",this.no_output="0",this.oninput=null,this.onoutput=null}onPostPlace(t,e){let n=null;return n=null!=t.parentNode.parentNode.hotComponent?t.parentNode.parentNode.hotComponent:t.parentNode.parentNode.parentNode.parentNode.hotComponent,null!=n&&n.addHeaderDataOnly(this,e),null}output(){return"1"===this.no_output?[{html:"<div></div>",placeHereParent:"afterTable"}]:[{html:`<th>${this.inner}</th>`,placeHereParent:"header"}]}}e.AdminTableField=l},877:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}}e.AdminTableRow=l},924:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return null==i.Hot.Data.AdminPanel&&(i.Hot.Data.AdminPanel={}),null==i.Hot.Data.AdminPanel.baseUrl&&(i.Hot.Data.AdminPanel.baseUrl=this.base),null==i.Hot.Data.AdminPanel.addUrl&&(i.Hot.Data.AdminPanel.addUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/add`),null==i.Hot.Data.AdminPanel.editUrl&&(i.Hot.Data.AdminPanel.editUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/edit`),null==i.Hot.Data.AdminPanel.removeUrl&&(i.Hot.Data.AdminPanel.removeUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/remove`),null==i.Hot.Data.AdminPanel.listUrl&&(i.Hot.Data.AdminPanel.listUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/list`),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "dashboardHeader"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var s=e[i]={exports:{}};return t[i].call(s.exports,s,s.exports,n),s.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminDropdown=t.AdminButton=void 0;const e=n(594);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(91);Object.defineProperty(t,"AdminDropdown",{enumerable:!0,get:function(){return l.AdminDropdown}});const s=n(924);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return s.AdminDashboard}});const o=n(494);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return o.AdminEdit}});const d=n(620);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const a=n(837);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return a.AdminTableField}});const r=n(877);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return r.AdminTableRow}});const h=n(741);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return h.AdminText}})})(),AdminPanelComponentsWeb=i})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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V0FBV3NFLFVBQ3ZCLEVBQUF4RSxJQUFJQyxLQUFLQyxXQUFXc0UsUUFBVSxHQUFHLEVBQUF4RSxJQUFJQyxLQUFLQyxXQUFXa0Ysd0JBRS9DLElBQ1IsQ0FFQSxNQUFBMUosR0FFQyxNQUFPLG1OQUdZcEMsS0FBSzJDLGdTQVN6QixFQTVERCxrQixHQ0RJb0osRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCRSxJQUFqQkQsRUFDSCxPQUFPQSxFQUFhMU0sUUFHckIsSUFBSUQsRUFBU3dNLEVBQXlCRSxHQUFZLENBR2pEek0sUUFBUyxDQUFDLEdBT1gsT0FIQTRNLEVBQW9CSCxHQUFVbkcsS0FBS3ZHLEVBQU9DLFFBQVNELEVBQVFBLEVBQU9DLFFBQVN3TSxHQUdwRXpNLEVBQU9DLE9BQ2YsQyxxTUN0QkEsZUFVRSwyRUFWTyxFQUFBcUksV0FBVyxJQUNwQixjQVVFLDZFQVZPLEVBQUFuSSxhQUFhLElBQ3RCLGVBVUUsOEVBVk8sRUFBQWtNLGNBQWMsSUFDdkIsZUFVRSx5RUFWTyxFQUFBckosU0FBUyxJQUNsQixlQVVFLDBFQVZPLEVBQUEwRixVQUFVLElBQ25CLGVBVUUsK0VBVk8sRUFBQXFELGVBQWUsSUFDeEIsZUFVRSw2RUFWTyxFQUFBRyxhQUFhLElBQ3RCLGVBVUUseUVBVk8sRUFBQU4sU0FBUyxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvZXh0ZXJuYWwgdmFyIFwiSG90U3RhcVdlYlwiIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvZXh0ZXJuYWwgdmFyIFwiYm9vdHN0cmFwXCIiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1lZGl0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uLnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10ZXh0LnRzIiwid2VicGFjazovL0FkbWluUGFuZWxDb21wb25lbnRzV2ViLy4vc3JjL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS1yb3cudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1kYXNoYm9hcmQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBIb3RTdGFxV2ViOyIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5Ecm9wZG93biBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHNlYXJjaCBzdHJpbmcgcGxhY2Vob2xkZXIgdG8gc2hvdy5cblx0ICovXG5cdHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIHRoZSBrZXlib2FyZCB1cCBidXR0b24gaXMgdHJpZ2dlcmVkLlxuXHQgKi9cblx0b25zZWFyY2g6IChzZWFyY2hUZXh0OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBQcm9taXNlPHsgdXJsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgfVtdPjtcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gYW4gc2VhcmNoIHJlc3VsdCBoYXMgYmVlbiBzZWxlY3RlZC5cblx0ICovXG5cdG9uc2VsZWN0OiAodXJsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1kcm9wZG93blwiO1xuXHRcdHRoaXMucGxhY2Vob2xkZXIgPSBcIlNlYXJjaFwiO1xuXHRcdHRoaXMub25zZWFyY2ggPSBudWxsO1xuXHRcdHRoaXMub25zZWxlY3QgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25zZWFyY2ggIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2VhcmNoKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNlYXJjaCA9ICg8KHNlYXJjaFRleHQ6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFByb21pc2U8eyB1cmw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyB9W10+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbnNlYXJjaCkpO1xuXG5cdFx0XHRodG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yIChcImlucHV0XCIpLmFkZEV2ZW50TGlzdGVuZXIgKFwia2V5dXBcIiwgXG5cdFx0XHRcdGFzeW5jIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT5cblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRjb25zdCBzZWFyY2hUZXh0ID0gZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZTtcblxuXHRcdFx0XHRcdGxldCByZXN1bHRzID0gYXdhaXQgdGhpcy5vbnNlYXJjaCAoc2VhcmNoVGV4dCwgZXZlbnQpO1xuXG5cdFx0XHRcdFx0bGV0IHNlYXJjaFJlc3VsdHNEaXYgPSAkKHRoaXMuaHRtbEVsZW1lbnRzWzFdKS5maW5kIChcIi5zZWFyY2hSZXN1bHRzXCIpO1xuXG5cdFx0XHRcdFx0c2VhcmNoUmVzdWx0c0Rpdi5lbXB0eSAoKTtcblxuXHRcdFx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgcmVzdWx0cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSByZXN1bHRzW2lJZHhdO1xuXHRcdFx0XHRcdFx0bGV0IHVybDogc3RyaW5nID0gcmVzdWx0LnVybDtcblx0XHRcdFx0XHRcdGxldCB2YWx1ZTogc3RyaW5nID0gcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdFx0bGV0IHRleHQ6IHN0cmluZyA9IHJlc3VsdC50ZXh0O1xuXG5cdFx0XHRcdFx0XHRzZWFyY2hSZXN1bHRzRGl2LmFwcGVuZCAoJChgPGxpPjxhIGNsYXNzPVxcXCJkcm9wZG93bi1pdGVtXFxcIiBocmVmPVxcXCIke3VybH1cXFwiIGRhdGEtdmFsdWUgPSBcIiR7dmFsdWV9XCIgb25jbGljayA9IFxcXCJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50LnNlbGVjdGVkICgke2lJZHh9KTtcXFwiPiR7dGV4dH08L2E+PC9saT5gKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVkIHdoZW4gYW4gaXRlbSBpcyBzZWxlY3RlZC5cblx0ICovXG5cdGFzeW5jIHNlbGVjdGVkIChpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25zZWxlY3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2VsZWN0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNlbGVjdCA9ICg8KHVybDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2VsZWN0KSk7XG5cblx0XHRcdGNvbnN0IHVybCA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiYVwiKVtpbmRleF0uZ2V0QXR0cmlidXRlIChcImhyZWZcIik7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiYVwiKVtpbmRleF0uZ2V0QXR0cmlidXRlIChcImRhdGEtdmFsdWVcIik7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJhXCIpW2luZGV4XS5pbm5lckhUTUw7XG5cblx0XHRcdGF3YWl0IHRoaXMub25zZWxlY3QgKHVybCwgdmFsdWUsIHRleHQpO1xuXHRcdH1cblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKFxuXHRgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XG5cdFx0PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuXHRcdCAgJHt0aGlzLmlubmVyfVxuXHRcdDwvYnV0dG9uPlxuXHRcdDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cblx0XHRcdDxsaT5cblx0XHRcdFx0PGRpdiBjbGFzcyA9IFwiaW5wdXQtZ3JvdXBcIj5cblx0XHRcdFx0XHQ8aW5wdXQgdHlwZSA9IFwidGV4dFwiIGNsYXNzID0gXCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlciA9IFwiJHt0aGlzLnBsYWNlaG9sZGVyfVwiIHZhbHVlID0gXCJcIiAvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvbGk+XG5cdFx0XHQ8ZGl2IGNsYXNzID0gXCJzZWFyY2hSZXN1bHRzXCI+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L3VsPlxuXHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBib290c3RyYXA7IiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuaW1wb3J0IGJvb3RzdHJhcCBmcm9tIFwiYm9vdHN0cmFwXCI7XG5cbmltcG9ydCB7IEFkbWluVGFibGUgfSBmcm9tIFwiLi9hZG1pbi10YWJsZVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5FZGl0IGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhpcyBlZGl0IG1vZGFsLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBidXR0b24gdGl0bGUuXG5cdCAqL1xuXHRidXR0b25fdGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBsaXN0LlxuXHQgKi9cblx0YXR0YWNoZWRfbGlzdDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIHNjaGVtYS5cblx0ICovXG5cdHNjaGVtYTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIG1vZGFsIGlkLlxuXHQgKi9cblx0bW9kYWxJZDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgZm9yIHRoZSBhZGQgYnV0dG9uLlxuXHQgKi9cblx0YWRkX3RleHQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBsb2NhdGlvbiB0byBwdXQgdGhlIGFkZCBidXR0b24uXG5cdCAqL1xuXHRhZGRfcGxhY2VfaGVyZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgZm9yIHRoZSBlZGl0IGJ1dHRvbi5cblx0ICovXG5cdGVkaXRfdGV4dDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGxvY2F0aW9uIHRvIHB1dCB0aGUgZWRpdCBidXR0b24uXG5cdCAqL1xuXHRlZGl0X3BsYWNlX2hlcmU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSB0ZXh0IGZvciB0aGUgcmVtb3ZlIGJ1dHRvbi5cblx0ICovXG5cdHJlbW92ZV90ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbG9jYXRpb24gdG8gcHV0IHRoZSByZW1vdmUgYnV0dG9uLlxuXHQgKi9cblx0cmVtb3ZlX3BsYWNlX2hlcmU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBob3QtY2xhc3MgYXR0cmlidXRlIHRvIHBhc3MgdG8gYWRkIHRvIHRoZSBtb2RhbCdzIGNsYXNzZXMuXG5cdCAqL1xuXHRjc3NfY2xhc3M6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBib290c3RyYXAgbW9kYWwgaW5zdGFuY2UuXG5cdCAqL1xuXHRtb2RhbDogYm9vdHN0cmFwLk1vZGFsO1xuXHQvKipcblx0ICogSWYgc2V0IHRvIHRydWUsIHRoaXMgd2lsbCBjbG9zZSB0aGUgbW9kYWwgd2hlbiBzYXZlIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRjbG9zZU9uU2F2ZTogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFRoZSB0eXBlIG9mIG1vZGFsIHRvIG9wZW4uIENhbiBiZTpcblx0ICogKiBhZGRcblx0ICogKiBlZGl0XG5cdCAqICogcmVtb3ZlXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbW9kYWxUeXBlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0ZWQgZmllbGRzLlxuXHQgKi9cblx0cHJvdGVjdGVkIHNlbGVjdGVkRmllbGRzOiBhbnlbXTtcblx0LyoqXG5cdCAqIFdoYXQgdG8gZXhlY3V0ZSB3aGVuIHRoZSBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkLiBJZiB0aGlzIHJldHVybnMgdHJ1ZSwgdGhlIG1vZGFsIHdpbGwgY2xvc2UuXG5cdCAqIElmIHRoaXMgcmV0dXJucyBmYWxzZSwgdGhlIG1vZGFsIHdpbGwgbm90IGNsb3NlLlxuXHQgKi9cblx0b25zYXZlOiAobW9kYWxUeXBlOiBzdHJpbmcsIHZhbHVlczogYW55LCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cdC8qKlxuXHQgKiBXaGF0IHRvIGV4ZWN1dGUgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9uYWRkOiAobW9kYWxUeXBlOiBzdHJpbmcsIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblx0LyoqXG5cdCAqIFdoYXQgdG8gZXhlY3V0ZSB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25lZGl0OiAobW9kYWxUeXBlOiBzdHJpbmcsIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblx0LyoqXG5cdCAqIFdoYXQgdG8gZXhlY3V0ZSB3aGVuIHRoZSBkZWxldGUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmRlbGV0ZTogKHNlbGVjdGVkRmllbGQ6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1lZGl0XCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5idXR0b25fdGl0bGUgPSBcIlNhdmVcIjtcblx0XHR0aGlzLmF0dGFjaGVkX2xpc3QgPSBcIlwiO1xuXHRcdHRoaXMuc2NoZW1hID0gXCJcIjtcblxuXHRcdHRoaXMubW9kYWxJZCA9IFwiXCI7XG5cdFx0dGhpcy5hZGRfdGV4dCA9IFwiQWRkXCI7XG5cdFx0dGhpcy5hZGRfcGxhY2VfaGVyZSA9IFwiZGFzaGJvYXJkSGVhZGVyXCI7XG5cdFx0dGhpcy5lZGl0X3RleHQgPSBcIkVkaXRcIjtcblx0XHR0aGlzLmVkaXRfcGxhY2VfaGVyZSA9IFwiZGFzaGJvYXJkSGVhZGVyXCI7XG5cdFx0dGhpcy5yZW1vdmVfdGV4dCA9IFwiUmVtb3ZlXCI7XG5cdFx0dGhpcy5yZW1vdmVfcGxhY2VfaGVyZSA9IFwiZGFzaGJvYXJkSGVhZGVyXCI7XG5cdFx0dGhpcy5jc3NfY2xhc3MgPSBcIlwiO1xuXHRcdHRoaXMubW9kYWwgPSBudWxsO1xuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJhZGRcIjtcblx0XHR0aGlzLmNsb3NlT25TYXZlID0gdHJ1ZTtcblx0XHR0aGlzLnNlbGVjdGVkRmllbGRzID0gW107XG5cdFx0dGhpcy5vbnNhdmUgPSBudWxsO1xuXHRcdHRoaXMub25lZGl0ID0gbnVsbDtcblx0XHR0aGlzLm9uZGVsZXRlID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm9jZXNzIHRoZSBob3QgZmllbGRzLlxuXHQgKi9cblx0YXN5bmMgcHJvY2Vzc0hvdEZpZWxkcyAob25GaWVsZDogKGh0bWxFbGVtZW50OiBFbGVtZW50LCBcblx0XHRmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgaW5wdXQ6IHN0cmluZzsgfSkgPT4gUHJvbWlzZTx2b2lkPik6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGNvbnN0IGVsbXMgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5xdWVyeVNlbGVjdG9yQWxsIChcIltob3QtZmllbGRdXCIpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBlbG1zLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGNvbnN0IGVsbSA9IGVsbXNbaUlkeF07XG5cdFx0XHRjb25zdCBmaWVsZCA9ICQoZWxtKS5hdHRyIChcImhvdC1maWVsZFwiKTtcblx0XHRcdGxldCBmaWVsZFR5cGUgPSAkKGVsbSkuYXR0ciAoXCJob3QtZmllbGQtdHlwZVwiKTtcblx0XHRcdGxldCBmaWVsZElucHV0ID0gJChlbG0pLmF0dHIgKFwiaG90LWZpZWxkLWlucHV0XCIpO1xuXG5cdFx0XHRpZiAoKGZpZWxkVHlwZSA9PSBudWxsKSB8fCAoZmllbGRUeXBlID09PSBcIlwiKSlcblx0XHRcdFx0ZmllbGRUeXBlID0gXCJ0ZXh0XCI7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGVsbS5maWVsZFR5cGUgPSBmaWVsZFR5cGU7XG5cblx0XHRcdGF3YWl0IG9uRmllbGQgKGVsbSwgeyBuYW1lOiBmaWVsZCwgdHlwZTogZmllbGRUeXBlLCBpbnB1dDogZmllbGRJbnB1dCB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSBhZGQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgYWRkIG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25BZGRDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgYWRkIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgYWRkQ2xpY2tlZCAoc2VsZWN0ZWRGaWVsZHM6IGFueVtdID0gW10pOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbkFkZENsaWNrZWQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkFkZENsaWNrZWQgKCk7XG5cblx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RhbFR5cGUgPSBcImFkZFwiO1xuXG5cdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChcblx0XHRcdGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pID0+XG5cdFx0XHR7XG5cdFx0XHRcdCQoaHRtbEVsZW1lbnQpLnZhbCAoXCJcIik7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBzZWxlY3RlZEZpZWxkcztcblxuXHRcdGlmICh0aGlzLm9uYWRkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmFkZCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25hZGQgPSAoPChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbmFkZCkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbmFkZCAodGhpcy5tb2RhbFR5cGUsIHRoaXMuc2VsZWN0ZWRGaWVsZHMpO1xuXG5cdFx0XHRpZiAocmVzdWx0ICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UgKGAjJHt0aGlzLm1vZGFsSWR9YCkuc2hvdyAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZXZlbnQgdGhhdCBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZWRpdCBtb2RhbCBvcGVucy5cblx0ICovXG5cdG9uRWRpdENsaWNrZWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGF0dGFjaGVkIGxpc3RzLlxuXHQgKi9cblx0Z2V0QXR0YWNoZWRMaXN0cyAoKTogSFRNTEVsZW1lbnRbXVxuXHR7XG5cdFx0Y29uc3Qgc3RycyA9IHRoaXMuYXR0YWNoZWRfbGlzdC5zcGxpdCAoXCIsXCIpO1xuXHRcdGNvbnN0IGF0dGFjaGVkTGlzdHM6IEhUTUxFbGVtZW50W10gPSBbXTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc3Rycy5sZW5ndGg7IGkrKylcblx0XHR7XG5cdFx0XHRjb25zdCBhdHRhY2hlZExpc3QgPSBzdHJzW2ldO1xuXHRcdFx0bGV0IGF0dGFjaGVkTGlzdE9iaiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkIChhdHRhY2hlZExpc3QpO1xuXHRcdFx0YXR0YWNoZWRMaXN0cy5wdXNoIChhdHRhY2hlZExpc3RPYmopO1xuXHRcdH1cblxuXHRcdHJldHVybiAoYXR0YWNoZWRMaXN0cyk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIGVkaXRDbGlja2VkIChhdHRhY2hlZExpc3Q6IEFkbWluVGFibGUsIHNlbGVjdGVkRmllbGRzOiBhbnlbXSA9IFtdKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25FZGl0Q2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uRWRpdENsaWNrZWQgKCk7XG5cblx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5tb2RhbFR5cGUgPSBcImVkaXRcIjtcblxuXHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBzZWxlY3RlZEZpZWxkcztcblxuXHRcdGlmICh0aGlzLmF0dGFjaGVkX2xpc3QgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0YXR0YWNoZWRMaXN0LmF0dGFjaGVkRWRpdCA9IHRoaXM7XG5cdFx0XHRsZXQgc2VsZWN0ZWRGaWVsZCA9IGF0dGFjaGVkTGlzdC5nZXRTZWxlY3RlZCAoKTtcblxuXHRcdFx0aWYgKHNlbGVjdGVkRmllbGQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChcblx0XHRcdFx0XHRhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyB9KSA9PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IHNlbGVjdGVkRmllbGRbZmllbGQubmFtZV07XG5cblx0XHRcdFx0XHRcdGlmIChmaWVsZC5pbnB1dCAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuaW5wdXQgIT09IFwiXCIpXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbiAoZmllbGQuaW5wdXQpO1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlID0gYXdhaXQgZnVuYy5jYWxsICh0aGlzLCB0aGlzLCBodG1sRWxlbWVudCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICh2YWx1ZSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHQkKGh0bWxFbGVtZW50KS52YWwgKHZhbHVlKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkRmllbGRzID0gW3NlbGVjdGVkRmllbGRdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLm9uZWRpdCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25lZGl0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbmVkaXQgPSAoPChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbmVkaXQpKTtcblxuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25lZGl0ICh0aGlzLm1vZGFsVHlwZSwgdGhpcy5zZWxlY3RlZEZpZWxkcyk7XG5cblx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5zaG93ICgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHJlbW92ZSBtb2RhbCBvcGVucy5cblx0ICovXG5cdG9uUmVtb3ZlQ2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIHJlbW92ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdGFzeW5jIHJlbW92ZUNsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uUmVtb3ZlQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uUmVtb3ZlQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwicmVtb3ZlXCI7XG5cblx0XHRsZXQgd2hlcmVGaWVsZHM6IGFueVtdID0gW107XG5cdFx0bGV0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZSA9IG51bGw7XG5cblx0XHRpZiAodGhpcy5hdHRhY2hlZF9saXN0ICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdGNvbnN0IGF0dGFjaGVkTGlzdHMgPSB0aGlzLmdldEF0dGFjaGVkTGlzdHMgKCk7XG5cblx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgYXR0YWNoZWRMaXN0cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdHtcblx0XHRcdFx0bGV0IGF0dGFjaGVkTGlzdCA9IGF0dGFjaGVkTGlzdHNbaUlkeF07XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0aG90Q29tcG9uZW50ID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblx0XHRcdFx0aG90Q29tcG9uZW50LmF0dGFjaGVkRWRpdCA9IHRoaXM7XG5cdFx0XHRcdGxldCBjaGVja2VkUm93cyA9IGhvdENvbXBvbmVudC5nZXRDaGVja2VkUm93cyAoKTtcblxuXHRcdFx0XHRpZiAoY2hlY2tlZFJvd3MubGVuZ3RoID4gMClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hlY2tlZFJvd3MubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bGV0IGNoZWNrZWRSb3cgPSBjaGVja2VkUm93c1tpXTtcblx0XHRcdFx0XHRcdHdoZXJlRmllbGRzLnB1c2ggKGNoZWNrZWRSb3cpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBzZWxlY3RlZEZpZWxkID0gaG90Q29tcG9uZW50LmdldFNlbGVjdGVkICgpO1xuXG5cdFx0XHRcdGlmIChzZWxlY3RlZEZpZWxkICE9IG51bGwpXG5cdFx0XHRcdFx0d2hlcmVGaWVsZHMgPSBbc2VsZWN0ZWRGaWVsZF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29uZmlybWVkOiBib29sZWFuID0gY29uZmlybSAoXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgaXRlbT9cIik7XG5cblx0XHRpZiAoY29uZmlybWVkID09PSB0cnVlKVxuXHRcdHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgd2hlcmVGaWVsZHMubGVuZ3RoOyBpKyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCB3aGVyZUZpZWxkID0gd2hlcmVGaWVsZHNbaV07XG5cblx0XHRcdFx0aWYgKGhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFueSBmaWVsZHMgdGhhdCBhcmUgbWFya2VkIGFzIHJlbW92ZS5cblx0XHRcdFx0XHRmb3IgKGxldCBrZXkgaW4gd2hlcmVGaWVsZClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsZXQgZmllbGRUeXBlID0gaG90Q29tcG9uZW50LmdldEZpZWxkVHlwZSAoa2V5KTtcblxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkVHlwZSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGRUeXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSB3aGVyZUZpZWxkW2tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMub25kZWxldGUgIT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25kZWxldGUpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdFx0dGhpcy5vbmRlbGV0ZSA9ICg8KHNlbGVjdGVkRmllbGQ6IGFueSkgPT4gUHJvbWlzZTx2b2lkPj5uZXcgRnVuY3Rpb24gKHRoaXMub25kZWxldGUpKTtcblxuXHRcdFx0XHRcdGF3YWl0IHRoaXMub25kZWxldGUgKHdoZXJlRmllbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxldCByZW1vdmVVcmw6IHN0cmluZyA9IEhvdC5EYXRhLkFkbWluUGFuZWwucmVtb3ZlVXJsO1xuXG5cdFx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChyZW1vdmVVcmwsIHtcblx0XHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh3aGVyZUZpZWxkcy5sZW5ndGggPT09IDApXG5cdFx0XHR7XG5cdFx0XHRcdGlmICh0aGlzLm9uZGVsZXRlICE9IG51bGwpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uZGVsZXRlKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdHRoaXMub25kZWxldGUgPSAoPChzZWxlY3RlZEZpZWxkOiBhbnkpID0+IFByb21pc2U8dm9pZD4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uZGVsZXRlKSk7XG5cblx0XHRcdFx0XHRhd2FpdCB0aGlzLm9uZGVsZXRlIChudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsZXQgcmVtb3ZlVXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybDtcblxuXHRcdFx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAocmVtb3ZlVXJsLCB7XG5cdFx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHRcdHdoZXJlRmllbGRzOiBudWxsXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcblx0XHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdFx0YXdhaXQgaG90Q29tcG9uZW50LnJlZnJlc2hMaXN0ICgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlIHRoaXMgZm9ybS5cblx0ICovXG5cdGFzeW5jIG9uU2F2ZSAoKVxuXHR7XG5cdFx0bGV0IHZhbHVlczogYW55ID0ge307XG5cblx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pID0+XG5cdFx0XHR7XG5cdFx0XHRcdGlmIChmaWVsZC50eXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRsZXQgdmFsdWUgPSAkKGh0bWxFbGVtZW50KS52YWwgKCk7XG5cblx0XHRcdFx0aWYgKCQoaHRtbEVsZW1lbnQpLmF0dHIgKFwiaG90LXZhbHVlXCIpICE9IG51bGwpXG5cdFx0XHRcdFx0dmFsdWUgPSAkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKTtcblxuXHRcdFx0XHRpZiAoJChodG1sRWxlbWVudCkuYXR0ciAoXCJob3QtZmllbGQtc2F2ZVwiKSAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IGZpZWxkU2F2ZSA9ICQoaHRtbEVsZW1lbnQpLmF0dHIgKFwiaG90LWZpZWxkLXNhdmVcIik7XG5cblx0XHRcdFx0XHRpZiAoZmllbGRTYXZlICE9IG51bGwpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkU2F2ZSAhPT0gXCJcIilcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0bGV0IGZ1bmMgPSBuZXcgRnVuY3Rpb24gKGZpZWxkU2F2ZSk7XG5cdFx0XHRcdFx0XHRcdHZhbHVlID0gYXdhaXQgZnVuYy5jYWxsICh0aGlzLCB0aGlzLCBodG1sRWxlbWVudCwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWVsZC50eXBlID09PSBcImFycmF5XCIpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZiAodmFsdWVzW2ZpZWxkLm5hbWVdID09IG51bGwpXG5cdFx0XHRcdFx0XHR2YWx1ZXNbZmllbGQubmFtZV0gPSBbXTtcblxuXHRcdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXS5wdXNoICh2YWx1ZSk7XG5cblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YWx1ZXNbZmllbGQubmFtZV0gPSB2YWx1ZTtcblx0XHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMub25zYXZlICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbnNhdmUpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2F2ZSA9ICg8KG1vZGFsVHlwZTogc3RyaW5nLCB2YWx1ZXM6IGFueSwgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbnNhdmUpKTtcblxuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25zYXZlICh0aGlzLm1vZGFsVHlwZSwgdmFsdWVzLCB0aGlzLnNlbGVjdGVkRmllbGRzKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLm1vZGFsVHlwZSA9PT0gXCJhZGRcIilcblx0XHRcdHtcblx0XHRcdFx0bGV0IGFkZFVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmw7XG5cblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChhZGRVcmwsIHtcblx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHRmaWVsZHM6IHZhbHVlc1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5tb2RhbFR5cGUgPT09IFwiZWRpdFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZEZpZWxkcy5sZW5ndGggPT09IDApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRhbGVydCAoXCJObyBpdGVtKHMpIHNlbGVjdGVkIVwiKTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCB3aGVyZUZpZWxkczogYW55ID0ge307XG5cblx0XHRcdFx0YXdhaXQgdGhpcy5wcm9jZXNzSG90RmllbGRzIChhc3luYyAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB9KSA9PlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlmIChmaWVsZC50eXBlID09PSBcInJlbW92ZVwiKVxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XG5cdFx0XHRcdFx0XHRsZXQgdmFsdWUgPSAkKGh0bWxFbGVtZW50KS52YWwgKCk7XG5cdFx0XG5cdFx0XHRcdFx0XHRpZiAoJChodG1sRWxlbWVudCkuYXR0ciAoXCJob3QtdmFsdWVcIikgIT0gbnVsbClcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSAkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKTtcblx0XHRcblx0XHRcdFx0XHRcdGlmIChmaWVsZC50eXBlID09PSBcImFycmF5XCIpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmICh3aGVyZUZpZWxkc1tmaWVsZC5uYW1lXSA9PSBudWxsKVxuXHRcdFx0XHRcdFx0XHRcdHdoZXJlRmllbGRzW2ZpZWxkLm5hbWVdID0gW107XG5cdFx0XG5cdFx0XHRcdFx0XHRcdHdoZXJlRmllbGRzW2ZpZWxkLm5hbWVdLnB1c2ggKHZhbHVlKTtcblx0XHRcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFxuXHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgZWRpdFVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5lZGl0VXJsO1xuXG5cdFx0XHRcdGF3YWl0IEhvdC5qc29uUmVxdWVzdCAoZWRpdFVybCwge1xuXHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdHdoZXJlRmllbGRzOiB3aGVyZUZpZWxkcyxcblx0XHRcdFx0XHRcdGZpZWxkczogdmFsdWVzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuYXR0YWNoZWRfbGlzdCAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRjb25zdCBhdHRhY2hlZExpc3RzID0gdGhpcy5nZXRBdHRhY2hlZExpc3RzICgpO1xuXG5cdFx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGF0dGFjaGVkTGlzdHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCBhdHRhY2hlZExpc3QgPSBhdHRhY2hlZExpc3RzW2lJZHhdO1xuXHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdGxldCB0YWJsZTogQWRtaW5UYWJsZSA9IGF0dGFjaGVkTGlzdC5ob3RDb21wb25lbnQ7XG5cblx0XHRcdFx0dGFibGUuYXR0YWNoZWRFZGl0ID0gdGhpcztcblxuXHRcdFx0XHRhd2FpdCB0YWJsZS5yZWZyZXNoTGlzdCAoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5jbG9zZU9uU2F2ZSA9PT0gdHJ1ZSlcblx0XHR7XG5cdFx0XHRib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UgKGAjJHt0aGlzLm1vZGFsSWR9YCkuaGlkZSAoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdHRoaXMubW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsICgkKGAjJHt0aGlzLm1vZGFsSWR9YClbMF0sIHtcblx0XHRcdFx0XCJiYWNrZHJvcFwiOiB0cnVlLFxuXHRcdFx0XHRcImtleWJvYXJkXCI6IHRydWUsXG5cdFx0XHRcdFwiZm9jdXNcIjogdHJ1ZVxuXHRcdFx0fSk7XG5cblx0XHQvLy8gQHRvZG8gRml4IHRoaXMgdGVtcG9yYXJ5IGhhY2suIEkgZG9udCBsaWtlIGl0LlxuXHRcdHNldFRpbWVvdXQgKCgpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGlmICh0aGlzLmF0dGFjaGVkX2xpc3QgIT09IFwiXCIpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBhdHRhY2hlZExpc3RzID0gdGhpcy5nZXRBdHRhY2hlZExpc3RzICgpO1xuXHRcdFxuXHRcdFx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgYXR0YWNoZWRMaXN0cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gYXR0YWNoZWRMaXN0c1tpSWR4XTtcblx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0XHRcdGxldCB0YWJsZTogQWRtaW5UYWJsZSA9IGF0dGFjaGVkTGlzdC5ob3RDb21wb25lbnQ7XG5cblx0XHRcdFx0XHRcdGlmICh0YWJsZSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHR0YWJsZS5hdHRhY2hlZEVkaXQgPSB0aGlzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSwgNTApO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGlmICh0aGlzLm5hbWUgPT09IFwiXCIpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IgKGBZb3UgbXVzdCBzcGVjaWZ5IGEgbmFtZSBmb3IgZWFjaCBhZG1pbi1lZGl0IGVsZW1lbnQhYCk7XG5cblx0XHR0aGlzLm1vZGFsSWQgPSBgJHt0aGlzLm5hbWV9TW9kYWxgO1xuXG5cdFx0bGV0IG91dHB1dE9iaiA9IFt7XG5cdFx0XHRodG1sOiBgXG5cdFx0XHQ8IS0tICR7dGhpcy50aXRsZX0gTW9kYWwgU3RhcnQgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZSAke3RoaXMuY3NzX2NsYXNzfVwiIGlkPVwiJHt0aGlzLm1vZGFsSWR9XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cIiR7dGhpcy5uYW1lfU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuXHRcdFx0XHRcdFx0PGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIiR7dGhpcy5uYW1lfU1vZGFsTGFiZWxcIj4ke3RoaXMudGl0bGV9PC9oNT5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuXHRcdFx0XHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcIm1vZGFsQm9keVwiIHR5cGUgPSBcIm1vZGFsXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5DYW5jZWw8L2J1dHRvbj5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgb25jbGljayA9IFwiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyR7dGhpcy5tb2RhbElkfScpLm9uU2F2ZSAoKTtcIj4ke3RoaXMuYnV0dG9uX3RpdGxlfTwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PCEtLSAke3RoaXMudGl0bGV9IE1vZGFsIEVuZCAtLT5gLFxuXHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogXCJib2R5XCJcblx0XHR9XTtcblxuXHRcdGlmICh0aGlzLmFkZF9wbGFjZV9oZXJlICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdG91dHB1dE9iai5wdXNoICh7XG5cdFx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tYWRkLWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5hZGRDbGlja2VkICgpO1wiPiR7dGhpcy5hZGRfdGV4dH08L2J1dHRvbj5gLFxuXHRcdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cIiR7dGhpcy5hZGRfcGxhY2VfaGVyZX1cIl1gXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5lZGl0X3BsYWNlX2hlcmUgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0b3V0cHV0T2JqLnB1c2ggKHtcblx0XHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1lZGl0LWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5lZGl0Q2xpY2tlZCAoKTtcIj4ke3RoaXMuZWRpdF90ZXh0fTwvYnV0dG9uPmAsXG5cdFx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiJHt0aGlzLmVkaXRfcGxhY2VfaGVyZX1cIl1gXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5yZW1vdmVfcGxhY2VfaGVyZSAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRvdXRwdXRPYmoucHVzaCAoe1xuXHRcdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LXJlbW92ZS1idG5cIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIG9uY2xpY2sgPSBcInRoaXMucmVtb3ZlQ2xpY2tlZCAoKTtcIj4ke3RoaXMucmVtb3ZlX3RleHR9PC9idXR0b24+YCxcblx0XHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCIke3RoaXMucmVtb3ZlX3BsYWNlX2hlcmV9XCJdYFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChvdXRwdXRPYmopO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluQnV0dG9uIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIHRoZSBidXR0b24uXG5cdCAqL1xuXHRjc3NfY2xhc3M6IHN0cmluZztcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25jbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBQcm9taXNlPGFueT47XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tYnV0dG9uXCI7XG5cdFx0dGhpcy5jc3NfY2xhc3MgPSBcImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCI7XG5cdFx0dGhpcy5vbmNsaWNrID0gbnVsbDtcblx0fVxuXG5cdGFzeW5jIGJ1dHRvbkNsaWNrZWQgKCk6IFByb21pc2U8dm9pZD5cblx0e1xuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25jbGljayAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25jbGljaykgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25jbGljayA9ICg8KGV2ZW50OiBNb3VzZUV2ZW50KSA9PiBQcm9taXNlPGFueT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uY2xpY2spKTtcblxuXHRcdFx0aHRtbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciAoXCJjbGlja1wiLCB0aGlzLm9uY2xpY2spO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIiBjbGFzcyA9IFwiJHt0aGlzLmNzc19jbGFzc31cIiBvbmNsaWNrID0gXCJ0aGlzLmJ1dHRvbkNsaWNrZWQgKCk7XCI+JHt0aGlzLmlubmVyfTwvYnV0dG9uPmApO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vYWRtaW4tdGFibGUtZmllbGRcIjtcbmltcG9ydCB7IEFkbWluRWRpdCB9IGZyb20gXCIuL2FkbWluLWVkaXRcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGUgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIHRhYmxlLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBhdHRhY2hlZCBzY2hlbWEuXG5cdCAqL1xuXHRzY2hlbWE6IHN0cmluZztcblx0aGVhZGVyczoge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBzdG9yZWQgaGVhZGVyIGZpZWxkcy5cblx0XHQgKi9cblx0XHRmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IEFkbWluVGFibGVGaWVsZDsgfTtcblx0XHQvKipcblx0XHQgKiBUaGUgaGVhZGVycyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIjx0aD5OYW1lPC90aD5cIiwgXCJlbWFpbFwiOiBcIjx0aD5FbWFpbDwvdGg+XCIgfVxuXHRcdCAqL1xuXHRcdGVsZW1lbnRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnk7IH07XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlciBpbmRpY2llcyBhcmUgc3RvcmVkIGluIGEga2V5L3ZhbHVlIG9iamVjdC5cblx0XHQgKiBcblx0XHQgKiBAZXhhbXBsZSBjb25zb2xlLmxvZyAodGhpcy5oZWFkZXJJbmRpY2llc1tcIm5hbWVcIl0pOyAvLyBPdXRwdXRzIDBcblx0XHQgKi9cblx0XHRpbmRpY2llczogbnVtYmVyW107XG5cdH07XG5cdC8qKlxuXHQgKiBUaGUgcm93IGVsZW1lbnRzIGFyZSBzdG9yZWQgaW4gYW4gYXJyYXkgd2l0aCBrZXkvdmFsdWUgZmllbGRzIGFuZCBpdCdzIGF0dGFjaGVkIGh0bWwgZWxlbWVudC5cblx0ICogXG5cdCAqIEBleGFtcGxlXG5cdCAqIHtcblx0ICogICBcImZpZWxkc1wiOiBbXG5cdCAqICAgICAgIHtcblx0ICogICAgICAgICBcIm5hbWVcIjogXCJKb2huIFNtaXRoXCIsXG5cdCAqICAgICAgICAgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAdGVzdC5jb21cIlxuXHQgKiAgICAgICB9XG5cdCAqICAgICBdLFxuXHQgKiAgIFwiaHRtbFwiOiBcIjx0cj48dGQ+Sm9obiBTbWl0aDwvdGQ+PHRkPmpvaG4uc21pdGhAdGVzdC5jb208L3RkPjwvdHI+XCJcblx0ICogfVxuXHQgKi9cblx0cm93RWxlbWVudHM6IHsgZmllbGRzOiBhbnlbXTsgZWxlbWVudDogSFRNTEVsZW1lbnQ7IH1bXSA9IFtdO1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGVkIHJvdyBpbmRpY2llcy4gRWFjaCBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICogXG5cdCAqIEBmaXhtZSBBZGQgc3VwcG9ydCBmb3IgdGhpcyBpbiB0aGUgZnV0dXJlLlxuXHQgKi9cblx0Ly9wcm90ZWN0ZWQgc2VsZWN0ZWRSb3dzOiBudW1iZXJbXTtcblx0LyoqXG5cdCAqIFRoZSBtb3N0IHJlY2VudGx5IHNlbGVjdGVkIHJvdyBpbmRleC4gVGhlIGluZGV4IG1hcHMgdG8gdGhlIHJvd0VsZW1lbnRzIGFycmF5LlxuXHQgKi9cblx0cHJvdGVjdGVkIHNlbGVjdGVkOiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgbGlzdCBmdW5jdGlvbiB0byBleGVjdXRlIHRvIHJldHJpZXZlIGRhdGEuXG5cdCAqL1xuXHRvbmxpc3Q6ICgpID0+IFByb21pc2U8YW55W10+Oztcblx0LyoqXG5cdCAqIFRoZSBsaXN0IHVybCB0byB1c2UgZm9yIHRoaXMgdGFibGUuIEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCB3aWxsIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS5cblx0ICovXG5cdGxpc3R1cmw6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCBlYWNoIHJvdyB3aWxsIGhhdmUgYSBjaGVja2JveC5cblx0ICogQGRlZmF1bHQgdHJ1ZVxuXHQgKi9cblx0Y2hlY2tib3g6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzaW5nbGUgY2xpY2sgd2lsbCBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSByb3cuXG5cdCAqL1xuXHRzaW5nbGVjbGlja2VkaXQ6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGlzIGV2ZW50IHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuIFRoZSBwb3RlbnRpYWwgaXRlbSB0byBiZSBzZWxlY3RlZCBcblx0ICogd2lsbCBhbHNvIGJlIHBhc3NlZC4gSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgcm93IHdpbGwgbm90IGJlIHNlbGVjdGVkLlxuXHQgKi9cblx0b25zZWxlY3RlZHJvdzogKHJvd0luZGV4OiBudW1iZXIsIGl0ZW06IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGVkaXQgZm9ybSwgaWYgYW55LlxuXHQgKi9cblx0YXR0YWNoZWRFZGl0OiBBZG1pbkVkaXQ7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGFibGVcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLnNjaGVtYSA9IFwiXCI7XG5cdFx0dGhpcy5oZWFkZXJzID0ge1xuXHRcdFx0XHRmaWVsZHM6IHt9LFxuXHRcdFx0XHRlbGVtZW50czoge30sXG5cdFx0XHRcdGluZGljaWVzOiBbXVxuXHRcdFx0fTtcblx0XHR0aGlzLnJvd0VsZW1lbnRzID0gW107XG5cdFx0Ly90aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdHRoaXMub25saXN0ID0gbnVsbDtcblx0XHR0aGlzLmxpc3R1cmwgPSBcIlwiO1xuXHRcdHRoaXMuY2hlY2tib3ggPSB0cnVlO1xuXHRcdHRoaXMuc2luZ2xlY2xpY2tlZGl0ID0gZmFsc2U7XG5cdFx0dGhpcy5vbnNlbGVjdGVkcm93ID0gbnVsbDtcblx0XHR0aGlzLmF0dGFjaGVkRWRpdCA9IG51bGw7XG5cdFx0dGhpcy5zZWxlY3RlZCA9IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIGhlYWRlciB0byB0aGUgdGFibGUuXG5cdCAqL1xuXHRhZGRIZWFkZXIgKHRhYmxlRmllbGRFbGVtZW50OiBIVE1MRWxlbWVudClcblx0e1xuXHRcdGxldCBoZWFkZXIgPSB0aGlzLmh0bWxFbGVtZW50c1swXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0aGVhZFwiKVswXTtcblxuXHRcdGlmICh0aGlzLmhlYWRlcnMuaW5kaWNpZXMubGVuZ3RoIDwgMSlcblx0XHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoIChudWxsKTtcblxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAodGFibGVGaWVsZEVsZW1lbnQuaG90Q29tcG9uZW50LmZpZWxkKTtcblx0XHRoZWFkZXIuYXBwZW5kQ2hpbGQgKHRhYmxlRmllbGRFbGVtZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBoZWFkZXIgdG8gdGhlIHRhYmxlLlxuXHQgKi9cblx0YWRkSGVhZGVyRGF0YU9ubHkgKHRhYmxlRmllbGQ6IEFkbWluVGFibGVGaWVsZCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KVxuXHR7XG5cdFx0aWYgKHRoaXMuaGVhZGVycy5pbmRpY2llcy5sZW5ndGggPCAxKVxuXHRcdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKG51bGwpO1xuXG5cdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKHRhYmxlRmllbGQuZmllbGQpO1xuXHRcdHRoaXMuaGVhZGVycy5maWVsZHNbdGFibGVGaWVsZC5maWVsZF0gPSB0YWJsZUZpZWxkO1xuXHRcdHRoaXMuaGVhZGVycy5lbGVtZW50c1t0YWJsZUZpZWxkLmZpZWxkXSA9IGh0bWxFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZmllbGQgdHlwZSBvZiBhIGZpZWxkLlxuXHQgKi9cblx0Z2V0RmllbGRUeXBlIChmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZ1xuXHR7XG5cdFx0aWYgKHRoaXMuaGVhZGVycy5lbGVtZW50c1tmaWVsZE5hbWVdICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZUZpZWxkID0gdGhpcy5oZWFkZXJzLmVsZW1lbnRzW2ZpZWxkTmFtZV0uaG90Q29tcG9uZW50O1xuXG5cdFx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRcdHJldHVybiAoaG90Q29tcG9uZW50LmZpZWxkX3R5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiBhIHJvdyBpcyBzZWxlY3RlZC5cblx0ICovXG5cdGFzeW5jIHNlbGVjdFJvdyAoaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25zZWxlY3RlZHJvdyAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zZWxlY3RlZHJvdykgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zZWxlY3RlZHJvdyA9ICg8KHJvd0luZGV4OiBudW1iZXIsIGl0ZW06IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbnNlbGVjdGVkcm93KSk7XG5cblx0XHRcdGxldCBpdGVtOiBhbnlbXSA9IG51bGw7XG5cblx0XHRcdGlmICh0aGlzLnJvd0VsZW1lbnRzW3Jvd0luZGV4XSAhPSBudWxsKVxuXHRcdFx0XHRpdGVtID0gdGhpcy5yb3dFbGVtZW50c1tyb3dJbmRleF0uZmllbGRzO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbnNlbGVjdGVkcm93IChyb3dJbmRleCwgaXRlbSk7XG5cblx0XHRcdGlmIChyZXN1bHQgPT09IGZhbHNlKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBzdXBwb3J0IG11bHRpcGxlIHJvd3MgYmVpbmcgc2VsZWN0ZWQuIEZvciBub3cgXG5cdFx0Ly8gdGhpcyB3aWxsIGVuc3VyZSB0aGF0IG9ubHkgb25lIHJvdyBpcyBzZWxlY3RlZCBhdCBhIHRpbWUuXG5cdFx0e1xuXHRcdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cdFx0XHRsZXQgcm93cyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRyXCIpO1xuXG5cdFx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHJvd3MubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHR7XG5cdFx0XHRcdGxldCByb3c6IEhUTUxUYWJsZVJvd0VsZW1lbnQgPSByb3dzW2lJZHhdO1xuXG5cdFx0XHRcdGlmIChyb3cuY2xhc3NMaXN0LmNvbnRhaW5zIChcInRhYmxlLXByaW1hcnlcIikgPT09IHRydWUpXG5cdFx0XHRcdFx0cm93LmNsYXNzTGlzdC5yZW1vdmUgKFwidGFibGUtcHJpbWFyeVwiKTtcblx0XHRcdH1cblxuXHRcdFx0aHRtbEVsZW1lbnQuY2xhc3NMaXN0LmFkZCAoXCJ0YWJsZS1wcmltYXJ5XCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2VsZWN0ZWQgPSByb3dJbmRleDtcblxuXHRcdGlmICh0eXBlb2YgKHRoaXMuc2luZ2xlY2xpY2tlZGl0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdHRoaXMuc2luZ2xlY2xpY2tlZGl0ID0gSG90U3RhcS5wYXJzZUJvb2xlYW4gKHRoaXMuc2luZ2xlY2xpY2tlZGl0KTtcblxuXHRcdGlmICh0aGlzLnNpbmdsZWNsaWNrZWRpdCA9PT0gdHJ1ZSlcblx0XHR7XG5cdFx0XHRpZiAodGhpcy5hdHRhY2hlZEVkaXQgIT0gbnVsbClcblx0XHRcdFx0YXdhaXQgdGhpcy5hdHRhY2hlZEVkaXQuZWRpdENsaWNrZWQgKHRoaXMpO1xuXHRcdH1cblxuXHRcdC8qdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdC8vIEZpbmQgYWxsIHRoZSBjaGVja2JveGVzIGluIHRib2R5LlxuXHRcdGxldCBjaGVja2JveGVzID0gdGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwiaW5wdXRcIik7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50ID0gY2hlY2tib3hlc1tpSWR4XTtcblxuXHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgPT09IHRydWUpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGRhdGEtaW5kZXggYXR0cmlidXRlLlxuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXhTdHI6IHN0cmluZyA9IGNoZWNrYm94LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUgKFwiZGF0YS1pbmRleFwiKTtcblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4OiBudW1iZXIgPSAgcGFyc2VJbnQgKGRhdGFJbmRleFN0cik7XG5cblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkUm93cy5wdXNoIChkYXRhSW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSovXG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzZWxlY3RlZCBkYXRhLlxuXHQgKi9cblx0Z2V0U2VsZWN0ZWQgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuc2VsZWN0ZWQ7XG5cblx0XHRpZiAoaW5kZXggPCAwKVxuXHRcdFx0cmV0dXJuIChudWxsKTtcblxuXHRcdHJldHVybiAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNlbGVjdGVkIGRhdGEuXG5cdCAqL1xuXHQvKmdldFNlbGVjdGVkUm93cyAoKTogYW55W11cblx0e1xuXHRcdGxldCByb3dzOiBhbnlbXSA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuc2VsZWN0ZWRSb3dzW2lJZHhdO1xuXHRcdFx0cm93cy5wdXNoICh0aGlzLnJvd0VsZW1lbnRzW2luZGV4XS5maWVsZHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiAocm93cyk7XG5cdH0qL1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGEgZm9yIGVhY2ggcm93IHRoYXQgaGFzIGJlZW4gY2hlY2tlZC5cblx0ICovXG5cdGdldENoZWNrZWRSb3dzICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IHJvd3M6IGFueVtdID0gW107XG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHQvLyBGaW5kIGFsbCB0aGUgY2hlY2tib3hlcyBpbiB0Ym9keS5cblx0XHRsZXQgY2hlY2tib3hlcyA9IHRib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lIChcImlucHV0XCIpO1xuXG5cdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBjaGVja2JveGVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBjaGVja2JveDogSFRNTElucHV0RWxlbWVudCA9IGNoZWNrYm94ZXNbaUlkeF07XG5cblx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdGlmIChjaGVja2JveC5jaGVja2VkID09PSB0cnVlKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBkYXRhLWluZGV4IGF0dHJpYnV0ZS5cblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4U3RyOiBzdHJpbmcgPSBjaGVja2JveC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlIChcImRhdGEtaW5kZXhcIik7XG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleDogbnVtYmVyID0gIHBhcnNlSW50IChkYXRhSW5kZXhTdHIpO1xuXG5cdFx0XHRcdFx0cm93cy5wdXNoICh0aGlzLnJvd0VsZW1lbnRzW2RhdGFJbmRleF0uZmllbGRzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAocm93cyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcm93J3MgZGF0YS5cblx0ICovXG5cdGdldFJvdyAoaW5kZXg6IG51bWJlcik6IGFueVtdXG5cdHtcblx0XHRyZXR1cm4gKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgcm93IHRvIHRoZSB0YWJsZS5cblx0ICogXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyBBIGxpc3Qgb2YgdmFsdWVzIHRvIGFwcGVuZC5cblx0ICovXG5cdGFkZFJvdyAoZmllbGRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdKVxuXHR7XG5cdFx0aWYgKGZpZWxkcyA9PSBudWxsKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0aWYgKGZpZWxkcy5sZW5ndGggPT0gMClcblx0XHRcdHJldHVybjtcblxuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5yb3dFbGVtZW50cy5sZW5ndGg7XG5cdFx0bGV0IHJvd1N0ciA9IGA8dHIgb25jbGljayA9IFwidGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5zZWxlY3RSb3cgKHRoaXMsICR7aW5kZXh9KTtcIj5gO1xuXG5cdFx0aWYgKHR5cGVvZiAodGhpcy5jaGVja2JveCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHR0aGlzLmNoZWNrYm94ID0gSG90U3RhcS5wYXJzZUJvb2xlYW4gKHRoaXMuY2hlY2tib3gpO1xuXG5cdFx0aWYgKHRoaXMuY2hlY2tib3ggPT09IHRydWUpXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48aW5wdXQgdHlwZSA9IFwiY2hlY2tib3hcIiAvPjwvdGQ+YDtcblx0XHRlbHNlXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48L3RkPmA7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuaGVhZGVycy5pbmRpY2llcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlIC0gQGZpeG1lIEkgbWVzc2VkIHRoaXMgdXAsIHdpbGwgZml4LlxuXHRcdFx0bGV0IGtleTogc3RyaW5nID0gdGhpcy5oZWFkZXJzLmluZGljaWVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoa2V5ID09IG51bGwpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRsZXQgdmFsdWUgPSBmaWVsZHNba2V5XTtcblx0XHRcdC8vIEZvciBlYWNoIC4gaW4ga2V5IHdlIG5lZWQgdG8gZ2V0IHRoZSBuZXh0IG9iamVjdC5cblx0XHRcdGxldCBrZXlQYXJ0czogc3RyaW5nW10gPSBrZXkuc3BsaXQgKFwiLlwiKTtcblx0XHRcdFxuXHRcdFx0aWYgKGtleVBhcnRzLmxlbmd0aCA+IDEpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0bGV0IHRlbXBWYWx1ZTogYW55ID0gZmllbGRzW2tleVBhcnRzWzBdXTtcblxuXHRcdFx0XHRmb3IgKGxldCBpSWR4ID0gMTsgaUlkeCA8IGtleVBhcnRzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3QgcGFydDogc3RyaW5nID0ga2V5UGFydHNbaUlkeF07XG5cblx0XHRcdFx0XHR0ZW1wVmFsdWUgPSB0ZW1wVmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YWx1ZSA9IHRlbXBWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuaGVhZGVycy5lbGVtZW50c1trZXldICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRcdGxldCBmaWVsZFR5cGU6IHN0cmluZyA9IHRoaXMuZ2V0RmllbGRUeXBlIChrZXkpO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgPT0gbnVsbClcblx0XHRcdFx0XHRmaWVsZFR5cGUgPSBcInRleHRcIjtcblxuXHRcdFx0XHRpZiAoZmllbGRUeXBlICE9PSBcInJlbW92ZVwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3Qgb3JnRmllbGQgPSB0aGlzLmhlYWRlcnMuZmllbGRzW2tleV07XG5cdFx0XHRcdFx0bGV0IGRlZmF1bHRPdXRwdXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkICE9IG51bGwpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkLm9uaW5wdXQgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAob3JnRmllbGQub25pbnB1dCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5oZWFkZXJzLmZpZWxkc1trZXldLm9uaW5wdXQgPSAoPChpdGVtOiBhbnkpID0+IGFueT5uZXcgRnVuY3Rpb24gKG9yZ0ZpZWxkLm9uaW5wdXQpKTtcblxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG9yZ0ZpZWxkLm9uaW5wdXQgKHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkLm9ub3V0cHV0ICE9IG51bGwpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgKG9yZ0ZpZWxkLm9ub3V0cHV0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW2tleV0ub25vdXRwdXQgPSAoPChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+bmV3IEZ1bmN0aW9uIChvcmdGaWVsZC5vbm91dHB1dCkpO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRPdXRwdXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3T3V0cHV0OiBzdHJpbmcgPSBvcmdGaWVsZC5vbm91dHB1dCAoaW5kZXgsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0cm93U3RyICs9IG5ld091dHB1dDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoZGVmYXVsdE91dHB1dCA9PT0gdHJ1ZSlcblx0XHRcdFx0XHRcdHJvd1N0ciArPSBgPHRkIGRhdGEtaW5kZXggPSBcIiR7aW5kZXh9XCI+JHt2YWx1ZX08L3RkPmA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyb3dTdHIgKz0gXCI8L3RyPlwiO1xuXG5cdFx0bGV0IG5ld09iaiA9IEhvdFN0YXEuYWRkSHRtbCAodGJvZHksIHJvd1N0cik7XG5cblx0XHR0aGlzLnJvd0VsZW1lbnRzLnB1c2ggKHtcblx0XHRcdFx0ZmllbGRzOiBmaWVsZHMsXG5cdFx0XHRcdGVsZW1lbnQ6ICg8SFRNTEVsZW1lbnQ+bmV3T2JqKVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXIgdGhlIGxpc3Qgb2Ygcm93cy5cblx0ICovXG5cdGFzeW5jIGNsZWFyUm93cyAoKVxuXHR7XG5cdFx0dGhpcy5yb3dFbGVtZW50cyA9IFtdO1xuXG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHR0Ym9keS5pbm5lckhUTUwgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGxpc3QuXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoTGlzdCAobGlzdDogYW55W10gPSBudWxsKVxuXHR7XG5cdFx0aWYgKHRoaXMub25saXN0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmxpc3QpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9ubGlzdCA9ICg8KCkgPT4gUHJvbWlzZTxhbnlbXT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9ubGlzdCkpO1xuXG5cdFx0XHRsaXN0ID0gYXdhaXQgdGhpcy5vbmxpc3QgKCk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRsZXQgbGlzdFVybDogc3RyaW5nID0gXCJcIjtcblxuXHRcdFx0aWYgKHRoaXMubGlzdHVybCAhPT0gXCJcIilcblx0XHRcdFx0bGlzdFVybCA9IHRoaXMubGlzdHVybDtcblxuXHRcdFx0aWYgKGxpc3RVcmwgIT09IFwiXCIpXG5cdFx0XHR7XG5cdFx0XHRcdGxpc3QgPSBhd2FpdCBIb3QuanNvblJlcXVlc3QgKGxpc3RVcmwsIHtcblx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWFcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzLmNsZWFyUm93cyAoKTtcblxuXHRcdGlmIChsaXN0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBsaXN0Lmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgZmllbGRzID0gbGlzdFtpSWR4XTtcblxuXHRcdFx0XHR0aGlzLmFkZFJvdyAoZmllbGRzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBsaXN0IG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdHNldFRpbWVvdXQgKGFzeW5jICgpID0+XG5cdFx0XHR7XG5cdFx0XHRcdGF3YWl0IHRoaXMucmVmcmVzaExpc3QgKCk7XG5cdFx0XHR9LCA1MCk7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IGVtcHR5Q2hlY2tib3hIZWFkZXI6IHN0cmluZyA9IFwiPHRoPjwvdGg+XCI7XG5cblx0XHRyZXR1cm4gKGBcblx0XHQ8ZGl2IGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVwiPlxuXHRcdFx0PGgyPiR7dGhpcy50aXRsZX08L2gyPlxuXHRcdFx0PGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cblx0XHRcdDx0YWJsZSBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1UYWJsZVwiIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1zbVwiPlxuXHRcdFx0XHQ8dGhlYWQ+XG5cdFx0XHRcdFx0PHRyIGhvdC1wbGFjZS1oZXJlID0gXCJoZWFkZXJcIj5cblx0XHRcdFx0XHRcdCR7ZW1wdHlDaGVja2JveEhlYWRlcn1cblx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHQ8L3RoZWFkPlxuXHRcdFx0XHQ8dGJvZHkgaG90LXBsYWNlLWhlcmUgPSBcInJlc3VsdHNcIj5cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYWZ0ZXJUYWJsZVwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGV4dCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogSWYgc2V0IHRvIDEsIHRoaXMgd2lsbCBub3Qgb3V0cHV0IHRoZSBmaWVsZC5cblx0ICovXG5cdG5vX291dHB1dDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGNsYXNzZXMgdG8gc2V0IGZvciB0aGUgaW5wdXQuXG5cdCAqIEBkZWZhdWx0IFwiZm9ybS1jb250cm9sXCJcblx0ICovXG5cdGNzc19jbGFzczogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRleHRcIjtcblx0XHR0aGlzLm5vX291dHB1dCA9IFwiMFwiO1xuXHRcdHRoaXMuY3NzX2NsYXNzID0gXCJmb3JtLWNvbnRyb2xcIlxuXHR9XG5cblx0LyoqXG5cdCAqIENvcnJlY3RzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHRleHQgZWxlbWVudHMgZm9yIG1vZGFscy5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRsZXQgcGxhY2VIZXJlQXJyYXkgPSBwYXJlbnRIdG1sRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsIChgaG90LXBsYWNlLWhlcmVbdHlwZT1cIm1vZGFsXCJdYCk7XG5cblx0XHRpZiAocGxhY2VIZXJlQXJyYXkubGVuZ3RoID4gMClcblx0XHR7XG5cdFx0XHRsZXQgcGxhY2VIZXJlID0gcGxhY2VIZXJlQXJyYXlbMF07XG5cdFx0XHRwYXJlbnRIdG1sRWxlbWVudC5yZW1vdmVDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdFx0cGxhY2VIZXJlLmFwcGVuZENoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCB2YWx1ZTogc3RyaW5nID0gXCJcIjtcblxuXHRcdGlmICh0aGlzLnZhbHVlICE9IG51bGwpXG5cdFx0XHR2YWx1ZSA9IHRoaXMudmFsdWU7XG5cblx0XHRpZiAodGhpcy5ub19vdXRwdXQgPT09IFwiMVwiKVxuXHRcdFx0cmV0dXJuIChgPGRpdj48aW5wdXQgY2xhc3M9XCIke3RoaXMuY3NzX2NsYXNzfVwiIHR5cGUgPSBcImhpZGRlblwiIHZhbHVlID0gXCIke3ZhbHVlfVwiIC8+PC9kaXY+YCk7XG5cblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEF0dHJpYnV0ZSAoXCJob3QtZmllbGRcIik7XG5cdFx0bGV0IGZpZWxkX3R5cGUgPSB0aGlzLmh0bWxFbGVtZW50c1swXS5nZXRBdHRyaWJ1dGUgKFwiaG90LWZpZWxkLXR5cGVcIik7XG5cblx0XHRpZiAoZmllbGRfdHlwZSA9PSBudWxsKVxuXHRcdFx0ZmllbGRfdHlwZSA9IFwidGV4dFwiO1xuXG5cdFx0cmV0dXJuIChgPGRpdj5cblx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj4ke3RoaXMuaW5uZXJ9PC9sYWJlbD5cblx0XHRcdDxpbnB1dCBjbGFzcz1cIiR7dGhpcy5jc3NfY2xhc3N9XCIgdHlwZSA9IFwidGV4dFwiIGhvdC1maWVsZCA9IFwiJHtmaWVsZH1cIiBob3QtZmllbGQtdHlwZSA9IFwiJHtmaWVsZF90eXBlfVwiIHZhbHVlID0gXCIke3ZhbHVlfVwiIC8+XG5cdFx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlIH0gZnJvbSBcIi4vYWRtaW4tdGFibGVcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGVGaWVsZCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRhYmxlIGZpZWxkLlxuXHQgKi9cblx0ZmllbGQ6IG51bWJlcjtcblx0LyoqXG5cdCAqIFRoZSB0eXBlIG9mIGZpZWxkLiBDYW4gYmU6XG5cdCAqICogdGV4dFxuXHQgKiAqIHJlbW92ZVxuXHQgKiBcblx0ICogRGVmYXVsdDogdGV4dFxuXHQgKi9cblx0ZmllbGRfdHlwZTogc3RyaW5nO1xuXHQvKipcblx0ICogSWYgc2V0IHRvIDEsIHRoaXMgd2lsbCBub3Qgb3V0cHV0IHRoZSBmaWVsZC5cblx0ICovXG5cdG5vX291dHB1dDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIG9uaW5wdXQgZXZlbnQgaXMgZmlyZWQgd2hlbiBhbiBpdGVtIGlzIGFib3V0IHRvIGJlIHBsYWNlZCBpbnRvIHRoZSB0YWJsZS5cblx0ICovXG5cdG9uaW5wdXQ6IChpdGVtOiBhbnkpID0+IGFueTtcblx0LyoqXG5cdCAqIFRoZSBvdXRwdXQgdG8gZGlzcGxheS5cblx0ICovXG5cdG9ub3V0cHV0OiAoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZykgPT4gc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlLWZpZWxkXCI7XG5cdFx0dGhpcy5maWVsZCA9IDA7XG5cdFx0dGhpcy5maWVsZF90eXBlID0gXCJ0ZXh0XCI7XG5cdFx0dGhpcy5ub19vdXRwdXQgPSBcIjBcIjtcblx0XHR0aGlzLm9uaW5wdXQgPSBudWxsO1xuXHRcdHRoaXMub25vdXRwdXQgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBob3RDb21wb25lbnQ6IEFkbWluVGFibGUgPSBudWxsO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGlmIChwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0aG90Q29tcG9uZW50ID0gcGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudDtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBsb29vb2wuIEFkZCBhIGJldHRlciB3YXkgdG8gZ2V0IHRoZSBwYXJlbnQgSG90Q29tcG9uZW50LlxuXHRcdFx0aG90Q29tcG9uZW50ID0gcGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQ7XG5cdFx0fVxuXG5cdFx0aWYgKGhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdFx0aG90Q29tcG9uZW50LmFkZEhlYWRlckRhdGFPbmx5ICh0aGlzLCBodG1sRWxlbWVudCk7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0aWYgKHRoaXMubm9fb3V0cHV0ID09PSBcIjFcIilcblx0XHR7XG5cdFx0XHRyZXR1cm4gKFt7XG5cdFx0XHRcdGh0bWw6IGA8ZGl2PjwvZGl2PmAsXG5cdFx0XHRcdHBsYWNlSGVyZVBhcmVudDogXCJhZnRlclRhYmxlXCJcblx0XHRcdH1dKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFt7XG5cdFx0XHRodG1sOiBgPHRoPiR7dGhpcy5pbm5lcn08L3RoPmAsXG5cdFx0XHRwbGFjZUhlcmVQYXJlbnQ6IFwiaGVhZGVyXCJcblx0XHR9XSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRhYmxlUm93IGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgZmllbGRzIGFyZSBzdG9yZWQgaW4gYSBrZXkvdmFsdWUgb2JqZWN0LlxuXHQgKiBcblx0ICogQGV4YW1wbGUgeyBcIm5hbWVcIjogXCJKb2huIFNtaXRoXCIsIFwiZW1haWxcIjogXCJqb2huLnNtaXRoQGVtYWlsLmNvbVwiIH1cblx0ICovXG5cdGZpZWxkczogYW55W107XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGFibGUtcm93XCI7XG5cdFx0dGhpcy5maWVsZHMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhpcyB0YWJsZSByb3cgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudC5yb3dFbGVtZW50cy5wdXNoICh7IGZpZWxkczogdGhpcy5maWVsZHMsIGVsZW1lbnQ6IGh0bWxFbGVtZW50fSk7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0bGV0IHJvd0h0bWwgPSBcIlwiO1xuXG5cdFx0aWYgKHRoaXMuZmllbGRzLmxlbmd0aCA+IDApXG5cdFx0XHRyb3dIdG1sICs9IGA8dGQ+PGlucHV0IHR5cGUgPSBcImNoZWNrYm94XCIgLz48L3RkPmA7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuZmllbGRzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBmaWVsZE9iaiA9IHRoaXMuZmllbGRzW2lJZHhdO1xuXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gZmllbGRPYmopXG5cdFx0XHR7XG5cdFx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkT2JqW2tleV07XG5cblx0XHRcdFx0cm93SHRtbCArPSBgPHRkPiR7dmFsdWV9PC90ZD5gO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAoW3tcblx0XHRcdGh0bWw6IGA8dHI+JHtyb3dIdG1sfTwvdHI+YCxcblx0XHRcdHBsYWNlSGVyZVBhcmVudDogXCJyZXN1bHRzXCJcblx0XHR9XSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5EYXNoYm9hcmQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYmFzZSB1cmwgdG8gdXNlIGZvciB0aGlzIGRhc2hib2FyZC5cblx0ICovXG5cdGJhc2U6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1kYXNoYm9hcmRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJhc2UgPSBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIGZpZWxkIHRvIHRoZSB0YWJsZVxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsID0ge307XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmwgPSB0aGlzLmJhc2U7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwuYWRkVXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL2FkZGA7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5lZGl0VXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvZWRpdGA7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwucmVtb3ZlVXJsID0gYCR7SG90LkRhdGEuQWRtaW5QYW5lbC5iYXNlVXJsfS92MS9kYXRhL3JlbW92ZWA7XG5cblx0XHRpZiAoSG90LkRhdGEuQWRtaW5QYW5lbC5saXN0VXJsID09IG51bGwpXG5cdFx0XHRIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvbGlzdGA7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoYFxuXHRcdDxtYWluIGNsYXNzPVwiY29sLW1kLTkgbXMtc20tYXV0byBjb2wtbGctMTAgcHgtbWQtNFwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXdyYXAgZmxleC1tZC1ub3dyYXAgYWxpZ24taXRlbXMtY2VudGVyIHB0LTMgcGItMiBtYi0zIGJvcmRlci1ib3R0b21cIj5cblx0XHRcdFx0PGgxIGNsYXNzPVwiaDJcIj4ke3RoaXMudGl0bGV9PC9oMT5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi10b29sYmFyIG1iLTIgbWItbWQtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgbWUtMlwiPlxuXHRcdFx0XHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImRhc2hib2FyZEhlYWRlclwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiYm9keVwiPjwvaG90LXBsYWNlLWhlcmU+XG5cdFx0PC9tYWluPmApO1xuXHR9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiaW1wb3J0IHsgQWRtaW5CdXR0b24gfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLWJ1dHRvblwiO1xuaW1wb3J0IHsgQWRtaW5Ecm9wZG93biB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tZHJvcGRvd25cIjtcbmltcG9ydCB7IEFkbWluRGFzaGJvYXJkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kYXNoYm9hcmRcIjtcbmltcG9ydCB7IEFkbWluRWRpdCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tZWRpdFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGVcIjtcbmltcG9ydCB7IEFkbWluVGFibGVGaWVsZCB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtZmllbGRcIjtcbmltcG9ydCB7IEFkbWluVGFibGVSb3cgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRhYmxlLXJvd1wiO1xuaW1wb3J0IHsgQWRtaW5UZXh0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10ZXh0XCI7XG5cbmV4cG9ydCB7XG5cdFx0QWRtaW5CdXR0b24sXG5cdFx0QWRtaW5Ecm9wZG93bixcblx0XHRBZG1pbkRhc2hib2FyZCxcblx0XHRBZG1pbkVkaXQsXG5cdFx0QWRtaW5UYWJsZSxcblx0XHRBZG1pblRhYmxlRmllbGQsXG5cdFx0QWRtaW5UYWJsZVJvdyxcblx0XHRBZG1pblRleHRcblx0fTsiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIkhvdFN0YXFXZWIiLCJBZG1pbkRyb3Bkb3duIiwiSG90Q29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJjb3B5IiwiYXBpIiwic3VwZXIiLCJ0aGlzIiwidGFnIiwicGxhY2Vob2xkZXIiLCJvbnNlYXJjaCIsIm9uc2VsZWN0Iiwib25Qb3N0UGxhY2UiLCJwYXJlbnRIdG1sRWxlbWVudCIsImh0bWxFbGVtZW50IiwicGxhY2VIZXJlQXJyYXkiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwicGxhY2VIZXJlIiwicmVtb3ZlQ2hpbGQiLCJhcHBlbmRDaGlsZCIsIkZ1bmN0aW9uIiwicXVlcnlTZWxlY3RvciIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInNlYXJjaFRleHQiLCJjdXJyZW50VGFyZ2V0IiwidmFsdWUiLCJyZXN1bHRzIiwic2VhcmNoUmVzdWx0c0RpdiIsIiQiLCJodG1sRWxlbWVudHMiLCJmaW5kIiwiZW1wdHkiLCJpSWR4IiwicmVzdWx0IiwidXJsIiwidGV4dCIsImFwcGVuZCIsInNlbGVjdGVkIiwiaW5kZXgiLCJnZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJvdXRwdXQiLCJpbm5lciIsImJvb3RzdHJhcCIsIkFkbWluRWRpdCIsIm9uQWRkQ2xpY2tlZCIsIm9uRWRpdENsaWNrZWQiLCJvblJlbW92ZUNsaWNrZWQiLCJ0aXRsZSIsImJ1dHRvbl90aXRsZSIsImF0dGFjaGVkX2xpc3QiLCJzY2hlbWEiLCJtb2RhbElkIiwiYWRkX3RleHQiLCJhZGRfcGxhY2VfaGVyZSIsImVkaXRfdGV4dCIsImVkaXRfcGxhY2VfaGVyZSIsInJlbW92ZV90ZXh0IiwicmVtb3ZlX3BsYWNlX2hlcmUiLCJjc3NfY2xhc3MiLCJtb2RhbCIsIm1vZGFsVHlwZSIsImNsb3NlT25TYXZlIiwic2VsZWN0ZWRGaWVsZHMiLCJvbnNhdmUiLCJvbmVkaXQiLCJvbmRlbGV0ZSIsInByb2Nlc3NIb3RGaWVsZHMiLCJvbkZpZWxkIiwiZWxtcyIsImVsbSIsImZpZWxkIiwiYXR0ciIsImZpZWxkVHlwZSIsImZpZWxkSW5wdXQiLCJuYW1lIiwidHlwZSIsImlucHV0IiwiYWRkQ2xpY2tlZCIsInZhbCIsIm9uYWRkIiwiTW9kYWwiLCJnZXRJbnN0YW5jZSIsInNob3ciLCJnZXRBdHRhY2hlZExpc3RzIiwic3RycyIsInNwbGl0IiwiYXR0YWNoZWRMaXN0cyIsImkiLCJhdHRhY2hlZExpc3QiLCJhdHRhY2hlZExpc3RPYmoiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwicHVzaCIsImVkaXRDbGlja2VkIiwiYXR0YWNoZWRFZGl0Iiwic2VsZWN0ZWRGaWVsZCIsImdldFNlbGVjdGVkIiwiZnVuYyIsImNhbGwiLCJyZW1vdmVDbGlja2VkIiwid2hlcmVGaWVsZHMiLCJob3RDb21wb25lbnQiLCJjaGVja2VkUm93cyIsImdldENoZWNrZWRSb3dzIiwiY2hlY2tlZFJvdyIsImNvbmZpcm0iLCJ3aGVyZUZpZWxkIiwia2V5IiwiZ2V0RmllbGRUeXBlIiwicmVtb3ZlVXJsIiwiSG90IiwiRGF0YSIsIkFkbWluUGFuZWwiLCJqc29uUmVxdWVzdCIsInJlZnJlc2hMaXN0Iiwib25TYXZlIiwidmFsdWVzIiwiZmllbGRTYXZlIiwiYWRkVXJsIiwiZmllbGRzIiwiYWxlcnQiLCJlZGl0VXJsIiwidGFibGUiLCJoaWRlIiwic2V0VGltZW91dCIsIkVycm9yIiwib3V0cHV0T2JqIiwiaHRtbCIsImRvY3VtZW50U2VsZWN0b3IiLCJBZG1pbkJ1dHRvbiIsIm9uY2xpY2siLCJidXR0b25DbGlja2VkIiwiaWQiLCJBZG1pblRhYmxlIiwicm93RWxlbWVudHMiLCJoZWFkZXJzIiwiZWxlbWVudHMiLCJpbmRpY2llcyIsIm9ubGlzdCIsImxpc3R1cmwiLCJjaGVja2JveCIsInNpbmdsZWNsaWNrZWRpdCIsIm9uc2VsZWN0ZWRyb3ciLCJhZGRIZWFkZXIiLCJ0YWJsZUZpZWxkRWxlbWVudCIsImhlYWRlciIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYWRkSGVhZGVyRGF0YU9ubHkiLCJ0YWJsZUZpZWxkIiwiZmllbGROYW1lIiwic2VsZWN0Um93Iiwicm93SW5kZXgiLCJpdGVtIiwicm93cyIsInJvdyIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwiYWRkIiwiSG90U3RhcSIsInBhcnNlQm9vbGVhbiIsImNoZWNrYm94ZXMiLCJjaGVja2VkIiwiZGF0YUluZGV4U3RyIiwicGFyZW50RWxlbWVudCIsImRhdGFJbmRleCIsInBhcnNlSW50IiwiZ2V0Um93IiwiYWRkUm93IiwidGJvZHkiLCJyb3dTdHIiLCJrZXlQYXJ0cyIsInRlbXBWYWx1ZSIsIm9yZ0ZpZWxkIiwiZGVmYXVsdE91dHB1dCIsIm9uaW5wdXQiLCJvbm91dHB1dCIsIm5ld09iaiIsImFkZEh0bWwiLCJlbGVtZW50IiwiY2xlYXJSb3dzIiwibGlzdCIsImxpc3RVcmwiLCJBZG1pblRleHQiLCJub19vdXRwdXQiLCJmaWVsZF90eXBlIiwiQWRtaW5UYWJsZUZpZWxkIiwicGFyZW50Tm9kZSIsInBsYWNlSGVyZVBhcmVudCIsIkFkbWluVGFibGVSb3ciLCJyb3dIdG1sIiwiZmllbGRPYmoiLCJBZG1pbkRhc2hib2FyZCIsImJhc2UiLCJiYXNlVXJsIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJzb3VyY2VSb290IjoiIn0=
|
|
1
|
+
var AdminPanelComponentsWeb;(()=>{"use strict";var t={41:t=>{t.exports=DataTable},79:t=>{t.exports=HotStaqWeb},91:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDropdown=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dropdown",this.placeholder="Search",this.onsearch=null,this.onselect=null}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onsearch&&("string"==typeof this.onsearch&&(this.onsearch=new Function(this.onsearch)),e.querySelector("input").addEventListener("keyup",(t=>i(this,void 0,void 0,(function*(){const e=t.currentTarget.value;let n=yield this.onsearch(e,t),i=$(this.htmlElements[1]).find(".searchResults");i.empty();for(let t=0;t<n.length;t++){const e=n[t];let l=e.url,s=e.value,o=e.text;i.append($(`<li><a class="dropdown-item" href="${l}" data-value = "${s}" onclick = "this.parentNode.parentNode.parentNode.parentNode.hotComponent.selected (${t});">${o}</a></li>`))}}))))),null}selected(t){return i(this,void 0,void 0,(function*(){if(null!=this.onselect){"string"==typeof this.onselect&&(this.onselect=new Function(this.onselect));const e=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("href"),n=this.htmlElements[1].querySelectorAll("a")[t].getAttribute("data-value"),i=this.htmlElements[1].querySelectorAll("a")[t].innerHTML;yield this.onselect(e,n,i)}}))}output(){return`<div class="dropdown">\n\t\t<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">\n\t\t ${this.inner}\n\t\t</button>\n\t\t<ul class="dropdown-menu">\n\t\t\t<li>\n\t\t\t\t<div class = "input-group">\n\t\t\t\t\t<input type = "text" class = "form-control" placeholder = "${this.placeholder}" value = "" />\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t\t<div class = "searchResults">\n\t\t\t</div>\n\t\t</ul>\n\t</div>`}}e.AdminDropdown=s},383:t=>{t.exports=bootstrap},494:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminEdit=void 0;const s=n(79),o=l(n(383));class d extends s.HotComponent{constructor(t,e){super(t,e),this.onAddClicked=null,this.onEditClicked=null,this.onRemoveClicked=null,this.tag="admin-edit",this.title="",this.button_title="Save",this.attached_list="",this.schema="",this.modalId="",this.add_text="Add",this.add_place_here="dashboardHeader",this.edit_text="Edit",this.edit_place_here="dashboardHeader",this.remove_text="Remove",this.remove_place_here="dashboardHeader",this.css_class="",this.modal=null,this.modalType="add",this.closeOnSave=!0,this.selectedFields=[],this.onsave=null,this.onedit=null,this.ondelete=null}processHotFields(t){return i(this,void 0,void 0,(function*(){const e=this.htmlElements[1].querySelectorAll("[hot-field]");for(let n=0;n<e.length;n++){const i=e[n],l=$(i).attr("hot-field");let s=$(i).attr("hot-field-type"),o=$(i).attr("hot-field-input");null!=s&&""!==s||(s="text"),i.fieldType=s,yield t(i,{name:l,type:s,input:o})}}))}addClicked(){return i(this,arguments,void 0,(function*(t=[]){if(null==this.onAddClicked||!1!==(yield this.onAddClicked())){if(this.modalType="add",yield this.processHotFields(((t,e)=>i(this,void 0,void 0,(function*(){$(t).val("")})))),this.selectedFields=t,null!=this.onadd){"string"==typeof this.onadd&&(this.onadd=new Function(this.onadd));let t=yield this.onadd(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}getAttachedLists(){const t=this.attached_list.split(","),e=[];for(let n=0;n<t.length;n++){const i=t[n];let l=document.getElementById(i);e.push(l)}return e}editClicked(t){return i(this,arguments,void 0,(function*(t,e=[]){if(null==this.onEditClicked||!1!==(yield this.onEditClicked())){if(this.modalType="edit",this.selectedFields=e,""!==this.attached_list){t.attachedEdit=this;let e=t.getSelected();null!=e&&(yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){let i=e[n.name];if(null!=n.input&&""!==n.input){let e=new Function(n.input);i=yield e.call(this,this,t,i)}null!=i&&$(t).val(i)})))),this.selectedFields=[e])}if(null!=this.onedit){"string"==typeof this.onedit&&(this.onedit=new Function(this.onedit));let t=yield this.onedit(this.modalType,this.selectedFields);if(null!=t&&!1===t)return}o.default.Modal.getInstance(`#${this.modalId}`).show()}}))}removeClicked(){return i(this,void 0,void 0,(function*(){if(null!=this.onRemoveClicked&&!1===(yield this.onRemoveClicked()))return;this.modalType="remove";let t=[],e=null;if(""!==this.attached_list){const n=this.getAttachedLists();for(let i=0;i<n.length;i++){e=n[i].hotComponent,e.attachedEdit=this;let l=e.getCheckedRows();if(l.length>0)for(let e=0;e<l.length;e++){let n=l[e];t.push(n)}let s=e.getSelected();null!=s&&(t=[s])}}if(!0===confirm("Are you sure you want to remove this item?")){for(let n=0;n<t.length;n++){let i=t[n];if(null!=e)for(let t in i){let n=e.getFieldType(t);null!=n&&"remove"===n&&delete i[t]}if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(i);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:i})}}if(0===t.length)if(null!=this.ondelete)"string"==typeof this.ondelete&&(this.ondelete=new Function(this.ondelete)),yield this.ondelete(null);else{let t=s.Hot.Data.AdminPanel.removeUrl;yield s.Hot.jsonRequest(t,{schema:this.schema,whereFields:null})}null!=e&&(yield e.refreshList())}}))}onSave(){return i(this,void 0,void 0,(function*(){let t={};if(yield this.processHotFields(((e,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(e).val();if(null!=$(e).attr("hot-value")&&(i=$(e).attr("hot-value")),null!=$(e).attr("hot-field-save")){let t=$(e).attr("hot-field-save");if(null!=t&&""!==t){let n=new Function(t);i=yield n.call(this,this,e,i)}}if("array"===n.type)return null==t[n.name]&&(t[n.name]=[]),void t[n.name].push(i);t[n.name]=i})))),null!=this.onsave){if("string"==typeof this.onsave&&(this.onsave=new Function(this.onsave)),!1===(yield this.onsave(this.modalType,t,this.selectedFields)))return}else{if("add"===this.modalType){let e=s.Hot.Data.AdminPanel.addUrl;yield s.Hot.jsonRequest(e,{schema:this.schema,fields:t})}if("edit"===this.modalType){if(0===this.selectedFields.length)return void alert("No item(s) selected!");let e={};yield this.processHotFields(((t,n)=>i(this,void 0,void 0,(function*(){if("remove"===n.type)return;let i=$(t).val();if(null!=$(t).attr("hot-value")&&(i=$(t).attr("hot-value")),"array"===n.type)return null==e[n.name]&&(e[n.name]=[]),void e[n.name].push(i);e[n.name]=i}))));let n=s.Hot.Data.AdminPanel.editUrl;yield s.Hot.jsonRequest(n,{schema:this.schema,whereFields:e,fields:t})}}if(""!==this.attached_list){const t=this.getAttachedLists();for(let e=0;e<t.length;e++){let n=t[e].hotComponent;n.attachedEdit=this,yield n.refreshList()}}!0===this.closeOnSave&&o.default.Modal.getInstance(`#${this.modalId}`).hide()}))}onPostPlace(t,e){return this.modal=new o.default.Modal($(`#${this.modalId}`)[0],{backdrop:!0,keyboard:!0,focus:!0}),setTimeout((()=>{if(""!==this.attached_list){const t=this.getAttachedLists();for(let e=0;e<t.length;e++){let n=t[e].hotComponent;null!=n&&(n.attachedEdit=this)}}}),50),null}output(){if(""===this.name)throw new Error("You must specify a name for each admin-edit element!");this.modalId=`${this.name}Modal`;let t=[{html:`\n\t\t\t\x3c!-- ${this.title} Modal Start --\x3e\n\t\t\t<div class="modal fade ${this.css_class}" id="${this.modalId}" tabindex="-1" aria-labelledby="${this.name}ModalLabel" aria-hidden="true">\n\t\t\t\t<div class="modal-dialog">\n\t\t\t\t\t<div class="modal-content">\n\t\t\t\t\t<div class="modal-header">\n\t\t\t\t\t\t<h5 class="modal-title" id="${this.name}ModalLabel">${this.title}</h5>\n\t\t\t\t\t\t<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-body">\n\t\t\t\t\t\t<hot-place-here name = "modalBody" type = "modal"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="modal-footer">\n\t\t\t\t\t\t<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>\n\t\t\t\t\t\t<button type="button" class="btn btn-primary" onclick = "document.getElementById('${this.modalId}').onSave ();">${this.button_title}</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t\x3c!-- ${this.title} Modal End --\x3e`,documentSelector:"body"}];return""!==this.add_place_here&&t.push({html:`<button id = "${this.modalId}-add-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.addClicked ();">${this.add_text}</button>`,documentSelector:`hot-place-here[name="${this.add_place_here}"]`}),""!==this.edit_place_here&&t.push({html:`<button id = "${this.modalId}-edit-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.editClicked ();">${this.edit_text}</button>`,documentSelector:`hot-place-here[name="${this.edit_place_here}"]`}),""!==this.remove_place_here&&t.push({html:`<button id = "${this.modalId}-remove-btn" type="button" class="btn btn-sm btn-outline-secondary" onclick = "this.removeClicked ();">${this.remove_text}</button>`,documentSelector:`hot-place-here[name="${this.remove_place_here}"]`}),t}}e.AdminEdit=d},594:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminButton=void 0;const l=n(79);class s extends l.HotComponent{constructor(t,e){super(t,e),this.tag="admin-button",this.css_class="btn btn-sm btn-outline-secondary",this.onclick=null}buttonClicked(){return i(this,void 0,void 0,(function*(){}))}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null!=this.onclick&&("string"==typeof this.onclick&&(this.onclick=new Function(this.onclick)),e.addEventListener("click",this.onclick)),null}output(){return`<button id = "${this.htmlElements[0].id}" class = "${this.css_class}" onclick = "this.buttonClicked ();">${this.inner}</button>`}}e.AdminButton=s},620:function(t,e,n){var i=this&&this.__awaiter||function(t,e,n,i){return new(n||(n=Promise))((function(l,s){function o(t){try{a(i.next(t))}catch(t){s(t)}}function d(t){try{a(i.throw(t))}catch(t){s(t)}}function a(t){var e;t.done?l(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(o,d)}a((i=i.apply(t,e||[])).next())}))},l=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTable=void 0;const s=n(79),o=l(n(41));class d extends s.HotComponent{constructor(t,e){super(t,e),this.rowElements=[],this.tag="admin-table",this.title="",this.schema="",this.headers={fields:{},elements:{},indicies:[]},this.rowElements=[],this.onlist=null,this.listurl="",this.checkbox=!0,this.singleclickedit=!1,this.onselectedrow=null,this.attachedEdit=null,this.selected=-1,this.dataTable=null,this.isListRefreshing=!1}addHeader(t){let e=this.htmlElements[0].getElementsByTagName("thead")[0];this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.hotComponent.field),e.appendChild(t)}addHeaderDataOnly(t,e){this.headers.indicies.length<1&&this.headers.indicies.push(null),this.headers.indicies.push(t.field),this.headers.fields[t.field]=t,this.headers.elements[t.field]=e}getFieldType(t){if(null!=this.headers.elements[t]){let e=this.headers.elements[t].hotComponent;if(null!=e)return e.field_type}return null}selectRow(t,e){return i(this,void 0,void 0,(function*(){if(null!=this.onselectedrow){"string"==typeof this.onselectedrow&&(this.onselectedrow=new Function(this.onselectedrow));let t=null;if(null!=this.rowElements[e]&&(t=this.rowElements[e].fields),!1===(yield this.onselectedrow(e,t)))return}{let e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("tr");for(let t=0;t<e.length;t++){let n=e[t];!0===n.classList.contains("table-primary")&&n.classList.remove("table-primary")}t.classList.add("table-primary")}this.selected=e,"string"==typeof this.singleclickedit&&(this.singleclickedit=s.HotStaq.parseBoolean(this.singleclickedit)),!0===this.singleclickedit&&null!=this.attachedEdit&&(yield this.attachedEdit.editClicked(this))}))}getSelected(){let t=this.selected;return t<0?null:this.dataTable.row(t).data()}getCheckedRows(){let t=[],e=this.htmlElements[1].getElementsByTagName("tbody")[0].getElementsByTagName("input");for(let n=0;n<e.length;n++){let i=e[n];if(null!=i.checked&&!0===i.checked){let e=i.parentElement.parentElement.getAttribute("data-index"),n=parseInt(e);t.push(this.rowElements[n].fields)}}return t}getRow(t){return this.rowElements[t].fields}addRow(t){if(null==t)return;if(0==t.length)return;this.htmlElements[1].getElementsByTagName("tbody")[0];let e=this.rowElements.length;"string"==typeof this.checkbox&&(this.checkbox=s.HotStaq.parseBoolean(this.checkbox));let n=[];for(let i=0;i<this.headers.indicies.length;i++){let l=this.headers.indicies[i];if(null==l)continue;let s=t[l],o=l.split(".");if(o.length>1){let e=t[o[0]];for(let t=1;t<o.length;t++)e=e[o[t]];s=e}let d=null;if(null!=this.headers.elements[l]){let t=this.getFieldType(l);if(null==t&&(t="text"),"remove"!==t){const t=this.headers.fields[l];let n=!0;null!=t&&(null!=t.oninput&&("string"==typeof t.oninput&&(this.headers.fields[l].oninput=new Function(t.oninput)),s=t.oninput(s)),null!=t.onoutput)&&("string"==typeof t.onoutput&&(this.headers.fields[l].onoutput=new Function(t.onoutput)),n=!1,d={index:e,value:t.onoutput(e,s)}),!0===n&&(d=s)}}n.push(d)}null==this.rows&&(this.rows=[])}clearRows(){return i(this,void 0,void 0,(function*(){this.rowElements=[],this.dataTable.clear()}))}refreshList(){return i(this,arguments,void 0,(function*(t=null){this.isListRefreshing=!0;let e={search:"",offset:0,limit:10};if(null!=this.dataTable){const t=this.dataTable.search(),n=this.dataTable.page.info();e={search:t||"",offset:n.start||0,limit:n.length||10}}if(null!=this.onlist)"string"==typeof this.onlist&&(this.onlist=new Function(this.onlist)),t=yield this.onlist(e);else{let n="";""!==this.listurl&&(n=this.listurl),""!==n&&(t=yield s.Hot.jsonRequest(n,{schema:this.schema,search:e}))}if(this.clearRows(),null!=t&&null!=t.error)return console.error(`List error: ${t.error}`),this.isListRefreshing=!1,null;let n=this.htmlElements[1].getElementsByTagName("tbody")[0];return n.hotComponent=this,$(n).on("click","tr",(function(){const t=this.parentNode.hotComponent,e=t.dataTable.row(this).index();t.selectRow(this,e)})),this.isListRefreshing=!1,t}))}onPostPlace(t,e){return setTimeout((()=>i(this,void 0,void 0,(function*(){const t=$(e).find("table");let n=[];$(t).find("thead th").each((function(){const t=$(this).text(),e=$(this).data("field");let i=$(this).data("field-type");null!=t&&""!==t&&null!=e&&""!==e&&("text"===i&&(i="string"),n.push({title:t,data:e}))})),$(t).find("thead").remove(),this.dataTable=new o.default(t[0],{processing:!0,serverSide:!0,colReorder:!0,scroller:!0,select:!0,dom:"Qlfrtip",columns:n,data:[],ajax:(t,e,n)=>i(this,void 0,void 0,(function*(){if(!0===this.isListRefreshing)return;const t=yield this.refreshList(),n={data:[],recordsTotal:0,recordsFiltered:0};t instanceof Array?n.data=t:(null!=t.length&&(n.recordsTotal=t.length,n.recordsFiltered=t.length),null!=t.data&&(n.data=t.data)),e(n)}))})}))),50),null}output(){return`\n\t\t<div id = "${this.htmlElements[0].id}">\n\t\t\t<h2>${this.title}</h2>\n\t\t\t<div class="table-responsive">\n\t\t\t<table id = "${this.htmlElements[0].id}Table" class="table table-striped table-sm">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr hot-place-here = "header">\n\t\t\t\t\t\t<th></th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody hot-place-here = "results">\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<hot-place-here name = "afterTable"></hot-place-here>\n\t\t\t</div>\n\t\t</div>`}}e.AdminTable=d},741:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminText=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-text",this.no_output="0",this.css_class="form-control"}onPostPlace(t,e){let n=t.querySelectorAll('hot-place-here[type="modal"]');if(n.length>0){let i=n[0];t.removeChild(e),i.appendChild(e)}return null}output(){let t="";if(null!=this.value&&(t=this.value),"1"===this.no_output)return`<div><input class="${this.css_class}" type = "hidden" value = "${t}" /></div>`;const e=this.htmlElements[0].getAttribute("hot-field");let n=this.htmlElements[0].getAttribute("hot-field-type"),i=this.htmlElements[0].getAttribute("type")||"text";return null==n&&(n="text"),`<div>\n\t\t\t<label class="form-label">${this.inner}</label>\n\t\t\t<input class="${this.css_class}" type = "${i}" hot-field = "${e}" hot-field-type = "${n}" value = "${t}" />\n\t\t</div>`}}e.AdminText=l},837:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableField=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-field",this.field=0,this.field_type="text",this.no_output="0",this.oninput=null,this.onoutput=null}onPostPlace(t,e){let n=null;return n=null!=t.parentNode.parentNode.hotComponent?t.parentNode.parentNode.hotComponent:t.parentNode.parentNode.parentNode.parentNode.hotComponent,null!=n&&n.addHeaderDataOnly(this,e),null}output(){return"1"===this.no_output?[{html:"<div></div>",placeHereParent:"afterTable"}]:[{html:`<th data-field = "${this.field}" data-field-type = "${this.field_type}">${this.inner}</th>`,placeHereParent:"header"}]}}e.AdminTableField=l},877:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminTableRow=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-table-row",this.fields=[]}onPostPlace(t,e){return t.parentNode.parentNode.parentNode.hotComponent.rowElements.push({fields:this.fields,element:e}),null}output(){let t="";this.fields.length>0&&(t+='<td><input type = "checkbox" /></td>');for(let e=0;e<this.fields.length;e++){let n=this.fields[e];for(let e in n)t+=`<td>${n[e]}</td>`}return[{html:`<tr>${t}</tr>`,placeHereParent:"results"}]}}e.AdminTableRow=l},924:(t,e,n)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.AdminDashboard=void 0;const i=n(79);class l extends i.HotComponent{constructor(t,e){super(t,e),this.tag="admin-dashboard",this.title="",this.base=""}onPostPlace(t,e){return null==i.Hot.Data.AdminPanel&&(i.Hot.Data.AdminPanel={}),null==i.Hot.Data.AdminPanel.baseUrl&&(i.Hot.Data.AdminPanel.baseUrl=this.base),null==i.Hot.Data.AdminPanel.addUrl&&(i.Hot.Data.AdminPanel.addUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/add`),null==i.Hot.Data.AdminPanel.editUrl&&(i.Hot.Data.AdminPanel.editUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/edit`),null==i.Hot.Data.AdminPanel.removeUrl&&(i.Hot.Data.AdminPanel.removeUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/remove`),null==i.Hot.Data.AdminPanel.listUrl&&(i.Hot.Data.AdminPanel.listUrl=`${i.Hot.Data.AdminPanel.baseUrl}/v1/data/list`),null}output(){return`\n\t\t<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">\n\t\t\t<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">\n\t\t\t\t<h1 class="h2">${this.title}</h1>\n\t\t\t\t<div class="btn-toolbar mb-2 mb-md-0">\n\t\t\t\t\t<div class="btn-group me-2">\n\t\t\t\t\t\t<hot-place-here name = "dashboardHeader"></hot-place-here>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hot-place-here name = "body"></hot-place-here>\n\t\t</main>`}}e.AdminDashboard=l}},e={};function n(i){var l=e[i];if(void 0!==l)return l.exports;var s=e[i]={exports:{}};return t[i].call(s.exports,s,s.exports,n),s.exports}var i={};(()=>{var t=i;Object.defineProperty(t,"__esModule",{value:!0}),t.AdminText=t.AdminTableRow=t.AdminTableField=t.AdminTable=t.AdminEdit=t.AdminDashboard=t.AdminDropdown=t.AdminButton=void 0;const e=n(594);Object.defineProperty(t,"AdminButton",{enumerable:!0,get:function(){return e.AdminButton}});const l=n(91);Object.defineProperty(t,"AdminDropdown",{enumerable:!0,get:function(){return l.AdminDropdown}});const s=n(924);Object.defineProperty(t,"AdminDashboard",{enumerable:!0,get:function(){return s.AdminDashboard}});const o=n(494);Object.defineProperty(t,"AdminEdit",{enumerable:!0,get:function(){return o.AdminEdit}});const d=n(620);Object.defineProperty(t,"AdminTable",{enumerable:!0,get:function(){return d.AdminTable}});const a=n(837);Object.defineProperty(t,"AdminTableField",{enumerable:!0,get:function(){return a.AdminTableField}});const r=n(877);Object.defineProperty(t,"AdminTableRow",{enumerable:!0,get:function(){return r.AdminTableRow}});const h=n(741);Object.defineProperty(t,"AdminText",{enumerable:!0,get:function(){return h.AdminText}})})(),AdminPanelComponentsWeb=i})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsR0FPWCxPQUhBNE8sRUFBb0JILEdBQVVsSSxLQUFLeEcsRUFBT0MsUUFBU0QsRUFBUUEsRUFBT0MsUUFBU3dPLEdBR3BFek8sRUFBT0MsT0FDZixDLHFNQ3RCQSxlQVVFLDJFQVZPLEVBQUFzSSxXQUFXLElBQ3BCLGNBVUUsNkVBVk8sRUFBQW5JLGFBQWEsSUFDdEIsZUFVRSw4RUFWTyxFQUFBaU8sY0FBYyxJQUN2QixlQVVFLHlFQVZPLEVBQUFwTCxTQUFTLElBQ2xCLGVBVUUsMEVBVk8sRUFBQTBGLFVBQVUsSUFDbkIsZUFVRSwrRUFWTyxFQUFBb0YsZUFBZSxJQUN4QixlQVVFLDZFQVZPLEVBQUFFLGFBQWEsSUFDdEIsZUFVRSx5RUFWTyxFQUFBTixTQUFTLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi9leHRlcm5hbCB2YXIgXCJEYXRhVGFibGVcIiIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi9leHRlcm5hbCB2YXIgXCJIb3RTdGFxV2ViXCIiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1kcm9wZG93bi50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi9leHRlcm5hbCB2YXIgXCJib290c3RyYXBcIiIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLWVkaXQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi1idXR0b24udHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRleHQudHMiLCJ3ZWJwYWNrOi8vQWRtaW5QYW5lbENvbXBvbmVudHNXZWIvLi9zcmMvY29tcG9uZW50cy9hZG1pbi10YWJsZS1maWVsZC50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLXRhYmxlLXJvdy50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9jb21wb25lbnRzL2FkbWluLWRhc2hib2FyZC50cyIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9BZG1pblBhbmVsQ29tcG9uZW50c1dlYi8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IERhdGFUYWJsZTsiLCJtb2R1bGUuZXhwb3J0cyA9IEhvdFN0YXFXZWI7IiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkRyb3Bkb3duIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgc2VhcmNoIHN0cmluZyBwbGFjZWhvbGRlciB0byBzaG93LlxuXHQgKi9cblx0cGxhY2Vob2xkZXI6IHN0cmluZztcblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHdoZW4gdGhlIGtleWJvYXJkIHVwIGJ1dHRvbiBpcyB0cmlnZ2VyZWQuXG5cdCAqL1xuXHRvbnNlYXJjaDogKHNlYXJjaFRleHQ6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFByb21pc2U8eyB1cmw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgdGV4dDogc3RyaW5nOyB9W10+O1xuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiBhbiBzZWFyY2ggcmVzdWx0IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHQgKi9cblx0b25zZWxlY3Q6ICh1cmw6IHN0cmluZywgdmFsdWU6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWRyb3Bkb3duXCI7XG5cdFx0dGhpcy5wbGFjZWhvbGRlciA9IFwiU2VhcmNoXCI7XG5cdFx0dGhpcy5vbnNlYXJjaCA9IG51bGw7XG5cdFx0dGhpcy5vbnNlbGVjdCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vbnNlYXJjaCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zZWFyY2gpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2VhcmNoID0gKDwoc2VhcmNoVGV4dDogc3RyaW5nLCBldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gUHJvbWlzZTx7IHVybDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB0ZXh0OiBzdHJpbmc7IH1bXT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2VhcmNoKSk7XG5cblx0XHRcdGh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IgKFwiaW5wdXRcIikuYWRkRXZlbnRMaXN0ZW5lciAoXCJrZXl1cFwiLCBcblx0XHRcdFx0YXN5bmMgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdGNvbnN0IHNlYXJjaFRleHQgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuXG5cdFx0XHRcdFx0bGV0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLm9uc2VhcmNoIChzZWFyY2hUZXh0LCBldmVudCk7XG5cblx0XHRcdFx0XHRsZXQgc2VhcmNoUmVzdWx0c0RpdiA9ICQodGhpcy5odG1sRWxlbWVudHNbMV0pLmZpbmQgKFwiLnNlYXJjaFJlc3VsdHNcIik7XG5cblx0XHRcdFx0XHRzZWFyY2hSZXN1bHRzRGl2LmVtcHR5ICgpO1xuXG5cdFx0XHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCByZXN1bHRzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHJlc3VsdHNbaUlkeF07XG5cdFx0XHRcdFx0XHRsZXQgdXJsOiBzdHJpbmcgPSByZXN1bHQudXJsO1xuXHRcdFx0XHRcdFx0bGV0IHZhbHVlOiBzdHJpbmcgPSByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0XHRsZXQgdGV4dDogc3RyaW5nID0gcmVzdWx0LnRleHQ7XG5cblx0XHRcdFx0XHRcdHNlYXJjaFJlc3VsdHNEaXYuYXBwZW5kICgkKGA8bGk+PGEgY2xhc3M9XFxcImRyb3Bkb3duLWl0ZW1cXFwiIGhyZWY9XFxcIiR7dXJsfVxcXCIgZGF0YS12YWx1ZSA9IFwiJHt2YWx1ZX1cIiBvbmNsaWNrID0gXFxcInRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQuc2VsZWN0ZWQgKCR7aUlkeH0pO1xcXCI+JHt0ZXh0fTwvYT48L2xpPmApKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZWQgd2hlbiBhbiBpdGVtIGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0YXN5bmMgc2VsZWN0ZWQgKGluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbnNlbGVjdCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25zZWxlY3QpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uc2VsZWN0ID0gKDwodXJsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPj5uZXcgRnVuY3Rpb24gKHRoaXMub25zZWxlY3QpKTtcblxuXHRcdFx0Y29uc3QgdXJsID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJhXCIpW2luZGV4XS5nZXRBdHRyaWJ1dGUgKFwiaHJlZlwiKTtcblx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5odG1sRWxlbWVudHNbMV0ucXVlcnlTZWxlY3RvckFsbCAoXCJhXCIpW2luZGV4XS5nZXRBdHRyaWJ1dGUgKFwiZGF0YS12YWx1ZVwiKTtcblx0XHRcdGNvbnN0IHRleHQgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5xdWVyeVNlbGVjdG9yQWxsIChcImFcIilbaW5kZXhdLmlubmVySFRNTDtcblxuXHRcdFx0YXdhaXQgdGhpcy5vbnNlbGVjdCAodXJsLCB2YWx1ZSwgdGV4dCk7XG5cdFx0fVxuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmdcblx0e1xuXHRcdHJldHVybiAoXG5cdGA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cblx0XHQ8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGRyb3Bkb3duLXRvZ2dsZVwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG5cdFx0ICAke3RoaXMuaW5uZXJ9XG5cdFx0PC9idXR0b24+XG5cdFx0PHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxuXHRcdFx0PGxpPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzID0gXCJpbnB1dC1ncm91cFwiPlxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlID0gXCJ0ZXh0XCIgY2xhc3MgPSBcImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyID0gXCIke3RoaXMucGxhY2Vob2xkZXJ9XCIgdmFsdWUgPSBcIlwiIC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9saT5cblx0XHRcdDxkaXYgY2xhc3MgPSBcInNlYXJjaFJlc3VsdHNcIj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvdWw+XG5cdDwvZGl2PmApO1xuXHR9XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGJvb3RzdHJhcDsiLCJpbXBvcnQgeyBIb3RTdGFxLCBIb3QsIEhvdEFQSSwgSG90Q29tcG9uZW50LCBIb3RDb21wb25lbnRPdXRwdXQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5pbXBvcnQgYm9vdHN0cmFwIGZyb20gXCJib290c3RyYXBcIjtcblxuaW1wb3J0IHsgQWRtaW5UYWJsZSB9IGZyb20gXCIuL2FkbWluLXRhYmxlXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkVkaXQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSB0aXRsZSBvZiB0aGlzIGVkaXQgbW9kYWwuXG5cdCAqL1xuXHR0aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJ1dHRvbiB0aXRsZS5cblx0ICovXG5cdGJ1dHRvbl90aXRsZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGxpc3QuXG5cdCAqL1xuXHRhdHRhY2hlZF9saXN0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbW9kYWwgaWQuXG5cdCAqL1xuXHRtb2RhbElkOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCBmb3IgdGhlIGFkZCBidXR0b24uXG5cdCAqL1xuXHRhZGRfdGV4dDogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGxvY2F0aW9uIHRvIHB1dCB0aGUgYWRkIGJ1dHRvbi5cblx0ICovXG5cdGFkZF9wbGFjZV9oZXJlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgdGV4dCBmb3IgdGhlIGVkaXQgYnV0dG9uLlxuXHQgKi9cblx0ZWRpdF90ZXh0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgbG9jYXRpb24gdG8gcHV0IHRoZSBlZGl0IGJ1dHRvbi5cblx0ICovXG5cdGVkaXRfcGxhY2VfaGVyZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIHRleHQgZm9yIHRoZSByZW1vdmUgYnV0dG9uLlxuXHQgKi9cblx0cmVtb3ZlX3RleHQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBsb2NhdGlvbiB0byBwdXQgdGhlIHJlbW92ZSBidXR0b24uXG5cdCAqL1xuXHRyZW1vdmVfcGxhY2VfaGVyZTogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGhvdC1jbGFzcyBhdHRyaWJ1dGUgdG8gcGFzcyB0byBhZGQgdG8gdGhlIG1vZGFsJ3MgY2xhc3Nlcy5cblx0ICovXG5cdGNzc19jbGFzczogc3RyaW5nO1xuXHQvKipcblx0ICogVGhlIGJvb3RzdHJhcCBtb2RhbCBpbnN0YW5jZS5cblx0ICovXG5cdG1vZGFsOiBib290c3RyYXAuTW9kYWw7XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIGNsb3NlIHRoZSBtb2RhbCB3aGVuIHNhdmUgaXMgY2xpY2tlZC5cblx0ICovXG5cdGNsb3NlT25TYXZlOiBib29sZWFuO1xuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgbW9kYWwgdG8gb3Blbi4gQ2FuIGJlOlxuXHQgKiAqIGFkZFxuXHQgKiAqIGVkaXRcblx0ICogKiByZW1vdmVcblx0ICovXG5cdHByb3RlY3RlZCBtb2RhbFR5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3RlZCBmaWVsZHMuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgc2VsZWN0ZWRGaWVsZHM6IGFueVtdO1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIHNhdmUgYnV0dG9uIGlzIGNsaWNrZWQuIElmIHRoaXMgcmV0dXJucyB0cnVlLCB0aGUgbW9kYWwgd2lsbCBjbG9zZS5cblx0ICogSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgbW9kYWwgd2lsbCBub3QgY2xvc2UuXG5cdCAqL1xuXHRvbnNhdmU6IChtb2RhbFR5cGU6IHN0cmluZywgdmFsdWVzOiBhbnksIHNlbGVjdGVkRmllbGRzOiBhbnlbXSkgPT4gUHJvbWlzZTxib29sZWFuPjtcblx0LyoqXG5cdCAqIFdoYXQgdG8gZXhlY3V0ZSB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0b25hZGQ6IChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmVkaXQ6IChtb2RhbFR5cGU6IHN0cmluZywgc2VsZWN0ZWRGaWVsZHM6IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogV2hhdCB0byBleGVjdXRlIHdoZW4gdGhlIGRlbGV0ZSBidXR0b24gaXMgY2xpY2tlZC5cblx0ICovXG5cdG9uZGVsZXRlOiAoc2VsZWN0ZWRGaWVsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWVkaXRcIjtcblx0XHR0aGlzLnRpdGxlID0gXCJcIjtcblx0XHR0aGlzLmJ1dHRvbl90aXRsZSA9IFwiU2F2ZVwiO1xuXHRcdHRoaXMuYXR0YWNoZWRfbGlzdCA9IFwiXCI7XG5cdFx0dGhpcy5zY2hlbWEgPSBcIlwiO1xuXG5cdFx0dGhpcy5tb2RhbElkID0gXCJcIjtcblx0XHR0aGlzLmFkZF90ZXh0ID0gXCJBZGRcIjtcblx0XHR0aGlzLmFkZF9wbGFjZV9oZXJlID0gXCJkYXNoYm9hcmRIZWFkZXJcIjtcblx0XHR0aGlzLmVkaXRfdGV4dCA9IFwiRWRpdFwiO1xuXHRcdHRoaXMuZWRpdF9wbGFjZV9oZXJlID0gXCJkYXNoYm9hcmRIZWFkZXJcIjtcblx0XHR0aGlzLnJlbW92ZV90ZXh0ID0gXCJSZW1vdmVcIjtcblx0XHR0aGlzLnJlbW92ZV9wbGFjZV9oZXJlID0gXCJkYXNoYm9hcmRIZWFkZXJcIjtcblx0XHR0aGlzLmNzc19jbGFzcyA9IFwiXCI7XG5cdFx0dGhpcy5tb2RhbCA9IG51bGw7XG5cdFx0dGhpcy5tb2RhbFR5cGUgPSBcImFkZFwiO1xuXHRcdHRoaXMuY2xvc2VPblNhdmUgPSB0cnVlO1xuXHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbXTtcblx0XHR0aGlzLm9uc2F2ZSA9IG51bGw7XG5cdFx0dGhpcy5vbmVkaXQgPSBudWxsO1xuXHRcdHRoaXMub25kZWxldGUgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb2Nlc3MgdGhlIGhvdCBmaWVsZHMuXG5cdCAqL1xuXHRhc3luYyBwcm9jZXNzSG90RmllbGRzIChvbkZpZWxkOiAoaHRtbEVsZW1lbnQ6IEVsZW1lbnQsIFxuXHRcdGZpZWxkOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyB9KSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0Y29uc3QgZWxtcyA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLnF1ZXJ5U2VsZWN0b3JBbGwgKFwiW2hvdC1maWVsZF1cIik7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGVsbXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0Y29uc3QgZWxtID0gZWxtc1tpSWR4XTtcblx0XHRcdGNvbnN0IGZpZWxkID0gJChlbG0pLmF0dHIgKFwiaG90LWZpZWxkXCIpO1xuXHRcdFx0bGV0IGZpZWxkVHlwZSA9ICQoZWxtKS5hdHRyIChcImhvdC1maWVsZC10eXBlXCIpO1xuXHRcdFx0bGV0IGZpZWxkSW5wdXQgPSAkKGVsbSkuYXR0ciAoXCJob3QtZmllbGQtaW5wdXRcIik7XG5cblx0XHRcdGlmICgoZmllbGRUeXBlID09IG51bGwpIHx8IChmaWVsZFR5cGUgPT09IFwiXCIpKVxuXHRcdFx0XHRmaWVsZFR5cGUgPSBcInRleHRcIjtcblxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0ZWxtLmZpZWxkVHlwZSA9IGZpZWxkVHlwZTtcblxuXHRcdFx0YXdhaXQgb25GaWVsZCAoZWxtLCB7IG5hbWU6IGZpZWxkLCB0eXBlOiBmaWVsZFR5cGUsIGlucHV0OiBmaWVsZElucHV0IH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgZXZlbnQgdGhhdCBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlIGFkZCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBhZGQgbW9kYWwgb3BlbnMuXG5cdCAqL1xuXHRvbkFkZENsaWNrZWQ6ICgpID0+IFByb21pc2U8Ym9vbGVhbj4gPSBudWxsO1xuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIHRoZSBhZGQgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRhc3luYyBhZGRDbGlja2VkIChzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSk6IFByb21pc2U8dm9pZD5cblx0e1xuXHRcdGlmICh0aGlzLm9uQWRkQ2xpY2tlZCAhPSBudWxsKVxuXHRcdHtcblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uQWRkQ2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiYWRkXCI7XG5cblx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKFxuXHRcdFx0YXN5bmMgKGh0bWxFbGVtZW50OiBFbGVtZW50LCBmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkgPT5cblx0XHRcdHtcblx0XHRcdFx0JChodG1sRWxlbWVudCkudmFsIChcIlwiKTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IHNlbGVjdGVkRmllbGRzO1xuXG5cdFx0aWYgKHRoaXMub25hZGQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uYWRkKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbmFkZCA9ICg8KG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uYWRkKSk7XG5cblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uYWRkICh0aGlzLm1vZGFsVHlwZSwgdGhpcy5zZWxlY3RlZEZpZWxkcyk7XG5cblx0XHRcdGlmIChyZXN1bHQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5zaG93ICgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBldmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2hlbiB0aGUgZWRpdCBidXR0b24gaXMgY2xpY2tlZC5cblx0ICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlZGl0IG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25FZGl0Q2xpY2tlZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IG51bGw7XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgYXR0YWNoZWQgbGlzdHMuXG5cdCAqL1xuXHRnZXRBdHRhY2hlZExpc3RzICgpOiBIVE1MRWxlbWVudFtdXG5cdHtcblx0XHRjb25zdCBzdHJzID0gdGhpcy5hdHRhY2hlZF9saXN0LnNwbGl0IChcIixcIik7XG5cdFx0Y29uc3QgYXR0YWNoZWRMaXN0czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdHJzLmxlbmd0aDsgaSsrKVxuXHRcdHtcblx0XHRcdGNvbnN0IGF0dGFjaGVkTGlzdCA9IHN0cnNbaV07XG5cdFx0XHRsZXQgYXR0YWNoZWRMaXN0T2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKGF0dGFjaGVkTGlzdCk7XG5cdFx0XHRhdHRhY2hlZExpc3RzLnB1c2ggKGF0dGFjaGVkTGlzdE9iaik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChhdHRhY2hlZExpc3RzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIHRoZSBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgZWRpdENsaWNrZWQgKGF0dGFjaGVkTGlzdDogQWRtaW5UYWJsZSwgc2VsZWN0ZWRGaWVsZHM6IGFueVtdID0gW10pOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbkVkaXRDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25FZGl0Q2xpY2tlZCAoKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLm1vZGFsVHlwZSA9IFwiZWRpdFwiO1xuXG5cdFx0dGhpcy5zZWxlY3RlZEZpZWxkcyA9IHNlbGVjdGVkRmllbGRzO1xuXG5cdFx0aWYgKHRoaXMuYXR0YWNoZWRfbGlzdCAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRhdHRhY2hlZExpc3QuYXR0YWNoZWRFZGl0ID0gdGhpcztcblx0XHRcdGxldCBzZWxlY3RlZEZpZWxkID0gYXR0YWNoZWRMaXN0LmdldFNlbGVjdGVkICgpO1xuXG5cdFx0XHRpZiAoc2VsZWN0ZWRGaWVsZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKFxuXHRcdFx0XHRcdGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGlucHV0OiBzdHJpbmc7IH0pID0+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlID0gc2VsZWN0ZWRGaWVsZFtmaWVsZC5uYW1lXTtcblxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLmlucHV0ICE9IG51bGwpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmIChmaWVsZC5pbnB1dCAhPT0gXCJcIilcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGxldCBmdW5jID0gbmV3IEZ1bmN0aW9uIChmaWVsZC5pbnB1dCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWUgPSBhd2FpdCBmdW5jLmNhbGwgKHRoaXMsIHRoaXMsIGh0bWxFbGVtZW50LCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKHZhbHVlICE9IG51bGwpXG5cdFx0XHRcdFx0XHRcdCQoaHRtbEVsZW1lbnQpLnZhbCAodmFsdWUpO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRGaWVsZHMgPSBbc2VsZWN0ZWRGaWVsZF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25lZGl0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmVkaXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9uZWRpdCA9ICg8KG1vZGFsVHlwZTogc3RyaW5nLCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uZWRpdCkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbmVkaXQgKHRoaXMubW9kYWxUeXBlLCB0aGlzLnNlbGVjdGVkRmllbGRzKTtcblxuXHRcdFx0aWYgKHJlc3VsdCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ym9vdHN0cmFwLk1vZGFsLmdldEluc3RhbmNlIChgIyR7dGhpcy5tb2RhbElkfWApLnNob3cgKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGV2ZW50IHRoYXQgY2FuIGJlIGNhbGxlZCB3aGVuIHRoZSByZW1vdmUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSB0aGUgcmVtb3ZlIG1vZGFsIG9wZW5zLlxuXHQgKi9cblx0b25SZW1vdmVDbGlja2VkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gbnVsbDtcblxuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgcmVtb3ZlIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0YXN5bmMgcmVtb3ZlQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdFx0aWYgKHRoaXMub25SZW1vdmVDbGlja2VkICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0bGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMub25SZW1vdmVDbGlja2VkICgpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubW9kYWxUeXBlID0gXCJyZW1vdmVcIjtcblxuXHRcdGxldCB3aGVyZUZpZWxkczogYW55W10gPSBbXTtcblx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlID0gbnVsbDtcblxuXHRcdGlmICh0aGlzLmF0dGFjaGVkX2xpc3QgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0Y29uc3QgYXR0YWNoZWRMaXN0cyA9IHRoaXMuZ2V0QXR0YWNoZWRMaXN0cyAoKTtcblxuXHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBhdHRhY2hlZExpc3RzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgYXR0YWNoZWRMaXN0ID0gYXR0YWNoZWRMaXN0c1tpSWR4XTtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRob3RDb21wb25lbnQgPSBhdHRhY2hlZExpc3QuaG90Q29tcG9uZW50O1xuXHRcdFx0XHRob3RDb21wb25lbnQuYXR0YWNoZWRFZGl0ID0gdGhpcztcblx0XHRcdFx0bGV0IGNoZWNrZWRSb3dzID0gaG90Q29tcG9uZW50LmdldENoZWNrZWRSb3dzICgpO1xuXG5cdFx0XHRcdGlmIChjaGVja2VkUm93cy5sZW5ndGggPiAwKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGVja2VkUm93cy5sZW5ndGg7IGkrKylcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRsZXQgY2hlY2tlZFJvdyA9IGNoZWNrZWRSb3dzW2ldO1xuXHRcdFx0XHRcdFx0d2hlcmVGaWVsZHMucHVzaCAoY2hlY2tlZFJvdyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHNlbGVjdGVkRmllbGQgPSBob3RDb21wb25lbnQuZ2V0U2VsZWN0ZWQgKCk7XG5cblx0XHRcdFx0aWYgKHNlbGVjdGVkRmllbGQgIT0gbnVsbClcblx0XHRcdFx0XHR3aGVyZUZpZWxkcyA9IFtzZWxlY3RlZEZpZWxkXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBjb25maXJtZWQ6IGJvb2xlYW4gPSBjb25maXJtIChcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBpdGVtP1wiKTtcblxuXHRcdGlmIChjb25maXJtZWQgPT09IHRydWUpXG5cdFx0e1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB3aGVyZUZpZWxkcy5sZW5ndGg7IGkrKylcblx0XHRcdHtcblx0XHRcdFx0bGV0IHdoZXJlRmllbGQgPSB3aGVyZUZpZWxkc1tpXTtcblxuXHRcdFx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgYW55IGZpZWxkcyB0aGF0IGFyZSBtYXJrZWQgYXMgcmVtb3ZlLlxuXHRcdFx0XHRcdGZvciAobGV0IGtleSBpbiB3aGVyZUZpZWxkKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxldCBmaWVsZFR5cGUgPSBob3RDb21wb25lbnQuZ2V0RmllbGRUeXBlIChrZXkpO1xuXG5cdFx0XHRcdFx0XHRpZiAoZmllbGRUeXBlICE9IG51bGwpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmIChmaWVsZFR5cGUgPT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHdoZXJlRmllbGRba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5vbmRlbGV0ZSAhPSBudWxsKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmRlbGV0ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHR0aGlzLm9uZGVsZXRlID0gKDwoc2VsZWN0ZWRGaWVsZDogYW55KSA9PiBQcm9taXNlPHZvaWQ+Pm5ldyBGdW5jdGlvbiAodGhpcy5vbmRlbGV0ZSkpO1xuXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5vbmRlbGV0ZSAod2hlcmVGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bGV0IHJlbW92ZVVybDogc3RyaW5nID0gSG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmw7XG5cblx0XHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKHJlbW92ZVVybCwge1xuXHRcdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0XHR3aGVyZUZpZWxkczogd2hlcmVGaWVsZFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHdoZXJlRmllbGRzLmxlbmd0aCA9PT0gMClcblx0XHRcdHtcblx0XHRcdFx0aWYgKHRoaXMub25kZWxldGUgIT0gbnVsbClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgKHRoaXMub25kZWxldGUpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHRcdFx0dGhpcy5vbmRlbGV0ZSA9ICg8KHNlbGVjdGVkRmllbGQ6IGFueSkgPT4gUHJvbWlzZTx2b2lkPj5uZXcgRnVuY3Rpb24gKHRoaXMub25kZWxldGUpKTtcblxuXHRcdFx0XHRcdGF3YWl0IHRoaXMub25kZWxldGUgKG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGxldCByZW1vdmVVcmw6IHN0cmluZyA9IEhvdC5EYXRhLkFkbWluUGFuZWwucmVtb3ZlVXJsO1xuXG5cdFx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChyZW1vdmVVcmwsIHtcblx0XHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHM6IG51bGxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFxuXHRcdFx0aWYgKGhvdENvbXBvbmVudCAhPSBudWxsKVxuXHRcdFx0XHRhd2FpdCBob3RDb21wb25lbnQucmVmcmVzaExpc3QgKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmUgdGhpcyBmb3JtLlxuXHQgKi9cblx0YXN5bmMgb25TYXZlICgpXG5cdHtcblx0XHRsZXQgdmFsdWVzOiBhbnkgPSB7fTtcblxuXHRcdGF3YWl0IHRoaXMucHJvY2Vzc0hvdEZpZWxkcyAoYXN5bmMgKGh0bWxFbGVtZW50OiBFbGVtZW50LCBmaWVsZDogeyBuYW1lOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgfSkgPT5cblx0XHRcdHtcblx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdGxldCB2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLnZhbCAoKTtcblxuXHRcdFx0XHRpZiAoJChodG1sRWxlbWVudCkuYXR0ciAoXCJob3QtdmFsdWVcIikgIT0gbnVsbClcblx0XHRcdFx0XHR2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLmF0dHIgKFwiaG90LXZhbHVlXCIpO1xuXG5cdFx0XHRcdGlmICgkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC1maWVsZC1zYXZlXCIpICE9IG51bGwpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRsZXQgZmllbGRTYXZlID0gJChodG1sRWxlbWVudCkuYXR0ciAoXCJob3QtZmllbGQtc2F2ZVwiKTtcblxuXHRcdFx0XHRcdGlmIChmaWVsZFNhdmUgIT0gbnVsbClcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZiAoZmllbGRTYXZlICE9PSBcIlwiKVxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbiAoZmllbGRTYXZlKTtcblx0XHRcdFx0XHRcdFx0dmFsdWUgPSBhd2FpdCBmdW5jLmNhbGwgKHRoaXMsIHRoaXMsIGh0bWxFbGVtZW50LCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlmICh2YWx1ZXNbZmllbGQubmFtZV0gPT0gbnVsbClcblx0XHRcdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXSA9IFtdO1xuXG5cdFx0XHRcdFx0dmFsdWVzW2ZpZWxkLm5hbWVdLnB1c2ggKHZhbHVlKTtcblxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlc1tmaWVsZC5uYW1lXSA9IHZhbHVlO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAodGhpcy5vbnNhdmUgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAodHlwZW9mICh0aGlzLm9uc2F2ZSkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdHRoaXMub25zYXZlID0gKDwobW9kYWxUeXBlOiBzdHJpbmcsIHZhbHVlczogYW55LCBzZWxlY3RlZEZpZWxkczogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2F2ZSkpO1xuXG5cdFx0XHRsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbnNhdmUgKHRoaXMubW9kYWxUeXBlLCB2YWx1ZXMsIHRoaXMuc2VsZWN0ZWRGaWVsZHMpO1xuXG5cdFx0XHRpZiAocmVzdWx0ID09PSBmYWxzZSlcblx0XHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0aWYgKHRoaXMubW9kYWxUeXBlID09PSBcImFkZFwiKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgYWRkVXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybDtcblxuXHRcdFx0XHRhd2FpdCBIb3QuanNvblJlcXVlc3QgKGFkZFVybCwge1xuXHRcdFx0XHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdFx0XHRcdGZpZWxkczogdmFsdWVzXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLm1vZGFsVHlwZSA9PT0gXCJlZGl0XCIpXG5cdFx0XHR7XG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkRmllbGRzLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGFsZXJ0IChcIk5vIGl0ZW0ocykgc2VsZWN0ZWQhXCIpO1xuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IHdoZXJlRmllbGRzOiBhbnkgPSB7fTtcblxuXHRcdFx0XHRhd2FpdCB0aGlzLnByb2Nlc3NIb3RGaWVsZHMgKGFzeW5jIChodG1sRWxlbWVudDogRWxlbWVudCwgZmllbGQ6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IH0pID0+XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwicmVtb3ZlXCIpXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcblx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLnZhbCAoKTtcblx0XHRcblx0XHRcdFx0XHRcdGlmICgkKGh0bWxFbGVtZW50KS5hdHRyIChcImhvdC12YWx1ZVwiKSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9ICQoaHRtbEVsZW1lbnQpLmF0dHIgKFwiaG90LXZhbHVlXCIpO1xuXHRcdFxuXHRcdFx0XHRcdFx0aWYgKGZpZWxkLnR5cGUgPT09IFwiYXJyYXlcIilcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHdoZXJlRmllbGRzW2ZpZWxkLm5hbWVdID09IG51bGwpXG5cdFx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0gPSBbXTtcblx0XHRcblx0XHRcdFx0XHRcdFx0d2hlcmVGaWVsZHNbZmllbGQubmFtZV0ucHVzaCAodmFsdWUpO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XG5cdFx0XHRcdFx0XHR3aGVyZUZpZWxkc1tmaWVsZC5uYW1lXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCBlZGl0VXJsOiBzdHJpbmcgPSBIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmw7XG5cblx0XHRcdFx0YXdhaXQgSG90Lmpzb25SZXF1ZXN0IChlZGl0VXJsLCB7XG5cdFx0XHRcdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0XHRcdFx0d2hlcmVGaWVsZHM6IHdoZXJlRmllbGRzLFxuXHRcdFx0XHRcdFx0ZmllbGRzOiB2YWx1ZXNcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5hdHRhY2hlZF9saXN0ICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdGNvbnN0IGF0dGFjaGVkTGlzdHMgPSB0aGlzLmdldEF0dGFjaGVkTGlzdHMgKCk7XG5cblx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgYXR0YWNoZWRMaXN0cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdHtcblx0XHRcdFx0bGV0IGF0dGFjaGVkTGlzdCA9IGF0dGFjaGVkTGlzdHNbaUlkeF07XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0bGV0IHRhYmxlOiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblxuXHRcdFx0XHR0YWJsZS5hdHRhY2hlZEVkaXQgPSB0aGlzO1xuXG5cdFx0XHRcdGF3YWl0IHRhYmxlLnJlZnJlc2hMaXN0ICgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLmNsb3NlT25TYXZlID09PSB0cnVlKVxuXHRcdHtcblx0XHRcdGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZSAoYCMke3RoaXMubW9kYWxJZH1gKS5oaWRlICgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwgKCQoYCMke3RoaXMubW9kYWxJZH1gKVswXSwge1xuXHRcdFx0XHRcImJhY2tkcm9wXCI6IHRydWUsXG5cdFx0XHRcdFwia2V5Ym9hcmRcIjogdHJ1ZSxcblx0XHRcdFx0XCJmb2N1c1wiOiB0cnVlXG5cdFx0XHR9KTtcblxuXHRcdC8vLyBAdG9kbyBGaXggdGhpcyB0ZW1wb3JhcnkgaGFjay4gSSBkb250IGxpa2UgaXQuXG5cdFx0c2V0VGltZW91dCAoKCkgPT5cblx0XHRcdHtcblx0XHRcdFx0aWYgKHRoaXMuYXR0YWNoZWRfbGlzdCAhPT0gXCJcIilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGF0dGFjaGVkTGlzdHMgPSB0aGlzLmdldEF0dGFjaGVkTGlzdHMgKCk7XG5cdFx0XG5cdFx0XHRcdFx0Zm9yIChsZXQgaUlkeCA9IDA7IGlJZHggPCBhdHRhY2hlZExpc3RzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGxldCBhdHRhY2hlZExpc3QgPSBhdHRhY2hlZExpc3RzW2lJZHhdO1xuXHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdFx0bGV0IHRhYmxlOiBBZG1pblRhYmxlID0gYXR0YWNoZWRMaXN0LmhvdENvbXBvbmVudDtcblxuXHRcdFx0XHRcdFx0aWYgKHRhYmxlICE9IG51bGwpXG5cdFx0XHRcdFx0XHRcdHRhYmxlLmF0dGFjaGVkRWRpdCA9IHRoaXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LCA1MCk7XG5cblx0XHRyZXR1cm4gKG51bGwpO1xuXHR9XG5cblx0b3V0cHV0ICgpOiBzdHJpbmcgfCBIb3RDb21wb25lbnRPdXRwdXRbXVxuXHR7XG5cdFx0aWYgKHRoaXMubmFtZSA9PT0gXCJcIilcblx0XHRcdHRocm93IG5ldyBFcnJvciAoYFlvdSBtdXN0IHNwZWNpZnkgYSBuYW1lIGZvciBlYWNoIGFkbWluLWVkaXQgZWxlbWVudCFgKTtcblxuXHRcdHRoaXMubW9kYWxJZCA9IGAke3RoaXMubmFtZX1Nb2RhbGA7XG5cblx0XHRsZXQgb3V0cHV0T2JqID0gW3tcblx0XHRcdGh0bWw6IGBcblx0XHRcdDwhLS0gJHt0aGlzLnRpdGxlfSBNb2RhbCBTdGFydCAtLT5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbCBmYWRlICR7dGhpcy5jc3NfY2xhc3N9XCIgaWQ9XCIke3RoaXMubW9kYWxJZH1cIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwiJHt0aGlzLm5hbWV9TW9kYWxMYWJlbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHQ8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiJHt0aGlzLm5hbWV9TW9kYWxMYWJlbFwiPiR7dGhpcy50aXRsZX08L2g1PlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG5cdFx0XHRcdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwibW9kYWxCb2R5XCIgdHlwZSA9IFwibW9kYWxcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cblx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBvbmNsaWNrID0gXCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnJHt0aGlzLm1vZGFsSWR9Jykub25TYXZlICgpO1wiPiR7dGhpcy5idXR0b25fdGl0bGV9PC9idXR0b24+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8IS0tICR7dGhpcy50aXRsZX0gTW9kYWwgRW5kIC0tPmAsXG5cdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBcImJvZHlcIlxuXHRcdH1dO1xuXG5cdFx0aWYgKHRoaXMuYWRkX3BsYWNlX2hlcmUgIT09IFwiXCIpXG5cdFx0e1xuXHRcdFx0b3V0cHV0T2JqLnB1c2ggKHtcblx0XHRcdFx0aHRtbDogYDxidXR0b24gaWQgPSBcIiR7dGhpcy5tb2RhbElkfS1hZGQtYnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBvbmNsaWNrID0gXCJ0aGlzLmFkZENsaWNrZWQgKCk7XCI+JHt0aGlzLmFkZF90ZXh0fTwvYnV0dG9uPmAsXG5cdFx0XHRcdGRvY3VtZW50U2VsZWN0b3I6IGBob3QtcGxhY2UtaGVyZVtuYW1lPVwiJHt0aGlzLmFkZF9wbGFjZV9oZXJlfVwiXWBcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmVkaXRfcGxhY2VfaGVyZSAhPT0gXCJcIilcblx0XHR7XG5cdFx0XHRvdXRwdXRPYmoucHVzaCAoe1xuXHRcdFx0XHRodG1sOiBgPGJ1dHRvbiBpZCA9IFwiJHt0aGlzLm1vZGFsSWR9LWVkaXQtYnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBvbmNsaWNrID0gXCJ0aGlzLmVkaXRDbGlja2VkICgpO1wiPiR7dGhpcy5lZGl0X3RleHR9PC9idXR0b24+YCxcblx0XHRcdFx0ZG9jdW1lbnRTZWxlY3RvcjogYGhvdC1wbGFjZS1oZXJlW25hbWU9XCIke3RoaXMuZWRpdF9wbGFjZV9oZXJlfVwiXWBcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnJlbW92ZV9wbGFjZV9oZXJlICE9PSBcIlwiKVxuXHRcdHtcblx0XHRcdG91dHB1dE9iai5wdXNoICh7XG5cdFx0XHRcdGh0bWw6IGA8YnV0dG9uIGlkID0gXCIke3RoaXMubW9kYWxJZH0tcmVtb3ZlLWJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgb25jbGljayA9IFwidGhpcy5yZW1vdmVDbGlja2VkICgpO1wiPiR7dGhpcy5yZW1vdmVfdGV4dH08L2J1dHRvbj5gLFxuXHRcdFx0XHRkb2N1bWVudFNlbGVjdG9yOiBgaG90LXBsYWNlLWhlcmVbbmFtZT1cIiR7dGhpcy5yZW1vdmVfcGxhY2VfaGVyZX1cIl1gXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKG91dHB1dE9iaik7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQgfSBmcm9tIFwiaG90c3RhcVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5CdXR0b24gZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gdGhlIGJ1dHRvbi5cblx0ICovXG5cdGNzc19jbGFzczogc3RyaW5nO1xuXHQvKipcblx0ICogRXhlY3V0ZXMgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRvbmNsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IFByb21pc2U8YW55PjtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi1idXR0b25cIjtcblx0XHR0aGlzLmNzc19jbGFzcyA9IFwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIjtcblx0XHR0aGlzLm9uY2xpY2sgPSBudWxsO1xuXHR9XG5cblx0YXN5bmMgYnV0dG9uQ2xpY2tlZCAoKTogUHJvbWlzZTx2b2lkPlxuXHR7XG5cdH1cblxuXHQvKipcblx0ICogQ29ycmVjdHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgdGV4dCBlbGVtZW50cyBmb3IgbW9kYWxzLlxuXHQgKi9cblx0b25Qb3N0UGxhY2UgKHBhcmVudEh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCwgaHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcblx0e1xuXHRcdGxldCBwbGFjZUhlcmVBcnJheSA9IHBhcmVudEh0bWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKGBob3QtcGxhY2UtaGVyZVt0eXBlPVwibW9kYWxcIl1gKTtcblxuXHRcdGlmIChwbGFjZUhlcmVBcnJheS5sZW5ndGggPiAwKVxuXHRcdHtcblx0XHRcdGxldCBwbGFjZUhlcmUgPSBwbGFjZUhlcmVBcnJheVswXTtcblx0XHRcdHBhcmVudEh0bWxFbGVtZW50LnJlbW92ZUNoaWxkIChodG1sRWxlbWVudCk7XG5cdFx0XHRwbGFjZUhlcmUuYXBwZW5kQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5vbmNsaWNrICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmNsaWNrKSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbmNsaWNrID0gKDwoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IFByb21pc2U8YW55Pj5uZXcgRnVuY3Rpb24gKHRoaXMub25jbGljaykpO1xuXG5cdFx0XHRodG1sRWxlbWVudC5hZGRFdmVudExpc3RlbmVyIChcImNsaWNrXCIsIHRoaXMub25jbGljayk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nXG5cdHtcblx0XHRyZXR1cm4gKGA8YnV0dG9uIGlkID0gXCIke3RoaXMuaHRtbEVsZW1lbnRzWzBdLmlkfVwiIGNsYXNzID0gXCIke3RoaXMuY3NzX2NsYXNzfVwiIG9uY2xpY2sgPSBcInRoaXMuYnV0dG9uQ2xpY2tlZCAoKTtcIj4ke3RoaXMuaW5uZXJ9PC9idXR0b24+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlRmllbGQgfSBmcm9tIFwiLi9hZG1pbi10YWJsZS1maWVsZFwiO1xuaW1wb3J0IHsgQWRtaW5FZGl0IH0gZnJvbSBcIi4vYWRtaW4tZWRpdFwiO1xuXG5pbXBvcnQgRGF0YVRhYmxlLCB7IEFwaSwgQ29uZmlnQ29sdW1ucyB9IGZyb20gXCJkYXRhdGFibGVzLm5ldFwiO1xuaW1wb3J0IGR0NSBmcm9tICdkYXRhdGFibGVzLm5ldC1iczUnO1xuaW1wb3J0IGR0YyBmcm9tICdkYXRhdGFibGVzLm5ldC1jb2xyZW9yZGVyLWJzNSc7XG5pbXBvcnQgZHRzIGZyb20gJ2RhdGF0YWJsZXMubmV0LXNjcm9sbGVyLWJzNSc7XG5pbXBvcnQgZHRzYiBmcm9tICdkYXRhdGFibGVzLm5ldC1zZWFyY2hidWlsZGVyLWJzNSc7XG5pbXBvcnQgZHRzZWwgZnJvbSAnZGF0YXRhYmxlcy5uZXQtc2VsZWN0LWJzNSc7XG5cbi8qKlxuICogVGhlIHByb3BlcnRpZXMgZm9yIHRoZSBsaXN0IHNlYXJjaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGlzdFNlYXJjaFByb3BlcnRpZXNcbntcblx0LyoqXG5cdCAqIFRoZSBzZWFyY2guXG5cdCAqL1xuXHRzZWFyY2g/OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgc3RhcnQgaW5kZXguXG5cdCAqL1xuXHRvZmZzZXQ/OiBudW1iZXI7XG5cdC8qKlxuXHQgKiBUaGUgbGVuZ3RoLlxuXHQgKi9cblx0bGltaXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEFQSSByZXNwb25zZSB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBUElSZXNwb25zZVxue1xuXHQvKipcblx0ICogVGhlIGxlbmd0aCBvZiB0aGUgZGF0YS5cblx0ICovXG5cdGxlbmd0aDogbnVtYmVyO1xuXHQvKipcblx0ICogVGhlIGRhdGEgdG8gcmV0dXJuLlxuXHQgKi9cblx0ZGF0YTogYW55W107XG5cdC8qKlxuXHQgKiBUaGUgZXJyb3IgbWVzc2FnZSwgaWYgYW55LlxuXHQgKi9cblx0ZXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRhYmxlIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhpcyB0YWJsZS5cblx0ICovXG5cdHRpdGxlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgYXR0YWNoZWQgc2NoZW1hLlxuXHQgKi9cblx0c2NoZW1hOiBzdHJpbmc7XG5cdGhlYWRlcnM6IHtcblx0XHQvKipcblx0XHQgKiBUaGUgc3RvcmVkIGhlYWRlciBmaWVsZHMuXG5cdFx0ICovXG5cdFx0ZmllbGRzOiB7IFtuYW1lOiBzdHJpbmddOiBBZG1pblRhYmxlRmllbGQ7IH07XG5cdFx0LyoqXG5cdFx0ICogVGhlIGhlYWRlcnMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdFx0ICogXG5cdFx0ICogQGV4YW1wbGUgeyBcIm5hbWVcIjogXCI8dGg+TmFtZTwvdGg+XCIsIFwiZW1haWxcIjogXCI8dGg+RW1haWw8L3RoPlwiIH1cblx0XHQgKi9cblx0XHRlbGVtZW50czogeyBbbmFtZTogc3RyaW5nXTogYW55OyB9O1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBoZWFkZXIgaW5kaWNpZXMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdFx0ICogXG5cdFx0ICogQGV4YW1wbGUgY29uc29sZS5sb2cgKHRoaXMuaGVhZGVySW5kaWNpZXNbXCJuYW1lXCJdKTsgLy8gT3V0cHV0cyAwXG5cdFx0ICovXG5cdFx0aW5kaWNpZXM6IG51bWJlcltdO1xuXHR9O1xuXHQvKipcblx0ICogVGhlIHJvdyBlbGVtZW50cyBhcmUgc3RvcmVkIGluIGFuIGFycmF5IHdpdGgga2V5L3ZhbHVlIGZpZWxkcyBhbmQgaXQncyBhdHRhY2hlZCBodG1sIGVsZW1lbnQuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZVxuXHQgKiB7XG5cdCAqICAgXCJmaWVsZHNcIjogW1xuXHQgKiAgICAgICB7XG5cdCAqICAgICAgICAgXCJuYW1lXCI6IFwiSm9obiBTbWl0aFwiLFxuXHQgKiAgICAgICAgIFwiZW1haWxcIjogXCJqb2huLnNtaXRoQHRlc3QuY29tXCJcblx0ICogICAgICAgfVxuXHQgKiAgICAgXSxcblx0ICogICBcImh0bWxcIjogXCI8dHI+PHRkPkpvaG4gU21pdGg8L3RkPjx0ZD5qb2huLnNtaXRoQHRlc3QuY29tPC90ZD48L3RyPlwiXG5cdCAqIH1cblx0ICovXG5cdHJvd0VsZW1lbnRzOiB7IGZpZWxkczogYW55W107IGVsZW1lbnQ6IEhUTUxFbGVtZW50OyB9W10gPSBbXTtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3RlZCByb3cgaW5kaWNpZXMuIEVhY2ggaW5kZXggbWFwcyB0byB0aGUgcm93RWxlbWVudHMgYXJyYXkuXG5cdCAqIFxuXHQgKiBAZml4bWUgQWRkIHN1cHBvcnQgZm9yIHRoaXMgaW4gdGhlIGZ1dHVyZS5cblx0ICovXG5cdC8vcHJvdGVjdGVkIHNlbGVjdGVkUm93czogbnVtYmVyW107XG5cdC8qKlxuXHQgKiBUaGUgbW9zdCByZWNlbnRseSBzZWxlY3RlZCByb3cgaW5kZXguIFRoZSBpbmRleCBtYXBzIHRvIHRoZSByb3dFbGVtZW50cyBhcnJheS5cblx0ICovXG5cdHByb3RlY3RlZCBzZWxlY3RlZDogbnVtYmVyO1xuXHQvKipcblx0ICogVGhlIGxpc3QgZnVuY3Rpb24gdG8gZXhlY3V0ZSB0byByZXRyaWV2ZSBkYXRhLlxuXHQgKi9cblx0b25saXN0OiAoc2VhcmNoOiBJTGlzdFNlYXJjaFByb3BlcnRpZXMpID0+IFByb21pc2U8SUFQSVJlc3BvbnNlPjtcblx0LyoqXG5cdCAqIFRoZSBsaXN0IHVybCB0byB1c2UgZm9yIHRoaXMgdGFibGUuIEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCB3aWxsIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS5cblx0ICovXG5cdGxpc3R1cmw6IHN0cmluZztcblx0LyoqXG5cdCAqIElmIHNldCB0byB0cnVlLCBlYWNoIHJvdyB3aWxsIGhhdmUgYSBjaGVja2JveC5cblx0ICogQGRlZmF1bHQgdHJ1ZVxuXHQgKi9cblx0Y2hlY2tib3g6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgYSBzaW5nbGUgY2xpY2sgd2lsbCBhbGxvdyB0aGUgdXNlciB0byBlZGl0IHRoZSByb3cuXG5cdCAqL1xuXHRzaW5nbGVjbGlja2VkaXQ6IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGlzIGV2ZW50IHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuIFRoZSBwb3RlbnRpYWwgaXRlbSB0byBiZSBzZWxlY3RlZCBcblx0ICogd2lsbCBhbHNvIGJlIHBhc3NlZC4gSWYgdGhpcyByZXR1cm5zIGZhbHNlLCB0aGUgcm93IHdpbGwgbm90IGJlIHNlbGVjdGVkLlxuXHQgKi9cblx0b25zZWxlY3RlZHJvdzogKHJvd0luZGV4OiBudW1iZXIsIGl0ZW06IGFueVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXHQvKipcblx0ICogVGhlIGF0dGFjaGVkIGVkaXQgZm9ybSwgaWYgYW55LlxuXHQgKi9cblx0YXR0YWNoZWRFZGl0OiBBZG1pbkVkaXQ7XG5cdC8qKlxuXHQgKiBUaGUgYXNzb2NpYXRlZCBEYXRhVGFibGUuXG5cdCAqL1xuXHRkYXRhVGFibGU6IERhdGFUYWJsZTxBcGk+O1xuXHQvKipcblx0ICogSW5kaWNhdGVzIGlmIHRoZSBsaXN0IGlzIHJlZnJlc2hpbmcuXG5cdCAqL1xuXHRpc0xpc3RSZWZyZXNoaW5nOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLXRhYmxlXCI7XG5cdFx0dGhpcy50aXRsZSA9IFwiXCI7XG5cdFx0dGhpcy5zY2hlbWEgPSBcIlwiO1xuXHRcdHRoaXMuaGVhZGVycyA9IHtcblx0XHRcdFx0ZmllbGRzOiB7fSxcblx0XHRcdFx0ZWxlbWVudHM6IHt9LFxuXHRcdFx0XHRpbmRpY2llczogW11cblx0XHRcdH07XG5cdFx0dGhpcy5yb3dFbGVtZW50cyA9IFtdO1xuXHRcdC8vdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcblx0XHR0aGlzLm9ubGlzdCA9IG51bGw7XG5cdFx0dGhpcy5saXN0dXJsID0gXCJcIjtcblx0XHR0aGlzLmNoZWNrYm94ID0gdHJ1ZTtcblx0XHR0aGlzLnNpbmdsZWNsaWNrZWRpdCA9IGZhbHNlO1xuXHRcdHRoaXMub25zZWxlY3RlZHJvdyA9IG51bGw7XG5cdFx0dGhpcy5hdHRhY2hlZEVkaXQgPSBudWxsO1xuXHRcdHRoaXMuc2VsZWN0ZWQgPSAtMTtcblx0XHR0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG5cdFx0dGhpcy5pc0xpc3RSZWZyZXNoaW5nID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgaGVhZGVyIHRvIHRoZSB0YWJsZS5cblx0ICovXG5cdGFkZEhlYWRlciAodGFibGVGaWVsZEVsZW1lbnQ6IEhUTUxFbGVtZW50KVxuXHR7XG5cdFx0bGV0IGhlYWRlciA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRoZWFkXCIpWzBdO1xuXG5cdFx0aWYgKHRoaXMuaGVhZGVycy5pbmRpY2llcy5sZW5ndGggPCAxKVxuXHRcdFx0dGhpcy5oZWFkZXJzLmluZGljaWVzLnB1c2ggKG51bGwpO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRoaXMuaGVhZGVycy5pbmRpY2llcy5wdXNoICh0YWJsZUZpZWxkRWxlbWVudC5ob3RDb21wb25lbnQuZmllbGQpO1xuXHRcdGhlYWRlci5hcHBlbmRDaGlsZCAodGFibGVGaWVsZEVsZW1lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIGhlYWRlciB0byB0aGUgdGFibGUuXG5cdCAqL1xuXHRhZGRIZWFkZXJEYXRhT25seSAodGFibGVGaWVsZDogQWRtaW5UYWJsZUZpZWxkLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpXG5cdHtcblx0XHRpZiAodGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aCA8IDEpXG5cdFx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAobnVsbCk7XG5cblx0XHR0aGlzLmhlYWRlcnMuaW5kaWNpZXMucHVzaCAodGFibGVGaWVsZC5maWVsZCk7XG5cdFx0dGhpcy5oZWFkZXJzLmZpZWxkc1t0YWJsZUZpZWxkLmZpZWxkXSA9IHRhYmxlRmllbGQ7XG5cdFx0dGhpcy5oZWFkZXJzLmVsZW1lbnRzW3RhYmxlRmllbGQuZmllbGRdID0gaHRtbEVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBmaWVsZCB0eXBlIG9mIGEgZmllbGQuXG5cdCAqL1xuXHRnZXRGaWVsZFR5cGUgKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nXG5cdHtcblx0XHRpZiAodGhpcy5oZWFkZXJzLmVsZW1lbnRzW2ZpZWxkTmFtZV0gIT0gbnVsbClcblx0XHR7XG5cdFx0XHRsZXQgaG90Q29tcG9uZW50OiBBZG1pblRhYmxlRmllbGQgPSB0aGlzLmhlYWRlcnMuZWxlbWVudHNbZmllbGROYW1lXS5ob3RDb21wb25lbnQ7XG5cblx0XHRcdGlmIChob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHRcdFx0cmV0dXJuIChob3RDb21wb25lbnQuZmllbGRfdHlwZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB3aGVuIGEgcm93IGlzIHNlbGVjdGVkLlxuXHQgKi9cblx0YXN5bmMgc2VsZWN0Um93IChodG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+XG5cdHtcblx0XHRpZiAodGhpcy5vbnNlbGVjdGVkcm93ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbnNlbGVjdGVkcm93KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0dGhpcy5vbnNlbGVjdGVkcm93ID0gKDwocm93SW5kZXg6IG51bWJlciwgaXRlbTogYW55W10pID0+IFByb21pc2U8Ym9vbGVhbj4+bmV3IEZ1bmN0aW9uICh0aGlzLm9uc2VsZWN0ZWRyb3cpKTtcblxuXHRcdFx0bGV0IGl0ZW06IGFueVtdID0gbnVsbDtcblxuXHRcdFx0aWYgKHRoaXMucm93RWxlbWVudHNbcm93SW5kZXhdICE9IG51bGwpXG5cdFx0XHRcdGl0ZW0gPSB0aGlzLnJvd0VsZW1lbnRzW3Jvd0luZGV4XS5maWVsZHM7XG5cblx0XHRcdGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm9uc2VsZWN0ZWRyb3cgKHJvd0luZGV4LCBpdGVtKTtcblxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gZmFsc2UpXG5cdFx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgcm93cyBiZWluZyBzZWxlY3RlZC4gRm9yIG5vdyBcblx0XHQvLyB0aGlzIHdpbGwgZW5zdXJlIHRoYXQgb25seSBvbmUgcm93IGlzIHNlbGVjdGVkIGF0IGEgdGltZS5cblx0XHR7XG5cdFx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblx0XHRcdGxldCByb3dzID0gdGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidHJcIik7XG5cblx0XHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgcm93cy5sZW5ndGg7IGlJZHgrKylcblx0XHRcdHtcblx0XHRcdFx0bGV0IHJvdzogSFRNTFRhYmxlUm93RWxlbWVudCA9IHJvd3NbaUlkeF07XG5cblx0XHRcdFx0aWYgKHJvdy5jbGFzc0xpc3QuY29udGFpbnMgKFwidGFibGUtcHJpbWFyeVwiKSA9PT0gdHJ1ZSlcblx0XHRcdFx0XHRyb3cuY2xhc3NMaXN0LnJlbW92ZSAoXCJ0YWJsZS1wcmltYXJ5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRodG1sRWxlbWVudC5jbGFzc0xpc3QuYWRkIChcInRhYmxlLXByaW1hcnlcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZCA9IHJvd0luZGV4O1xuXG5cdFx0aWYgKHR5cGVvZiAodGhpcy5zaW5nbGVjbGlja2VkaXQpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0dGhpcy5zaW5nbGVjbGlja2VkaXQgPSBIb3RTdGFxLnBhcnNlQm9vbGVhbiAodGhpcy5zaW5nbGVjbGlja2VkaXQpO1xuXG5cdFx0aWYgKHRoaXMuc2luZ2xlY2xpY2tlZGl0ID09PSB0cnVlKVxuXHRcdHtcblx0XHRcdGlmICh0aGlzLmF0dGFjaGVkRWRpdCAhPSBudWxsKVxuXHRcdFx0XHRhd2FpdCB0aGlzLmF0dGFjaGVkRWRpdC5lZGl0Q2xpY2tlZCAodGhpcyk7XG5cdFx0fVxuXG5cdFx0Lyp0aGlzLnNlbGVjdGVkUm93cyA9IFtdO1xuXHRcdGxldCB0Ym9keSA9IHRoaXMuaHRtbEVsZW1lbnRzWzFdLmdldEVsZW1lbnRzQnlUYWdOYW1lIChcInRib2R5XCIpWzBdO1xuXG5cdFx0Ly8gRmluZCBhbGwgdGhlIGNoZWNrYm94ZXMgaW4gdGJvZHkuXG5cdFx0bGV0IGNoZWNrYm94ZXMgPSB0Ym9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJpbnB1dFwiKTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgY2hlY2tib3hlcy5sZW5ndGg7IGlJZHgrKylcblx0XHR7XG5cdFx0XHRsZXQgY2hlY2tib3g6IEhUTUxJbnB1dEVsZW1lbnQgPSBjaGVja2JveGVzW2lJZHhdO1xuXG5cdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoY2hlY2tib3guY2hlY2tlZCA9PT0gdHJ1ZSlcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIEdldCB0aGUgZGF0YS1pbmRleCBhdHRyaWJ1dGUuXG5cdFx0XHRcdFx0bGV0IGRhdGFJbmRleFN0cjogc3RyaW5nID0gY2hlY2tib3gucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSAoXCJkYXRhLWluZGV4XCIpO1xuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXg6IG51bWJlciA9ICBwYXJzZUludCAoZGF0YUluZGV4U3RyKTtcblxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2ggKGRhdGFJbmRleCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9Ki9cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHNlbGVjdGVkIGRhdGEuXG5cdCAqL1xuXHRnZXRTZWxlY3RlZCAoKTogYW55W11cblx0e1xuXHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZDtcblxuXHRcdGlmIChpbmRleCA8IDApXG5cdFx0XHRyZXR1cm4gKG51bGwpO1xuXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuZGF0YVRhYmxlLnJvdyhpbmRleCkuZGF0YSgpO1xuXG5cdFx0cmV0dXJuIChyZXN1bHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc2VsZWN0ZWQgZGF0YS5cblx0ICovXG5cdC8qZ2V0U2VsZWN0ZWRSb3dzICgpOiBhbnlbXVxuXHR7XG5cdFx0bGV0IHJvd3M6IGFueVtdID0gW107XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdGxldCBpbmRleDogbnVtYmVyID0gdGhpcy5zZWxlY3RlZFJvd3NbaUlkeF07XG5cdFx0XHRyb3dzLnB1c2ggKHRoaXMucm93RWxlbWVudHNbaW5kZXhdLmZpZWxkcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChyb3dzKTtcblx0fSovXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSBmb3IgZWFjaCByb3cgdGhhdCBoYXMgYmVlbiBjaGVja2VkLlxuXHQgKi9cblx0Z2V0Q2hlY2tlZFJvd3MgKCk6IGFueVtdXG5cdHtcblx0XHRsZXQgcm93czogYW55W10gPSBbXTtcblx0XHRsZXQgdGJvZHkgPSB0aGlzLmh0bWxFbGVtZW50c1sxXS5nZXRFbGVtZW50c0J5VGFnTmFtZSAoXCJ0Ym9keVwiKVswXTtcblxuXHRcdC8vIEZpbmQgYWxsIHRoZSBjaGVja2JveGVzIGluIHRib2R5LlxuXHRcdGxldCBjaGVja2JveGVzID0gdGJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwiaW5wdXRcIik7XG5cblx0XHRmb3IgKGxldCBpSWR4ID0gMDsgaUlkeCA8IGNoZWNrYm94ZXMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGNoZWNrYm94OiBIVE1MSW5wdXRFbGVtZW50ID0gY2hlY2tib3hlc1tpSWR4XTtcblxuXHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgIT0gbnVsbClcblx0XHRcdHtcblx0XHRcdFx0aWYgKGNoZWNrYm94LmNoZWNrZWQgPT09IHRydWUpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBHZXQgdGhlIGRhdGEtaW5kZXggYXR0cmlidXRlLlxuXHRcdFx0XHRcdGxldCBkYXRhSW5kZXhTdHI6IHN0cmluZyA9IGNoZWNrYm94LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUgKFwiZGF0YS1pbmRleFwiKTtcblx0XHRcdFx0XHRsZXQgZGF0YUluZGV4OiBudW1iZXIgPSAgcGFyc2VJbnQgKGRhdGFJbmRleFN0cik7XG5cblx0XHRcdFx0XHRyb3dzLnB1c2ggKHRoaXMucm93RWxlbWVudHNbZGF0YUluZGV4XS5maWVsZHMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChyb3dzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByb3cncyBkYXRhLlxuXHQgKi9cblx0Z2V0Um93IChpbmRleDogbnVtYmVyKTogYW55W11cblx0e1xuXHRcdHJldHVybiAodGhpcy5yb3dFbGVtZW50c1tpbmRleF0uZmllbGRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSByb3cgdG8gdGhlIHRhYmxlLlxuXHQgKiBcblx0ICogQHBhcmFtIHtBcnJheX0gZmllbGRzIEEgbGlzdCBvZiB2YWx1ZXMgdG8gYXBwZW5kLlxuXHQgKi9cblx0YWRkUm93IChmaWVsZHM6IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10pXG5cdHtcblx0XHRpZiAoZmllbGRzID09IG51bGwpXG5cdFx0XHRyZXR1cm47XG5cblx0XHRpZiAoZmllbGRzLmxlbmd0aCA9PSAwKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cdFx0bGV0IGluZGV4OiBudW1iZXIgPSB0aGlzLnJvd0VsZW1lbnRzLmxlbmd0aDtcblx0XHQvL2xldCByb3dTdHIgPSBgPHRyIG9uY2xpY2sgPSBcInRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQuc2VsZWN0Um93ICh0aGlzLCAke2luZGV4fSk7XCI+YDtcblxuXHRcdGlmICh0eXBlb2YgKHRoaXMuY2hlY2tib3gpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0dGhpcy5jaGVja2JveCA9IEhvdFN0YXEucGFyc2VCb29sZWFuICh0aGlzLmNoZWNrYm94KTtcblxuXHRcdC8qaWYgKHRoaXMuY2hlY2tib3ggPT09IHRydWUpXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48aW5wdXQgdHlwZSA9IFwiY2hlY2tib3hcIiAvPjwvdGQ+YDtcblx0XHRlbHNlXG5cdFx0XHRyb3dTdHIgKz0gYDx0ZD48L3RkPmA7Ki9cblx0XHRsZXQgcm93c0ZpZWxkczogYW55W10gPSBbXTtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5oZWFkZXJzLmluZGljaWVzLmxlbmd0aDsgaUlkeCsrKVxuXHRcdHtcblx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRsZXQga2V5OiBzdHJpbmcgPSB0aGlzLmhlYWRlcnMuaW5kaWNpZXNbaUlkeF07XG5cblx0XHRcdGlmIChrZXkgPT0gbnVsbClcblx0XHRcdFx0Y29udGludWU7XG5cblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGxldCB2YWx1ZSA9IGZpZWxkc1trZXldO1xuXHRcdFx0Ly8gRm9yIGVhY2ggLiBpbiBrZXkgd2UgbmVlZCB0byBnZXQgdGhlIG5leHQgb2JqZWN0LlxuXHRcdFx0bGV0IGtleVBhcnRzOiBzdHJpbmdbXSA9IGtleS5zcGxpdCAoXCIuXCIpO1xuXHRcdFx0XG5cdFx0XHRpZiAoa2V5UGFydHMubGVuZ3RoID4gMSlcblx0XHRcdHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRsZXQgdGVtcFZhbHVlOiBhbnkgPSBmaWVsZHNba2V5UGFydHNbMF1dO1xuXG5cdFx0XHRcdGZvciAobGV0IGlJZHggPSAxOyBpSWR4IDwga2V5UGFydHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBwYXJ0OiBzdHJpbmcgPSBrZXlQYXJ0c1tpSWR4XTtcblxuXHRcdFx0XHRcdHRlbXBWYWx1ZSA9IHRlbXBWYWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhbHVlID0gdGVtcFZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgcm93T2JqID0gbnVsbDtcblxuXHRcdFx0aWYgKHRoaXMuaGVhZGVycy5lbGVtZW50c1trZXldICE9IG51bGwpXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgLSBAZml4bWUgSSBtZXNzZWQgdGhpcyB1cCwgd2lsbCBmaXguXG5cdFx0XHRcdGxldCBmaWVsZFR5cGU6IHN0cmluZyA9IHRoaXMuZ2V0RmllbGRUeXBlIChrZXkpO1xuXG5cdFx0XHRcdGlmIChmaWVsZFR5cGUgPT0gbnVsbClcblx0XHRcdFx0XHRmaWVsZFR5cGUgPSBcInRleHRcIjtcblxuXHRcdFx0XHRpZiAoZmllbGRUeXBlICE9PSBcInJlbW92ZVwiKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y29uc3Qgb3JnRmllbGQgPSB0aGlzLmhlYWRlcnMuZmllbGRzW2tleV07XG5cdFx0XHRcdFx0bGV0IGRlZmF1bHRPdXRwdXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG5cdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkICE9IG51bGwpXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkLm9uaW5wdXQgIT0gbnVsbClcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiAob3JnRmllbGQub25pbnB1dCkgPT09IFwic3RyaW5nXCIpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5oZWFkZXJzLmZpZWxkc1trZXldLm9uaW5wdXQgPSAoPChpdGVtOiBhbnkpID0+IGFueT5uZXcgRnVuY3Rpb24gKG9yZ0ZpZWxkLm9uaW5wdXQpKTtcblxuXHRcdFx0XHRcdFx0XHR2YWx1ZSA9IG9yZ0ZpZWxkLm9uaW5wdXQgKHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9yZ0ZpZWxkLm9ub3V0cHV0ICE9IG51bGwpXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGlmICh0eXBlb2YgKG9yZ0ZpZWxkLm9ub3V0cHV0KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmhlYWRlcnMuZmllbGRzW2tleV0ub25vdXRwdXQgPSAoPChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc+bmV3IEZ1bmN0aW9uIChvcmdGaWVsZC5vbm91dHB1dCkpO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRPdXRwdXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3T3V0cHV0OiBzdHJpbmcgPSBvcmdGaWVsZC5vbm91dHB1dCAoaW5kZXgsIHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0Ly9yb3dTdHIgKz0gbmV3T3V0cHV0O1xuXHRcdFx0XHRcdFx0XHRyb3dPYmogPSB7IGluZGV4OiBpbmRleCwgdmFsdWU6IG5ld091dHB1dCB9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChkZWZhdWx0T3V0cHV0ID09PSB0cnVlKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vcm93U3RyICs9IGA8dGQgZGF0YS1pbmRleCA9IFwiJHtpbmRleH1cIj4ke3ZhbHVlfTwvdGQ+YDtcblx0XHRcdFx0XHRcdHJvd09iaiA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyb3dzRmllbGRzLnB1c2ggKHJvd09iaik7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucm93cyA9PSBudWxsKVxuXHRcdFx0dGhpcy5yb3dzID0gW107XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Ly90aGlzLmRhdGFUYWJsZS5yb3cuYWRkIChyb3dzRmllbGRzKTtcblx0XHQvL3RoaXMucm93cy5wdXNoIChyb3dzRmllbGRzKTtcblx0XHQvKnJvd1N0ciArPSBcIjwvdHI+XCI7XG5cblx0XHRsZXQgbmV3T2JqID0gSG90U3RhcS5hZGRIdG1sICh0Ym9keSwgcm93U3RyKTtcblxuXHRcdHRoaXMucm93RWxlbWVudHMucHVzaCAoe1xuXHRcdFx0XHRmaWVsZHM6IGZpZWxkcyxcblx0XHRcdFx0ZWxlbWVudDogKDxIVE1MRWxlbWVudD5uZXdPYmopXG5cdFx0XHR9KTsqL1xuXHR9XG5cblx0cm93czogYW55W107XG5cblx0LyoqXG5cdCAqIENsZWFyIHRoZSBsaXN0IG9mIHJvd3MuXG5cdCAqL1xuXHRhc3luYyBjbGVhclJvd3MgKClcblx0e1xuXHRcdHRoaXMucm93RWxlbWVudHMgPSBbXTtcblxuXHRcdC8qbGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cblx0XHR0Ym9keS5pbm5lckhUTUwgPSBcIlwiOyovXG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRoaXMuZGF0YVRhYmxlLmNsZWFyICgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2ggdGhlIGxpc3QuXG5cdCAqIFxuXHQgKiBAcmV0dXJucyBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgYXZhaWxhYmxlIGluIHRoZSBsaXN0LlxuXHQgKi9cblx0YXN5bmMgcmVmcmVzaExpc3QgKGxpc3Q6IElBUElSZXNwb25zZSA9IG51bGwpOiBQcm9taXNlPElBUElSZXNwb25zZT5cblx0e1xuXHRcdHRoaXMuaXNMaXN0UmVmcmVzaGluZyA9IHRydWU7XG5cblx0XHRsZXQgc2VhcmNoOiBJTGlzdFNlYXJjaFByb3BlcnRpZXMgPSB7XG5cdFx0XHRcdHNlYXJjaDogXCJcIixcblx0XHRcdFx0b2Zmc2V0OiAwLFxuXHRcdFx0XHRsaW1pdDogMTBcblx0XHRcdH07XG5cblx0XHRpZiAodGhpcy5kYXRhVGFibGUgIT0gbnVsbClcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRjb25zdCBzZWFyY2hTdHI6IHN0cmluZyA9IHRoaXMuZGF0YVRhYmxlLnNlYXJjaCAoKTtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGNvbnN0IGluZm8gPSB0aGlzLmRhdGFUYWJsZS5wYWdlLmluZm8gKCk7XG5cblx0XHRcdHNlYXJjaCA9IHtcblx0XHRcdFx0c2VhcmNoOiBzZWFyY2hTdHIgfHwgXCJcIixcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRvZmZzZXQ6IGluZm8uc3RhcnQgfHwgMCxcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRsaW1pdDogaW5mby5sZW5ndGggfHwgMTBcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMub25saXN0ICE9IG51bGwpXG5cdFx0e1xuXHRcdFx0aWYgKHR5cGVvZiAodGhpcy5vbmxpc3QpID09PSBcInN0cmluZ1wiKVxuXHRcdFx0XHR0aGlzLm9ubGlzdCA9ICg8KHNlYXJjaDogSUxpc3RTZWFyY2hQcm9wZXJ0aWVzKSA9PiBQcm9taXNlPElBUElSZXNwb25zZT4+bmV3IEZ1bmN0aW9uICh0aGlzLm9ubGlzdCkpO1xuXG5cdFx0XHRsaXN0ID0gYXdhaXQgdGhpcy5vbmxpc3QgKHNlYXJjaCk7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHRsZXQgbGlzdFVybDogc3RyaW5nID0gXCJcIjtcblxuXHRcdFx0aWYgKHRoaXMubGlzdHVybCAhPT0gXCJcIilcblx0XHRcdFx0bGlzdFVybCA9IHRoaXMubGlzdHVybDtcblxuXHRcdFx0aWYgKGxpc3RVcmwgIT09IFwiXCIpXG5cdFx0XHR7XG5cdFx0XHRcdGxpc3QgPSBhd2FpdCBIb3QuanNvblJlcXVlc3QgKGxpc3RVcmwsIHtcblx0XHRcdFx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRcdFx0XHRzZWFyY2g6IHNlYXJjaFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuY2xlYXJSb3dzICgpO1xuXG5cdFx0aWYgKGxpc3QgIT0gbnVsbClcblx0XHR7XG5cdFx0XHRpZiAobGlzdC5lcnJvciAhPSBudWxsKVxuXHRcdFx0e1xuXHRcdFx0XHRjb25zb2xlLmVycm9yIChgTGlzdCBlcnJvcjogJHtsaXN0LmVycm9yfWApO1xuXHRcdFx0XHR0aGlzLmlzTGlzdFJlZnJlc2hpbmcgPSBmYWxzZTtcblxuXHRcdFx0XHRyZXR1cm4gKG51bGwpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKmZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgbGlzdC5kYXRhLmxlbmd0aDsgaUlkeCsrKVxuXHRcdFx0e1xuXHRcdFx0XHRsZXQgZmllbGRzID0gbGlzdC5kYXRhW2lJZHhdO1xuXG5cdFx0XHRcdHRoaXMuYWRkUm93IChmaWVsZHMpO1xuXHRcdFx0fSovXG5cdFx0fVxuXG5cdFx0bGV0IHRib2R5ID0gdGhpcy5odG1sRWxlbWVudHNbMV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUgKFwidGJvZHlcIilbMF07XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHRib2R5LmhvdENvbXBvbmVudCA9IHRoaXM7XG5cdFx0JCh0Ym9keSkub24gKCdjbGljaycsICd0cicsIGZ1bmN0aW9uICgpXG5cdFx0XHR7XG5cdFx0XHRcdGNvbnN0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZSA9IHRoaXMucGFyZW50Tm9kZS5ob3RDb21wb25lbnQ7XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBob3RDb21wb25lbnQuZGF0YVRhYmxlLnJvdyAodGhpcykuaW5kZXggKCk7XG5cdFx0XHRcdGhvdENvbXBvbmVudC5zZWxlY3RSb3cgKHRoaXMsIGluZGV4KTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5pc0xpc3RSZWZyZXNoaW5nID0gZmFsc2U7XG5cblx0XHRyZXR1cm4gKGxpc3QpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBkYXRhIGZyb20gdGhlIHNlcnZlci5cblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHRzZXRUaW1lb3V0IChhc3luYyAoKSA9PlxuXHRcdFx0e1xuXG5cdFx0XHRcdGNvbnN0IHRhYmxlID0gJChodG1sRWxlbWVudCkuZmluZChcInRhYmxlXCIpO1xuXG5cdFx0XHRcdGxldCBjb2x1bW5zOiBDb25maWdDb2x1bW5zW10gPSBbXTtcblx0XHRcdFx0JCh0YWJsZSkuZmluZCAoXCJ0aGVhZCB0aFwiKS5lYWNoIChmdW5jdGlvbiAoKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbnN0IHRleHQgPSAkKHRoaXMpLnRleHQgKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhID0gJCh0aGlzKS5kYXRhIChcImZpZWxkXCIpO1xuXHRcdFx0XHRcdFx0bGV0IGRhdGFUeXBlID0gJCh0aGlzKS5kYXRhIChcImZpZWxkLXR5cGVcIik7XG5cblx0XHRcdFx0XHRcdGlmICgodGV4dCA9PSBudWxsKSB8fCAodGV4dCA9PT0gXCJcIikpXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdFx0aWYgKChkYXRhID09IG51bGwpIHx8IChkYXRhID09PSBcIlwiKSlcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRcdFx0XHRpZiAoZGF0YVR5cGUgPT09IFwidGV4dFwiKVxuXHRcdFx0XHRcdFx0XHRkYXRhVHlwZSA9IFwic3RyaW5nXCI7XG5cblx0XHRcdFx0XHRcdGNvbHVtbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHRleHQsXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YTogZGF0YVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHQkKHRhYmxlKS5maW5kIChcInRoZWFkXCIpLnJlbW92ZSAoKTtcblxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdHRoaXMuZGF0YVRhYmxlID0gbmV3IERhdGFUYWJsZSAodGFibGVbMF0sIHtcblx0XHRcdFx0XHRwcm9jZXNzaW5nOiB0cnVlLFxuXHRcdFx0XHRcdHNlcnZlclNpZGU6IHRydWUsXG5cdFx0XHRcdFx0Y29sUmVvcmRlcjogdHJ1ZSxcblx0XHRcdFx0XHRzY3JvbGxlcjogdHJ1ZSxcblx0XHRcdFx0XHRzZWxlY3Q6IHRydWUsXG5cdFx0XHRcdFx0ZG9tOiAnUWxmcnRpcCcsXG5cdFx0XHRcdFx0Y29sdW1uczogY29sdW1ucyxcblx0XHRcdFx0XHRkYXRhOiBbXSxcblx0XHRcdFx0XHRhamF4OiBhc3luYyAoZGF0YSwgY2FsbGJhY2ssIHNldHRpbmdzKSA9PlxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5pc0xpc3RSZWZyZXNoaW5nID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50RGF0YSA9IGF3YWl0IHRoaXMucmVmcmVzaExpc3QgKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNhbGxiYWNrT2JqOiBhbnkgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhOiBbXSxcblx0XHRcdFx0XHRcdFx0XHRcdHJlY29yZHNUb3RhbDogMCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlY29yZHNGaWx0ZXJlZDogMFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEgKGN1cnJlbnREYXRhIGluc3RhbmNlb2YgQXJyYXkpKVxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGN1cnJlbnREYXRhLmxlbmd0aCAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrT2JqLnJlY29yZHNUb3RhbCA9IGN1cnJlbnREYXRhLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrT2JqLnJlY29yZHNGaWx0ZXJlZCA9IGN1cnJlbnREYXRhLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoY3VycmVudERhdGEuZGF0YSAhPSBudWxsKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tPYmouZGF0YSA9IGN1cnJlbnREYXRhLmRhdGE7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGNhbGxiYWNrT2JqLmRhdGEgPSBjdXJyZW50RGF0YTtcblxuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayAoY2FsbGJhY2tPYmopO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSwgNTApO1xuXG5cdFx0cmV0dXJuIChudWxsKTtcblx0fVxuXG5cdG91dHB1dCAoKTogc3RyaW5nIHwgSG90Q29tcG9uZW50T3V0cHV0W11cblx0e1xuXHRcdGxldCBlbXB0eUNoZWNrYm94SGVhZGVyOiBzdHJpbmcgPSBcIjx0aD48L3RoPlwiO1xuXG5cdFx0cmV0dXJuIChgXG5cdFx0PGRpdiBpZCA9IFwiJHt0aGlzLmh0bWxFbGVtZW50c1swXS5pZH1cIj5cblx0XHRcdDxoMj4ke3RoaXMudGl0bGV9PC9oMj5cblx0XHRcdDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG5cdFx0XHQ8dGFibGUgaWQgPSBcIiR7dGhpcy5odG1sRWxlbWVudHNbMF0uaWR9VGFibGVcIiBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtc21cIj5cblx0XHRcdFx0PHRoZWFkPlxuXHRcdFx0XHRcdDx0ciBob3QtcGxhY2UtaGVyZSA9IFwiaGVhZGVyXCI+XG5cdFx0XHRcdFx0XHQke2VtcHR5Q2hlY2tib3hIZWFkZXJ9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5IGhvdC1wbGFjZS1oZXJlID0gXCJyZXN1bHRzXCI+XG5cdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHQ8L3RhYmxlPlxuXHRcdFx0PGhvdC1wbGFjZS1oZXJlIG5hbWUgPSBcImFmdGVyVGFibGVcIj48L2hvdC1wbGFjZS1oZXJlPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+YCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEhvdFN0YXEsIEhvdCwgSG90QVBJLCBIb3RDb21wb25lbnQsIEhvdENvbXBvbmVudE91dHB1dCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pblRleHQgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIElmIHNldCB0byAxLCB0aGlzIHdpbGwgbm90IG91dHB1dCB0aGUgZmllbGQuXG5cdCAqL1xuXHRub19vdXRwdXQ6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBjbGFzc2VzIHRvIHNldCBmb3IgdGhlIGlucHV0LlxuXHQgKiBAZGVmYXVsdCBcImZvcm0tY29udHJvbFwiXG5cdCAqL1xuXHRjc3NfY2xhc3M6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10ZXh0XCI7XG5cdFx0dGhpcy5ub19vdXRwdXQgPSBcIjBcIjtcblx0XHR0aGlzLmNzc19jbGFzcyA9IFwiZm9ybS1jb250cm9sXCJcblx0fVxuXG5cdC8qKlxuXHQgKiBDb3JyZWN0cyB0aGUgcGxhY2VtZW50IG9mIHRoZSB0ZXh0IGVsZW1lbnRzIGZvciBtb2RhbHMuXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0bGV0IHBsYWNlSGVyZUFycmF5ID0gcGFyZW50SHRtbEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCAoYGhvdC1wbGFjZS1oZXJlW3R5cGU9XCJtb2RhbFwiXWApO1xuXG5cdFx0aWYgKHBsYWNlSGVyZUFycmF5Lmxlbmd0aCA+IDApXG5cdFx0e1xuXHRcdFx0bGV0IHBsYWNlSGVyZSA9IHBsYWNlSGVyZUFycmF5WzBdO1xuXHRcdFx0cGFyZW50SHRtbEVsZW1lbnQucmVtb3ZlQ2hpbGQgKGh0bWxFbGVtZW50KTtcblx0XHRcdHBsYWNlSGVyZS5hcHBlbmRDaGlsZCAoaHRtbEVsZW1lbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRsZXQgdmFsdWU6IHN0cmluZyA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy52YWx1ZSAhPSBudWxsKVxuXHRcdFx0dmFsdWUgPSB0aGlzLnZhbHVlO1xuXG5cdFx0aWYgKHRoaXMubm9fb3V0cHV0ID09PSBcIjFcIilcblx0XHRcdHJldHVybiAoYDxkaXY+PGlucHV0IGNsYXNzPVwiJHt0aGlzLmNzc19jbGFzc31cIiB0eXBlID0gXCJoaWRkZW5cIiB2YWx1ZSA9IFwiJHt2YWx1ZX1cIiAvPjwvZGl2PmApO1xuXG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmh0bWxFbGVtZW50c1swXS5nZXRBdHRyaWJ1dGUgKFwiaG90LWZpZWxkXCIpO1xuXHRcdGxldCBmaWVsZF90eXBlID0gdGhpcy5odG1sRWxlbWVudHNbMF0uZ2V0QXR0cmlidXRlIChcImhvdC1maWVsZC10eXBlXCIpO1xuXHRcdGxldCBodG1sVHlwZSA9IHRoaXMuaHRtbEVsZW1lbnRzWzBdLmdldEF0dHJpYnV0ZSAoXCJ0eXBlXCIpIHx8IFwidGV4dFwiO1xuXG5cdFx0aWYgKGZpZWxkX3R5cGUgPT0gbnVsbClcblx0XHRcdGZpZWxkX3R5cGUgPSBcInRleHRcIjtcblxuXHRcdHJldHVybiAoYDxkaXY+XG5cdFx0XHQ8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+JHt0aGlzLmlubmVyfTwvbGFiZWw+XG5cdFx0XHQ8aW5wdXQgY2xhc3M9XCIke3RoaXMuY3NzX2NsYXNzfVwiIHR5cGUgPSBcIiR7aHRtbFR5cGV9XCIgaG90LWZpZWxkID0gXCIke2ZpZWxkfVwiIGhvdC1maWVsZC10eXBlID0gXCIke2ZpZWxkX3R5cGV9XCIgdmFsdWUgPSBcIiR7dmFsdWV9XCIgLz5cblx0XHQ8L2Rpdj5gKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcbmltcG9ydCB7IEFkbWluVGFibGUgfSBmcm9tIFwiLi9hZG1pbi10YWJsZVwiO1xuXG5leHBvcnQgY2xhc3MgQWRtaW5UYWJsZUZpZWxkIGV4dGVuZHMgSG90Q29tcG9uZW50XG57XG5cdC8qKlxuXHQgKiBUaGUgdGFibGUgZmllbGQuXG5cdCAqL1xuXHRmaWVsZDogbnVtYmVyO1xuXHQvKipcblx0ICogVGhlIHR5cGUgb2YgZmllbGQuIENhbiBiZTpcblx0ICogKiB0ZXh0XG5cdCAqICogcmVtb3ZlXG5cdCAqIFxuXHQgKiBEZWZhdWx0OiB0ZXh0XG5cdCAqL1xuXHRmaWVsZF90eXBlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBJZiBzZXQgdG8gMSwgdGhpcyB3aWxsIG5vdCBvdXRwdXQgdGhlIGZpZWxkLlxuXHQgKi9cblx0bm9fb3V0cHV0OiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgb25pbnB1dCBldmVudCBpcyBmaXJlZCB3aGVuIGFuIGl0ZW0gaXMgYWJvdXQgdG8gYmUgcGxhY2VkIGludG8gdGhlIHRhYmxlLlxuXHQgKi9cblx0b25pbnB1dDogKGl0ZW06IGFueSkgPT4gYW55O1xuXHQvKipcblx0ICogVGhlIG91dHB1dCB0byBkaXNwbGF5LlxuXHQgKi9cblx0b25vdXRwdXQ6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IgKGNvcHk6IEhvdENvbXBvbmVudCB8IEhvdFN0YXEsIGFwaTogSG90QVBJKVxuXHR7XG5cdFx0c3VwZXIgKGNvcHksIGFwaSk7XG5cblx0XHR0aGlzLnRhZyA9IFwiYWRtaW4tdGFibGUtZmllbGRcIjtcblx0XHR0aGlzLmZpZWxkID0gMDtcblx0XHR0aGlzLmZpZWxkX3R5cGUgPSBcInRleHRcIjtcblx0XHR0aGlzLm5vX291dHB1dCA9IFwiMFwiO1xuXHRcdHRoaXMub25pbnB1dCA9IG51bGw7XG5cdFx0dGhpcy5vbm91dHB1dCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgZmllbGQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0bGV0IGhvdENvbXBvbmVudDogQWRtaW5UYWJsZSA9IG51bGw7XG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0aWYgKHBhcmVudEh0bWxFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ob3RDb21wb25lbnQgIT0gbnVsbClcblx0XHR7XG5cdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRob3RDb21wb25lbnQgPSBwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50O1xuXHRcdH1cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0Ly8gQHRzLWlnbm9yZSAtIGxvb29vbC4gQWRkIGEgYmV0dGVyIHdheSB0byBnZXQgdGhlIHBhcmVudCBIb3RDb21wb25lbnQuXG5cdFx0XHRob3RDb21wb25lbnQgPSBwYXJlbnRIdG1sRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmhvdENvbXBvbmVudDtcblx0XHR9XG5cblx0XHRpZiAoaG90Q29tcG9uZW50ICE9IG51bGwpXG5cdFx0XHRob3RDb21wb25lbnQuYWRkSGVhZGVyRGF0YU9ubHkgKHRoaXMsIGh0bWxFbGVtZW50KTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRpZiAodGhpcy5ub19vdXRwdXQgPT09IFwiMVwiKVxuXHRcdHtcblx0XHRcdHJldHVybiAoW3tcblx0XHRcdFx0aHRtbDogYDxkaXY+PC9kaXY+YCxcblx0XHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcImFmdGVyVGFibGVcIlxuXHRcdFx0fV0pO1xuXHRcdH1cblxuXHRcdHJldHVybiAoW3tcblx0XHRcdGh0bWw6IGA8dGggZGF0YS1maWVsZCA9IFwiJHt0aGlzLmZpZWxkfVwiIGRhdGEtZmllbGQtdHlwZSA9IFwiJHt0aGlzLmZpZWxkX3R5cGV9XCI+JHt0aGlzLmlubmVyfTwvdGg+YCxcblx0XHRcdHBsYWNlSGVyZVBhcmVudDogXCJoZWFkZXJcIlxuXHRcdH1dKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCwgSG90Q29tcG9uZW50T3V0cHV0IH0gZnJvbSBcImhvdHN0YXFcIjtcblxuZXhwb3J0IGNsYXNzIEFkbWluVGFibGVSb3cgZXh0ZW5kcyBIb3RDb21wb25lbnRcbntcblx0LyoqXG5cdCAqIFRoZSBmaWVsZHMgYXJlIHN0b3JlZCBpbiBhIGtleS92YWx1ZSBvYmplY3QuXG5cdCAqIFxuXHQgKiBAZXhhbXBsZSB7IFwibmFtZVwiOiBcIkpvaG4gU21pdGhcIiwgXCJlbWFpbFwiOiBcImpvaG4uc21pdGhAZW1haWwuY29tXCIgfVxuXHQgKi9cblx0ZmllbGRzOiBhbnlbXTtcblxuXHRjb25zdHJ1Y3RvciAoY29weTogSG90Q29tcG9uZW50IHwgSG90U3RhcSwgYXBpOiBIb3RBUEkpXG5cdHtcblx0XHRzdXBlciAoY29weSwgYXBpKTtcblxuXHRcdHRoaXMudGFnID0gXCJhZG1pbi10YWJsZS1yb3dcIjtcblx0XHR0aGlzLmZpZWxkcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0aGlzIHRhYmxlIHJvdyB0byB0aGUgdGFibGVcblx0ICovXG5cdG9uUG9zdFBsYWNlIChwYXJlbnRIdG1sRWxlbWVudDogSFRNTEVsZW1lbnQsIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XG5cdHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0cGFyZW50SHRtbEVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuaG90Q29tcG9uZW50LnJvd0VsZW1lbnRzLnB1c2ggKHsgZmllbGRzOiB0aGlzLmZpZWxkcywgZWxlbWVudDogaHRtbEVsZW1lbnR9KTtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZyB8IEhvdENvbXBvbmVudE91dHB1dFtdXG5cdHtcblx0XHRsZXQgcm93SHRtbCA9IFwiXCI7XG5cblx0XHRpZiAodGhpcy5maWVsZHMubGVuZ3RoID4gMClcblx0XHRcdHJvd0h0bWwgKz0gYDx0ZD48aW5wdXQgdHlwZSA9IFwiY2hlY2tib3hcIiAvPjwvdGQ+YDtcblxuXHRcdGZvciAobGV0IGlJZHggPSAwOyBpSWR4IDwgdGhpcy5maWVsZHMubGVuZ3RoOyBpSWR4KyspXG5cdFx0e1xuXHRcdFx0bGV0IGZpZWxkT2JqID0gdGhpcy5maWVsZHNbaUlkeF07XG5cblx0XHRcdGZvciAobGV0IGtleSBpbiBmaWVsZE9iailcblx0XHRcdHtcblx0XHRcdFx0bGV0IHZhbHVlID0gZmllbGRPYmpba2V5XTtcblxuXHRcdFx0XHRyb3dIdG1sICs9IGA8dGQ+JHt2YWx1ZX08L3RkPmA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChbe1xuXHRcdFx0aHRtbDogYDx0cj4ke3Jvd0h0bWx9PC90cj5gLFxuXHRcdFx0cGxhY2VIZXJlUGFyZW50OiBcInJlc3VsdHNcIlxuXHRcdH1dKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgSG90U3RhcSwgSG90LCBIb3RBUEksIEhvdENvbXBvbmVudCB9IGZyb20gXCJob3RzdGFxXCI7XG5cbmV4cG9ydCBjbGFzcyBBZG1pbkRhc2hib2FyZCBleHRlbmRzIEhvdENvbXBvbmVudFxue1xuXHQvKipcblx0ICogVGhlIHRpdGxlIG9mIHRoaXMgZGFzaGJvYXJkLlxuXHQgKi9cblx0dGl0bGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBiYXNlIHVybCB0byB1c2UgZm9yIHRoaXMgZGFzaGJvYXJkLlxuXHQgKi9cblx0YmFzZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yIChjb3B5OiBIb3RDb21wb25lbnQgfCBIb3RTdGFxLCBhcGk6IEhvdEFQSSlcblx0e1xuXHRcdHN1cGVyIChjb3B5LCBhcGkpO1xuXG5cdFx0dGhpcy50YWcgPSBcImFkbWluLWRhc2hib2FyZFwiO1xuXHRcdHRoaXMudGl0bGUgPSBcIlwiO1xuXHRcdHRoaXMuYmFzZSA9IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRoaXMgdGFibGUgZmllbGQgdG8gdGhlIHRhYmxlXG5cdCAqL1xuXHRvblBvc3RQbGFjZSAocGFyZW50SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0aWYgKEhvdC5EYXRhLkFkbWluUGFuZWwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwgPSB7fTtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybCA9IHRoaXMuYmFzZTtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmFkZFVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5hZGRVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvYWRkYDtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmVkaXRVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwuZWRpdFVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9lZGl0YDtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLnJlbW92ZVVybCA9PSBudWxsKVxuXHRcdFx0SG90LkRhdGEuQWRtaW5QYW5lbC5yZW1vdmVVcmwgPSBgJHtIb3QuRGF0YS5BZG1pblBhbmVsLmJhc2VVcmx9L3YxL2RhdGEvcmVtb3ZlYDtcblxuXHRcdGlmIChIb3QuRGF0YS5BZG1pblBhbmVsLmxpc3RVcmwgPT0gbnVsbClcblx0XHRcdEhvdC5EYXRhLkFkbWluUGFuZWwubGlzdFVybCA9IGAke0hvdC5EYXRhLkFkbWluUGFuZWwuYmFzZVVybH0vdjEvZGF0YS9saXN0YDtcblxuXHRcdHJldHVybiAobnVsbCk7XG5cdH1cblxuXHRvdXRwdXQgKCk6IHN0cmluZ1xuXHR7XG5cdFx0cmV0dXJuIChgXG5cdFx0PG1haW4gY2xhc3M9XCJjb2wtbWQtOSBtcy1zbS1hdXRvIGNvbC1sZy0xMCBweC1tZC00XCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtd3JhcCBmbGV4LW1kLW5vd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgcHQtMyBwYi0yIG1iLTMgYm9yZGVyLWJvdHRvbVwiPlxuXHRcdFx0XHQ8aDEgY2xhc3M9XCJoMlwiPiR7dGhpcy50aXRsZX08L2gxPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXIgbWItMiBtYi1tZC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImJ0bi1ncm91cCBtZS0yXCI+XG5cdFx0XHRcdFx0XHQ8aG90LXBsYWNlLWhlcmUgbmFtZSA9IFwiZGFzaGJvYXJkSGVhZGVyXCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxob3QtcGxhY2UtaGVyZSBuYW1lID0gXCJib2R5XCI+PC9ob3QtcGxhY2UtaGVyZT5cblx0XHQ8L21haW4+YCk7XG5cdH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBBZG1pbkJ1dHRvbiB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tYnV0dG9uXCI7XG5pbXBvcnQgeyBBZG1pbkRyb3Bkb3duIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1kcm9wZG93blwiO1xuaW1wb3J0IHsgQWRtaW5EYXNoYm9hcmQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLWRhc2hib2FyZFwiO1xuaW1wb3J0IHsgQWRtaW5FZGl0IH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi1lZGl0XCI7XG5pbXBvcnQgeyBBZG1pblRhYmxlIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZVwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZUZpZWxkIH0gZnJvbSBcIi4vY29tcG9uZW50cy9hZG1pbi10YWJsZS1maWVsZFwiO1xuaW1wb3J0IHsgQWRtaW5UYWJsZVJvdyB9IGZyb20gXCIuL2NvbXBvbmVudHMvYWRtaW4tdGFibGUtcm93XCI7XG5pbXBvcnQgeyBBZG1pblRleHQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FkbWluLXRleHRcIjtcblxuZXhwb3J0IHtcblx0XHRBZG1pbkJ1dHRvbixcblx0XHRBZG1pbkRyb3Bkb3duLFxuXHRcdEFkbWluRGFzaGJvYXJkLFxuXHRcdEFkbWluRWRpdCxcblx0XHRBZG1pblRhYmxlLFxuXHRcdEFkbWluVGFibGVGaWVsZCxcblx0XHRBZG1pblRhYmxlUm93LFxuXHRcdEFkbWluVGV4dFxuXHR9OyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwiRGF0YVRhYmxlIiwiSG90U3RhcVdlYiIsIkFkbWluRHJvcGRvd24iLCJIb3RDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImNvcHkiLCJhcGkiLCJzdXBlciIsInRoaXMiLCJ0YWciLCJwbGFjZWhvbGRlciIsIm9uc2VhcmNoIiwib25zZWxlY3QiLCJvblBvc3RQbGFjZSIsInBhcmVudEh0bWxFbGVtZW50IiwiaHRtbEVsZW1lbnQiLCJwbGFjZUhlcmVBcnJheSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJwbGFjZUhlcmUiLCJyZW1vdmVDaGlsZCIsImFwcGVuZENoaWxkIiwiRnVuY3Rpb24iLCJxdWVyeVNlbGVjdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50Iiwic2VhcmNoVGV4dCIsImN1cnJlbnRUYXJnZXQiLCJ2YWx1ZSIsInJlc3VsdHMiLCJzZWFyY2hSZXN1bHRzRGl2IiwiJCIsImh0bWxFbGVtZW50cyIsImZpbmQiLCJlbXB0eSIsImlJZHgiLCJyZXN1bHQiLCJ1cmwiLCJ0ZXh0IiwiYXBwZW5kIiwic2VsZWN0ZWQiLCJpbmRleCIsImdldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsIm91dHB1dCIsImlubmVyIiwiYm9vdHN0cmFwIiwiQWRtaW5FZGl0Iiwib25BZGRDbGlja2VkIiwib25FZGl0Q2xpY2tlZCIsIm9uUmVtb3ZlQ2xpY2tlZCIsInRpdGxlIiwiYnV0dG9uX3RpdGxlIiwiYXR0YWNoZWRfbGlzdCIsInNjaGVtYSIsIm1vZGFsSWQiLCJhZGRfdGV4dCIsImFkZF9wbGFjZV9oZXJlIiwiZWRpdF90ZXh0IiwiZWRpdF9wbGFjZV9oZXJlIiwicmVtb3ZlX3RleHQiLCJyZW1vdmVfcGxhY2VfaGVyZSIsImNzc19jbGFzcyIsIm1vZGFsIiwibW9kYWxUeXBlIiwiY2xvc2VPblNhdmUiLCJzZWxlY3RlZEZpZWxkcyIsIm9uc2F2ZSIsIm9uZWRpdCIsIm9uZGVsZXRlIiwicHJvY2Vzc0hvdEZpZWxkcyIsIm9uRmllbGQiLCJlbG1zIiwiZWxtIiwiZmllbGQiLCJhdHRyIiwiZmllbGRUeXBlIiwiZmllbGRJbnB1dCIsIm5hbWUiLCJ0eXBlIiwiaW5wdXQiLCJhZGRDbGlja2VkIiwidmFsIiwib25hZGQiLCJNb2RhbCIsImdldEluc3RhbmNlIiwic2hvdyIsImdldEF0dGFjaGVkTGlzdHMiLCJzdHJzIiwic3BsaXQiLCJhdHRhY2hlZExpc3RzIiwiaSIsImF0dGFjaGVkTGlzdCIsImF0dGFjaGVkTGlzdE9iaiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwiZWRpdENsaWNrZWQiLCJhdHRhY2hlZEVkaXQiLCJzZWxlY3RlZEZpZWxkIiwiZ2V0U2VsZWN0ZWQiLCJmdW5jIiwiY2FsbCIsInJlbW92ZUNsaWNrZWQiLCJ3aGVyZUZpZWxkcyIsImhvdENvbXBvbmVudCIsImNoZWNrZWRSb3dzIiwiZ2V0Q2hlY2tlZFJvd3MiLCJjaGVja2VkUm93IiwiY29uZmlybSIsIndoZXJlRmllbGQiLCJrZXkiLCJnZXRGaWVsZFR5cGUiLCJyZW1vdmVVcmwiLCJIb3QiLCJEYXRhIiwiQWRtaW5QYW5lbCIsImpzb25SZXF1ZXN0IiwicmVmcmVzaExpc3QiLCJvblNhdmUiLCJ2YWx1ZXMiLCJmaWVsZFNhdmUiLCJhZGRVcmwiLCJmaWVsZHMiLCJhbGVydCIsImVkaXRVcmwiLCJ0YWJsZSIsImhpZGUiLCJzZXRUaW1lb3V0IiwiRXJyb3IiLCJvdXRwdXRPYmoiLCJodG1sIiwiZG9jdW1lbnRTZWxlY3RvciIsIkFkbWluQnV0dG9uIiwib25jbGljayIsImJ1dHRvbkNsaWNrZWQiLCJpZCIsIkFkbWluVGFibGUiLCJyb3dFbGVtZW50cyIsImhlYWRlcnMiLCJlbGVtZW50cyIsImluZGljaWVzIiwib25saXN0IiwibGlzdHVybCIsImNoZWNrYm94Iiwic2luZ2xlY2xpY2tlZGl0Iiwib25zZWxlY3RlZHJvdyIsImRhdGFUYWJsZSIsImlzTGlzdFJlZnJlc2hpbmciLCJhZGRIZWFkZXIiLCJ0YWJsZUZpZWxkRWxlbWVudCIsImhlYWRlciIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYWRkSGVhZGVyRGF0YU9ubHkiLCJ0YWJsZUZpZWxkIiwiZmllbGROYW1lIiwic2VsZWN0Um93Iiwicm93SW5kZXgiLCJpdGVtIiwicm93cyIsInJvdyIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwiYWRkIiwiSG90U3RhcSIsInBhcnNlQm9vbGVhbiIsImRhdGEiLCJjaGVja2JveGVzIiwiY2hlY2tlZCIsImRhdGFJbmRleFN0ciIsInBhcmVudEVsZW1lbnQiLCJkYXRhSW5kZXgiLCJwYXJzZUludCIsImdldFJvdyIsImFkZFJvdyIsInJvd3NGaWVsZHMiLCJrZXlQYXJ0cyIsInRlbXBWYWx1ZSIsInJvd09iaiIsIm9yZ0ZpZWxkIiwiZGVmYXVsdE91dHB1dCIsIm9uaW5wdXQiLCJvbm91dHB1dCIsImNsZWFyUm93cyIsImNsZWFyIiwibGlzdCIsInNlYXJjaCIsIm9mZnNldCIsImxpbWl0Iiwic2VhcmNoU3RyIiwiaW5mbyIsInBhZ2UiLCJzdGFydCIsImxpc3RVcmwiLCJlcnJvciIsImNvbnNvbGUiLCJ0Ym9keSIsIm9uIiwicGFyZW50Tm9kZSIsImNvbHVtbnMiLCJlYWNoIiwiZGF0YVR5cGUiLCJwcm9jZXNzaW5nIiwic2VydmVyU2lkZSIsImNvbFJlb3JkZXIiLCJzY3JvbGxlciIsInNlbGVjdCIsImRvbSIsImFqYXgiLCJjYWxsYmFjayIsInNldHRpbmdzIiwiY3VycmVudERhdGEiLCJjYWxsYmFja09iaiIsInJlY29yZHNUb3RhbCIsInJlY29yZHNGaWx0ZXJlZCIsIkFycmF5IiwiQWRtaW5UZXh0Iiwibm9fb3V0cHV0IiwiZmllbGRfdHlwZSIsImh0bWxUeXBlIiwiQWRtaW5UYWJsZUZpZWxkIiwicGxhY2VIZXJlUGFyZW50IiwiQWRtaW5UYWJsZVJvdyIsImVsZW1lbnQiLCJyb3dIdG1sIiwiZmllbGRPYmoiLCJBZG1pbkRhc2hib2FyZCIsImJhc2UiLCJiYXNlVXJsIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwidW5kZWZpbmVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyJdLCJzb3VyY2VSb290IjoiIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* jQuery JavaScript Library v3.7.1
|
|
3
|
+
* https://jquery.com/
|
|
4
|
+
*
|
|
5
|
+
* Copyright OpenJS Foundation and other contributors
|
|
6
|
+
* Released under the MIT license
|
|
7
|
+
* https://jquery.org/license
|
|
8
|
+
*
|
|
9
|
+
* Date: 2023-08-28T13:37Z
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/*! DataTables 2.2.2
|
|
13
|
+
* © SpryMedia Ltd - datatables.net/license
|
|
14
|
+
*/
|